Merge branch 'master' into feature/fake_data
|
|
@ -4,10 +4,10 @@ NODE_ENV=development
|
||||||
VITE_DEV=true
|
VITE_DEV=true
|
||||||
|
|
||||||
# 请求路径
|
# 请求路径
|
||||||
VITE_BASE_URL='http://localhost:48080'
|
VITE_BASE_URL='http://127.0.0.1:48080'
|
||||||
|
|
||||||
# 上传路径
|
# 上传路径
|
||||||
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
|
VITE_UPLOAD_URL='http://127.0.0.1:48080/admin-api/infra/file/upload'
|
||||||
|
|
||||||
# 接口前缀
|
# 接口前缀
|
||||||
VITE_API_BASEPATH=/dev-api
|
VITE_API_BASEPATH=/dev-api
|
||||||
|
|
|
||||||
2
.env.dev
|
|
@ -28,4 +28,4 @@ VITE_DROP_CONSOLE=false
|
||||||
VITE_SOURCEMAP=false
|
VITE_SOURCEMAP=false
|
||||||
|
|
||||||
# 输出路径
|
# 输出路径
|
||||||
VITE_OUT_DIR=dist-dev
|
VITE_OUT_DIR=dist
|
||||||
|
|
|
||||||
31
.env.test
|
|
@ -1,31 +0,0 @@
|
||||||
# 测试环境
|
|
||||||
NODE_ENV=production
|
|
||||||
|
|
||||||
VITE_DEV=false
|
|
||||||
|
|
||||||
# 请求路径
|
|
||||||
VITE_BASE_URL='http://localhost:48080'
|
|
||||||
|
|
||||||
# 上传路径
|
|
||||||
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
|
|
||||||
|
|
||||||
# 接口前缀
|
|
||||||
VITE_API_BASEPATH=
|
|
||||||
|
|
||||||
# 接口地址
|
|
||||||
VITE_API_URL=/admin-api
|
|
||||||
|
|
||||||
# 是否删除debugger
|
|
||||||
VITE_DROP_DEBUGGER=false
|
|
||||||
|
|
||||||
# 是否删除console.log
|
|
||||||
VITE_DROP_CONSOLE=false
|
|
||||||
|
|
||||||
# 是否sourcemap
|
|
||||||
VITE_SOURCEMAP=true
|
|
||||||
|
|
||||||
# 打包路径
|
|
||||||
VITE_BASE_PATH=/
|
|
||||||
|
|
||||||
# 输出路径
|
|
||||||
VITE_OUT_DIR=dist-test
|
|
||||||
38
.eslintrc.js
|
|
@ -1,4 +1,6 @@
|
||||||
module.exports = {
|
// @ts-check
|
||||||
|
const { defineConfig } = require('eslint-define-config')
|
||||||
|
module.exports = defineConfig({
|
||||||
root: true,
|
root: true,
|
||||||
env: {
|
env: {
|
||||||
browser: true,
|
browser: true,
|
||||||
|
|
@ -6,7 +8,6 @@ module.exports = {
|
||||||
es6: true
|
es6: true
|
||||||
},
|
},
|
||||||
parser: 'vue-eslint-parser',
|
parser: 'vue-eslint-parser',
|
||||||
plugins: ['vue'],
|
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
parser: '@typescript-eslint/parser',
|
parser: '@typescript-eslint/parser',
|
||||||
ecmaVersion: 2020,
|
ecmaVersion: 2020,
|
||||||
|
|
@ -16,9 +17,17 @@ module.exports = {
|
||||||
jsx: true
|
jsx: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
extends: ['plugin:vue/vue3-recommended', 'prettier', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
|
extends: [
|
||||||
|
'plugin:vue/vue3-recommended',
|
||||||
|
'plugin:@typescript-eslint/recommended',
|
||||||
|
'prettier',
|
||||||
|
'plugin:prettier/recommended',
|
||||||
|
'@unocss'
|
||||||
|
],
|
||||||
rules: {
|
rules: {
|
||||||
|
'vue/no-setup-props-destructure': 'off',
|
||||||
'vue/script-setup-uses-vars': 'error',
|
'vue/script-setup-uses-vars': 'error',
|
||||||
|
'vue/no-reserved-component-names': 'off',
|
||||||
'@typescript-eslint/ban-ts-ignore': 'off',
|
'@typescript-eslint/ban-ts-ignore': 'off',
|
||||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||||
'@typescript-eslint/no-explicit-any': 'off',
|
'@typescript-eslint/no-explicit-any': 'off',
|
||||||
|
|
@ -31,20 +40,8 @@ module.exports = {
|
||||||
'@typescript-eslint/ban-types': 'off',
|
'@typescript-eslint/ban-types': 'off',
|
||||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||||
'@typescript-eslint/no-unused-vars': [
|
'@typescript-eslint/no-unused-vars': 'off',
|
||||||
'error',
|
'no-unused-vars': 'off',
|
||||||
{
|
|
||||||
argsIgnorePattern: '^_',
|
|
||||||
varsIgnorePattern: '^_'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'no-unused-vars': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
argsIgnorePattern: '^_',
|
|
||||||
varsIgnorePattern: '^_'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'space-before-function-paren': 'off',
|
'space-before-function-paren': 'off',
|
||||||
|
|
||||||
'vue/attributes-order': 'off',
|
'vue/attributes-order': 'off',
|
||||||
|
|
@ -56,6 +53,7 @@ module.exports = {
|
||||||
'vue/attribute-hyphenation': 'off',
|
'vue/attribute-hyphenation': 'off',
|
||||||
'vue/require-default-prop': 'off',
|
'vue/require-default-prop': 'off',
|
||||||
'vue/require-explicit-emits': 'off',
|
'vue/require-explicit-emits': 'off',
|
||||||
|
'vue/require-toggle-inside-transition': 'off',
|
||||||
'vue/html-self-closing': [
|
'vue/html-self-closing': [
|
||||||
'error',
|
'error',
|
||||||
{
|
{
|
||||||
|
|
@ -68,6 +66,8 @@ module.exports = {
|
||||||
math: 'always'
|
math: 'always'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'vue/multi-word-component-names': 'off'
|
'vue/multi-word-component-names': 'off',
|
||||||
|
'vue/no-v-html': 'off',
|
||||||
|
'prettier/prettier': 'off' // 芋艿:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 238 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 201 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 176 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 208 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 173 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 248 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
|
@ -1,7 +1,5 @@
|
||||||
{
|
{
|
||||||
"typescript.tsdk": "./node_modules/typescript/lib",
|
"typescript.tsdk": "node_modules/typescript/lib",
|
||||||
"volar.tsPlugin": true,
|
|
||||||
"volar.tsPluginStatus": false,
|
|
||||||
"npm.packageManager": "pnpm",
|
"npm.packageManager": "pnpm",
|
||||||
"editor.tabSize": 2,
|
"editor.tabSize": 2,
|
||||||
"prettier.printWidth": 100, // 超过最大值换行
|
"prettier.printWidth": 100, // 超过最大值换行
|
||||||
|
|
@ -85,74 +83,52 @@
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
},
|
},
|
||||||
"editor.codeActionsOnSave": {
|
"editor.codeActionsOnSave": {
|
||||||
"source.fixAll.eslint": true
|
"source.fixAll.eslint": "explicit"
|
||||||
},
|
},
|
||||||
"[vue]": {
|
"[vue]": {
|
||||||
"editor.codeActionsOnSave": {
|
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
|
||||||
"source.fixAll.eslint": true,
|
|
||||||
"source.fixAll.stylelint": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"i18n-ally.localesPaths": ["src/locales"],
|
"i18n-ally.localesPaths": ["src/locales"],
|
||||||
"i18n-ally.keystyle": "nested",
|
"i18n-ally.keystyle": "nested",
|
||||||
"i18n-ally.sortKeys": true,
|
"i18n-ally.sortKeys": true,
|
||||||
"i18n-ally.namespace": true,
|
"i18n-ally.namespace": false,
|
||||||
"i18n-ally.enabledParsers": ["ts"],
|
"i18n-ally.enabledParsers": ["ts"],
|
||||||
"i18n-ally.sourceLanguage": "en",
|
"i18n-ally.sourceLanguage": "en",
|
||||||
"i18n-ally.displayLanguage": "zh-CN",
|
"i18n-ally.displayLanguage": "zh-CN",
|
||||||
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
"xingyu",
|
"brotli",
|
||||||
"yudao",
|
|
||||||
"unocss",
|
|
||||||
"browserslist",
|
"browserslist",
|
||||||
|
"codemirror",
|
||||||
|
"commitlint",
|
||||||
|
"cropperjs",
|
||||||
|
"echart",
|
||||||
|
"echarts",
|
||||||
"esnext",
|
"esnext",
|
||||||
"unplugin",
|
"esno",
|
||||||
|
"iconify",
|
||||||
|
"INTLIFY",
|
||||||
|
"lintstagedrc",
|
||||||
|
"logicflow",
|
||||||
|
"nprogress",
|
||||||
|
"pinia",
|
||||||
|
"pnpm",
|
||||||
"qrcode",
|
"qrcode",
|
||||||
"sider",
|
"sider",
|
||||||
"pinia",
|
|
||||||
"sider",
|
|
||||||
"nprogress",
|
|
||||||
"INTLIFY",
|
|
||||||
"stylelint",
|
|
||||||
"esno",
|
|
||||||
"vitejs",
|
|
||||||
"sortablejs",
|
"sortablejs",
|
||||||
"codemirror",
|
"stylelint",
|
||||||
"iconify",
|
"svgs",
|
||||||
"commitlint",
|
"unocss",
|
||||||
|
"unplugin",
|
||||||
|
"unref",
|
||||||
"videojs",
|
"videojs",
|
||||||
"echarts",
|
"VITE",
|
||||||
"wangeditor",
|
"vitejs",
|
||||||
"cropperjs",
|
|
||||||
"logicflow",
|
|
||||||
"vueuse",
|
"vueuse",
|
||||||
"zxcvbn",
|
"wangeditor",
|
||||||
"lintstagedrc",
|
"xingyu",
|
||||||
"brotli",
|
"yudao",
|
||||||
"sider",
|
"zxcvbn"
|
||||||
"pnpm"
|
|
||||||
],
|
|
||||||
"vetur.format.scriptInitialIndent": true,
|
|
||||||
"vetur.format.styleInitialIndent": true,
|
|
||||||
"vetur.validation.script": false,
|
|
||||||
"MicroPython.executeButton": [
|
|
||||||
{
|
|
||||||
"text": "▶",
|
|
||||||
"tooltip": "运行",
|
|
||||||
"alignment": "left",
|
|
||||||
"command": "extension.executeFile",
|
|
||||||
"priority": 3.5
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"MicroPython.syncButton": [
|
|
||||||
{
|
|
||||||
"text": "$(sync)",
|
|
||||||
"tooltip": "同步",
|
|
||||||
"alignment": "left",
|
|
||||||
"command": "extension.execute",
|
|
||||||
"priority": 4
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
// 控制相关文件嵌套展示
|
// 控制相关文件嵌套展示
|
||||||
"explorer.fileNesting.enabled": true,
|
"explorer.fileNesting.enabled": true,
|
||||||
|
|
@ -161,7 +137,8 @@
|
||||||
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
|
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
|
||||||
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
|
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
|
||||||
"*.env": "$(capture).env.*",
|
"*.env": "$(capture).env.*",
|
||||||
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
|
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
|
||||||
},
|
},
|
||||||
"terminal.integrated.scrollback": 10000
|
"terminal.integrated.scrollback": 10000,
|
||||||
|
"nuxt.isNuxtApp": false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
111
README.md
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
## 🐶 新手必读
|
## 🐶 新手必读
|
||||||
|
|
||||||
* nodejs > 16.0.0 && pnpm > 8.6.0 (强制使用pnpm)
|
* nodejs > 16.18.0 && pnpm > 8.6.0 (强制使用pnpm)
|
||||||
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
|
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
|
||||||
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
|
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
|
||||||
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
|
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
|
||||||
|
|
@ -38,15 +38,15 @@
|
||||||
|
|
||||||
| 框架 | 说明 | 版本 |
|
| 框架 | 说明 | 版本 |
|
||||||
|----------------------------------------------------------------------|------------------|--------|
|
|----------------------------------------------------------------------|------------------|--------|
|
||||||
| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.4 |
|
| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.8 |
|
||||||
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.4.7 |
|
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.5.0 |
|
||||||
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.3.8 |
|
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.4.2 |
|
||||||
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.1.6 |
|
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.2.2 |
|
||||||
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.6 |
|
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.7 |
|
||||||
| [vueuse](https://vueuse.org/) | 常用工具集 | 10.2.1 |
|
| [vueuse](https://vueuse.org/) | 常用工具集 | 10.6.1 |
|
||||||
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
|
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.6.5 |
|
||||||
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.4 |
|
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.5 |
|
||||||
| [unocss](https://uno.antfu.me/) | 原子 css | 0.54.0 |
|
| [unocss](https://uno.antfu.me/) | 原子 css | 0.57.4 |
|
||||||
| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.1.1 |
|
| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.1.1 |
|
||||||
| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 |
|
| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 |
|
||||||
|
|
||||||
|
|
@ -66,6 +66,18 @@
|
||||||
| ESLint | 脚本代码检查 |
|
| ESLint | 脚本代码检查 |
|
||||||
| DotENV | env 文件高亮 |
|
| DotENV | env 文件高亮 |
|
||||||
|
|
||||||
|
## 🔥 后端架构
|
||||||
|
|
||||||
|
支持 Spring Boot、Spring Cloud 两种架构:
|
||||||
|
|
||||||
|
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## 内置功能
|
## 内置功能
|
||||||
|
|
||||||
系统内置多种多种业务功能,可以用于快速你的业务系统:
|
系统内置多种多种业务功能,可以用于快速你的业务系统:
|
||||||
|
|
@ -174,62 +186,61 @@ ps:核心功能已经实现,正在对接微信小程序中...
|
||||||
|
|
||||||
### 商城系统
|
### 商城系统
|
||||||
|
|
||||||
建设中...
|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|
_前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋道快速开发平台_
|
||||||
|
|
||||||

|
演示地址:<https://doc.iocoder.cn/mall-preview/>
|
||||||
|
|
||||||
## 🐷 演示图
|
## 🐷 演示图
|
||||||
|
|
||||||
### 系统功能
|
### 系统功能
|
||||||
|
|
||||||
| 模块 | biu | biu | biu |
|
| 模块 | biu | biu | biu |
|
||||||
|------------|--------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|
|
|----------|-----------------------------|---------------------------|--------------------------|
|
||||||
| 登录 & 首页 |  |  |  |
|
| 登录 & 首页 |  |  |  |
|
||||||
| 用户 & 应用 |  |  |  |
|
| 用户 & 应用 |  |  |  |
|
||||||
| 租户 & 套餐 |  |  | - |
|
| 租户 & 套餐 |  |  | - |
|
||||||
| 部门 & 岗位 |  |  | - |
|
| 部门 & 岗位 |  |  | - |
|
||||||
| 菜单 & 角色 |  |  | - |
|
| 菜单 & 角色 |  |  | - |
|
||||||
| 审计日志 |  |  | - |
|
| 审计日志 |  |  | - |
|
||||||
| 短信 |  |  |  |
|
| 短信 |  |  |  |
|
||||||
| 字典 & 敏感词 |  |  |  |
|
| 字典 & 敏感词 |  |  |  |
|
||||||
| 错误码 & 通知 |  |  | - |
|
| 错误码 & 通知 |  |  | - |
|
||||||
|
|
||||||
### 工作流程
|
### 工作流程
|
||||||
|
|
||||||
| 模块 | biu | biu | biu |
|
| 模块 | biu | biu | biu |
|
||||||
|---------|------------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
|
|---------|---------------------------------|---------------------------------|---------------------------------|
|
||||||
| 流程模型 |  |  |  |
|
| 流程模型 |  |  |  |
|
||||||
| 表单 & 分组 |  |  | - |
|
| 表单 & 分组 |  |  | - |
|
||||||
| 我的流程 |  |  |  |
|
| 我的流程 |  |  |  |
|
||||||
| 待办 & 已办 |  |  |  |
|
| 待办 & 已办 |  |  |  |
|
||||||
| OA 请假 |  |  |  |
|
| OA 请假 |  |  |  |
|
||||||
|
|
||||||
### 基础设施
|
### 基础设施
|
||||||
|
|
||||||
| 模块 | biu | biu | biu |
|
| 模块 | biu | biu | biu |
|
||||||
|---------------|----------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------|
|
|---------------|-------------------------------|-----------------------------|---------------------------|
|
||||||
| 代码生成 |  |  | - |
|
| 代码生成 |  |  | - |
|
||||||
| 文档 |  |  | - |
|
| 文档 |  |  | - |
|
||||||
| 文件 & 配置 |  |  |  |
|
| 文件 & 配置 |  |  |  |
|
||||||
| 定时任务 |  |  | - |
|
| 定时任务 |  |  | - |
|
||||||
| API 日志 |  |  | - |
|
| API 日志 |  |  | - |
|
||||||
| MySQL & Redis |  |  | - |
|
| MySQL & Redis |  |  | - |
|
||||||
| 监控平台 |  |  |  |
|
| 监控平台 |  |  |  |
|
||||||
|
|
||||||
### 支付系统
|
### 支付系统
|
||||||
|
|
||||||
| 模块 | biu | biu | biu |
|
| 模块 | biu | biu | biu |
|
||||||
|---------|------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
|
|---------|---------------------------|---------------------------------|---------------------------------|
|
||||||
| 商家 & 应用 |  |  |  |
|
| 商家 & 应用 |  |  |  |
|
||||||
| 支付 & 退款 |  |  | --- |
|
| 支付 & 退款 |  |  | --- |
|
||||||
|
|
||||||
### 数据报表
|
### 数据报表
|
||||||
|
|
||||||
| 模块 | biu | biu | biu |
|
| 模块 | biu | biu | biu |
|
||||||
|-------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
|
|-------|---------------------------------|---------------------------------|---------------------------------------|
|
||||||
| 报表设计器 |  |  |  |
|
| 报表设计器 |  |  |  |
|
||||||
| 大屏设计器 |  |  |  |
|
| 大屏设计器 |  |  |  |
|
||||||
|
|
|
||||||
|
|
@ -60,18 +60,11 @@ export function createVitePlugins() {
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
Components({
|
Components({
|
||||||
// 要搜索组件的目录的相对路径
|
|
||||||
dirs: ['src/components'],
|
|
||||||
// 组件的有效文件扩展名
|
|
||||||
extensions: ['vue', 'md'],
|
|
||||||
// 搜索子目录
|
|
||||||
deep: true,
|
|
||||||
include: [/\.vue$/, /\.vue\?vue/],
|
|
||||||
// 生成自定义 `auto-components.d.ts` 全局声明
|
// 生成自定义 `auto-components.d.ts` 全局声明
|
||||||
dts: 'src/types/auto-components.d.ts',
|
dts: 'src/types/auto-components.d.ts',
|
||||||
// 自定义组件的解析器
|
// 自定义组件的解析器
|
||||||
resolvers: [ElementPlusResolver()],
|
resolvers: [ElementPlusResolver()],
|
||||||
exclude: [/[\\/]node_modules[\\/]/]
|
globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
|
||||||
}),
|
}),
|
||||||
EslintPlugin({
|
EslintPlugin({
|
||||||
cache: false,
|
cache: false,
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ const include = [
|
||||||
'element-plus/es',
|
'element-plus/es',
|
||||||
'element-plus/es/locale/lang/zh-cn',
|
'element-plus/es/locale/lang/zh-cn',
|
||||||
'element-plus/es/locale/lang/en',
|
'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/backtop/style/css',
|
||||||
'element-plus/es/components/form/style/css',
|
'element-plus/es/components/form/style/css',
|
||||||
'element-plus/es/components/radio-group/style/css',
|
'element-plus/es/components/radio-group/style/css',
|
||||||
|
|
|
||||||
133
package.json
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "yudao-ui-admin-vue3",
|
"name": "yudao-ui-admin-vue3",
|
||||||
"version": "1.8.0-snapshot",
|
"version": "1.8.3-snapshot",
|
||||||
"description": "基于vue3、vite4、element-plus、typesScript",
|
"description": "基于vue3、vite4、element-plus、typesScript",
|
||||||
"author": "xingyu",
|
"author": "xingyu",
|
||||||
"private": false,
|
"private": false,
|
||||||
|
|
@ -11,116 +11,114 @@
|
||||||
"ts:check": "vue-tsc --noEmit",
|
"ts:check": "vue-tsc --noEmit",
|
||||||
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro",
|
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro",
|
||||||
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
|
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
|
||||||
|
"build:base": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode base",
|
||||||
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
|
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
|
||||||
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
|
|
||||||
"build:static": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode static",
|
"build:static": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode static",
|
||||||
"build:front": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode front",
|
"build:front": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode front",
|
||||||
"serve:pro": "vite preview --mode pro",
|
"serve:pro": "vite preview --mode pro",
|
||||||
"serve:dev": "vite preview --mode dev",
|
"serve:dev": "vite preview --mode dev",
|
||||||
"serve:test": "vite preview --mode test",
|
"preview": "pnpm build:base && vite preview",
|
||||||
"preview": "pnpm build && vite preview",
|
|
||||||
"npm:check": "npx npm-check-updates",
|
|
||||||
"clean": "npx rimraf node_modules",
|
"clean": "npx rimraf node_modules",
|
||||||
"clean:cache": "npx rimraf node_modules/.cache",
|
"clean:cache": "npx rimraf node_modules/.cache",
|
||||||
"lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
|
"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:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||||||
"lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
|
"lint:style": "stylelint --fix \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
|
||||||
"lint:lint-staged": "lint-staged -c ",
|
"lint:lint-staged": "lint-staged -c "
|
||||||
"lint:pretty": "pretty-quick --staged"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@element-plus/icons-vue": "^2.1.0",
|
"@element-plus/icons-vue": "^2.1.0",
|
||||||
"@form-create/designer": "^3.1.0",
|
"@form-create/designer": "^3.1.3",
|
||||||
"@form-create/element-ui": "^3.1.17",
|
"@form-create/element-ui": "^3.1.24",
|
||||||
"@iconify/iconify": "^3.1.1",
|
"@iconify/iconify": "^3.1.1",
|
||||||
"@videojs-player/vue": "^1.0.0",
|
"@videojs-player/vue": "^1.0.0",
|
||||||
"@vueuse/core": "^10.2.1",
|
"@vueuse/core": "^10.6.1",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "^5.1.10",
|
"@wangeditor/editor-for-vue": "^5.1.10",
|
||||||
"@zxcvbn-ts/core": "^3.0.3",
|
"@zxcvbn-ts/core": "^3.0.4",
|
||||||
"animate.css": "^4.1.1",
|
"animate.css": "^4.1.1",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.6.1",
|
||||||
"benz-amr-recorder": "^1.1.5",
|
"benz-amr-recorder": "^1.1.5",
|
||||||
"bpmn-js-token-simulation": "^0.10.0",
|
"bpmn-js-token-simulation": "^0.10.0",
|
||||||
"camunda-bpmn-moddle": "^7.0.1",
|
"camunda-bpmn-moddle": "^7.0.1",
|
||||||
"cropperjs": "^1.5.13",
|
"cropperjs": "^1.6.1",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.2.0",
|
||||||
"dayjs": "^1.11.9",
|
"dayjs": "^1.11.10",
|
||||||
"diagram-js": "^11.6.0",
|
"diagram-js": "^12.8.0",
|
||||||
|
"driver.js": "^1.3.1",
|
||||||
"echarts": "^5.4.3",
|
"echarts": "^5.4.3",
|
||||||
"echarts-wordcloud": "^2.1.0",
|
"echarts-wordcloud": "^2.1.0",
|
||||||
"element-plus": "2.3.8",
|
"element-plus": "2.4.2",
|
||||||
"fast-xml-parser": "^4.2.6",
|
"fast-xml-parser": "^4.3.2",
|
||||||
"highlight.js": "^11.8.0",
|
"highlight.js": "^11.9.0",
|
||||||
"intro.js": "^7.0.1",
|
|
||||||
"jsencrypt": "^3.3.2",
|
"jsencrypt": "^3.3.2",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"min-dash": "^4.1.1",
|
"min-dash": "^4.1.1",
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"pinia": "^2.1.6",
|
"pinia": "^2.1.7",
|
||||||
"qrcode": "^1.5.3",
|
"qrcode": "^1.5.3",
|
||||||
"qs": "^6.11.2",
|
"qs": "^6.11.2",
|
||||||
|
"sortablejs": "^1.15.0",
|
||||||
"steady-xml": "^0.1.0",
|
"steady-xml": "^0.1.0",
|
||||||
"url": "^0.11.1",
|
"url": "^0.11.3",
|
||||||
"video.js": "^7.21.5",
|
"video.js": "^7.21.5",
|
||||||
"vue": "3.3.4",
|
"vue": "^3.3.8",
|
||||||
"vue-dompurify-html": "^4.1.4",
|
"vue-dompurify-html": "^4.1.4",
|
||||||
"vue-i18n": "9.2.2",
|
"vue-i18n": "^9.6.5",
|
||||||
"vue-router": "^4.2.4",
|
"vue-router": "^4.2.5",
|
||||||
"vue-types": "^5.1.1",
|
"vue-types": "^5.1.1",
|
||||||
"vuedraggable": "^4.1.0",
|
"vuedraggable": "^4.1.0",
|
||||||
"web-storage-cache": "^1.1.1",
|
"web-storage-cache": "^1.1.1",
|
||||||
"xml-js": "^1.6.11"
|
"xml-js": "^1.6.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^17.6.7",
|
"@commitlint/cli": "^18.4.1",
|
||||||
"@commitlint/config-conventional": "^17.6.7",
|
"@commitlint/config-conventional": "^18.4.0",
|
||||||
"@iconify/json": "^2.2.95",
|
"@iconify/json": "^2.2.142",
|
||||||
"@intlify/unplugin-vue-i18n": "^0.12.2",
|
"@intlify/unplugin-vue-i18n": "^1.5.0",
|
||||||
"@purge-icons/generated": "^0.9.0",
|
"@purge-icons/generated": "^0.9.0",
|
||||||
"@types/intro.js": "^5.1.1",
|
"@types/lodash-es": "^4.17.11",
|
||||||
"@types/lodash-es": "^4.17.8",
|
"@types/node": "^20.9.0",
|
||||||
"@types/node": "^20.4.0",
|
"@types/nprogress": "^0.2.3",
|
||||||
"@types/nprogress": "^0.2.0",
|
"@types/qrcode": "^1.5.5",
|
||||||
"@types/qrcode": "^1.5.1",
|
"@types/qs": "^6.9.10",
|
||||||
"@types/qs": "^6.9.7",
|
"@types/sortablejs": "^1.15.5",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.2.0",
|
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
||||||
"@typescript-eslint/parser": "^6.2.0",
|
"@typescript-eslint/parser": "^6.11.0",
|
||||||
"@unocss/transformer-variant-group": "^0.51.4",
|
"@unocss/transformer-variant-group": "^0.57.4",
|
||||||
|
"@unocss/eslint-config": "^0.57.4",
|
||||||
"@vitejs/plugin-legacy": "^4.1.1",
|
"@vitejs/plugin-legacy": "^4.1.1",
|
||||||
"@vitejs/plugin-vue": "^4.2.3",
|
"@vitejs/plugin-vue": "^4.4.1",
|
||||||
"@vitejs/plugin-vue-jsx": "^3.0.1",
|
"@vitejs/plugin-vue-jsx": "^3.0.2",
|
||||||
"@vue-macros/volar": "^0.12.3",
|
"autoprefixer": "^10.4.16",
|
||||||
"autoprefixer": "^10.4.14",
|
"bpmn-js": "8.9.0",
|
||||||
"bpmn-js": "^8.9.0",
|
"bpmn-js-properties-panel": "0.46.0",
|
||||||
"bpmn-js-properties-panel": "^0.46.0",
|
|
||||||
"consola": "^3.2.3",
|
"consola": "^3.2.3",
|
||||||
"eslint": "^8.46.0",
|
"eslint": "^8.53.0",
|
||||||
"eslint-config-prettier": "^8.9.0",
|
"eslint-config-prettier": "^9.0.0",
|
||||||
"eslint-define-config": "^1.21.0",
|
"eslint-define-config": "^1.24.1",
|
||||||
"eslint-plugin-prettier": "^5.0.0",
|
"eslint-plugin-prettier": "^5.0.1",
|
||||||
"eslint-plugin-vue": "^9.15.1",
|
"eslint-plugin-vue": "^9.18.1",
|
||||||
"lint-staged": "^13.2.3",
|
"lint-staged": "^15.1.0",
|
||||||
"postcss": "^8.4.27",
|
"postcss": "^8.4.31",
|
||||||
"postcss-html": "^1.5.0",
|
"postcss-html": "^1.5.0",
|
||||||
"postcss-scss": "^4.0.6",
|
"postcss-scss": "^4.0.9",
|
||||||
"prettier": "^3.0.0",
|
"prettier": "^3.1.0",
|
||||||
"rimraf": "^5.0.1",
|
"rimraf": "^5.0.5",
|
||||||
"rollup": "^3.27.0",
|
"rollup": "^4.4.1",
|
||||||
"sass": "^1.64.1",
|
"sass": "^1.69.5",
|
||||||
"stylelint": "^15.10.2",
|
"stylelint": "^15.11.0",
|
||||||
|
"stylelint-config-html": "^1.1.0",
|
||||||
"stylelint-config-recommended": "^13.0.0",
|
"stylelint-config-recommended": "^13.0.0",
|
||||||
"stylelint-config-recommended-vue": "^1.5.0",
|
|
||||||
"stylelint-config-standard": "^34.0.0",
|
"stylelint-config-standard": "^34.0.0",
|
||||||
"stylelint-order": "^6.0.3",
|
"stylelint-order": "^6.0.3",
|
||||||
"terser": "^5.19.2",
|
"terser": "^5.24.0",
|
||||||
"typescript": "5.1.6",
|
"typescript": "5.2.2",
|
||||||
"unocss": "^0.54.0",
|
"unocss": "^0.57.4",
|
||||||
"unplugin-auto-import": "^0.16.6",
|
"unplugin-auto-import": "^0.16.7",
|
||||||
"unplugin-element-plus": "^0.7.2",
|
"unplugin-element-plus": "^0.8.0",
|
||||||
"unplugin-vue-components": "^0.25.1",
|
"unplugin-vue-components": "^0.25.2",
|
||||||
"vite": "4.4.7",
|
"vite": "4.5.0",
|
||||||
"vite-plugin-compression": "^0.5.1",
|
"vite-plugin-compression": "^0.5.1",
|
||||||
"vite-plugin-ejs": "^1.6.4",
|
"vite-plugin-ejs": "^1.6.4",
|
||||||
"vite-plugin-eslint": "^1.8.1",
|
"vite-plugin-eslint": "^1.8.1",
|
||||||
|
|
@ -128,7 +126,8 @@
|
||||||
"vite-plugin-purge-icons": "^0.9.2",
|
"vite-plugin-purge-icons": "^0.9.2",
|
||||||
"vite-plugin-svg-icons": "^2.0.1",
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
"vite-plugin-top-level-await": "^1.3.1",
|
"vite-plugin-top-level-await": "^1.3.1",
|
||||||
"vue-tsc": "^1.8.8"
|
"vue-eslint-parser": "^9.3.2",
|
||||||
|
"vue-tsc": "^1.8.22"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
||||||
|
|
@ -41,3 +41,41 @@ export const getTaskListByProcessInstanceId = async (processInstanceId) => {
|
||||||
export const exportTask = async (params) => {
|
export const exportTask = async (params) => {
|
||||||
return await request.download({ url: '/bpm/task/export', params })
|
return await request.download({ url: '/bpm/task/export', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取所有可回退的节点
|
||||||
|
export const getReturnList = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/task/return-list', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 回退
|
||||||
|
export const returnTask = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/return', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 委派
|
||||||
|
*/
|
||||||
|
export const delegateTask = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/delegate', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加签
|
||||||
|
*/
|
||||||
|
export const taskAddSign = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/create-sign', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取减签任务列表
|
||||||
|
*/
|
||||||
|
export const getChildrenTaskList = async (id: string) => {
|
||||||
|
return await request.get({ url: '/bpm/task/children-list?taskId=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 减签
|
||||||
|
*/
|
||||||
|
export const taskSubSign = async (data) => {
|
||||||
|
return await request.delete({ url: '/bpm/task/delete-sign', data })
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface BusinessVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
statusTypeId: number
|
||||||
|
statusId: number
|
||||||
|
contactNextTime: Date
|
||||||
|
customerId: number
|
||||||
|
dealTime: Date
|
||||||
|
price: number
|
||||||
|
discountPercent: number
|
||||||
|
productPrice: number
|
||||||
|
remark: string
|
||||||
|
ownerUserId: number
|
||||||
|
roUserIds: string
|
||||||
|
rwUserIds: string
|
||||||
|
endStatus: number
|
||||||
|
endRemark: string
|
||||||
|
contactLastTime: Date
|
||||||
|
followUpStatus: 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 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 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 })
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface BusinessStatusTypeVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
deptIds: number[]
|
||||||
|
status: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询商机状态类型列表
|
||||||
|
export const getBusinessStatusTypePage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/business-status-type/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询商机状态类型详情
|
||||||
|
export const getBusinessStatusType = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/business-status-type/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增商机状态类型
|
||||||
|
export const createBusinessStatusType = async (data: BusinessStatusTypeVO) => {
|
||||||
|
return await request.post({ url: `/crm/business-status-type/create`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改商机状态类型
|
||||||
|
export const updateBusinessStatusType = async (data: BusinessStatusTypeVO) => {
|
||||||
|
return await request.put({ url: `/crm/business-status-type/update`, data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除商机状态类型
|
||||||
|
export const deleteBusinessStatusType = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/business-status-type/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出商机状态类型 Excel
|
||||||
|
export const exportBusinessStatusType = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/business-status-type/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取商机状态类型信息列表
|
||||||
|
export const getBusinessStatusTypeList = async () => {
|
||||||
|
return await request.get({ url: `/crm/business-status-type/get-simple-list` })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据类型ID获取商机状态信息列表
|
||||||
|
export const getBusinessStatusListByTypeId = async (typeId: number) => {
|
||||||
|
return await request.get({ url: `/crm/business-status-type/get-status-list?typeId=` + typeId })
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ClueVO {
|
||||||
|
id: number
|
||||||
|
transformStatus: boolean
|
||||||
|
followUpStatus: boolean
|
||||||
|
name: string
|
||||||
|
customerId: number
|
||||||
|
contactNextTime: Date
|
||||||
|
telephone: string
|
||||||
|
mobile: string
|
||||||
|
address: string
|
||||||
|
ownerUserId: number
|
||||||
|
contactLastTime: Date
|
||||||
|
remark: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询线索列表
|
||||||
|
export const getCluePage = async (params) => {
|
||||||
|
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 })
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ContactVO {
|
||||||
|
name: string
|
||||||
|
nextTime: Date
|
||||||
|
mobile: string
|
||||||
|
telephone: string
|
||||||
|
email: string
|
||||||
|
post: string
|
||||||
|
customerId: number
|
||||||
|
address: string
|
||||||
|
remark: string
|
||||||
|
ownerUserId: string
|
||||||
|
lastTime: Date
|
||||||
|
id: number
|
||||||
|
parentId: number
|
||||||
|
qq: number
|
||||||
|
wechat: string
|
||||||
|
sex: number
|
||||||
|
master: boolean
|
||||||
|
creatorName: string
|
||||||
|
updateTime?: Date
|
||||||
|
createTime?: Date
|
||||||
|
customerName: string
|
||||||
|
areaName: string
|
||||||
|
ownerUserName: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 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 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` })
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ContractVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
customerId: number
|
||||||
|
businessId: number
|
||||||
|
processInstanceId: number
|
||||||
|
orderDate: Date
|
||||||
|
ownerUserId: number
|
||||||
|
no: string
|
||||||
|
startTime: Date
|
||||||
|
endTime: Date
|
||||||
|
price: number
|
||||||
|
discountPercent: number
|
||||||
|
productPrice: number
|
||||||
|
roUserIds: string
|
||||||
|
rwUserIds: string
|
||||||
|
contactId: number
|
||||||
|
signUserId: number
|
||||||
|
contactLastTime: Date
|
||||||
|
remark: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 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 getContract = async (id: number) => {
|
||||||
|
return await request.get({ url: `/crm/contract/get?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增 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 })
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface CustomerVO {
|
||||||
|
id?: number
|
||||||
|
name: string
|
||||||
|
industryId: number
|
||||||
|
level: number
|
||||||
|
source: number
|
||||||
|
followUpStatus?: boolean
|
||||||
|
lockStatus?: boolean
|
||||||
|
dealStatus?: boolean
|
||||||
|
mobile: string
|
||||||
|
telephone: string
|
||||||
|
website: string
|
||||||
|
qq: string
|
||||||
|
wechat: string
|
||||||
|
email: string
|
||||||
|
description: string
|
||||||
|
remark: string
|
||||||
|
ownerUserId?: number
|
||||||
|
ownerUserName?: string
|
||||||
|
ownerUserDept?: string
|
||||||
|
roUserIds?: string
|
||||||
|
rwUserIds?: string
|
||||||
|
areaId?: number
|
||||||
|
areaName?: string
|
||||||
|
detailAddress: string
|
||||||
|
contactLastTime?: Date
|
||||||
|
contactNextTime: Date
|
||||||
|
createTime?: Date
|
||||||
|
updateTime?: Date
|
||||||
|
creator?: string
|
||||||
|
creatorName?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询客户列表
|
||||||
|
export const getCustomerPage = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/customer/page`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询客户详情
|
||||||
|
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 deleteCustomer = async (id: number) => {
|
||||||
|
return await request.delete({ url: `/crm/customer/delete?id=` + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出客户 Excel
|
||||||
|
export const exportCustomer = async (params) => {
|
||||||
|
return await request.download({ url: `/crm/customer/export-excel`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 客户列表
|
||||||
|
export const queryAllList = async () => {
|
||||||
|
return await request.get({ url: `/crm/customer/query-all-list` })
|
||||||
|
}
|
||||||
|
|
@ -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,20 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
import { ConfigVO } from '@/api/infra/config'
|
||||||
|
|
||||||
|
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: ConfigVO) => {
|
||||||
|
return await request.put({ url: `/crm/customer-pool-config/save`, data })
|
||||||
|
}
|
||||||