commit
b03e573c98
720 changed files with 79457 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||
root = true |
|||
[*.{js,ts,vue}] |
|||
charset = utf-8 # 设置文件字符集为 utf-8 |
|||
end_of_line = lf # 控制换行类型(lf | cr | crlf) |
|||
insert_final_newline = true # 始终在文件末尾插入一个新行 |
|||
indent_style = space # 缩进风格(tab | space) |
|||
indent_size = 2 # 缩进大小 |
|||
max_line_length = 100 # 最大行长度 |
|||
|
|||
[*.md] # 仅 md 文件适用以下规则 |
|||
max_line_length = off # 关闭最大行长度限制 |
|||
trim_trailing_whitespace = false # 关闭末尾空格修剪 |
@ -0,0 +1,18 @@ |
|||
# 标题 |
|||
VITE_APP_TITLE=网宿后台管理系统 |
|||
|
|||
# 项目本地运行端口号 |
|||
VITE_PORT=80 |
|||
|
|||
# open 运行 npm run dev 时自动打开浏览器 |
|||
VITE_OPEN=true |
|||
|
|||
# 租户开关 |
|||
VITE_APP_TENANT_ENABLE=true |
|||
|
|||
# 验证码的开关 |
|||
VITE_APP_CAPTCHA_ENABLE=true |
|||
|
|||
# 百度统计 |
|||
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc |
|||
|
@ -0,0 +1,19 @@ |
|||
# 本地开发环境 |
|||
NODE_ENV=development |
|||
|
|||
VITE_DEV=true |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://localhost:48080' |
|||
|
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload' |
|||
|
|||
# 接口前缀 |
|||
VITE_API_BASEPATH=/dev-api |
|||
|
|||
# 接口地址 |
|||
VITE_API_URL=/admin-api |
|||
|
|||
# 打包路径 |
|||
VITE_BASE_PATH=/ |
@ -0,0 +1,31 @@ |
|||
# 开发环境 |
|||
NODE_ENV=development |
|||
|
|||
VITE_DEV=false |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://localhost:48080' |
|||
|
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload' |
|||
|
|||
# 接口前缀 |
|||
VITE_API_BASEPATH=/dev-api |
|||
|
|||
# 接口地址 |
|||
VITE_API_URL=/admin-api |
|||
|
|||
# 打包路径 |
|||
VITE_BASE_PATH=/ |
|||
|
|||
# 是否删除debugger |
|||
VITE_DROP_DEBUGGER=true |
|||
|
|||
# 是否删除console.log |
|||
VITE_DROP_CONSOLE=false |
|||
|
|||
# 是否sourcemap |
|||
VITE_SOURCEMAP=false |
|||
|
|||
# 输出路径 |
|||
VITE_OUT_DIR=dist |
@ -0,0 +1,34 @@ |
|||
# 本地开发环境 |
|||
NODE_ENV=development |
|||
|
|||
VITE_DEV=true |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn' |
|||
|
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload' |
|||
|
|||
# 接口前缀 |
|||
VITE_API_BASEPATH=/dev-api |
|||
|
|||
# 接口地址 |
|||
VITE_API_URL=/admin-api |
|||
|
|||
# 打包路径 |
|||
VITE_BASE_PATH=/ |
|||
|
|||
# 项目本地运行端口号, 与.vscode/launch.json配合 |
|||
VITE_PORT=80 |
|||
|
|||
# 是否删除debugger |
|||
VITE_DROP_DEBUGGER=false |
|||
|
|||
# 是否删除console.log |
|||
VITE_DROP_CONSOLE=false |
|||
|
|||
# 是否sourcemap |
|||
VITE_SOURCEMAP=true |
|||
|
|||
# 验证码的开关 |
|||
VITE_APP_CAPTCHA_ENABLE=false |
@ -0,0 +1,33 @@ |
|||
# 生产环境 |
|||
NODE_ENV=production |
|||
|
|||
VITE_DEV=false |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://119.23.220.80:16801' |
|||
|
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://119.23.220.80:16801/admin-api/infra/file/upload' |
|||
|
|||
# 接口前缀 |
|||
VITE_API_BASEPATH= |
|||
|
|||
# 接口地址 |
|||
VITE_API_URL=/admin-api |
|||
|
|||
# 是否删除debugger |
|||
VITE_DROP_DEBUGGER=true |
|||
|
|||
# 是否删除console.log |
|||
VITE_DROP_CONSOLE=true |
|||
|
|||
# 是否sourcemap |
|||
VITE_SOURCEMAP=false |
|||
|
|||
# 打包路径 |
|||
VITE_BASE_PATH=/ |
|||
|
|||
# 输出路径 |
|||
VITE_OUT_DIR=dist-pro |
|||
|
|||
VITE_APP_TITLE=金梦网后台管理系统 |
@ -0,0 +1,31 @@ |
|||
# 生产环境 |
|||
NODE_ENV=production |
|||
|
|||
VITE_DEV=false |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn' |
|||
|
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload' |
|||
|
|||
# 接口前缀 |
|||
VITE_API_BASEPATH= |
|||
|
|||
# 接口地址 |
|||
VITE_API_URL=/admin-api |
|||
|
|||
# 是否删除debugger |
|||
VITE_DROP_DEBUGGER=true |
|||
|
|||
# 是否删除console.log |
|||
VITE_DROP_CONSOLE=true |
|||
|
|||
# 是否sourcemap |
|||
VITE_SOURCEMAP=false |
|||
|
|||
# 打包路径 |
|||
VITE_BASE_PATH='http://static-vue3.yudao.iocoder.cn/' |
|||
|
|||
# 输出路径 |
|||
VITE_OUT_DIR=dist-stage |
@ -0,0 +1,31 @@ |
|||
# 开发环境 |
|||
NODE_ENV=production |
|||
|
|||
VITE_DEV=false |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://localhost:48080' |
|||
|
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload' |
|||
|
|||
# 接口前缀 |
|||
VITE_API_BASEPATH= |
|||
|
|||
# 接口地址 |
|||
VITE_API_URL=/admin-api |
|||
|
|||
# 是否删除debugger |
|||
VITE_DROP_DEBUGGER=true |
|||
|
|||
# 是否删除console.log |
|||
VITE_DROP_CONSOLE=true |
|||
|
|||
# 是否sourcemap |
|||
VITE_SOURCEMAP=false |
|||
|
|||
# 打包路径 |
|||
VITE_BASE_PATH=/admin-ui-vue3/ |
|||
|
|||
# 输出路径 |
|||
VITE_OUT_DIR=dist-dev |
@ -0,0 +1,8 @@ |
|||
/build/ |
|||
/config/ |
|||
/dist/ |
|||
/*.js |
|||
/test/unit/coverage/ |
|||
/node_modules/* |
|||
/dist* |
|||
/src/main.ts |
@ -0,0 +1,259 @@ |
|||
{ |
|||
"globals": { |
|||
"EffectScope": true, |
|||
"ElMessage": true, |
|||
"ElMessageBox": true, |
|||
"ElTag": true, |
|||
"asyncComputed": true, |
|||
"autoResetRef": true, |
|||
"computed": true, |
|||
"computedAsync": true, |
|||
"computedEager": true, |
|||
"computedInject": true, |
|||
"computedWithControl": true, |
|||
"controlledComputed": true, |
|||
"controlledRef": true, |
|||
"createApp": true, |
|||
"createEventHook": true, |
|||
"createGlobalState": true, |
|||
"createInjectionState": true, |
|||
"createReactiveFn": true, |
|||
"createSharedComposable": true, |
|||
"createUnrefFn": true, |
|||
"customRef": true, |
|||
"debouncedRef": true, |
|||
"debouncedWatch": true, |
|||
"defineAsyncComponent": true, |
|||
"defineComponent": true, |
|||
"eagerComputed": true, |
|||
"effectScope": true, |
|||
"extendRef": true, |
|||
"getCurrentInstance": true, |
|||
"getCurrentScope": true, |
|||
"h": true, |
|||
"ignorableWatch": true, |
|||
"inject": true, |
|||
"isDefined": true, |
|||
"isProxy": true, |
|||
"isReactive": true, |
|||
"isReadonly": true, |
|||
"isRef": true, |
|||
"makeDestructurable": true, |
|||
"markRaw": true, |
|||
"nextTick": true, |
|||
"onActivated": true, |
|||
"onBeforeMount": true, |
|||
"onBeforeUnmount": true, |
|||
"onBeforeUpdate": true, |
|||
"onClickOutside": true, |
|||
"onDeactivated": true, |
|||
"onErrorCaptured": true, |
|||
"onKeyStroke": true, |
|||
"onLongPress": true, |
|||
"onMounted": true, |
|||
"onRenderTracked": true, |
|||
"onRenderTriggered": true, |
|||
"onScopeDispose": true, |
|||
"onServerPrefetch": true, |
|||
"onStartTyping": true, |
|||
"onUnmounted": true, |
|||
"onUpdated": true, |
|||
"pausableWatch": true, |
|||
"provide": true, |
|||
"reactify": true, |
|||
"reactifyObject": true, |
|||
"reactive": true, |
|||
"reactiveComputed": true, |
|||
"reactiveOmit": true, |
|||
"reactivePick": true, |
|||
"readonly": true, |
|||
"ref": true, |
|||
"refAutoReset": true, |
|||
"refDebounced": true, |
|||
"refDefault": true, |
|||
"refThrottled": true, |
|||
"refWithControl": true, |
|||
"resolveComponent": true, |
|||
"resolveRef": true, |
|||
"resolveUnref": true, |
|||
"shallowReactive": true, |
|||
"shallowReadonly": true, |
|||
"shallowRef": true, |
|||
"syncRef": true, |
|||
"syncRefs": true, |
|||
"templateRef": true, |
|||
"throttledRef": true, |
|||
"throttledWatch": true, |
|||
"toRaw": true, |
|||
"toReactive": true, |
|||
"toRef": true, |
|||
"toRefs": true, |
|||
"triggerRef": true, |
|||
"tryOnBeforeMount": true, |
|||
"tryOnBeforeUnmount": true, |
|||
"tryOnMounted": true, |
|||
"tryOnScopeDispose": true, |
|||
"tryOnUnmounted": true, |
|||
"unref": true, |
|||
"unrefElement": true, |
|||
"until": true, |
|||
"useActiveElement": true, |
|||
"useArrayEvery": true, |
|||
"useArrayFilter": true, |
|||
"useArrayFind": true, |
|||
"useArrayFindIndex": true, |
|||
"useArrayJoin": true, |
|||
"useArrayMap": true, |
|||
"useArrayReduce": true, |
|||
"useArraySome": true, |
|||
"useAsyncQueue": true, |
|||
"useAsyncState": true, |
|||
"useAttrs": true, |
|||
"useBase64": true, |
|||
"useBattery": true, |
|||
"useBluetooth": true, |
|||
"useBreakpoints": true, |
|||
"useBroadcastChannel": true, |
|||
"useBrowserLocation": true, |
|||
"useCached": true, |
|||
"useClipboard": true, |
|||
"useColorMode": true, |
|||
"useConfirmDialog": true, |
|||
"useCounter": true, |
|||
"useCssModule": true, |
|||
"useCssVar": true, |
|||
"useCssVars": true, |
|||
"useCurrentElement": true, |
|||
"useCycleList": true, |
|||
"useDark": true, |
|||
"useDateFormat": true, |
|||
"useDebounce": true, |
|||
"useDebounceFn": true, |
|||
"useDebouncedRefHistory": true, |
|||
"useDeviceMotion": true, |
|||
"useDeviceOrientation": true, |
|||
"useDevicePixelRatio": true, |
|||
"useDevicesList": true, |
|||
"useDisplayMedia": true, |
|||
"useDocumentVisibility": true, |
|||
"useDraggable": true, |
|||
"useDropZone": true, |
|||
"useElementBounding": true, |
|||
"useElementByPoint": true, |
|||
"useElementHover": true, |
|||
"useElementSize": true, |
|||
"useElementVisibility": true, |
|||
"useEventBus": true, |
|||
"useEventListener": true, |
|||
"useEventSource": true, |
|||
"useEyeDropper": true, |
|||
"useFavicon": true, |
|||
"useFetch": true, |
|||
"useFileDialog": true, |
|||
"useFileSystemAccess": true, |
|||
"useFocus": true, |
|||
"useFocusWithin": true, |
|||
"useFps": true, |
|||
"useFullscreen": true, |
|||
"useGamepad": true, |
|||
"useGeolocation": true, |
|||
"useIdle": true, |
|||
"useImage": true, |
|||
"useInfiniteScroll": true, |
|||
"useIntersectionObserver": true, |
|||
"useInterval": true, |
|||
"useIntervalFn": true, |
|||
"useKeyModifier": true, |
|||
"useLastChanged": true, |
|||
"useLocalStorage": true, |
|||
"useMagicKeys": true, |
|||
"useManualRefHistory": true, |
|||
"useMediaControls": true, |
|||
"useMediaQuery": true, |
|||
"useMemoize": true, |
|||
"useMemory": true, |
|||
"useMounted": true, |
|||
"useMouse": true, |
|||
"useMouseInElement": true, |
|||
"useMousePressed": true, |
|||
"useMutationObserver": true, |
|||
"useNavigatorLanguage": true, |
|||
"useNetwork": true, |
|||
"useNow": true, |
|||
"useObjectUrl": true, |
|||
"useOffsetPagination": true, |
|||
"useOnline": true, |
|||
"usePageLeave": true, |
|||
"useParallax": true, |
|||
"usePermission": true, |
|||
"usePointer": true, |
|||
"usePointerSwipe": true, |
|||
"usePreferredColorScheme": true, |
|||
"usePreferredDark": true, |
|||
"usePreferredLanguages": true, |
|||
"useRafFn": true, |
|||
"useRefHistory": true, |
|||
"useResizeObserver": true, |
|||
"useRoute": true, |
|||
"useRouter": true, |
|||
"useScreenOrientation": true, |
|||
"useScreenSafeArea": true, |
|||
"useScriptTag": true, |
|||
"useScroll": true, |
|||
"useScrollLock": true, |
|||
"useSessionStorage": true, |
|||
"useShare": true, |
|||
"useSlots": true, |
|||
"useSpeechRecognition": true, |
|||
"useSpeechSynthesis": true, |
|||
"useStepper": true, |
|||
"useStorage": true, |
|||
"useStorageAsync": true, |
|||
"useStyleTag": true, |
|||
"useSupported": true, |
|||
"useSwipe": true, |
|||
"useTemplateRefsList": true, |
|||
"useTextDirection": true, |
|||
"useTextSelection": true, |
|||
"useTextareaAutosize": true, |
|||
"useThrottle": true, |
|||
"useThrottleFn": true, |
|||
"useThrottledRefHistory": true, |
|||
"useTimeAgo": true, |
|||
"useTimeout": true, |
|||
"useTimeoutFn": true, |
|||
"useTimeoutPoll": true, |
|||
"useTimestamp": true, |
|||
"useTitle": true, |
|||
"useToggle": true, |
|||
"useTransition": true, |
|||
"useUrlSearchParams": true, |
|||
"useUserMedia": true, |
|||
"useVModel": true, |
|||
"useVModels": true, |
|||
"useVibrate": true, |
|||
"useVirtualList": true, |
|||
"useWakeLock": true, |
|||
"useWebNotification": true, |
|||
"useWebSocket": true, |
|||
"useWebWorker": true, |
|||
"useWebWorkerFn": true, |
|||
"useWindowFocus": true, |
|||
"useWindowScroll": true, |
|||
"useWindowSize": true, |
|||
"watch": true, |
|||
"watchArray": true, |
|||
"watchAtMost": true, |
|||
"watchDebounced": true, |
|||
"watchEffect": true, |
|||
"watchIgnorable": true, |
|||
"watchOnce": true, |
|||
"watchPausable": true, |
|||
"watchPostEffect": true, |
|||
"watchSyncEffect": true, |
|||
"watchThrottled": true, |
|||
"watchTriggerable": true, |
|||
"watchWithFilter": true, |
|||
"whenever": true |
|||
} |
|||
} |
@ -0,0 +1,71 @@ |
|||
// @ts-check
|
|||
const { defineConfig } = require('eslint-define-config') |
|||
module.exports = defineConfig({ |
|||
root: true, |
|||
env: { |
|||
browser: true, |
|||
node: true, |
|||
es6: true |
|||
}, |
|||
parser: 'vue-eslint-parser', |
|||
plugins: ['vue'], |
|||
parserOptions: { |
|||
parser: '@typescript-eslint/parser', |
|||
ecmaVersion: 2020, |
|||
sourceType: 'module', |
|||
jsxPragma: 'React', |
|||
ecmaFeatures: { |
|||
jsx: true |
|||
} |
|||
}, |
|||
extends: [ |
|||
'plugin:vue/vue3-recommended', |
|||
'plugin:@typescript-eslint/recommended', |
|||
'prettier', |
|||
'plugin:prettier/recommended' |
|||
], |
|||
rules: { |
|||
'vue/script-setup-uses-vars': 'error', |
|||
'vue/no-reserved-component-names': 'off', |
|||
'vue/no-setup-props-destructure': 'off', |
|||
'@typescript-eslint/ban-ts-ignore': 'off', |
|||
'@typescript-eslint/explicit-function-return-type': 'off', |
|||
'@typescript-eslint/no-explicit-any': 'off', |
|||
'@typescript-eslint/no-var-requires': 'off', |
|||
'@typescript-eslint/no-empty-function': 'off', |
|||
'vue/custom-event-name-casing': 'off', |
|||
'no-use-before-define': 'off', |
|||
'@typescript-eslint/no-use-before-define': 'off', |
|||
'@typescript-eslint/ban-ts-comment': 'off', |
|||
'@typescript-eslint/ban-types': 'off', |
|||
'@typescript-eslint/no-non-null-assertion': 'off', |
|||
'@typescript-eslint/explicit-module-boundary-types': 'off', |
|||
'@typescript-eslint/no-unused-vars': 'off', |
|||
'no-unused-vars': 'off', |
|||
'space-before-function-paren': 'off', |
|||
|
|||
'vue/attributes-order': 'off', |
|||
'vue/one-component-per-file': 'off', |
|||
'vue/html-closing-bracket-newline': 'off', |
|||
'vue/max-attributes-per-line': 'off', |
|||
'vue/multiline-html-element-content-newline': 'off', |
|||
'vue/singleline-html-element-content-newline': 'off', |
|||
'vue/attribute-hyphenation': 'off', |
|||
'vue/require-default-prop': 'off', |
|||
'vue/require-explicit-emits': 'off', |
|||
'vue/html-self-closing': [ |
|||
'error', |
|||
{ |
|||
html: { |
|||
void: 'always', |
|||
normal: 'never', |
|||
component: 'always' |
|||
}, |
|||
svg: 'always', |
|||
math: 'always' |
|||
} |
|||
], |
|||
'vue/multi-word-component-names': 'off', |
|||
'vue/no-v-html': 'off' |
|||
} |
|||
}) |
@ -0,0 +1,11 @@ |
|||
node_modules |
|||
.DS_Store |
|||
dist |
|||
dist-ssr |
|||
*.local |
|||
/dist* |
|||
*-lock.* |
|||
pnpm-debug |
|||
auto-*.d.ts |
|||
.idea |
|||
.history |
@ -0,0 +1,11 @@ |
|||
/node_modules/** |
|||
/dist/ |
|||
/dist* |
|||
/public/* |
|||
/docs/* |
|||
/vite.config.ts |
|||
/src/types/env.d.ts |
|||
/src/types/auto-components.d.ts |
|||
/src/types/auto-imports.d.ts |
|||
/docs/**/* |
|||
CHANGELOG |
@ -0,0 +1,6 @@ |
|||
/dist/* |
|||
/public/* |
|||
public/* |
|||
/dist* |
|||
/src/types/env.d.ts |
|||
/docs/**/* |
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2021-present Archer |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,235 @@ |
|||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!** |
|||
|
|||
**「我喜欢写代码,乐此不疲」** |
|||
**「我喜欢做开源,以此为乐」** |
|||
|
|||
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。 |
|||
|
|||
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 |
|||
|
|||
## 🐶 新手必读 |
|||
|
|||
* nodejs > 16.0.0 && pnpm > 8.6.0 (强制使用pnpm) |
|||
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn> |
|||
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn> |
|||
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn> |
|||
* 启动文档:<https://doc.iocoder.cn/quick-start/> |
|||
* 视频教程:<https://doc.iocoder.cn/video/> |
|||
|
|||
## 🐯 平台简介 |
|||
|
|||
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 |
|||
|
|||
* 采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) 实现 |
|||
* 改换 saas,自动引入等功能 |
|||
* 使用 Element Plus 免费开源的中后台模版,具备如下特性: |
|||
|
|||
 |
|||
|
|||
* **最新技术栈**:使用 Vue3、Vite4 等前端前沿技术开发 |
|||
* **TypeScript**: 应用程序级 JavaScript 的语言 |
|||
* **主题**: 可配置的主题 |
|||
* **国际化**:内置完善的国际化方案 |
|||
* **权限**:内置完善的动态路由权限生成方案 |
|||
* **组件**:二次封装了多个常用的组件 |
|||
* **示例**:内置丰富的示例 |
|||
|
|||
## 技术栈 |
|||
|
|||
| 框架 | 说明 | 版本 | |
|||
|----------------------------------------------------------------------|------------------|--------| |
|||
| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.4 | |
|||
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.4.8 | |
|||
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.3.9 | |
|||
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.1.6 | |
|||
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.6 | |
|||
| [vueuse](https://vueuse.org/) | 常用工具集 | 10.3.0 | |
|||
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 | |
|||
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.4 | |
|||
| [unocss](https://uno.antfu.me/) | 原子 css | 0.54.1 | |
|||
| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.1.1 | |
|||
| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 | |
|||
|
|||
## 开发工具 |
|||
|
|||
推荐 VS Code 开发,配合插件如下: |
|||
|
|||
| 插件名 | 功能 | |
|||
|-------------------------------|--------------------------| |
|||
| TypeScript Vue Plugin (Volar) | 用于 TypeScript 的 Vue 插件 | |
|||
| Vue Language Features (Volar) | Vue3.0 语法支持 | |
|||
| unocss | unocss for vscode | |
|||
| Iconify IntelliSense | Iconify 预览和搜索 | |
|||
| i18n Ally | 国际化智能提示 | |
|||
| Stylelint | Css 格式化 | |
|||
| Prettier | 代码格式化 | |
|||
| ESLint | 脚本代码检查 | |
|||
| DotENV | env 文件高亮 | |
|||
|
|||
## 内置功能 |
|||
|
|||
系统内置多种多种业务功能,可以用于快速你的业务系统: |
|||
|
|||
* 系统功能 |
|||
* 基础设施 |
|||
* 工作流程 |
|||
* 支付系统 |
|||
* 会员中心 |
|||
* 数据报表 |
|||
* 商城系统 |
|||
* 微信公众号 |
|||
|
|||
### 系统功能 |
|||
|
|||
| | 功能 | 描述 | |
|||
|-----|-------|---------------------------------| |
|||
| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | |
|||
| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | |
|||
| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | |
|||
| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 | |
|||
| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | |
|||
| | 岗位管理 | 配置系统用户所属担任职务 | |
|||
| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 | |
|||
| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 | |
|||
| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | |
|||
| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 | |
|||
| 🚀 | 邮件管理 | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台 | |
|||
| 🚀 | 站内信 | 系统内的消息通知,提供站内信模版、站内信消息 | |
|||
| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | |
|||
| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 | |
|||
| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | |
|||
| | 通知公告 | 系统通知公告信息发布维护 | |
|||
| 🚀 | 敏感词 | 配置系统敏感词,支持标签分组 | |
|||
| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 | |
|||
| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 | |
|||
|
|||
### 工作流程 |
|||
|
|||
| | 功能 | 描述 | |
|||
|-----|-------|----------------------------------------| |
|||
| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 | |
|||
| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 | |
|||
| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 | |
|||
| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 | |
|||
| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 | |
|||
| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 | |
|||
| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 | |
|||
|
|||
### 支付系统 |
|||
|
|||
| | 功能 | 描述 | |
|||
|-----|------|---------------------------| |
|||
| 🚀 | 商户信息 | 管理商户信息,支持 Saas 场景下的多商户功能 | |
|||
| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 | |
|||
| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 | |
|||
| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 | |
|||
|
|||
ps:核心功能已经实现,正在对接微信小程序中... |
|||
|
|||
### 基础设施 |
|||
|
|||
| | 功能 | 描述 | |
|||
|-----|----------|----------------------------------------------| |
|||
| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 | |
|||
| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 | |
|||
| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 | |
|||
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 | |
|||
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 | |
|||
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | |
|||
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 | |
|||
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | |
|||
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | |
|||
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | |
|||
| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 | |
|||
| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | |
|||
| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 | |
|||
| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 | |
|||
| 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 | |
|||
| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 | |
|||
| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 | |
|||
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 | |
|||
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | |
|||
|
|||
### 数据报表 |
|||
|
|||
| | 功能 | 描述 | |
|||
|-----|-------|--------------------| |
|||
| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 | |
|||
| 🚀 | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 | |
|||
|
|||
### 微信公众号 |
|||
|
|||
| | 功能 | 描述 | |
|||
|-----|--------|-------------------------------| |
|||
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 | |
|||
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 | |
|||
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 | |
|||
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 | |
|||
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 | |
|||
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 | |
|||
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 | |
|||
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 | |
|||
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 | |
|||
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 | |
|||
|
|||
### 商城系统 |
|||
|
|||
建设中... |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
## 🐷 演示图 |
|||
|
|||
### 系统功能 |
|||
|
|||
| 模块 | biu | biu | biu | |
|||
|------------|--------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------| |
|||
| 登录 & 首页 |  |  |  | |
|||
| 用户 & 应用 |  |  |  | |
|||
| 租户 & 套餐 |  |  | - | |
|||
| 部门 & 岗位 |  |  | - | |
|||
| 菜单 & 角色 |  |  | - | |
|||
| 审计日志 |  |  | - | |
|||
| 短信 |  |  |  | |
|||
| 字典 & 敏感词 |  |  |  | |
|||
| 错误码 & 通知 |  |  | - | |
|||
|
|||
### 工作流程 |
|||
|
|||
| 模块 | biu | biu | biu | |
|||
|---------|------------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------| |
|||
| 流程模型 |  |  |  | |
|||
| 表单 & 分组 |  |  | - | |
|||
| 我的流程 |  |  |  | |
|||
| 待办 & 已办 |  |  |  | |
|||
| OA 请假 |  |  |  | |
|||
|
|||
### 基础设施 |
|||
|
|||
| 模块 | biu | biu | biu | |
|||
|---------------|----------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------| |
|||
| 代码生成 |  |  | - | |
|||
| 文档 |  |  | - | |
|||
| 文件 & 配置 |  |  |  | |
|||
| 定时任务 |  |  | - | |
|||
| API 日志 |  |  | - | |
|||
| MySQL & Redis |  |  | - | |
|||
| 监控平台 |  |  |  | |
|||
|
|||
### 支付系统 |
|||
|
|||
| 模块 | biu | biu | biu | |
|||
|---------|------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------| |
|||
| 商家 & 应用 |  |  |  | |
|||
| 支付 & 退款 |  |  | --- | |
|||
|
|||
### 数据报表 |
|||
|
|||
| 模块 | biu | biu | biu | |
|||
|-------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------| |
|||
| 报表设计器 |  |  |  | |
|||
| 大屏设计器 |  |  |  | |
@ -0,0 +1,107 @@ |
|||
import { resolve } from 'path' |
|||
import Vue from '@vitejs/plugin-vue' |
|||
import VueJsx from '@vitejs/plugin-vue-jsx' |
|||
import progress from 'vite-plugin-progress' |
|||
import EslintPlugin from 'vite-plugin-eslint' |
|||
import PurgeIcons from 'vite-plugin-purge-icons' |
|||
import { ViteEjsPlugin } from 'vite-plugin-ejs' |
|||
// @ts-ignore
|
|||
import ElementPlus from 'unplugin-element-plus/vite' |
|||
import AutoImport from 'unplugin-auto-import/vite' |
|||
import Components from 'unplugin-vue-components/vite' |
|||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' |
|||
import viteCompression from 'vite-plugin-compression' |
|||
import topLevelAwait from 'vite-plugin-top-level-await' |
|||
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' |
|||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' |
|||
import UnoCSS from 'unocss/vite' |
|||
|
|||
export function createVitePlugins() { |
|||
const root = process.cwd() |
|||
|
|||
// 路径查找
|
|||
function pathResolve(dir: string) { |
|||
return resolve(root, '.', dir) |
|||
} |
|||
|
|||
return [ |
|||
Vue(), |
|||
VueJsx(), |
|||
UnoCSS(), |
|||
progress(), |
|||
PurgeIcons(), |
|||
ElementPlus({}), |
|||
AutoImport({ |
|||
include: [ |
|||
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
|
|||
/\.vue$/, |
|||
/\.vue\?vue/, // .vue
|
|||
/\.md$/ // .md
|
|||
], |
|||
imports: [ |
|||
'vue', |
|||
'vue-router', |
|||
// 可额外添加需要 autoImport 的组件
|
|||
{ |
|||
'@/hooks/web/useI18n': ['useI18n'], |
|||
'@/hooks/web/useMessage': ['useMessage'], |
|||
'@/hooks/web/useTable': ['useTable'], |
|||
'@/hooks/web/useCrudSchemas': ['useCrudSchemas'], |
|||
'@/utils/formRules': ['required'], |
|||
'@/utils/dict': ['DICT_TYPE'] |
|||
} |
|||
], |
|||
dts: 'src/types/auto-imports.d.ts', |
|||
resolvers: [ElementPlusResolver()], |
|||
eslintrc: { |
|||
enabled: false, // Default `false`
|
|||
filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
|
|||
globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
|
|||
} |
|||
}), |
|||
Components({ |
|||
// 要搜索组件的目录的相对路径
|
|||
dirs: ['src/components'], |
|||
// 组件的有效文件扩展名
|
|||
extensions: ['vue', 'md'], |
|||
// 搜索子目录
|
|||
deep: true, |
|||
include: [/\.vue$/, /\.vue\?vue/], |
|||
// 生成自定义 `auto-components.d.ts` 全局声明
|
|||
dts: 'src/types/auto-components.d.ts', |
|||
// 自定义组件的解析器
|
|||
resolvers: [ElementPlusResolver()], |
|||
exclude: [/[\\/]node_modules[\\/]/] |
|||
}), |
|||
EslintPlugin({ |
|||
cache: false, |
|||
include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
|
|||
}), |
|||
VueI18nPlugin({ |
|||
runtimeOnly: true, |
|||
compositionOnly: true, |
|||
include: [resolve(__dirname, 'src/locales/**')] |
|||
}), |
|||
createSvgIconsPlugin({ |
|||
iconDirs: [pathResolve('src/assets/svgs')], |
|||
symbolId: 'icon-[dir]-[name]', |
|||
svgoOptions: true |
|||
}), |
|||
viteCompression({ |
|||
verbose: true, // 是否在控制台输出压缩结果
|
|||
disable: false, // 是否禁用
|
|||
threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
|
|||
algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
|
|||
ext: '.gz', // 生成的压缩包后缀
|
|||
deleteOriginFile: false //压缩后是否删除源文件
|
|||
}), |
|||
ViteEjsPlugin(), |
|||
topLevelAwait({ |
|||
// https://juejin.cn/post/7152191742513512485
|
|||
// The export name of top-level await promise for each chunk module
|
|||
promiseExportName: '__tla', |
|||
// The function to generate import names of top-level await promise in each chunk module
|
|||
promiseImportName: (i) => `__tla_${i}` |
|||
}) |
|||
] |
|||
} |
@ -0,0 +1,110 @@ |
|||
const include = [ |
|||
'qs', |
|||
'url', |
|||
'vue', |
|||
'sass', |
|||
'mitt', |
|||
'axios', |
|||
'pinia', |
|||
'dayjs', |
|||
'qrcode', |
|||
'unocss', |
|||
'vue-router', |
|||
'vue-types', |
|||
'vue-i18n', |
|||
'crypto-js', |
|||
'cropperjs', |
|||
'lodash-es', |
|||
'nprogress', |
|||
'web-storage-cache', |
|||
'@iconify/iconify', |
|||
'@vueuse/core', |
|||
'@zxcvbn-ts/core', |
|||
'echarts/core', |
|||
'echarts/charts', |
|||
'echarts/components', |
|||
'echarts/renderers', |
|||
'echarts-wordcloud', |
|||
'@wangeditor/editor', |
|||
'@wangeditor/editor-for-vue', |
|||
'element-plus', |
|||
'element-plus/es', |
|||
'element-plus/es/locale/lang/zh-cn', |
|||
'element-plus/es/locale/lang/en', |
|||
'element-plus/es/components/backtop/style/css', |
|||
'element-plus/es/components/form/style/css', |
|||
'element-plus/es/components/radio-group/style/css', |
|||
'element-plus/es/components/radio/style/css', |
|||
'element-plus/es/components/checkbox/style/css', |
|||
'element-plus/es/components/checkbox-group/style/css', |
|||
'element-plus/es/components/switch/style/css', |
|||
'element-plus/es/components/time-picker/style/css', |
|||
'element-plus/es/components/date-picker/style/css', |
|||
'element-plus/es/components/descriptions/style/css', |
|||
'element-plus/es/components/descriptions-item/style/css', |
|||
'element-plus/es/components/link/style/css', |
|||
'element-plus/es/components/tooltip/style/css', |
|||
'element-plus/es/components/drawer/style/css', |
|||
'element-plus/es/components/dialog/style/css', |
|||
'element-plus/es/components/checkbox-button/style/css', |
|||
'element-plus/es/components/option-group/style/css', |
|||
'element-plus/es/components/radio-button/style/css', |
|||
'element-plus/es/components/cascader/style/css', |
|||
'element-plus/es/components/color-picker/style/css', |
|||
'element-plus/es/components/input-number/style/css', |
|||
'element-plus/es/components/rate/style/css', |
|||
'element-plus/es/components/select-v2/style/css', |
|||
'element-plus/es/components/tree-select/style/css', |
|||
'element-plus/es/components/slider/style/css', |
|||
'element-plus/es/components/time-select/style/css', |
|||
'element-plus/es/components/autocomplete/style/css', |
|||
'element-plus/es/components/image-viewer/style/css', |
|||
'element-plus/es/components/upload/style/css', |
|||
'element-plus/es/components/col/style/css', |
|||
'element-plus/es/components/form-item/style/css', |
|||
'element-plus/es/components/alert/style/css', |
|||
'element-plus/es/components/breadcrumb/style/css', |
|||
'element-plus/es/components/select/style/css', |
|||
'element-plus/es/components/input/style/css', |
|||
'element-plus/es/components/breadcrumb-item/style/css', |
|||
'element-plus/es/components/tag/style/css', |
|||
'element-plus/es/components/pagination/style/css', |
|||
'element-plus/es/components/table/style/css', |
|||
'element-plus/es/components/table-v2/style/css', |
|||
'element-plus/es/components/table-column/style/css', |
|||
'element-plus/es/components/card/style/css', |
|||
'element-plus/es/components/row/style/css', |
|||
'element-plus/es/components/button/style/css', |
|||
'element-plus/es/components/menu/style/css', |
|||
'element-plus/es/components/sub-menu/style/css', |
|||
'element-plus/es/components/menu-item/style/css', |
|||
'element-plus/es/components/option/style/css', |
|||
'element-plus/es/components/dropdown/style/css', |
|||
'element-plus/es/components/dropdown-menu/style/css', |
|||
'element-plus/es/components/dropdown-item/style/css', |
|||
'element-plus/es/components/skeleton/style/css', |
|||
'element-plus/es/components/skeleton/style/css', |
|||
'element-plus/es/components/backtop/style/css', |
|||
'element-plus/es/components/menu/style/css', |
|||
'element-plus/es/components/sub-menu/style/css', |
|||
'element-plus/es/components/menu-item/style/css', |
|||
'element-plus/es/components/dropdown/style/css', |
|||
'element-plus/es/components/tree/style/css', |
|||
'element-plus/es/components/dropdown-menu/style/css', |
|||
'element-plus/es/components/dropdown-item/style/css', |
|||
'element-plus/es/components/badge/style/css', |
|||
'element-plus/es/components/breadcrumb/style/css', |
|||
'element-plus/es/components/breadcrumb-item/style/css', |
|||
'element-plus/es/components/image/style/css', |
|||
'element-plus/es/components/collapse-transition/style/css', |
|||
'element-plus/es/components/timeline/style/css', |
|||
'element-plus/es/components/timeline-item/style/css', |
|||
'element-plus/es/components/collapse/style/css', |
|||
'element-plus/es/components/collapse-item/style/css', |
|||
'element-plus/es/components/button-group/style/css', |
|||
'element-plus/es/components/text/style/css' |
|||
] |
|||
|
|||
const exclude = ['@iconify/json'] |
|||
|
|||
export { include, exclude } |
@ -0,0 +1,151 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<link rel="icon" href="/favicon.ico" /> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<meta |
|||
name="keywords" |
|||
content="网宿后台管理系统" |
|||
/> |
|||
<meta |
|||
name="description" |
|||
content="网宿后台管理系统" |
|||
/> |
|||
<title>%VITE_APP_TITLE%</title> |
|||
</head> |
|||
<body> |
|||
<div id="app"> |
|||
<style> |
|||
.app-loading { |
|||
display: flex; |
|||
width: 100%; |
|||
height: 100%; |
|||
justify-content: center; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
background: #f0f2f5; |
|||
} |
|||
|
|||
.app-loading .app-loading-wrap { |
|||
position: absolute; |
|||
top: 50%; |
|||
left: 50%; |
|||
display: flex; |
|||
-webkit-transform: translate3d(-50%, -50%, 0); |
|||
transform: translate3d(-50%, -50%, 0); |
|||
justify-content: center; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
} |
|||
|
|||
.app-loading .app-loading-title { |
|||
margin-bottom: 30px; |
|||
font-size: 20px; |
|||
font-weight: bold; |
|||
text-align: center; |
|||
} |
|||
|
|||
.app-loading .app-loading-logo { |
|||
width: 100px; |
|||
margin: 0 auto 15px auto; |
|||
} |
|||
|
|||
.app-loading .app-loading-item { |
|||
position: relative; |
|||
display: inline-block; |
|||
width: 60px; |
|||
height: 60px; |
|||
vertical-align: middle; |
|||
border-radius: 50%; |
|||
} |
|||
|
|||
.app-loading .app-loading-outter { |
|||
position: absolute; |
|||
width: 100%; |
|||
height: 100%; |
|||
border: 4px solid #2d8cf0; |
|||
border-bottom: 0; |
|||
border-left-color: transparent; |
|||
border-radius: 50%; |
|||
animation: loader-outter 1s cubic-bezier(0.42, 0.61, 0.58, 0.41) infinite; |
|||
} |
|||
|
|||
.app-loading .app-loading-inner { |
|||
position: absolute; |
|||
top: calc(50% - 20px); |
|||
left: calc(50% - 20px); |
|||
width: 40px; |
|||
height: 40px; |
|||
border: 4px solid #87bdff; |
|||
border-right: 0; |
|||
border-top-color: transparent; |
|||
border-radius: 50%; |
|||
animation: loader-inner 1s cubic-bezier(0.42, 0.61, 0.58, 0.41) infinite; |
|||
} |
|||
|
|||
@-webkit-keyframes loader-outter { |
|||
0% { |
|||
-webkit-transform: rotate(0deg); |
|||
transform: rotate(0deg); |
|||
} |
|||
|
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
|
|||
@keyframes loader-outter { |
|||
0% { |
|||
-webkit-transform: rotate(0deg); |
|||
transform: rotate(0deg); |
|||
} |
|||
|
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
|
|||
@-webkit-keyframes loader-inner { |
|||
0% { |
|||
-webkit-transform: rotate(0deg); |
|||
transform: rotate(0deg); |
|||
} |
|||
|
|||
100% { |
|||
-webkit-transform: rotate(-360deg); |
|||
transform: rotate(-360deg); |
|||
} |
|||
} |
|||
|
|||
@keyframes loader-inner { |
|||
0% { |
|||
-webkit-transform: rotate(0deg); |
|||
transform: rotate(0deg); |
|||
} |
|||
|
|||
100% { |
|||
-webkit-transform: rotate(-360deg); |
|||
transform: rotate(-360deg); |
|||
} |
|||
} |
|||
</style> |
|||
<div class="app-loading"> |
|||
<div class="app-loading-wrap"> |
|||
<div class="app-loading-title"> |
|||
<img src="/logo.gif" class="app-loading-logo" alt="Logo" /> |
|||
<div class="app-loading-title">%VITE_APP_TITLE%</div> |
|||
</div> |
|||
<div class="app-loading-item"> |
|||
<div class="app-loading-outter"></div> |
|||
<div class="app-loading-inner"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<script type="module" src="/src/main.ts"></script> |
|||
</body> |
|||
</html> |
@ -0,0 +1,146 @@ |
|||
{ |
|||
"name": "yudao-ui-admin-vue3", |
|||
"version": "1.8.0-snapshot", |
|||
"description": "基于vue3、vite4、element-plus、typesScript", |
|||
"author": "xingyu", |
|||
"private": false, |
|||
"scripts": { |
|||
"i": "pnpm install", |
|||
"dev": "vite --mode base", |
|||
"front": "vite --mode pro", |
|||
"ts:check": "vue-tsc --noEmit", |
|||
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro", |
|||
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev", |
|||
"build:base": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode base", |
|||
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage", |
|||
"build:static": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode static", |
|||
"build:front": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode front", |
|||
"serve:pro": "vite preview --mode pro", |
|||
"serve:dev": "vite preview --mode dev", |
|||
"preview": "pnpm build:base && vite preview", |
|||
"clean": "npx rimraf node_modules", |
|||
"clean:cache": "npx rimraf node_modules/.cache", |
|||
"lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src", |
|||
"lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"", |
|||
"lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", |
|||
"lint:lint-staged": "lint-staged -c " |
|||
}, |
|||
"dependencies": { |
|||
"@element-plus/icons-vue": "^2.1.0", |
|||
"@form-create/designer": "^3.1.0", |
|||
"@form-create/element-ui": "^3.1.17", |
|||
"@iconify/iconify": "^3.1.1", |
|||
"@videojs-player/vue": "^1.0.0", |
|||
"@vueuse/core": "^10.3.0", |
|||
"@wangeditor/editor": "^5.1.23", |
|||
"@wangeditor/editor-for-vue": "^5.1.10", |
|||
"@zxcvbn-ts/core": "^3.0.3", |
|||
"ali-oss": "^6.18.0", |
|||
"animate.css": "^4.1.1", |
|||
"axios": "^1.4.0", |
|||
"benz-amr-recorder": "^1.1.5", |
|||
"bpmn-js-token-simulation": "^0.10.0", |
|||
"camunda-bpmn-moddle": "^7.0.1", |
|||
"cropperjs": "^1.5.13", |
|||
"crypto-js": "^4.1.1", |
|||
"dayjs": "^1.11.9", |
|||
"diagram-js": "^11.6.0", |
|||
"echarts": "^5.4.3", |
|||
"echarts-wordcloud": "^2.1.0", |
|||
"element-plus": "2.3.9", |
|||
"fast-xml-parser": "^4.2.7", |
|||
"highlight.js": "^11.8.0", |
|||
"intro.js": "^7.0.1", |
|||
"jsencrypt": "^3.3.2", |
|||
"lodash-es": "^4.17.21", |
|||
"min-dash": "^4.1.1", |
|||
"mitt": "^3.0.1", |
|||
"nprogress": "^0.2.0", |
|||
"pinia": "^2.1.6", |
|||
"qrcode": "^1.5.3", |
|||
"qs": "^6.11.2", |
|||
"steady-xml": "^0.1.0", |
|||
"url": "^0.11.1", |
|||
"video.js": "^7.21.5", |
|||
"vue": "3.3.4", |
|||
"vue-dompurify-html": "^4.1.4", |
|||
"vue-i18n": "9.2.2", |
|||
"vue-router": "^4.2.4", |
|||
"vue-types": "^5.1.1", |
|||
"vuedraggable": "^4.1.0", |
|||
"web-storage-cache": "^1.1.1", |
|||
"xml-js": "^1.6.11" |
|||
}, |
|||
"devDependencies": { |
|||
"@commitlint/cli": "^17.7.1", |
|||
"@commitlint/config-conventional": "^17.7.0", |
|||
"@iconify/json": "^2.2.100", |
|||
"@intlify/unplugin-vue-i18n": "^0.12.2", |
|||
"@purge-icons/generated": "^0.9.0", |
|||
"@types/intro.js": "^5.1.1", |
|||
"@types/lodash-es": "^4.17.8", |
|||
"@types/node": "^20.4.0", |
|||
"@types/nprogress": "^0.2.0", |
|||
"@types/qrcode": "^1.5.1", |
|||
"@types/qs": "^6.9.7", |
|||
"@typescript-eslint/eslint-plugin": "^6.3.0", |
|||
"@typescript-eslint/parser": "^6.3.0", |
|||
"@unocss/transformer-variant-group": "^0.55.0", |
|||
"@vitejs/plugin-legacy": "^4.1.1", |
|||
"@vitejs/plugin-vue": "^4.2.3", |
|||
"@vitejs/plugin-vue-jsx": "^3.0.1", |
|||
"@vue-macros/volar": "^0.13.3", |
|||
"autoprefixer": "^10.4.14", |
|||
"bpmn-js": "^8.9.0", |
|||
"bpmn-js-properties-panel": "^0.46.0", |
|||
"consola": "^3.2.3", |
|||
"eslint": "^8.47.0", |
|||
"eslint-config-prettier": "^9.0.0", |
|||
"eslint-define-config": "^1.23.0", |
|||
"eslint-plugin-prettier": "^5.0.0", |
|||
"eslint-plugin-vue": "^9.17.0", |
|||
"lint-staged": "^13.2.3", |
|||
"postcss": "^8.4.27", |
|||
"postcss-html": "^1.5.0", |
|||
"postcss-scss": "^4.0.6", |
|||
"prettier": "^3.0.1", |
|||
"rimraf": "^5.0.1", |
|||
"rollup": "^3.28.0", |
|||
"sass": "^1.65.1", |
|||
"stylelint": "^15.10.2", |
|||
"stylelint-config-html": "^1.1.0", |
|||
"stylelint-config-recommended": "^13.0.0", |
|||
"stylelint-config-standard": "^34.0.0", |
|||
"stylelint-order": "^6.0.3", |
|||
"terser": "^5.19.2", |
|||
"typescript": "5.1.6", |
|||
"unocss": "^0.55.0", |
|||
"unplugin-auto-import": "^0.16.6", |
|||
"unplugin-element-plus": "^0.8.0", |
|||
"unplugin-vue-components": "^0.25.1", |
|||
"vite": "4.4.9", |
|||
"vite-plugin-compression": "^0.5.1", |
|||
"vite-plugin-ejs": "^1.6.4", |
|||
"vite-plugin-eslint": "^1.8.1", |
|||
"vite-plugin-progress": "^0.0.7", |
|||
"vite-plugin-purge-icons": "^0.9.2", |
|||
"vite-plugin-svg-icons": "^2.0.1", |
|||
"vite-plugin-top-level-await": "^1.3.1", |
|||
"vue-eslint-parser": "^9.3.1", |
|||
"vue-tsc": "^1.8.8" |
|||
}, |
|||
"license": "MIT", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git+https://gitee.com/yudaocode/yudao-ui-admin-vue3" |
|||
}, |
|||
"bugs": { |
|||
"url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues" |
|||
}, |
|||
"homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3", |
|||
"packageManager": "pnpm@8.6.0", |
|||
"engines": { |
|||
"node": ">= 16.0.0", |
|||
"pnpm": ">=8.6.0" |
|||
} |
|||
} |
@ -0,0 +1,5 @@ |
|||
module.exports = { |
|||
plugins: { |
|||
autoprefixer: {} |
|||
} |
|||
} |
@ -0,0 +1,22 @@ |
|||
module.exports = { |
|||
printWidth: 100, // 每行代码长度(默认80)
|
|||
tabWidth: 2, // 每个tab相当于多少个空格(默认2)ab进行缩进(默认false)
|
|||
useTabs: false, // 是否使用tab
|
|||
semi: false, // 声明结尾使用分号(默认true)
|
|||
vueIndentScriptAndStyle: false, |
|||
singleQuote: true, // 使用单引号(默认false)
|
|||
quoteProps: 'as-needed', |
|||
bracketSpacing: true, // 对象字面量的大括号间使用空格(默认true)
|
|||
trailingComma: 'none', // 多行使用拖尾逗号(默认none)
|
|||
jsxSingleQuote: false, |
|||
// 箭头函数参数括号 默认avoid 可选 avoid| always
|
|||
// avoid 能省略括号的时候就省略 例如x => x
|
|||
// always 总是有括号
|
|||
arrowParens: 'always', |
|||
insertPragma: false, |
|||
requirePragma: false, |
|||
proseWrap: 'never', |
|||
htmlWhitespaceSensitivity: 'strict', |
|||
endOfLine: 'auto', |
|||
rangeStart: 0 |
|||
} |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 6.2 KiB |
@ -0,0 +1,57 @@ |
|||
<script lang="ts" setup> |
|||
import { isDark } from '@/utils/is' |
|||
import { useAppStore } from '@/store/modules/app' |
|||
import { useDesign } from '@/hooks/web/useDesign' |
|||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache' |
|||
import routerSearch from '@/components/RouterSearch/index.vue' |
|||
|
|||
defineOptions({ name: 'APP' }) |
|||
|
|||
const { getPrefixCls } = useDesign() |
|||
const prefixCls = getPrefixCls('app') |
|||
const appStore = useAppStore() |
|||
const currentSize = computed(() => appStore.getCurrentSize) |
|||
const greyMode = computed(() => appStore.getGreyMode) |
|||
const { wsCache } = useCache() |
|||
|
|||
// 根据浏览器当前主题设置系统主题色 |
|||
const setDefaultTheme = () => { |
|||
let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK) |
|||
if (isDarkTheme === null) { |
|||
isDarkTheme = isDark() |
|||
} |
|||
appStore.setIsDark(isDarkTheme) |
|||
} |
|||
setDefaultTheme() |
|||
</script> |
|||
<template> |
|||
<ConfigGlobal :size="currentSize"> |
|||
<RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" /> |
|||
<routerSearch /> |
|||
</ConfigGlobal> |
|||
</template> |
|||
<style lang="scss"> |
|||
$prefix-cls: #{$namespace}-app; |
|||
|
|||
.size { |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
|
|||
html, |
|||
body { |
|||
@extend .size; |
|||
|
|||
padding: 0 !important; |
|||
margin: 0; |
|||
overflow: hidden; |
|||
|
|||
#app { |
|||
@extend .size; |
|||
} |
|||
} |
|||
|
|||
.#{$prefix-cls}-grey-mode { |
|||
filter: grayscale(100%); |
|||
} |
|||
</style> |
@ -0,0 +1,8 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export const getActivityList = async (params) => { |
|||
return await request.get({ |
|||
url: '/bpm/activity/list', |
|||
params |
|||
}) |
|||
} |
@ -0,0 +1,21 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export const getProcessDefinitionBpmnXML = async (id: number) => { |
|||
return await request.get({ |
|||
url: '/bpm/process-definition/get-bpmn-xml?id=' + id |
|||
}) |
|||
} |
|||
|
|||
export const getProcessDefinitionPage = async (params) => { |
|||
return await request.get({ |
|||
url: '/bpm/process-definition/page', |
|||
params |
|||
}) |
|||
} |
|||
|
|||
export const getProcessDefinitionList = async (params) => { |
|||
return await request.get({ |
|||
url: '/bpm/process-definition/list', |
|||
params |
|||
}) |
|||
} |
@ -0,0 +1,56 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type FormVO = { |
|||
id: number |
|||
name: string |
|||
conf: string |
|||
fields: string[] |
|||
status: number |
|||
remark: string |
|||
createTime: string |
|||
} |
|||
|
|||
// 创建工作流的表单定义
|
|||
export const createForm = async (data: FormVO) => { |
|||
return await request.post({ |
|||
url: '/bpm/form/create', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 更新工作流的表单定义
|
|||
export const updateForm = async (data: FormVO) => { |
|||
return await request.put({ |
|||
url: '/bpm/form/update', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 删除工作流的表单定义
|
|||
export const deleteForm = async (id: number) => { |
|||
return await request.delete({ |
|||
url: '/bpm/form/delete?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得工作流的表单定义
|
|||
export const getForm = async (id: number) => { |
|||
return await request.get({ |
|||
url: '/bpm/form/get?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得工作流的表单定义分页
|
|||
export const getFormPage = async (params) => { |
|||
return await request.get({ |
|||
url: '/bpm/form/page', |
|||
params |
|||
}) |
|||
} |
|||
|
|||
// 获得动态表单的精简列表
|
|||
export const getSimpleFormList = async () => { |
|||
return await request.get({ |
|||
url: '/bpm/form/list-all-simple' |
|||
}) |
|||
} |
@ -0,0 +1,27 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type LeaveVO = { |
|||
id: number |
|||
result: number |
|||
type: number |
|||
reason: string |
|||
processInstanceId: string |
|||
startTime: string |
|||
endTime: string |
|||
createTime: string |
|||
} |
|||
|
|||
// 创建请假申请
|
|||
export const createLeave = async (data: LeaveVO) => { |
|||
return await request.post({ url: '/bpm/oa/leave/create', data: data }) |
|||
} |
|||
|
|||
// 获得请假申请
|
|||
export const getLeave = async (id: number) => { |
|||
return await request.get({ url: '/bpm/oa/leave/get?id=' + id }) |
|||
} |
|||
|
|||
// 获得请假申请分页
|
|||
export const getLeavePage = async (params: PageParam) => { |
|||
return await request.get({ url: '/bpm/oa/leave/page', params }) |
|||
} |
@ -0,0 +1,59 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type ProcessDefinitionVO = { |
|||
id: string |
|||
version: number |
|||
deploymentTIme: string |
|||
suspensionState: number |
|||
} |
|||
|
|||
export type ModelVO = { |
|||
id: number |
|||
formName: string |
|||
key: string |
|||
name: string |
|||
description: string |
|||
category: string |
|||
formType: number |
|||
formId: number |
|||
formCustomCreatePath: string |
|||
formCustomViewPath: string |
|||
processDefinition: ProcessDefinitionVO |
|||
status: number |
|||
remark: string |
|||
createTime: string |
|||
bpmnXml: string |
|||
} |
|||
|
|||
export const getModelPage = async (params) => { |
|||
return await request.get({ url: '/bpm/model/page', params }) |
|||
} |
|||
|
|||
export const getModel = async (id: number) => { |
|||
return await request.get({ url: '/bpm/model/get?id=' + id }) |
|||
} |
|||
|
|||
export const updateModel = async (data: ModelVO) => { |
|||
return await request.put({ url: '/bpm/model/update', data: data }) |
|||
} |
|||
|
|||
// 任务状态修改
|
|||
export const updateModelState = async (id: number, state: number) => { |
|||
const data = { |
|||
id: id, |
|||
state: state |
|||
} |
|||
return await request.put({ url: '/bpm/model/update-state', data: data }) |
|||
} |
|||
|
|||
export const createModel = async (data: ModelVO) => { |
|||
return await request.post({ url: '/bpm/model/create', data: data }) |
|||
} |
|||
|
|||
export const deleteModel = async (id: number) => { |
|||
return await request.delete({ url: '/bpm/model/delete?id=' + id }) |
|||
} |
|||
|
|||
export const deployModel = async (id: number) => { |
|||
return await request.post({ url: '/bpm/model/deploy?id=' + id }) |
|||
} |
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type Task = { |
|||
id: string |
|||
name: string |
|||
} |
|||
|
|||
export type ProcessInstanceVO = { |
|||
id: number |
|||
name: string |
|||
processDefinitionId: string |
|||
category: string |
|||
result: number |
|||
tasks: Task[] |
|||
fields: string[] |
|||
status: number |
|||
remark: string |
|||
businessKey: string |
|||
createTime: string |
|||
endTime: string |
|||
} |
|||
|
|||
export const getMyProcessInstancePage = async (params) => { |
|||
return await request.get({ url: '/bpm/process-instance/my-page', params }) |
|||
} |
|||
|
|||
export const createProcessInstance = async (data) => { |
|||
return await request.post({ url: '/bpm/process-instance/create', data: data }) |
|||
} |
|||
|
|||
export const cancelProcessInstance = async (id: number, reason: string) => { |
|||
const data = { |
|||
id: id, |
|||
reason: reason |
|||
} |
|||
return await request.delete({ url: '/bpm/process-instance/cancel', data: data }) |
|||
} |
|||
|
|||
export const getProcessInstance = async (id: number) => { |
|||
return await request.get({ url: '/bpm/process-instance/get?id=' + id }) |
|||
} |
@ -0,0 +1,43 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type TaskVO = { |
|||
id: number |
|||
} |
|||
|
|||
export const getTodoTaskPage = async (params) => { |
|||
return await request.get({ url: '/bpm/task/todo-page', params }) |
|||
} |
|||
|
|||
export const getDoneTaskPage = async (params) => { |
|||
return await request.get({ url: '/bpm/task/done-page', params }) |
|||
} |
|||
|
|||
export const completeTask = async (data) => { |
|||
return await request.put({ url: '/bpm/task/complete', data }) |
|||
} |
|||
|
|||
export const approveTask = async (data) => { |
|||
return await request.put({ url: '/bpm/task/approve', data }) |
|||
} |
|||
|
|||
export const rejectTask = async (data) => { |
|||
return await request.put({ url: '/bpm/task/reject', data }) |
|||
} |
|||
export const backTask = async (data) => { |
|||
return await request.put({ url: '/bpm/task/back', data }) |
|||
} |
|||
|
|||
export const updateTaskAssignee = async (data) => { |
|||
return await request.put({ url: '/bpm/task/update-assignee', data }) |
|||
} |
|||
|
|||
export const getTaskListByProcessInstanceId = async (processInstanceId) => { |
|||
return await request.get({ |
|||
url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId |
|||
}) |
|||
} |
|||
|
|||
// 导出任务
|
|||
export const exportTask = async (params) => { |
|||
return await request.download({ url: '/bpm/task/export', params }) |
|||
} |
@ -0,0 +1,29 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type TaskAssignVO = { |
|||
id: number |
|||
modelId: string |
|||
processDefinitionId: string |
|||
taskDefinitionKey: string |
|||
taskDefinitionName: string |
|||
options: string[] |
|||
type: number |
|||
} |
|||
|
|||
export const getTaskAssignRuleList = async (params) => { |
|||
return await request.get({ url: '/bpm/task-assign-rule/list', params }) |
|||
} |
|||
|
|||
export const createTaskAssignRule = async (data: TaskAssignVO) => { |
|||
return await request.post({ |
|||
url: '/bpm/task-assign-rule/create', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
export const updateTaskAssignRule = async (data: TaskAssignVO) => { |
|||
return await request.put({ |
|||
url: '/bpm/task-assign-rule/update', |
|||
data: data |
|||
}) |
|||
} |
@ -0,0 +1,47 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type UserGroupVO = { |
|||
id: number |
|||
name: string |
|||
description: string |
|||
memberUserIds: number[] |
|||
status: number |
|||
remark: string |
|||
createTime: string |
|||
} |
|||
|
|||
// 创建用户组
|
|||
export const createUserGroup = async (data: UserGroupVO) => { |
|||
return await request.post({ |
|||
url: '/bpm/user-group/create', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 更新用户组
|
|||
export const updateUserGroup = async (data: UserGroupVO) => { |
|||
return await request.put({ |
|||
url: '/bpm/user-group/update', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 删除用户组
|
|||
export const deleteUserGroup = async (id: number) => { |
|||
return await request.delete({ url: '/bpm/user-group/delete?id=' + id }) |
|||
} |
|||
|
|||
// 获得用户组
|
|||
export const getUserGroup = async (id: number) => { |
|||
return await request.get({ url: '/bpm/user-group/get?id=' + id }) |
|||
} |
|||
|
|||
// 获得用户组分页
|
|||
export const getUserGroupPage = async (params) => { |
|||
return await request.get({ url: '/bpm/user-group/page', params }) |
|||
} |
|||
|
|||
// 获取用户组精简信息列表
|
|||
export const getSimpleUserGroupList = async (): Promise<UserGroupVO[]> => { |
|||
return await request.get({ url: '/bpm/user-group/list-all-simple' }) |
|||
} |
@ -0,0 +1,46 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ArticleVO { |
|||
id: number |
|||
categoryId: number |
|||
title: string |
|||
titleEn: string |
|||
content: string |
|||
picUrl: string |
|||
contentEn: string |
|||
source: string |
|||
sourceEn: string |
|||
memo: string |
|||
status: number |
|||
sort: number |
|||
} |
|||
|
|||
// 查询文章列表
|
|||
export const getArticlePage = async (params) => { |
|||
return await request.get({ url: '/cms/article/page', params }) |
|||
} |
|||
|
|||
// 查询文章详情
|
|||
export const getArticle = async (id: number) => { |
|||
return await request.get({ url: '/cms/article/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增文章
|
|||
export const createArticle = async (data: ArticleVO) => { |
|||
return await request.post({ url: '/cms/article/create', data }) |
|||
} |
|||
|
|||
// 修改文章
|
|||
export const updateArticle = async (data: ArticleVO) => { |
|||
return await request.put({ url: '/cms/article/update', data }) |
|||
} |
|||
|
|||
// 删除文章
|
|||
export const deleteArticle = async (id: number) => { |
|||
return await request.delete({ url: '/cms/article/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出文章 Excel
|
|||
export const exportArticleApi = async (params) => { |
|||
return await request.download({ url: '/cms/article/export-excel', params }) |
|||
} |
@ -0,0 +1,46 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ArticleCategoryVO { |
|||
id: number |
|||
name: string |
|||
titleEn: string |
|||
picUrl: string |
|||
memo: string |
|||
status: number |
|||
sort: number |
|||
} |
|||
|
|||
// 查询文章分类列表
|
|||
export const getSimpleArticleCategoryList = () => { |
|||
return request.get<ArticleCategoryVO[]>({ url: '/cms/article-category/list-all-simple' }) |
|||
} |
|||
|
|||
// 查询文章分类列表
|
|||
export const getArticleCategoryPage = async (params) => { |
|||
return await request.get({ url: '/cms/article-category/page', params }) |
|||
} |
|||
|
|||
// 查询文章分类详情
|
|||
export const getArticleCategory = async (id: number) => { |
|||
return await request.get({ url: '/cms/article-category/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增文章分类
|
|||
export const createArticleCategory = async (data: ArticleCategoryVO) => { |
|||
return await request.post({ url: '/cms/article-category/create', data }) |
|||
} |
|||
|
|||
// 修改文章分类
|
|||
export const updateArticleCategory = async (data: ArticleCategoryVO) => { |
|||
return await request.put({ url: '/cms/article-category/update', data }) |
|||
} |
|||
|
|||
// 删除文章分类
|
|||
export const deleteArticleCategory = async (id: number) => { |
|||
return await request.delete({ url: '/cms/article-category/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出文章分类 Excel
|
|||
export const exportArticleCategoryApi = async (params) => { |
|||
return await request.download({ url: '/cms/article-category/export-excel', params }) |
|||
} |
@ -0,0 +1,40 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface BannerVO { |
|||
id: number |
|||
picUrl: string |
|||
memo: string |
|||
title: string |
|||
url: string |
|||
status: number |
|||
} |
|||
|
|||
// 查询Banner列表
|
|||
export const getBannerPage = async (params) => { |
|||
return await request.get({ url: '/cms/banner/page', params }) |
|||
} |
|||
|
|||
// 查询Banner详情
|
|||
export const getBanner = async (id: number) => { |
|||
return await request.get({ url: '/cms/banner/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增Banner
|
|||
export const createBanner = async (data: BannerVO) => { |
|||
return await request.post({ url: '/cms/banner/create', data }) |
|||
} |
|||
|
|||
// 修改Banner
|
|||
export const updateBanner = async (data: BannerVO) => { |
|||
return await request.put({ url: '/cms/banner/update', data }) |
|||
} |
|||
|
|||
// 删除Banner
|
|||
export const deleteBanner = async (id: number) => { |
|||
return await request.delete({ url: '/cms/banner/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出Banner Excel
|
|||
export const exportBannerApi = async (params) => { |
|||
return await request.download({ url: '/cms/banner/export-excel', params }) |
|||
} |
@ -0,0 +1,52 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SiteInfoVO { |
|||
id: number |
|||
siteName: string |
|||
siteNameEn: string |
|||
wechatImage: string |
|||
wecomImage: string |
|||
wxmpImage: string |
|||
wechat: string |
|||
linkedin: string |
|||
whatsapp: string |
|||
address: string |
|||
addressEn: string |
|||
remark: string |
|||
logo: string |
|||
pov: string |
|||
email: string |
|||
status: number |
|||
siteDesc: string |
|||
siteEn: string |
|||
} |
|||
|
|||
// 查询站点信息列表
|
|||
export const getSiteInfoPage = async (params) => { |
|||
return await request.get({ url: '/cms/site-info/page', params }) |
|||
} |
|||
|
|||
// 查询站点信息详情
|
|||
export const getSiteInfo = async (id: number) => { |
|||
return await request.get({ url: '/cms/site-info/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增站点信息
|
|||
export const createSiteInfo = async (data: SiteInfoVO) => { |
|||
return await request.post({ url: '/cms/site-info/create', data }) |
|||
} |
|||
|
|||
// 修改站点信息
|
|||
export const updateSiteInfo = async (data: SiteInfoVO) => { |
|||
return await request.put({ url: '/cms/site-info/update', data }) |
|||
} |
|||
|
|||
// 删除站点信息
|
|||
export const deleteSiteInfo = async (id: number) => { |
|||
return await request.delete({ url: '/cms/site-info/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出站点信息 Excel
|
|||
export const exportSiteInfoApi = async (params) => { |
|||
return await request.download({ url: '/cms/site-info/export-excel', params }) |
|||
} |
@ -0,0 +1,47 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface VideoVO { |
|||
id: number |
|||
titleEn: string |
|||
content: string |
|||
contentEn: string |
|||
source: string |
|||
sourceEn: string |
|||
viewsCount: number |
|||
memo: string |
|||
status: number |
|||
sort: number |
|||
title: string |
|||
picUrl: string |
|||
videoUrl: string |
|||
} |
|||
|
|||
// 查询视频列表
|
|||
export const getVideoPage = async (params) => { |
|||
return await request.get({ url: '/cms/video/page', params }) |
|||
} |
|||
|
|||
// 查询视频详情
|
|||
export const getVideo = async (id: number) => { |
|||
return await request.get({ url: '/cms/video/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增视频
|
|||
export const createVideo = async (data: VideoVO) => { |
|||
return await request.post({ url: '/cms/video/create', data }) |
|||
} |
|||
|
|||
// 修改视频
|
|||
export const updateVideo = async (data: VideoVO) => { |
|||
return await request.put({ url: '/cms/video/update', data }) |
|||
} |
|||
|
|||
// 删除视频
|
|||
export const deleteVideo = async (id: number) => { |
|||
return await request.delete({ url: '/cms/video/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出视频 Excel
|
|||
export const exportVideoApi = async (params) => { |
|||
return await request.download({ url: '/cms/video/export-excel', params }) |
|||
} |
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface VideoCategoryVO { |
|||
id: number |
|||
title: string |
|||
titleEn: string |
|||
picUrl: string |
|||
memo: string |
|||
status: number |
|||
sort: number |
|||
} |
|||
|
|||
// 查询视频分类列表
|
|||
export const getVideoCategoryPage = async (params) => { |
|||
return await request.get({ url: '/cms/video-category/page', params }) |
|||
} |
|||
|
|||
// 查询视频分类详情
|
|||
export const getVideoCategory = async (id: number) => { |
|||
return await request.get({ url: '/cms/video-category/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增视频分类
|
|||
export const createVideoCategory = async (data: VideoCategoryVO) => { |
|||
return await request.post({ url: '/cms/video-category/create', data }) |
|||
} |
|||
|
|||
// 修改视频分类
|
|||
export const updateVideoCategory = async (data: VideoCategoryVO) => { |
|||
return await request.put({ url: '/cms/video-category/update', data }) |
|||
} |
|||
|
|||
// 删除视频分类
|
|||
export const deleteVideoCategory = async (id: number) => { |
|||
return await request.delete({ url: '/cms/video-category/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出视频分类 Excel
|
|||
export const exportVideoCategoryApi = async (params) => { |
|||
return await request.download({ url: '/cms/video-category/export-excel', params }) |
|||
} |
@ -0,0 +1,30 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ApiAccessLogVO { |
|||
id: number |
|||
traceId: string |
|||
userId: number |
|||
userType: number |
|||
applicationName: string |
|||
requestMethod: string |
|||
requestParams: string |
|||
requestUrl: string |
|||
userIp: string |
|||
userAgent: string |
|||
beginTime: Date |
|||
endTIme: Date |
|||
duration: number |
|||
resultCode: number |
|||
resultMsg: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询列表API 访问日志
|
|||
export const getApiAccessLogPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/api-access-log/page', params }) |
|||
} |
|||
|
|||
// 导出API 访问日志
|
|||
export const exportApiAccessLog = (params) => { |
|||
return request.download({ url: '/infra/api-access-log/export-excel', params }) |
|||
} |
@ -0,0 +1,48 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ApiErrorLogVO { |
|||
id: number |
|||
traceId: string |
|||
userId: number |
|||
userType: number |
|||
applicationName: string |
|||
requestMethod: string |
|||
requestParams: string |
|||
requestUrl: string |
|||
userIp: string |
|||
userAgent: string |
|||
exceptionTime: Date |
|||
exceptionName: string |
|||
exceptionMessage: string |
|||
exceptionRootCauseMessage: string |
|||
exceptionStackTrace: string |
|||
exceptionClassName: string |
|||
exceptionFileName: string |
|||
exceptionMethodName: string |
|||
exceptionLineNumber: number |
|||
processUserId: number |
|||
processStatus: number |
|||
processTime: Date |
|||
resultCode: number |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询列表API 访问日志
|
|||
export const getApiErrorLogPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/api-error-log/page', params }) |
|||
} |
|||
|
|||
// 更新 API 错误日志的处理状态
|
|||
export const updateApiErrorLogPage = (id: number, processStatus: number) => { |
|||
return request.put({ |
|||
url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus |
|||
}) |
|||
} |
|||
|
|||
// 导出API 访问日志
|
|||
export const exportApiErrorLog = (params) => { |
|||
return request.download({ |
|||
url: '/infra/api-error-log/export-excel', |
|||
params |
|||
}) |
|||
} |
@ -0,0 +1,123 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type CodegenTableVO = { |
|||
id: number |
|||
tableId: number |
|||
isParentMenuIdValid: boolean |
|||
dataSourceConfigId: number |
|||
scene: number |
|||
tableName: string |
|||
tableComment: string |
|||
remark: string |
|||
moduleName: string |
|||
businessName: string |
|||
className: string |
|||
classComment: string |
|||
author: string |
|||
createTime: Date |
|||
updateTime: Date |
|||
templateType: number |
|||
parentMenuId: number |
|||
} |
|||
|
|||
export type CodegenColumnVO = { |
|||
id: number |
|||
tableId: number |
|||
columnName: string |
|||
dataType: string |
|||
columnComment: string |
|||
nullable: number |
|||
primaryKey: number |
|||
autoIncrement: string |
|||
ordinalPosition: number |
|||
javaType: string |
|||
javaField: string |
|||
dictType: string |
|||
example: string |
|||
createOperation: number |
|||
updateOperation: number |
|||
listOperation: number |
|||
listOperationCondition: string |
|||
listOperationResult: number |
|||
htmlType: string |
|||
} |
|||
|
|||
export type DatabaseTableVO = { |
|||
name: string |
|||
comment: string |
|||
} |
|||
|
|||
export type CodegenDetailVO = { |
|||
table: CodegenTableVO |
|||
columns: CodegenColumnVO[] |
|||
} |
|||
|
|||
export type CodegenPreviewVO = { |
|||
filePath: string |
|||
code: string |
|||
} |
|||
|
|||
export type CodegenUpdateReqVO = { |
|||
table: CodegenTableVO | any |
|||
columns: CodegenColumnVO[] |
|||
} |
|||
|
|||
export type CodegenCreateListReqVO = { |
|||
dataSourceConfigId: number |
|||
tableNames: string[] |
|||
} |
|||
|
|||
// 查询列表代码生成表定义
|
|||
export const getCodegenTablePage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/codegen/table/page', params }) |
|||
} |
|||
|
|||
// 查询详情代码生成表定义
|
|||
export const getCodegenTable = (id: number) => { |
|||
return request.get({ url: '/infra/codegen/detail?tableId=' + id }) |
|||
} |
|||
|
|||
// 新增代码生成表定义
|
|||
export const createCodegenTable = (data: CodegenCreateListReqVO) => { |
|||
return request.post({ url: '/infra/codegen/create', data }) |
|||
} |
|||
|
|||
// 修改代码生成表定义
|
|||
export const updateCodegenTable = (data: CodegenUpdateReqVO) => { |
|||
return request.put({ url: '/infra/codegen/update', data }) |
|||
} |
|||
|
|||
// 基于数据库的表结构,同步数据库的表和字段定义
|
|||
export const syncCodegenFromDB = (id: number) => { |
|||
return request.put({ url: '/infra/codegen/sync-from-db?tableId=' + id }) |
|||
} |
|||
|
|||
// 基于 SQL 建表语句,同步数据库的表和字段定义
|
|||
export const syncCodegenFromSQL = (id: number, sql: string) => { |
|||
return request.put({ url: '/infra/codegen/sync-from-sql?tableId=' + id + '&sql=' + sql }) |
|||
} |
|||
|
|||
// 预览生成代码
|
|||
export const previewCodegen = (id: number) => { |
|||
return request.get({ url: '/infra/codegen/preview?tableId=' + id }) |
|||
} |
|||
|
|||
// 下载生成代码
|
|||
export const downloadCodegen = (id: number) => { |
|||
return request.download({ url: '/infra/codegen/download?tableId=' + id }) |
|||
} |
|||
|
|||
// 获得表定义
|
|||
export const getSchemaTableList = (params) => { |
|||
return request.get({ url: '/infra/codegen/db/table/list', params }) |
|||
} |
|||
|
|||
// 基于数据库的表结构,创建代码生成器的表定义
|
|||
export const createCodegenList = (data) => { |
|||
return request.post({ url: '/infra/codegen/create-list', data }) |
|||
} |
|||
|
|||
// 删除代码生成表定义
|
|||
export const deleteCodegenTable = (id: number) => { |
|||
return request.delete({ url: '/infra/codegen/delete?tableId=' + id }) |
|||
} |
@ -0,0 +1,48 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ConfigVO { |
|||
id: number | undefined |
|||
category: string |
|||
name: string |
|||
key: string |
|||
value: string |
|||
type: number |
|||
visible: boolean |
|||
remark: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询参数列表
|
|||
export const getConfigPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/config/page', params }) |
|||
} |
|||
|
|||
// 查询参数详情
|
|||
export const getConfig = (id: number) => { |
|||
return request.get({ url: '/infra/config/get?id=' + id }) |
|||
} |
|||
|
|||
// 根据参数键名查询参数值
|
|||
export const getConfigKey = (configKey: string) => { |
|||
return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey }) |
|||
} |
|||
|
|||
// 新增参数
|
|||
export const createConfig = (data: ConfigVO) => { |
|||
return request.post({ url: '/infra/config/create', data }) |
|||
} |
|||
|
|||
// 修改参数
|
|||
export const updateConfig = (data: ConfigVO) => { |
|||
return request.put({ url: '/infra/config/update', data }) |
|||
} |
|||
|
|||
// 删除参数
|
|||
export const deleteConfig = (id: number) => { |
|||
return request.delete({ url: '/infra/config/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出参数
|
|||
export const exportConfig = (params) => { |
|||
return request.download({ url: '/infra/config/export', params }) |
|||
} |
@ -0,0 +1,35 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DataSourceConfigVO { |
|||
id: number | undefined |
|||
name: string |
|||
url: string |
|||
username: string |
|||
password: string |
|||
createTime?: Date |
|||
} |
|||
|
|||
// 新增数据源配置
|
|||
export const createDataSourceConfig = (data: DataSourceConfigVO) => { |
|||
return request.post({ url: '/infra/data-source-config/create', data }) |
|||
} |
|||
|
|||
// 修改数据源配置
|
|||
export const updateDataSourceConfig = (data: DataSourceConfigVO) => { |
|||
return request.put({ url: '/infra/data-source-config/update', data }) |
|||
} |
|||
|
|||
// 删除数据源配置
|
|||
export const deleteDataSourceConfig = (id: number) => { |
|||
return request.delete({ url: '/infra/data-source-config/delete?id=' + id }) |
|||
} |
|||
|
|||
// 查询数据源配置详情
|
|||
export const getDataSourceConfig = (id: number) => { |
|||
return request.get({ url: '/infra/data-source-config/get?id=' + id }) |
|||
} |
|||
|
|||
// 查询数据源配置列表
|
|||
export const getDataSourceConfigList = () => { |
|||
return request.get({ url: '/infra/data-source-config/list' }) |
|||
} |
@ -0,0 +1,16 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 导出Html
|
|||
export const exportHtml = () => { |
|||
return request.download({ url: '/infra/db-doc/export-html' }) |
|||
} |
|||
|
|||
// 导出Word
|
|||
export const exportWord = () => { |
|||
return request.download({ url: '/infra/db-doc/export-word' }) |
|||
} |
|||
|
|||
// 导出Markdown
|
|||
export const exportMarkdown = () => { |
|||
return request.download({ url: '/infra/db-doc/export-markdown' }) |
|||
} |
@ -0,0 +1,17 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface FilePageReqVO extends PageParam { |
|||
path?: string |
|||
type?: string |
|||
createTime?: Date[] |
|||
} |
|||
|
|||
// 查询文件列表
|
|||
export const getFilePage = (params: FilePageReqVO) => { |
|||
return request.get({ url: '/infra/file/page', params }) |
|||
} |
|||
|
|||
// 删除文件
|
|||
export const deleteFile = (id: number) => { |
|||
return request.delete({ url: '/infra/file/delete?id=' + id }) |
|||
} |
@ -0,0 +1,61 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface FileClientConfig { |
|||
basePath: string |
|||
host?: string |
|||
port?: number |
|||
username?: string |
|||
password?: string |
|||
mode?: string |
|||
endpoint?: string |
|||
bucket?: string |
|||
accessKey?: string |
|||
accessSecret?: string |
|||
domain: string |
|||
} |
|||
|
|||
export interface FileConfigVO { |
|||
id: number |
|||
name: string |
|||
storage: any |
|||
master: boolean |
|||
visible: boolean |
|||
config: FileClientConfig |
|||
remark: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询文件配置列表
|
|||
export const getFileConfigPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/file-config/page', params }) |
|||
} |
|||
|
|||
// 查询文件配置详情
|
|||
export const getFileConfig = (id: number) => { |
|||
return request.get({ url: '/infra/file-config/get?id=' + id }) |
|||
} |
|||
|
|||
// 更新文件配置为主配置
|
|||
export const updateFileConfigMaster = (id: number) => { |
|||
return request.put({ url: '/infra/file-config/update-master?id=' + id }) |
|||
} |
|||
|
|||
// 新增文件配置
|
|||
export const createFileConfig = (data: FileConfigVO) => { |
|||
return request.post({ url: '/infra/file-config/create', data }) |
|||
} |
|||
|
|||
// 修改文件配置
|
|||
export const updateFileConfig = (data: FileConfigVO) => { |
|||
return request.put({ url: '/infra/file-config/update', data }) |
|||
} |
|||
|
|||
// 删除文件配置
|
|||
export const deleteFileConfig = (id: number) => { |
|||
return request.delete({ url: '/infra/file-config/delete?id=' + id }) |
|||
} |
|||
|
|||
// 测试文件配置
|
|||
export const testFileConfig = (id: number) => { |
|||
return request.get({ url: '/infra/file-config/test?id=' + id }) |
|||
} |
@ -0,0 +1,63 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface JobVO { |
|||
id: number |
|||
name: string |
|||
status: number |
|||
handlerName: string |
|||
handlerParam: string |
|||
cronExpression: string |
|||
retryCount: number |
|||
retryInterval: number |
|||
monitorTimeout: number |
|||
createTime: Date |
|||
} |
|||
|
|||
// 任务列表
|
|||
export const getJobPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/job/page', params }) |
|||
} |
|||
|
|||
// 任务详情
|
|||
export const getJob = (id: number) => { |
|||
return request.get({ url: '/infra/job/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增任务
|
|||
export const createJob = (data: JobVO) => { |
|||
return request.post({ url: '/infra/job/create', data }) |
|||
} |
|||
|
|||
// 修改定时任务调度
|
|||
export const updateJob = (data: JobVO) => { |
|||
return request.put({ url: '/infra/job/update', data }) |
|||
} |
|||
|
|||
// 删除定时任务调度
|
|||
export const deleteJob = (id: number) => { |
|||
return request.delete({ url: '/infra/job/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出定时任务调度
|
|||
export const exportJob = (params) => { |
|||
return request.download({ url: '/infra/job/export-excel', params }) |
|||
} |
|||
|
|||
// 任务状态修改
|
|||
export const updateJobStatus = (id: number, status: number) => { |
|||
const params = { |
|||
id, |
|||
status |
|||
} |
|||
return request.put({ url: '/infra/job/update-status', params }) |
|||
} |
|||
|
|||
// 定时任务立即执行一次
|
|||
export const runJob = (id: number) => { |
|||
return request.put({ url: '/infra/job/trigger?id=' + id }) |
|||
} |
|||
|
|||
// 获得定时任务的下 n 次执行时间
|
|||
export const getJobNextTimes = (id: number) => { |
|||
return request.get({ url: '/infra/job/get_next_times?id=' + id }) |
|||
} |
@ -0,0 +1,33 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface JobLogVO { |
|||
id: number |
|||
jobId: number |
|||
handlerName: string |
|||
handlerParam: string |
|||
cronExpression: string |
|||
executeIndex: string |
|||
beginTime: string |
|||
endTime: string |
|||
duration: string |
|||
status: number |
|||
createTime: string |
|||
} |
|||
|
|||
// 任务日志列表
|
|||
export const getJobLogPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/job-log/page', params }) |
|||
} |
|||
|
|||
// 任务日志详情
|
|||
export const getJobLog = (id: number) => { |
|||
return request.get({ url: '/infra/job-log/get?id=' + id }) |
|||
} |
|||
|
|||
// 导出定时任务日志
|
|||
export const exportJobLog = (params) => { |
|||
return request.download({ |
|||
url: '/infra/job-log/export-excel', |
|||
params |
|||
}) |
|||
} |
@ -0,0 +1,8 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
/** |
|||
* 获取redis 监控信息 |
|||
*/ |
|||
export const getCache = () => { |
|||
return request.get({ url: '/infra/redis/get-monitor-info' }) |
|||
} |
@ -0,0 +1,176 @@ |
|||
export interface RedisMonitorInfoVO { |
|||
info: RedisInfoVO |
|||
dbSize: number |
|||
commandStats: RedisCommandStatsVO[] |
|||
} |
|||
|
|||
export interface RedisInfoVO { |
|||
io_threaded_reads_processed: string |
|||
tracking_clients: string |
|||
uptime_in_seconds: string |
|||
cluster_connections: string |
|||
current_cow_size: string |
|||
maxmemory_human: string |
|||
aof_last_cow_size: string |
|||
master_replid2: string |
|||
mem_replication_backlog: string |
|||
aof_rewrite_scheduled: string |
|||
total_net_input_bytes: string |
|||
rss_overhead_ratio: string |
|||
hz: string |
|||
current_cow_size_age: string |
|||
redis_build_id: string |
|||
errorstat_BUSYGROUP: string |
|||
aof_last_bgrewrite_status: string |
|||
multiplexing_api: string |
|||
client_recent_max_output_buffer: string |
|||
allocator_resident: string |
|||
mem_fragmentation_bytes: string |
|||
aof_current_size: string |
|||
repl_backlog_first_byte_offset: string |
|||
tracking_total_prefixes: string |
|||
redis_mode: string |
|||
redis_git_dirty: string |
|||
aof_delayed_fsync: string |
|||
allocator_rss_bytes: string |
|||
repl_backlog_histlen: string |
|||
io_threads_active: string |
|||
rss_overhead_bytes: string |
|||
total_system_memory: string |
|||
loading: string |
|||
evicted_keys: string |
|||
maxclients: string |
|||
cluster_enabled: string |
|||
redis_version: string |
|||
repl_backlog_active: string |
|||
mem_aof_buffer: string |
|||
allocator_frag_bytes: string |
|||
io_threaded_writes_processed: string |
|||
instantaneous_ops_per_sec: string |
|||
used_memory_human: string |
|||
total_error_replies: string |
|||
role: string |
|||
maxmemory: string |
|||
used_memory_lua: string |
|||
rdb_current_bgsave_time_sec: string |
|||
used_memory_startup: string |
|||
used_cpu_sys_main_thread: string |
|||
lazyfree_pending_objects: string |
|||
aof_pending_bio_fsync: string |
|||
used_memory_dataset_perc: string |
|||
allocator_frag_ratio: string |
|||
arch_bits: string |
|||
used_cpu_user_main_thread: string |
|||
mem_clients_normal: string |
|||
expired_time_cap_reached_count: string |
|||
unexpected_error_replies: string |
|||
mem_fragmentation_ratio: string |
|||
aof_last_rewrite_time_sec: string |
|||
master_replid: string |
|||
aof_rewrite_in_progress: string |
|||
lru_clock: string |
|||
maxmemory_policy: string |
|||
run_id: string |
|||
latest_fork_usec: string |
|||
tracking_total_items: string |
|||
total_commands_processed: string |
|||
expired_keys: string |
|||
errorstat_ERR: string |
|||
used_memory: string |
|||
module_fork_in_progress: string |
|||
errorstat_WRONGPASS: string |
|||
aof_buffer_length: string |
|||
dump_payload_sanitizations: string |
|||
mem_clients_slaves: string |
|||
keyspace_misses: string |
|||
server_time_usec: string |
|||
executable: string |
|||
lazyfreed_objects: string |
|||
db0: string |
|||
used_memory_peak_human: string |
|||
keyspace_hits: string |
|||
rdb_last_cow_size: string |
|||
aof_pending_rewrite: string |
|||
used_memory_overhead: string |
|||
active_defrag_hits: string |
|||
tcp_port: string |
|||
uptime_in_days: string |
|||
used_memory_peak_perc: string |
|||
current_save_keys_processed: string |
|||
blocked_clients: string |
|||
total_reads_processed: string |
|||
expire_cycle_cpu_milliseconds: string |
|||
sync_partial_err: string |
|||
used_memory_scripts_human: string |
|||
aof_current_rewrite_time_sec: string |
|||
aof_enabled: string |
|||
process_supervised: string |
|||
master_repl_offset: string |
|||
used_memory_dataset: string |
|||
used_cpu_user: string |
|||
rdb_last_bgsave_status: string |
|||
tracking_total_keys: string |
|||
atomicvar_api: string |
|||
allocator_rss_ratio: string |
|||
client_recent_max_input_buffer: string |
|||
clients_in_timeout_table: string |
|||
aof_last_write_status: string |
|||
mem_allocator: string |
|||
used_memory_scripts: string |
|||
used_memory_peak: string |
|||
process_id: string |
|||
master_failover_state: string |
|||
errorstat_NOAUTH: string |
|||
used_cpu_sys: string |
|||
repl_backlog_size: string |
|||
connected_slaves: string |
|||
current_save_keys_total: string |
|||
gcc_version: string |
|||
total_system_memory_human: string |
|||
sync_full: string |
|||
connected_clients: string |
|||
module_fork_last_cow_size: string |
|||
total_writes_processed: string |
|||
allocator_active: string |
|||
total_net_output_bytes: string |
|||
pubsub_channels: string |
|||
current_fork_perc: string |
|||
active_defrag_key_hits: string |
|||
rdb_changes_since_last_save: string |
|||
instantaneous_input_kbps: string |
|||
used_memory_rss_human: string |
|||
configured_hz: string |
|||
expired_stale_perc: string |
|||
active_defrag_misses: string |
|||
used_cpu_sys_children: string |
|||
number_of_cached_scripts: string |
|||
sync_partial_ok: string |
|||
used_memory_lua_human: string |
|||
rdb_last_save_time: string |
|||
pubsub_patterns: string |
|||
slave_expires_tracked_keys: string |
|||
redis_git_sha1: string |
|||
used_memory_rss: string |
|||
rdb_last_bgsave_time_sec: string |
|||
os: string |
|||
mem_not_counted_for_evict: string |
|||
active_defrag_running: string |
|||
rejected_connections: string |
|||
aof_rewrite_buffer_length: string |
|||
total_forks: string |
|||
active_defrag_key_misses: string |
|||
allocator_allocated: string |
|||
aof_base_size: string |
|||
instantaneous_output_kbps: string |
|||
second_repl_offset: string |
|||
rdb_bgsave_in_progress: string |
|||
used_cpu_user_children: string |
|||
total_connections_received: string |
|||
migrate_cached_sockets: string |
|||
} |
|||
|
|||
export interface RedisCommandStatsVO { |
|||
command: string |
|||
calls: number |
|||
usec: number |
|||
} |
@ -0,0 +1,64 @@ |
|||
import request from '@/config/axios' |
|||
import { getRefreshToken } from '@/utils/auth' |
|||
import type { UserLoginVO } from './types' |
|||
|
|||
export interface SmsCodeVO { |
|||
mobile: string |
|||
scene: number |
|||
} |
|||
|
|||
export interface SmsLoginVO { |
|||
mobile: string |
|||
code: string |
|||
} |
|||
|
|||
// 登录
|
|||
export const login = (data: UserLoginVO) => { |
|||
return request.post({ url: '/system/auth/login', data }) |
|||
} |
|||
|
|||
// 刷新访问令牌
|
|||
export const refreshToken = () => { |
|||
return request.post({ url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken() }) |
|||
} |
|||
|
|||
// 使用租户名,获得租户编号
|
|||
export const getTenantIdByName = (name: string) => { |
|||
return request.get({ url: '/system/tenant/get-id-by-name?name=' + name }) |
|||
} |
|||
|
|||
// 登出
|
|||
export const loginOut = () => { |
|||
return request.post({ url: '/system/auth/logout' }) |
|||
} |
|||
|
|||
// 获取用户权限信息
|
|||
export const getInfo = () => { |
|||
return request.get({ url: '/system/auth/get-permission-info' }) |
|||
} |
|||
|
|||
//获取登录验证码
|
|||
export const sendSmsCode = (data: SmsCodeVO) => { |
|||
return request.post({ url: '/system/auth/send-sms-code', data }) |
|||
} |
|||
|
|||
// 短信验证码登录
|
|||
export const smsLogin = (data: SmsLoginVO) => { |
|||
return request.post({ url: '/system/auth/sms-login', data }) |
|||
} |
|||
|
|||
// 社交授权的跳转
|
|||
export const socialAuthRedirect = (type: number, redirectUri: string) => { |
|||
return request.get({ |
|||
url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri |
|||
}) |
|||
} |
|||
// 获取验证图片以及 token
|
|||
export const getCode = (data) => { |
|||
return request.postOriginal({ url: 'system/captcha/get', data }) |
|||
} |
|||
|
|||
// 滑动或者点选验证
|
|||
export const reqCheck = (data) => { |
|||
return request.postOriginal({ url: 'system/captcha/check', data }) |
|||
} |
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得授权信息
|
|||
export const getAuthorize = (clientId: string) => { |
|||
return request.get({ url: '/system/oauth2/authorize?clientId=' + clientId }) |
|||
} |
|||
|
|||
// 发起授权
|
|||
export const authorize = ( |
|||
responseType: string, |
|||
clientId: string, |
|||
redirectUri: string, |
|||
state: string, |
|||
autoApprove: boolean, |
|||
checkedScopes: string[], |
|||
uncheckedScopes: string[] |
|||
) => { |
|||
// 构建 scopes
|
|||
const scopes = {} |
|||
for (const scope of checkedScopes) { |
|||
scopes[scope] = true |
|||
} |
|||
for (const scope of uncheckedScopes) { |
|||
scopes[scope] = false |
|||
} |
|||
// 发起请求
|
|||
return request.post({ |
|||
url: '/system/oauth2/authorize', |
|||
headers: { |
|||
'Content-type': 'application/x-www-form-urlencoded' |
|||
}, |
|||
params: { |
|||
response_type: responseType, |
|||
client_id: clientId, |
|||
redirect_uri: redirectUri, |
|||
state: state, |
|||
auto_approve: autoApprove, |
|||
scope: JSON.stringify(scopes) |
|||
} |
|||
}) |
|||
} |
@ -0,0 +1,28 @@ |
|||
export type UserLoginVO = { |
|||
username: string |
|||
password: string |
|||
captchaVerification: string |
|||
} |
|||
|
|||
export type TokenType = { |
|||
id: number // 编号
|
|||
accessToken: string // 访问令牌
|
|||
refreshToken: string // 刷新令牌
|
|||
userId: number // 用户编号
|
|||
userType: number //用户类型
|
|||
clientId: string //客户端编号
|
|||
expiresTime: number //过期时间
|
|||
} |
|||
|
|||
export type UserVO = { |
|||
id: number |
|||
username: string |
|||
nickname: string |
|||
deptId: number |
|||
email: string |
|||
mobile: string |
|||
sex: number |
|||
avatar: string |
|||
loginIp: string |
|||
loginDate: string |
|||
} |
@ -0,0 +1,61 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
/** |
|||
* 商品品牌 |
|||
*/ |
|||
export interface BrandVO { |
|||
/** |
|||
* 品牌编号 |
|||
*/ |
|||
id?: number |
|||
/** |
|||
* 品牌名称 |
|||
*/ |
|||
name: string |
|||
/** |
|||
* 品牌图片 |
|||
*/ |
|||
picUrl: string |
|||
/** |
|||
* 品牌排序 |
|||
*/ |
|||
sort?: number |
|||
/** |
|||
* 品牌描述 |
|||
*/ |
|||
description?: string |
|||
/** |
|||
* 开启状态 |
|||
*/ |
|||
status: number |
|||
} |
|||
|
|||
// 创建商品品牌
|
|||
export const createBrand = (data: BrandVO) => { |
|||
return request.post({ url: '/product/brand/create', data }) |
|||
} |
|||
|
|||
// 更新商品品牌
|
|||
export const updateBrand = (data: BrandVO) => { |
|||
return request.put({ url: '/product/brand/update', data }) |
|||
} |
|||
|
|||
// 删除商品品牌
|
|||
export const deleteBrand = (id: number) => { |
|||
return request.delete({ url: `/product/brand/delete?id=${id}` }) |
|||
} |
|||
|
|||
// 获得商品品牌
|
|||
export const getBrand = (id: number) => { |
|||
return request.get({ url: `/product/brand/get?id=${id}` }) |
|||
} |
|||
|
|||
// 获得商品品牌列表
|
|||
export const getBrandParam = (params: PageParam) => { |
|||
return request.get({ url: '/product/brand/page', params }) |
|||
} |
|||
|
|||
// 获得商品品牌精简信息列表
|
|||
export const getSimpleBrandList = () => { |
|||
return request.get({ url: '/product/brand/list-all-simple' }) |
|||
} |
@ -0,0 +1,60 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
/** |
|||
* 产品分类 |
|||
*/ |
|||
export interface CategoryVO { |
|||
/** |
|||
* 分类编号 |
|||
*/ |
|||
id?: number |
|||
/** |
|||
* 父分类编号 |
|||
*/ |
|||
parentId?: number |
|||
/** |
|||
* 分类名称 |
|||
*/ |
|||
name: string |
|||
/** |
|||
* 移动端分类图 |
|||
*/ |
|||
picUrl: string |
|||
/** |
|||
* PC 端分类图 |
|||
*/ |
|||
bigPicUrl?: string |
|||
/** |
|||
* 分类排序 |
|||
*/ |
|||
sort: number |
|||
/** |
|||
* 开启状态 |
|||
*/ |
|||
status: number |
|||
} |
|||
|
|||
// 创建商品分类
|
|||
export const createCategory = (data: CategoryVO) => { |
|||
return request.post({ url: '/product/category/create', data }) |
|||
} |
|||
|
|||
// 更新商品分类
|
|||
export const updateCategory = (data: CategoryVO) => { |
|||
return request.put({ url: '/product/category/update', data }) |
|||
} |
|||
|
|||
// 删除商品分类
|
|||
export const deleteCategory = (id: number) => { |
|||
return request.delete({ url: `/product/category/delete?id=${id}` }) |
|||
} |
|||
|
|||
// 获得商品分类
|
|||
export const getCategory = (id: number) => { |
|||
return request.get({ url: `/product/category/get?id=${id}` }) |
|||
} |
|||
|
|||
// 获得商品分类列表
|
|||
export const getCategoryList = (params: any) => { |
|||
return request.get({ url: '/product/category/list', params }) |
|||
} |
@ -0,0 +1,103 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
/** |
|||
* 商品属性 |
|||
*/ |
|||
export interface PropertyVO { |
|||
id?: number |
|||
/** 名称 */ |
|||
name: string |
|||
/** 备注 */ |
|||
remark?: string |
|||
} |
|||
|
|||
/** |
|||
* 属性值 |
|||
*/ |
|||
export interface PropertyValueVO { |
|||
id?: number |
|||
/** 属性项的编号 */ |
|||
propertyId?: number |
|||
/** 名称 */ |
|||
name: string |
|||
/** 备注 */ |
|||
remark?: string |
|||
} |
|||
|
|||
/** |
|||
* 商品属性值的明细 |
|||
*/ |
|||
export interface PropertyValueDetailVO { |
|||
/** 属性项的编号 */ |
|||
propertyId: number // 属性的编号
|
|||
/** 属性的名称 */ |
|||
propertyName: string |
|||
/** 属性值的编号 */ |
|||
valueId: number |
|||
/** 属性值的名称 */ |
|||
valueName: string |
|||
} |
|||
|
|||
// ------------------------ 属性项 -------------------
|
|||
|
|||
// 创建属性项
|
|||
export const createProperty = (data: PropertyVO) => { |
|||
return request.post({ url: '/product/property/create', data }) |
|||
} |
|||
|
|||
// 更新属性项
|
|||
export const updateProperty = (data: PropertyVO) => { |
|||
return request.put({ url: '/product/property/update', data }) |
|||
} |
|||
|
|||
// 删除属性项
|
|||
export const deleteProperty = (id: number) => { |
|||
return request.delete({ url: `/product/property/delete?id=${id}` }) |
|||
} |
|||
|
|||
// 获得属性项
|
|||
export const getProperty = (id: number): Promise<PropertyVO> => { |
|||
return request.get({ url: `/product/property/get?id=${id}` }) |
|||
} |
|||
|
|||
// 获得属性项分页
|
|||
export const getPropertyPage = (params: PageParam) => { |
|||
return request.get({ url: '/product/property/page', params }) |
|||
} |
|||
|
|||
// 获得属性项列表
|
|||
export const getPropertyList = (params: any) => { |
|||
return request.get({ url: '/product/property/list', params }) |
|||
} |
|||
|
|||
// 获得属性项列表
|
|||
export const getPropertyListAndValue = (data: any) => { |
|||
return request.post({ url: '/product/property/get-value-list', data }) |
|||
} |
|||
|
|||
// ------------------------ 属性值 -------------------
|
|||
|
|||
// 获得属性值分页
|
|||
export const getPropertyValuePage = (params: PageParam & any) => { |
|||
return request.get({ url: '/product/property/value/page', params }) |
|||
} |
|||
|
|||
// 获得属性值
|
|||
export const getPropertyValue = (id: number): Promise<PropertyValueVO> => { |
|||
return request.get({ url: `/product/property/value/get?id=${id}` }) |
|||
} |
|||
|
|||
// 创建属性值
|
|||
export const createPropertyValue = (data: PropertyValueVO) => { |
|||
return request.post({ url: '/product/property/value/create', data }) |
|||
} |
|||
|
|||
// 更新属性值
|
|||
export const updatePropertyValue = (data: PropertyValueVO) => { |
|||
return request.put({ url: '/product/property/value/update', data }) |
|||
} |
|||
|
|||
// 删除属性值
|
|||
export const deletePropertyValue = (id: number) => { |
|||
return request.delete({ url: `/product/property/value/delete?id=${id}` }) |
|||
} |
@ -0,0 +1,107 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface Property { |
|||
propertyId?: number // 属性编号
|
|||
propertyName?: string // 属性名称
|
|||
valueId?: number // 属性值编号
|
|||
valueName?: string // 属性值名称
|
|||
} |
|||
|
|||
export interface Sku { |
|||
id?: number // 商品 SKU 编号
|
|||
spuId?: number // SPU 编号
|
|||
properties?: Property[] // 属性数组
|
|||
price?: number // 商品价格
|
|||
marketPrice?: number // 市场价
|
|||
costPrice?: number // 成本价
|
|||
barCode?: string // 商品条码
|
|||
picUrl?: string // 图片地址
|
|||
stock?: number // 库存
|
|||
weight?: number // 商品重量,单位:kg 千克
|
|||
volume?: number // 商品体积,单位:m^3 平米
|
|||
subCommissionFirstPrice?: number // 一级分销的佣金
|
|||
subCommissionSecondPrice?: number // 二级分销的佣金
|
|||
salesCount?: number // 商品销量
|
|||
} |
|||
|
|||
export interface Spu { |
|||
id?: number |
|||
name?: string // 商品名称
|
|||
categoryId?: number | null // 商品分类
|
|||
keyword?: string // 关键字
|
|||
unit?: number | null // 单位
|
|||
picUrl?: string // 商品封面图
|
|||
sliderPicUrls?: string[] // 商品轮播图
|
|||
introduction?: string // 商品简介
|
|||
deliveryTemplateId?: number | null // 运费模版
|
|||
brandId?: number | null // 商品品牌编号
|
|||
specType?: boolean // 商品规格
|
|||
subCommissionType?: boolean // 分销类型
|
|||
skus?: Sku[] // sku数组
|
|||
description?: string // 商品详情
|
|||
sort?: number // 商品排序
|
|||
giveIntegral?: number // 赠送积分
|
|||
virtualSalesCount?: number // 虚拟销量
|
|||
recommendHot?: boolean // 是否热卖
|
|||
recommendBenefit?: boolean // 是否优惠
|
|||
recommendBest?: boolean // 是否精品
|
|||
recommendNew?: boolean // 是否新品
|
|||
recommendGood?: boolean // 是否优品
|
|||
price?: number // 商品价格
|
|||
salesCount?: number // 商品销量
|
|||
marketPrice?: number // 市场价
|
|||
costPrice?: number // 成本价
|
|||
stock?: number // 商品库存
|
|||
createTime?: Date // 商品创建时间
|
|||
status?: number // 商品状态
|
|||
} |
|||
|
|||
// 获得 Spu 列表
|
|||
export const getSpuPage = (params: PageParam) => { |
|||
return request.get({ url: '/product/spu/page', params }) |
|||
} |
|||
|
|||
// 获得 Spu 列表 tabsCount
|
|||
export const getTabsCount = () => { |
|||
return request.get({ url: '/product/spu/get-count' }) |
|||
} |
|||
|
|||
// 创建商品 Spu
|
|||
export const createSpu = (data: Spu) => { |
|||
return request.post({ url: '/product/spu/create', data }) |
|||
} |
|||
|
|||
// 更新商品 Spu
|
|||
export const updateSpu = (data: Spu) => { |
|||
return request.put({ url: '/product/spu/update', data }) |
|||
} |
|||
|
|||
// 更新商品 Spu status
|
|||
export const updateStatus = (data: { id: number; status: number }) => { |
|||
return request.put({ url: '/product/spu/update-status', data }) |
|||
} |
|||
|
|||
// 获得商品 Spu
|
|||
export const getSpu = (id: number) => { |
|||
return request.get({ url: `/product/spu/get-detail?id=${id}` }) |
|||
} |
|||
|
|||
// 获得商品 Spu 详情列表
|
|||
export const getSpuDetailList = (ids: number[]) => { |
|||
return request.get({ url: `/product/spu/list?spuIds=${ids}` }) |
|||
} |
|||
|
|||
// 删除商品 Spu
|
|||
export const deleteSpu = (id: number) => { |
|||
return request.delete({ url: `/product/spu/delete?id=${id}` }) |
|||
} |
|||
|
|||
// 导出商品 Spu Excel
|
|||
export const exportSpu = async (params) => { |
|||
return await request.download({ url: '/product/spu/export', params }) |
|||
} |
|||
|
|||
// 获得商品 SPU 精简列表
|
|||
export const getSpuSimpleList = async () => { |
|||
return request.get({ url: '/product/spu/get-simple-list' }) |
|||
} |
@ -0,0 +1,62 @@ |
|||
import request from '@/config/axios' |
|||
import { Sku, Spu } from '@/api/mall/product/spu' |
|||
|
|||
export interface BargainActivityVO { |
|||
id?: number |
|||
name?: string |
|||
startTime?: Date |
|||
endTime?: Date |
|||
status?: number |
|||
spuId?: number |
|||
userSize?: number // 达到该人数,才能砍到低价
|
|||
bargainCount?: number // 最大帮砍次数
|
|||
totalLimitCount?: number // 最大购买次数
|
|||
stock?: number // 活动总库存
|
|||
randomMinPrice?: number // 用户每次砍价的最小金额,单位:分
|
|||
randomMaxPrice?: number // 用户每次砍价的最大金额,单位:分
|
|||
successCount?: number // 砍价成功数量
|
|||
products?: BargainProductVO[] |
|||
} |
|||
|
|||
// 砍价活动所需属性
|
|||
export interface BargainProductVO { |
|||
spuId: number |
|||
skuId: number |
|||
bargainFirstPrice: number // 砍价起始价格,单位分
|
|||
bargainPrice: number // 砍价底价
|
|||
stock: number // 活动库存
|
|||
} |
|||
|
|||
// 扩展 Sku 配置
|
|||
export type SkuExtension = Sku & { |
|||
productConfig: BargainProductVO |
|||
} |
|||
|
|||
export interface SpuExtension extends Spu { |
|||
skus: SkuExtension[] // 重写类型
|
|||
} |
|||
|
|||
// 查询砍价活动列表
|
|||
export const getBargainActivityPage = async (params: any) => { |
|||
return await request.get({ url: '/promotion/bargain-activity/page', params }) |
|||
} |
|||
|
|||
// 查询砍价活动详情
|
|||
export const getBargainActivity = async (id: number) => { |
|||
return await request.get({ url: '/promotion/bargain-activity/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增砍价活动
|
|||
export const createBargainActivity = async (data: BargainActivityVO) => { |
|||
return await request.post({ url: '/promotion/bargain-activity/create', data }) |
|||
} |
|||
|
|||
// 修改砍价活动
|
|||
export const updateBargainActivity = async (data: BargainActivityVO) => { |
|||
return await request.put({ url: '/promotion/bargain-activity/update', data }) |
|||
} |
|||
|
|||
// 删除砍价活动
|
|||
export const deleteBargainActivity = async (id: number) => { |
|||
return await request.delete({ url: '/promotion/bargain-activity/delete?id=' + id }) |
|||
} |
@ -0,0 +1,61 @@ |
|||
import request from '@/config/axios' |
|||
import { Sku, Spu } from '@/api/mall/product/spu' |
|||
|
|||
export interface CombinationActivityVO { |
|||
id?: number |
|||
name?: string |
|||
spuId?: number |
|||
totalLimitCount?: number |
|||
singleLimitCount?: number |
|||
startTime?: Date |
|||
endTime?: Date |
|||
userSize?: number |
|||
totalCount?: number |
|||
successCount?: number |
|||
orderUserCount?: number |
|||
virtualGroup?: number |
|||
status?: number |
|||
limitDuration?: number |
|||
products: CombinationProductVO[] |
|||
} |
|||
|
|||
// 拼团活动所需属性
|
|||
export interface CombinationProductVO { |
|||
spuId: number |
|||
skuId: number |
|||
combinationPrice: number // 拼团价格
|
|||
} |
|||
|
|||
// 扩展 Sku 配置
|
|||
export type SkuExtension = Sku & { |
|||
productConfig: CombinationProductVO |
|||
} |
|||
|
|||
export interface SpuExtension extends Spu { |
|||
skus: SkuExtension[] // 重写类型
|
|||
} |
|||
|
|||
// 查询拼团活动列表
|
|||
export const getCombinationActivityPage = async (params) => { |
|||
return await request.get({ url: '/promotion/combination-activity/page', params }) |
|||
} |
|||
|
|||
// 查询拼团活动详情
|
|||
export const getCombinationActivity = async (id: number) => { |
|||
return await request.get({ url: '/promotion/combination-activity/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增拼团活动
|
|||
export const createCombinationActivity = async (data: CombinationActivityVO) => { |
|||
return await request.post({ url: '/promotion/combination-activity/create', data }) |
|||
} |
|||
|
|||
// 修改拼团活动
|
|||
export const updateCombinationActivity = async (data: CombinationActivityVO) => { |
|||
return await request.put({ url: '/promotion/combination-activity/update', data }) |
|||
} |
|||
|
|||
// 删除拼团活动
|
|||
export const deleteCombinationActivity = async (id: number) => { |
|||
return await request.delete({ url: '/promotion/combination-activity/delete?id=' + id }) |
|||
} |
@ -0,0 +1,18 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// TODO @dhb52:vo 缺少
|
|||
|
|||
// 删除优惠劵
|
|||
export const deleteCoupon = async (id: number) => { |
|||
return request.delete({ |
|||
url: `/promotion/coupon/delete?id=${id}` |
|||
}) |
|||
} |
|||
|
|||
// 获得优惠劵分页
|
|||
export const getCouponPage = async (params: PageParam) => { |
|||
return request.get({ |
|||
url: '/promotion/coupon/page', |
|||
params: params |
|||
}) |
|||
} |
@ -0,0 +1,83 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface CouponTemplateVO { |
|||
id: number |
|||
name: string |
|||
status: number |
|||
totalCount: number |
|||
takeLimitCount: number |
|||
takeType: number |
|||
usePrice: number |
|||
productScope: number |
|||
productSpuIds: string |
|||
validityType: number |
|||
validStartTime: Date |
|||
validEndTime: Date |
|||
fixedStartTerm: number |
|||
fixedEndTerm: number |
|||
discountType: number |
|||
discountPercent: number |
|||
discountPrice: number |
|||
discountLimitPrice: number |
|||
takeCount: number |
|||
useCount: number |
|||
} |
|||
|
|||
// 创建优惠劵模板
|
|||
export function createCouponTemplate(data: CouponTemplateVO) { |
|||
return request.post({ |
|||
url: '/promotion/coupon-template/create', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 更新优惠劵模板
|
|||
export function updateCouponTemplate(data: CouponTemplateVO) { |
|||
return request.put({ |
|||
url: '/promotion/coupon-template/update', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 更新优惠劵模板的状态
|
|||
export function updateCouponTemplateStatus(id: number, status: [0, 1]) { |
|||
const data = { |
|||
id, |
|||
status |
|||
} |
|||
return request.put({ |
|||
url: '/promotion/coupon-template/update-status', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 删除优惠劵模板
|
|||
export function deleteCouponTemplate(id: number) { |
|||
return request.delete({ |
|||
url: '/promotion/coupon-template/delete?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得优惠劵模板
|
|||
export function getCouponTemplate(id: number) { |
|||
return request.get({ |
|||
url: '/promotion/coupon-template/get?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得优惠劵模板分页
|
|||
export function getCouponTemplatePage(params: PageParam) { |
|||
return request.get({ |
|||
url: '/promotion/coupon-template/page', |
|||
params: params |
|||
}) |
|||
} |
|||
|
|||
// 导出优惠劵模板 Excel
|
|||
export function exportCouponTemplateExcel(params: PageParam) { |
|||
return request.get({ |
|||
url: '/promotion/coupon-template/export-excel', |
|||
params: params, |
|||
responseType: 'blob' |
|||
}) |
|||
} |
@ -0,0 +1,63 @@ |
|||
import request from '@/config/axios' |
|||
import { Sku, Spu } from '@/api/mall/product/spu' |
|||
|
|||
export interface SeckillActivityVO { |
|||
id?: number |
|||
spuId?: number |
|||
name?: string |
|||
status?: number |
|||
remark?: string |
|||
startTime?: Date |
|||
endTime?: Date |
|||
sort?: number |
|||
configIds?: string |
|||
orderCount?: number |
|||
userCount?: number |
|||
totalPrice?: number |
|||
totalLimitCount?: number |
|||
singleLimitCount?: number |
|||
stock?: number |
|||
totalStock?: number |
|||
products?: SeckillProductVO[] |
|||
} |
|||
|
|||
// 秒杀活动所需属性
|
|||
export interface SeckillProductVO { |
|||
skuId: number |
|||
seckillPrice: number |
|||
stock: number |
|||
} |
|||
|
|||
// 扩展 Sku 配置
|
|||
export type SkuExtension = Sku & { |
|||
productConfig: SeckillProductVO |
|||
} |
|||
|
|||
export interface SpuExtension extends Spu { |
|||
skus: SkuExtension[] // 重写类型
|
|||
} |
|||
|
|||
// 查询秒杀活动列表
|
|||
export const getSeckillActivityPage = async (params) => { |
|||
return await request.get({ url: '/promotion/seckill-activity/page', params }) |
|||
} |
|||
|
|||
// 查询秒杀活动详情
|
|||
export const getSeckillActivity = async (id: number) => { |
|||
return await request.get({ url: '/promotion/seckill-activity/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增秒杀活动
|
|||
export const createSeckillActivity = async (data: SeckillActivityVO) => { |
|||
return await request.post({ url: '/promotion/seckill-activity/create', data }) |
|||
} |
|||
|
|||
// 修改秒杀活动
|
|||
export const updateSeckillActivity = async (data: SeckillActivityVO) => { |
|||
return await request.put({ url: '/promotion/seckill-activity/update', data }) |
|||
} |
|||
|
|||
// 删除秒杀活动
|
|||
export const deleteSeckillActivity = async (id: number) => { |
|||
return await request.delete({ url: '/promotion/seckill-activity/delete?id=' + id }) |
|||
} |
@ -0,0 +1,49 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SeckillConfigVO { |
|||
id: number |
|||
name: string |
|||
startTime: string |
|||
endTime: string |
|||
sliderPicUrls: string[] |
|||
status: number |
|||
} |
|||
|
|||
// 查询秒杀时段配置列表
|
|||
export const getSeckillConfigPage = async (params) => { |
|||
return await request.get({ url: '/promotion/seckill-config/page', params }) |
|||
} |
|||
|
|||
// 查询秒杀时段配置详情
|
|||
export const getSeckillConfig = async (id: number) => { |
|||
return await request.get({ url: '/promotion/seckill-config/get?id=' + id }) |
|||
} |
|||
|
|||
// 获得所有开启状态的秒杀时段精简列表
|
|||
export const getSimpleSeckillConfigList = async () => { |
|||
return await request.get({ url: '/promotion/seckill-config/list-all-simple' }) |
|||
} |
|||
|
|||
// 新增秒杀时段配置
|
|||
export const createSeckillConfig = async (data: SeckillConfigVO) => { |
|||
return await request.post({ url: '/promotion/seckill-config/create', data }) |
|||
} |
|||
|
|||
// 修改秒杀时段配置
|
|||
export const updateSeckillConfig = async (data: SeckillConfigVO) => { |
|||
return await request.put({ url: '/promotion/seckill-config/update', data }) |
|||
} |
|||
|
|||
// 修改时段配置状态
|
|||
export const updateSeckillConfigStatus = (id: number, status: number) => { |
|||
const data = { |
|||
id, |
|||
status |
|||
} |
|||
return request.put({ url: '/promotion/seckill-config/update-status', data: data }) |
|||
} |
|||
|
|||
// 删除秒杀时段配置
|
|||
export const deleteSeckillConfig = async (id: number) => { |
|||
return await request.delete({ url: '/promotion/seckill-config/delete?id=' + id }) |
|||
} |
@ -0,0 +1,40 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DeliveryExpressVO { |
|||
id: number |
|||
code: string |
|||
name: string |
|||
logo: string |
|||
sort: number |
|||
status: number |
|||
} |
|||
|
|||
// 查询快递公司列表
|
|||
export const getDeliveryExpressPage = async (params: PageParam) => { |
|||
return await request.get({ url: '/trade/delivery/express/page', params }) |
|||
} |
|||
|
|||
// 查询快递公司详情
|
|||
export const getDeliveryExpress = async (id: number) => { |
|||
return await request.get({ url: '/trade/delivery/express/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增快递公司
|
|||
export const createDeliveryExpress = async (data: DeliveryExpressVO) => { |
|||
return await request.post({ url: '/trade/delivery/express/create', data }) |
|||
} |
|||
|
|||
// 修改快递公司
|
|||
export const updateDeliveryExpress = async (data: DeliveryExpressVO) => { |
|||
return await request.put({ url: '/trade/delivery/express/update', data }) |
|||
} |
|||
|
|||
// 删除快递公司
|
|||
export const deleteDeliveryExpress = async (id: number) => { |
|||
return await request.delete({ url: '/trade/delivery/express/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出快递公司 Excel
|
|||
export const exportDeliveryExpressApi = async (params) => { |
|||
return await request.download({ url: '/trade/delivery/express/export-excel', params }) |
|||
} |
@ -0,0 +1,54 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DeliveryExpressTemplateVO { |
|||
id: number |
|||
name: string |
|||
chargeMode: number |
|||
sort: number |
|||
templateCharge: ExpressTemplateChargeVO[] |
|||
templateFree: ExpressTemplateFreeVO[] |
|||
} |
|||
|
|||
export declare type ExpressTemplateChargeVO = { |
|||
areaIds: number[] |
|||
startCount: number |
|||
startPrice: number |
|||
extraCount: number |
|||
extraPrice: number |
|||
} |
|||
|
|||
export declare type ExpressTemplateFreeVO = { |
|||
areaIds: number[] |
|||
freeCount: number |
|||
freePrice: number |
|||
} |
|||
|
|||
// 查询快递运费模板列表
|
|||
export const getDeliveryExpressTemplatePage = async (params: PageParam) => { |
|||
return await request.get({ url: '/trade/delivery/express-template/page', params }) |
|||
} |
|||
|
|||
// 查询快递运费模板详情
|
|||
export const getDeliveryExpressTemplate = async (id: number) => { |
|||
return await request.get({ url: '/trade/delivery/express-template/get?id=' + id }) |
|||
} |
|||
|
|||
// 查询快递运费模板详情
|
|||
export const getSimpleTemplateList = async () => { |
|||
return await request.get({ url: '/trade/delivery/express-template/list-all-simple' }) |
|||
} |
|||
|
|||
// 新增快递运费模板
|
|||
export const createDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => { |
|||
return await request.post({ url: '/trade/delivery/express-template/create', data }) |
|||
} |
|||
|
|||
// 修改快递运费模板
|
|||
export const updateDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => { |
|||
return await request.put({ url: '/trade/delivery/express-template/update', data }) |
|||
} |
|||
|
|||
// 删除快递运费模板
|
|||
export const deleteDeliveryExpressTemplate = async (id: number) => { |
|||
return await request.delete({ url: '/trade/delivery/express-template/delete?id=' + id }) |
|||
} |
@ -0,0 +1,46 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DeliveryPickUpStoreVO { |
|||
id: number |
|||
name: string |
|||
introduction: string |
|||
phone: string |
|||
areaId: number |
|||
detailAddress: string |
|||
logo: string |
|||
openingTime: string |
|||
closingTime: string |
|||
latitude: number |
|||
longitude: number |
|||
status: number |
|||
} |
|||
|
|||
// 查询自提门店列表
|
|||
export const getDeliveryPickUpStorePage = async (params: DeliveryPickUpStorePageReqVO) => { |
|||
return await request.get({ url: '/trade/delivery/pick-up-store/page', params }) |
|||
} |
|||
|
|||
// 查询自提门店详情
|
|||
export const getDeliveryPickUpStore = async (id: number) => { |
|||
return await request.get({ url: '/trade/delivery/pick-up-store/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增自提门店
|
|||
export const createDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => { |
|||
return await request.post({ url: '/trade/delivery/pick-up-store/create', data }) |
|||
} |
|||
|
|||
// 修改自提门店
|
|||
export const updateDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => { |
|||
return await request.put({ url: '/trade/delivery/pick-up-store/update', data }) |
|||
} |
|||
|
|||
// 删除自提门店
|
|||
export const deleteDeliveryPickUpStore = async (id: number) => { |
|||
return await request.delete({ url: '/trade/delivery/pick-up-store/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出自提门店 Excel
|
|||
export const exportDeliveryPickUpStoreApi = async (params) => { |
|||
return await request.download({ url: '/trade/delivery/pick-up-store/export-excel', params }) |
|||
} |
@ -0,0 +1,12 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得交易订单分页
|
|||
// TODO @xiaobai:改成 getOrderPage
|
|||
export const getOrderList = (params: PageParam) => { |
|||
return request.get({ url: '/trade/order/page', params }) |
|||
} |
|||
|
|||
// 获得交易订单详情
|
|||
export const getOrderDetail = (id: number) => { |
|||
return request.get({ url: '/trade/order/get-detail?id=' + id }) |
|||
} |
@ -0,0 +1,228 @@ |
|||
// TODO @xiaobai:这个放到 order/index.ts 里哈
|
|||
// TODO @xiaobai:注释放到变量后面,这样简洁一点
|
|||
// TODO @xiaobai:这个改成 TradeOrderRespVO
|
|||
export interface TradeOrderPageItemRespVO { |
|||
// 订单编号
|
|||
id?: number |
|||
// 订单流水号
|
|||
no?: string |
|||
// 下单时间
|
|||
createTime?: Date |
|||
// 订单类型
|
|||
type?: number |
|||
// 订单来源
|
|||
terminal?: number |
|||
// 用户编号
|
|||
userId?: number |
|||
// 用户 IP
|
|||
userIp?: string |
|||
// 用户备注
|
|||
userRemark?: string |
|||
// 订单状态
|
|||
status?: number |
|||
// 购买的商品数量
|
|||
productCount?: number |
|||
// 订单完成时间
|
|||
finishTime?: Date |
|||
// 订单取消时间
|
|||
cancelTime?: Date |
|||
// 取消类型
|
|||
cancelType?: number |
|||
// 商家备注
|
|||
remark?: string |
|||
// 支付订单编号
|
|||
payOrderId: number |
|||
// 是否已支付
|
|||
payed?: boolean |
|||
// 付款时间
|
|||
payTime?: Date |
|||
// 支付渠道
|
|||
payChannelCode?: string |
|||
// 商品原价(总)
|
|||
originalPrice?: number |
|||
// 订单原价(总)
|
|||
orderPrice?: number |
|||
// 订单优惠(总)
|
|||
discountPrice?: number |
|||
// 运费金额
|
|||
deliveryPrice?: number |
|||
// 订单调价(总)
|
|||
adjustPrice?: number |
|||
// 应付金额(总)
|
|||
payPrice?: number |
|||
// 配送模板编号
|
|||
deliveryTemplateId?: number |
|||
// 发货物流公司编号
|
|||
logisticsId?: number |
|||
// 发货物流单号
|
|||
logisticsNo?: string |
|||
// 发货状态
|
|||
deliveryStatus?: number |
|||
// 发货时间
|
|||
deliveryTime?: Date |
|||
// 收货时间
|
|||
receiveTime?: Date |
|||
// 收件人名称
|
|||
receiverName?: string |
|||
// 收件人手机
|
|||
receiverMobile?: string |
|||
// 收件人地区编号
|
|||
receiverAreaId?: number |
|||
// 收件人邮编
|
|||
receiverPostCode?: number |
|||
// 收件人详细地址
|
|||
receiverDetailAddress?: string |
|||
// 售后状态
|
|||
afterSaleStatus?: number |
|||
// 退款金额
|
|||
refundPrice?: number |
|||
// 优惠劵编号
|
|||
couponId?: number |
|||
// 优惠劵减免金额
|
|||
couponPrice?: number |
|||
// 积分抵扣的金额
|
|||
pointPrice?: number |
|||
//收件人地区名字
|
|||
receiverAreaName?: string |
|||
// 订单项列表
|
|||
items?: TradeOrderItemBaseVO[] |
|||
//用户信息
|
|||
user?: MemberUserRespDTO |
|||
} |
|||
|
|||
// TODO @xiaobai:这个改成 TradeOrderItemRespVO
|
|||
/** |
|||
* 交易订单项 Base VO,提供给添加、修改、详细的子 VO 使用 |
|||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
|||
*/ |
|||
export interface TradeOrderItemBaseVO { |
|||
// ========== 订单项基本信息 ==========
|
|||
/** |
|||
* 编号 |
|||
*/ |
|||
id?: number |
|||
/** |
|||
* 用户编号 |
|||
*/ |
|||
userId?: number |
|||
/** |
|||
* 订单编号 |
|||
*/ |
|||
orderId?: number |
|||
// ========== 商品基本信息 ==========
|
|||
/** |
|||
* 商品 SPU 编号 |
|||
*/ |
|||
spuId?: number |
|||
/** |
|||
* 商品 SPU 名称 |
|||
*/ |
|||
spuName?: string |
|||
/** |
|||
* 商品 SKU 编号 |
|||
*/ |
|||
skuId?: number |
|||
/** |
|||
* 商品图片 |
|||
*/ |
|||
picUrl?: string |
|||
/** |
|||
* 购买数量 |
|||
*/ |
|||
count?: number |
|||
// ========== 价格 + 支付基本信息 ==========
|
|||
/** |
|||
* 商品原价(总) |
|||
*/ |
|||
originalPrice?: number |
|||
/** |
|||
* 商品原价(单) |
|||
*/ |
|||
originalUnitPrice?: number |
|||
/** |
|||
* 商品优惠(总) |
|||
*/ |
|||
discountPrice?: number |
|||
/** |
|||
* 商品实付金额(总) |
|||
*/ |
|||
payPrice?: number |
|||
/** |
|||
* 子订单分摊金额(总) |
|||
*/ |
|||
orderPartPrice?: number |
|||
/** |
|||
* 分摊后子订单实付金额(总) |
|||
*/ |
|||
orderDividePrice?: number |
|||
// ========== 营销基本信息 ==========
|
|||
// TODO 芋艿:在捉摸一下
|
|||
// ========== 售后基本信息 ==========
|
|||
/** |
|||
* 售后状态 |
|||
*/ |
|||
afterSaleStatus?: number |
|||
//属性数组
|
|||
properties?: ProductPropertyValueDetailRespVO[] |
|||
} |
|||
|
|||
/** |
|||
* 管理后台 - 商品属性值的明细 Response VO |
|||
*/ |
|||
export interface ProductPropertyValueDetailRespVO { |
|||
/** |
|||
* 属性的编号 |
|||
*/ |
|||
propertyId?: number |
|||
/** |
|||
* 属性的名称 |
|||
*/ |
|||
propertyName?: string |
|||
/** |
|||
* 属性值的编号 |
|||
*/ |
|||
valueId?: number |
|||
/** |
|||
* 属性值的名称 |
|||
*/ |
|||
valueName?: string |
|||
} |
|||
|
|||
/** |
|||
* 订单详情查询 请求 |
|||
*/ |
|||
export interface TradeOrderPageReqVO { |
|||
pageNo: number |
|||
pageSize: number |
|||
no?: string |
|||
userId?: string |
|||
userNickname?: string |
|||
userMobile?: string |
|||
receiverName?: string |
|||
receiverMobile?: string |
|||
terminal?: string |
|||
type?: number |
|||
status?: number |
|||
payChannelCode?: string |
|||
createTime?: [Date, Date] |
|||
spuName?: string |
|||
itemCount?: string |
|||
all?: string |
|||
} |
|||
|
|||
//用户信息
|
|||
export interface MemberUserRespDTO { |
|||
id?: number |
|||
nickname?: string |
|||
status?: number |
|||
avatar?: string |
|||
mobile?: string |
|||
} |
|||
//订单详情选中type
|
|||
export interface SelectType { |
|||
queryParams: TradeOrderPageReqVO |
|||
selectTotal: number //选中的数量
|
|||
selectAllFlag: boolean //全选标识
|
|||
selectData: Map<number, Set<string>> //存放涉及选中得页面以及每页选中得数据订单号 全选时根据条件查询 排除取消的list订单
|
|||
unSelectList: Set<string> //登记取消的list 全选标识为true 时登记单独取消的list,再次选中时排除, 全选标识为false 时清空list
|
|||
} |
@ -0,0 +1,46 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface AccountVO { |
|||
id: number |
|||
name: string |
|||
} |
|||
|
|||
// 创建公众号账号
|
|||
export const createAccount = async (data) => { |
|||
return await request.post({ url: '/mp/account/create', data }) |
|||
} |
|||
|
|||
// 更新公众号账号
|
|||
export const updateAccount = async (data) => { |
|||
return request.put({ url: '/mp/account/update', data: data }) |
|||
} |
|||
|
|||
// 删除公众号账号
|
|||
export const deleteAccount = async (id) => { |
|||
return request.delete({ url: '/mp/account/delete?id=' + id, method: 'delete' }) |
|||
} |
|||
|
|||
// 获得公众号账号
|
|||
export const getAccount = async (id) => { |
|||
return request.get({ url: '/mp/account/get?id=' + id }) |
|||
} |
|||
|
|||
// 获得公众号账号分页
|
|||
export const getAccountPage = async (query) => { |
|||
return request.get({ url: '/mp/account/page', params: query }) |
|||
} |
|||
|
|||
// 获取公众号账号精简信息列表
|
|||
export const getSimpleAccountList = async () => { |
|||
return request.get({ url: '/mp/account/list-all-simple' }) |
|||
} |
|||
|
|||
// 生成公众号二维码
|
|||
export const generateAccountQrCode = async (id) => { |
|||
return request.put({ url: '/mp/account/generate-qr-code?id=' + id }) |
|||
} |
|||
|
|||
// 清空公众号 API 配额
|
|||
export const clearAccountQuota = async (id) => { |
|||
return request.put({ url: '/mp/account/clear-quota?id=' + id }) |
|||
} |
@ -0,0 +1,39 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 创建公众号的自动回复
|
|||
export const createAutoReply = (data) => { |
|||
return request.post({ |
|||
url: '/mp/auto-reply/create', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 更新公众号的自动回复
|
|||
export const updateAutoReply = (data) => { |
|||
return request.put({ |
|||
url: '/mp/auto-reply/update', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 删除公众号的自动回复
|
|||
export const deleteAutoReply = (id) => { |
|||
return request.delete({ |
|||
url: '/mp/auto-reply/delete?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得公众号的自动回复
|
|||
export const getAutoReply = (id) => { |
|||
return request.get({ |
|||
url: '/mp/auto-reply/get?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得公众号的自动回复分页
|
|||
export const getAutoReplyPage = (query) => { |
|||
return request.get({ |
|||
url: '/mp/auto-reply/page', |
|||
params: query |
|||
}) |
|||
} |
@ -0,0 +1,35 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得公众号草稿分页
|
|||
export const getDraftPage = (query) => { |
|||
return request.get({ |
|||
url: '/mp/draft/page', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 创建公众号草稿
|
|||
export const createDraft = (accountId, articles) => { |
|||
return request.post({ |
|||
url: '/mp/draft/create?accountId=' + accountId, |
|||
data: { |
|||
articles |
|||
} |
|||
}) |
|||
} |
|||
|
|||
// 更新公众号草稿
|
|||
export const updateDraft = (accountId, mediaId, articles) => { |
|||
return request.put({ |
|||
url: '/mp/draft/update?accountId=' + accountId + '&mediaId=' + mediaId, |
|||
method: 'put', |
|||
data: articles |
|||
}) |
|||
} |
|||
|
|||
// 删除公众号草稿
|
|||
export const deleteDraft = (accountId, mediaId) => { |
|||
return request.delete({ |
|||
url: '/mp/draft/delete?accountId=' + accountId + '&mediaId=' + mediaId |
|||
}) |
|||
} |
@ -0,0 +1,23 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得公众号素材分页
|
|||
export const getFreePublishPage = (query) => { |
|||
return request.get({ |
|||
url: '/mp/free-publish/page', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 删除公众号素材
|
|||
export const deleteFreePublish = (accountId, articleId) => { |
|||
return request.delete({ |
|||
url: '/mp/free-publish/delete?accountId=' + accountId + '&articleId=' + articleId |
|||
}) |
|||
} |
|||
|
|||
// 发布公众号素材
|
|||
export const submitFreePublish = (accountId, mediaId) => { |
|||
return request.post({ |
|||
url: '/mp/free-publish/submit?accountId=' + accountId + '&mediaId=' + mediaId |
|||
}) |
|||
} |
@ -0,0 +1,16 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得公众号素材分页
|
|||
export const getMaterialPage = (query) => { |
|||
return request.get({ |
|||
url: '/mp/material/page', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 删除公众号永久素材
|
|||
export const deletePermanentMaterial = (id) => { |
|||
return request.delete({ |
|||
url: '/mp/material/delete-permanent?id=' + id |
|||
}) |
|||
} |
@ -0,0 +1,26 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得公众号菜单列表
|
|||
export const getMenuList = (accountId) => { |
|||
return request.get({ |
|||
url: '/mp/menu/list?accountId=' + accountId |
|||
}) |
|||
} |
|||
|
|||
// 保存公众号菜单
|
|||
export const saveMenu = (accountId, menus) => { |
|||
return request.post({ |
|||
url: '/mp/menu/save', |
|||
data: { |
|||
accountId, |
|||
menus |
|||
} |
|||
}) |
|||
} |
|||
|
|||
// 删除公众号菜单
|
|||
export const deleteMenu = (accountId) => { |
|||
return request.delete({ |
|||
url: '/mp/menu/delete?accountId=' + accountId |
|||
}) |
|||
} |
@ -0,0 +1,17 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得公众号消息分页
|
|||
export const getMessagePage = (query: PageParam) => { |
|||
return request.get({ |
|||
url: '/mp/message/page', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 给粉丝发送消息
|
|||
export const sendMessage = (data) => { |
|||
return request.post({ |
|||
url: '/mp/message/send', |
|||
data: data |
|||
}) |
|||
} |
@ -0,0 +1,33 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获取消息发送概况数据
|
|||
export const getUpstreamMessage = (query) => { |
|||
return request.get({ |
|||
url: '/mp/statistics/upstream-message', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 用户增减数据
|
|||
export const getUserSummary = (query) => { |
|||
return request.get({ |
|||
url: '/mp/statistics/user-summary', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 获得用户累计数据
|
|||
export const getUserCumulate = (query) => { |
|||
return request.get({ |
|||
url: '/mp/statistics/user-cumulate', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 获得接口分析数据
|
|||
export const getInterfaceSummary = (query) => { |
|||
return request.get({ |
|||
url: '/mp/statistics/interface-summary', |
|||
params: query |
|||
}) |
|||
} |
@ -0,0 +1,60 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface TagVO { |
|||
id?: number |
|||
name: string |
|||
accountId: number |
|||
createTime: Date |
|||
} |
|||
|
|||
// 创建公众号标签
|
|||
export const createTag = (data: TagVO) => { |
|||
return request.post({ |
|||
url: '/mp/tag/create', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 更新公众号标签
|
|||
export const updateTag = (data: TagVO) => { |
|||
return request.put({ |
|||
url: '/mp/tag/update', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 删除公众号标签
|
|||
export const deleteTag = (id: number) => { |
|||
return request.delete({ |
|||
url: '/mp/tag/delete?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得公众号标签
|
|||
export const getTag = (id: number) => { |
|||
return request.get({ |
|||
url: '/mp/tag/get?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得公众号标签分页
|
|||
export const getTagPage = (query: PageParam) => { |
|||
return request.get({ |
|||
url: '/mp/tag/page', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 获取公众号标签精简信息列表
|
|||
export const getSimpleTagList = () => { |
|||
return request.get({ |
|||
url: '/mp/tag/list-all-simple' |
|||
}) |
|||
} |
|||
|
|||
// 同步公众号标签
|
|||
export const syncTag = (accountId: number) => { |
|||
return request.post({ |
|||
url: '/mp/tag/sync?accountId=' + accountId |
|||
}) |
|||
} |
@ -0,0 +1,31 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 更新公众号粉丝
|
|||
export const updateUser = (data) => { |
|||
return request.put({ |
|||
url: '/mp/user/update', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 获得公众号粉丝
|
|||
export const getUser = (id) => { |
|||
return request.get({ |
|||
url: '/mp/user/get?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得公众号粉丝分页
|
|||
export const getUserPage = (query) => { |
|||
return request.get({ |
|||
url: '/mp/user/page', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 同步公众号粉丝
|
|||
export const syncUser = (accountId) => { |
|||
return request.post({ |
|||
url: '/mp/tag/sync?accountId=' + accountId |
|||
}) |
|||
} |
@ -0,0 +1,65 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface AppVO { |
|||
id: number |
|||
name: string |
|||
status: number |
|||
remark: string |
|||
payNotifyUrl: string |
|||
refundNotifyUrl: string |
|||
merchantId: number |
|||
merchantName: string |
|||
createTime: Date |
|||
} |
|||
|
|||
export interface AppPageReqVO extends PageParam { |
|||
name?: string |
|||
status?: number |
|||
remark?: string |
|||
payNotifyUrl?: string |
|||
refundNotifyUrl?: string |
|||
merchantName?: string |
|||
createTime?: Date[] |
|||
} |
|||
|
|||
export interface AppUpdateStatusReqVO { |
|||
id: number |
|||
status: number |
|||
} |
|||
|
|||
// 查询列表支付应用
|
|||
export const getAppPage = (params: AppPageReqVO) => { |
|||
return request.get({ url: '/pay/app/page', params }) |
|||
} |
|||
|
|||
// 查询详情支付应用
|
|||
export const getApp = (id: number) => { |
|||
return request.get({ url: '/pay/app/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增支付应用
|
|||
export const createApp = (data: AppVO) => { |
|||
return request.post({ url: '/pay/app/create', data }) |
|||
} |
|||
|
|||
// 修改支付应用
|
|||
export const updateApp = (data: AppVO) => { |
|||
return request.put({ url: '/pay/app/update', data }) |
|||
} |
|||
|
|||
// 支付应用信息状态修改
|
|||
export const changeAppStatus = (data: AppUpdateStatusReqVO) => { |
|||
return request.put({ url: '/pay/app/update-status', data: data }) |
|||
} |
|||
|
|||
// 删除支付应用
|
|||
export const deleteApp = (id: number) => { |
|||
return request.delete({ url: '/pay/app/delete?id=' + id }) |
|||
} |
|||
|
|||
// 获得支付应用列表
|
|||
export const getAppList = () => { |
|||
return request.get({ |
|||
url: '/pay/app/list' |
|||
}) |
|||
} |
@ -0,0 +1,46 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ChannelVO { |
|||
id: number |
|||
code: string |
|||
config: string |
|||
status: number |
|||
remark: string |
|||
feeRate: number |
|||
appId: number |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询列表支付渠道
|
|||
export const getChannelPage = (params: PageParam) => { |
|||
return request.get({ url: '/pay/channel/page', params }) |
|||
} |
|||
|
|||
// 查询详情支付渠道
|
|||
export const getChannel = (appId: string, code: string) => { |
|||
const params = { |
|||
appId: appId, |
|||
code: code |
|||
} |
|||
return request.get({ url: '/pay/channel/get', params: params }) |
|||
} |
|||
|
|||
// 新增支付渠道
|
|||
export const createChannel = (data: ChannelVO) => { |
|||
return request.post({ url: '/pay/channel/create', data }) |
|||
} |
|||
|
|||
// 修改支付渠道
|
|||
export const updateChannel = (data: ChannelVO) => { |
|||
return request.put({ url: '/pay/channel/update', data }) |
|||
} |
|||
|
|||
// 删除支付渠道
|
|||
export const deleteChannel = (id: number) => { |
|||
return request.delete({ url: '/pay/channel/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出支付渠道
|
|||
export const exportChannel = (params) => { |
|||
return request.download({ url: '/pay/channel/export-excel', params }) |
|||
} |
@ -0,0 +1,36 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DemoOrderVO { |
|||
spuId: number |
|||
createTime: Date |
|||
} |
|||
|
|||
// 创建示例订单
|
|||
export function createDemoOrder(data: DemoOrderVO) { |
|||
return request.post({ |
|||
url: '/pay/demo-order/create', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 获得示例订单
|
|||
export function getDemoOrder(id: number) { |
|||
return request.get({ |
|||
url: '/pay/demo-order/get?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得示例订单分页
|
|||
export function getDemoOrderPage(query: PageParam) { |
|||
return request.get({ |
|||
url: '/pay/demo-order/page', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 退款示例订单
|
|||
export function refundDemoOrder(id) { |
|||
return request.put({ |
|||
url: '/pay/demo-order/refund?id=' + id |
|||
}) |
|||
} |
@ -0,0 +1,16 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得支付通知明细
|
|||
export const getNotifyTaskDetail = (id) => { |
|||
return request.get({ |
|||
url: '/pay/notify/get-detail?id=' + id |
|||
}) |
|||
} |
|||
|
|||
// 获得支付通知分页
|
|||
export const getNotifyTaskPage = (query) => { |
|||
return request.get({ |
|||
url: '/pay/notify/page', |
|||
params: query |
|||
}) |
|||
} |
@ -0,0 +1,104 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface OrderVO { |
|||
id: number |
|||
merchantId: number |
|||
appId: number |
|||
channelId: number |
|||
channelCode: string |
|||
merchantOrderId: string |
|||
subject: string |
|||
body: string |
|||
notifyUrl: string |
|||
notifyStatus: number |
|||
amount: number |
|||
channelFeeRate: number |
|||
channelFeeAmount: number |
|||
status: number |
|||
userIp: string |
|||
expireTime: Date |
|||
successTime: Date |
|||
notifyTime: Date |
|||
successExtensionId: number |
|||
refundStatus: number |
|||
refundTimes: number |
|||
refundAmount: number |
|||
channelUserId: string |
|||
channelOrderNo: string |
|||
createTime: Date |
|||
} |
|||
|
|||
export interface OrderPageReqVO extends PageParam { |
|||
merchantId?: number |
|||
appId?: number |
|||
channelId?: number |
|||
channelCode?: string |
|||
merchantOrderId?: string |
|||
subject?: string |
|||
body?: string |
|||
notifyUrl?: string |
|||
notifyStatus?: number |
|||
amount?: number |
|||
channelFeeRate?: number |
|||
channelFeeAmount?: number |
|||
status?: number |
|||
expireTime?: Date[] |
|||
successTime?: Date[] |
|||
notifyTime?: Date[] |
|||
successExtensionId?: number |
|||
refundStatus?: number |
|||
refundTimes?: number |
|||
channelUserId?: string |
|||
channelOrderNo?: string |
|||
createTime?: Date[] |
|||
} |
|||
|
|||
export interface OrderExportReqVO { |
|||
merchantId?: number |
|||
appId?: number |
|||
channelId?: number |
|||
channelCode?: string |
|||
merchantOrderId?: string |
|||
subject?: string |
|||
body?: string |
|||
notifyUrl?: string |
|||
notifyStatus?: number |
|||
amount?: number |
|||
channelFeeRate?: number |
|||
channelFeeAmount?: number |
|||
status?: number |
|||
expireTime?: Date[] |
|||
successTime?: Date[] |
|||
notifyTime?: Date[] |
|||
successExtensionId?: number |
|||
refundStatus?: number |
|||
refundTimes?: number |
|||
channelUserId?: string |
|||
channelOrderNo?: string |
|||
createTime?: Date[] |
|||
} |
|||
|
|||
// 查询列表支付订单
|
|||
export const getOrderPage = async (params: OrderPageReqVO) => { |
|||
return await request.get({ url: '/pay/order/page', params }) |
|||
} |
|||
|
|||
// 查询详情支付订单
|
|||
export const getOrder = async (id: number) => { |
|||
return await request.get({ url: '/pay/order/get?id=' + id }) |
|||
} |
|||
|
|||
// 获得支付订单的明细
|
|||
export const getOrderDetail = async (id: number) => { |
|||
return await request.get({ url: '/pay/order/get-detail?id=' + id }) |
|||
} |
|||
|
|||
// 提交支付订单
|
|||
export const submitOrder = async (data: any) => { |
|||
return await request.post({ url: '/pay/order/submit', data }) |
|||
} |
|||
|
|||
// 导出支付订单
|
|||
export const exportOrder = async (params: OrderExportReqVO) => { |
|||
return await request.download({ url: '/pay/order/export-excel', params }) |
|||
} |
@ -0,0 +1,116 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface RefundVO { |
|||
id: number |
|||
merchantId: number |
|||
appId: number |
|||
channelId: number |
|||
channelCode: string |
|||
orderId: string |
|||
tradeNo: string |
|||
merchantOrderId: string |
|||
merchantRefundNo: string |
|||
notifyUrl: string |
|||
notifyStatus: number |
|||
status: number |
|||
type: number |
|||
payAmount: number |
|||
refundAmount: number |
|||
reason: string |
|||
userIp: string |
|||
channelOrderNo: string |
|||
channelRefundNo: string |
|||
channelErrorCode: string |
|||
channelErrorMsg: string |
|||
channelExtras: string |
|||
expireTime: Date |
|||
successTime: Date |
|||
notifyTime: Date |
|||
createTime: Date |
|||
} |
|||
|
|||
export interface RefundPageReqVO extends PageParam { |
|||
merchantId?: number |
|||
appId?: number |
|||
channelId?: number |
|||
channelCode?: string |
|||
orderId?: string |
|||
tradeNo?: string |
|||
merchantOrderId?: string |
|||
merchantRefundNo?: string |
|||
notifyUrl?: string |
|||
notifyStatus?: number |
|||
status?: number |
|||
type?: number |
|||
payAmount?: number |
|||
refundAmount?: number |
|||
reason?: string |
|||
userIp?: string |
|||
channelOrderNo?: string |
|||
channelRefundNo?: string |
|||
channelErrorCode?: string |
|||
channelErrorMsg?: string |
|||
channelExtras?: string |
|||
expireTime?: Date[] |
|||
successTime?: Date[] |
|||
notifyTime?: Date[] |
|||
createTime?: Date[] |
|||
} |
|||
|
|||
export interface PayRefundExportReqVO { |
|||
merchantId?: number |
|||
appId?: number |
|||
channelId?: number |
|||
channelCode?: string |
|||
orderId?: string |
|||
tradeNo?: string |
|||
merchantOrderId?: string |
|||
merchantRefundNo?: string |
|||
notifyUrl?: string |
|||
notifyStatus?: number |
|||
status?: number |
|||
type?: number |
|||
payAmount?: number |
|||
refundAmount?: number |
|||
reason?: string |
|||
userIp?: string |
|||
channelOrderNo?: string |
|||
channelRefundNo?: string |
|||
channelErrorCode?: string |
|||
channelErrorMsg?: string |
|||
channelExtras?: string |
|||
expireTime?: Date[] |
|||
successTime?: Date[] |
|||
notifyTime?: Date[] |
|||
createTime?: Date[] |
|||
} |
|||
|
|||
// 查询列表退款订单
|
|||
export const getRefundPage = (params: RefundPageReqVO) => { |
|||
return request.get({ url: '/pay/refund/page', params }) |
|||
} |
|||
|
|||
// 查询详情退款订单
|
|||
export const getRefund = (id: number) => { |
|||
return request.get({ url: '/pay/refund/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增退款订单
|
|||
export const createRefund = (data: RefundVO) => { |
|||
return request.post({ url: '/pay/refund/create', data }) |
|||
} |
|||
|
|||
// 修改退款订单
|
|||
export const updateRefund = (data: RefundVO) => { |
|||
return request.put({ url: '/pay/refund/update', data }) |
|||
} |
|||
|
|||
// 删除退款订单
|
|||
export const deleteRefund = (id: number) => { |
|||
return request.delete({ url: '/pay/refund/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出退款订单
|
|||
export const exportRefund = (params: PayRefundExportReqVO) => { |
|||
return request.download({ url: '/pay/refund/export-excel', params }) |
|||
} |
@ -0,0 +1,19 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ConfigVO { |
|||
id: number |
|||
tradeDeductEnable: number |
|||
tradeDeductUnitPrice: number |
|||
tradeDeductMaxPrice: number |
|||
tradeGivePoint: number |
|||
} |
|||
|
|||
// 查询积分设置详情
|
|||
export const getConfig = async () => { |
|||
return await request.get({ url: `/point/config/get` }) |
|||
} |
|||
|
|||
// 新增修改积分设置
|
|||
export const saveConfig = async (data: ConfigVO) => { |
|||
return await request.put({ url: `/point/config/save`, data }) |
|||
} |
@ -0,0 +1,47 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface RecordVO { |
|||
id: number |
|||
bizId: string |
|||
bizType: string |
|||
type: string |
|||
title: string |
|||
description: string |
|||
point: number |
|||
totalPoint: number |
|||
status: number |
|||
userId: number |
|||
freezingTime: Date |
|||
thawingTime: Date |
|||
createDate: Date |
|||
} |
|||
|
|||
// 查询用户积分记录列表
|
|||
export const getRecordPage = async (params) => { |
|||
return await request.get({ url: `/point/record/page`, params }) |
|||
} |
|||
|
|||
// 查询用户积分记录详情
|
|||
export const getRecord = async (id: number) => { |
|||
return await request.get({ url: `/point/record/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增用户积分记录
|
|||
export const createRecord = async (data: RecordVO) => { |
|||
return await request.post({ url: `/point/record/create`, data }) |
|||
} |
|||
|
|||
// 修改用户积分记录
|
|||
export const updateRecord = async (data: RecordVO) => { |
|||
return await request.put({ url: `/point/record/update`, data }) |
|||
} |
|||
|
|||
// 删除用户积分记录
|
|||
export const deleteRecord = async (id: number) => { |
|||
return await request.delete({ url: `/point/record/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出用户积分记录 Excel
|
|||
export const exportRecord = async (params) => { |
|||
return await request.download({ url: `/point/record/export-excel`, params }) |
|||
} |
@ -0,0 +1,37 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SignInConfigVO { |
|||
id: number |
|||
day: number |
|||
point: number |
|||
} |
|||
|
|||
// 查询积分签到规则列表
|
|||
export const getSignInConfigPage = async (params) => { |
|||
return await request.get({ url: `/point/sign-in-config/page`, params }) |
|||
} |
|||
|
|||
// 查询积分签到规则详情
|
|||
export const getSignInConfig = async (id: number) => { |
|||
return await request.get({ url: `/point/sign-in-config/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增积分签到规则
|
|||
export const createSignInConfig = async (data: SignInConfigVO) => { |
|||
return await request.post({ url: `/point/sign-in-config/create`, data }) |
|||
} |
|||
|
|||
// 修改积分签到规则
|
|||
export const updateSignInConfig = async (data: SignInConfigVO) => { |
|||
return await request.put({ url: `/point/sign-in-config/update`, data }) |
|||
} |
|||
|
|||
// 删除积分签到规则
|
|||
export const deleteSignInConfig = async (id: number) => { |
|||
return await request.delete({ url: `/point/sign-in-config/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出积分签到规则 Excel
|
|||
export const exportSignInConfig = async (params) => { |
|||
return await request.download({ url: `/point/sign-in-config/export-excel`, params }) |
|||
} |
@ -0,0 +1,38 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SignInRecordVO { |
|||
id: number |
|||
userId: number |
|||
day: number |
|||
point: number |
|||
} |
|||
|
|||
// 查询用户签到积分列表
|
|||
export const getSignInRecordPage = async (params) => { |
|||
return await request.get({ url: `/point/sign-in-record/page`, params }) |
|||
} |
|||
|
|||
// 查询用户签到积分详情
|
|||
export const getSignInRecord = async (id: number) => { |
|||
return await request.get({ url: `/point/sign-in-record/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增用户签到积分
|
|||
export const createSignInRecord = async (data: SignInRecordVO) => { |
|||
return await request.post({ url: `/point/sign-in-record/create`, data }) |
|||
} |
|||
|
|||
// 修改用户签到积分
|
|||
export const updateSignInRecord = async (data: SignInRecordVO) => { |
|||
return await request.put({ url: `/point/sign-in-record/update`, data }) |
|||
} |
|||
|
|||
// 删除用户签到积分
|
|||
export const deleteSignInRecord = async (id: number) => { |
|||
return await request.delete({ url: `/point/sign-in-record/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出用户签到积分 Excel
|
|||
export const exportSignInRecord = async (params) => { |
|||
return await request.download({ url: `/point/sign-in-record/export-excel`, params }) |
|||
} |
@ -0,0 +1,19 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得地区树
|
|||
export const getAreaTree = async () => { |
|||
return await request.get({ url: '/system/area/tree' }) |
|||
} |
|||
|
|||
export const getChildrenArea = async (id: number) => { |
|||
return await request.get({ url: '/system/area/get-children?id=' + id }) |
|||
} |
|||
|
|||
export const getAreaListByIds = async (ids) => { |
|||
return await request.get({ url: '/system/area/get-by-ids?ids=' + ids }) |
|||
} |
|||
|
|||
// 获得 IP 对应的地区名
|
|||
export const getAreaByIp = async (ip: string) => { |
|||
return await request.get({ url: '/system/area/get-by-ip?ip=' + ip }) |
|||
} |
@ -0,0 +1,43 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DeptVO { |
|||
id?: number |
|||
name: string |
|||
parentId: number |
|||
status: number |
|||
sort: number |
|||
leaderUserId: number |
|||
phone: string |
|||
email: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询部门(精简)列表
|
|||
export const getSimpleDeptList = async (): Promise<DeptVO[]> => { |
|||
return await request.get({ url: '/system/dept/list-all-simple' }) |
|||
} |
|||
|
|||
// 查询部门列表
|
|||
export const getDeptPage = async (params: PageParam) => { |
|||
return await request.get({ url: '/system/dept/list', params }) |
|||
} |
|||
|
|||
// 查询部门详情
|
|||
export const getDept = async (id: number) => { |
|||
return await request.get({ url: '/system/dept/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增部门
|
|||
export const createDept = async (data: DeptVO) => { |
|||
return await request.post({ url: '/system/dept/create', data: data }) |
|||
} |
|||
|
|||
// 修改部门
|
|||
export const updateDept = async (params: DeptVO) => { |
|||
return await request.put({ url: '/system/dept/update', data: params }) |
|||
} |
|||
|
|||
// 删除部门
|
|||
export const deleteDept = async (id: number) => { |
|||
return await request.delete({ url: '/system/dept/delete?id=' + id }) |
|||
} |
@ -0,0 +1,49 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type DictDataVO = { |
|||
id: number | undefined |
|||
sort: number | undefined |
|||
label: string |
|||
value: string |
|||
dictType: string |
|||
status: number |
|||
colorType: string |
|||
cssClass: string |
|||
remark: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询字典数据(精简)列表
|
|||
export const listSimpleDictData = () => { |
|||
return request.get({ url: '/system/dict-data/list-all-simple' }) |
|||
} |
|||
|
|||
// 查询字典数据列表
|
|||
export const getDictDataPage = (params: PageParam) => { |
|||
return request.get({ url: '/system/dict-data/page', params }) |
|||
} |
|||
|
|||
// 查询字典数据详情
|
|||
export const getDictData = (id: number) => { |
|||
return request.get({ url: '/system/dict-data/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增字典数据
|
|||
export const createDictData = (data: DictDataVO) => { |
|||
return request.post({ url: '/system/dict-data/create', data }) |
|||
} |
|||
|
|||
// 修改字典数据
|
|||
export const updateDictData = (data: DictDataVO) => { |
|||
return request.put({ url: '/system/dict-data/update', data }) |
|||
} |
|||
|
|||
// 删除字典数据
|
|||
export const deleteDictData = (id: number) => { |
|||
return request.delete({ url: '/system/dict-data/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出字典类型数据
|
|||
export const exportDictData = (params) => { |
|||
return request.get({ url: '/system/dict-data/export', params }) |
|||
} |
@ -0,0 +1,44 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type DictTypeVO = { |
|||
id: number | undefined |
|||
name: string |
|||
type: string |
|||
status: number |
|||
remark: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询字典(精简)列表
|
|||
export const getSimpleDictTypeList = () => { |
|||
return request.get({ url: '/system/dict-type/list-all-simple' }) |
|||
} |
|||
|
|||
// 查询字典列表
|
|||
export const getDictTypePage = (params: PageParam) => { |
|||
return request.get({ url: '/system/dict-type/page', params }) |
|||
} |
|||
|
|||
// 查询字典详情
|
|||
export const getDictType = (id: number) => { |
|||
return request.get({ url: '/system/dict-type/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增字典
|
|||
export const createDictType = (data: DictTypeVO) => { |
|||
return request.post({ url: '/system/dict-type/create', data }) |
|||
} |
|||
|
|||
// 修改字典
|
|||
export const updateDictType = (data: DictTypeVO) => { |
|||
return request.put({ url: '/system/dict-type/update', data }) |
|||
} |
|||
|
|||
// 删除字典
|
|||
export const deleteDictType = (id: number) => { |
|||
return request.delete({ url: '/system/dict-type/delete?id=' + id }) |
|||
} |
|||
// 导出字典类型
|
|||
export const exportDictType = (params) => { |
|||
return request.get({ url: '/system/dict-type/export', params }) |
|||
} |
@ -0,0 +1,40 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ErrorCodeVO { |
|||
id: number | undefined |
|||
type: number |
|||
applicationName: string |
|||
code: number | undefined |
|||
message: string |
|||
memo: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询错误码列表
|
|||
export const getErrorCodePage = (params: PageParam) => { |
|||
return request.get({ url: '/system/error-code/page', params }) |
|||
} |
|||
|
|||
// 查询错误码详情
|
|||
export const getErrorCode = (id: number) => { |
|||
return request.get({ url: '/system/error-code/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增错误码
|
|||
export const createErrorCode = (data: ErrorCodeVO) => { |
|||
return request.post({ url: '/system/error-code/create', data }) |
|||
} |
|||
|
|||
// 修改错误码
|
|||
export const updateErrorCode = (data: ErrorCodeVO) => { |
|||
return request.put({ url: '/system/error-code/update', data }) |
|||
} |
|||
|
|||
// 删除错误码
|
|||
export const deleteErrorCode = (id: number) => { |
|||
return request.delete({ url: '/system/error-code/delete?id=' + id }) |
|||
} |
|||
// 导出错误码
|
|||
export const excelErrorCode = (params) => { |
|||
return request.download({ url: '/system/error-code/export-excel', params }) |
|||
} |
@ -0,0 +1,24 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface LoginLogVO { |
|||
id: number |
|||
logType: number |
|||
traceId: number |
|||
userId: number |
|||
userType: number |
|||
username: string |
|||
status: number |
|||
userIp: string |
|||
userAgent: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询登录日志列表
|
|||
export const getLoginLogPage = (params: PageParam) => { |
|||
return request.get({ url: '/system/login-log/page', params }) |
|||
} |
|||
|
|||
// 导出登录日志
|
|||
export const exportLoginLog = (params) => { |
|||
return request.download({ url: '/system/login-log/export', params }) |
|||
} |
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface MailAccountVO { |
|||
id: number |
|||
mail: string |
|||
username: string |
|||
password: string |
|||
host: string |
|||
port: number |
|||
sslEnable: boolean |
|||
} |
|||
|
|||
// 查询邮箱账号列表
|
|||
export const getMailAccountPage = async (params: PageParam) => { |
|||
return await request.get({ url: '/system/mail-account/page', params }) |
|||
} |
|||
|
|||
// 查询邮箱账号详情
|
|||
export const getMailAccount = async (id: number) => { |
|||
return await request.get({ url: '/system/mail-account/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增邮箱账号
|
|||
export const createMailAccount = async (data: MailAccountVO) => { |
|||
return await request.post({ url: '/system/mail-account/create', data }) |
|||
} |
|||
|
|||
// 修改邮箱账号
|
|||
export const updateMailAccount = async (data: MailAccountVO) => { |
|||
return await request.put({ url: '/system/mail-account/update', data }) |
|||
} |
|||
|
|||
// 删除邮箱账号
|
|||
export const deleteMailAccount = async (id: number) => { |
|||
return await request.delete({ url: '/system/mail-account/delete?id=' + id }) |
|||
} |
|||
|
|||
// 获得邮箱账号精简列表
|
|||
export const getSimpleMailAccountList = async () => { |
|||
return request.get({ url: '/system/mail-account/list-all-simple' }) |
|||
} |
@ -0,0 +1,30 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface MailLogVO { |
|||
id: number |
|||
userId: number |
|||
userType: number |
|||
toMail: string |
|||
accountId: number |
|||
fromMail: string |
|||
templateId: number |
|||
templateCode: string |
|||
templateNickname: string |
|||
templateTitle: string |
|||
templateContent: string |
|||
templateParams: string |
|||
sendStatus: number |
|||
sendTime: Date |
|||
sendMessageId: string |
|||
sendException: string |
|||
} |
|||
|
|||
// 查询邮件日志列表
|
|||
export const getMailLogPage = async (params: PageParam) => { |
|||
return await request.get({ url: '/system/mail-log/page', params }) |
|||
} |
|||
|
|||
// 查询邮件日志详情
|
|||
export const getMailLog = async (id: number) => { |
|||
return await request.get({ url: '/system/mail-log/get?id=' + id }) |
|||
} |
@ -0,0 +1,50 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface MailTemplateVO { |
|||
id: number |
|||
name: string |
|||
code: string |
|||
accountId: number |
|||
nickname: string |
|||
title: string |
|||
content: string |
|||
params: string |
|||
status: number |
|||
remark: string |
|||
} |
|||
|
|||
export interface MailSendReqVO { |
|||
mail: string |
|||
templateCode: string |
|||
templateParams: Map<String, Object> |
|||
} |
|||
|
|||
// 查询邮件模版列表
|
|||
export const getMailTemplatePage = async (params: PageParam) => { |
|||
return await request.get({ url: '/system/mail-template/page', params }) |
|||
} |
|||
|
|||
// 查询邮件模版详情
|
|||
export const getMailTemplate = async (id: number) => { |
|||
return await request.get({ url: '/system/mail-template/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增邮件模版
|
|||
export const createMailTemplate = async (data: MailTemplateVO) => { |
|||
return await request.post({ url: '/system/mail-template/create', data }) |
|||
} |
|||
|
|||
// 修改邮件模版
|
|||
export const updateMailTemplate = async (data: MailTemplateVO) => { |
|||
return await request.put({ url: '/system/mail-template/update', data }) |
|||
} |
|||
|
|||
// 删除邮件模版
|
|||
export const deleteMailTemplate = async (id: number) => { |
|||
return await request.delete({ url: '/system/mail-template/delete?id=' + id }) |
|||
} |
|||
|
|||
// 发送邮件
|
|||
export const sendMail = (data: MailSendReqVO) => { |
|||
return request.post({ url: '/system/mail-template/send-mail', data }) |
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue