✨ feat:初始化项目
This commit is contained in:
commit
47decdda43
12
.editorconfig
Normal file
12
.editorconfig
Normal file
|
@ -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 # 关闭末尾空格修剪
|
20
.env
Normal file
20
.env
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# 标题
|
||||||
|
VITE_APP_TITLE=东印科技管理系统
|
||||||
|
|
||||||
|
# 项目本地运行端口号
|
||||||
|
VITE_PORT=9527
|
||||||
|
|
||||||
|
# open 运行 npm run dev 时自动打开浏览器
|
||||||
|
VITE_OPEN=true
|
||||||
|
|
||||||
|
# 租户开关
|
||||||
|
VITE_APP_TENANT_ENABLE=true
|
||||||
|
|
||||||
|
# 验证码的开关
|
||||||
|
VITE_APP_CAPTCHA_ENABLE=true
|
||||||
|
|
||||||
|
# 文档地址的开关
|
||||||
|
VITE_APP_DOCALERT_ENABLE=true
|
||||||
|
|
||||||
|
# 百度统计
|
||||||
|
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
|
36
.env.dev
Normal file
36
.env.dev
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# 开发环境:本地只启动前端项目,依赖开发环境(后端、APP)
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
VITE_DEV=true
|
||||||
|
|
||||||
|
# 请求路径
|
||||||
|
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
|
||||||
|
|
||||||
|
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||||
|
VITE_UPLOAD_TYPE=server
|
||||||
|
# 上传路径
|
||||||
|
VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
VITE_API_URL=/admin-api
|
||||||
|
|
||||||
|
# 是否删除debugger
|
||||||
|
VITE_DROP_DEBUGGER=false
|
||||||
|
|
||||||
|
# 是否删除console.log
|
||||||
|
VITE_DROP_CONSOLE=false
|
||||||
|
|
||||||
|
# 是否sourcemap
|
||||||
|
VITE_SOURCEMAP=true
|
||||||
|
|
||||||
|
# 打包路径
|
||||||
|
VITE_BASE_PATH=/
|
||||||
|
|
||||||
|
# 输出路径
|
||||||
|
VITE_OUT_DIR=dist
|
||||||
|
|
||||||
|
# 商城H5会员端域名
|
||||||
|
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
||||||
|
|
||||||
|
# 验证码的开关
|
||||||
|
VITE_APP_CAPTCHA_ENABLE=true
|
33
.env.prod
Normal file
33
.env.prod
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# 生产环境:只在打包时使用
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
VITE_DEV=false
|
||||||
|
|
||||||
|
# 请求路径
|
||||||
|
VITE_BASE_URL='http://localhost:48080'
|
||||||
|
|
||||||
|
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||||
|
VITE_UPLOAD_TYPE=server
|
||||||
|
# 上传路径
|
||||||
|
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
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-prod
|
||||||
|
|
||||||
|
# 商城H5会员端域名
|
||||||
|
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
33
.env.stage
Normal file
33
.env.stage
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# 预发布环境:只在打包时使用
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
VITE_DEV=false
|
||||||
|
|
||||||
|
# 请求路径
|
||||||
|
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
|
||||||
|
|
||||||
|
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||||
|
VITE_UPLOAD_TYPE=server
|
||||||
|
# 上传路径
|
||||||
|
VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
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
|
||||||
|
|
||||||
|
# 商城H5会员端域名
|
||||||
|
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
33
.env.test
Normal file
33
.env.test
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# 测试环境:只在打包时使用
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
VITE_DEV=false
|
||||||
|
|
||||||
|
# 请求路径
|
||||||
|
VITE_BASE_URL='http://localhost:48080'
|
||||||
|
|
||||||
|
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||||
|
VITE_UPLOAD_TYPE=server
|
||||||
|
# 上传路径
|
||||||
|
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
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-test
|
||||||
|
|
||||||
|
# 商城H5会员端域名
|
||||||
|
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
|
8
.eslintignore
Normal file
8
.eslintignore
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
/build/
|
||||||
|
/config/
|
||||||
|
/dist/
|
||||||
|
/*.js
|
||||||
|
/test/unit/coverage/
|
||||||
|
/node_modules/*
|
||||||
|
/dist*
|
||||||
|
/src/main.ts
|
259
.eslintrc-auto-import.json
Normal file
259
.eslintrc-auto-import.json
Normal file
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
75
.eslintrc.js
Normal file
75
.eslintrc.js
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
// @ts-check
|
||||||
|
const { defineConfig } = require('eslint-define-config')
|
||||||
|
module.exports = defineConfig({
|
||||||
|
root: true,
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
node: true,
|
||||||
|
es6: true
|
||||||
|
},
|
||||||
|
parser: 'vue-eslint-parser',
|
||||||
|
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',
|
||||||
|
'@unocss'
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
'vue/no-setup-props-destructure': 'off',
|
||||||
|
'vue/script-setup-uses-vars': 'error',
|
||||||
|
'vue/no-reserved-component-names': '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/require-toggle-inside-transition': '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',
|
||||||
|
'prettier/prettier': 'off', // 芋艿:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
|
||||||
|
'@unocss/order': 'off', // 芋艿:禁用 unocss 【css】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
||||||
|
'@unocss/order-attributify': 'off' // 芋艿:禁用 unocss 【属性】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
||||||
|
}
|
||||||
|
})
|
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
/dist*
|
||||||
|
pnpm-debug
|
||||||
|
auto-*.d.ts
|
||||||
|
.idea
|
||||||
|
.history
|
11
.prettierignore
Normal file
11
.prettierignore
Normal file
|
@ -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
|
6
.stylelintignore
Normal file
6
.stylelintignore
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
/dist/*
|
||||||
|
/public/*
|
||||||
|
public/*
|
||||||
|
/dist*
|
||||||
|
/src/types/env.d.ts
|
||||||
|
/docs/**/*
|
7
.vscode/extensions.json
vendored
Normal file
7
.vscode/extensions.json
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"Vue.volar",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode"
|
||||||
|
]
|
||||||
|
}
|
8
.vscode/settings.json
vendored
Normal file
8
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll": "explicit"
|
||||||
|
},
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"i18n-ally.localesPaths": ["src/locales"]
|
||||||
|
}
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -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.
|
265
README.md
Normal file
265
README.md
Normal file
|
@ -0,0 +1,265 @@
|
||||||
|
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
|
||||||
|
|
||||||
|
**「我喜欢写代码,乐此不疲」**
|
||||||
|
**「我喜欢做开源,以此为乐」**
|
||||||
|
|
||||||
|
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
|
||||||
|
|
||||||
|
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
|
||||||
|
|
||||||
|
## 🐶 新手必读
|
||||||
|
|
||||||
|
* nodejs > 16.18.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 免费开源的中后台模版,具备如下特性:
|
||||||
|
|
||||||
|
![首页](public/home.png)
|
||||||
|
|
||||||
|
* **最新技术栈**:使用 Vue3、Vite4 等前端前沿技术开发
|
||||||
|
* **TypeScript**: 应用程序级 JavaScript 的语言
|
||||||
|
* **主题**: 可配置的主题
|
||||||
|
* **国际化**:内置完善的国际化方案
|
||||||
|
* **权限**:内置完善的动态路由权限生成方案
|
||||||
|
* **组件**:二次封装了多个常用的组件
|
||||||
|
* **示例**:内置丰富的示例
|
||||||
|
|
||||||
|
## 技术栈
|
||||||
|
|
||||||
|
| 框架 | 说明 | 版本 |
|
||||||
|
|----------------------------------------------------------------------|------------------|--------|
|
||||||
|
| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.8 |
|
||||||
|
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.5.0 |
|
||||||
|
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.4.2 |
|
||||||
|
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.2.2 |
|
||||||
|
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.7 |
|
||||||
|
| [vueuse](https://vueuse.org/) | 常用工具集 | 10.6.1 |
|
||||||
|
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.6.5 |
|
||||||
|
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.5 |
|
||||||
|
| [unocss](https://uno.antfu.me/) | 原子 css | 0.57.4 |
|
||||||
|
| [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 文件高亮 |
|
||||||
|
|
||||||
|
## 🔥 后端架构
|
||||||
|
|
||||||
|
支持 Spring Boot、Spring Cloud 两种架构:
|
||||||
|
|
||||||
|
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
|
||||||
|
|
||||||
|
![架构图](/.image/common/ruoyi-vue-pro-architecture.png)
|
||||||
|
|
||||||
|
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
|
||||||
|
|
||||||
|
![架构图](/.image/common/yudao-cloud-architecture.png)
|
||||||
|
|
||||||
|
## 内置功能
|
||||||
|
|
||||||
|
系统内置多种多种业务功能,可以用于快速你的业务系统:
|
||||||
|
|
||||||
|
* 系统功能
|
||||||
|
* 基础设施
|
||||||
|
* 工作流程
|
||||||
|
* 支付系统
|
||||||
|
* 会员中心
|
||||||
|
* 数据报表
|
||||||
|
* 商城系统
|
||||||
|
* 微信公众号
|
||||||
|
* ERP 系统
|
||||||
|
* CRM 系统
|
||||||
|
|
||||||
|
### 系统功能
|
||||||
|
|
||||||
|
| | 功能 | 描述 |
|
||||||
|
|-----|-------|---------------------------------|
|
||||||
|
| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 |
|
||||||
|
| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 |
|
||||||
|
| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 |
|
||||||
|
| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 |
|
||||||
|
| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 |
|
||||||
|
| | 岗位管理 | 配置系统用户所属担任职务 |
|
||||||
|
| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 |
|
||||||
|
| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 |
|
||||||
|
| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 |
|
||||||
|
| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 |
|
||||||
|
| 🚀 | 邮件管理 | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台 |
|
||||||
|
| 🚀 | 站内信 | 系统内的消息通知,提供站内信模版、站内信消息 |
|
||||||
|
| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
|
||||||
|
| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 |
|
||||||
|
| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 |
|
||||||
|
| | 通知公告 | 系统通知公告信息发布维护 |
|
||||||
|
| 🚀 | 敏感词 | 配置系统敏感词,支持标签分组 |
|
||||||
|
| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 |
|
||||||
|
| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 |
|
||||||
|
|
||||||
|
![功能图](/.image/common/system-feature.png)
|
||||||
|
|
||||||
|
### 工作流程
|
||||||
|
|
||||||
|
| | 功能 | 描述 |
|
||||||
|
|-----|-------|----------------------------------------|
|
||||||
|
| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 |
|
||||||
|
| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 |
|
||||||
|
| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 |
|
||||||
|
| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 |
|
||||||
|
| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 |
|
||||||
|
| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 |
|
||||||
|
| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 |
|
||||||
|
|
||||||
|
![功能图](/.image/common/bpm-feature.png)
|
||||||
|
|
||||||
|
### 支付系统
|
||||||
|
|
||||||
|
| | 功能 | 描述 |
|
||||||
|
|-----|------|---------------------------|
|
||||||
|
| 🚀 | 商户信息 | 管理商户信息,支持 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 实现分布式锁、幂等、限流功能,满足高并发场景 |
|
||||||
|
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
||||||
|
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
||||||
|
|
||||||
|
![功能图](/.image/common/infra-feature.png)
|
||||||
|
|
||||||
|
### 数据报表
|
||||||
|
|
||||||
|
| | 功能 | 描述 |
|
||||||
|
|-----|-------|--------------------|
|
||||||
|
| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 |
|
||||||
|
| 🚀 | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 |
|
||||||
|
|
||||||
|
### 微信公众号
|
||||||
|
|
||||||
|
| | 功能 | 描述 |
|
||||||
|
|-----|--------|-------------------------------|
|
||||||
|
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 |
|
||||||
|
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
|
||||||
|
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
|
||||||
|
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
|
||||||
|
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
|
||||||
|
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
|
||||||
|
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
|
||||||
|
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
|
||||||
|
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
|
||||||
|
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
|
||||||
|
|
||||||
|
### 商城系统
|
||||||
|
|
||||||
|
![功能图](/.image/common/mall-feature.png)
|
||||||
|
|
||||||
|
![功能图](/.image/common/mall-preview.png)
|
||||||
|
|
||||||
|
_前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋道快速开发平台_
|
||||||
|
|
||||||
|
演示地址:<https://doc.iocoder.cn/mall-preview/>
|
||||||
|
|
||||||
|
### ERP 系统
|
||||||
|
|
||||||
|
![功能图](/.image/common/erp-feature.png)
|
||||||
|
|
||||||
|
演示地址:<https://doc.iocoder.cn/erp-preview/>
|
||||||
|
|
||||||
|
### CRM 系统
|
||||||
|
|
||||||
|
![功能图](/.image/common/crm-feature.png)
|
||||||
|
|
||||||
|
演示地址:<https://doc.iocoder.cn/crm-preview/>
|
||||||
|
|
||||||
|
## 🐷 演示图
|
||||||
|
|
||||||
|
### 系统功能
|
||||||
|
|
||||||
|
| 模块 | biu | biu | biu |
|
||||||
|
|----------|-----------------------------|---------------------------|--------------------------|
|
||||||
|
| 登录 & 首页 | ![登录](/.image/登录.jpg) | ![首页](/.image/首页.jpg) | ![个人中心](/.image/个人中心.jpg) |
|
||||||
|
| 用户 & 应用 | ![用户管理](/.image/用户管理.jpg) | ![令牌管理](/.image/令牌管理.jpg) | ![应用管理](/.image/应用管理.jpg) |
|
||||||
|
| 租户 & 套餐 | ![租户管理](/.image/租户管理.jpg) | ![租户套餐](/.image/租户套餐.png) | - |
|
||||||
|
| 部门 & 岗位 | ![部门管理](/.image/部门管理.jpg) | ![岗位管理](/.image/岗位管理.jpg) | - |
|
||||||
|
| 菜单 & 角色 | ![菜单管理](/.image/菜单管理.jpg) | ![角色管理](/.image/角色管理.jpg) | - |
|
||||||
|
| 审计日志 | ![操作日志](/.image/操作日志.jpg) | ![登录日志](/.image/登录日志.jpg) | - |
|
||||||
|
| 短信 | ![短信渠道](/.image/短信渠道.jpg) | ![短信模板](/.image/短信模板.jpg) | ![短信日志](/.image/短信日志.jpg) |
|
||||||
|
| 字典 & 敏感词 | ![字典类型](/.image/字典类型.jpg) | ![字典数据](/.image/字典数据.jpg) | ![敏感词](/.image/敏感词.jpg) |
|
||||||
|
| 错误码 & 通知 | ![错误码管理](/.image/错误码管理.jpg) | ![通知公告](/.image/通知公告.jpg) | - |
|
||||||
|
|
||||||
|
### 工作流程
|
||||||
|
|
||||||
|
| 模块 | biu | biu | biu |
|
||||||
|
|---------|---------------------------------|---------------------------------|---------------------------------|
|
||||||
|
| 流程模型 | ![流程模型-列表](/.image/流程模型-列表.jpg) | ![流程模型-设计](/.image/流程模型-设计.jpg) | ![流程模型-定义](/.image/流程模型-定义.jpg) |
|
||||||
|
| 表单 & 分组 | ![流程表单](/.image/流程表单.jpg) | ![用户分组](/.image/用户分组.jpg) | - |
|
||||||
|
| 我的流程 | ![我的流程-列表](/.image/我的流程-列表.jpg) | ![我的流程-发起](/.image/我的流程-发起.jpg) | ![我的流程-详情](/.image/我的流程-详情.jpg) |
|
||||||
|
| 待办 & 已办 | ![任务列表-审批](/.image/任务列表-审批.jpg) | ![任务列表-待办](/.image/任务列表-待办.jpg) | ![任务列表-已办](/.image/任务列表-已办.jpg) |
|
||||||
|
| OA 请假 | ![OA请假-列表](/.image/OA请假-列表.jpg) | ![OA请假-发起](/.image/OA请假-发起.jpg) | ![OA请假-详情](/.image/OA请假-详情.jpg) |
|
||||||
|
|
||||||
|
### 基础设施
|
||||||
|
|
||||||
|
| 模块 | biu | biu | biu |
|
||||||
|
|---------------|-------------------------------|-----------------------------|---------------------------|
|
||||||
|
| 代码生成 | ![代码生成](/.image/代码生成.jpg) | ![生成效果](/.image/生成效果.jpg) | - |
|
||||||
|
| 文档 | ![系统接口](/.image/系统接口.jpg) | ![数据库文档](/.image/数据库文档.jpg) | - |
|
||||||
|
| 文件 & 配置 | ![文件配置](/.image/文件配置.jpg) | ![文件管理](/.image/文件管理2.jpg) | ![配置管理](/.image/配置管理.jpg) |
|
||||||
|
| 定时任务 | ![定时任务](/.image/定时任务.jpg) | ![任务日志](/.image/任务日志.jpg) | - |
|
||||||
|
| API 日志 | ![访问日志](/.image/访问日志.jpg) | ![错误日志](/.image/错误日志.jpg) | - |
|
||||||
|
| MySQL & Redis | ![MySQL](/.image/MySQL.jpg) | ![Redis](/.image/Redis.jpg) | - |
|
||||||
|
| 监控平台 | ![Java监控](/.image/Java监控.jpg) | ![链路追踪](/.image/链路追踪.jpg) | ![日志中心](/.image/日志中心.jpg) |
|
||||||
|
|
||||||
|
### 支付系统
|
||||||
|
|
||||||
|
| 模块 | biu | biu | biu |
|
||||||
|
|---------|---------------------------|---------------------------------|---------------------------------|
|
||||||
|
| 商家 & 应用 | ![商户信息](/.image/商户信息.jpg) | ![应用信息-列表](/.image/应用信息-列表.jpg) | ![应用信息-编辑](/.image/应用信息-编辑.jpg) |
|
||||||
|
| 支付 & 退款 | ![支付订单](/.image/支付订单.jpg) | ![退款订单](/.image/退款订单.jpg) | --- |
|
||||||
|
|
||||||
|
### 数据报表
|
||||||
|
|
||||||
|
| 模块 | biu | biu | biu |
|
||||||
|
|-------|---------------------------------|---------------------------------|---------------------------------------|
|
||||||
|
| 报表设计器 | ![数据报表](/.image/报表设计器-数据报表.jpg) | ![图形报表](/.image/报表设计器-图形报表.jpg) | ![报表设计器-打印设计](/.image/报表设计器-打印设计.jpg) |
|
||||||
|
| 大屏设计器 | ![大屏列表](/.image/大屏设计器-列表.jpg) | ![大屏预览](/.image/大屏设计器-预览.jpg) | ![大屏编辑](/.image/大屏设计器-编辑.jpg) |
|
100
build/vite/index.ts
Normal file
100
build/vite/index.ts
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
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({
|
||||||
|
// 生成自定义 `auto-components.d.ts` 全局声明
|
||||||
|
dts: 'src/types/auto-components.d.ts',
|
||||||
|
// 自定义组件的解析器
|
||||||
|
resolvers: [ElementPlusResolver()],
|
||||||
|
globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
|
||||||
|
}),
|
||||||
|
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}`
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
112
build/vite/optimize.ts
Normal file
112
build/vite/optimize.ts
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
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/avatar/style/css',
|
||||||
|
'element-plus/es/components/space/style/css',
|
||||||
|
'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 }
|
151
index.html
Normal file
151
index.html
Normal file
|
@ -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="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!"
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
name="description"
|
||||||
|
content="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!"
|
||||||
|
/>
|
||||||
|
<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>
|
16771
package-lock.json
generated
Normal file
16771
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
144
package.json
Normal file
144
package.json
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
{
|
||||||
|
"name": "yudao-ui-admin-vue3",
|
||||||
|
"version": "2.1.0-snapshot",
|
||||||
|
"description": "基于vue3、vite4、element-plus、typesScript",
|
||||||
|
"author": "xingyu",
|
||||||
|
"private": false,
|
||||||
|
"scripts": {
|
||||||
|
"i": "pnpm install",
|
||||||
|
"dev": "vite",
|
||||||
|
"dev-server": "vite --mode dev",
|
||||||
|
"ts:check": "vue-tsc --noEmit",
|
||||||
|
"build:local": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build",
|
||||||
|
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
|
||||||
|
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
|
||||||
|
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
|
||||||
|
"build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod",
|
||||||
|
"serve:dev": "vite preview --mode dev",
|
||||||
|
"serve:prod": "vite preview --mode prod",
|
||||||
|
"preview": "pnpm build:local && 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 \"./src/**/*.{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.3",
|
||||||
|
"@form-create/element-ui": "^3.1.24",
|
||||||
|
"@iconify/iconify": "^3.1.1",
|
||||||
|
"@videojs-player/vue": "^1.0.0",
|
||||||
|
"@vueuse/core": "^10.9.0",
|
||||||
|
"@wangeditor/editor": "^5.1.23",
|
||||||
|
"@wangeditor/editor-for-vue": "^5.1.10",
|
||||||
|
"@zxcvbn-ts/core": "^3.0.4",
|
||||||
|
"animate.css": "^4.1.1",
|
||||||
|
"axios": "^1.6.8",
|
||||||
|
"benz-amr-recorder": "^1.1.5",
|
||||||
|
"bpmn-js-token-simulation": "^0.10.0",
|
||||||
|
"camunda-bpmn-moddle": "^7.0.1",
|
||||||
|
"cropperjs": "^1.6.1",
|
||||||
|
"crypto-js": "^4.2.0",
|
||||||
|
"dayjs": "^1.11.10",
|
||||||
|
"diagram-js": "^12.8.0",
|
||||||
|
"driver.js": "^1.3.1",
|
||||||
|
"echarts": "^5.5.0",
|
||||||
|
"echarts-wordcloud": "^2.1.0",
|
||||||
|
"element-plus": "2.6.1",
|
||||||
|
"fast-xml-parser": "^4.3.2",
|
||||||
|
"highlight.js": "^11.9.0",
|
||||||
|
"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.7",
|
||||||
|
"pinia-plugin-persistedstate": "^3.2.1",
|
||||||
|
"qrcode": "^1.5.3",
|
||||||
|
"qs": "^6.12.0",
|
||||||
|
"steady-xml": "^0.1.0",
|
||||||
|
"url": "^0.11.3",
|
||||||
|
"video.js": "^7.21.5",
|
||||||
|
"vue": "3.4.21",
|
||||||
|
"vue-dompurify-html": "^4.1.4",
|
||||||
|
"vue-i18n": "9.10.2",
|
||||||
|
"vue-router": "^4.3.0",
|
||||||
|
"vue-types": "^5.1.1",
|
||||||
|
"vuedraggable": "^4.1.0",
|
||||||
|
"web-storage-cache": "^1.1.1",
|
||||||
|
"xml-js": "^1.6.11"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@commitlint/cli": "^19.0.1",
|
||||||
|
"@commitlint/config-conventional": "^19.0.0",
|
||||||
|
"@iconify/json": "^2.2.187",
|
||||||
|
"@intlify/unplugin-vue-i18n": "^2.0.0",
|
||||||
|
"@purge-icons/generated": "^0.9.0",
|
||||||
|
"@types/lodash-es": "^4.17.12",
|
||||||
|
"@types/node": "^20.11.21",
|
||||||
|
"@types/nprogress": "^0.2.3",
|
||||||
|
"@types/qrcode": "^1.5.5",
|
||||||
|
"@types/qs": "^6.9.12",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
||||||
|
"@typescript-eslint/parser": "^7.1.0",
|
||||||
|
"@unocss/transformer-variant-group": "^0.58.5",
|
||||||
|
"@unocss/eslint-config": "^0.57.4",
|
||||||
|
"@vitejs/plugin-legacy": "^5.3.1",
|
||||||
|
"@vitejs/plugin-vue": "^5.0.4",
|
||||||
|
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
||||||
|
"autoprefixer": "^10.4.17",
|
||||||
|
"bpmn-js": "8.9.0",
|
||||||
|
"bpmn-js-properties-panel": "0.46.0",
|
||||||
|
"consola": "^3.2.3",
|
||||||
|
"eslint": "^8.57.0",
|
||||||
|
"eslint-config-prettier": "^9.1.0",
|
||||||
|
"eslint-define-config": "^2.1.0",
|
||||||
|
"eslint-plugin-prettier": "^5.1.3",
|
||||||
|
"eslint-plugin-vue": "^9.22.0",
|
||||||
|
"lint-staged": "^15.2.2",
|
||||||
|
"postcss": "^8.4.35",
|
||||||
|
"postcss-html": "^1.6.0",
|
||||||
|
"postcss-scss": "^4.0.9",
|
||||||
|
"prettier": "^3.2.5",
|
||||||
|
"prettier-eslint": "^16.3.0",
|
||||||
|
"rimraf": "^5.0.5",
|
||||||
|
"rollup": "^4.12.0",
|
||||||
|
"sass": "^1.69.5",
|
||||||
|
"stylelint": "^16.2.1",
|
||||||
|
"stylelint-config-html": "^1.1.0",
|
||||||
|
"stylelint-config-recommended": "^14.0.0",
|
||||||
|
"stylelint-config-standard": "^36.0.0",
|
||||||
|
"stylelint-order": "^6.0.4",
|
||||||
|
"terser": "^5.28.1",
|
||||||
|
"typescript": "5.3.3",
|
||||||
|
"unocss": "^0.58.5",
|
||||||
|
"unplugin-auto-import": "^0.16.7",
|
||||||
|
"unplugin-element-plus": "^0.8.0",
|
||||||
|
"unplugin-vue-components": "^0.25.2",
|
||||||
|
"vite": "5.1.4",
|
||||||
|
"vite-plugin-compression": "^0.5.1",
|
||||||
|
"vite-plugin-ejs": "^1.7.0",
|
||||||
|
"vite-plugin-eslint": "^1.8.1",
|
||||||
|
"vite-plugin-progress": "^0.0.7",
|
||||||
|
"vite-plugin-purge-icons": "^0.10.0",
|
||||||
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
|
"vite-plugin-top-level-await": "^1.3.1",
|
||||||
|
"vue-eslint-parser": "^9.3.2",
|
||||||
|
"vue-tsc": "^1.8.27"
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16.0.0",
|
||||||
|
"pnpm": ">=8.6.0"
|
||||||
|
}
|
||||||
|
}
|
9614
pnpm-lock.yaml
Normal file
9614
pnpm-lock.yaml
Normal file
File diff suppressed because it is too large
Load Diff
5
postcss.config.js
Normal file
5
postcss.config.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: {
|
||||||
|
autoprefixer: {}
|
||||||
|
}
|
||||||
|
}
|
22
prettier.config.js
Normal file
22
prettier.config.js
Normal file
|
@ -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
|
||||||
|
}
|
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
public/home.png
Normal file
BIN
public/home.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 73 KiB |
BIN
public/logo.gif
Normal file
BIN
public/logo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
57
src/App.vue
Normal file
57
src/App.vue
Normal file
|
@ -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>
|
8
src/api/bpm/activity/index.ts
Normal file
8
src/api/bpm/activity/index.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export const getActivityList = async (params) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/activity/list',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
43
src/api/bpm/category/index.ts
Normal file
43
src/api/bpm/category/index.ts
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// BPM 流程分类 VO
|
||||||
|
export interface CategoryVO {
|
||||||
|
id: number // 分类编号
|
||||||
|
name: string // 分类名
|
||||||
|
code: string // 分类标志
|
||||||
|
status: number // 分类状态
|
||||||
|
sort: number // 分类排序
|
||||||
|
}
|
||||||
|
|
||||||
|
// BPM 流程分类 API
|
||||||
|
export const CategoryApi = {
|
||||||
|
// 查询流程分类分页
|
||||||
|
getCategoryPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/bpm/category/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询流程分类列表
|
||||||
|
getCategorySimpleList: async () => {
|
||||||
|
return await request.get({ url: `/bpm/category/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询流程分类详情
|
||||||
|
getCategory: async (id: number) => {
|
||||||
|
return await request.get({ url: `/bpm/category/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增流程分类
|
||||||
|
createCategory: async (data: CategoryVO) => {
|
||||||
|
return await request.post({ url: `/bpm/category/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改流程分类
|
||||||
|
updateCategory: async (data: CategoryVO) => {
|
||||||
|
return await request.put({ url: `/bpm/category/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除流程分类
|
||||||
|
deleteCategory: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/bpm/category/delete?id=` + id })
|
||||||
|
}
|
||||||
|
}
|
22
src/api/bpm/definition/index.ts
Normal file
22
src/api/bpm/definition/index.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export const getProcessDefinition = async (id: number, key: string) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/process-definition/get',
|
||||||
|
params: { id, key }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
})
|
||||||
|
}
|
56
src/api/bpm/form/index.ts
Normal file
56
src/api/bpm/form/index.ts
Normal file
|
@ -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 getFormSimpleList = async () => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/form/simple-list'
|
||||||
|
})
|
||||||
|
}
|
27
src/api/bpm/leave/index.ts
Normal file
27
src/api/bpm/leave/index.ts
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type LeaveVO = {
|
||||||
|
id: number
|
||||||
|
status: 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 })
|
||||||
|
}
|
59
src/api/bpm/model/index.ts
Normal file
59
src/api/bpm/model/index.ts
Normal file
|
@ -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 })
|
||||||
|
}
|
42
src/api/bpm/processExpression/index.ts
Normal file
42
src/api/bpm/processExpression/index.ts
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// BPM 流程表达式 VO
|
||||||
|
export interface ProcessExpressionVO {
|
||||||
|
id: number // 编号
|
||||||
|
name: string // 表达式名字
|
||||||
|
status: number // 表达式状态
|
||||||
|
expression: string // 表达式
|
||||||
|
}
|
||||||
|
|
||||||
|
// BPM 流程表达式 API
|
||||||
|
export const ProcessExpressionApi = {
|
||||||
|
// 查询BPM 流程表达式分页
|
||||||
|
getProcessExpressionPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/bpm/process-expression/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询BPM 流程表达式详情
|
||||||
|
getProcessExpression: async (id: number) => {
|
||||||
|
return await request.get({ url: `/bpm/process-expression/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增BPM 流程表达式
|
||||||
|
createProcessExpression: async (data: ProcessExpressionVO) => {
|
||||||
|
return await request.post({ url: `/bpm/process-expression/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改BPM 流程表达式
|
||||||
|
updateProcessExpression: async (data: ProcessExpressionVO) => {
|
||||||
|
return await request.put({ url: `/bpm/process-expression/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除BPM 流程表达式
|
||||||
|
deleteProcessExpression: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/bpm/process-expression/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出BPM 流程表达式 Excel
|
||||||
|
exportProcessExpression: async (params) => {
|
||||||
|
return await request.download({ url: `/bpm/process-expression/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
68
src/api/bpm/processInstance/index.ts
Normal file
68
src/api/bpm/processInstance/index.ts
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
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 type ProcessInstanceCopyVO = {
|
||||||
|
type: number
|
||||||
|
taskName: string
|
||||||
|
taskKey: string
|
||||||
|
processInstanceName: string
|
||||||
|
processInstanceKey: string
|
||||||
|
startUserId: string
|
||||||
|
options: string[]
|
||||||
|
reason: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getProcessInstanceMyPage = async (params: any) => {
|
||||||
|
return await request.get({ url: '/bpm/process-instance/my-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getProcessInstanceManagerPage = async (params: any) => {
|
||||||
|
return await request.get({ url: '/bpm/process-instance/manager-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createProcessInstance = async (data) => {
|
||||||
|
return await request.post({ url: '/bpm/process-instance/create', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const cancelProcessInstanceByStartUser = async (id: number, reason: string) => {
|
||||||
|
const data = {
|
||||||
|
id: id,
|
||||||
|
reason: reason
|
||||||
|
}
|
||||||
|
return await request.delete({ url: '/bpm/process-instance/cancel-by-start-user', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const cancelProcessInstanceByAdmin = async (id: number, reason: string) => {
|
||||||
|
const data = {
|
||||||
|
id: id,
|
||||||
|
reason: reason
|
||||||
|
}
|
||||||
|
return await request.delete({ url: '/bpm/process-instance/cancel-by-admin', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getProcessInstance = async (id: string) => {
|
||||||
|
return await request.get({ url: '/bpm/process-instance/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getProcessInstanceCopyPage = async (params: any) => {
|
||||||
|
return await request.get({ url: '/bpm/process-instance/copy/page', params })
|
||||||
|
}
|
40
src/api/bpm/processListener/index.ts
Normal file
40
src/api/bpm/processListener/index.ts
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// BPM 流程监听器 VO
|
||||||
|
export interface ProcessListenerVO {
|
||||||
|
id: number // 编号
|
||||||
|
name: string // 监听器名字
|
||||||
|
type: string // 监听器类型
|
||||||
|
status: number // 监听器状态
|
||||||
|
event: string // 监听事件
|
||||||
|
valueType: string // 监听器值类型
|
||||||
|
value: string // 监听器值
|
||||||
|
}
|
||||||
|
|
||||||
|
// BPM 流程监听器 API
|
||||||
|
export const ProcessListenerApi = {
|
||||||
|
// 查询流程监听器分页
|
||||||
|
getProcessListenerPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/bpm/process-listener/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询流程监听器详情
|
||||||
|
getProcessListener: async (id: number) => {
|
||||||
|
return await request.get({ url: `/bpm/process-listener/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增流程监听器
|
||||||
|
createProcessListener: async (data: ProcessListenerVO) => {
|
||||||
|
return await request.post({ url: `/bpm/process-listener/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改流程监听器
|
||||||
|
updateProcessListener: async (data: ProcessListenerVO) => {
|
||||||
|
return await request.put({ url: `/bpm/process-listener/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除流程监听器
|
||||||
|
deleteProcessListener: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/bpm/process-listener/delete?id=` + id })
|
||||||
|
}
|
||||||
|
}
|
66
src/api/bpm/task/index.ts
Normal file
66
src/api/bpm/task/index.ts
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type TaskVO = {
|
||||||
|
id: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTaskTodoPage = async (params: any) => {
|
||||||
|
return await request.get({ url: '/bpm/task/todo-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTaskDonePage = async (params: any) => {
|
||||||
|
return await request.get({ url: '/bpm/task/done-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTaskManagerPage = async (params: any) => {
|
||||||
|
return await request.get({ url: '/bpm/task/manager-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const approveTask = async (data: any) => {
|
||||||
|
return await request.put({ url: '/bpm/task/approve', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const rejectTask = async (data: any) => {
|
||||||
|
return await request.put({ url: '/bpm/task/reject', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTaskListByProcessInstanceId = async (processInstanceId: string) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取所有可回退的节点
|
||||||
|
export const getTaskListByReturn = async (id: string) => {
|
||||||
|
return await request.get({ url: '/bpm/task/list-by-return', params: { id } })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 回退
|
||||||
|
export const returnTask = async (data: any) => {
|
||||||
|
return await request.put({ url: '/bpm/task/return', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 委派
|
||||||
|
export const delegateTask = async (data: any) => {
|
||||||
|
return await request.put({ url: '/bpm/task/delegate', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转派
|
||||||
|
export const transferTask = async (data: any) => {
|
||||||
|
return await request.put({ url: '/bpm/task/transfer', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加签
|
||||||
|
export const signCreateTask = async (data: any) => {
|
||||||
|
return await request.put({ url: '/bpm/task/create-sign', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 减签
|
||||||
|
export const signDeleteTask = async (data: any) => {
|
||||||
|
return await request.delete({ url: '/bpm/task/delete-sign', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取减签任务列表
|
||||||
|
export const getChildrenTaskList = async (id: string) => {
|
||||||
|
return await request.get({ url: '/bpm/task/list-by-parent-task-id?parentTaskId=' + id })
|
||||||
|
}
|
47
src/api/bpm/userGroup/index.ts
Normal file
47
src/api/bpm/userGroup/index.ts
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type UserGroupVO = {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
description: string
|
||||||
|
userIds: 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 getUserGroupSimpleList = async (): Promise<UserGroupVO[]> => {
|
||||||
|
return await request.get({ url: '/bpm/user-group/simple-list' })
|
||||||
|
}
|
98
src/api/crm/business/index.ts
Normal file
98
src/api/crm/business/index.ts
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
import { TransferReqVO } from '@/api/crm/permission'
|
||||||
|
|
||||||
|
export interface BusinessVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
customerId: number
|
||||||
|
customerName?: string
|
||||||
|
followUpStatus: boolean
|
||||||
|
contactLastTime: Date
|
||||||
|
contactNextTime: Date
|
||||||
|
ownerUserId: number
|
||||||
|
ownerUserName?: string // 负责人的用户名称
|
||||||
|
ownerUserDept?: string // 负责人的部门名称
|
||||||
|
statusTypeId: number
|
||||||
|
statusTypeName?: string
|
||||||
|
statusId: number
|
||||||
|
statusName?: string
|
||||||
|
endStatus: number
|
||||||
|
endRemark: string
|
||||||
|
dealTime: Date
|
||||||
|
totalProductPrice: number
|
||||||
|
totalPrice: number
|
||||||
|
discountPercent: number
|
||||||
|
remark: string
|
||||||
|
creator: string // 创建人
|
||||||
|
creatorName?: string // 创建人名称
|
||||||
|
createTime: Date // 创建时间
|
||||||
|
updateTime: Date // 更新时间
|
||||||
|
products?: [
|
||||||
|
{
|
||||||
|
id: number
|
||||||
|
productId: number
|
||||||
|
productName: string
|
||||||
|
productNo: string
|
||||||
|
productUnit: number
|
||||||
|
productPrice: number
|
||||||
|
businessPrice: number
|
||||||
|
count: number
|
||||||
|
totalPrice: number
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 商机列表
|
||||||
|
export const getBusinessPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/business/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 商机列表,基于指定客户
|
||||||
|
export const getBusinessPageByCustomer = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/business/page-by-customer`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 商机详情
|
||||||
|
export const getBusiness = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/business/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得 CRM 商机列表(精简)
|
||||||
|
export const getSimpleBusinessList = async () => {
|
||||||
|
return await request.get({ url: `/crm/business/simple-all-list` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增 CRM 商机
|
||||||
|
export const createBusiness = async (data: BusinessVO) => {
|
||||||
|
return await request.post({ url: `/crm/business/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改 CRM 商机
|
||||||
|
export const updateBusiness = async (data: BusinessVO) => {
|
||||||
|
return await request.put({ url: `/crm/business/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改 CRM 商机状态
|
||||||
|
export const updateBusinessStatus = async (data: BusinessVO) => {
|
||||||
|
return await request.put({ url: `/crm/business/update-status`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除 CRM 商机
|
||||||
|
export const deleteBusiness = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/business/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出 CRM 商机 Excel
|
||||||
|
export const exportBusiness = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/business/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 联系人关联商机列表
|
||||||
|
export const getBusinessPageByContact = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/business/page-by-contact`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 商机转移
|
||||||
|
export const transferBusiness = async (data: TransferReqVO) => {
|
||||||
|
return await request.put({ url: '/crm/business/transfer', data })
|
||||||
|
}
|
68
src/api/crm/business/status/index.ts
Normal file
68
src/api/crm/business/status/index.ts
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface BusinessStatusTypeVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
deptIds: number[]
|
||||||
|
statuses?: {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
percent: number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DEFAULT_STATUSES = [
|
||||||
|
{
|
||||||
|
endStatus: 1,
|
||||||
|
key: '结束',
|
||||||
|
name: '赢单',
|
||||||
|
percent: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endStatus: 2,
|
||||||
|
key: '结束',
|
||||||
|
name: '输单',
|
||||||
|
percent: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
endStatus: 3,
|
||||||
|
key: '结束',
|
||||||
|
name: '无效',
|
||||||
|
percent: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
// 查询商机状态组列表
|
||||||
|
export const getBusinessStatusPage = async (params: any) => {
|
||||||
|
return await request.get({ url: `/crm/business-status/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增商机状态组
|
||||||
|
export const createBusinessStatus = async (data: BusinessStatusTypeVO) => {
|
||||||
|
return await request.post({ url: `/crm/business-status/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改商机状态组
|
||||||
|
export const updateBusinessStatus = async (data: BusinessStatusTypeVO) => {
|
||||||
|
return await request.put({ url: `/crm/business-status/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询商机状态类型详情
|
||||||
|
export const getBusinessStatus = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/business-status/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除商机状态
|
||||||
|
export const deleteBusinessStatus = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/business-status/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得商机状态组列表
|
||||||
|
export const getBusinessStatusTypeSimpleList = async () => {
|
||||||
|
return await request.get({ url: `/crm/business-status/type-simple-list` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得商机阶段列表
|
||||||
|
export const getBusinessStatusSimpleList = async (typeId: number) => {
|
||||||
|
return await request.get({ url: `/crm/business-status/status-simple-list`, params: { typeId } })
|
||||||
|
}
|
78
src/api/crm/clue/index.ts
Normal file
78
src/api/crm/clue/index.ts
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
import { TransferReqVO } from '@/api/crm/permission'
|
||||||
|
|
||||||
|
export interface ClueVO {
|
||||||
|
id: number // 编号
|
||||||
|
name: string // 线索名称
|
||||||
|
followUpStatus: boolean // 跟进状态
|
||||||
|
contactLastTime: Date // 最后跟进时间
|
||||||
|
contactLastContent: string // 最后跟进内容
|
||||||
|
contactNextTime: Date // 下次联系时间
|
||||||
|
ownerUserId: number // 负责人的用户编号
|
||||||
|
ownerUserName?: string // 负责人的用户名称
|
||||||
|
ownerUserDept?: string // 负责人的部门名称
|
||||||
|
transformStatus: boolean // 转化状态
|
||||||
|
customerId: number // 客户编号
|
||||||
|
customerName?: string // 客户名称
|
||||||
|
mobile: string // 手机号
|
||||||
|
telephone: string // 电话
|
||||||
|
qq: string // QQ
|
||||||
|
wechat: string // wechat
|
||||||
|
email: string // email
|
||||||
|
areaId: number // 所在地
|
||||||
|
areaName?: string // 所在地名称
|
||||||
|
detailAddress: string // 详细地址
|
||||||
|
industryId: number // 所属行业
|
||||||
|
level: number // 客户等级
|
||||||
|
source: number // 客户来源
|
||||||
|
remark: string // 备注
|
||||||
|
creator: string // 创建人
|
||||||
|
creatorName?: string // 创建人名称
|
||||||
|
createTime: Date // 创建时间
|
||||||
|
updateTime: Date // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询线索列表
|
||||||
|
export const getCluePage = async (params: any) => {
|
||||||
|
return await request.get({ url: `/crm/clue/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询线索详情
|
||||||
|
export const getClue = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/clue/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增线索
|
||||||
|
export const createClue = async (data: ClueVO) => {
|
||||||
|
return await request.post({ url: `/crm/clue/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改线索
|
||||||
|
export const updateClue = async (data: ClueVO) => {
|
||||||
|
return await request.put({ url: `/crm/clue/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除线索
|
||||||
|
export const deleteClue = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/clue/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出线索 Excel
|
||||||
|
export const exportClue = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/clue/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 线索转移
|
||||||
|
export const transferClue = async (data: TransferReqVO) => {
|
||||||
|
return await request.put({ url: '/crm/clue/transfer', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 线索转化为客户
|
||||||
|
export const transformClue = async (id: number) => {
|
||||||
|
return await request.put({ url: '/crm/clue/transform', params: { id } })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得分配给我的、待跟进的线索数量
|
||||||
|
export const getFollowClueCount = async () => {
|
||||||
|
return await request.get({ url: '/crm/clue/follow-count' })
|
||||||
|
}
|
113
src/api/crm/contact/index.ts
Normal file
113
src/api/crm/contact/index.ts
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
import { TransferReqVO } from '@/api/crm/permission'
|
||||||
|
|
||||||
|
export interface ContactVO {
|
||||||
|
id: number // 编号
|
||||||
|
name: string // 联系人名称
|
||||||
|
customerId: number // 客户编号
|
||||||
|
customerName?: string // 客户名称
|
||||||
|
contactLastTime: Date // 最后跟进时间
|
||||||
|
contactLastContent: string // 最后跟进内容
|
||||||
|
contactNextTime: Date // 下次联系时间
|
||||||
|
ownerUserId: number // 负责人的用户编号
|
||||||
|
ownerUserName?: string // 负责人的用户名称
|
||||||
|
ownerUserDept?: string // 负责人的部门名称
|
||||||
|
mobile: string // 手机号
|
||||||
|
telephone: string // 电话
|
||||||
|
qq: string // QQ
|
||||||
|
wechat: string // wechat
|
||||||
|
email: string // email
|
||||||
|
areaId: number // 所在地
|
||||||
|
areaName?: string // 所在地名称
|
||||||
|
detailAddress: string // 详细地址
|
||||||
|
sex: number // 性别
|
||||||
|
master: boolean // 是否主联系人
|
||||||
|
post: string // 职务
|
||||||
|
parentId: number // 上级联系人编号
|
||||||
|
parentName?: string // 上级联系人名称
|
||||||
|
remark: string // 备注
|
||||||
|
creator: string // 创建人
|
||||||
|
creatorName?: string // 创建人名称
|
||||||
|
createTime: Date // 创建时间
|
||||||
|
updateTime: Date // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ContactBusinessReqVO {
|
||||||
|
contactId: number
|
||||||
|
businessIds: number[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ContactBusiness2ReqVO {
|
||||||
|
businessId: number
|
||||||
|
contactIds: number[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 联系人列表
|
||||||
|
export const getContactPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/contact/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 联系人列表,基于指定客户
|
||||||
|
export const getContactPageByCustomer = async (params: any) => {
|
||||||
|
return await request.get({ url: `/crm/contact/page-by-customer`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 联系人列表,基于指定商机
|
||||||
|
export const getContactPageByBusiness = async (params: any) => {
|
||||||
|
return await request.get({ url: `/crm/contact/page-by-business`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 联系人详情
|
||||||
|
export const getContact = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/contact/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增 CRM 联系人
|
||||||
|
export const createContact = async (data: ContactVO) => {
|
||||||
|
return await request.post({ url: `/crm/contact/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改 CRM 联系人
|
||||||
|
export const updateContact = async (data: ContactVO) => {
|
||||||
|
return await request.put({ url: `/crm/contact/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除 CRM 联系人
|
||||||
|
export const deleteContact = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/contact/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出 CRM 联系人 Excel
|
||||||
|
export const exportContact = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/contact/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得 CRM 联系人列表(精简)
|
||||||
|
export const getSimpleContactList = async () => {
|
||||||
|
return await request.get({ url: `/crm/contact/simple-all-list` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量新增联系人商机关联
|
||||||
|
export const createContactBusinessList = async (data: ContactBusinessReqVO) => {
|
||||||
|
return await request.post({ url: `/crm/contact/create-business-list`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量新增联系人商机关联
|
||||||
|
export const createContactBusinessList2 = async (data: ContactBusiness2ReqVO) => {
|
||||||
|
return await request.post({ url: `/crm/contact/create-business-list2`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解除联系人商机关联
|
||||||
|
export const deleteContactBusinessList = async (data: ContactBusinessReqVO) => {
|
||||||
|
return await request.delete({ url: `/crm/contact/delete-business-list`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解除联系人商机关联
|
||||||
|
export const deleteContactBusinessList2 = async (data: ContactBusiness2ReqVO) => {
|
||||||
|
return await request.delete({ url: `/crm/contact/delete-business-list2`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 联系人转移
|
||||||
|
export const transferContact = async (data: TransferReqVO) => {
|
||||||
|
return await request.put({ url: '/crm/contact/transfer', data })
|
||||||
|
}
|
16
src/api/crm/contract/config/index.ts
Normal file
16
src/api/crm/contract/config/index.ts
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ContractConfigVO {
|
||||||
|
notifyEnabled?: boolean
|
||||||
|
notifyDays?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取合同配置
|
||||||
|
export const getContractConfig = async () => {
|
||||||
|
return await request.get({ url: `/crm/contract-config/get` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新合同配置
|
||||||
|
export const saveContractConfig = async (data: ContractConfigVO) => {
|
||||||
|
return await request.put({ url: `/crm/contract-config/save`, data })
|
||||||
|
}
|
114
src/api/crm/contract/index.ts
Normal file
114
src/api/crm/contract/index.ts
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
import { TransferReqVO } from '@/api/crm/permission'
|
||||||
|
|
||||||
|
export interface ContractVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
no: string
|
||||||
|
customerId: number
|
||||||
|
customerName?: string
|
||||||
|
businessId: number
|
||||||
|
businessName: string
|
||||||
|
contactLastTime: Date
|
||||||
|
ownerUserId: number
|
||||||
|
ownerUserName?: string
|
||||||
|
ownerUserDeptName?: string
|
||||||
|
processInstanceId: number
|
||||||
|
auditStatus: number
|
||||||
|
orderDate: Date
|
||||||
|
startTime: Date
|
||||||
|
endTime: Date
|
||||||
|
totalProductPrice: number
|
||||||
|
discountPercent: number
|
||||||
|
totalPrice: number
|
||||||
|
totalReceivablePrice: number
|
||||||
|
signContactId: number
|
||||||
|
signContactName?: string
|
||||||
|
signUserId: number
|
||||||
|
signUserName: string
|
||||||
|
remark: string
|
||||||
|
createTime?: Date
|
||||||
|
creator: string
|
||||||
|
creatorName: string
|
||||||
|
updateTime?: Date
|
||||||
|
products?: [
|
||||||
|
{
|
||||||
|
id: number
|
||||||
|
productId: number
|
||||||
|
productName: string
|
||||||
|
productNo: string
|
||||||
|
productUnit: number
|
||||||
|
productPrice: number
|
||||||
|
contractPrice: number
|
||||||
|
count: number
|
||||||
|
totalPrice: number
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 合同列表
|
||||||
|
export const getContractPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/contract/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 联系人列表,基于指定客户
|
||||||
|
export const getContractPageByCustomer = async (params: any) => {
|
||||||
|
return await request.get({ url: `/crm/contract/page-by-customer`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 联系人列表,基于指定商机
|
||||||
|
export const getContractPageByBusiness = async (params: any) => {
|
||||||
|
return await request.get({ url: `/crm/contract/page-by-business`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 合同详情
|
||||||
|
export const getContract = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/contract/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 CRM 合同下拉列表
|
||||||
|
export const getContractSimpleList = async (customerId: number) => {
|
||||||
|
return await request.get({
|
||||||
|
url: `/crm/contract/simple-list?customerId=${customerId}`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增 CRM 合同
|
||||||
|
export const createContract = async (data: ContractVO) => {
|
||||||
|
return await request.post({ url: `/crm/contract/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改 CRM 合同
|
||||||
|
export const updateContract = async (data: ContractVO) => {
|
||||||
|
return await request.put({ url: `/crm/contract/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除 CRM 合同
|
||||||
|
export const deleteContract = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/contract/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出 CRM 合同 Excel
|
||||||
|
export const exportContract = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/contract/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交审核
|
||||||
|
export const submitContract = async (id: number) => {
|
||||||
|
return await request.put({ url: `/crm/contract/submit?id=${id}` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 合同转移
|
||||||
|
export const transferContract = async (data: TransferReqVO) => {
|
||||||
|
return await request.put({ url: '/crm/contract/transfer', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得待审核合同数量
|
||||||
|
export const getAuditContractCount = async () => {
|
||||||
|
return await request.get({ url: '/crm/contract/audit-count' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得即将到期(提醒)的合同数量
|
||||||
|
export const getRemindContractCount = async () => {
|
||||||
|
return await request.get({ url: '/crm/contract/remind-count' })
|
||||||
|
}
|
132
src/api/crm/customer/index.ts
Normal file
132
src/api/crm/customer/index.ts
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
import { TransferReqVO } from '@/api/crm/permission'
|
||||||
|
|
||||||
|
export interface CustomerVO {
|
||||||
|
id: number // 编号
|
||||||
|
name: string // 客户名称
|
||||||
|
followUpStatus: boolean // 跟进状态
|
||||||
|
contactLastTime: Date // 最后跟进时间
|
||||||
|
contactLastContent: string // 最后跟进内容
|
||||||
|
contactNextTime: Date // 下次联系时间
|
||||||
|
ownerUserId: number // 负责人的用户编号
|
||||||
|
ownerUserName?: string // 负责人的用户名称
|
||||||
|
ownerUserDept?: string // 负责人的部门名称
|
||||||
|
lockStatus?: boolean
|
||||||
|
dealStatus?: boolean
|
||||||
|
mobile: string // 手机号
|
||||||
|
telephone: string // 电话
|
||||||
|
qq: string // QQ
|
||||||
|
wechat: string // wechat
|
||||||
|
email: string // email
|
||||||
|
areaId: number // 所在地
|
||||||
|
areaName?: string // 所在地名称
|
||||||
|
detailAddress: string // 详细地址
|
||||||
|
industryId: number // 所属行业
|
||||||
|
level: number // 客户等级
|
||||||
|
source: number // 客户来源
|
||||||
|
remark: string // 备注
|
||||||
|
creator: string // 创建人
|
||||||
|
creatorName?: string // 创建人名称
|
||||||
|
createTime: Date // 创建时间
|
||||||
|
updateTime: Date // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询客户列表
|
||||||
|
export const getCustomerPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/customer/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 进入公海客户提醒的客户列表
|
||||||
|
export const getPutPoolRemindCustomerPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/customer/put-pool-remind-page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得待进入公海客户数量
|
||||||
|
export const getPutPoolRemindCustomerCount = async () => {
|
||||||
|
return await request.get({ url: `/crm/customer/put-pool-remind-count` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得今日需联系客户数量
|
||||||
|
export const getTodayContactCustomerCount = async () => {
|
||||||
|
return await request.get({ url: `/crm/customer/today-contact-count` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得分配给我、待跟进的线索数量的客户数量
|
||||||
|
export const getFollowCustomerCount = async () => {
|
||||||
|
return await request.get({ url: `/crm/customer/follow-count` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询客户详情
|
||||||
|
export const getCustomer = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/customer/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增客户
|
||||||
|
export const createCustomer = async (data: CustomerVO) => {
|
||||||
|
return await request.post({ url: `/crm/customer/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改客户
|
||||||
|
export const updateCustomer = async (data: CustomerVO) => {
|
||||||
|
return await request.put({ url: `/crm/customer/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新客户的成交状态
|
||||||
|
export const updateCustomerDealStatus = async (id: number, dealStatus: boolean) => {
|
||||||
|
return await request.put({ url: `/crm/customer/update-deal-status`, params: { id, dealStatus } })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除客户
|
||||||
|
export const deleteCustomer = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/customer/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出客户 Excel
|
||||||
|
export const exportCustomer = async (params: any) => {
|
||||||
|
return await request.download({ url: `/crm/customer/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载客户导入模板
|
||||||
|
export const importCustomerTemplate = () => {
|
||||||
|
return request.download({ url: '/crm/customer/get-import-template' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导入客户
|
||||||
|
export const handleImport = async (formData) => {
|
||||||
|
return await request.upload({ url: `/crm/customer/import`, data: formData })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 客户列表
|
||||||
|
export const getCustomerSimpleList = async () => {
|
||||||
|
return await request.get({ url: `/crm/customer/simple-list` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// ======================= 业务操作 =======================
|
||||||
|
|
||||||
|
// 客户转移
|
||||||
|
export const transferCustomer = async (data: TransferReqVO) => {
|
||||||
|
return await request.put({ url: '/crm/customer/transfer', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 锁定/解锁客户
|
||||||
|
export const lockCustomer = async (id: number, lockStatus: boolean) => {
|
||||||
|
return await request.put({ url: `/crm/customer/lock`, data: { id, lockStatus } })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 领取公海客户
|
||||||
|
export const receiveCustomer = async (ids: any[]) => {
|
||||||
|
return await request.put({ url: '/crm/customer/receive', params: { ids: ids.join(',') } })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分配公海给对应负责人
|
||||||
|
export const distributeCustomer = async (ids: any[], ownerUserId: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: '/crm/customer/distribute',
|
||||||
|
data: { ids: ids, ownerUserId }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 客户放入公海
|
||||||
|
export const putCustomerPool = async (id: number) => {
|
||||||
|
return await request.put({ url: `/crm/customer/put-pool?id=${id}` })
|
||||||
|
}
|
49
src/api/crm/customer/limitConfig/index.ts
Normal file
49
src/api/crm/customer/limitConfig/index.ts
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface CustomerLimitConfigVO {
|
||||||
|
id?: number
|
||||||
|
type?: number
|
||||||
|
userIds?: string
|
||||||
|
deptIds?: string
|
||||||
|
maxCount?: number
|
||||||
|
dealCountEnabled?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户限制配置类型
|
||||||
|
*/
|
||||||
|
export enum LimitConfType {
|
||||||
|
/**
|
||||||
|
* 拥有客户数限制
|
||||||
|
*/
|
||||||
|
CUSTOMER_QUANTITY_LIMIT = 1,
|
||||||
|
/**
|
||||||
|
* 锁定客户数限制
|
||||||
|
*/
|
||||||
|
CUSTOMER_LOCK_LIMIT = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询客户限制配置列表
|
||||||
|
export const getCustomerLimitConfigPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/customer-limit-config/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询客户限制配置详情
|
||||||
|
export const getCustomerLimitConfig = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/customer-limit-config/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增客户限制配置
|
||||||
|
export const createCustomerLimitConfig = async (data: CustomerLimitConfigVO) => {
|
||||||
|
return await request.post({ url: `/crm/customer-limit-config/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改客户限制配置
|
||||||
|
export const updateCustomerLimitConfig = async (data: CustomerLimitConfigVO) => {
|
||||||
|
return await request.put({ url: `/crm/customer-limit-config/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除客户限制配置
|
||||||
|
export const deleteCustomerLimitConfig = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/customer-limit-config/delete?id=` + id })
|
||||||
|
}
|
19
src/api/crm/customer/poolConfig/index.ts
Normal file
19
src/api/crm/customer/poolConfig/index.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface CustomerPoolConfigVO {
|
||||||
|
enabled?: boolean
|
||||||
|
contactExpireDays?: number
|
||||||
|
dealExpireDays?: number
|
||||||
|
notifyEnabled?: boolean
|
||||||
|
notifyDays?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取客户公海规则设置
|
||||||
|
export const getCustomerPoolConfig = async () => {
|
||||||
|
return await request.get({ url: `/crm/customer-pool-config/get` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新客户公海规则设置
|
||||||
|
export const saveCustomerPoolConfig = async (data: CustomerPoolConfigVO) => {
|
||||||
|
return await request.put({ url: `/crm/customer-pool-config/save`, data })
|
||||||
|
}
|
43
src/api/crm/followup/index.ts
Normal file
43
src/api/crm/followup/index.ts
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 跟进记录 VO
|
||||||
|
export interface FollowUpRecordVO {
|
||||||
|
id: number // 编号
|
||||||
|
bizType: number // 数据类型
|
||||||
|
bizId: number // 数据编号
|
||||||
|
type: number // 跟进类型
|
||||||
|
content: string // 跟进内容
|
||||||
|
picUrls: string[] // 图片
|
||||||
|
fileUrls: string[] // 附件
|
||||||
|
nextTime: Date // 下次联系时间
|
||||||
|
businessIds: number[] // 关联的商机编号数组
|
||||||
|
businesses: {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
}[] // 关联的商机数组
|
||||||
|
contactIds: number[] // 关联的联系人编号数组
|
||||||
|
contacts: {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
}[] // 关联的联系人数组
|
||||||
|
creator: string
|
||||||
|
creatorName?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 跟进记录 API
|
||||||
|
export const FollowUpRecordApi = {
|
||||||
|
// 查询跟进记录分页
|
||||||
|
getFollowUpRecordPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/crm/follow-up-record/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增跟进记录
|
||||||
|
createFollowUpRecord: async (data: FollowUpRecordVO) => {
|
||||||
|
return await request.post({ url: `/crm/follow-up-record/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除跟进记录
|
||||||
|
deleteFollowUpRecord: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/follow-up-record/delete?id=` + id })
|
||||||
|
}
|
||||||
|
}
|
11
src/api/crm/operateLog/index.ts
Normal file
11
src/api/crm/operateLog/index.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface OperateLogVO extends PageParam {
|
||||||
|
bizType: number
|
||||||
|
bizId: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得操作日志
|
||||||
|
export const getOperateLogPage = async (params: OperateLogVO) => {
|
||||||
|
return await request.get({ url: `/crm/operate-log/page`, params })
|
||||||
|
}
|
72
src/api/crm/permission/index.ts
Normal file
72
src/api/crm/permission/index.ts
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface PermissionVO {
|
||||||
|
id?: number // 数据权限编号
|
||||||
|
userId: number // 用户编号
|
||||||
|
bizType: number // Crm 类型
|
||||||
|
bizId: number // Crm 类型数据编号
|
||||||
|
level: number // 权限级别
|
||||||
|
toBizTypes?: number[] // 同时添加至
|
||||||
|
deptName?: string // 部门名称
|
||||||
|
nickname?: string // 用户昵称
|
||||||
|
postNames?: string[] // 岗位名称数组
|
||||||
|
createTime?: Date
|
||||||
|
ids?: number[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TransferReqVO {
|
||||||
|
id: number // 模块编号
|
||||||
|
newOwnerUserId: number // 新负责人的用户编号
|
||||||
|
oldOwnerPermissionLevel?: number // 老负责人加入团队后的权限级别
|
||||||
|
toBizTypes?: number[] // 转移客户时,需要额外有【联系人】【商机】【合同】的 checkbox 选择
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CRM 业务类型枚举
|
||||||
|
*
|
||||||
|
* @author HUIHUI
|
||||||
|
*/
|
||||||
|
export enum BizTypeEnum {
|
||||||
|
CRM_CLUE = 1, // 线索
|
||||||
|
CRM_CUSTOMER = 2, // 客户
|
||||||
|
CRM_CONTACT = 3, // 联系人
|
||||||
|
CRM_BUSINESS = 4, // 商机
|
||||||
|
CRM_CONTRACT = 5, // 合同
|
||||||
|
CRM_PRODUCT = 6, // 产品
|
||||||
|
CRM_RECEIVABLE = 7, // 回款
|
||||||
|
CRM_RECEIVABLE_PLAN = 8 // 回款计划
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CRM 数据权限级别枚举
|
||||||
|
*/
|
||||||
|
export enum PermissionLevelEnum {
|
||||||
|
OWNER = 1, // 负责人
|
||||||
|
READ = 2, // 只读
|
||||||
|
WRITE = 3 // 读写
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得数据权限列表(查询团队成员列表)
|
||||||
|
export const getPermissionList = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/permission/list`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建数据权限(新增团队成员)
|
||||||
|
export const createPermission = async (data: PermissionVO) => {
|
||||||
|
return await request.post({ url: `/crm/permission/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 编辑数据权限(修改团队成员权限级别)
|
||||||
|
export const updatePermission = async (data) => {
|
||||||
|
return await request.put({ url: `/crm/permission/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除数据权限(删除团队成员)
|
||||||
|
export const deletePermissionBatch = async (val: number[]) => {
|
||||||
|
return await request.delete({ url: '/crm/permission/delete?ids=' + val.join(',') })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除自己的数据权限(退出团队)
|
||||||
|
export const deleteSelfPermission = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/crm/permission/delete-self?id=' + id })
|
||||||
|
}
|
33
src/api/crm/product/category/index.ts
Normal file
33
src/api/crm/product/category/index.ts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// TODO @zange:挪到 product 下,建个 category 包,挪进去哈;
|
||||||
|
export interface ProductCategoryVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
parentId: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询产品分类详情
|
||||||
|
export const getProductCategory = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/product-category/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增产品分类
|
||||||
|
export const createProductCategory = async (data: ProductCategoryVO) => {
|
||||||
|
return await request.post({ url: `/crm/product-category/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改产品分类
|
||||||
|
export const updateProductCategory = async (data: ProductCategoryVO) => {
|
||||||
|
return await request.put({ url: `/crm/product-category/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除产品分类
|
||||||
|
export const deleteProductCategory = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/product-category/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 产品分类列表
|
||||||
|
export const getProductCategoryList = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/product-category/list`, params })
|
||||||
|
}
|
49
src/api/crm/product/index.ts
Normal file
49
src/api/crm/product/index.ts
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ProductVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
no: string
|
||||||
|
unit: number
|
||||||
|
price: number
|
||||||
|
status: number
|
||||||
|
categoryId: number
|
||||||
|
categoryName?: string
|
||||||
|
description: string
|
||||||
|
ownerUserId: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询产品列表
|
||||||
|
export const getProductPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/product/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得产品精简列表
|
||||||
|
export const getProductSimpleList = async () => {
|
||||||
|
return await request.get({ url: `/crm/product/simple-list` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询产品详情
|
||||||
|
export const getProduct = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/product/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增产品
|
||||||
|
export const createProduct = async (data: ProductVO) => {
|
||||||
|
return await request.post({ url: `/crm/product/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改产品
|
||||||
|
export const updateProduct = async (data: ProductVO) => {
|
||||||
|
return await request.put({ url: `/crm/product/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除产品
|
||||||
|
export const deleteProduct = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/product/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出产品 Excel
|
||||||
|
export const exportProduct = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/product/export-excel`, params })
|
||||||
|
}
|
73
src/api/crm/receivable/index.ts
Normal file
73
src/api/crm/receivable/index.ts
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ReceivableVO {
|
||||||
|
id: number
|
||||||
|
no: string
|
||||||
|
planId?: number
|
||||||
|
customerId?: number
|
||||||
|
customerName?: string
|
||||||
|
contractId?: number
|
||||||
|
contract?: {
|
||||||
|
id?: number
|
||||||
|
name?: string
|
||||||
|
no: string
|
||||||
|
totalPrice: number
|
||||||
|
}
|
||||||
|
auditStatus: number
|
||||||
|
processInstanceId: number
|
||||||
|
returnTime: Date
|
||||||
|
returnType: number
|
||||||
|
price: number
|
||||||
|
ownerUserId: number
|
||||||
|
ownerUserName?: string
|
||||||
|
remark: string
|
||||||
|
creator: string // 创建人
|
||||||
|
creatorName?: string // 创建人名称
|
||||||
|
createTime: Date // 创建时间
|
||||||
|
updateTime: Date // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询回款列表
|
||||||
|
export const getReceivablePage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/receivable/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询回款列表
|
||||||
|
export const getReceivablePageByCustomer = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/receivable/page-by-customer`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询回款详情
|
||||||
|
export const getReceivable = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/receivable/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增回款
|
||||||
|
export const createReceivable = async (data: ReceivableVO) => {
|
||||||
|
return await request.post({ url: `/crm/receivable/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改回款
|
||||||
|
export const updateReceivable = async (data: ReceivableVO) => {
|
||||||
|
return await request.put({ url: `/crm/receivable/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除回款
|
||||||
|
export const deleteReceivable = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/receivable/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出回款 Excel
|
||||||
|
export const exportReceivable = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/receivable/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交审核
|
||||||
|
export const submitReceivable = async (id: number) => {
|
||||||
|
return await request.put({ url: `/crm/receivable/submit?id=${id}` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得待审核回款数量
|
||||||
|
export const getAuditReceivableCount = async () => {
|
||||||
|
return await request.get({ url: '/crm/receivable/audit-count' })
|
||||||
|
}
|
74
src/api/crm/receivable/plan/index.ts
Normal file
74
src/api/crm/receivable/plan/index.ts
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ReceivablePlanVO {
|
||||||
|
id: number
|
||||||
|
period: number
|
||||||
|
receivableId: number
|
||||||
|
price: number
|
||||||
|
returnTime: Date
|
||||||
|
remindDays: number
|
||||||
|
returnType: number
|
||||||
|
remindTime: Date
|
||||||
|
customerId: number
|
||||||
|
customerName?: string
|
||||||
|
contractId?: number
|
||||||
|
contractNo?: string
|
||||||
|
ownerUserId: number
|
||||||
|
ownerUserName?: string
|
||||||
|
remark: string
|
||||||
|
creator: string // 创建人
|
||||||
|
creatorName?: string // 创建人名称
|
||||||
|
createTime: Date // 创建时间
|
||||||
|
updateTime: Date // 更新时间
|
||||||
|
receivable?: {
|
||||||
|
price: number
|
||||||
|
returnTime: Date
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询回款计划列表
|
||||||
|
export const getReceivablePlanPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/receivable-plan/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询回款计划列表
|
||||||
|
export const getReceivablePlanPageByCustomer = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/receivable-plan/page-by-customer`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询回款计划详情
|
||||||
|
export const getReceivablePlan = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/receivable-plan/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询回款计划下拉数据
|
||||||
|
export const getReceivablePlanSimpleList = async (customerId: number, contractId: number) => {
|
||||||
|
return await request.get({
|
||||||
|
url: `/crm/receivable-plan/simple-list?customerId=${customerId}&contractId=${contractId}`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增回款计划
|
||||||
|
export const createReceivablePlan = async (data: ReceivablePlanVO) => {
|
||||||
|
return await request.post({ url: `/crm/receivable-plan/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改回款计划
|
||||||
|
export const updateReceivablePlan = async (data: ReceivablePlanVO) => {
|
||||||
|
return await request.put({ url: `/crm/receivable-plan/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除回款计划
|
||||||
|
export const deleteReceivablePlan = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/receivable-plan/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出回款计划 Excel
|
||||||
|
export const exportReceivablePlan = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/receivable-plan/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得待回款提醒数量
|
||||||
|
export const getReceivablePlanRemindCount = async () => {
|
||||||
|
return await request.get({ url: '/crm/receivable-plan/remind-count' })
|
||||||
|
}
|
168
src/api/crm/statistics/customer.ts
Normal file
168
src/api/crm/statistics/customer.ts
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface CrmStatisticsCustomerSummaryByDateRespVO {
|
||||||
|
time: string
|
||||||
|
customerCreateCount: number
|
||||||
|
customerDealCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsCustomerSummaryByUserRespVO {
|
||||||
|
ownerUserName: string
|
||||||
|
customerCreateCount: number
|
||||||
|
customerDealCount: number
|
||||||
|
contractPrice: number
|
||||||
|
receivablePrice: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsFollowUpSummaryByDateRespVO {
|
||||||
|
time: string
|
||||||
|
followUpRecordCount: number
|
||||||
|
followUpCustomerCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsFollowUpSummaryByUserRespVO {
|
||||||
|
ownerUserName: string
|
||||||
|
followupRecordCount: number
|
||||||
|
followupCustomerCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsFollowUpSummaryByTypeRespVO {
|
||||||
|
followUpType: string
|
||||||
|
followUpRecordCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsCustomerContractSummaryRespVO {
|
||||||
|
customerName: string
|
||||||
|
contractName: string
|
||||||
|
totalPrice: number
|
||||||
|
receivablePrice: number
|
||||||
|
customerType: string
|
||||||
|
customerSource: string
|
||||||
|
ownerUserName: string
|
||||||
|
creatorUserName: string
|
||||||
|
createTime: Date
|
||||||
|
orderDate: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsPoolSummaryByDateRespVO {
|
||||||
|
time: string
|
||||||
|
customerPutCount: number
|
||||||
|
customerTakeCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsPoolSummaryByUserRespVO {
|
||||||
|
ownerUserName: string
|
||||||
|
customerPutCount: number
|
||||||
|
customerTakeCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsCustomerDealCycleByDateRespVO {
|
||||||
|
time: string
|
||||||
|
customerDealCycle: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsCustomerDealCycleByUserRespVO {
|
||||||
|
ownerUserName: string
|
||||||
|
customerDealCycle: number
|
||||||
|
customerDealCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsCustomerDealCycleByAreaRespVO {
|
||||||
|
areaName: string
|
||||||
|
customerDealCycle: number
|
||||||
|
customerDealCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsCustomerDealCycleByProductRespVO {
|
||||||
|
productName: string
|
||||||
|
customerDealCycle: number
|
||||||
|
customerDealCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 客户分析 API
|
||||||
|
export const StatisticsCustomerApi = {
|
||||||
|
// 1.1 客户总量分析(按日期)
|
||||||
|
getCustomerSummaryByDate: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-customer-summary-by-date',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 1.2 客户总量分析(按用户)
|
||||||
|
getCustomerSummaryByUser: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-customer-summary-by-user',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 2.1 客户跟进次数分析(按日期)
|
||||||
|
getFollowUpSummaryByDate: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-follow-up-summary-by-date',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 2.2 客户跟进次数分析(按用户)
|
||||||
|
getFollowUpSummaryByUser: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-follow-up-summary-by-user',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 3.1 获取客户跟进方式统计数
|
||||||
|
getFollowUpSummaryByType: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-follow-up-summary-by-type',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 4.1 合同摘要信息(客户转化率页面)
|
||||||
|
getContractSummary: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-contract-summary',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 5.1 获取客户公海分析(按日期)
|
||||||
|
getPoolSummaryByDate: (param: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-pool-summary-by-date',
|
||||||
|
params: param
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 5.2 获取客户公海分析(按用户)
|
||||||
|
getPoolSummaryByUser: (param: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-pool-summary-by-user',
|
||||||
|
params: param
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 6.1 获取客户成交周期(按日期)
|
||||||
|
getCustomerDealCycleByDate: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-customer-deal-cycle-by-date',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 6.2 获取客户成交周期(按用户)
|
||||||
|
getCustomerDealCycleByUser: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-customer-deal-cycle-by-user',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 6.2 获取客户成交周期(按用户)
|
||||||
|
getCustomerDealCycleByArea: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-customer-deal-cycle-by-area',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 6.2 获取客户成交周期(按用户)
|
||||||
|
getCustomerDealCycleByProduct: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-customer/get-customer-deal-cycle-by-product',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
58
src/api/crm/statistics/funnel.ts
Normal file
58
src/api/crm/statistics/funnel.ts
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface CrmStatisticFunnelRespVO {
|
||||||
|
customerCount: number // 客户数
|
||||||
|
businessCount: number // 商机数
|
||||||
|
businessWinCount: number // 赢单数
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsBusinessSummaryByDateRespVO {
|
||||||
|
time: string // 时间
|
||||||
|
businessCreateCount: number // 商机数
|
||||||
|
totalPrice: number | string // 商机金额
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticsBusinessInversionRateSummaryByDateRespVO {
|
||||||
|
time: string // 时间
|
||||||
|
businessCount: number // 商机数量
|
||||||
|
businessWinCount: number // 赢单商机数
|
||||||
|
}
|
||||||
|
|
||||||
|
// 客户分析 API
|
||||||
|
export const StatisticFunnelApi = {
|
||||||
|
// 1. 获取销售漏斗统计数据
|
||||||
|
getFunnelSummary: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-funnel/get-funnel-summary',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 2. 获取商机结束状态统计
|
||||||
|
getBusinessSummaryByEndStatus: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-funnel/get-business-summary-by-end-status',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 3. 获取新增商机分析(按日期)
|
||||||
|
getBusinessSummaryByDate: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-funnel/get-business-summary-by-date',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 4. 获取商机转化率分析(按日期)
|
||||||
|
getBusinessInversionRateSummaryByDate: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-funnel/get-business-inversion-rate-summary-by-date',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 5. 获取商机列表(按日期)
|
||||||
|
getBusinessPageByDate: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-funnel/get-business-page-by-date',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
33
src/api/crm/statistics/performance.ts
Normal file
33
src/api/crm/statistics/performance.ts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface StatisticsPerformanceRespVO {
|
||||||
|
time: string
|
||||||
|
currentMonthCount: number
|
||||||
|
lastMonthCount: number
|
||||||
|
lastYearCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排行 API
|
||||||
|
export const StatisticsPerformanceApi = {
|
||||||
|
// 员工获得合同金额统计
|
||||||
|
getContractPricePerformance: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-performance/get-contract-price-performance',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 员工获得回款统计
|
||||||
|
getReceivablePricePerformance: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-performance/get-receivable-price-performance',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//员工获得签约合同数量统计
|
||||||
|
getContractCountPerformance: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-performance/get-contract-count-performance',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
60
src/api/crm/statistics/portrait.ts
Normal file
60
src/api/crm/statistics/portrait.ts
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface CrmStatisticCustomerBaseRespVO {
|
||||||
|
customerCount: number
|
||||||
|
dealCount: number
|
||||||
|
dealPortion: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticCustomerIndustryRespVO extends CrmStatisticCustomerBaseRespVO {
|
||||||
|
industryId: number
|
||||||
|
industryPortion: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticCustomerSourceRespVO extends CrmStatisticCustomerBaseRespVO {
|
||||||
|
source: number
|
||||||
|
sourcePortion: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticCustomerLevelRespVO extends CrmStatisticCustomerBaseRespVO {
|
||||||
|
level: number
|
||||||
|
levelPortion: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CrmStatisticCustomerAreaRespVO extends CrmStatisticCustomerBaseRespVO {
|
||||||
|
areaId: number
|
||||||
|
areaName: string
|
||||||
|
areaPortion: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 客户分析 API
|
||||||
|
export const StatisticsPortraitApi = {
|
||||||
|
// 1. 获取客户行业统计数据
|
||||||
|
getCustomerIndustry: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-portrait/get-customer-industry-summary',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 2. 获取客户来源统计数据
|
||||||
|
getCustomerSource: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-portrait/get-customer-source-summary',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 3. 获取客户级别统计数据
|
||||||
|
getCustomerLevel: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-portrait/get-customer-level-summary',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 4. 获取客户地区统计数据
|
||||||
|
getCustomerArea: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-portrait/get-customer-area-summary',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
67
src/api/crm/statistics/rank.ts
Normal file
67
src/api/crm/statistics/rank.ts
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface StatisticsRankRespVO {
|
||||||
|
count: number
|
||||||
|
nickname: string
|
||||||
|
deptName: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排行 API
|
||||||
|
export const StatisticsRankApi = {
|
||||||
|
// 获得合同排行榜
|
||||||
|
getContractPriceRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-contract-price-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获得回款排行榜
|
||||||
|
getReceivablePriceRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-receivable-price-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 签约合同排行
|
||||||
|
getContractCountRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-contract-count-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 产品销量排行
|
||||||
|
getProductSalesRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-product-sales-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 新增客户数排行
|
||||||
|
getCustomerCountRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-customer-count-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 新增联系人数排行
|
||||||
|
getContactsCountRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-contacts-count-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 跟进次数排行
|
||||||
|
getFollowCountRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-follow-count-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 跟进客户数排行
|
||||||
|
getFollowCustomerCountRank: (params: any) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/crm/statistics-rank/get-follow-customer-count-rank',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
61
src/api/erp/finance/account/index.ts
Normal file
61
src/api/erp/finance/account/index.ts
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 结算账户 VO
|
||||||
|
export interface AccountVO {
|
||||||
|
id: number // 结算账户编号
|
||||||
|
no: string // 账户编码
|
||||||
|
remark: string // 备注
|
||||||
|
status: number // 开启状态
|
||||||
|
sort: number // 排序
|
||||||
|
defaultStatus: boolean // 是否默认
|
||||||
|
name: string // 账户名称
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 结算账户 API
|
||||||
|
export const AccountApi = {
|
||||||
|
// 查询结算账户分页
|
||||||
|
getAccountPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/account/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询结算账户精简列表
|
||||||
|
getAccountSimpleList: async () => {
|
||||||
|
return await request.get({ url: `/erp/account/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询结算账户详情
|
||||||
|
getAccount: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/account/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增结算账户
|
||||||
|
createAccount: async (data: AccountVO) => {
|
||||||
|
return await request.post({ url: `/erp/account/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改结算账户
|
||||||
|
updateAccount: async (data: AccountVO) => {
|
||||||
|
return await request.put({ url: `/erp/account/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改结算账户默认状态
|
||||||
|
updateAccountDefaultStatus: async (id: number, defaultStatus: boolean) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/account/update-default-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
defaultStatus
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除结算账户
|
||||||
|
deleteAccount: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/erp/account/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出结算账户 Excel
|
||||||
|
exportAccount: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/account/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
61
src/api/erp/finance/payment/index.ts
Normal file
61
src/api/erp/finance/payment/index.ts
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 付款单 VO
|
||||||
|
export interface FinancePaymentVO {
|
||||||
|
id: number // 付款单编号
|
||||||
|
no: string // 付款单号
|
||||||
|
supplierId: number // 供应商编号
|
||||||
|
paymentTime: Date // 付款时间
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 付款单 API
|
||||||
|
export const FinancePaymentApi = {
|
||||||
|
// 查询付款单分页
|
||||||
|
getFinancePaymentPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/finance-payment/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询付款单详情
|
||||||
|
getFinancePayment: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/finance-payment/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增付款单
|
||||||
|
createFinancePayment: async (data: FinancePaymentVO) => {
|
||||||
|
return await request.post({ url: `/erp/finance-payment/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改付款单
|
||||||
|
updateFinancePayment: async (data: FinancePaymentVO) => {
|
||||||
|
return await request.put({ url: `/erp/finance-payment/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新付款单的状态
|
||||||
|
updateFinancePaymentStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/finance-payment/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除付款单
|
||||||
|
deleteFinancePayment: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/finance-payment/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出付款单 Excel
|
||||||
|
exportFinancePayment: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/finance-payment/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
61
src/api/erp/finance/receipt/index.ts
Normal file
61
src/api/erp/finance/receipt/index.ts
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 收款单 VO
|
||||||
|
export interface FinanceReceiptVO {
|
||||||
|
id: number // 收款单编号
|
||||||
|
no: string // 收款单号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
receiptTime: Date // 收款时间
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 收款单 API
|
||||||
|
export const FinanceReceiptApi = {
|
||||||
|
// 查询收款单分页
|
||||||
|
getFinanceReceiptPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/finance-receipt/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询收款单详情
|
||||||
|
getFinanceReceipt: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/finance-receipt/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增收款单
|
||||||
|
createFinanceReceipt: async (data: FinanceReceiptVO) => {
|
||||||
|
return await request.post({ url: `/erp/finance-receipt/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改收款单
|
||||||
|
updateFinanceReceipt: async (data: FinanceReceiptVO) => {
|
||||||
|
return await request.put({ url: `/erp/finance-receipt/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新收款单的状态
|
||||||
|
updateFinanceReceiptStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/finance-receipt/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除收款单
|
||||||
|
deleteFinanceReceipt: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/finance-receipt/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出收款单 Excel
|
||||||
|
exportFinanceReceipt: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/finance-receipt/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
49
src/api/erp/product/category/index.ts
Normal file
49
src/api/erp/product/category/index.ts
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 产品分类 VO
|
||||||
|
export interface ProductCategoryVO {
|
||||||
|
id: number // 分类编号
|
||||||
|
parentId: number // 父分类编号
|
||||||
|
name: string // 分类名称
|
||||||
|
code: string // 分类编码
|
||||||
|
sort: number // 分类排序
|
||||||
|
status: number // 开启状态
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 产品分类 API
|
||||||
|
export const ProductCategoryApi = {
|
||||||
|
// 查询产品分类列表
|
||||||
|
getProductCategoryList: async () => {
|
||||||
|
return await request.get({ url: `/erp/product-category/list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品分类精简列表
|
||||||
|
getProductCategorySimpleList: async () => {
|
||||||
|
return await request.get({ url: `/erp/product-category/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品分类详情
|
||||||
|
getProductCategory: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/product-category/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增产品分类
|
||||||
|
createProductCategory: async (data: ProductCategoryVO) => {
|
||||||
|
return await request.post({ url: `/erp/product-category/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改产品分类
|
||||||
|
updateProductCategory: async (data: ProductCategoryVO) => {
|
||||||
|
return await request.put({ url: `/erp/product-category/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除产品分类
|
||||||
|
deleteProductCategory: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/erp/product-category/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出产品分类 Excel
|
||||||
|
exportProductCategory: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/product-category/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
57
src/api/erp/product/product/index.ts
Normal file
57
src/api/erp/product/product/index.ts
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 产品 VO
|
||||||
|
export interface ProductVO {
|
||||||
|
id: number // 产品编号
|
||||||
|
name: string // 产品名称
|
||||||
|
barCode: string // 产品条码
|
||||||
|
categoryId: number // 产品类型编号
|
||||||
|
unitId: number // 单位编号
|
||||||
|
unitName?: string // 单位名字
|
||||||
|
status: number // 产品状态
|
||||||
|
standard: string // 产品规格
|
||||||
|
remark: string // 产品备注
|
||||||
|
expiryDay: number // 保质期天数
|
||||||
|
weight: number // 重量(kg)
|
||||||
|
purchasePrice: number // 采购价格,单位:元
|
||||||
|
salePrice: number // 销售价格,单位:元
|
||||||
|
minPrice: number // 最低价格,单位:元
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 产品 API
|
||||||
|
export const ProductApi = {
|
||||||
|
// 查询产品分页
|
||||||
|
getProductPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/product/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品精简列表
|
||||||
|
getProductSimpleList: async () => {
|
||||||
|
return await request.get({ url: `/erp/product/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品详情
|
||||||
|
getProduct: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/product/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增产品
|
||||||
|
createProduct: async (data: ProductVO) => {
|
||||||
|
return await request.post({ url: `/erp/product/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改产品
|
||||||
|
updateProduct: async (data: ProductVO) => {
|
||||||
|
return await request.put({ url: `/erp/product/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除产品
|
||||||
|
deleteProduct: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/erp/product/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出产品 Excel
|
||||||
|
exportProduct: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/product/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
46
src/api/erp/product/unit/index.ts
Normal file
46
src/api/erp/product/unit/index.ts
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 产品单位 VO
|
||||||
|
export interface ProductUnitVO {
|
||||||
|
id: number // 单位编号
|
||||||
|
name: string // 单位名字
|
||||||
|
status: number // 单位状态
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 产品单位 API
|
||||||
|
export const ProductUnitApi = {
|
||||||
|
// 查询产品单位分页
|
||||||
|
getProductUnitPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/product-unit/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品单位精简列表
|
||||||
|
getProductUnitSimpleList: async () => {
|
||||||
|
return await request.get({ url: `/erp/product-unit/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品单位详情
|
||||||
|
getProductUnit: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/product-unit/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增产品单位
|
||||||
|
createProductUnit: async (data: ProductUnitVO) => {
|
||||||
|
return await request.post({ url: `/erp/product-unit/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改产品单位
|
||||||
|
updateProductUnit: async (data: ProductUnitVO) => {
|
||||||
|
return await request.put({ url: `/erp/product-unit/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除产品单位
|
||||||
|
deleteProductUnit: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/erp/product-unit/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出产品单位 Excel
|
||||||
|
exportProductUnit: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/product-unit/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
64
src/api/erp/purchase/in/index.ts
Normal file
64
src/api/erp/purchase/in/index.ts
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 采购入库 VO
|
||||||
|
export interface PurchaseInVO {
|
||||||
|
id: number // 入库工单编号
|
||||||
|
no: string // 采购入库号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
inTime: Date // 入库时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
outCount: number // 采购出库数量
|
||||||
|
returnCount: number // 采购退货数量
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 采购入库 API
|
||||||
|
export const PurchaseInApi = {
|
||||||
|
// 查询采购入库分页
|
||||||
|
getPurchaseInPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/purchase-in/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询采购入库详情
|
||||||
|
getPurchaseIn: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/purchase-in/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增采购入库
|
||||||
|
createPurchaseIn: async (data: PurchaseInVO) => {
|
||||||
|
return await request.post({ url: `/erp/purchase-in/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改采购入库
|
||||||
|
updatePurchaseIn: async (data: PurchaseInVO) => {
|
||||||
|
return await request.put({ url: `/erp/purchase-in/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新采购入库的状态
|
||||||
|
updatePurchaseInStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/purchase-in/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除采购入库
|
||||||
|
deletePurchaseIn: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/purchase-in/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出采购入库 Excel
|
||||||
|
exportPurchaseIn: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/purchase-in/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
64
src/api/erp/purchase/order/index.ts
Normal file
64
src/api/erp/purchase/order/index.ts
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 采购订单 VO
|
||||||
|
export interface PurchaseOrderVO {
|
||||||
|
id: number // 订单工单编号
|
||||||
|
no: string // 采购订单号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
orderTime: Date // 订单时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
outCount: number // 采购出库数量
|
||||||
|
returnCount: number // 采购退货数量
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 采购订单 API
|
||||||
|
export const PurchaseOrderApi = {
|
||||||
|
// 查询采购订单分页
|
||||||
|
getPurchaseOrderPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/purchase-order/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询采购订单详情
|
||||||
|
getPurchaseOrder: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/purchase-order/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增采购订单
|
||||||
|
createPurchaseOrder: async (data: PurchaseOrderVO) => {
|
||||||
|
return await request.post({ url: `/erp/purchase-order/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改采购订单
|
||||||
|
updatePurchaseOrder: async (data: PurchaseOrderVO) => {
|
||||||
|
return await request.put({ url: `/erp/purchase-order/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新采购订单的状态
|
||||||
|
updatePurchaseOrderStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/purchase-order/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除采购订单
|
||||||
|
deletePurchaseOrder: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/purchase-order/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出采购订单 Excel
|
||||||
|
exportPurchaseOrder: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/purchase-order/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
62
src/api/erp/purchase/return/index.ts
Normal file
62
src/api/erp/purchase/return/index.ts
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 采购退货 VO
|
||||||
|
export interface PurchaseReturnVO {
|
||||||
|
id: number // 采购退货编号
|
||||||
|
no: string // 采购退货号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
returnTime: Date // 退货时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 采购退货 API
|
||||||
|
export const PurchaseReturnApi = {
|
||||||
|
// 查询采购退货分页
|
||||||
|
getPurchaseReturnPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/purchase-return/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询采购退货详情
|
||||||
|
getPurchaseReturn: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/purchase-return/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增采购退货
|
||||||
|
createPurchaseReturn: async (data: PurchaseReturnVO) => {
|
||||||
|
return await request.post({ url: `/erp/purchase-return/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改采购退货
|
||||||
|
updatePurchaseReturn: async (data: PurchaseReturnVO) => {
|
||||||
|
return await request.put({ url: `/erp/purchase-return/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新采购退货的状态
|
||||||
|
updatePurchaseReturnStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/purchase-return/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除采购退货
|
||||||
|
deletePurchaseReturn: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/purchase-return/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出采购退货 Excel
|
||||||
|
exportPurchaseReturn: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/purchase-return/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
58
src/api/erp/purchase/supplier/index.ts
Normal file
58
src/api/erp/purchase/supplier/index.ts
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 供应商 VO
|
||||||
|
export interface SupplierVO {
|
||||||
|
id: number // 供应商编号
|
||||||
|
name: string // 供应商名称
|
||||||
|
contact: string // 联系人
|
||||||
|
mobile: string // 手机号码
|
||||||
|
telephone: string // 联系电话
|
||||||
|
email: string // 电子邮箱
|
||||||
|
fax: string // 传真
|
||||||
|
remark: string // 备注
|
||||||
|
status: number // 开启状态
|
||||||
|
sort: number // 排序
|
||||||
|
taxNo: string // 纳税人识别号
|
||||||
|
taxPercent: number // 税率
|
||||||
|
bankName: string // 开户行
|
||||||
|
bankAccount: string // 开户账号
|
||||||
|
bankAddress: string // 开户地址
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 供应商 API
|
||||||
|
export const SupplierApi = {
|
||||||
|
// 查询供应商分页
|
||||||
|
getSupplierPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/supplier/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获得供应商精简列表
|
||||||
|
getSupplierSimpleList: async () => {
|
||||||
|
return await request.get({ url: `/erp/supplier/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询供应商详情
|
||||||
|
getSupplier: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/supplier/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增供应商
|
||||||
|
createSupplier: async (data: SupplierVO) => {
|
||||||
|
return await request.post({ url: `/erp/supplier/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改供应商
|
||||||
|
updateSupplier: async (data: SupplierVO) => {
|
||||||
|
return await request.put({ url: `/erp/supplier/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除供应商
|
||||||
|
deleteSupplier: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/erp/supplier/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出供应商 Excel
|
||||||
|
exportSupplier: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/supplier/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
58
src/api/erp/sale/customer/index.ts
Normal file
58
src/api/erp/sale/customer/index.ts
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 客户 VO
|
||||||
|
export interface CustomerVO {
|
||||||
|
id: number // 客户编号
|
||||||
|
name: string // 客户名称
|
||||||
|
contact: string // 联系人
|
||||||
|
mobile: string // 手机号码
|
||||||
|
telephone: string // 联系电话
|
||||||
|
email: string // 电子邮箱
|
||||||
|
fax: string // 传真
|
||||||
|
remark: string // 备注
|
||||||
|
status: number // 开启状态
|
||||||
|
sort: number // 排序
|
||||||
|
taxNo: string // 纳税人识别号
|
||||||
|
taxPercent: number // 税率
|
||||||
|
bankName: string // 开户行
|
||||||
|
bankAccount: string // 开户账号
|
||||||
|
bankAddress: string // 开户地址
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 客户 API
|
||||||
|
export const CustomerApi = {
|
||||||
|
// 查询客户分页
|
||||||
|
getCustomerPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/customer/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询客户精简列表
|
||||||
|
getCustomerSimpleList: async () => {
|
||||||
|
return await request.get({ url: `/erp/customer/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询客户详情
|
||||||
|
getCustomer: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/customer/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增客户
|
||||||
|
createCustomer: async (data: CustomerVO) => {
|
||||||
|
return await request.post({ url: `/erp/customer/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改客户
|
||||||
|
updateCustomer: async (data: CustomerVO) => {
|
||||||
|
return await request.put({ url: `/erp/customer/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除客户
|
||||||
|
deleteCustomer: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/erp/customer/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出客户 Excel
|
||||||
|
exportCustomer: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/customer/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
64
src/api/erp/sale/order/index.ts
Normal file
64
src/api/erp/sale/order/index.ts
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 销售订单 VO
|
||||||
|
export interface SaleOrderVO {
|
||||||
|
id: number // 订单工单编号
|
||||||
|
no: string // 销售订单号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
orderTime: Date // 订单时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
outCount: number // 销售出库数量
|
||||||
|
returnCount: number // 销售退货数量
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 销售订单 API
|
||||||
|
export const SaleOrderApi = {
|
||||||
|
// 查询销售订单分页
|
||||||
|
getSaleOrderPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/sale-order/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询销售订单详情
|
||||||
|
getSaleOrder: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/sale-order/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增销售订单
|
||||||
|
createSaleOrder: async (data: SaleOrderVO) => {
|
||||||
|
return await request.post({ url: `/erp/sale-order/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改销售订单
|
||||||
|
updateSaleOrder: async (data: SaleOrderVO) => {
|
||||||
|
return await request.put({ url: `/erp/sale-order/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新销售订单的状态
|
||||||
|
updateSaleOrderStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/sale-order/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除销售订单
|
||||||
|
deleteSaleOrder: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/sale-order/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出销售订单 Excel
|
||||||
|
exportSaleOrder: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/sale-order/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
62
src/api/erp/sale/out/index.ts
Normal file
62
src/api/erp/sale/out/index.ts
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 销售出库 VO
|
||||||
|
export interface SaleOutVO {
|
||||||
|
id: number // 销售出库编号
|
||||||
|
no: string // 销售出库号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
outTime: Date // 出库时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 销售出库 API
|
||||||
|
export const SaleOutApi = {
|
||||||
|
// 查询销售出库分页
|
||||||
|
getSaleOutPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/sale-out/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询销售出库详情
|
||||||
|
getSaleOut: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/sale-out/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增销售出库
|
||||||
|
createSaleOut: async (data: SaleOutVO) => {
|
||||||
|
return await request.post({ url: `/erp/sale-out/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改销售出库
|
||||||
|
updateSaleOut: async (data: SaleOutVO) => {
|
||||||
|
return await request.put({ url: `/erp/sale-out/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新销售出库的状态
|
||||||
|
updateSaleOutStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/sale-out/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除销售出库
|
||||||
|
deleteSaleOut: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/sale-out/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出销售出库 Excel
|
||||||
|
exportSaleOut: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/sale-out/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
62
src/api/erp/sale/return/index.ts
Normal file
62
src/api/erp/sale/return/index.ts
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 销售退货 VO
|
||||||
|
export interface SaleReturnVO {
|
||||||
|
id: number // 销售退货编号
|
||||||
|
no: string // 销售退货号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
returnTime: Date // 退货时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 销售退货 API
|
||||||
|
export const SaleReturnApi = {
|
||||||
|
// 查询销售退货分页
|
||||||
|
getSaleReturnPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/sale-return/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询销售退货详情
|
||||||
|
getSaleReturn: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/sale-return/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增销售退货
|
||||||
|
createSaleReturn: async (data: SaleReturnVO) => {
|
||||||
|
return await request.post({ url: `/erp/sale-return/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改销售退货
|
||||||
|
updateSaleReturn: async (data: SaleReturnVO) => {
|
||||||
|
return await request.put({ url: `/erp/sale-return/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新销售退货的状态
|
||||||
|
updateSaleReturnStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/sale-return/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除销售退货
|
||||||
|
deleteSaleReturn: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/sale-return/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出销售退货 Excel
|
||||||
|
exportSaleReturn: async (params: any) => {
|
||||||
|
return await request.download({ url: `/erp/sale-return/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
28
src/api/erp/statistics/purchase/index.ts
Normal file
28
src/api/erp/statistics/purchase/index.ts
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 采购全局统计 VO
|
||||||
|
export interface ErpPurchaseSummaryRespVO {
|
||||||
|
todayPrice: number // 今日采购金额
|
||||||
|
yesterdayPrice: number // 昨日采购金额
|
||||||
|
monthPrice: number // 本月采购金额
|
||||||
|
yearPrice: number // 今年采购金额
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 采购时间段统计 VO
|
||||||
|
export interface ErpPurchaseTimeSummaryRespVO {
|
||||||
|
time: string // 时间
|
||||||
|
price: number // 采购金额
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 采购统计 API
|
||||||
|
export const PurchaseStatisticsApi = {
|
||||||
|
// 获得采购统计
|
||||||
|
getPurchaseSummary: async (): Promise<ErpPurchaseSummaryRespVO> => {
|
||||||
|
return await request.get({ url: `/erp/purchase-statistics/summary` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获得采购时间段统计
|
||||||
|
getPurchaseTimeSummary: async (): Promise<ErpPurchaseTimeSummaryRespVO[]> => {
|
||||||
|
return await request.get({ url: `/erp/purchase-statistics/time-summary` })
|
||||||
|
}
|
||||||
|
}
|
28
src/api/erp/statistics/sale/index.ts
Normal file
28
src/api/erp/statistics/sale/index.ts
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 销售全局统计 VO
|
||||||
|
export interface ErpSaleSummaryRespVO {
|
||||||
|
todayPrice: number // 今日销售金额
|
||||||
|
yesterdayPrice: number // 昨日销售金额
|
||||||
|
monthPrice: number // 本月销售金额
|
||||||
|
yearPrice: number // 今年销售金额
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 销售时间段统计 VO
|
||||||
|
export interface ErpSaleTimeSummaryRespVO {
|
||||||
|
time: string // 时间
|
||||||
|
price: number // 销售金额
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 销售统计 API
|
||||||
|
export const SaleStatisticsApi = {
|
||||||
|
// 获得销售统计
|
||||||
|
getSaleSummary: async (): Promise<ErpSaleSummaryRespVO> => {
|
||||||
|
return await request.get({ url: `/erp/sale-statistics/summary` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获得销售时间段统计
|
||||||
|
getSaleTimeSummary: async (): Promise<ErpSaleTimeSummaryRespVO[]> => {
|
||||||
|
return await request.get({ url: `/erp/sale-statistics/time-summary` })
|
||||||
|
}
|
||||||
|
}
|
61
src/api/erp/stock/check/index.ts
Normal file
61
src/api/erp/stock/check/index.ts
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 库存盘点单 VO
|
||||||
|
export interface StockCheckVO {
|
||||||
|
id: number // 出库编号
|
||||||
|
no: string // 出库单号
|
||||||
|
outTime: Date // 出库时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 库存盘点单 API
|
||||||
|
export const StockCheckApi = {
|
||||||
|
// 查询库存盘点单分页
|
||||||
|
getStockCheckPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/stock-check/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询库存盘点单详情
|
||||||
|
getStockCheck: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock-check/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增库存盘点单
|
||||||
|
createStockCheck: async (data: StockCheckVO) => {
|
||||||
|
return await request.post({ url: `/erp/stock-check/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改库存盘点单
|
||||||
|
updateStockCheck: async (data: StockCheckVO) => {
|
||||||
|
return await request.put({ url: `/erp/stock-check/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新库存盘点单的状态
|
||||||
|
updateStockCheckStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/stock-check/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除库存盘点单
|
||||||
|
deleteStockCheck: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/stock-check/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出库存盘点单 Excel
|
||||||
|
exportStockCheck: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/stock-check/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
62
src/api/erp/stock/in/index.ts
Normal file
62
src/api/erp/stock/in/index.ts
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 其它入库单 VO
|
||||||
|
export interface StockInVO {
|
||||||
|
id: number // 入库编号
|
||||||
|
no: string // 入库单号
|
||||||
|
supplierId: number // 供应商编号
|
||||||
|
inTime: Date // 入库时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 其它入库单 API
|
||||||
|
export const StockInApi = {
|
||||||
|
// 查询其它入库单分页
|
||||||
|
getStockInPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/stock-in/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询其它入库单详情
|
||||||
|
getStockIn: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock-in/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增其它入库单
|
||||||
|
createStockIn: async (data: StockInVO) => {
|
||||||
|
return await request.post({ url: `/erp/stock-in/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改其它入库单
|
||||||
|
updateStockIn: async (data: StockInVO) => {
|
||||||
|
return await request.put({ url: `/erp/stock-in/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新其它入库单的状态
|
||||||
|
updateStockInStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/stock-in/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除其它入库单
|
||||||
|
deleteStockIn: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/stock-in/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出其它入库单 Excel
|
||||||
|
exportStockIn: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/stock-in/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
61
src/api/erp/stock/move/index.ts
Normal file
61
src/api/erp/stock/move/index.ts
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 库存调度单 VO
|
||||||
|
export interface StockMoveVO {
|
||||||
|
id: number // 出库编号
|
||||||
|
no: string // 出库单号
|
||||||
|
outTime: Date // 出库时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 库存调度单 API
|
||||||
|
export const StockMoveApi = {
|
||||||
|
// 查询库存调度单分页
|
||||||
|
getStockMovePage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/stock-move/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询库存调度单详情
|
||||||
|
getStockMove: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock-move/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增库存调度单
|
||||||
|
createStockMove: async (data: StockMoveVO) => {
|
||||||
|
return await request.post({ url: `/erp/stock-move/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改库存调度单
|
||||||
|
updateStockMove: async (data: StockMoveVO) => {
|
||||||
|
return await request.put({ url: `/erp/stock-move/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新库存调度单的状态
|
||||||
|
updateStockMoveStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/stock-move/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除库存调度单
|
||||||
|
deleteStockMove: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/stock-move/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出库存调度单 Excel
|
||||||
|
exportStockMove: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/stock-move/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
62
src/api/erp/stock/out/index.ts
Normal file
62
src/api/erp/stock/out/index.ts
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 其它出库单 VO
|
||||||
|
export interface StockOutVO {
|
||||||
|
id: number // 出库编号
|
||||||
|
no: string // 出库单号
|
||||||
|
customerId: number // 客户编号
|
||||||
|
outTime: Date // 出库时间
|
||||||
|
totalCount: number // 合计数量
|
||||||
|
totalPrice: number // 合计金额,单位:元
|
||||||
|
status: number // 状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 其它出库单 API
|
||||||
|
export const StockOutApi = {
|
||||||
|
// 查询其它出库单分页
|
||||||
|
getStockOutPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/stock-out/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询其它出库单详情
|
||||||
|
getStockOut: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock-out/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增其它出库单
|
||||||
|
createStockOut: async (data: StockOutVO) => {
|
||||||
|
return await request.post({ url: `/erp/stock-out/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改其它出库单
|
||||||
|
updateStockOut: async (data: StockOutVO) => {
|
||||||
|
return await request.put({ url: `/erp/stock-out/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新其它出库单的状态
|
||||||
|
updateStockOutStatus: async (id: number, status: number) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/stock-out/update-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除其它出库单
|
||||||
|
deleteStockOut: async (ids: number[]) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: `/erp/stock-out/delete`,
|
||||||
|
params: {
|
||||||
|
ids: ids.join(',')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出其它出库单 Excel
|
||||||
|
exportStockOut: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/stock-out/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
32
src/api/erp/stock/record/index.ts
Normal file
32
src/api/erp/stock/record/index.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 产品库存明细 VO
|
||||||
|
export interface StockRecordVO {
|
||||||
|
id: number // 编号
|
||||||
|
productId: number // 产品编号
|
||||||
|
warehouseId: number // 仓库编号
|
||||||
|
count: number // 出入库数量
|
||||||
|
totalCount: number // 总库存量
|
||||||
|
bizType: number // 业务类型
|
||||||
|
bizId: number // 业务编号
|
||||||
|
bizItemId: number // 业务项编号
|
||||||
|
bizNo: string // 业务单号
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 产品库存明细 API
|
||||||
|
export const StockRecordApi = {
|
||||||
|
// 查询产品库存明细分页
|
||||||
|
getStockRecordPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/stock-record/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品库存明细详情
|
||||||
|
getStockRecord: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock-record/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出产品库存明细 Excel
|
||||||
|
exportStockRecord: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/stock-record/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
41
src/api/erp/stock/stock/index.ts
Normal file
41
src/api/erp/stock/stock/index.ts
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 产品库存 VO
|
||||||
|
export interface StockVO {
|
||||||
|
// 编号
|
||||||
|
id: number
|
||||||
|
// 产品编号
|
||||||
|
productId: number
|
||||||
|
// 仓库编号
|
||||||
|
warehouseId: number
|
||||||
|
// 库存数量
|
||||||
|
count: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 产品库存 API
|
||||||
|
export const StockApi = {
|
||||||
|
// 查询产品库存分页
|
||||||
|
getStockPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/stock/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品库存详情
|
||||||
|
getStock: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询产品库存详情
|
||||||
|
getStock2: async (productId: number, warehouseId: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock/get`, params: { productId, warehouseId } })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获得产品库存数量
|
||||||
|
getStockCount: async (productId: number) => {
|
||||||
|
return await request.get({ url: `/erp/stock/get-count`, params: { productId } })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出产品库存 Excel
|
||||||
|
exportStock: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/stock/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
64
src/api/erp/stock/warehouse/index.ts
Normal file
64
src/api/erp/stock/warehouse/index.ts
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// ERP 仓库 VO
|
||||||
|
export interface WarehouseVO {
|
||||||
|
id: number // 仓库编号
|
||||||
|
name: string // 仓库名称
|
||||||
|
address: string // 仓库地址
|
||||||
|
sort: number // 排序
|
||||||
|
remark: string // 备注
|
||||||
|
principal: string // 负责人
|
||||||
|
warehousePrice: number // 仓储费,单位:元
|
||||||
|
truckagePrice: number // 搬运费,单位:元
|
||||||
|
status: number // 开启状态
|
||||||
|
defaultStatus: boolean // 是否默认
|
||||||
|
}
|
||||||
|
|
||||||
|
// ERP 仓库 API
|
||||||
|
export const WarehouseApi = {
|
||||||
|
// 查询仓库分页
|
||||||
|
getWarehousePage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/erp/warehouse/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询仓库精简列表
|
||||||
|
getWarehouseSimpleList: async () => {
|
||||||
|
return await request.get({ url: `/erp/warehouse/simple-list` })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询仓库详情
|
||||||
|
getWarehouse: async (id: number) => {
|
||||||
|
return await request.get({ url: `/erp/warehouse/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增仓库
|
||||||
|
createWarehouse: async (data: WarehouseVO) => {
|
||||||
|
return await request.post({ url: `/erp/warehouse/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改仓库
|
||||||
|
updateWarehouse: async (data: WarehouseVO) => {
|
||||||
|
return await request.put({ url: `/erp/warehouse/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改仓库默认状态
|
||||||
|
updateWarehouseDefaultStatus: async (id: number, defaultStatus: boolean) => {
|
||||||
|
return await request.put({
|
||||||
|
url: `/erp/warehouse/update-default-status`,
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
defaultStatus
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除仓库
|
||||||
|
deleteWarehouse: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/erp/warehouse/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出仓库 Excel
|
||||||
|
exportWarehouse: async (params) => {
|
||||||
|
return await request.download({ url: `/erp/warehouse/export-excel`, params })
|
||||||
|
}
|
||||||
|
}
|
34
src/api/infra/apiAccessLog/index.ts
Normal file
34
src/api/infra/apiAccessLog/index.ts
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ApiAccessLogVO {
|
||||||
|
id: number
|
||||||
|
traceId: string
|
||||||
|
userId: number
|
||||||
|
userType: number
|
||||||
|
applicationName: string
|
||||||
|
requestMethod: string
|
||||||
|
requestParams: string
|
||||||
|
responseBody: string
|
||||||
|
requestUrl: string
|
||||||
|
userIp: string
|
||||||
|
userAgent: string
|
||||||
|
operateModule: string
|
||||||
|
operateName: string
|
||||||
|
operateType: number
|
||||||
|
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 })
|
||||||
|
}
|
48
src/api/infra/apiErrorLog/index.ts
Normal file
48
src/api/infra/apiErrorLog/index.ts
Normal file
|
@ -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
|
||||||
|
})
|
||||||
|
}
|
122
src/api/infra/codegen/index.ts
Normal file
122
src/api/infra/codegen/index.ts
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
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
|
||||||
|
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 getCodegenTableList = (dataSourceConfigId: number) => {
|
||||||
|
return request.get({ url: '/infra/codegen/table/list?dataSourceConfigId=' + dataSourceConfigId })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表代码生成表定义
|
||||||
|
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 })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 预览生成代码
|
||||||
|
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 })
|
||||||
|
}
|
48
src/api/infra/config/index.ts
Normal file
48
src/api/infra/config/index.ts
Normal file
|
@ -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 })
|
||||||
|
}
|
35
src/api/infra/dataSourceConfig/index.ts
Normal file
35
src/api/infra/dataSourceConfig/index.ts
Normal file
|
@ -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' })
|
||||||
|
}
|
40
src/api/infra/demo/demo01/index.ts
Normal file
40
src/api/infra/demo/demo01/index.ts
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface Demo01ContactVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
sex: number
|
||||||
|
birthday: Date
|
||||||
|
description: string
|
||||||
|
avatar: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询示例联系人分页
|
||||||
|
export const getDemo01ContactPage = async (params) => {
|
||||||
|
return await request.get({ url: `/infra/demo01-contact/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询示例联系人详情
|
||||||
|
export const getDemo01Contact = async (id: number) => {
|
||||||
|
return await request.get({ url: `/infra/demo01-contact/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增示例联系人
|
||||||
|
export const createDemo01Contact = async (data: Demo01ContactVO) => {
|
||||||
|
return await request.post({ url: `/infra/demo01-contact/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改示例联系人
|
||||||
|
export const updateDemo01Contact = async (data: Demo01ContactVO) => {
|
||||||
|
return await request.put({ url: `/infra/demo01-contact/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除示例联系人
|
||||||
|
export const deleteDemo01Contact = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/infra/demo01-contact/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出示例联系人 Excel
|
||||||
|
export const exportDemo01Contact = async (params) => {
|
||||||
|
return await request.download({ url: `/infra/demo01-contact/export-excel`, params })
|
||||||
|
}
|
37
src/api/infra/demo/demo02/index.ts
Normal file
37
src/api/infra/demo/demo02/index.ts
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface Demo02CategoryVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
parentId: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询示例分类列表
|
||||||
|
export const getDemo02CategoryList = async () => {
|
||||||
|
return await request.get({ url: `/infra/demo02-category/list` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询示例分类详情
|
||||||
|
export const getDemo02Category = async (id: number) => {
|
||||||
|
return await request.get({ url: `/infra/demo02-category/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增示例分类
|
||||||
|
export const createDemo02Category = async (data: Demo02CategoryVO) => {
|
||||||
|
return await request.post({ url: `/infra/demo02-category/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改示例分类
|
||||||
|
export const updateDemo02Category = async (data: Demo02CategoryVO) => {
|
||||||
|
return await request.put({ url: `/infra/demo02-category/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除示例分类
|
||||||
|
export const deleteDemo02Category = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/infra/demo02-category/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出示例分类 Excel
|
||||||
|
export const exportDemo02Category = async (params) => {
|
||||||
|
return await request.download({ url: `/infra/demo02-category/export-excel`, params })
|
||||||
|
}
|
91
src/api/infra/demo/demo03/erp/index.ts
Normal file
91
src/api/infra/demo/demo03/erp/index.ts
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface Demo03StudentVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
sex: number
|
||||||
|
birthday: Date
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询学生分页
|
||||||
|
export const getDemo03StudentPage = async (params) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询学生详情
|
||||||
|
export const getDemo03Student = async (id: number) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增学生
|
||||||
|
export const createDemo03Student = async (data: Demo03StudentVO) => {
|
||||||
|
return await request.post({ url: `/infra/demo03-student/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改学生
|
||||||
|
export const updateDemo03Student = async (data: Demo03StudentVO) => {
|
||||||
|
return await request.put({ url: `/infra/demo03-student/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除学生
|
||||||
|
export const deleteDemo03Student = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/infra/demo03-student/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出学生 Excel
|
||||||
|
export const exportDemo03Student = async (params) => {
|
||||||
|
return await request.download({ url: `/infra/demo03-student/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 子表(学生课程) ====================
|
||||||
|
|
||||||
|
// 获得学生课程分页
|
||||||
|
export const getDemo03CoursePage = async (params) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/demo03-course/page`, params })
|
||||||
|
}
|
||||||
|
// 新增学生课程
|
||||||
|
export const createDemo03Course = async (data) => {
|
||||||
|
return await request.post({ url: `/infra/demo03-student/demo03-course/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改学生课程
|
||||||
|
export const updateDemo03Course = async (data) => {
|
||||||
|
return await request.put({ url: `/infra/demo03-student/demo03-course/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除学生课程
|
||||||
|
export const deleteDemo03Course = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/infra/demo03-student/demo03-course/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得学生课程
|
||||||
|
export const getDemo03Course = async (id: number) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/demo03-course/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 子表(学生班级) ====================
|
||||||
|
|
||||||
|
// 获得学生班级分页
|
||||||
|
export const getDemo03GradePage = async (params) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/demo03-grade/page`, params })
|
||||||
|
}
|
||||||
|
// 新增学生班级
|
||||||
|
export const createDemo03Grade = async (data) => {
|
||||||
|
return await request.post({ url: `/infra/demo03-student/demo03-grade/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改学生班级
|
||||||
|
export const updateDemo03Grade = async (data) => {
|
||||||
|
return await request.put({ url: `/infra/demo03-student/demo03-grade/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除学生班级
|
||||||
|
export const deleteDemo03Grade = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/infra/demo03-student/demo03-grade/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得学生班级
|
||||||
|
export const getDemo03Grade = async (id: number) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/demo03-grade/get?id=` + id })
|
||||||
|
}
|
57
src/api/infra/demo/demo03/inner/index.ts
Normal file
57
src/api/infra/demo/demo03/inner/index.ts
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface Demo03StudentVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
sex: number
|
||||||
|
birthday: Date
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询学生分页
|
||||||
|
export const getDemo03StudentPage = async (params) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询学生详情
|
||||||
|
export const getDemo03Student = async (id: number) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增学生
|
||||||
|
export const createDemo03Student = async (data: Demo03StudentVO) => {
|
||||||
|
return await request.post({ url: `/infra/demo03-student/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改学生
|
||||||
|
export const updateDemo03Student = async (data: Demo03StudentVO) => {
|
||||||
|
return await request.put({ url: `/infra/demo03-student/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除学生
|
||||||
|
export const deleteDemo03Student = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/infra/demo03-student/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出学生 Excel
|
||||||
|
export const exportDemo03Student = async (params) => {
|
||||||
|
return await request.download({ url: `/infra/demo03-student/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 子表(学生课程) ====================
|
||||||
|
|
||||||
|
// 获得学生课程列表
|
||||||
|
export const getDemo03CourseListByStudentId = async (studentId) => {
|
||||||
|
return await request.get({
|
||||||
|
url: `/infra/demo03-student/demo03-course/list-by-student-id?studentId=` + studentId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 子表(学生班级) ====================
|
||||||
|
|
||||||
|
// 获得学生班级
|
||||||
|
export const getDemo03GradeByStudentId = async (studentId) => {
|
||||||
|
return await request.get({
|
||||||
|
url: `/infra/demo03-student/demo03-grade/get-by-student-id?studentId=` + studentId
|
||||||
|
})
|
||||||
|
}
|
57
src/api/infra/demo/demo03/normal/index.ts
Normal file
57
src/api/infra/demo/demo03/normal/index.ts
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface Demo03StudentVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
sex: number
|
||||||
|
birthday: Date
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询学生分页
|
||||||
|
export const getDemo03StudentPage = async (params) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询学生详情
|
||||||
|
export const getDemo03Student = async (id: number) => {
|
||||||
|
return await request.get({ url: `/infra/demo03-student/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增学生
|
||||||
|
export const createDemo03Student = async (data: Demo03StudentVO) => {
|
||||||
|
return await request.post({ url: `/infra/demo03-student/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改学生
|
||||||
|
export const updateDemo03Student = async (data: Demo03StudentVO) => {
|
||||||
|
return await request.put({ url: `/infra/demo03-student/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除学生
|
||||||
|
export const deleteDemo03Student = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/infra/demo03-student/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出学生 Excel
|
||||||
|
export const exportDemo03Student = async (params) => {
|
||||||
|
return await request.download({ url: `/infra/demo03-student/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 子表(学生课程) ====================
|
||||||
|
|
||||||
|
// 获得学生课程列表
|
||||||
|
export const getDemo03CourseListByStudentId = async (studentId) => {
|
||||||
|
return await request.get({
|
||||||
|
url: `/infra/demo03-student/demo03-course/list-by-student-id?studentId=` + studentId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 子表(学生班级) ====================
|
||||||
|
|
||||||
|
// 获得学生班级
|
||||||
|
export const getDemo03GradeByStudentId = async (studentId) => {
|
||||||
|
return await request.get({
|
||||||
|
url: `/infra/demo03-student/demo03-grade/get-by-student-id?studentId=` + studentId
|
||||||
|
})
|
||||||
|
}
|
45
src/api/infra/file/index.ts
Normal file
45
src/api/infra/file/index.ts
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface FilePageReqVO extends PageParam {
|
||||||
|
path?: string
|
||||||
|
type?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文件预签名地址 Response VO
|
||||||
|
export interface FilePresignedUrlRespVO {
|
||||||
|
// 文件配置编号
|
||||||
|
configId: number
|
||||||
|
// 文件上传 URL
|
||||||
|
uploadUrl: string
|
||||||
|
// 文件 URL
|
||||||
|
url: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询文件列表
|
||||||
|
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 })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取文件预签名地址
|
||||||
|
export const getFilePresignedUrl = (path: string) => {
|
||||||
|
return request.get<FilePresignedUrlRespVO>({
|
||||||
|
url: '/infra/file/presigned-url',
|
||||||
|
params: { path }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建文件
|
||||||
|
export const createFile = (data: any) => {
|
||||||
|
return request.post({ url: '/infra/file/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上传文件
|
||||||
|
export const updateFile = (data: any) => {
|
||||||
|
return request.upload({ url: '/infra/file/upload', data })
|
||||||
|
}
|
61
src/api/infra/fileConfig/index.ts
Normal file
61
src/api/infra/fileConfig/index.ts
Normal file
|
@ -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?: number
|
||||||
|
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 })
|
||||||
|
}
|
63
src/api/infra/job/index.ts
Normal file
63
src/api/infra/job/index.ts
Normal file
|
@ -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 })
|
||||||
|
}
|
33
src/api/infra/jobLog/index.ts
Normal file
33
src/api/infra/jobLog/index.ts
Normal file
|
@ -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: Date
|
||||||
|
endTime: Date
|
||||||
|
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
|
||||||
|
})
|
||||||
|
}
|
8
src/api/infra/redis/index.ts
Normal file
8
src/api/infra/redis/index.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取redis 监控信息
|
||||||
|
*/
|
||||||
|
export const getCache = () => {
|
||||||
|
return request.get({ url: '/infra/redis/get-monitor-info' })
|
||||||
|
}
|
176
src/api/infra/redis/types.ts
Normal file
176
src/api/infra/redis/types.ts
Normal file
|
@ -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
|
||||||
|
}
|
81
src/api/login/index.ts
Normal file
81
src/api/login/index.ts
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
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 getTenantByWebsite = (website: string) => {
|
||||||
|
return request.get({ url: '/system/tenant/get-by-website?website=' + website })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 登出
|
||||||
|
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 })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 社交快捷登录,使用 code 授权码
|
||||||
|
export function socialLogin(type: string, code: string, state: string) {
|
||||||
|
return request.post({
|
||||||
|
url: '/system/auth/social-login',
|
||||||
|
data: {
|
||||||
|
type,
|
||||||
|
code,
|
||||||
|
state
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 社交授权的跳转
|
||||||
|
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 })
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user