commit
bd8ad83da8
1272 changed files with 180129 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||
root = true |
|||
[*.{js,ts,vue}] |
|||
charset = utf-8 # 设置文件字符集为 utf-8 |
|||
end_of_line = lf # 控制换行类型(lf | cr | crlf) |
|||
insert_final_newline = true # 始终在文件末尾插入一个新行 |
|||
indent_style = space # 缩进风格(tab | space) |
|||
indent_size = 2 # 缩进大小 |
|||
max_line_length = 100 # 最大行长度 |
|||
|
|||
[*.md] # 仅 md 文件适用以下规则 |
|||
max_line_length = off # 关闭最大行长度限制 |
|||
trim_trailing_whitespace = false # 关闭末尾空格修剪 |
|||
@ -0,0 +1,23 @@ |
|||
# 标题 |
|||
VITE_APP_TITLE=UDI云服务平台 |
|||
|
|||
# 项目本地运行端口号 |
|||
VITE_PORT=80 |
|||
|
|||
# open 运行 npm run dev 时自动打开浏览器 |
|||
VITE_OPEN=true |
|||
|
|||
# 租户开关 |
|||
VITE_APP_TENANT_ENABLE=true |
|||
|
|||
# 验证码的开关 |
|||
VITE_APP_CAPTCHA_ENABLE=true |
|||
|
|||
# 文档地址的开关 |
|||
VITE_APP_DOCALERT_ENABLE=true |
|||
|
|||
|
|||
# 默认账户密码 |
|||
VITE_APP_DEFAULT_LOGIN_TENANT = qt |
|||
VITE_APP_DEFAULT_LOGIN_USERNAME = admin |
|||
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123 |
|||
@ -0,0 +1,38 @@ |
|||
# 开发环境:本地只启动前端项目,依赖开发环境(后端、APP) |
|||
NODE_ENV=production |
|||
|
|||
VITE_DEV=true |
|||
|
|||
# 请求路径 |
|||
# VITE_BASE_URL='http://192.168.50.85:48080' |
|||
VITE_BASE_URL='http://localhost:48080' |
|||
|
|||
|
|||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 |
|||
VITE_UPLOAD_TYPE=server |
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://192.168.50.85:48080/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=/udi-cloud |
|||
|
|||
# 输出路径 |
|||
VITE_OUT_DIR=dist |
|||
|
|||
# 商城H5会员端域名 |
|||
VITE_MALL_H5_DOMAIN='http://192.168.50.80:3000' |
|||
|
|||
# 验证码的开关 |
|||
VITE_APP_CAPTCHA_ENABLE=false |
|||
@ -0,0 +1,36 @@ |
|||
# 生产环境:只在打包时使用 |
|||
NODE_ENV=production |
|||
|
|||
VITE_DEV=false |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://47.109.28.93:8081/udi-cloud' |
|||
|
|||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 |
|||
VITE_UPLOAD_TYPE=server |
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://47.109.28.93:8081/udi-cloud/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=/udi-cloud |
|||
|
|||
# 输出路径 |
|||
VITE_OUT_DIR=dist-prod |
|||
|
|||
# 商城H5会员端域名 |
|||
VITE_MALL_H5_DOMAIN='http://47.109.28.93:8081/' |
|||
|
|||
# 验证码的开关 |
|||
VITE_APP_CAPTCHA_ENABLE=false |
|||
@ -0,0 +1,33 @@ |
|||
# 预发布环境:只在打包时使用 |
|||
NODE_ENV=production |
|||
|
|||
VITE_DEV=false |
|||
|
|||
# 请求路径 |
|||
VITE_BASE_URL='http://api-dashboard.platform.qt' |
|||
|
|||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 |
|||
VITE_UPLOAD_TYPE=server |
|||
# 上传路径 |
|||
VITE_UPLOAD_URL='http://api-dashboard.platform.qt/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.platform.qt/' |
|||
|
|||
# 输出路径 |
|||
VITE_OUT_DIR=dist-stage |
|||
|
|||
# 商城H5会员端域名 |
|||
VITE_MALL_H5_DOMAIN='http://mall.platform.qt' |
|||
@ -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.platform.qt' |
|||
@ -0,0 +1,8 @@ |
|||
/build/ |
|||
/config/ |
|||
/dist/ |
|||
/*.js |
|||
/test/unit/coverage/ |
|||
/node_modules/* |
|||
/dist* |
|||
/src/main.ts |
|||
@ -0,0 +1,259 @@ |
|||
{ |
|||
"globals": { |
|||
"EffectScope": true, |
|||
"ElMessage": true, |
|||
"ElMessageBox": true, |
|||
"ElTag": true, |
|||
"asyncComputed": true, |
|||
"autoResetRef": true, |
|||
"computed": true, |
|||
"computedAsync": true, |
|||
"computedEager": true, |
|||
"computedInject": true, |
|||
"computedWithControl": true, |
|||
"controlledComputed": true, |
|||
"controlledRef": true, |
|||
"createApp": true, |
|||
"createEventHook": true, |
|||
"createGlobalState": true, |
|||
"createInjectionState": true, |
|||
"createReactiveFn": true, |
|||
"createSharedComposable": true, |
|||
"createUnrefFn": true, |
|||
"customRef": true, |
|||
"debouncedRef": true, |
|||
"debouncedWatch": true, |
|||
"defineAsyncComponent": true, |
|||
"defineComponent": true, |
|||
"eagerComputed": true, |
|||
"effectScope": true, |
|||
"extendRef": true, |
|||
"getCurrentInstance": true, |
|||
"getCurrentScope": true, |
|||
"h": true, |
|||
"ignorableWatch": true, |
|||
"inject": true, |
|||
"isDefined": true, |
|||
"isProxy": true, |
|||
"isReactive": true, |
|||
"isReadonly": true, |
|||
"isRef": true, |
|||
"makeDestructurable": true, |
|||
"markRaw": true, |
|||
"nextTick": true, |
|||
"onActivated": true, |
|||
"onBeforeMount": true, |
|||
"onBeforeUnmount": true, |
|||
"onBeforeUpdate": true, |
|||
"onClickOutside": true, |
|||
"onDeactivated": true, |
|||
"onErrorCaptured": true, |
|||
"onKeyStroke": true, |
|||
"onLongPress": true, |
|||
"onMounted": true, |
|||
"onRenderTracked": true, |
|||
"onRenderTriggered": true, |
|||
"onScopeDispose": true, |
|||
"onServerPrefetch": true, |
|||
"onStartTyping": true, |
|||
"onUnmounted": true, |
|||
"onUpdated": true, |
|||
"pausableWatch": true, |
|||
"provide": true, |
|||
"reactify": true, |
|||
"reactifyObject": true, |
|||
"reactive": true, |
|||
"reactiveComputed": true, |
|||
"reactiveOmit": true, |
|||
"reactivePick": true, |
|||
"readonly": true, |
|||
"ref": true, |
|||
"refAutoReset": true, |
|||
"refDebounced": true, |
|||
"refDefault": true, |
|||
"refThrottled": true, |
|||
"refWithControl": true, |
|||
"resolveComponent": true, |
|||
"resolveRef": true, |
|||
"resolveUnref": true, |
|||
"shallowReactive": true, |
|||
"shallowReadonly": true, |
|||
"shallowRef": true, |
|||
"syncRef": true, |
|||
"syncRefs": true, |
|||
"templateRef": true, |
|||
"throttledRef": true, |
|||
"throttledWatch": true, |
|||
"toRaw": true, |
|||
"toReactive": true, |
|||
"toRef": true, |
|||
"toRefs": true, |
|||
"triggerRef": true, |
|||
"tryOnBeforeMount": true, |
|||
"tryOnBeforeUnmount": true, |
|||
"tryOnMounted": true, |
|||
"tryOnScopeDispose": true, |
|||
"tryOnUnmounted": true, |
|||
"unref": true, |
|||
"unrefElement": true, |
|||
"until": true, |
|||
"useActiveElement": true, |
|||
"useArrayEvery": true, |
|||
"useArrayFilter": true, |
|||
"useArrayFind": true, |
|||
"useArrayFindIndex": true, |
|||
"useArrayJoin": true, |
|||
"useArrayMap": true, |
|||
"useArrayReduce": true, |
|||
"useArraySome": true, |
|||
"useAsyncQueue": true, |
|||
"useAsyncState": true, |
|||
"useAttrs": true, |
|||
"useBase64": true, |
|||
"useBattery": true, |
|||
"useBluetooth": true, |
|||
"useBreakpoints": true, |
|||
"useBroadcastChannel": true, |
|||
"useBrowserLocation": true, |
|||
"useCached": true, |
|||
"useClipboard": true, |
|||
"useColorMode": true, |
|||
"useConfirmDialog": true, |
|||
"useCounter": true, |
|||
"useCssModule": true, |
|||
"useCssVar": true, |
|||
"useCssVars": true, |
|||
"useCurrentElement": true, |
|||
"useCycleList": true, |
|||
"useDark": true, |
|||
"useDateFormat": true, |
|||
"useDebounce": true, |
|||
"useDebounceFn": true, |
|||
"useDebouncedRefHistory": true, |
|||
"useDeviceMotion": true, |
|||
"useDeviceOrientation": true, |
|||
"useDevicePixelRatio": true, |
|||
"useDevicesList": true, |
|||
"useDisplayMedia": true, |
|||
"useDocumentVisibility": true, |
|||
"useDraggable": true, |
|||
"useDropZone": true, |
|||
"useElementBounding": true, |
|||
"useElementByPoint": true, |
|||
"useElementHover": true, |
|||
"useElementSize": true, |
|||
"useElementVisibility": true, |
|||
"useEventBus": true, |
|||
"useEventListener": true, |
|||
"useEventSource": true, |
|||
"useEyeDropper": true, |
|||
"useFavicon": true, |
|||
"useFetch": true, |
|||
"useFileDialog": true, |
|||
"useFileSystemAccess": true, |
|||
"useFocus": true, |
|||
"useFocusWithin": true, |
|||
"useFps": true, |
|||
"useFullscreen": true, |
|||
"useGamepad": true, |
|||
"useGeolocation": true, |
|||
"useIdle": true, |
|||
"useImage": true, |
|||
"useInfiniteScroll": true, |
|||
"useIntersectionObserver": true, |
|||
"useInterval": true, |
|||
"useIntervalFn": true, |
|||
"useKeyModifier": true, |
|||
"useLastChanged": true, |
|||
"useLocalStorage": true, |
|||
"useMagicKeys": true, |
|||
"useManualRefHistory": true, |
|||
"useMediaControls": true, |
|||
"useMediaQuery": true, |
|||
"useMemoize": true, |
|||
"useMemory": true, |
|||
"useMounted": true, |
|||
"useMouse": true, |
|||
"useMouseInElement": true, |
|||
"useMousePressed": true, |
|||
"useMutationObserver": true, |
|||
"useNavigatorLanguage": true, |
|||
"useNetwork": true, |
|||
"useNow": true, |
|||
"useObjectUrl": true, |
|||
"useOffsetPagination": true, |
|||
"useOnline": true, |
|||
"usePageLeave": true, |
|||
"useParallax": true, |
|||
"usePermission": true, |
|||
"usePointer": true, |
|||
"usePointerSwipe": true, |
|||
"usePreferredColorScheme": true, |
|||
"usePreferredDark": true, |
|||
"usePreferredLanguages": true, |
|||
"useRafFn": true, |
|||
"useRefHistory": true, |
|||
"useResizeObserver": true, |
|||
"useRoute": true, |
|||
"useRouter": true, |
|||
"useScreenOrientation": true, |
|||
"useScreenSafeArea": true, |
|||
"useScriptTag": true, |
|||
"useScroll": true, |
|||
"useScrollLock": true, |
|||
"useSessionStorage": true, |
|||
"useShare": true, |
|||
"useSlots": true, |
|||
"useSpeechRecognition": true, |
|||
"useSpeechSynthesis": true, |
|||
"useStepper": true, |
|||
"useStorage": true, |
|||
"useStorageAsync": true, |
|||
"useStyleTag": true, |
|||
"useSupported": true, |
|||
"useSwipe": true, |
|||
"useTemplateRefsList": true, |
|||
"useTextDirection": true, |
|||
"useTextSelection": true, |
|||
"useTextareaAutosize": true, |
|||
"useThrottle": true, |
|||
"useThrottleFn": true, |
|||
"useThrottledRefHistory": true, |
|||
"useTimeAgo": true, |
|||
"useTimeout": true, |
|||
"useTimeoutFn": true, |
|||
"useTimeoutPoll": true, |
|||
"useTimestamp": true, |
|||
"useTitle": true, |
|||
"useToggle": true, |
|||
"useTransition": true, |
|||
"useUrlSearchParams": true, |
|||
"useUserMedia": true, |
|||
"useVModel": true, |
|||
"useVModels": true, |
|||
"useVibrate": true, |
|||
"useVirtualList": true, |
|||
"useWakeLock": true, |
|||
"useWebNotification": true, |
|||
"useWebSocket": true, |
|||
"useWebWorker": true, |
|||
"useWebWorkerFn": true, |
|||
"useWindowFocus": true, |
|||
"useWindowScroll": true, |
|||
"useWindowSize": true, |
|||
"watch": true, |
|||
"watchArray": true, |
|||
"watchAtMost": true, |
|||
"watchDebounced": true, |
|||
"watchEffect": true, |
|||
"watchIgnorable": true, |
|||
"watchOnce": true, |
|||
"watchPausable": true, |
|||
"watchPostEffect": true, |
|||
"watchSyncEffect": true, |
|||
"watchThrottled": true, |
|||
"watchTriggerable": true, |
|||
"watchWithFilter": true, |
|||
"whenever": true |
|||
} |
|||
} |
|||
@ -0,0 +1,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', // qt:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
|
|||
'@unocss/order': 'off', // qt:禁用 unocss 【css】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
|||
'@unocss/order-attributify': 'off' // qt:禁用 unocss 【属性】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
|||
} |
|||
}) |
|||
@ -0,0 +1,10 @@ |
|||
node_modules |
|||
.DS_Store |
|||
dist |
|||
dist-ssr |
|||
*.local |
|||
/dist* |
|||
pnpm-debug |
|||
auto-*.d.ts |
|||
.idea |
|||
.history |
|||
@ -0,0 +1,11 @@ |
|||
/node_modules/** |
|||
/dist/ |
|||
/dist* |
|||
/public/* |
|||
/docs/* |
|||
/vite.config.ts |
|||
/src/types/env.d.ts |
|||
/src/types/auto-components.d.ts |
|||
/src/types/auto-imports.d.ts |
|||
/docs/**/* |
|||
CHANGELOG |
|||
@ -0,0 +1,6 @@ |
|||
/dist/* |
|||
/public/* |
|||
public/* |
|||
/dist* |
|||
/src/types/env.d.ts |
|||
/docs/**/* |
|||
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2021-present Archer |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
|||
@ -0,0 +1,2 @@ |
|||
# UDI云平台-UI |
|||
|
|||
@ -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}` |
|||
}) |
|||
] |
|||
} |
|||
@ -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 } |
|||
@ -0,0 +1,152 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<link href="/favicon.ico" rel="icon" /> |
|||
<meta content="IE=edge" http-equiv="X-UA-Compatible" /> |
|||
<meta content="width=device-width, initial-scale=1.0" name="viewport" /> |
|||
<meta |
|||
content="UDI云服务平台 " |
|||
name="keywords" |
|||
/> |
|||
<meta |
|||
content="UDI云服务平台" |
|||
name="description" |
|||
/> |
|||
<title>%VITE_APP_TITLE%</title> |
|||
<link href="/sv-print/print-lock.css" media="print" rel="stylesheet" type="text/css"> |
|||
</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 alt="Logo" class="app-loading-logo" src="/logo.gif" /> |
|||
<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 src="/src/main.ts" type="module"></script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,145 @@ |
|||
{ |
|||
"name": "platform-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=12288 ./node_modules/vite/bin/vite.js build", |
|||
"build:dev": "node --max_old_space_size=12288 ./node_modules/vite/bin/vite.js build --mode dev", |
|||
"build:test": "node --max_old_space_size=12288 ./node_modules/vite/bin/vite.js build --mode test", |
|||
"build:stage": "node --max_old_space_size=12288 ./node_modules/vite/bin/vite.js build --mode stage", |
|||
"build:prod": "node --max_old_space_size=12288 ./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", |
|||
"@sv-print/vue3": "^0.1.18", |
|||
"@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/eslint-config": "^0.57.4", |
|||
"@unocss/transformer-variant-group": "^0.58.5", |
|||
"@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/platformcode/platform-ui-admin-vue3" |
|||
}, |
|||
"bugs": { |
|||
"url": "https://gitee.com/platformcode/platform-ui-admin-vue3/issues" |
|||
}, |
|||
"homepage": "https://gitee.com/platformcode/platform-ui-admin-vue3", |
|||
"engines": { |
|||
"node": ">= 16.0.0", |
|||
"pnpm": ">=8.6.0" |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
@ -0,0 +1,5 @@ |
|||
module.exports = { |
|||
plugins: { |
|||
autoprefixer: {} |
|||
} |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
module.exports = { |
|||
printWidth: 100, // 每行代码长度(默认80)
|
|||
tabWidth: 2, // 每个tab相当于多少个空格(默认2)ab进行缩进(默认false)
|
|||
useTabs: false, // 是否使用tab
|
|||
semi: false, // 声明结尾使用分号(默认true)
|
|||
vueIndentScriptAndStyle: false, |
|||
singleQuote: true, // 使用单引号(默认false)
|
|||
quoteProps: 'as-needed', |
|||
bracketSpacing: true, // 对象字面量的大括号间使用空格(默认true)
|
|||
trailingComma: 'none', // 多行使用拖尾逗号(默认none)
|
|||
jsxSingleQuote: false, |
|||
// 箭头函数参数括号 默认avoid 可选 avoid| always
|
|||
// avoid 能省略括号的时候就省略 例如x => x
|
|||
// always 总是有括号
|
|||
arrowParens: 'always', |
|||
insertPragma: false, |
|||
requirePragma: false, |
|||
proseWrap: 'never', |
|||
htmlWhitespaceSensitivity: 'strict', |
|||
endOfLine: 'auto', |
|||
rangeStart: 0 |
|||
} |
|||
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
Binary file not shown.
@ -0,0 +1,359 @@ |
|||
@media print { |
|||
body { |
|||
margin: 0px; |
|||
padding: 0px; |
|||
} |
|||
} |
|||
|
|||
@page { |
|||
margin: 0; |
|||
} |
|||
|
|||
.hiprint-printPaper * { |
|||
box-sizing: border-box; |
|||
image-rendering: -webkit-optimize-contrast; /* 让图片/标尺稍微清楚一点 */ |
|||
} |
|||
|
|||
.hiprint-printPaper *:focus { |
|||
outline: -webkit-focus-ring-color auto 0px; |
|||
} |
|||
|
|||
.hiprint-page-break-avoid { |
|||
page-break-after: avoid; |
|||
} |
|||
.hiprint-printPaper { |
|||
position: relative; |
|||
padding: 0 0 0 0; |
|||
page-break-after: always; |
|||
-webkit-user-select: none; /* Chrome/Safari/Opera */ |
|||
-moz-user-select: none; /* Firefox */ |
|||
user-select: none; |
|||
overflow-x: hidden; |
|||
overflow: hidden; |
|||
} |
|||
.hiprint-printPaper .hiprint-printPaper-background { |
|||
position: absolute; |
|||
pointer-events: none; |
|||
z-index: 0; |
|||
left: 0; |
|||
top: 0; |
|||
} |
|||
.hiprint-printPaper .hiprint-printPaper-content { |
|||
position: relative; |
|||
} |
|||
.hiprint-printPaper.design { |
|||
overflow: visible; |
|||
} |
|||
|
|||
.hiprint-printTemplate .hiprint-printPanel { |
|||
page-break-after: always; |
|||
} |
|||
|
|||
.hiprint-printPaper, |
|||
hiprint-printPanel { |
|||
box-sizing: border-box; |
|||
border: 0px; |
|||
} |
|||
|
|||
.hiprint-printPanel .hiprint-printPaper:last-child { |
|||
page-break-after: avoid; |
|||
} |
|||
|
|||
.hiprint-printTemplate .hiprint-printPanel:last-child { |
|||
page-break-after: avoid; |
|||
} |
|||
|
|||
.hiprint-printPaper .hideheaderLinetarget { |
|||
border-top: 0px dashed rgb(201, 190, 190) !important; |
|||
} |
|||
|
|||
.hiprint-printPaper .hidefooterLinetarget { |
|||
border-top: 0px dashed rgb(201, 190, 190) !important; |
|||
} |
|||
|
|||
.hiprint-printPaper.design { |
|||
border: 1px dashed rgba(170, 170, 170, 0.7); |
|||
} |
|||
|
|||
.design .hiprint-printElement-table-content, |
|||
.design .hiprint-printElement-longText-content { |
|||
overflow: hidden; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.design .resize-panel { |
|||
box-sizing: border-box; |
|||
border: 1px dotted; |
|||
} |
|||
|
|||
.hiprint-printElement-text { |
|||
background-color: transparent; |
|||
background-repeat: repeat; |
|||
padding: 0 0 0 0; |
|||
border: 0.75pt none rgb(0, 0, 0); |
|||
direction: ltr; |
|||
font-family: "SimSun"; |
|||
font-size: 9pt; |
|||
font-style: normal; |
|||
font-weight: normal; |
|||
padding-bottom: 0pt; |
|||
padding-left: 0pt; |
|||
padding-right: 0pt; |
|||
padding-top: 0pt; |
|||
text-align: left; |
|||
text-decoration: none; |
|||
line-height: 9.75pt; |
|||
box-sizing: border-box; |
|||
word-wrap: break-word; |
|||
word-break: break-all; |
|||
} |
|||
|
|||
.design .hiprint-printElement-text-content { |
|||
border: 1px dashed rgb(206, 188, 188); |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.hiprint-printElement-longText { |
|||
background-color: transparent; |
|||
background-repeat: repeat; |
|||
border: 0.75pt none rgb(0, 0, 0); |
|||
direction: ltr; |
|||
font-family: "SimSun"; |
|||
font-size: 9pt; |
|||
font-style: normal; |
|||
font-weight: normal; |
|||
padding-bottom: 0pt; |
|||
padding-left: 0pt; |
|||
padding-right: 0pt; |
|||
padding-top: 0pt; |
|||
text-align: left; |
|||
text-decoration: none; |
|||
line-height: 9.75pt; |
|||
box-sizing: border-box; |
|||
word-wrap: break-word; |
|||
word-break: break-all; |
|||
/*white-space: pre-wrap*/ |
|||
} |
|||
|
|||
.hiprint-printElement-table { |
|||
background-color: transparent; |
|||
background-repeat: repeat; |
|||
color: rgb(0, 0, 0); |
|||
border-color: rgb(0, 0, 0); |
|||
border-style: none; |
|||
direction: ltr; |
|||
font-family: "SimSun"; |
|||
font-size: 9pt; |
|||
font-style: normal; |
|||
font-weight: normal; |
|||
padding-bottom: 0pt; |
|||
padding-left: 0pt; |
|||
padding-right: 0pt; |
|||
padding-top: 0pt; |
|||
text-align: left; |
|||
text-decoration: none; |
|||
padding: 0 0 0 0; |
|||
box-sizing: border-box; |
|||
line-height: 9.75pt; |
|||
} |
|||
|
|||
.hiprint-printElement-table thead { |
|||
background: #e8e8e8; |
|||
font-weight: 700; |
|||
} |
|||
|
|||
table.hiprint-printElement-tableTarget { |
|||
width: 100%; |
|||
} |
|||
|
|||
.hiprint-printElement-tableTarget, |
|||
.hiprint-printElement-tableTarget tr, |
|||
.hiprint-printElement-tableTarget td { |
|||
border-color: rgb(0, 0, 0); |
|||
/* border-style: none; */ |
|||
/*border: 1px solid rgb(0,0,0);*/ |
|||
font-weight: normal; |
|||
direction: ltr; |
|||
padding-bottom: 0pt; |
|||
padding-left: 4pt; |
|||
padding-right: 4pt; |
|||
padding-top: 0pt; |
|||
text-decoration: none; |
|||
vertical-align: middle; |
|||
box-sizing: border-box; |
|||
word-wrap: break-word; |
|||
word-break: break-all; |
|||
/*line-height: 9.75pt; |
|||
font-size: 9pt;*/ |
|||
} |
|||
|
|||
.hiprint-printElement-tableTarget-border-all { |
|||
border: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-none { |
|||
border: 0px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-lr { |
|||
border-left: 1px solid; |
|||
border-right: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-left { |
|||
border-left: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-right { |
|||
border-right: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-tb { |
|||
border-top: 1px solid; |
|||
border-bottom: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-top { |
|||
border-top: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-bottom { |
|||
border-bottom: 1px solid; |
|||
} |
|||
|
|||
.hiprint-printElement-tableTarget-border-td-none td { |
|||
border: 0px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-td-all td:not(:nth-last-child(-n + 2)) { |
|||
border-right: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-td-all td:not(last-child) { |
|||
border-right: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-td-all td:last-child { |
|||
border-left: 1px solid; |
|||
} |
|||
.hiprint-printElement-tableTarget-border-td-all td:last-child:first-child { |
|||
border-left: none; |
|||
} |
|||
|
|||
/*.hiprint-printElement-tableTarget tr,*/ |
|||
.hiprint-printElement-tableTarget td { |
|||
height: 18pt; |
|||
} |
|||
|
|||
.hiprint-printPaper .hiprint-paperNumber { |
|||
font-size: 9pt; |
|||
} |
|||
|
|||
.design .hiprint-printElement-table-handle { |
|||
position: absolute; |
|||
height: 12pt; |
|||
width: 12pt; |
|||
background: red; |
|||
z-index: 1; |
|||
} |
|||
|
|||
.design .hiprint-printElement-handle { |
|||
position: absolute; |
|||
height: 12pt; |
|||
width: 12pt; |
|||
background: red; |
|||
z-index: 1; |
|||
} |
|||
|
|||
.hiprint-printPaper .hiprint-paperNumber-disabled { |
|||
float: right !important; |
|||
right: 0 !important; |
|||
color: gainsboro !important; |
|||
} |
|||
|
|||
.hiprint-printElement-vline, |
|||
.hiprint-printElement-hline { |
|||
border: 0px none rgb(0, 0, 0); |
|||
} |
|||
.hiprint-printElement-vline { |
|||
border-left: 0.75pt solid #000; |
|||
border-right: 0px none rgb(0, 0, 0) !important; |
|||
border-bottom: 0px none rgb(0, 0, 0) !important; |
|||
border-top: 0px none rgb(0, 0, 0) !important; |
|||
} |
|||
|
|||
.hiprint-printElement-hline { |
|||
border-top: 0.75pt solid #000; |
|||
border-right: 0px none rgb(0, 0, 0) !important; |
|||
border-bottom: 0px none rgb(0, 0, 0) !important; |
|||
border-left: 0px none rgb(0, 0, 0) !important; |
|||
} |
|||
|
|||
.hiprint-printElement-oval, |
|||
.hiprint-printElement-rect { |
|||
border: 0.75pt solid #000; |
|||
} |
|||
|
|||
.hiprint-text-content-middle { |
|||
} |
|||
.hiprint-text-content-middle > div:first-child { |
|||
display: grid; |
|||
align-items: center; |
|||
} |
|||
|
|||
.hiprint-text-content-bottom { |
|||
} |
|||
|
|||
.hiprint-text-content-bottom > div:first-child { |
|||
display: grid; |
|||
align-items: flex-end; |
|||
} |
|||
|
|||
.hiprint-text-content-wrap { |
|||
} |
|||
|
|||
.hiprint-text-content-wrap .hiprint-text-content-wrap-nowrap { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.hiprint-text-content-wrap .hiprint-text-content-wrap-clip { |
|||
white-space: nowrap; |
|||
overflow: hidden; |
|||
text-overflow: clip; |
|||
} |
|||
|
|||
.hiprint-text-content-wrap .hiprint-text-content-wrap-ellipsis { |
|||
white-space: nowrap; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
} |
|||
|
|||
/*hi-grid-row */ |
|||
.hi-grid-row { |
|||
position: relative; |
|||
height: auto; |
|||
margin-right: 0; |
|||
margin-left: 0; |
|||
zoom: 1; |
|||
display: block; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.hi-grid-row::after, |
|||
.hi-grid-row::before { |
|||
display: table; |
|||
content: ""; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.hi-grid-col { |
|||
display: block; |
|||
box-sizing: border-box; |
|||
position: relative; |
|||
float: left; |
|||
flex: 0 0 auto; |
|||
} |
|||
|
|||
.table-grid-row { |
|||
margin-left: -0pt; |
|||
margin-right: -0pt; |
|||
} |
|||
|
|||
.tableGridColumnsGutterRow { |
|||
padding-left: 0pt; |
|||
padding-right: 0pt; |
|||
} |
|||
.hiprint-gridColumnsFooter { |
|||
text-align: left; |
|||
clear: both; |
|||
} |
|||
@ -0,0 +1,57 @@ |
|||
<script lang="ts" setup> |
|||
import { isDark } from '@/utils/is' |
|||
import { useAppStore } from '@/store/modules/app' |
|||
import { useDesign } from '@/hooks/web/useDesign' |
|||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache' |
|||
import routerSearch from '@/components/RouterSearch/index.vue' |
|||
|
|||
defineOptions({ name: 'APP' }) |
|||
|
|||
const { getPrefixCls } = useDesign() |
|||
const prefixCls = getPrefixCls('app') |
|||
const appStore = useAppStore() |
|||
const currentSize = computed(() => appStore.getCurrentSize) |
|||
const greyMode = computed(() => appStore.getGreyMode) |
|||
const { wsCache } = useCache() |
|||
|
|||
// 根据浏览器当前主题设置系统主题色 |
|||
const setDefaultTheme = () => { |
|||
let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK) |
|||
if (isDarkTheme === null) { |
|||
isDarkTheme = isDark() |
|||
} |
|||
appStore.setIsDark(isDarkTheme) |
|||
} |
|||
setDefaultTheme() |
|||
</script> |
|||
<template> |
|||
<ConfigGlobal :size="currentSize"> |
|||
<RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" /> |
|||
<routerSearch /> |
|||
</ConfigGlobal> |
|||
</template> |
|||
<style lang="scss"> |
|||
$prefix-cls: #{$namespace}-app; |
|||
|
|||
.size { |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
|
|||
html, |
|||
body { |
|||
@extend .size; |
|||
|
|||
padding: 0 !important; |
|||
margin: 0; |
|||
overflow: hidden; |
|||
|
|||
#app { |
|||
@extend .size; |
|||
} |
|||
} |
|||
|
|||
.#{$prefix-cls}-grey-mode { |
|||
filter: grayscale(100%); |
|||
} |
|||
</style> |
|||
@ -0,0 +1,8 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export const getActivityList = async (params) => { |
|||
return await request.get({ |
|||
url: '/bpm/activity/list', |
|||
params |
|||
}) |
|||
} |
|||
@ -0,0 +1,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 }) |
|||
} |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
@ -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' |
|||
}) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -0,0 +1,59 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export type ProcessDefinitionVO = { |
|||
id: string |
|||
version: number |
|||
deploymentTIme: string |
|||
suspensionState: number |
|||
} |
|||
|
|||
export type ModelVO = { |
|||
id: number |
|||
formName: string |
|||
key: string |
|||
name: string |
|||
description: string |
|||
category: string |
|||
formType: number |
|||
formId: number |
|||
formCustomCreatePath: string |
|||
formCustomViewPath: string |
|||
processDefinition: ProcessDefinitionVO |
|||
status: number |
|||
remark: string |
|||
createTime: string |
|||
bpmnXml: string |
|||
} |
|||
|
|||
export const getModelPage = async (params) => { |
|||
return await request.get({ url: '/bpm/model/page', params }) |
|||
} |
|||
|
|||
export const getModel = async (id: number) => { |
|||
return await request.get({ url: '/bpm/model/get?id=' + id }) |
|||
} |
|||
|
|||
export const updateModel = async (data: ModelVO) => { |
|||
return await request.put({ url: '/bpm/model/update', data: data }) |
|||
} |
|||
|
|||
// 任务状态修改
|
|||
export const updateModelState = async (id: number, state: number) => { |
|||
const data = { |
|||
id: id, |
|||
state: state |
|||
} |
|||
return await request.put({ url: '/bpm/model/update-state', data: data }) |
|||
} |
|||
|
|||
export const createModel = async (data: ModelVO) => { |
|||
return await request.post({ url: '/bpm/model/create', data: data }) |
|||
} |
|||
|
|||
export const deleteModel = async (id: number) => { |
|||
return await request.delete({ url: '/bpm/model/delete?id=' + id }) |
|||
} |
|||
|
|||
export const deployModel = async (id: number) => { |
|||
return await request.post({ url: '/bpm/model/deploy?id=' + id }) |
|||
} |
|||
@ -0,0 +1,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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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' }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 } }) |
|||
} |
|||
@ -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' }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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' }) |
|||
} |
|||
@ -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}` }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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' }) |
|||
} |
|||
@ -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' }) |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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` }) |
|||
} |
|||
} |
|||
@ -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` }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ApiErrorLogVO { |
|||
id: number |
|||
traceId: string |
|||
userId: number |
|||
userType: number |
|||
applicationName: string |
|||
requestMethod: string |
|||
requestParams: string |
|||
requestUrl: string |
|||
userIp: string |
|||
userAgent: string |
|||
exceptionTime: Date |
|||
exceptionName: string |
|||
exceptionMessage: string |
|||
exceptionRootCauseMessage: string |
|||
exceptionStackTrace: string |
|||
exceptionClassName: string |
|||
exceptionFileName: string |
|||
exceptionMethodName: string |
|||
exceptionLineNumber: number |
|||
processUserId: number |
|||
processStatus: number |
|||
processTime: Date |
|||
resultCode: number |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询列表API 访问日志
|
|||
export const getApiErrorLogPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/api-error-log/page', params }) |
|||
} |
|||
|
|||
// 更新 API 错误日志的处理状态
|
|||
export const updateApiErrorLogPage = (id: number, processStatus: number) => { |
|||
return request.put({ |
|||
url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus |
|||
}) |
|||
} |
|||
|
|||
// 导出API 访问日志
|
|||
export const exportApiErrorLog = (params) => { |
|||
return request.download({ |
|||
url: '/infra/api-error-log/export-excel', |
|||
params |
|||
}) |
|||
} |
|||
@ -0,0 +1,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 }) |
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ConfigVO { |
|||
id: number | undefined |
|||
category: string |
|||
name: string |
|||
key: string |
|||
value: string |
|||
type: number |
|||
visible: boolean |
|||
remark: string |
|||
createTime: Date |
|||
} |
|||
|
|||
// 查询参数列表
|
|||
export const getConfigPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/config/page', params }) |
|||
} |
|||
|
|||
// 查询参数详情
|
|||
export const getConfig = (id: number) => { |
|||
return request.get({ url: '/infra/config/get?id=' + id }) |
|||
} |
|||
|
|||
// 根据参数键名查询参数值
|
|||
export const getConfigKey = (configKey: string) => { |
|||
return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey }) |
|||
} |
|||
|
|||
// 新增参数
|
|||
export const createConfig = (data: ConfigVO) => { |
|||
return request.post({ url: '/infra/config/create', data }) |
|||
} |
|||
|
|||
// 修改参数
|
|||
export const updateConfig = (data: ConfigVO) => { |
|||
return request.put({ url: '/infra/config/update', data }) |
|||
} |
|||
|
|||
// 删除参数
|
|||
export const deleteConfig = (id: number) => { |
|||
return request.delete({ url: '/infra/config/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出参数
|
|||
export const exportConfig = (params) => { |
|||
return request.download({ url: '/infra/config/export', params }) |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DataSourceConfigVO { |
|||
id: number | undefined |
|||
name: string |
|||
url: string |
|||
username: string |
|||
password: string |
|||
createTime?: Date |
|||
} |
|||
|
|||
// 新增数据源配置
|
|||
export const createDataSourceConfig = (data: DataSourceConfigVO) => { |
|||
return request.post({ url: '/infra/data-source-config/create', data }) |
|||
} |
|||
|
|||
// 修改数据源配置
|
|||
export const updateDataSourceConfig = (data: DataSourceConfigVO) => { |
|||
return request.put({ url: '/infra/data-source-config/update', data }) |
|||
} |
|||
|
|||
// 删除数据源配置
|
|||
export const deleteDataSourceConfig = (id: number) => { |
|||
return request.delete({ url: '/infra/data-source-config/delete?id=' + id }) |
|||
} |
|||
|
|||
// 查询数据源配置详情
|
|||
export const getDataSourceConfig = (id: number) => { |
|||
return request.get({ url: '/infra/data-source-config/get?id=' + id }) |
|||
} |
|||
|
|||
// 查询数据源配置列表
|
|||
export const getDataSourceConfigList = () => { |
|||
return request.get({ url: '/infra/data-source-config/list' }) |
|||
} |
|||
@ -0,0 +1,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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
@ -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 |
|||
}) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -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 }) |
|||
} |
|||
@ -0,0 +1,63 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface JobVO { |
|||
id: number |
|||
name: string |
|||
status: number |
|||
handlerName: string |
|||
handlerParam: string |
|||
cronExpression: string |
|||
retryCount: number |
|||
retryInterval: number |
|||
monitorTimeout: number |
|||
createTime: Date |
|||
} |
|||
|
|||
// 任务列表
|
|||
export const getJobPage = (params: PageParam) => { |
|||
return request.get({ url: '/infra/job/page', params }) |
|||
} |
|||
|
|||
// 任务详情
|
|||
export const getJob = (id: number) => { |
|||
return request.get({ url: '/infra/job/get?id=' + id }) |
|||
} |
|||
|
|||
// 新增任务
|
|||
export const createJob = (data: JobVO) => { |
|||
return request.post({ url: '/infra/job/create', data }) |
|||
} |
|||
|
|||
// 修改定时任务调度
|
|||
export const updateJob = (data: JobVO) => { |
|||
return request.put({ url: '/infra/job/update', data }) |
|||
} |
|||
|
|||
// 删除定时任务调度
|
|||
export const deleteJob = (id: number) => { |
|||
return request.delete({ url: '/infra/job/delete?id=' + id }) |
|||
} |
|||
|
|||
// 导出定时任务调度
|
|||
export const exportJob = (params) => { |
|||
return request.download({ url: '/infra/job/export-excel', params }) |
|||
} |
|||
|
|||
// 任务状态修改
|
|||
export const updateJobStatus = (id: number, status: number) => { |
|||
const params = { |
|||
id, |
|||
status |
|||
} |
|||
return request.put({ url: '/infra/job/update-status', params }) |
|||
} |
|||
|
|||
// 定时任务立即执行一次
|
|||
export const runJob = (id: number) => { |
|||
return request.put({ url: '/infra/job/trigger?id=' + id }) |
|||
} |
|||
|
|||
// 获得定时任务的下 n 次执行时间
|
|||
export const getJobNextTimes = (id: number) => { |
|||
return request.get({ url: '/infra/job/get_next_times?id=' + id }) |
|||
} |
|||
@ -0,0 +1,33 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface JobLogVO { |
|||
id: number |
|||
jobId: number |
|||
handlerName: string |
|||
handlerParam: string |
|||
cronExpression: string |
|||
executeIndex: string |
|||
beginTime: 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 |
|||
}) |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
/** |
|||
* 获取redis 监控信息 |
|||
*/ |
|||
export const getCache = () => { |
|||
return request.get({ url: '/infra/redis/get-monitor-info' }) |
|||
} |
|||
@ -0,0 +1,176 @@ |
|||
export interface RedisMonitorInfoVO { |
|||
info: RedisInfoVO |
|||
dbSize: number |
|||
commandStats: RedisCommandStatsVO[] |
|||
} |
|||
|
|||
export interface RedisInfoVO { |
|||
io_threaded_reads_processed: string |
|||
tracking_clients: string |
|||
uptime_in_seconds: string |
|||
cluster_connections: string |
|||
current_cow_size: string |
|||
maxmemory_human: string |
|||
aof_last_cow_size: string |
|||
master_replid2: string |
|||
mem_replication_backlog: string |
|||
aof_rewrite_scheduled: string |
|||
total_net_input_bytes: string |
|||
rss_overhead_ratio: string |
|||
hz: string |
|||
current_cow_size_age: string |
|||
redis_build_id: string |
|||
errorstat_BUSYGROUP: string |
|||
aof_last_bgrewrite_status: string |
|||
multiplexing_api: string |
|||
client_recent_max_output_buffer: string |
|||
allocator_resident: string |
|||
mem_fragmentation_bytes: string |
|||
aof_current_size: string |
|||
repl_backlog_first_byte_offset: string |
|||
tracking_total_prefixes: string |
|||
redis_mode: string |
|||
redis_git_dirty: string |
|||
aof_delayed_fsync: string |
|||
allocator_rss_bytes: string |
|||
repl_backlog_histlen: string |
|||
io_threads_active: string |
|||
rss_overhead_bytes: string |
|||
total_system_memory: string |
|||
loading: string |
|||
evicted_keys: string |
|||
maxclients: string |
|||
cluster_enabled: string |
|||
redis_version: string |
|||
repl_backlog_active: string |
|||
mem_aof_buffer: string |
|||
allocator_frag_bytes: string |
|||
io_threaded_writes_processed: string |
|||
instantaneous_ops_per_sec: string |
|||
used_memory_human: string |
|||
total_error_replies: string |
|||
role: string |
|||
maxmemory: string |
|||
used_memory_lua: string |
|||
rdb_current_bgsave_time_sec: string |
|||
used_memory_startup: string |
|||
used_cpu_sys_main_thread: string |
|||
lazyfree_pending_objects: string |
|||
aof_pending_bio_fsync: string |
|||
used_memory_dataset_perc: string |
|||
allocator_frag_ratio: string |
|||
arch_bits: string |
|||
used_cpu_user_main_thread: string |
|||
mem_clients_normal: string |
|||
expired_time_cap_reached_count: string |
|||
unexpected_error_replies: string |
|||
mem_fragmentation_ratio: string |
|||
aof_last_rewrite_time_sec: string |
|||
master_replid: string |
|||
aof_rewrite_in_progress: string |
|||
lru_clock: string |
|||
maxmemory_policy: string |
|||
run_id: string |
|||
latest_fork_usec: string |
|||
tracking_total_items: string |
|||
total_commands_processed: string |
|||
expired_keys: string |
|||
errorstat_ERR: string |
|||
used_memory: string |
|||
module_fork_in_progress: string |
|||
errorstat_WRONGPASS: string |
|||
aof_buffer_length: string |
|||
dump_payload_sanitizations: string |
|||
mem_clients_slaves: string |
|||
keyspace_misses: string |
|||
server_time_usec: string |
|||
executable: string |
|||
lazyfreed_objects: string |
|||
db0: string |
|||
used_memory_peak_human: string |
|||
keyspace_hits: string |
|||
rdb_last_cow_size: string |
|||
aof_pending_rewrite: string |
|||
used_memory_overhead: string |
|||
active_defrag_hits: string |
|||
tcp_port: string |
|||
uptime_in_days: string |
|||
used_memory_peak_perc: string |
|||
current_save_keys_processed: string |
|||
blocked_clients: string |
|||
total_reads_processed: string |
|||
expire_cycle_cpu_milliseconds: string |
|||
sync_partial_err: string |
|||
used_memory_scripts_human: string |
|||
aof_current_rewrite_time_sec: string |
|||
aof_enabled: string |
|||
process_supervised: string |
|||
master_repl_offset: string |
|||
used_memory_dataset: string |
|||
used_cpu_user: string |
|||
rdb_last_bgsave_status: string |
|||
tracking_total_keys: string |
|||
atomicvar_api: string |
|||
allocator_rss_ratio: string |
|||
client_recent_max_input_buffer: string |
|||
clients_in_timeout_table: string |
|||
aof_last_write_status: string |
|||
mem_allocator: string |
|||
used_memory_scripts: string |
|||
used_memory_peak: string |
|||
process_id: string |
|||
master_failover_state: string |
|||
errorstat_NOAUTH: string |
|||
used_cpu_sys: string |
|||
repl_backlog_size: string |
|||
connected_slaves: string |
|||
current_save_keys_total: string |
|||
gcc_version: string |
|||
total_system_memory_human: string |
|||
sync_full: string |
|||
connected_clients: string |
|||
module_fork_last_cow_size: string |
|||
total_writes_processed: string |
|||
allocator_active: string |
|||
total_net_output_bytes: string |
|||
pubsub_channels: string |
|||
current_fork_perc: string |
|||
active_defrag_key_hits: string |
|||
rdb_changes_since_last_save: string |
|||
instantaneous_input_kbps: string |
|||
used_memory_rss_human: string |
|||
configured_hz: string |
|||
expired_stale_perc: string |
|||
active_defrag_misses: string |
|||
used_cpu_sys_children: string |
|||
number_of_cached_scripts: string |
|||
sync_partial_ok: string |
|||
used_memory_lua_human: string |
|||
rdb_last_save_time: string |
|||
pubsub_patterns: string |
|||
slave_expires_tracked_keys: string |
|||
redis_git_sha1: string |
|||
used_memory_rss: string |
|||
rdb_last_bgsave_time_sec: string |
|||
os: string |
|||
mem_not_counted_for_evict: string |
|||
active_defrag_running: string |
|||
rejected_connections: string |
|||
aof_rewrite_buffer_length: string |
|||
total_forks: string |
|||
active_defrag_key_misses: string |
|||
allocator_allocated: string |
|||
aof_base_size: string |
|||
instantaneous_output_kbps: string |
|||
second_repl_offset: string |
|||
rdb_bgsave_in_progress: string |
|||
used_cpu_user_children: string |
|||
total_connections_received: string |
|||
migrate_cached_sockets: string |
|||
} |
|||
|
|||
export interface RedisCommandStatsVO { |
|||
command: string |
|||
calls: number |
|||
usec: number |
|||
} |
|||
@ -0,0 +1,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 }) |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
// 获得授权信息
|
|||
export const getAuthorize = (clientId: string) => { |
|||
return request.get({ url: '/system/oauth2/authorize?clientId=' + clientId }) |
|||
} |
|||
|
|||
// 发起授权
|
|||
export const authorize = ( |
|||
responseType: string, |
|||
clientId: string, |
|||
redirectUri: string, |
|||
state: string, |
|||
autoApprove: boolean, |
|||
checkedScopes: string[], |
|||
uncheckedScopes: string[] |
|||
) => { |
|||
// 构建 scopes
|
|||
const scopes = {} |
|||
for (const scope of checkedScopes) { |
|||
scopes[scope] = true |
|||
} |
|||
for (const scope of uncheckedScopes) { |
|||
scopes[scope] = false |
|||
} |
|||
// 发起请求
|
|||
return request.post({ |
|||
url: '/system/oauth2/authorize', |
|||
headers: { |
|||
'Content-type': 'application/x-www-form-urlencoded' |
|||
}, |
|||
params: { |
|||
response_type: responseType, |
|||
client_id: clientId, |
|||
redirect_uri: redirectUri, |
|||
state: state, |
|||
auto_approve: autoApprove, |
|||
scope: JSON.stringify(scopes) |
|||
} |
|||
}) |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
export type UserLoginVO = { |
|||
username: string |
|||
password: string |
|||
captchaVerification: string |
|||
socialType?: string |
|||
socialCode?: string |
|||
socialState?: string |
|||
} |
|||
|
|||
export type TokenType = { |
|||
id: number // 编号
|
|||
accessToken: string // 访问令牌
|
|||
refreshToken: string // 刷新令牌
|
|||
userId: number // 用户编号
|
|||
userType: number //用户类型
|
|||
clientId: string //客户端编号
|
|||
expiresTime: number //过期时间
|
|||
} |
|||
|
|||
export type UserVO = { |
|||
id: number |
|||
username: string |
|||
nickname: string |
|||
deptId: number |
|||
email: string |
|||
mobile: string |
|||
sex: number |
|||
avatar: string |
|||
loginIp: string |
|||
loginDate: string |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue