vue3版本xm与lcode进行整合

This commit is contained in:
陈裕财
2024-06-06 06:14:15 +08:00
parent 1ea9ea43c3
commit b164f2d3e8
775 changed files with 64346 additions and 729 deletions

112
.env Normal file
View File

@@ -0,0 +1,112 @@
# 标题
VITE_APP_TITLE=唛盟项目管理系统
# 项目编号,一般与后台微服务编号一致
VITE_CONTEXT=xm
# 首页页面访问路径版本
VITE_UI_VERSION=m1
# 接口前缀
VITE_API_BASE_PATH=/api
# API版本号一般指api版本号
VITE_API_VERSION=m1
# 项目本地运行端口号
VITE_PORT=8015
# open 运行 npm run dev 时自动打开浏览器
VITE_OPEN=true
# 租户开关
VITE_APP_TENANT_ENABLE=true
# 验证码的开关
VITE_APP_CAPTCHA_ENABLE=false
# 文档地址的开关
VITE_APP_DOCALERT_ENABLE=true
# 百度统计
VITE_APP_BAIDU_CODE=
# 配置附件上传的接口如果不配使用arc内置的地址
VITE_UPLOAD_ATT_URL=
# 配置图片上传的接口如果不配使用arc内置的地址
VITE_UPLOAD_IMAGE_URL=
# 固定网址
VITE_FIXED_DOMAIN=https://www.maimengcloud.com
# 开源项目地址
VITE_OPEN_SOURCE_LINK=https://gitee.com/qingqinkj218/collections/375320
# 微信开放平台 appid
VITE_WXOPEN_APPID=wx2671d5db8346b6fc
# 是否开启工作流,如果开启,登录后自动查代办,如果不开启,不查代办
VITE_WF_OPEN=false
#
# 说明: VITE_CTX_# 为定义唛盟各个子系统的context;
# context指向子系统的微服务名称spring.application.name
#
# 1. 用于前端请求路径前缀映射,
# 前端页面一般部署在 ./{VITE_CONTEXT}/{VITE_UI_VERSION?}
# => /xm/m1
#
# 2. api导航到对应子系统等
# api一般按以下格式规范组装 ./{VITE_API_BASE_PATH}/{VITE_API_VERSION}/{VITE_CONTEXT}
# => /api/m1/lcode
#
# 登录相关如果后端启用oauth2,则返回 oauth2client 如果后端不启用oauth2,后端账户使用mdp-lcode服务则返回 lcode ,如果使用mdp-sys提供服务则返回sys
VITE_CTX_LOGIN=oauth2client
# 项目管理子系统
VITE_CTX_XM=xm
# 工作流子系统,由于flowable启动限制目前不支持jar集成到lcode需要单独部署
VITE_CTX_WF=workflow
# 低代码子系统
VITE_CTX_LCODE=lcode
# 内容管理子系统
VITE_CTX_ARC=lcode
# 数据模型 由lcode接管
VITE_CTX_DM=lcode
# 协同办公
VITE_CTX_OA=oa
# 系统管理,目前由lcode接管
VITE_CTX_SYS=lcode
# 智能表单目前由lcode接管
VITE_CTX_FORM=lcode
# 商城-面向消费用户端
VITE_CTX_MALL=mall
# 商城管理端
VITE_CTX_MALLM=mallm
# 即时通讯
VITE_CTX_IM=im
# 短信
VITE_CTX_SMS=sms
# 唛盟内置的应用购买模块订单 目前由lcode接管
VITE_CTX_MO=lcode
# 众包 目前由xm接管
VITE_CTX_CROWD=xm
# 第三方集成系统
VITE_CTX_TPA=tpa

33
.env.dev Normal file
View File

@@ -0,0 +1,33 @@
# 开发环境本地只启动前端项目依赖开发环境后端、APP
NODE_ENV=development
VITE_DEV=true
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=
# 上传路径
VITE_UPLOAD_ATT_URL=
# 是否删除debugger
VITE_DROP_DEBUGGER=false
# 是否删除console.log
VITE_DROP_CONSOLE=false
# 是否sourcemap
VITE_SOURCEMAP=true
# 打包路径
VITE_BASE_PATH=./
# 输出路径
VITE_OUT_DIR=dist
# 验证码的开关
VITE_APP_CAPTCHA_ENABLE=false
# 登录相关如果后端启用oauth2,则返回 oauth2client 如果后端不启用oauth2,后端账户使用mdp-lcode服务则返回 lcode ,如果使用mdp-sys提供服务则返回sys
VITE_CTX_LOGIN=oauth2client

28
.env.prod Normal file
View File

@@ -0,0 +1,28 @@
# 生产环境:只在打包时使用
NODE_ENV=production
VITE_DEV=false
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=
# 上传路径
VITE_UPLOAD_URL=
# 接口前缀
VITE_API_BASE_PATH=/api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=./
# 输出路径
VITE_OUT_DIR=dist-prod

22
.env.stage Normal file
View File

@@ -0,0 +1,22 @@
# 预发布环境:只在打包时使用
NODE_ENV=production
VITE_DEV=false
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=
# 上传路径
VITE_UPLOAD_URL=
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 输出路径
VITE_OUT_DIR=dist-stage

27
.env.test Normal file
View File

@@ -0,0 +1,27 @@
# 测试环境:只在打包时使用
NODE_ENV=production
VITE_DEV=false
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL=
# 接口前缀
VITE_API_BASEPATH=
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=./
# 输出路径
VITE_OUT_DIR=dist-test

259
.eslintrc-auto-import.json Normal file
View File

@@ -0,0 +1,259 @@
{
"globals": {
"EffectScope": true,
"ElMessage": true,
"ElMessageBox": true,
"ElTag": true,
"asyncComputed": true,
"autoResetRef": true,
"computed": true,
"computedAsync": true,
"computedEager": true,
"computedInject": true,
"computedWithControl": true,
"controlledComputed": true,
"controlledRef": true,
"createApp": true,
"createEventHook": true,
"createGlobalState": true,
"createInjectionState": true,
"createReactiveFn": true,
"createSharedComposable": true,
"createUnrefFn": true,
"customRef": true,
"debouncedRef": true,
"debouncedWatch": true,
"defineAsyncComponent": true,
"defineComponent": true,
"eagerComputed": true,
"effectScope": true,
"extendRef": true,
"getCurrentInstance": true,
"getCurrentScope": true,
"h": true,
"ignorableWatch": true,
"inject": true,
"isDefined": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
"makeDestructurable": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
"onBeforeMount": true,
"onBeforeUnmount": true,
"onBeforeUpdate": true,
"onClickOutside": true,
"onDeactivated": true,
"onErrorCaptured": true,
"onKeyStroke": true,
"onLongPress": true,
"onMounted": true,
"onRenderTracked": true,
"onRenderTriggered": true,
"onScopeDispose": true,
"onServerPrefetch": true,
"onStartTyping": true,
"onUnmounted": true,
"onUpdated": true,
"pausableWatch": true,
"provide": true,
"reactify": true,
"reactifyObject": true,
"reactive": true,
"reactiveComputed": true,
"reactiveOmit": true,
"reactivePick": true,
"readonly": true,
"ref": true,
"refAutoReset": true,
"refDebounced": true,
"refDefault": true,
"refThrottled": true,
"refWithControl": true,
"resolveComponent": true,
"resolveRef": true,
"resolveUnref": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
"syncRef": true,
"syncRefs": true,
"templateRef": true,
"throttledRef": true,
"throttledWatch": true,
"toRaw": true,
"toReactive": true,
"toRef": true,
"toRefs": true,
"triggerRef": true,
"tryOnBeforeMount": true,
"tryOnBeforeUnmount": true,
"tryOnMounted": true,
"tryOnScopeDispose": true,
"tryOnUnmounted": true,
"unref": true,
"unrefElement": true,
"until": true,
"useActiveElement": true,
"useArrayEvery": true,
"useArrayFilter": true,
"useArrayFind": true,
"useArrayFindIndex": true,
"useArrayJoin": true,
"useArrayMap": true,
"useArrayReduce": true,
"useArraySome": true,
"useAsyncQueue": true,
"useAsyncState": true,
"useAttrs": true,
"useBase64": true,
"useBattery": true,
"useBluetooth": true,
"useBreakpoints": true,
"useBroadcastChannel": true,
"useBrowserLocation": true,
"useCached": true,
"useClipboard": true,
"useColorMode": true,
"useConfirmDialog": true,
"useCounter": true,
"useCssModule": true,
"useCssVar": true,
"useCssVars": true,
"useCurrentElement": true,
"useCycleList": true,
"useDark": true,
"useDateFormat": true,
"useDebounce": true,
"useDebounceFn": true,
"useDebouncedRefHistory": true,
"useDeviceMotion": true,
"useDeviceOrientation": true,
"useDevicePixelRatio": true,
"useDevicesList": true,
"useDisplayMedia": true,
"useDocumentVisibility": true,
"useDraggable": true,
"useDropZone": true,
"useElementBounding": true,
"useElementByPoint": true,
"useElementHover": true,
"useElementSize": true,
"useElementVisibility": true,
"useEventBus": true,
"useEventListener": true,
"useEventSource": true,
"useEyeDropper": true,
"useFavicon": true,
"useFetch": true,
"useFileDialog": true,
"useFileSystemAccess": true,
"useFocus": true,
"useFocusWithin": true,
"useFps": true,
"useFullscreen": true,
"useGamepad": true,
"useGeolocation": true,
"useIdle": true,
"useImage": true,
"useInfiniteScroll": true,
"useIntersectionObserver": true,
"useInterval": true,
"useIntervalFn": true,
"useKeyModifier": true,
"useLastChanged": true,
"useLocalStorage": true,
"useMagicKeys": true,
"useManualRefHistory": true,
"useMediaControls": true,
"useMediaQuery": true,
"useMemoize": true,
"useMemory": true,
"useMounted": true,
"useMouse": true,
"useMouseInElement": true,
"useMousePressed": true,
"useMutationObserver": true,
"useNavigatorLanguage": true,
"useNetwork": true,
"useNow": true,
"useObjectUrl": true,
"useOffsetPagination": true,
"useOnline": true,
"usePageLeave": true,
"useParallax": true,
"usePermission": true,
"usePointer": true,
"usePointerSwipe": true,
"usePreferredColorScheme": true,
"usePreferredDark": true,
"usePreferredLanguages": true,
"useRafFn": true,
"useRefHistory": true,
"useResizeObserver": true,
"useRoute": true,
"useRouter": true,
"useScreenOrientation": true,
"useScreenSafeArea": true,
"useScriptTag": true,
"useScroll": true,
"useScrollLock": true,
"useSessionStorage": true,
"useShare": true,
"useSlots": true,
"useSpeechRecognition": true,
"useSpeechSynthesis": true,
"useStepper": true,
"useStorage": true,
"useStorageAsync": true,
"useStyleTag": true,
"useSupported": true,
"useSwipe": true,
"useTemplateRefsList": true,
"useTextDirection": true,
"useTextSelection": true,
"useTextareaAutosize": true,
"useThrottle": true,
"useThrottleFn": true,
"useThrottledRefHistory": true,
"useTimeAgo": true,
"useTimeout": true,
"useTimeoutFn": true,
"useTimeoutPoll": true,
"useTimestamp": true,
"useTitle": true,
"useToggle": true,
"useTransition": true,
"useUrlSearchParams": true,
"useUserMedia": true,
"useVModel": true,
"useVModels": true,
"useVibrate": true,
"useVirtualList": true,
"useWakeLock": true,
"useWebNotification": true,
"useWebSocket": true,
"useWebWorker": true,
"useWebWorkerFn": true,
"useWindowFocus": true,
"useWindowScroll": true,
"useWindowSize": true,
"watch": true,
"watchArray": true,
"watchAtMost": true,
"watchDebounced": true,
"watchEffect": true,
"watchIgnorable": true,
"watchOnce": true,
"watchPausable": true,
"watchPostEffect": true,
"watchSyncEffect": true,
"watchThrottled": true,
"watchTriggerable": true,
"watchWithFilter": true,
"whenever": true
}
}

11
.prettierignore Normal file
View File

@@ -0,0 +1,11 @@
/node_modules/**
/dist/
/dist*
/public/*
/docs/*
/vite.config.ts
/src/types/env.d.ts
/src/types/auto-components.d.ts
/src/types/auto-imports.d.ts
/docs/**/*
CHANGELOG

6
.stylelintignore Normal file
View File

@@ -0,0 +1,6 @@
/dist/*
/public/*
public/*
/dist*
/src/types/env.d.ts
/docs/**/*

19
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,19 @@
{
"recommendations": [
"christian-kohler.path-intellisense",
"vscode-icons-team.vscode-icons",
"davidanson.vscode-markdownlint",
"stylelint.vscode-stylelint",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"mrmlnc.vscode-less",
"lokalise.i18n-ally",
"redhat.vscode-yaml",
"csstools.postcss",
"mikestead.dotenv",
"eamodio.gitlens",
"antfu.iconify",
"antfu.unocss",
"Vue.volar"
]
}

16
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,16 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "msedge",
"request": "launch",
"name": "Launch Edge against localhost",
"url": "http://localhost",
"webRoot": "${workspaceFolder}/src",
"sourceMaps": true
}
]
}

144
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,144 @@
{
"typescript.tsdk": "node_modules/typescript/lib",
"npm.packageManager": "pnpm",
"editor.tabSize": 2,
"prettier.printWidth": 100, // 超过最大值换行
"editor.defaultFormatter": "esbenp.prettier-vscode",
"files.eol": "\n",
"search.exclude": {
"**/node_modules": true,
"**/*.log": true,
"**/*.log*": true,
"**/bower_components": true,
"**/dist": true,
"**/elehukouben": true,
"**/.git": true,
"**/.gitignore": true,
"**/.svn": true,
"**/.DS_Store": true,
"**/.idea": true,
"**/.vscode": false,
"**/yarn.lock": true,
"**/tmp": true,
"out": true,
"dist": true,
"node_modules": true,
"CHANGELOG.md": true,
"examples": true,
"res": true,
"screenshots": true,
"yarn-error.log": true,
"**/.yarn": true
},
"files.exclude": {
"**/.cache": true,
"**/.editorconfig": true,
"**/.eslintcache": true,
"**/bower_components": true,
"**/.idea": true,
"**/tmp": true,
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true
},
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/.vscode/**": true,
"**/node_modules/**": true,
"**/tmp/**": true,
"**/bower_components/**": true,
"**/dist/**": true,
"**/yarn.lock": true
},
"stylelint.enable": true,
"stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
"path-intellisense.mappings": {
"@/": "${workspaceRoot}/src"
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[typescriptreact]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[less]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"[vue]": {
"editor.defaultFormatter": "Vue.volar"
},
"i18n-ally.localesPaths": ["src/locales"],
"i18n-ally.keystyle": "nested",
"i18n-ally.sortKeys": true,
"i18n-ally.namespace": false,
"i18n-ally.enabledParsers": ["ts"],
"i18n-ally.sourceLanguage": "en",
"i18n-ally.displayLanguage": "zh-CN",
"i18n-ally.enabledFrameworks": ["vue", "react"],
"cSpell.words": [
"brotli",
"browserslist",
"codemirror",
"commitlint",
"cropperjs",
"echart",
"echarts",
"esnext",
"esno",
"iconify",
"INTLIFY",
"lintstagedrc",
"logicflow",
"nprogress",
"pinia",
"pnpm",
"qrcode",
"sider",
"sortablejs",
"stylelint",
"svgs",
"unocss",
"unplugin",
"unref",
"videojs",
"VITE",
"vitejs",
"vueuse",
"wangeditor",
"xingyu",
"yudao",
"zxcvbn"
],
// 控制相关文件嵌套展示
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
"*.env": "$(capture).env.*",
"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,
"nuxt.isNuxtApp": false
}

View File

@@ -1,6 +1,6 @@
<p align="center">
<a href="https://maimengcloud.com" target="_blank">
<img src="https://maimengcloud.com/img/728c2dec5c1055349455.png" width="400" alt="logo">
<img src="https://maimengcloud.com/crowd/img/728c2dec5c1055349455.png" width="400" alt="logo">
</a>
</p>
<p align="center">
@@ -178,7 +178,17 @@
- 整合了最新版本的强大的flowable工作流引擎
1. 基于mdp框架重新开发了流程中心、任务中心、流程的发布、上下架等功能
2. 提供分布式环境下的流程调用、流程整合问题的解决方案
3. 提供在线流程设计器并整合了mdp的权限机制
3. 提供vue3版本在线流程设计器并整合了mdp的权限机制
4. 整合了mdp的智能表单
5. 整合了mdp的数据字典通过配置即可实现大部分业务场景真正做到流程设计、部署、运行0耗时0延迟。
4. 任务的提交支持几乎能想到的各种方式:转办、委办、主办、前加签、后加签、减签、发起人处理、驳回任意节点、审批同意、审批不同意但流程继续、拒绝终止流程等,同时提供框架的提交方式可扩展性,让你轻松应对各种变态需求。
5. 会签支持:会签、或签、过半通过、一票否决等等
6. 任务分配到人十来种策略支持并提供扩展接口:按岗位、按部门、按组、按标签、按指定人员、发起人、上一步执行人、上一步执行人临时指定、发起流程时统一指定、转主办、转监控、按高级自定义查询条件、
7. 整合了mdp的消息发送机制轻松发送流程消息到im、站内信、公众号、短信
8. 整合mdp事件模型为将来ai调用流程等创新场景提供底层基础
9. 提供业务模块内嵌页面发起流程的组件和统一的方式,开发几乎可以无视工作流相关的接入工时。
10. 整合mdp附件管理
- 提供强大的国际化解决方案
1. 前后端均支持分别进行国际化
@@ -330,6 +340,18 @@
|第三方用户查询 | 查询第三方账户信息 |
### 流程模型
|功能 |描述|
|-------------------------------|--------------------------|
|流程编辑器 | 在线流程编辑器|
|模型发布 | 流程模型发布|
|模型设置 | 设置流程与智能表单的关联、模型的启动条件、审批人、权限等|
![modelflow](./docs/images/module/modelflow.png)
![workflow-model-designer](./docs/images/module/workflow-model-designer.png)
![workflow-model-assignee](./docs/images/module/workflow-task-assignee.png)
![workflow-model-form](./docs/images/module/workflow-task-form.png)
### 审批中心
|功能 |描述|
@@ -337,8 +359,12 @@
|待执行 | 我的待执行任务查询、任务执行|
|日历任务 | 我的待执行任务查询、任务执行|
|发起流程 | 发起流程|
![workflow-task-detail](./docs/images/module/workflow-task-detail.png)
![workflow-task-action](./docs/images/module/workflow-task-action.png)
![workflow-task-ruli](./docs/images/module/workflow-task-ruli.png)
![workflow-task-start](./docs/images/module/workflow-task-start.png)
### 审批监控
|功能 |描述|
@@ -349,14 +375,6 @@
![monitorflow](./docs/images/module/monitorflow.png)
### 流程模型
|功能 |描述|
|-------------------------------|--------------------------|
|流程编辑器 | 在线流程编辑器|
|模型发布 | 流程模型发布|
|模型设置 | 设置流程与智能表单的关联、模型的启动条件、审批人、权限等|
![modelflow](./docs/images/module/modelflow.png)
### 低代码
|功能 |描述|
|-------------------------------|--------------------------|
@@ -710,38 +728,6 @@ pnpm run dev
```
上述代理实现把以/api/m1/lcode开头的请求地址(举例/api/m1/lcode/user/list)替换为/user/list,并转发到http://服务器上的ip:7014地址
#### 流程编辑器的整合
流程编辑器下载[工作流流程编辑器mdp-workflow-modeler-ui-web](https://gitee.com/maimengcloud/mdp-workflow-modeler-ui-web)
流程编辑器的整合分两种使用场景:
1. 本地开发调试运行
将mdp-workflow-modeler-ui-web/modeler-ui整个目录拷贝到
mdp-lcode-ui-web/static/下
并配置页面代理
```js
['/workflow/modeler-ui/']: {
target: 'http://localhost:8015',
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/workflow/modeler-ui/`), '/modeler-ui/'),
},
```
还需要配置工作流api请求代理
假设mdp-workflow 本地启动并监听 7080 端口
```js
['/api/m1/workflow']: {
target: 'http://localhost:7080',
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api/m1/workflow`), '/'),
},
```
此代理实现将/api/m1/workflow/开头的请求转发到/http://localhost:7080/下
2. 服务器上运行
将mdp-workflow-modeler-ui-web/modeler-ui 整个目录拷贝到服务器上如果是nginx,建议放在 nginx/html/下
如果是nginx,需要配置请求地址 /workflow/modeler-ui/->到nginx/html/modeler-ui/ 的映射关系
### 构建
```bash

100
build/vite/index.ts Normal file
View File

@@ -0,0 +1,100 @@
import { resolve } from 'path'
import Vue from '@vitejs/plugin-vue'
import VueJsx from '@vitejs/plugin-vue-jsx'
import progress from 'vite-plugin-progress'
import EslintPlugin from 'vite-plugin-eslint'
import PurgeIcons from 'vite-plugin-purge-icons'
import { ViteEjsPlugin } from 'vite-plugin-ejs'
// @ts-ignore
import ElementPlus from 'unplugin-element-plus/vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import viteCompression from 'vite-plugin-compression'
import topLevelAwait from 'vite-plugin-top-level-await'
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import UnoCSS from 'unocss/vite'
export function createVitePlugins() {
const root = process.cwd()
// 路径查找
function pathResolve(dir: string) {
return resolve(root, '.', dir)
}
return [
Vue(),
VueJsx(),
UnoCSS(),
progress(),
PurgeIcons(),
ElementPlus({}),
AutoImport({
include: [
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
/\.vue$/,
/\.vue\?vue/, // .vue
/\.md$/ // .md
],
imports: [
'vue',
'vue-router',
// 可额外添加需要 autoImport 的组件
{
'@/hooks/web/useI18n': ['useI18n'],
'@/hooks/web/useMessage': ['useMessage'],
'@/hooks/web/useTable': ['useTable'],
'@/hooks/web/useCrudSchemas': ['useCrudSchemas'],
'@/utils/formRules': ['required'],
'@/utils/dict': ['DICT_TYPE']
}
],
dts: 'src/types/auto-imports.d.ts',
resolvers: [ElementPlusResolver()],
eslintrc: {
enabled: false, // Default `false`
filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
}
}),
Components({
// 生成自定义 `auto-components.d.ts` 全局声明
dts: 'src/types/auto-components.d.ts',
// 自定义组件的解析器
resolvers: [ElementPlusResolver()],
globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
}),
EslintPlugin({
cache: false,
include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
}),
VueI18nPlugin({
runtimeOnly: true,
compositionOnly: true,
include: [resolve(__dirname, 'src/locales/**')]
}),
createSvgIconsPlugin({
iconDirs: [pathResolve('src/assets/svgs')],
symbolId: 'icon-[dir]-[name]',
svgoOptions: true
}),
viteCompression({
verbose: true, // 是否在控制台输出压缩结果
disable: false, // 是否禁用
threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
ext: '.gz', // 生成的压缩包后缀
deleteOriginFile: false //压缩后是否删除源文件
}),
ViteEjsPlugin(),
topLevelAwait({
// https://juejin.cn/post/7152191742513512485
// The export name of top-level await promise for each chunk module
promiseExportName: '__tla',
// The function to generate import names of top-level await promise in each chunk module
promiseImportName: (i) => `__tla_${i}`
})
]
}

112
build/vite/optimize.ts Normal file
View File

@@ -0,0 +1,112 @@
const include = [
'qs',
'url',
'vue',
'sass',
'mitt',
'axios',
'pinia',
'dayjs',
'qrcode',
'unocss',
'vue-router',
'vue-types',
'vue-i18n',
'crypto-js',
'cropperjs',
'lodash-es',
'nprogress',
'web-storage-cache',
'@iconify/iconify',
'@vueuse/core',
'@zxcvbn-ts/core',
'echarts/core',
'echarts/charts',
'echarts/components',
'echarts/renderers',
'echarts-wordcloud',
'@wangeditor/editor',
'@wangeditor/editor-for-vue',
'element-plus',
'element-plus/es',
'element-plus/es/locale/lang/zh-cn',
'element-plus/es/locale/lang/en',
'element-plus/es/components/avatar/style/css',
'element-plus/es/components/space/style/css',
'element-plus/es/components/backtop/style/css',
'element-plus/es/components/form/style/css',
'element-plus/es/components/radio-group/style/css',
'element-plus/es/components/radio/style/css',
'element-plus/es/components/checkbox/style/css',
'element-plus/es/components/checkbox-group/style/css',
'element-plus/es/components/switch/style/css',
'element-plus/es/components/time-picker/style/css',
'element-plus/es/components/date-picker/style/css',
'element-plus/es/components/descriptions/style/css',
'element-plus/es/components/descriptions-item/style/css',
'element-plus/es/components/link/style/css',
'element-plus/es/components/tooltip/style/css',
'element-plus/es/components/drawer/style/css',
'element-plus/es/components/dialog/style/css',
'element-plus/es/components/checkbox-button/style/css',
'element-plus/es/components/option-group/style/css',
'element-plus/es/components/radio-button/style/css',
'element-plus/es/components/cascader/style/css',
'element-plus/es/components/color-picker/style/css',
'element-plus/es/components/input-number/style/css',
'element-plus/es/components/rate/style/css',
'element-plus/es/components/select-v2/style/css',
'element-plus/es/components/tree-select/style/css',
'element-plus/es/components/slider/style/css',
'element-plus/es/components/time-select/style/css',
'element-plus/es/components/autocomplete/style/css',
'element-plus/es/components/image-viewer/style/css',
'element-plus/es/components/upload/style/css',
'element-plus/es/components/col/style/css',
'element-plus/es/components/form-item/style/css',
'element-plus/es/components/alert/style/css',
'element-plus/es/components/breadcrumb/style/css',
'element-plus/es/components/select/style/css',
'element-plus/es/components/input/style/css',
'element-plus/es/components/breadcrumb-item/style/css',
'element-plus/es/components/tag/style/css',
'element-plus/es/components/pagination/style/css',
'element-plus/es/components/table/style/css',
'element-plus/es/components/table-v2/style/css',
'element-plus/es/components/table-column/style/css',
'element-plus/es/components/card/style/css',
'element-plus/es/components/row/style/css',
'element-plus/es/components/button/style/css',
'element-plus/es/components/menu/style/css',
'element-plus/es/components/sub-menu/style/css',
'element-plus/es/components/menu-item/style/css',
'element-plus/es/components/option/style/css',
'element-plus/es/components/dropdown/style/css',
'element-plus/es/components/dropdown-menu/style/css',
'element-plus/es/components/dropdown-item/style/css',
'element-plus/es/components/skeleton/style/css',
'element-plus/es/components/skeleton/style/css',
'element-plus/es/components/backtop/style/css',
'element-plus/es/components/menu/style/css',
'element-plus/es/components/sub-menu/style/css',
'element-plus/es/components/menu-item/style/css',
'element-plus/es/components/dropdown/style/css',
'element-plus/es/components/tree/style/css',
'element-plus/es/components/dropdown-menu/style/css',
'element-plus/es/components/dropdown-item/style/css',
'element-plus/es/components/badge/style/css',
'element-plus/es/components/breadcrumb/style/css',
'element-plus/es/components/breadcrumb-item/style/css',
'element-plus/es/components/image/style/css',
'element-plus/es/components/collapse-transition/style/css',
'element-plus/es/components/timeline/style/css',
'element-plus/es/components/timeline-item/style/css',
'element-plus/es/components/collapse/style/css',
'element-plus/es/components/collapse-item/style/css',
'element-plus/es/components/button-group/style/css',
'element-plus/es/components/text/style/css'
]
const exclude = ['@iconify/json']
export { include, exclude }

42
docs/CHANGELOG.md Normal file
View File

@@ -0,0 +1,42 @@
# 🚀 版本日志
## 1.0.0 (2019-03-06)
### 🐣 新增功能
1. 第一个基于vue的版本包含用户管理、部门管理、角色管理、菜单管理、字典管理
------
## 1.10.10 (2020-03-03)
### 🐞 解决BUG、优化功能
1. 融合商城版本添加 岗位管理、机构管理、系统参数管理
------
## 1.10.25 (2021-01-20)
### 🐣 新增功能
1. 智能表单
2. 工作流管理
------
## 1.20.29 (2022-7-01)
### 🐞 解决BUG、优化功能
1. 整合数据字典+系统参数,形成元数据管理解决方案,支持分布式环境下的数据共享、分发、清理、同步
2. 整合权限管理,更简单、更灵活
------
## 2.0.0 (2023-08-28)
### 🐣 新增功能
1. 用新的mdp-ui组件库重新改造所有页面每个功能提供增、删、改、查、导出、明细、复制、表格编辑、高级查询、重置查询等基本功能每个功能提供mng、list、add、edit、detail四种打开模式对应不同的按钮权限、输入框权限
2. 优化元数据管理,增加每个列表项的颜色控制、列表项过滤条件、联表联动等

183
docs/CONTRIBUTE.md Normal file
View File

@@ -0,0 +1,183 @@
# mdp 贡献说明
## 目录说明
### 工程命名规范
**前端工程命名规则:业务名-ui-web|-app|-uniapp**
**后端工程命名规则:业务名-backend**
- [-ui]代表前端
- [-web]代表电脑浏览器应用
- [-app]代表手机应用
- [-uniapp]代表小程序+app的综合体或者仅代表小程序
- [-backend]代表后端
- [-cloud]代表适用于微服务、分布式、云环境
- [-bootstrap]代表属于打包类的工程,不能写业务代码
### 前端目录
```
业务-ui-web
├── build => 编译构建相关
├── config => 编译构建配置项
├── dist => 编译后的产物
├── src => 源代码
   ├── api => 与后端交互的api接口列表一个表一个文件公共api放入$fly中
   ├── fly.js => 公共api放入fly中,自动注册成全局函数,页面上可以通过 $fly.xxxxApi()进行调用,无须引入任何文件
   ├── assets => 静态资源
   ├── common => 一些公共js脚本
   ├── components => 组件库
   ├── Mdp => mdp-ui基础组件库
   ├── MdpExt => mdp-ui扩展的组件库一般根据业务需要抽取提炼新的组件放入该目录
   ├── directive => vue指令库
   ├── icons => 图标库
   ├── lang => 语言包
   ├── mock => 接口模拟数据
   ├── router => 路由库
   ├── store => 全局公共数据库
   ├── styles => css样式库
   ├── views => 业务功能的页面代码
   ├── vuex => vuex
   ├── App.vue => 总入口 vue
   ├── main.js => 总入口 js
   ├── permission.js => 路由菜单权限过滤
├── static => 某些静态资源
├── .editorconfig => 全局代码格式配置
├── .gitattributes => 文件编码格式配置
├── CHANGELOG.md => 重大更新日志
├── CONTRIBUTE.md => 贡献说明
├── PLANS.md => 重大开发计划说明
├── README.md => 项目说明
├── LICENSE => 协议
├── favicon.ico => 项目图标
├── package.json => 组件依赖关系
├── index.html => 总入口、首页
```
### 后端目录
**后端工程结构**
- 工程结构总图:
```
业务名-backend
├── 业务名 =>业务工程,主要用来书写业务代码
├── 业务名-cloud-bootstrap =>maven打包工程禁止书写业务代码部署到云环境
├── 业务名-bootstrap =>maven打包工程禁止书写业务代码部署到单体应用环境
├── pom.xml =>maven pom文件
```
- 工程结构明细图:
```
业务名-backend
├── 业务名 => 业务主体工程,主要用来写业务功能代码
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名 => 一级业务、产品、大模块之类的
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── com.企业名.业务名.模块1 => 模块目录,一个模块=一个表
├── com.企业名.业务名.模块1.ctrl => 控制器
├── com.企业名.业务名.模块1.entity => 实体类,保持与数据库表一摸一样,不建议改动,代码生成器随时覆盖
├── com.企业名.业务名.模块1.mapper => mybatis mapper文件,包含 Mapper.java Mapper.xml两个文件
├── com.企业名.业务名.模块1.service => 服务类,所有服务继承 BaseService
├── com.企业名.业务名.模块1.vo => 如果需要对entity进行扩展可在此目录定义继承entity的子类
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-cloud-bootstrap => 打包工程(微服务环境)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-bootstrap => 打包工程(单体应用)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── pom.xml => maven pom文件
```
## [java]一些规范说明
1. 写完代码后在保证不影响其他的人的代码情况下尽量统一格式化一下代码
1. 采用 4 个空格缩进,禁止使用 tab 字符
2. 如果使用 tab 缩进,必须设置 1 个 tab 为 4 个空格。IDEA 设置 tab 为 4 个空格时,
请勿勾选 Use tab character而在 eclipse 中,必须勾选 insert spaces for tabs
2. Java 代码需要保证新增方法都有充足、标准的 JavaDoc 注释
3. 在修改 Bug、新增功能尽量保证最小提交的方式提交代码减少多个功能一个 commit
4. 所有接口 url 都需要遵循下划线模式
5. Java 代码、方法需要遵循小驼峰法
6. Java 类名需要遵循大驼峰法
7. 前端项目统一采用 `prettier` 方式来格式化(需要安装插件)
8. 所有 controller 层的接口都需要添加文档注释(至少包含接口的作用说明、参数说明、返回值说明及添加 apiDoc 文档注释)
> 注:由于旧代码存在很多不规范问题,会逐步调整为新规范。在新写的代码都需要需要遵循上面说明
>
>
### 类的文档注释规范Javadoc
```
/**
* xxxxxxxx
* @author xxxx
* @since ${DATE}
*/
```
> 这里采用 `@since` 声明创建日期是因为 `Javadoc` 规范里面并没有 `@date` 标记所以采用 `@since` 代替
### Java 代码规范
> 推荐安装 `Alibaba Java Coding Guidelines``p3c` 插件
## changelog 更新规范
> 在新加功能、修复bug、优化功能在完成时候都需要在 [CHANGELOG.md](./CHANGELOG.md) 记录
1. 如果是使用者反馈的bug在修复后需要备注反馈人的昵称
2. 如果是 issue 需要备注 issue 地址以及平台Gitee、GitHub
3. 如果是 pr 需要备注 pr 地址以及平台Gitee、GitHub
4. 根据变动情况确定影响范围:如果影响 只:`agent``server` 其中一个就使用【agent】、【server】开头如果都影响就不用
5. 可以视情况添加其他说明:如提交记录
6. emoji 表情参考:[https://emojixd.com/](https://emojixd.com/)
## 分支说明
1. 新功能都提交到 dev 分支, 不能提交到 master 分支
2. PR 提交到 dev 分支
3. 一般功能开发可以直接提交到 dev 分支,较大功能开发需要新建分支提交
## 需要的小组
1. 后端小组 (主要任务:根据需求开发对应的接口)
2. 前端小组 (主要任务:优化前端 UI 交互和对接部分接口)
3. 文档小组 (主要任务:完善、补充 mdp 使用文档)
4. 视频小组 (主要任务:录制 mdp 相关的使用视频)
5. 测试小组 (主要任务:参与 mdp 新版内测、日常开发测试相关任务)

32
docs/PLANS.md Normal file
View File

@@ -0,0 +1,32 @@
# 开发计划
## 3.x.x
基于 vue3 + typescript + vite3 + element plus + java + spring boot + mybatis plus + jsqlpaser + spring cloud + spring oauth2 + JWT + flowable 进行重构
1. 后端底座提供el表达式沙箱环境支持前端书写表达式上送后端为0代码ai的发展提供基础能力
2. 后端提供无服务无dao无实体无控制层的四无crud通用接口为实现应用开发部署发布0耗时提供底座能力
3. 提供数据模型子系统为在线浏览数据操作数据实体构建数据集市提供底座基础提供前端sql执行、sql结果动态展示等支持在线修改表结构、在线预览结构信息、在线预览修改表数据等ddl、dml能力
4. 进一步对ai编程提供一些底座能力
5. 提供新版智能表单前后端支持0代码设计、开发、发布一个表单功能(基于formCreate进行魔改)支持0耗时免部署
6. 提供新版工作流编辑器
7. 提供智能大屏,智能图表在线构造发布演示基础框架
8. 提供任意接口任意字段起调aijava计算公式等能力
9. 进一步整合lcode,将基础内容管理、数据模型、工作流、系统管理、应用超市(下单、购买、订单管理全套)整合进lcode
10. 提供docker版本免编译快速部署方便非it人士使用
11. 提供自研单机版内存框架本地跑不需要集成redis等第三方内存框架提供redis的适配包默认打包进bootstrap工程。上线内存管理自动切换到redis
12. 重构mdp-ui、mdp-ui-ext各个组件
13. 前端公共配置项与VITE公共配置项整合
14. 提供内置的图标浏览、选用功能
15. 提供图片库浏览、选择图片、管理图片等功能
16. 提供附件库浏览、选用、管理等功能
17. 提供路由配置导入菜单表功能。(免去手工增删改查菜单的麻烦,升级改造调整菜单不再困难)
18. 每个子系统提供单体版、cloud版、oauth2版版本之间免改代码自由切换。免去选择困难症
19. 字典功能、平台配置功能提供配置表动态配置功能,无须改改动表结构即可任意添加配置项,彻底告别加配置犯难症
20. 字典配置、平台配置支持全面覆盖无论在ui页面、java后端等提供自动加载、自动分布式分发、同步机制彻底告别性能忧虑、前后端编码冲突打架的问题
## 4.x.x
1. 提供接入大模型能力
2. 提供前端任意字段起调ai能力
3. 提供ai编程、ai测试、ai编排任务、ai需求整理能力
4. 提供ai出报告能力
5. 提供ai基于企业私有数字资产自训练能力

183
docs/backend/API.md Normal file
View File

@@ -0,0 +1,183 @@
# mdp-ui 组件库说明
## 目录说明
### 工程命名规范
**前端工程命名规则:业务名-ui-web|-app|-uniapp**
**后端工程命名规则:业务名-backend**
- [-ui]代表前端
- [-web]代表电脑浏览器应用
- [-app]代表手机应用
- [-uniapp]代表小程序+app的综合体或者仅代表小程序
- [-backend]代表后端
- [-cloud]代表适用于微服务、分布式、云环境
- [-bootstrap]代表属于打包类的工程,不能写业务代码
### 前端目录
```
业务-ui-web
├── build => 编译构建相关
├── config => 编译构建配置项
├── dist => 编译后的产物
├── src => 源代码
   ├── api => 与后端交互的api接口列表一个表一个文件公共api放入$fly中
   ├── fly.js => 公共api放入fly中,自动注册成全局函数,页面上可以通过 $fly.xxxxApi()进行调用,无须引入任何文件
   ├── assets => 静态资源
   ├── common => 一些公共js脚本
   ├── components => 组件库
   ├── Mdp => mdp-ui基础组件库
   ├── MdpExt => mdp-ui扩展的组件库一般根据业务需要抽取提炼新的组件放入该目录
   ├── directive => vue指令库
   ├── icons => 图标库
   ├── lang => 语言包
   ├── mock => 接口模拟数据
   ├── router => 路由库
   ├── store => 全局公共数据库
   ├── styles => css样式库
   ├── views => 业务功能的页面代码
   ├── vuex => vuex
   ├── App.vue => 总入口 vue
   ├── main.js => 总入口 js
   ├── permission.js => 路由菜单权限过滤
├── static => 某些静态资源
├── .editorconfig => 全局代码格式配置
├── .gitattributes => 文件编码格式配置
├── CHANGELOG.md => 重大更新日志
├── CONTRIBUTE.md => 贡献说明
├── PLANS.md => 重大开发计划说明
├── README.md => 项目说明
├── LICENSE => 协议
├── favicon.ico => 项目图标
├── package.json => 组件依赖关系
├── index.html => 总入口、首页
```
### 后端目录
**后端工程结构**
- 工程结构总图:
```
业务名-backend
├── 业务名 =>业务工程,主要用来书写业务代码
├── 业务名-cloud-bootstrap =>maven打包工程禁止书写业务代码部署到云环境
├── 业务名-bootstrap =>maven打包工程禁止书写业务代码部署到单体应用环境
├── pom.xml =>maven pom文件
```
- 工程结构明细图:
```
业务名-backend
├── 业务名 => 业务主体工程,主要用来写业务功能代码
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名 => 一级业务、产品、大模块之类的
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── com.企业名.业务名.模块1 => 模块目录,一个模块=一个表
├── com.企业名.业务名.模块1.ctrl => 控制器
├── com.企业名.业务名.模块1.entity => 实体类,保持与数据库表一摸一样,不建议改动,代码生成器随时覆盖
├── com.企业名.业务名.模块1.mapper => mybatis mapper文件,包含 Mapper.java Mapper.xml两个文件
├── com.企业名.业务名.模块1.service => 服务类,所有服务继承 BaseService
├── com.企业名.业务名.模块1.vo => 如果需要对entity进行扩展可在此目录定义继承entity的子类
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-cloud-bootstrap => 打包工程(微服务环境)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-bootstrap => 打包工程(单体应用)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── pom.xml => maven pom文件
```
## [java]一些规范说明
1. 写完代码后在保证不影响其他的人的代码情况下尽量统一格式化一下代码
1. 采用 4 个空格缩进,禁止使用 tab 字符
2. 如果使用 tab 缩进,必须设置 1 个 tab 为 4 个空格。IDEA 设置 tab 为 4 个空格时,
请勿勾选 Use tab character而在 eclipse 中,必须勾选 insert spaces for tabs
2. Java 代码需要保证新增方法都有充足、标准的 JavaDoc 注释
3. 在修改 Bug、新增功能尽量保证最小提交的方式提交代码减少多个功能一个 commit
4. 所有接口 url 都需要遵循下划线模式
5. Java 代码、方法需要遵循小驼峰法
6. Java 类名需要遵循大驼峰法
7. 前端项目统一采用 `prettier` 方式来格式化(需要安装插件)
8. 所有 controller 层的接口都需要添加文档注释(至少包含接口的作用说明、参数说明、返回值说明及添加 apiDoc 文档注释)
> 注:由于旧代码存在很多不规范问题,会逐步调整为新规范。在新写的代码都需要需要遵循上面说明
>
>
### 类的文档注释规范Javadoc
```
/**
* xxxxxxxx
* @author xxxx
* @since ${DATE}
*/
```
> 这里采用 `@since` 声明创建日期是因为 `Javadoc` 规范里面并没有 `@date` 标记所以采用 `@since` 代替
### Java 代码规范
> 推荐安装 `Alibaba Java Coding Guidelines``p3c` 插件
## changelog 更新规范
> 在新加功能、修复bug、优化功能在完成时候都需要在 [CHANGELOG.md](./CHANGELOG.md) 记录
1. 如果是使用者反馈的bug在修复后需要备注反馈人的昵称
2. 如果是 issue 需要备注 issue 地址以及平台Gitee、GitHub
3. 如果是 pr 需要备注 pr 地址以及平台Gitee、GitHub
4. 根据变动情况确定影响范围:如果影响 只:`agent``server` 其中一个就使用【agent】、【server】开头如果都影响就不用
5. 可以视情况添加其他说明:如提交记录
6. emoji 表情参考:[https://emojixd.com/](https://emojixd.com/)
## 分支说明
1. 新功能都提交到 dev 分支, 不能提交到 master 分支
2. PR 提交到 dev 分支
3. 一般功能开发可以直接提交到 dev 分支,较大功能开发需要新建分支提交
## 需要的小组
1. 后端小组 (主要任务:根据需求开发对应的接口)
2. 前端小组 (主要任务:优化前端 UI 交互和对接部分接口)
3. 文档小组 (主要任务:完善、补充 mdp 使用文档)
4. 视频小组 (主要任务:录制 mdp 相关的使用视频)
5. 测试小组 (主要任务:参与 mdp 新版内测、日常开发测试相关任务)

183
docs/front/API.md Normal file
View File

@@ -0,0 +1,183 @@
# mdp-ui 组件库说明
## 目录说明
### 工程命名规范
**前端工程命名规则:业务名-ui-web|-app|-uniapp**
**后端工程命名规则:业务名-backend**
- [-ui]代表前端
- [-web]代表电脑浏览器应用
- [-app]代表手机应用
- [-uniapp]代表小程序+app的综合体或者仅代表小程序
- [-backend]代表后端
- [-cloud]代表适用于微服务、分布式、云环境
- [-bootstrap]代表属于打包类的工程,不能写业务代码
### 前端目录
```
业务-ui-web
├── build => 编译构建相关
├── config => 编译构建配置项
├── dist => 编译后的产物
├── src => 源代码
   ├── api => 与后端交互的api接口列表一个表一个文件公共api放入$fly中
   ├── fly.js => 公共api放入fly中,自动注册成全局函数,页面上可以通过 $fly.xxxxApi()进行调用,无须引入任何文件
   ├── assets => 静态资源
   ├── common => 一些公共js脚本
   ├── components => 组件库
   ├── Mdp => mdp-ui基础组件库
   ├── MdpExt => mdp-ui扩展的组件库一般根据业务需要抽取提炼新的组件放入该目录
   ├── directive => vue指令库
   ├── icons => 图标库
   ├── lang => 语言包
   ├── mock => 接口模拟数据
   ├── router => 路由库
   ├── store => 全局公共数据库
   ├── styles => css样式库
   ├── views => 业务功能的页面代码
   ├── vuex => vuex
   ├── App.vue => 总入口 vue
   ├── main.js => 总入口 js
   ├── permission.js => 路由菜单权限过滤
├── static => 某些静态资源
├── .editorconfig => 全局代码格式配置
├── .gitattributes => 文件编码格式配置
├── CHANGELOG.md => 重大更新日志
├── CONTRIBUTE.md => 贡献说明
├── PLANS.md => 重大开发计划说明
├── README.md => 项目说明
├── LICENSE => 协议
├── favicon.ico => 项目图标
├── package.json => 组件依赖关系
├── index.html => 总入口、首页
```
### 后端目录
**后端工程结构**
- 工程结构总图:
```
业务名-backend
├── 业务名 =>业务工程,主要用来书写业务代码
├── 业务名-cloud-bootstrap =>maven打包工程禁止书写业务代码部署到云环境
├── 业务名-bootstrap =>maven打包工程禁止书写业务代码部署到单体应用环境
├── pom.xml =>maven pom文件
```
- 工程结构明细图:
```
业务名-backend
├── 业务名 => 业务主体工程,主要用来写业务功能代码
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名 => 一级业务、产品、大模块之类的
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── com.企业名.业务名.模块1 => 模块目录,一个模块=一个表
├── com.企业名.业务名.模块1.ctrl => 控制器
├── com.企业名.业务名.模块1.entity => 实体类,保持与数据库表一摸一样,不建议改动,代码生成器随时覆盖
├── com.企业名.业务名.模块1.mapper => mybatis mapper文件,包含 Mapper.java Mapper.xml两个文件
├── com.企业名.业务名.模块1.service => 服务类,所有服务继承 BaseService
├── com.企业名.业务名.模块1.vo => 如果需要对entity进行扩展可在此目录定义继承entity的子类
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-cloud-bootstrap => 打包工程(微服务环境)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-bootstrap => 打包工程(单体应用)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── pom.xml => maven pom文件
```
## [java]一些规范说明
1. 写完代码后在保证不影响其他的人的代码情况下尽量统一格式化一下代码
1. 采用 4 个空格缩进,禁止使用 tab 字符
2. 如果使用 tab 缩进,必须设置 1 个 tab 为 4 个空格。IDEA 设置 tab 为 4 个空格时,
请勿勾选 Use tab character而在 eclipse 中,必须勾选 insert spaces for tabs
2. Java 代码需要保证新增方法都有充足、标准的 JavaDoc 注释
3. 在修改 Bug、新增功能尽量保证最小提交的方式提交代码减少多个功能一个 commit
4. 所有接口 url 都需要遵循下划线模式
5. Java 代码、方法需要遵循小驼峰法
6. Java 类名需要遵循大驼峰法
7. 前端项目统一采用 `prettier` 方式来格式化(需要安装插件)
8. 所有 controller 层的接口都需要添加文档注释(至少包含接口的作用说明、参数说明、返回值说明及添加 apiDoc 文档注释)
> 注:由于旧代码存在很多不规范问题,会逐步调整为新规范。在新写的代码都需要需要遵循上面说明
>
>
### 类的文档注释规范Javadoc
```
/**
* xxxxxxxx
* @author xxxx
* @since ${DATE}
*/
```
> 这里采用 `@since` 声明创建日期是因为 `Javadoc` 规范里面并没有 `@date` 标记所以采用 `@since` 代替
### Java 代码规范
> 推荐安装 `Alibaba Java Coding Guidelines``p3c` 插件
## changelog 更新规范
> 在新加功能、修复bug、优化功能在完成时候都需要在 [CHANGELOG.md](./CHANGELOG.md) 记录
1. 如果是使用者反馈的bug在修复后需要备注反馈人的昵称
2. 如果是 issue 需要备注 issue 地址以及平台Gitee、GitHub
3. 如果是 pr 需要备注 pr 地址以及平台Gitee、GitHub
4. 根据变动情况确定影响范围:如果影响 只:`agent``server` 其中一个就使用【agent】、【server】开头如果都影响就不用
5. 可以视情况添加其他说明:如提交记录
6. emoji 表情参考:[https://emojixd.com/](https://emojixd.com/)
## 分支说明
1. 新功能都提交到 dev 分支, 不能提交到 master 分支
2. PR 提交到 dev 分支
3. 一般功能开发可以直接提交到 dev 分支,较大功能开发需要新建分支提交
## 需要的小组
1. 后端小组 (主要任务:根据需求开发对应的接口)
2. 前端小组 (主要任务:优化前端 UI 交互和对接部分接口)
3. 文档小组 (主要任务:完善、补充 mdp 使用文档)
4. 视频小组 (主要任务:录制 mdp 相关的使用视频)
5. 测试小组 (主要任务:参与 mdp 新版内测、日常开发测试相关任务)

184
docs/front/COMPOENTS.md Normal file
View File

@@ -0,0 +1,184 @@
# mdp-ui 组件库
## 如何开始?
## 目录说明
### 工程命名规范
**前端工程命名规则:业务名-ui-web|-app|-uniapp**
**后端工程命名规则:业务名-backend**
- [-ui]代表前端
- [-web]代表电脑浏览器应用
- [-app]代表手机应用
- [-uniapp]代表小程序+app的综合体或者仅代表小程序
- [-backend]代表后端
- [-cloud]代表适用于微服务、分布式、云环境
- [-bootstrap]代表属于打包类的工程,不能写业务代码
### 前端目录
```
业务-ui-web
├── build => 编译构建相关
├── config => 编译构建配置项
├── dist => 编译后的产物
├── src => 源代码
   ├── api => 与后端交互的api接口列表一个表一个文件公共api放入$fly中
   ├── fly.js => 公共api放入fly中,自动注册成全局函数,页面上可以通过 $fly.xxxxApi()进行调用,无须引入任何文件
   ├── assets => 静态资源
   ├── common => 一些公共js脚本
   ├── components => 组件库
   ├── Mdp => mdp-ui基础组件库
   ├── MdpExt => mdp-ui扩展的组件库一般根据业务需要抽取提炼新的组件放入该目录
   ├── directive => vue指令库
   ├── icons => 图标库
   ├── lang => 语言包
   ├── mock => 接口模拟数据
   ├── router => 路由库
   ├── store => 全局公共数据库
   ├── styles => css样式库
   ├── views => 业务功能的页面代码
   ├── vuex => vuex
   ├── App.vue => 总入口 vue
   ├── main.js => 总入口 js
   ├── permission.js => 路由菜单权限过滤
├── static => 某些静态资源
├── .editorconfig => 全局代码格式配置
├── .gitattributes => 文件编码格式配置
├── CHANGELOG.md => 重大更新日志
├── CONTRIBUTE.md => 贡献说明
├── PLANS.md => 重大开发计划说明
├── README.md => 项目说明
├── LICENSE => 协议
├── favicon.ico => 项目图标
├── package.json => 组件依赖关系
├── index.html => 总入口、首页
```
### 后端目录
**后端工程结构**
- 工程结构总图:
```
业务名-backend
├── 业务名 =>业务工程,主要用来书写业务代码
├── 业务名-cloud-bootstrap =>maven打包工程禁止书写业务代码部署到云环境
├── 业务名-bootstrap =>maven打包工程禁止书写业务代码部署到单体应用环境
├── pom.xml =>maven pom文件
```
- 工程结构明细图:
```
业务名-backend
├── 业务名 => 业务主体工程,主要用来写业务功能代码
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名 => 一级业务、产品、大模块之类的
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── com.企业名.业务名.模块1 => 模块目录,一个模块=一个表
├── com.企业名.业务名.模块1.ctrl => 控制器
├── com.企业名.业务名.模块1.entity => 实体类,保持与数据库表一摸一样,不建议改动,代码生成器随时覆盖
├── com.企业名.业务名.模块1.mapper => mybatis mapper文件,包含 Mapper.java Mapper.xml两个文件
├── com.企业名.业务名.模块1.service => 服务类,所有服务继承 BaseService
├── com.企业名.业务名.模块1.vo => 如果需要对entity进行扩展可在此目录定义继承entity的子类
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-cloud-bootstrap => 打包工程(微服务环境)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── 业务名-bootstrap => 打包工程(单体应用)
├── logs => 工程运行日志输出目录
├── src => src
├── main => 源码包
├── com.企业名.业务名
├── DruidConfig.java => 数据库连接配置
├── SwaggerConfig.java => wagger配置
├── SysApplication.java => 启动类
├── WebSecurityConfig.java => spring security配置
├── resources => 资源文件
├── test => 测试用例
├── pom.xml => maven pom文件
├── pom.xml => maven pom文件
```
## [java]一些规范说明
1. 写完代码后在保证不影响其他的人的代码情况下尽量统一格式化一下代码
1. 采用 4 个空格缩进,禁止使用 tab 字符
2. 如果使用 tab 缩进,必须设置 1 个 tab 为 4 个空格。IDEA 设置 tab 为 4 个空格时,
请勿勾选 Use tab character而在 eclipse 中,必须勾选 insert spaces for tabs
2. Java 代码需要保证新增方法都有充足、标准的 JavaDoc 注释
3. 在修改 Bug、新增功能尽量保证最小提交的方式提交代码减少多个功能一个 commit
4. 所有接口 url 都需要遵循下划线模式
5. Java 代码、方法需要遵循小驼峰法
6. Java 类名需要遵循大驼峰法
7. 前端项目统一采用 `prettier` 方式来格式化(需要安装插件)
8. 所有 controller 层的接口都需要添加文档注释(至少包含接口的作用说明、参数说明、返回值说明及添加 apiDoc 文档注释)
> 注:由于旧代码存在很多不规范问题,会逐步调整为新规范。在新写的代码都需要需要遵循上面说明
>
>
### 类的文档注释规范Javadoc
```
/**
* xxxxxxxx
* @author xxxx
* @since ${DATE}
*/
```
> 这里采用 `@since` 声明创建日期是因为 `Javadoc` 规范里面并没有 `@date` 标记所以采用 `@since` 代替
### Java 代码规范
> 推荐安装 `Alibaba Java Coding Guidelines``p3c` 插件
## changelog 更新规范
> 在新加功能、修复bug、优化功能在完成时候都需要在 [CHANGELOG.md](./CHANGELOG.md) 记录
1. 如果是使用者反馈的bug在修复后需要备注反馈人的昵称
2. 如果是 issue 需要备注 issue 地址以及平台Gitee、GitHub
3. 如果是 pr 需要备注 pr 地址以及平台Gitee、GitHub
4. 根据变动情况确定影响范围:如果影响 只:`agent``server` 其中一个就使用【agent】、【server】开头如果都影响就不用
5. 可以视情况添加其他说明:如提交记录
6. emoji 表情参考:[https://emojixd.com/](https://emojixd.com/)
## 分支说明
1. 新功能都提交到 dev 分支, 不能提交到 master 分支
2. PR 提交到 dev 分支
3. 一般功能开发可以直接提交到 dev 分支,较大功能开发需要新建分支提交
## 需要的小组
1. 后端小组 (主要任务:根据需求开发对应的接口)
2. 前端小组 (主要任务:优化前端 UI 交互和对接部分接口)
3. 文档小组 (主要任务:完善、补充 mdp 使用文档)
4. 视频小组 (主要任务:录制 mdp 相关的使用视频)
5. 测试小组 (主要任务:参与 mdp 新版内测、日常开发测试相关任务)

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

BIN
docs/images/module/role.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

BIN
docs/images/module/user.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

5
postcss.config.js Normal file
View File

@@ -0,0 +1,5 @@
module.exports = {
plugins: {
autoprefixer: {}
}
}

22
prettier.config.js Normal file
View File

@@ -0,0 +1,22 @@
module.exports = {
printWidth: 100, // 每行代码长度默认80
tabWidth: 2, // 每个tab相当于多少个空格默认2ab进行缩进默认false
useTabs: false, // 是否使用tab
semi: false, // 声明结尾使用分号(默认true)
vueIndentScriptAndStyle: false,
singleQuote: true, // 使用单引号默认false
quoteProps: 'as-needed',
bracketSpacing: true, // 对象字面量的大括号间使用空格默认true
trailingComma: 'none', // 多行使用拖尾逗号默认none
jsxSingleQuote: false,
// 箭头函数参数括号 默认avoid 可选 avoid| always
// avoid 能省略括号的时候就省略 例如x => x
// always 总是有括号
arrowParens: 'always',
insertPragma: false,
requirePragma: false,
proseWrap: 'never',
htmlWhitespaceSensitivity: 'strict',
endOfLine: 'auto',
rangeStart: 0
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Some files were not shown because too many files have changed in this diff Show More