ソースを参照

Merge remote-tracking branch 'yudao/dev' into dev-to-dev

puhui999 1 年間 前
コミット
c9ae0fbdbe
100 ファイル変更599 行追加272 行削除
  1. 18 14
      .eslintrc.js
  2. 137 22
      .vscode/settings.json
  3. 6 6
      README.md
  4. 0 2
      build/vite/index.ts
  5. 0 1
      build/vite/optimize.ts
  6. 43 43
      package.json
  7. 5 2
      src/App.vue
  8. 3 1
      src/components/Backtop/src/Backtop.vue
  9. 3 1
      src/components/ConfigGlobal/src/ConfigGlobal.vue
  10. 3 1
      src/components/ContentDetailWrap/src/ContentDetailWrap.vue
  11. 3 1
      src/components/ContentWrap/src/ContentWrap.vue
  12. 3 1
      src/components/CountTo/src/CountTo.vue
  13. 11 9
      src/components/Crontab/src/Crontab.vue
  14. 3 1
      src/components/Cropper/src/CopperModal.vue
  15. 3 1
      src/components/Cropper/src/Cropper.vue
  16. 15 16
      src/components/Cropper/src/CropperAvatar.vue
  17. 3 1
      src/components/Descriptions/src/Descriptions.vue
  18. 4 1
      src/components/Dialog/src/Dialog.vue
  19. 4 2
      src/components/DocAlert/index.vue
  20. 3 1
      src/components/Echart/src/Echart.vue
  21. 3 1
      src/components/Editor/src/Editor.vue
  22. 3 1
      src/components/Error/src/Error.vue
  23. 1 0
      src/components/Form/src/Form.vue
  24. 3 1
      src/components/IFrame/src/IFrame.vue
  25. 3 1
      src/components/Icon/src/Icon.vue
  26. 7 5
      src/components/Icon/src/IconSelect.vue
  27. 3 1
      src/components/ImageViewer/src/ImageViewer.vue
  28. 3 1
      src/components/Infotip/src/Infotip.vue
  29. 4 2
      src/components/InputPassword/src/InputPassword.vue
  30. 3 1
      src/components/Pagination/index.vue
  31. 4 2
      src/components/Qrcode/src/Qrcode.vue
  32. 1 1
      src/components/RouterSearch/index.vue
  33. 3 1
      src/components/Search/src/Search.vue
  34. 3 1
      src/components/Sticky/src/Sticky.vue
  35. 2 0
      src/components/Table/src/Table.vue
  36. 3 1
      src/components/Tooltip/src/Tooltip.vue
  37. 7 1
      src/components/UploadFile/src/UploadFile.vue
  38. 24 4
      src/components/UploadFile/src/UploadImg.vue
  39. 7 5
      src/components/UploadFile/src/UploadImgs.vue
  40. 17 27
      src/components/Verifition/src/Verify.vue
  41. 1 1
      src/components/Verifition/src/Verify/VerifyPoints.vue
  42. 1 1
      src/components/Verifition/src/Verify/VerifySlide.vue
  43. 3 1
      src/components/XButton/src/XButton.vue
  44. 3 1
      src/components/XButton/src/XTextButton.vue
  45. 4 1
      src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue
  46. 27 3
      src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
  47. 6 3
      src/components/bpmnProcessDesigner/package/palette/ProcessPalette.vue
  48. 4 1
      src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue
  49. 5 2
      src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue
  50. 3 1
      src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
  51. 3 1
      src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue
  52. 4 1
      src/components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue
  53. 4 1
      src/components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue
  54. 3 1
      src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue
  55. 2 1
      src/components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue
  56. 7 5
      src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue
  57. 6 4
      src/components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue
  58. 3 1
      src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue
  59. 2 1
      src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue
  60. 2 1
      src/components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue
  61. 2 1
      src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue
  62. 3 1
      src/layout/components/AppView.vue
  63. 3 1
      src/layout/components/Collapse/src/Collapse.vue
  64. 3 1
      src/layout/components/ContextMenu/src/ContextMenu.vue
  65. 4 1
      src/layout/components/Footer/src/Footer.vue
  66. 3 1
      src/layout/components/LocaleDropdown/src/LocaleDropdown.vue
  67. 3 1
      src/layout/components/Logo/src/Logo.vue
  68. 1 0
      src/layout/components/Menu/src/Menu.vue
  69. 3 1
      src/layout/components/Message/src/Message.vue
  70. 3 1
      src/layout/components/Screenfull/src/Screenfull.vue
  71. 3 1
      src/layout/components/Setting/src/Setting.vue
  72. 3 1
      src/layout/components/Setting/src/components/ColorRadioPicker.vue
  73. 3 1
      src/layout/components/Setting/src/components/InterfaceDisplay.vue
  74. 11 9
      src/layout/components/Setting/src/components/LayoutRadioPicker.vue
  75. 3 1
      src/layout/components/SizeDropdown/src/SizeDropdown.vue
  76. 1 1
      src/layout/components/TabMenu/src/TabMenu.vue
  77. 7 5
      src/layout/components/TagsView/src/TagsView.vue
  78. 3 1
      src/layout/components/ThemeSwitch/src/ThemeSwitch.vue
  79. 3 1
      src/layout/components/UserInfo/src/UserInfo.vue
  80. 1 1
      src/utils/auth.ts
  81. 3 1
      src/views/Error/403.vue
  82. 2 1
      src/views/Error/404.vue
  83. 2 1
      src/views/Error/500.vue
  84. 3 1
      src/views/Home/Index.vue
  85. 3 1
      src/views/Home/Index2.vue
  86. 3 1
      src/views/Login/Login.vue
  87. 3 1
      src/views/Login/components/LoginForm.vue
  88. 3 1
      src/views/Login/components/LoginFormTitle.vue
  89. 3 1
      src/views/Login/components/MobileForm.vue
  90. 3 1
      src/views/Login/components/QrCodeForm.vue
  91. 3 1
      src/views/Login/components/RegisterForm.vue
  92. 4 1
      src/views/Login/components/SSOLogin.vue
  93. 5 1
      src/views/Profile/Index.vue
  94. 5 4
      src/views/Profile/components/BasicInfo.vue
  95. 5 3
      src/views/Profile/components/ProfileUser.vue
  96. 3 1
      src/views/Profile/components/ResetPwd.vue
  97. 3 1
      src/views/Profile/components/UserAvatar.vue
  98. 3 1
      src/views/Profile/components/UserSocial.vue
  99. 3 1
      src/views/Redirect/Redirect.vue
  100. 4 1
      src/views/bpm/definition/index.vue

+ 18 - 14
.eslintrc.js

@@ -1,6 +1,4 @@
-// @ts-check
-const { defineConfig } = require('eslint-define-config')
-module.exports = defineConfig({
+module.exports = {
   root: true,
   env: {
     browser: true,
@@ -8,6 +6,7 @@ module.exports = defineConfig({
     es6: true
   },
   parser: 'vue-eslint-parser',
+  plugins: ['vue'],
   parserOptions: {
     parser: '@typescript-eslint/parser',
     ecmaVersion: 2020,
@@ -17,16 +16,9 @@ module.exports = defineConfig({
       jsx: true
     }
   },
-  extends: [
-    'plugin:vue/vue3-recommended',
-    'plugin:@typescript-eslint/recommended',
-    'prettier',
-    'plugin:prettier/recommended',
-    './.eslintrc-auto-import.json'
-  ],
+  extends: ['plugin:vue/vue3-recommended', 'prettier', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
   rules: {
     'vue/script-setup-uses-vars': 'error',
-    'vue/no-reserved-component-names': 'off',
     '@typescript-eslint/ban-ts-ignore': 'off',
     '@typescript-eslint/explicit-function-return-type': 'off',
     '@typescript-eslint/no-explicit-any': 'off',
@@ -39,8 +31,20 @@ module.exports = defineConfig({
     '@typescript-eslint/ban-types': 'off',
     '@typescript-eslint/no-non-null-assertion': 'off',
     '@typescript-eslint/explicit-module-boundary-types': 'off',
-    '@typescript-eslint/no-unused-vars': 'error',
-    'no-unused-vars': 'error',
+    '@typescript-eslint/no-unused-vars': [
+      'error',
+      {
+        argsIgnorePattern: '^_',
+        varsIgnorePattern: '^_'
+      }
+    ],
+    'no-unused-vars': [
+      'error',
+      {
+        argsIgnorePattern: '^_',
+        varsIgnorePattern: '^_'
+      }
+    ],
     'space-before-function-paren': 'off',
 
     'vue/attributes-order': 'off',
@@ -66,4 +70,4 @@ module.exports = defineConfig({
     ],
     'vue/multi-word-component-names': 'off'
   }
-})
+}

+ 137 - 22
.vscode/settings.json

@@ -1,36 +1,98 @@
 {
-  "typescript.tsdk": "node_modules/typescript/lib",
-  "prettier.enable": true,
-  "editor.formatOnType": true,
-  "editor.formatOnSave": true,
-  "editor.formatOnPaste": true,
-  "editor.codeActionsOnSave": {
-    "source.fixAll.eslint": true
+  "typescript.tsdk": "./node_modules/typescript/lib",
+  "volar.tsPlugin": true,
+  "volar.tsPluginStatus": false,
+  "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
   },
-  "[vue]": {
-    "editor.defaultFormatter": "Vue.volar"
+  "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
   },
-  "[javascript]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  "files.watcherExclude": {
+    "**/.git/objects/**": true,
+    "**/.git/subtree-cache/**": true,
+    "**/.vscode/**": true,
+    "**/node_modules/**": true,
+    "**/tmp/**": true,
+    "**/bower_components/**": true,
+    "**/dist/**": true,
+    "**/yarn.lock": true
   },
-  "[typescript]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  "stylelint.enable": true,
+  "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
+  "path-intellisense.mappings": {
+    "@/": "${workspaceRoot}/src"
   },
-  "[json]": {
+  "[javascriptreact]": {
     "editor.defaultFormatter": "esbenp.prettier-vscode"
   },
-  "[jsonc]": {
-    "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": true
+  },
+  "[vue]": {
+    "editor.codeActionsOnSave": {
+      "source.fixAll.eslint": true,
+      "source.fixAll.stylelint": true
+    }
+  },
   "i18n-ally.localesPaths": ["src/locales"],
   "i18n-ally.keystyle": "nested",
   "i18n-ally.sortKeys": true,
@@ -39,16 +101,69 @@
   "i18n-ally.sourceLanguage": "en",
   "i18n-ally.displayLanguage": "zh-CN",
   "i18n-ally.enabledFrameworks": ["vue", "react"],
-  "god.tsconfig": "./tsconfig.json",
-  "vue-i18n.i18nPaths": "src/locales",
+  "cSpell.words": [
+    "vben",
+    "windicss",
+    "tailwind",
+    "browserslist",
+    "tailwindcss",
+    "esnext",
+    "antv",
+    "tinymce",
+    "qrcode",
+    "sider",
+    "pinia",
+    "sider",
+    "nprogress",
+    "INTLIFY",
+    "stylelint",
+    "esno",
+    "vitejs",
+    "sortablejs",
+    "codemirror",
+    "iconify",
+    "commitlint",
+    "vditor",
+    "echarts",
+    "cropperjs",
+    "logicflow",
+    "vueuse",
+    "zxcvbn",
+    "lintstagedrc",
+    "brotli",
+    "sider",
+    "pnpm",
+    "antd"
+  ],
+  "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.expand": false,
   "explorer.fileNesting.patterns": {
     "*.ts": "$(capture).test.ts, $(capture).test.tsx",
     "*.tsx": "$(capture).test.ts, $(capture).test.tsx",
     "*.env": "$(capture).env.*",
-    "CHANGELOG.md": "CHANGELOG*",
-    "package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,.gitattributes,.gitignore,.gitpod.yml,CNAME,README*,.npmrc,.browserslistrc,vite.config.*,windi.*,tailwind.*,tsconfig.*,postcss*",
-    ".eslintrc.js": ".eslintignore,.eslintrc-*,.prettierignore,.stylelintignore,.commitlintrc.js,.prettierrc.js,.stylelint*,stylelint*,prettier.*,.editorconfig"
-  }
+    "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"
+  },
+  "terminal.integrated.scrollback": 10000
 }

+ 6 - 6
README.md

@@ -9,7 +9,7 @@
 
 ## 🐶 新手必读
 
-* nodejs > 16.0.0 && pnpm > 7.30.0
+* nodejs > 16.0.0 && pnpm > 8.6.0 (强制使用pnpm)
 * 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
 * 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
 * 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
@@ -39,11 +39,11 @@
 | 框架                                                                   | 说明               | 版本     |
 |----------------------------------------------------------------------|------------------|--------|
 | [Vue](https://staging-cn.vuejs.org/)                                 | Vue 框架           | 3.3.4 |
-| [Vite](https://cn.vitejs.dev//)                                      | 开发与构建工具          | 4.3.8  |
-| [Element Plus](https://element-plus.org/zh-CN/)                      | Element Plus     | 2.3.4 |
+| [Vite](https://cn.vitejs.dev//)                                      | 开发与构建工具          | 4.3.9  |
+| [Element Plus](https://element-plus.org/zh-CN/)                      | Element Plus     | 2.3.7 |
 | [TypeScript](https://www.typescriptlang.org/docs/)                   | JavaScript 的超集   | 5.0.4  |
-| [pinia](https://pinia.vuejs.org/)                                    | Vue 存储库 替代 vuex5 | 2.1.3 |
-| [vueuse](https://vueuse.org/)                                        | 常用工具集            | 10.1.2 |
+| [pinia](https://pinia.vuejs.org/)                                    | Vue 存储库 替代 vuex5 | 2.1.4 |
+| [vueuse](https://vueuse.org/)                                        | 常用工具集            | 10.2.0 |
 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化              | 9.2.2  |
 | [vue-router](https://router.vuejs.org/)                              | Vue 路由           | 4.2.1  |
 | [windicss](https://cn.windicss.org/)                                 | 下一代工具优先的 CSS 框架  | 3.5.6  |
@@ -136,7 +136,7 @@ ps:核心功能已经实现,正在对接微信小程序中...
 |     | 表单构建     | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件         |
 | 🚀  | 配置管理     | 对系统动态配置常用参数,支持 SpringBoot 加载                 |
 | ⭐️  | 定时任务     | 在线(添加、修改、删除)任务调度包含执行结果日志                     |
-| 🚀  | 文件服务     | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等   | 
+| 🚀  | 文件服务     | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等   |
 | 🚀  | API 日志   | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题   |
 |     | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈              |
 |     | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理           |

+ 0 - 2
build/vite/index.ts

@@ -13,7 +13,6 @@ 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 vueSetupExtend from 'vite-plugin-vue-setup-extend-plus'
 import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
 import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
 
@@ -31,7 +30,6 @@ export function createVitePlugins() {
     WindiCSS(),
     progress(),
     PurgeIcons(),
-    vueSetupExtend(),
     ElementPlus({}),
     AutoImport({
       include: [

+ 0 - 1
build/vite/optimize.ts

@@ -12,7 +12,6 @@ const include = [
   'vue-router',
   'vue-types',
   'vue-i18n',
-  'xe-utils',
   'crypto-js',
   'cropperjs',
   'lodash-es',

+ 43 - 43
package.json

@@ -9,12 +9,12 @@
     "dev": "vite --mode base",
     "front": "vite --mode front",
     "ts:check": "vue-tsc --noEmit",
-    "build:pro": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode pro",
-    "build:dev": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode dev",
-    "build:stage": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode stage",
-    "build:test": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode test",
-    "build:static": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode static",
-    "build:front": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode front",
+    "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: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:front": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode front",
     "serve:pro": "vite preview --mode pro",
     "serve:dev": "vite preview --mode dev",
     "serve:test": "vite preview --mode test",
@@ -34,10 +34,10 @@
     "@form-create/element-ui": "^3.1.17",
     "@iconify/iconify": "^3.1.0",
     "@videojs-player/vue": "^1.0.0",
-    "@vueuse/core": "^10.1.2",
+    "@vueuse/core": "^10.2.0",
     "@wangeditor/editor": "^5.1.23",
     "@wangeditor/editor-for-vue": "^5.1.10",
-    "@zxcvbn-ts/core": "^3.0.1",
+    "@zxcvbn-ts/core": "^3.0.2",
     "animate.css": "^4.1.1",
     "axios": "^1.4.0",
     "benz-amr-recorder": "^1.1.5",
@@ -45,12 +45,12 @@
     "camunda-bpmn-moddle": "^7.0.1",
     "cropperjs": "^1.5.13",
     "crypto-js": "^4.1.1",
-    "dayjs": "^1.11.7",
+    "dayjs": "^1.11.8",
     "diagram-js": "^11.6.0",
     "echarts": "^5.4.2",
     "echarts-wordcloud": "^2.1.0",
-    "element-plus": "2.3.4",
-    "fast-xml-parser": "^4.2.2",
+    "element-plus": "2.3.7",
+    "fast-xml-parser": "^4.2.4",
     "highlight.js": "^11.8.0",
     "intro.js": "^7.0.1",
     "jsencrypt": "^3.3.2",
@@ -58,82 +58,77 @@
     "min-dash": "^4.1.1",
     "mitt": "^3.0.0",
     "nprogress": "^0.2.0",
-    "pinia": "^2.1.3",
+    "pinia": "^2.1.4",
     "qrcode": "^1.5.3",
     "qs": "^6.11.2",
     "steady-xml": "^0.1.0",
-    "url": "^0.11.0",
+    "url": "^0.11.1",
     "video.js": "^8.3.0",
     "vue": "3.3.4",
     "vue-dompurify-html": "^4.1.4",
     "vue-i18n": "9.2.2",
-    "vue-router": "^4.2.1",
-    "vue-types": "^5.0.3",
+    "vue-router": "^4.2.2",
+    "vue-types": "^5.0.4",
     "vuedraggable": "^4.1.0",
     "web-storage-cache": "^1.1.1",
-    "xe-utils": "^3.5.7",
     "xml-js": "^1.6.11"
   },
   "devDependencies": {
-    "@commitlint/cli": "^17.6.3",
-    "@commitlint/config-conventional": "^17.6.3",
-    "@iconify/json": "^2.2.67",
-    "@intlify/unplugin-vue-i18n": "^0.10.0",
+    "@commitlint/cli": "^17.6.5",
+    "@commitlint/config-conventional": "^17.6.5",
+    "@iconify/json": "^2.2.80",
+    "@intlify/unplugin-vue-i18n": "^0.11.0",
     "@purge-icons/generated": "^0.9.0",
     "@types/intro.js": "^5.1.1",
     "@types/lodash-es": "^4.17.7",
-    "@types/node": "^18.16.0",
+    "@types/node": "^20.3.1",
     "@types/nprogress": "^0.2.0",
     "@types/qrcode": "^1.5.0",
     "@types/qs": "^6.9.7",
-    "@typescript-eslint/eslint-plugin": "^5.59.6",
-    "@typescript-eslint/parser": "^5.59.6",
-    "@vitejs/plugin-legacy": "^4.0.3",
+    "@typescript-eslint/eslint-plugin": "^5.59.11",
+    "@typescript-eslint/parser": "^5.59.11",
+    "@vitejs/plugin-legacy": "^4.0.4",
     "@vitejs/plugin-vue": "^4.2.3",
     "@vitejs/plugin-vue-jsx": "^3.0.1",
     "autoprefixer": "^10.4.14",
     "bpmn-js": "^8.9.0",
     "bpmn-js-properties-panel": "^0.46.0",
     "consola": "^3.1.0",
-    "eslint": "^8.40.0",
+    "eslint": "^8.43.0",
     "eslint-config-prettier": "^8.8.0",
-    "eslint-define-config": "^1.20.0",
+    "eslint-define-config": "^1.21.0",
     "eslint-plugin-prettier": "^4.2.1",
-    "eslint-plugin-vue": "^9.13.0",
+    "eslint-plugin-vue": "^9.15.0",
     "lint-staged": "^13.2.2",
-    "postcss": "^8.4.23",
+    "postcss": "^8.4.24",
     "postcss-html": "^1.5.0",
     "postcss-scss": "^4.0.6",
     "prettier": "^2.8.8",
     "rimraf": "^5.0.1",
-    "rollup": "^3.22.0",
-    "sass": "^1.62.1",
-    "stylelint": "^15.6.2",
-    "stylelint-config-html": "^1.1.0",
+    "rollup": "^3.25.1",
+    "sass": "^1.63.5",
+    "stylelint": "^15.8.0",
     "stylelint-config-recommended": "^12.0.0",
+    "stylelint-config-recommended-vue": "^1.4.0",
     "stylelint-config-standard": "^33.0.0",
     "stylelint-order": "^6.0.3",
-    "terser": "^5.17.4",
+    "terser": "^5.18.1",
     "typescript": "5.0.4",
-    "unplugin-auto-import": "^0.16.0",
+    "unplugin-auto-import": "^0.16.4",
     "unplugin-element-plus": "^0.7.1",
-    "unplugin-vue-components": "^0.24.1",
-    "vite": "4.3.8",
+    "unplugin-vue-components": "^0.25.1",
+    "vite": "4.3.9",
     "vite-plugin-compression": "^0.5.1",
     "vite-plugin-ejs": "^1.6.4",
     "vite-plugin-eslint": "^1.8.1",
     "vite-plugin-progress": "^0.0.7",
     "vite-plugin-purge-icons": "^0.9.2",
     "vite-plugin-svg-icons": "^2.0.1",
-    "vite-plugin-top-level-await": "^1.3.0",
-    "vite-plugin-vue-setup-extend-plus": "^0.1.0",
+    "vite-plugin-top-level-await": "^1.3.1",
     "vite-plugin-windicss": "^1.9.0",
-    "vue-tsc": "^1.6.5",
+    "vue-tsc": "^1.8.1",
     "windicss": "^3.5.6"
   },
-  "engines": {
-    "node": ">=16.0.0"
-  },
   "license": "MIT",
   "repository": {
     "type": "git",
@@ -142,5 +137,10 @@
   "bugs": {
     "url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues"
   },
-  "homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3"
+  "homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3",
+  "packageManager": "pnpm@8.6.0",
+  "engines": {
+    "node": ">= 16.0.0",
+    "pnpm": ">=8.6.0"
+  }
 }

+ 5 - 2
src/App.vue

@@ -1,10 +1,12 @@
-<script lang="ts" name="APP" setup>
+<script lang="ts" setup>
 import { isDark } from '@/utils/is'
 import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
 import routerSearch from '@/components/RouterSearch/index.vue'
 
+defineOptions({ name: 'APP' })
+
 const { getPrefixCls } = useDesign()
 const prefixCls = getPrefixCls('app')
 const appStore = useAppStore()
@@ -38,10 +40,11 @@ $prefix-cls: #{$namespace}-app;
 
 html,
 body {
+  @extend .size;
+
   padding: 0 !important;
   margin: 0;
   overflow: hidden;
-  @extend .size;
 
   #app {
     @extend .size;

+ 3 - 1
src/components/Backtop/src/Backtop.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="BackTop" setup>
+<script lang="ts" setup>
 import { ElBacktop } from 'element-plus'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'BackTop' })
+
 const { getPrefixCls, variables } = useDesign()
 
 const prefixCls = getPrefixCls('backtop')

+ 3 - 1
src/components/ConfigGlobal/src/ConfigGlobal.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="ConfigGlobal" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { useLocaleStore } from '@/store/modules/locale'
 import { useAppStore } from '@/store/modules/app'
@@ -7,6 +7,8 @@ import { useDesign } from '@/hooks/web/useDesign'
 import { ElementPlusSize } from '@/types/elementPlus'
 import { useWindowSize } from '@vueuse/core'
 
+defineOptions({ name: 'ConfigGlobal' })
+
 const { variables } = useDesign()
 
 const appStore = useAppStore()

+ 3 - 1
src/components/ContentDetailWrap/src/ContentDetailWrap.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="ContentDetailWrap" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'ContentDetailWrap' })
+
 const { t } = useI18n()
 
 const { getPrefixCls } = useDesign()

+ 3 - 1
src/components/ContentWrap/src/ContentWrap.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="ContentWrap" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'ContentWrap' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('content-wrap')

+ 3 - 1
src/components/CountTo/src/CountTo.vue

@@ -1,9 +1,11 @@
-<script lang="ts" name="CountTo" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import { isNumber } from '@/utils/is'
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'CountTo' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('count-to')

+ 11 - 9
src/components/Crontab/src/Crontab.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="Crontab" setup>
+<script lang="ts" setup>
 import { ElMessage } from 'element-plus'
 import { PropType } from 'vue'
 
+defineOptions({ name: 'Crontab' })
+
 interface shortcutsType {
   text: string
   value: string
@@ -966,37 +968,37 @@ const submit = () => {
 <style scoped>
 .sc-cron:deep(.el-tabs__item) {
   height: auto;
-  line-height: 1;
   padding: 0 7px;
+  line-height: 1;
   vertical-align: bottom;
 }
 
 .sc-cron-num {
-  text-align: center;
-  margin-bottom: 15px;
   width: 100%;
+  margin-bottom: 15px;
+  text-align: center;
 }
 
 .sc-cron-num h2 {
-  font-size: 12px;
   margin-bottom: 15px;
+  font-size: 12px;
   font-weight: normal;
 }
 
 .sc-cron-num h4 {
   display: block;
-  height: 32px;
-  line-height: 30px;
   width: 100%;
-  font-size: 12px;
+  height: 32px;
   padding: 0 15px;
+  font-size: 12px;
+  line-height: 30px;
   background: var(--el-color-primary-light-9);
   border-radius: 4px;
 }
 
 .sc-cron:deep(.el-tabs__item.is-active) .sc-cron-num h4 {
-  background: var(--el-color-primary);
   color: #fff;
+  background: var(--el-color-primary);
 }
 
 [data-theme='dark'] .sc-cron-num h4 {

+ 3 - 1
src/components/Cropper/src/CopperModal.vue

@@ -113,7 +113,7 @@
     </Dialog>
   </div>
 </template>
-<script lang="ts" name="CopperModal" setup>
+<script lang="ts" setup>
 import { useDesign } from '@/hooks/web/useDesign'
 import { dataURLtoBlob } from '@/utils/filt'
 import { useI18n } from 'vue-i18n'
@@ -121,6 +121,8 @@ import type { CropendResult, Cropper } from './types'
 import { propTypes } from '@/utils/propTypes'
 import { CropperImage } from '@/components/Cropper'
 
+defineOptions({ name: 'CopperModal' })
+
 const props = defineProps({
   srcValue: propTypes.string.def(''),
   circled: propTypes.bool.def(true)

+ 3 - 1
src/components/Cropper/src/Cropper.vue

@@ -10,7 +10,7 @@
     />
   </div>
 </template>
-<script lang="ts" name="Cropper" setup>
+<script lang="ts" setup>
 import { CSSProperties, PropType } from 'vue'
 import Cropper from 'cropperjs'
 import 'cropperjs/dist/cropper.css'
@@ -18,6 +18,8 @@ import { useDesign } from '@/hooks/web/useDesign'
 import { propTypes } from '@/utils/propTypes'
 import { useDebounceFn } from '@vueuse/core'
 
+defineOptions({ name: 'Cropper' })
+
 type Options = Cropper.Options
 
 const defaultOptions: Options = {

+ 15 - 16
src/components/Cropper/src/CropperAvatar.vue

@@ -11,13 +11,15 @@
     />
   </div>
 </template>
-<script lang="ts" name="CropperAvatar" setup>
+<script lang="ts" setup>
 import { useDesign } from '@/hooks/web/useDesign'
 
 import { propTypes } from '@/utils/propTypes'
 import { useI18n } from 'vue-i18n'
 import CopperModal from './CopperModal.vue'
 
+defineOptions({ name: 'CropperAvatar' })
+
 const props = defineProps({
   width: propTypes.string.def('200px'),
   value: propTypes.string.def(''),
@@ -83,14 +85,14 @@ $prefix-cls: #{$namespace}--cropper-avatar;
   }
 
   &-image-mask {
-    opacity: 0%;
     position: absolute;
     width: inherit;
     height: inherit;
-    border-radius: inherit;
-    border: inherit;
-    background: rgb(0 0 0 / 40%);
     cursor: pointer;
+    background: rgb(0 0 0 / 40%);
+    border: inherit;
+    border-radius: inherit;
+    opacity: 0;
     transition: opacity 0.4s;
 
     ::v-deep(svg) {
@@ -99,7 +101,7 @@ $prefix-cls: #{$namespace}--cropper-avatar;
   }
 
   &-image-mask:hover {
-    opacity: 4000%;
+    opacity: 40;
   }
 
   &-upload-btn {
@@ -121,21 +123,18 @@ $prefix-cls: #{$namespace}--cropper-avatar;
   height: 120px;
 }
 
-.user-info-head:hover:after {
-  content: '+';
+.user-info-head:hover::after {
   position: absolute;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-  color: #eee;
-  background: rgba(0, 0, 0, 0.5);
+  inset: 0;
   font-size: 24px;
-  font-style: normal;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
-  cursor: pointer;
+  font-style: normal;
   line-height: 110px;
+  color: #eee;
+  cursor: pointer;
+  background: rgb(0 0 0 / 50%);
   border-radius: 50%;
+  content: '+';
 }
 </style>

+ 3 - 1
src/components/Descriptions/src/Descriptions.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="Descriptions" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import dayjs from 'dayjs'
 import { useDesign } from '@/hooks/web/useDesign'
@@ -6,6 +6,8 @@ import { propTypes } from '@/utils/propTypes'
 import { useAppStore } from '@/store/modules/app'
 import { DescriptionsSchema } from '@/types/descriptions'
 
+defineOptions({ name: 'Descriptions' })
+
 const appStore = useAppStore()
 
 const mobile = computed(() => appStore.getMobile)

+ 4 - 1
src/components/Dialog/src/Dialog.vue

@@ -1,7 +1,10 @@
-<script lang="ts" name="Dialog" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { isNumber } from '@/utils/is'
 
+// eslint-disable-next-line vue/no-reserved-component-names
+defineOptions({ name: 'Dialog' })
+
 const slots = useSlots()
 
 const props = defineProps({

+ 4 - 2
src/components/DocAlert/index.vue

@@ -5,9 +5,11 @@
     </template>
   </el-alert>
 </template>
-<script setup lang="tsx" name="DocAlert">
+<script setup lang="tsx">
 import { propTypes } from '@/utils/propTypes'
 
+defineOptions({ name: 'DocAlert' })
+
 const props = defineProps({
   title: propTypes.string,
   url: propTypes.string
@@ -25,8 +27,8 @@ const getEnable = () => {
 </script>
 <style scoped>
 .el-alert--success.is-light {
-  border: 1px solid green;
   margin-bottom: 10px;
   cursor: pointer;
+  border: 1px solid green;
 }
 </style>

+ 3 - 1
src/components/Echart/src/Echart.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="EChart" setup>
+<script lang="ts" setup>
 import type { EChartsOption } from 'echarts'
 import echarts from '@/plugins/echarts'
 import { debounce } from 'lodash-es'
@@ -9,6 +9,8 @@ import { useAppStore } from '@/store/modules/app'
 import { isString } from '@/utils/is'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'EChart' })
+
 const { getPrefixCls, variables } = useDesign()
 
 const prefixCls = getPrefixCls('echart')

+ 3 - 1
src/components/Editor/src/Editor.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="Editor" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
 import { i18nChangeLanguage, IDomEditor, IEditorConfig } from '@wangeditor/editor'
@@ -8,6 +8,8 @@ import { ElMessage } from 'element-plus'
 import { useLocaleStore } from '@/store/modules/locale'
 import { getAccessToken, getTenantId } from '@/utils/auth'
 
+defineOptions({ name: 'Editor' })
+
 type InsertFnType = (url: string, alt: string, href: string) => void
 
 const localeStore = useLocaleStore()

+ 3 - 1
src/components/Error/src/Error.vue

@@ -1,9 +1,11 @@
-<script lang="ts" name="Error" setup>
+<script lang="ts" setup>
 import pageError from '@/assets/svgs/404.svg'
 import networkError from '@/assets/svgs/500.svg'
 import noPermission from '@/assets/svgs/403.svg'
 import { propTypes } from '@/utils/propTypes'
 
+defineOptions({ name: 'Error' })
+
 interface ErrorMap {
   url: string
   message: string

+ 1 - 0
src/components/Form/src/Form.vue

@@ -27,6 +27,7 @@ const { getPrefixCls } = useDesign()
 const prefixCls = getPrefixCls('form')
 
 export default defineComponent({
+  // eslint-disable-next-line vue/no-reserved-component-names
   name: 'Form',
   props: {
     // 生成Form的布局结构数组

+ 3 - 1
src/components/IFrame/src/IFrame.vue

@@ -1,6 +1,8 @@
-<script lang="ts" name="IFrame" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 
+defineOptions({ name: 'IFrame' })
+
 const props = defineProps({
   src: propTypes.string.def('')
 })

+ 3 - 1
src/components/Icon/src/Icon.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="Icon" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import Iconify from '@purge-icons/generated'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'Icon' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('icon')

+ 7 - 5
src/components/Icon/src/IconSelect.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="IconSelect" setup>
+<script lang="ts" setup>
 import { CSSProperties } from 'vue'
 import { cloneDeep } from 'lodash-es'
 import { IconJson } from '@/components/Icon/src/data'
 
+defineOptions({ name: 'IconSelect' })
+
 type ParameterCSSProperties = (item?: string) => CSSProperties | undefined
 
 const props = defineProps({
@@ -189,10 +191,10 @@ watch(
 
 .icon-item {
   &:hover {
-    border-color: var(--el-color-primary);
     color: var(--el-color-primary);
-    transition: all 0.4s;
+    border-color: var(--el-color-primary);
     transform: scaleX(1.05);
+    transition: all 0.4s;
   }
 }
 
@@ -213,15 +215,15 @@ watch(
 }
 
 :deep(.el-tabs__item) {
+  height: 30px;
   font-size: 12px;
   font-weight: normal;
-  height: 30px;
   line-height: 30px;
 }
 
 :deep(.el-tabs__header),
 :deep(.el-tabs__nav-wrap) {
-  margin: 0;
   position: static;
+  margin: 0;
 }
 </style>

+ 3 - 1
src/components/ImageViewer/src/ImageViewer.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="ImageViewer" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import { propTypes } from '@/utils/propTypes'
 
+defineOptions({ name: 'ImageViewer' })
+
 const props = defineProps({
   urlList: {
     type: Array as PropType<string[]>,

+ 3 - 1
src/components/Infotip/src/Infotip.vue

@@ -1,9 +1,11 @@
-<script lang="ts" name="InfoTip" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import { useDesign } from '@/hooks/web/useDesign'
 import { propTypes } from '@/utils/propTypes'
 import { TipSchema } from '@/types/infoTip'
 
+defineOptions({ name: 'InfoTip' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('infotip')

+ 4 - 2
src/components/InputPassword/src/InputPassword.vue

@@ -1,10 +1,12 @@
-<script lang="ts" name="InputPassword" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { useConfigGlobal } from '@/hooks/web/useConfigGlobal'
 import type { ZxcvbnResult } from '@zxcvbn-ts/core'
 import { zxcvbn } from '@zxcvbn-ts/core'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'InputPassword' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('input-password')
@@ -94,7 +96,7 @@ $prefix-cls: #{$namespace}-input-password;
       background-color: transparent;
       border-color: var(--el-color-white);
       border-style: solid;
-      border-width: 0 5px 0 5px;
+      border-width: 0 5px;
       content: '';
     }
 

+ 3 - 1
src/components/Pagination/index.vue

@@ -14,9 +14,11 @@
     @current-change="handleCurrentChange"
   />
 </template>
-<script name="Pagination" setup>
+<script lang="ts" setup>
 import { computed } from 'vue'
 
+defineOptions({ name: 'Pagination' })
+
 const props = defineProps({
   // 总条目数
   total: {

+ 4 - 2
src/components/Qrcode/src/Qrcode.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="Qrcode" setup>
+<script lang="ts" setup>
 import { computed, nextTick, PropType, ref, unref, watch } from 'vue'
 import QRCode, { QRCodeRenderersOptions } from 'qrcode'
 import { cloneDeep } from 'lodash-es'
@@ -7,6 +7,8 @@ import { useDesign } from '@/hooks/web/useDesign'
 import { isString } from '@/utils/is'
 import { QrcodeLogo } from '@/types/qrcode'
 
+defineOptions({ name: 'Qrcode' })
+
 const props = defineProps({
   // img 或者 canvas,img不支持logo嵌套
   tag: propTypes.string.validate((v: string) => ['canvas', 'img'].includes(v)).def('canvas'),
@@ -241,7 +243,7 @@ $prefix-cls: #{$namespace}-qrcode;
 
 .#{$prefix-cls} {
   &--disabled {
-    background: rgba(255, 255, 255, 0.95);
+    background: rgb(255 255 255 / 95%);
 
     & > div {
       transform: translate(-50%, -50%);

+ 1 - 1
src/components/RouterSearch/index.vue

@@ -19,7 +19,7 @@
   </ElDialog>
 </template>
 
-<script setup lang="ts">
+<script lang="ts" setup>
 const router = useRouter() // 路由对象
 const showSearch = ref(false) // 是否显示弹框
 const value: Ref = ref('') // 用户输入的值

+ 3 - 1
src/components/Search/src/Search.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="Search" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import { propTypes } from '@/utils/propTypes'
 
@@ -7,6 +7,8 @@ import { findIndex } from '@/utils'
 import { cloneDeep } from 'lodash-es'
 import { FormSchema } from '@/types/form'
 
+defineOptions({ name: 'Search' })
+
 const { t } = useI18n()
 
 const props = defineProps({

+ 3 - 1
src/components/Sticky/src/Sticky.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="Sticky" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { isClient, useEventListener, useWindowSize } from '@vueuse/core'
 import type { CSSProperties } from 'vue'
 
+defineOptions({ name: 'Sticky' })
+
 const props = defineProps({
   // 距离顶部或者底部的距离(单位px)
   offset: propTypes.number.def(0),

+ 2 - 0
src/components/Table/src/Table.vue

@@ -9,6 +9,7 @@ import { set } from 'lodash-es'
 import { Pagination, TableColumn, TableSetPropsType, TableSlotDefault } from '@/types/table'
 
 export default defineComponent({
+  // eslint-disable-next-line vue/no-reserved-component-names
   name: 'Table',
   props: {
     pageSize: propTypes.number.def(10),
@@ -302,6 +303,7 @@ export default defineComponent({
   margin-left: 0;
   padding: 8px 4px;
 }
+
 :deep(.el-button.is-link) {
   margin-left: 0;
   padding: 8px 4px;

+ 3 - 1
src/components/Tooltip/src/Tooltip.vue

@@ -1,6 +1,8 @@
-<script lang="ts" name="Tooltip" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 
+defineOptions({ name: 'Tooltip' })
+
 defineProps({
   titel: propTypes.string.def(''),
   message: propTypes.string.def(''),

+ 7 - 1
src/components/UploadFile/src/UploadFile.vue

@@ -32,13 +32,15 @@
     </el-upload>
   </div>
 </template>
-<script setup lang="ts" name="UploadFile">
+<script lang="ts" setup>
 import { PropType } from 'vue'
 
 import { propTypes } from '@/utils/propTypes'
 import { getAccessToken, getTenantId } from '@/utils/auth'
 import type { UploadInstance, UploadUserFile, UploadProps, UploadRawFile } from 'element-plus'
 
+defineOptions({ name: 'UploadFile' })
+
 const message = useMessage() // 消息弹窗
 const emit = defineEmits(['update:modelValue'])
 
@@ -143,21 +145,25 @@ const listToString = (list: UploadUserFile[], separator?: string) => {
 .upload-file-uploader {
   margin-bottom: 5px;
 }
+
 :deep(.upload-file-list .el-upload-list__item) {
   border: 1px solid #e4e7ed;
   line-height: 2;
   margin-bottom: 10px;
   position: relative;
 }
+
 :deep(.el-upload-list__item-file-name) {
   max-width: 250px;
 }
+
 :deep(.upload-file-list .ele-upload-list__item-content) {
   display: flex;
   justify-content: space-between;
   align-items: center;
   color: inherit;
 }
+
 :deep(.ele-upload-list__item-content-action .el-link) {
   margin-right: 10px;
 }

+ 24 - 4
src/components/UploadFile/src/UploadImg.vue

@@ -50,13 +50,15 @@
   </div>
 </template>
 
-<script setup lang="ts" name="UploadImg">
+<script lang="ts" setup>
 import type { UploadProps } from 'element-plus'
 
 import { generateUUID } from '@/utils'
 import { propTypes } from '@/utils/propTypes'
 import { getAccessToken, getTenantId } from '@/utils/auth'
 
+defineOptions({ name: 'UploadImg' })
+
 type FileTypes =
   | 'image/apng'
   | 'image/bmp'
@@ -79,7 +81,7 @@ const props = defineProps({
   fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
   height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
   width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
-  borderRadius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
+  borderradius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
 })
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
@@ -130,29 +132,34 @@ const uploadError = () => {
     :deep(.el-upload),
     :deep(.el-upload-dragger) {
       border: 1px dashed var(--el-color-danger) !important;
+
       &:hover {
         border-color: var(--el-color-primary) !important;
       }
     }
   }
 }
+
 :deep(.disabled) {
   .el-upload,
   .el-upload-dragger {
     cursor: not-allowed !important;
     background: var(--el-disabled-bg-color);
     border: 1px dashed var(--el-border-color-darker) !important;
+
     &:hover {
       border: 1px dashed var(--el-border-color-darker) !important;
     }
   }
 }
+
 .upload-box {
   .no-border {
     :deep(.el-upload) {
       border: none !important;
     }
   }
+
   :deep(.upload) {
     .el-upload {
       position: relative;
@@ -163,14 +170,17 @@ const uploadError = () => {
       height: v-bind(height);
       overflow: hidden;
       border: 1px dashed var(--el-border-color-darker);
-      border-radius: v-bind(borderRadius);
+      border-radius: v-bind(borderradius);
       transition: var(--el-transition-duration-fast);
+
       &:hover {
         border-color: var(--el-color-primary);
+
         .upload-handle {
           opacity: 1;
         }
       }
+
       .el-upload-dragger {
         display: flex;
         align-items: center;
@@ -181,20 +191,24 @@ const uploadError = () => {
         overflow: hidden;
         background-color: transparent;
         border: 1px dashed var(--el-border-color-darker);
-        border-radius: v-bind(borderRadius);
+        border-radius: v-bind(borderradius);
+
         &:hover {
           border: 1px dashed var(--el-color-primary);
         }
       }
+
       .el-upload-dragger.is-dragover {
         background-color: var(--el-color-primary-light-9);
         border: 2px dashed var(--el-color-primary) !important;
       }
+
       .upload-image {
         width: 100%;
         height: 100%;
         object-fit: contain;
       }
+
       .upload-empty {
         position: relative;
         display: flex;
@@ -204,11 +218,13 @@ const uploadError = () => {
         font-size: 12px;
         line-height: 30px;
         color: var(--el-color-info);
+
         .el-icon {
           font-size: 28px;
           color: var(--el-text-color-secondary);
         }
       }
+
       .upload-handle {
         position: absolute;
         top: 0;
@@ -223,6 +239,7 @@ const uploadError = () => {
         background: rgb(0 0 0 / 60%);
         opacity: 0;
         transition: var(--el-transition-duration-fast);
+
         .handle-icon {
           display: flex;
           flex-direction: column;
@@ -230,11 +247,13 @@ const uploadError = () => {
           justify-content: center;
           padding: 0 6%;
           color: aliceblue;
+
           .el-icon {
             margin-bottom: 40%;
             font-size: 130%;
             line-height: 130%;
           }
+
           span {
             font-size: 85%;
             line-height: 85%;
@@ -243,6 +262,7 @@ const uploadError = () => {
       }
     }
   }
+
   .el-upload__tip {
     line-height: 18px;
     text-align: center;

+ 7 - 5
src/components/UploadFile/src/UploadImgs.vue

@@ -45,7 +45,7 @@
     />
   </div>
 </template>
-<script lang="ts" name="UploadImgs" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import type { UploadFile, UploadProps, UploadUserFile } from 'element-plus'
 import { ElNotification } from 'element-plus'
@@ -53,6 +53,8 @@ import { ElNotification } from 'element-plus'
 import { propTypes } from '@/utils/propTypes'
 import { getAccessToken, getTenantId } from '@/utils/auth'
 
+defineOptions({ name: 'UploadImgs' })
+
 const message = useMessage() // 消息弹窗
 
 type FileTypes =
@@ -80,7 +82,7 @@ const props = defineProps({
   fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
   height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
   width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
-  borderRadius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
+  borderradius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
 })
 
 const uploadHeaders = ref({
@@ -88,7 +90,7 @@ const uploadHeaders = ref({
   'tenant-id': getTenantId()
 })
 
-const fileList = ref<UploadUserFile[]>()
+const fileList = ref<UploadUserFile[]>([])
 // fix: 改为动态监听赋值解决图片回显问题
 watch(
   () => props.modelValue,
@@ -216,7 +218,7 @@ const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
       padding: 0;
       overflow: hidden;
       border: 1px dashed var(--el-border-color-darker);
-      border-radius: v-bind(borderRadius);
+      border-radius: v-bind(borderradius);
 
       &:hover {
         border: 1px dashed var(--el-color-primary);
@@ -233,7 +235,7 @@ const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
       width: v-bind(width);
       height: v-bind(height);
       background-color: transparent;
-      border-radius: v-bind(borderRadius);
+      border-radius: v-bind(borderradius);
     }
 
     .upload-image {

ファイルの差分が大きいため隠しています
+ 17 - 27
src/components/Verifition/src/Verify.vue


+ 1 - 1
src/components/Verifition/src/Verify/VerifyPoints.vue

@@ -57,7 +57,7 @@
     </div>
   </div>
 </template>
-<script name="VerifyPoints" setup type="text/babel">
+<script setup type="text/babel">
 /**
  * VerifyPoints
  * @description 点选

+ 1 - 1
src/components/Verifition/src/Verify/VerifySlide.vue

@@ -71,7 +71,7 @@
     </div>
   </div>
 </template>
-<script name="VerifySlide" setup type="text/babel">
+<script setup type="text/babel">
 /**
  * VerifySlide
  * @description 滑块

+ 3 - 1
src/components/XButton/src/XButton.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="XButton" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import { propTypes } from '@/utils/propTypes'
 
+defineOptions({ name: 'XButton' })
+
 const props = defineProps({
   modelValue: propTypes.bool.def(false),
   loading: propTypes.bool.def(false),

+ 3 - 1
src/components/XButton/src/XTextButton.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="XTextButton" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { PropType } from 'vue'
 
+defineOptions({ name: 'XTextButton' })
+
 const props = defineProps({
   modelValue: propTypes.bool.def(false),
   loading: propTypes.bool.def(false),

+ 4 - 1
src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue

@@ -206,7 +206,7 @@
   </div>
 </template>
 
-<script setup lang="ts" name="MyProcessDesigner">
+<script lang="ts" setup>
 // import 'bpmn-js/dist/assets/diagram-js.css' // 左边工具栏以及编辑节点的样式
 // import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'
 // import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'
@@ -244,6 +244,9 @@ import { XmlNode, XmlNodeType, parseXmlString } from 'steady-xml'
 // const eventName = reactive({
 //   name: ''
 // })
+
+defineOptions({ name: 'MyProcessDesigner' })
+
 const bpmnCanvas = ref()
 const refFile = ref()
 const emit = defineEmits([

+ 27 - 3
src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue

@@ -6,10 +6,14 @@
   </div>
 </template>
 
-<script setup lang="ts" name="MyProcessViewer">
+<script lang="ts" setup>
 import BpmnViewer from 'bpmn-js/lib/Viewer'
 import DefaultEmptyXML from './plugins/defaultEmpty'
 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
+import { formatDate } from '@/utils/formatTime'
+
+defineOptions({ name: 'MyProcessViewer' })
+
 const props = defineProps({
   value: {
     // BPMN XML 字符串
@@ -403,6 +407,7 @@ watch(
   stroke-dasharray: 4px !important;
   fill-opacity: 0.2 !important;
 }
+
 .highlight-todo.djs-shape .djs-visual > :nth-child(1) {
   fill: #1890ff !important;
   stroke: #1890ff !important;
@@ -414,8 +419,9 @@ watch(
   stroke: #1890ff !important;
   stroke-dasharray: 4px !important;
   fill-opacity: 0.2 !important;
-  marker-end: url(#sequenceflow-end-_E7DFDF-_E7DFDF-803g1kf6zwzmcig1y2ulm5egr);
+  marker-end: url('#sequenceflow-end-_E7DFDF-_E7DFDF-803g1kf6zwzmcig1y2ulm5egr');
 }
+
 :deep(.highlight-todo.djs-shape .djs-visual > :nth-child(1)) {
   fill: #1890ff !important;
   stroke: #1890ff !important;
@@ -429,14 +435,17 @@ watch(
   stroke: green !important;
   fill-opacity: 0.2 !important;
 }
+
 .highlight.djs-shape .djs-visual > :nth-child(2) {
   fill: green !important;
 }
+
 .highlight.djs-shape .djs-visual > path {
   fill: green !important;
   fill-opacity: 0.2 !important;
   stroke: green !important;
 }
+
 .highlight.djs-connection > .djs-visual > path {
   stroke: green !important;
 }
@@ -450,14 +459,17 @@ watch(
   stroke: green !important;
   fill-opacity: 0.2 !important;
 }
+
 :deep(.highlight.djs-shape .djs-visual > :nth-child(2)) {
   fill: green !important;
 }
+
 :deep(.highlight.djs-shape .djs-visual > path) {
   fill: green !important;
   fill-opacity: 0.2 !important;
   stroke: green !important;
 }
+
 :deep(.highlight.djs-connection > .djs-visual > path) {
   stroke: green !important;
 }
@@ -468,14 +480,17 @@ watch(
   stroke: red !important;
   fill-opacity: 0.2 !important;
 }
+
 .highlight-reject.djs-shape .djs-visual > :nth-child(2) {
   fill: red !important;
 }
+
 .highlight-reject.djs-shape .djs-visual > path {
   fill: red !important;
   fill-opacity: 0.2 !important;
   stroke: red !important;
 }
+
 .highlight-reject.djs-connection > .djs-visual > path {
   stroke: red !important;
 }
@@ -489,14 +504,17 @@ watch(
   stroke: red !important;
   fill-opacity: 0.2 !important;
 }
+
 :deep(.highlight-reject.djs-shape .djs-visual > :nth-child(2)) {
   fill: red !important;
 }
+
 :deep(.highlight-reject.djs-shape .djs-visual > path) {
   fill: red !important;
   fill-opacity: 0.2 !important;
   stroke: red !important;
 }
+
 :deep(.highlight-reject.djs-connection > .djs-visual > path) {
   stroke: red !important;
 }
@@ -507,14 +525,17 @@ watch(
   stroke: grey !important;
   fill-opacity: 0.2 !important;
 }
+
 .highlight-cancel.djs-shape .djs-visual > :nth-child(2) {
   fill: grey !important;
 }
+
 .highlight-cancel.djs-shape .djs-visual > path {
   fill: grey !important;
   fill-opacity: 0.2 !important;
   stroke: grey !important;
 }
+
 .highlight-cancel.djs-connection > .djs-visual > path {
   stroke: grey !important;
 }
@@ -528,14 +549,17 @@ watch(
   stroke: grey !important;
   fill-opacity: 0.2 !important;
 }
+
 :deep(.highlight-cancel.djs-shape .djs-visual > :nth-child(2)) {
   fill: grey !important;
 }
+
 :deep(.highlight-cancel.djs-shape .djs-visual > path) {
   fill: grey !important;
   fill-opacity: 0.2 !important;
   stroke: grey !important;
 }
+
 :deep(.highlight-cancel.djs-connection > .djs-visual > path) {
   stroke: grey !important;
 }
@@ -543,7 +567,7 @@ watch(
 .element-overlays {
   box-sizing: border-box;
   padding: 8px;
-  background: rgba(0, 0, 0, 0.6);
+  background: rgb(0 0 0 / 60%);
   border-radius: 4px;
   color: #fafafa;
   width: 200px;

+ 6 - 3
src/components/bpmnProcessDesigner/package/palette/ProcessPalette.vue

@@ -5,9 +5,11 @@
   </div>
 </template>
 
-<script setup lang="ts" name="MyProcessPalette">
+<script lang="ts" setup>
 import { assign } from 'min-dash'
 
+defineOptions({ name: 'MyProcessPalette' })
+
 const bpmnInstances = () => (window as any).bpmnInstances
 const addTask = (event, options: any = {}) => {
   const ElementFactory = bpmnInstances().elementFactory
@@ -30,12 +32,13 @@ const addTask = (event, options: any = {}) => {
 <style scoped lang="scss">
 .my-process-palette {
   box-sizing: border-box;
-  padding: 80px 20px 20px 20px;
+  padding: 80px 20px 20px;
+
   .test-button {
     box-sizing: border-box;
     padding: 8px 16px;
     border-radius: 4px;
-    border: 1px solid rgba(24, 144, 255, 0.8);
+    border: 1px solid rgb(24 144 255 / 80%);
     cursor: pointer;
   }
 }

+ 4 - 1
src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue

@@ -62,7 +62,7 @@
     </el-collapse>
   </div>
 </template>
-<script setup lang="ts" name="MyPropertiesPanel">
+<script lang="ts" setup>
 import ElementBaseInfo from './base/ElementBaseInfo.vue'
 import ElementOtherConfig from './other/ElementOtherConfig.vue'
 import ElementTask from './task/ElementTask.vue'
@@ -73,6 +73,9 @@ import ElementListeners from './listeners/ElementListeners.vue'
 import ElementProperties from './properties/ElementProperties.vue'
 // import ElementForm from './form/ElementForm.vue'
 import UserTaskListeners from './listeners/UserTaskListeners.vue'
+
+defineOptions({ name: 'MyPropertiesPanel' })
+
 /**
  * 侧边栏
  * @Author MiyueFE

+ 5 - 2
src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue

@@ -7,8 +7,9 @@
           href="https://doc.iocoder.cn/bpm/#_3-%E6%B5%81%E7%A8%8B%E5%9B%BE%E7%A4%BA%E4%BE%8B"
           type="danger"
           target="_blank"
-          >如何实现实现会签、或签?</el-link
         >
+          如何实现实现会签、或签?
+        </el-link>
         <el-form-item label="流程标识" prop="id">
           <el-input
             v-model="needProps.id"
@@ -37,7 +38,9 @@
     </el-form>
   </div>
 </template>
-<script setup lang="ts" name="ElementBaseInfo">
+<script lang="ts" setup>
+defineOptions({ name: 'ElementBaseInfo' })
+
 const props = defineProps({
   businessObject: {
     type: Object,

+ 3 - 1
src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue

@@ -62,7 +62,9 @@
   </div>
 </template>
 
-<script setup lang="ts" name="FlowCondition">
+<script lang="ts" setup>
+defineOptions({ name: 'FlowCondition' })
+
 const props = defineProps({
   businessObject: Object,
   type: String

+ 3 - 1
src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue

@@ -222,7 +222,9 @@
   </div>
 </template>
 
-<script setup lang="ts" name="ElementForm">
+<script lang="ts" setup>
+defineOptions({ name: 'ElementForm' })
+
 const props = defineProps({
   id: String,
   type: String

+ 4 - 1
src/components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue

@@ -241,10 +241,13 @@
     </el-dialog>
   </div>
 </template>
-<script setup lang="ts" name="ElementListeners">
+<script lang="ts" setup>
 import { ElMessageBox } from 'element-plus'
 import { createListenerObject, updateElementExtensions } from '../../utils'
 import { initListenerType, initListenerForm, listenerType, fieldType } from './utilSelf'
+
+defineOptions({ name: 'ElementListeners' })
+
 const props = defineProps({
   id: String,
   type: String

+ 4 - 1
src/components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue

@@ -287,10 +287,13 @@
     </el-dialog>
   </div>
 </template>
-<script setup lang="ts" name="UserTaskListeners">
+<script lang="ts" setup>
 import { ElMessageBox } from 'element-plus'
 import { createListenerObject, updateElementExtensions } from '../../utils'
 import { initListenerForm, initListenerType, eventType, listenerType, fieldType } from './utilSelf'
+
+defineOptions({ name: 'UserTaskListeners' })
+
 const props = defineProps({
   id: String,
   type: String

+ 3 - 1
src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue

@@ -66,7 +66,9 @@
   </div>
 </template>
 
-<script setup lang="ts" name="ElementMultiInstance">
+<script lang="ts" setup>
+defineOptions({ name: 'ElementMultiInstance' })
+
 const props = defineProps({
   businessObject: Object,
   type: String

+ 2 - 1
src/components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue

@@ -16,7 +16,8 @@
   </div>
 </template>
 
-<script setup lang="ts" name="ElementOtherConfig">
+<script lang="ts" setup>
+defineOptions({ name: 'ElementOtherConfig' })
 const props = defineProps({
   id: String
 })

+ 7 - 5
src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue

@@ -6,17 +6,18 @@
       <el-table-column label="属性值" prop="value" min-width="100px" show-overflow-tooltip />
       <el-table-column label="操作" width="110px">
         <template #default="scope">
-          <el-button link @click="openAttributesForm(scope.row, scope.$index)" size="small"
-            >编辑</el-button
-          >
+          <el-button link @click="openAttributesForm(scope.row, scope.$index)" size="small">
+            编辑
+          </el-button>
           <el-divider direction="vertical" />
           <el-button
             link
             size="small"
             style="color: #ff4d4f"
             @click="removeAttributes(scope.row, scope.$index)"
-            >移除</el-button
           >
+            移除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -52,8 +53,9 @@
   </div>
 </template>
 
-<script setup lang="ts" name="ElementProperties">
+<script lang="ts" setup>
 import { ElMessageBox } from 'element-plus'
+defineOptions({ name: 'ElementProperties' })
 const props = defineProps({
   id: String,
   type: String

+ 6 - 4
src/components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="panel-tab__content">
     <div class="panel-tab__content--title">
-      <span><Icon icon="ep:menu" style="margin-right: 8px; color: #555555" />消息列表</span>
+      <span><Icon icon="ep:menu" style="margin-right: 8px; color: #555" />消息列表</span>
       <XButton type="primary" title="创建新消息" preIcon="ep:plus" @click="openModel('message')" />
     </div>
     <el-table :data="messageList" border>
@@ -11,9 +11,9 @@
     </el-table>
     <div
       class="panel-tab__content--title"
-      style="padding-top: 8px; margin-top: 8px; border-top: 1px solid #eeeeee"
+      style="padding-top: 8px; margin-top: 8px; border-top: 1px solid #eee"
     >
-      <span><Icon icon="ep:menu" style="margin-right: 8px; color: #555555" />信号列表</span>
+      <span><Icon icon="ep:menu" style="margin-right: 8px; color: #555" />信号列表</span>
       <XButton type="primary" title="创建新信号" preIcon="ep:plus" @click="openModel('signal')" />
     </div>
     <el-table :data="signalList" border>
@@ -45,7 +45,9 @@
     </el-dialog>
   </div>
 </template>
-<script setup lang="ts" name="SignalAndMassage">
+<script lang="ts" setup>
+defineOptions({ name: 'SignalAndMassage' })
+
 const message = useMessage()
 const signalList = ref<any[]>([])
 const messageList = ref<any[]>([])

+ 3 - 1
src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue

@@ -20,11 +20,13 @@
   </div>
 </template>
 
-<script setup lang="ts" name="ElementTaskConfig">
+<script lang="ts" setup>
 import UserTask from './task-components/UserTask.vue'
 import ScriptTask from './task-components/ScriptTask.vue'
 import ReceiveTask from './task-components/ReceiveTask.vue'
 
+defineOptions({ name: 'ElementTaskConfig' })
+
 const props = defineProps({
   id: String,
   type: String

+ 2 - 1
src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue

@@ -48,7 +48,8 @@
   </div>
 </template>
 
-<script setup lang="ts" name="ReceiveTask">
+<script lang="ts" setup>
+defineOptions({ name: 'ReceiveTask' })
 const props = defineProps({
   id: String,
   type: String

+ 2 - 1
src/components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue

@@ -44,7 +44,8 @@
   </div>
 </template>
 
-<script setup lang="ts" name="ScriptTask">
+<script lang="ts" setup>
+defineOptions({ name: 'ScriptTask' })
 const props = defineProps({
   id: String,
   type: String

+ 2 - 1
src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue

@@ -37,7 +37,8 @@
   </div>
 </template>
 
-<script setup lang="ts" name="UserTask">
+<script lang="ts" setup>
+defineOptions({ name: 'UserTask' })
 const props = defineProps({
   id: String,
   type: String

+ 3 - 1
src/layout/components/AppView.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="AppView" setup>
+<script lang="ts" setup>
 import { useTagsViewStore } from '@/store/modules/tagsView'
 import { useAppStore } from '@/store/modules/app'
 import { Footer } from '@/layout/components/Footer'
 
+defineOptions({ name: 'AppView' })
+
 const appStore = useAppStore()
 
 const layout = computed(() => appStore.getLayout)

+ 3 - 1
src/layout/components/Collapse/src/Collapse.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="Collapse" setup>
+<script lang="ts" setup>
 import { useAppStore } from '@/store/modules/app'
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'Collapse' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('collapse')

+ 3 - 1
src/layout/components/ContextMenu/src/ContextMenu.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="ContextMenu" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 
 import { useDesign } from '@/hooks/web/useDesign'
@@ -6,6 +6,8 @@ import type { RouteLocationNormalizedLoaded } from 'vue-router'
 import { contextMenuSchema } from '@/types/contextMenu'
 import type { ElDropdown } from 'element-plus'
 
+defineOptions({ name: 'ContextMenu' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('context-menu')

+ 4 - 1
src/layout/components/Footer/src/Footer.vue

@@ -1,7 +1,10 @@
-<script lang="ts" name="Footer" setup>
+<script lang="ts" setup>
 import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 
+// eslint-disable-next-line vue/no-reserved-component-names
+defineOptions({ name: 'Footer' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('footer')

+ 3 - 1
src/layout/components/LocaleDropdown/src/LocaleDropdown.vue

@@ -1,9 +1,11 @@
-<script lang="ts" name="LocaleDropdown" setup>
+<script lang="ts" setup>
 import { useLocaleStore } from '@/store/modules/locale'
 import { useLocale } from '@/hooks/web/useLocale'
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'LocaleDropdown' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('locale-dropdown')

+ 3 - 1
src/layout/components/Logo/src/Logo.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="Logo" setup>
+<script lang="ts" setup>
 import { computed, onMounted, ref, unref, watch } from 'vue'
 import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'Logo' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('logo')

+ 1 - 0
src/layout/components/Menu/src/Menu.vue

@@ -13,6 +13,7 @@ const { getPrefixCls } = useDesign()
 const prefixCls = getPrefixCls('menu')
 
 export default defineComponent({
+  // eslint-disable-next-line vue/no-reserved-component-names
   name: 'Menu',
   props: {
     menuSelect: {

+ 3 - 1
src/layout/components/Message/src/Message.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="Message" setup>
+<script lang="ts" setup>
 import { formatDate } from '@/utils/formatTime'
 import * as NotifyMessageApi from '@/api/system/notify/message'
 
+defineOptions({ name: 'Message' })
+
 const { push } = useRouter()
 const activeName = ref('notice')
 const unreadCount = ref(0) // 未读消息数量

+ 3 - 1
src/layout/components/Screenfull/src/Screenfull.vue

@@ -1,9 +1,11 @@
-<script lang="ts" name="ScreenFull" setup>
+<script lang="ts" setup>
 import { Icon } from '@/components/Icon'
 import { useFullscreen } from '@vueuse/core'
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'ScreenFull' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('screenfull')

+ 3 - 1
src/layout/components/Setting/src/Setting.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="Setting" setup>
+<script lang="ts" setup>
 import { ElMessage } from 'element-plus'
 import { useClipboard, useCssVar } from '@vueuse/core'
 
@@ -13,6 +13,8 @@ import ColorRadioPicker from './components/ColorRadioPicker.vue'
 import InterfaceDisplay from './components/InterfaceDisplay.vue'
 import LayoutRadioPicker from './components/LayoutRadioPicker.vue'
 
+defineOptions({ name: 'Setting' })
+
 const { t } = useI18n()
 const appStore = useAppStore()
 

+ 3 - 1
src/layout/components/Setting/src/components/ColorRadioPicker.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="ColorRadioPicker" setup>
+<script lang="ts" setup>
 import { PropType } from 'vue'
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'ColorRadioPicker' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('color-radio-picker')

+ 3 - 1
src/layout/components/Setting/src/components/InterfaceDisplay.vue

@@ -1,10 +1,12 @@
-<script lang="ts" name="InterfaceDisplay" setup>
+<script lang="ts" setup>
 import { setCssVar } from '@/utils'
 
 import { useDesign } from '@/hooks/web/useDesign'
 import { useWatermark } from '@/hooks/web/useWatermark'
 import { useAppStore } from '@/store/modules/app'
 
+defineOptions({ name: 'InterfaceDisplay' })
+
 const { t } = useI18n()
 const { getPrefixCls } = useDesign()
 const { setWatermark } = useWatermark()

+ 11 - 9
src/layout/components/Setting/src/components/LayoutRadioPicker.vue

@@ -1,7 +1,9 @@
-<script lang="ts" name="LayoutRadioPicker" setup>
+<script lang="ts" setup>
 import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'LayoutRadioPicker' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('layout-radio-picker')
@@ -66,7 +68,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
     border: 2px solid #e5e7eb;
     border-radius: 4px;
 
-    &:before {
+    &::before {
       position: absolute;
       top: 0;
       left: 0;
@@ -78,14 +80,14 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
       content: '';
     }
 
-    &:after {
+    &::after {
       position: absolute;
       top: 0;
       left: 0;
       width: 100%;
       height: 25%;
       background-color: #fff;
-      border-radius: 4px 4px 0 4px;
+      border-radius: 4px 4px 0;
       content: '';
     }
   }
@@ -94,7 +96,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
     border: 2px solid #e5e7eb;
     border-radius: 4px;
 
-    &:before {
+    &::before {
       position: absolute;
       top: 0;
       left: 0;
@@ -106,7 +108,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
       content: '';
     }
 
-    &:after {
+    &::after {
       position: absolute;
       top: 0;
       left: 0;
@@ -122,7 +124,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
     border: 2px solid #e5e7eb;
     border-radius: 4px;
 
-    &:before {
+    &::before {
       position: absolute;
       top: 0;
       left: 0;
@@ -139,7 +141,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
     border: 2px solid #e5e7eb;
     border-radius: 4px;
 
-    &:before {
+    &::before {
       position: absolute;
       top: 0;
       left: 0;
@@ -151,7 +153,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
       content: '';
     }
 
-    &:after {
+    &::after {
       position: absolute;
       top: 0;
       left: 0;

+ 3 - 1
src/layout/components/SizeDropdown/src/SizeDropdown.vue

@@ -1,10 +1,12 @@
-<script lang="ts" name="SizeDropdown" setup>
+<script lang="ts" setup>
 import { useAppStore } from '@/store/modules/app'
 
 import { propTypes } from '@/utils/propTypes'
 import { useDesign } from '@/hooks/web/useDesign'
 import { ElementPlusSize } from '@/types/elementPlus'
 
+defineOptions({ name: 'SizeDropdown' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('size-dropdown')

+ 1 - 1
src/layout/components/TabMenu/src/TabMenu.vue

@@ -217,7 +217,7 @@ $prefix-cls: #{$namespace}-tab-menu;
 .#{$prefix-cls} {
   transition: all var(--transition-time-02);
 
-  &:after {
+  &::after {
     position: absolute;
     top: 0;
     right: 0;

+ 7 - 5
src/layout/components/TagsView/src/TagsView.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="TagsView" setup>
+<script lang="ts" setup>
 import type { RouteLocationNormalizedLoaded, RouterLinkProps } from 'vue-router'
 import { usePermissionStore } from '@/store/modules/permission'
 import { useTagsViewStore } from '@/store/modules/tagsView'
@@ -11,6 +11,8 @@ import { ElScrollbar } from 'element-plus'
 import { useScrollTo } from '@/hooks/event/useScrollTo'
 import { useTemplateRefsList } from '@vueuse/core'
 
+defineOptions({ name: 'TagsView' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('tags-view')
@@ -483,7 +485,7 @@ $prefix-cls: #{$namespace}-tags-view;
       }
     }
 
-    &:after {
+    &::after {
       position: absolute;
       top: 1px;
       left: 0;
@@ -502,7 +504,7 @@ $prefix-cls: #{$namespace}-tags-view;
     padding-right: 16px;
     margin-left: 4px;
     font-size: 12px;
-    border-radius: 3px 3px 3px 3px;
+    border-radius: 3px;
     cursor: pointer;
     border: 1px solid #d9d9d9;
 
@@ -549,7 +551,7 @@ $prefix-cls: #{$namespace}-tags-view;
         }
       }
 
-      &:after {
+      &::after {
         border-right: 1px solid var(--el-border-color);
         border-left: 1px solid var(--el-border-color);
       }
@@ -561,7 +563,7 @@ $prefix-cls: #{$namespace}-tags-view;
       height: calc(100% - 4px);
       padding-right: 16px;
       font-size: 12px;
-      border-radius: 3px 3px 3px 3px;
+      border-radius: 3px;
       cursor: pointer;
       border: 1px solid var(--el-border-color);
     }

+ 3 - 1
src/layout/components/ThemeSwitch/src/ThemeSwitch.vue

@@ -1,8 +1,10 @@
-<script lang="ts" name="ThemeSwitch" setup>
+<script lang="ts" setup>
 import { useAppStore } from '@/store/modules/app'
 import { useIcon } from '@/hooks/web/useIcon'
 import { useDesign } from '@/hooks/web/useDesign'
 
+defineOptions({ name: 'ThemeSwitch' })
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('theme-switch')

+ 3 - 1
src/layout/components/UserInfo/src/UserInfo.vue

@@ -1,4 +1,4 @@
-<script lang="ts" name="UserInfo" setup>
+<script lang="ts" setup>
 import { ElMessageBox } from 'element-plus'
 
 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
@@ -7,6 +7,8 @@ import avatarImg from '@/assets/imgs/avatar.gif'
 import { useUserStore } from '@/store/modules/user'
 import { useTagsViewStore } from '@/store/modules/tagsView'
 
+defineOptions({ name: 'UserInfo' })
+
 const { t } = useI18n()
 
 const { wsCache } = useCache()

+ 1 - 1
src/utils/auth.ts

@@ -20,7 +20,7 @@ export const getRefreshToken = () => {
 
 // 设置token
 export const setToken = (token: TokenType) => {
-  wsCache.set(RefreshTokenKey, token.refreshToken, { exp: token.expiresTime })
+  wsCache.set(RefreshTokenKey, token.refreshToken)
   wsCache.set(AccessTokenKey, token.accessToken)
 }
 

+ 3 - 1
src/views/Error/403.vue

@@ -1,6 +1,8 @@
 <template>
   <Error type="403" @error-click="push('/')" />
 </template>
-<script lang="ts" name="Error403" setup>
+<script lang="ts" setup>
+defineOptions({ name: 'Error403' })
+
 const { push } = useRouter()
 </script>

+ 2 - 1
src/views/Error/404.vue

@@ -1,6 +1,7 @@
 <template>
   <Error @error-click="push('/')" />
 </template>
-<script lang="ts" name="Error404" setup>
+<script lang="ts" setup>
+defineOptions({ name: 'Error404' })
 const { push } = useRouter()
 </script>

+ 2 - 1
src/views/Error/500.vue

@@ -1,6 +1,7 @@
 <template>
   <Error type="500" @error-click="push('/')" />
 </template>
-<script lang="ts" name="Error500" setup>
+<script lang="ts" setup>
+defineOptions({ name: 'Error500' })
 const { push } = useRouter()
 </script>

+ 3 - 1
src/views/Home/Index.vue

@@ -160,7 +160,7 @@
     </el-col>
   </el-row>
 </template>
-<script setup lang="ts" name="Home">
+<script lang="ts" setup>
 import { set } from 'lodash-es'
 import { EChartsOption } from 'echarts'
 import { formatTime } from '@/utils'
@@ -171,6 +171,8 @@ import avatarImg from '@/assets/imgs/avatar.gif'
 import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
 import { pieOptions, barOptions } from './echarts-data'
 
+defineOptions({ name: 'Home' })
+
 const { t } = useI18n()
 const userStore = useUserStore()
 const { setWatermark } = useWatermark()

+ 3 - 1
src/views/Home/Index2.vue

@@ -140,7 +140,7 @@
     </el-col>
   </el-row>
 </template>
-<script lang="ts" name="Home2" setup>
+<script lang="ts" setup>
 import { set } from 'lodash-es'
 import { EChartsOption } from 'echarts'
 
@@ -148,6 +148,8 @@ import { useDesign } from '@/hooks/web/useDesign'
 import type { AnalysisTotalTypes } from './types'
 import { barOptions, lineOptions, pieOptions } from './echarts-data'
 
+defineOptions({ name: 'Home2' })
+
 const { t } = useI18n()
 const loading = ref(true)
 const { getPrefixCls } = useDesign()

+ 3 - 1
src/views/Login/Login.vue

@@ -60,7 +60,7 @@
     </div>
   </div>
 </template>
-<script lang="ts" name="Login" setup>
+<script lang="ts" setup>
 import { underlineToHump } from '@/utils'
 
 import { useDesign } from '@/hooks/web/useDesign'
@@ -70,6 +70,8 @@ import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
 
 import { LoginForm, MobileForm, QrCodeForm, RegisterForm, SSOLoginVue } from './components'
 
+defineOptions({ name: 'Login' })
+
 const { t } = useI18n()
 const appStore = useAppStore()
 const { getPrefixCls } = useDesign()

+ 3 - 1
src/views/Login/components/LoginForm.vue

@@ -143,7 +143,7 @@
     </el-row>
   </el-form>
 </template>
-<script lang="ts" name="LoginForm" setup>
+<script lang="ts" setup>
 import { ElLoading } from 'element-plus'
 import LoginFormTitle from './LoginFormTitle.vue'
 import type { RouteLocationNormalizedLoaded } from 'vue-router'
@@ -155,6 +155,8 @@ import { usePermissionStore } from '@/store/modules/permission'
 import * as LoginApi from '@/api/login'
 import { LoginStateEnum, useFormValid, useLoginState } from './useLogin'
 
+defineOptions({ name: 'LoginForm' })
+
 const { t } = useI18n()
 const message = useMessage()
 const iconHouse = useIcon({ icon: 'ep:house' })

+ 3 - 1
src/views/Login/components/LoginFormTitle.vue

@@ -3,9 +3,11 @@
     {{ getFormTitle }}
   </h2>
 </template>
-<script lang="ts" name="LoginFormTitle" setup>
+<script lang="ts" setup>
 import { LoginStateEnum, useLoginState } from './useLogin'
 
+defineOptions({ name: 'LoginFormTitle' })
+
 const { t } = useI18n()
 
 const { getLoginState } = useLoginState()

+ 3 - 1
src/views/Login/components/MobileForm.vue

@@ -92,7 +92,7 @@
     </el-row>
   </el-form>
 </template>
-<script lang="ts" name="MobileForm" setup>
+<script lang="ts" setup>
 import type { RouteLocationNormalizedLoaded } from 'vue-router'
 
 import { useIcon } from '@/hooks/web/useIcon'
@@ -103,6 +103,8 @@ import { getTenantIdByName, sendSmsCode, smsLogin } from '@/api/login'
 import LoginFormTitle from './LoginFormTitle.vue'
 import { LoginStateEnum, useFormValid, useLoginState } from './useLogin'
 
+defineOptions({ name: 'MobileForm' })
+
 const { t } = useI18n()
 const message = useMessage()
 const permissionStore = usePermissionStore()

+ 3 - 1
src/views/Login/components/QrCodeForm.vue

@@ -16,12 +16,14 @@
     </el-col>
   </el-row>
 </template>
-<script lang="ts" name="QrCodeForm" setup>
+<script lang="ts" setup>
 import logoImg from '@/assets/imgs/logo.png'
 
 import LoginFormTitle from './LoginFormTitle.vue'
 import { LoginStateEnum, useLoginState } from './useLogin'
 
+defineOptions({ name: 'QrCodeForm' })
+
 const { t } = useI18n()
 const { handleBackLogin, getLoginState } = useLoginState()
 const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)

+ 3 - 1
src/views/Login/components/RegisterForm.vue

@@ -35,7 +35,7 @@
     </template>
   </Form>
 </template>
-<script lang="ts" name="RegisterForm" setup>
+<script lang="ts" setup>
 import type { FormRules } from 'element-plus'
 
 import { useForm } from '@/hooks/web/useForm'
@@ -44,6 +44,8 @@ import LoginFormTitle from './LoginFormTitle.vue'
 import { LoginStateEnum, useLoginState } from './useLogin'
 import { FormSchema } from '@/types/form'
 
+defineOptions({ name: 'RegisterForm' })
+
 const { t } = useI18n()
 const { required } = useValidator()
 const { register, elFormRef } = useForm()

+ 4 - 1
src/views/Login/components/SSOLogin.vue

@@ -38,11 +38,14 @@
     </div>
   </div>
 </template>
-<script lang="ts" name="SSOLogin" setup>
+<script lang="ts" setup>
 import LoginFormTitle from './LoginFormTitle.vue'
 import * as OAuth2Api from '@/api/login/oauth2'
 import { LoginStateEnum, useLoginState } from './useLogin'
 import type { RouteLocationNormalizedLoaded } from 'vue-router'
+
+defineOptions({ name: 'SSOLogin' })
+
 const route = useRoute() // 路由
 const { currentRoute } = useRouter() // 路由
 const { getLoginState, setLoginState } = useLoginState()

+ 5 - 1
src/views/Profile/Index.vue

@@ -39,21 +39,25 @@ const activeName = ref('basicInfo')
 <style scoped>
 .user {
   max-height: 960px;
-  padding: 15px 20px 20px 20px;
+  padding: 15px 20px 20px;
 }
+
 .card-header {
   display: flex;
   justify-content: center;
   align-items: center;
 }
+
 :deep(.el-card .el-card__header, .el-card .el-card__body) {
   padding: 15px !important;
 }
+
 .profile-tabs > .el-tabs__content {
   padding: 32px;
   color: #6b778c;
   font-weight: 600;
 }
+
 .el-tabs--left .el-tabs__content {
   height: 100%;
 }

+ 5 - 4
src/views/Profile/components/BasicInfo.vue

@@ -10,10 +10,8 @@
   <XButton :title="t('common.save')" @click="submit()" />
   <XButton :title="t('common.reset')" type="danger" @click="init()" />
 </template>
-<script lang="ts" name="BasicInfo" setup>
+<script lang="ts" setup>
 import type { FormRules } from 'element-plus'
-import { ElMessage } from 'element-plus'
-
 import { FormSchema } from '@/types/form'
 import type { FormExpose } from '@/components/Form'
 import {
@@ -22,7 +20,10 @@ import {
   UserProfileUpdateReqVO
 } from '@/api/system/user/profile'
 
+defineOptions({ name: 'BasicInfo' })
+
 const { t } = useI18n()
+const message = useMessage() // 消息弹窗
 // 表单校验
 const rules = reactive<FormRules>({
   nickname: [{ required: true, message: t('profile.rules.nickname'), trigger: 'blur' }],
@@ -74,7 +75,7 @@ const submit = () => {
     if (valid) {
       const data = unref(formRef)?.formModel as UserProfileUpdateReqVO
       await updateUserProfile(data)
-      ElMessage.success(t('common.updateSuccess'))
+      message.success(t('common.updateSuccess'))
       await init()
     }
   })

+ 5 - 3
src/views/Profile/components/ProfileUser.vue

@@ -46,12 +46,14 @@
     </ul>
   </div>
 </template>
-<script lang="ts" name="ProfileUser" setup>
+<script lang="ts" setup>
 import { formatDate } from '@/utils/formatTime'
 import UserAvatar from './UserAvatar.vue'
 
 import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
 
+defineOptions({ name: 'ProfileUser' })
+
 const { t } = useI18n()
 const userInfo = ref<ProfileVO>()
 const getUserInfo = async () => {
@@ -79,7 +81,7 @@ onMounted(async () => {
 }
 
 .list-group {
-  padding-left: 0px;
+  padding-left: 0;
   list-style: none;
 }
 
@@ -87,7 +89,7 @@ onMounted(async () => {
   border-bottom: 1px solid #e7eaec;
   border-top: 1px solid #e7eaec;
   margin-bottom: -1px;
-  padding: 11px 0px;
+  padding: 11px 0;
   font-size: 13px;
 }
 

+ 3 - 1
src/views/Profile/components/ResetPwd.vue

@@ -15,12 +15,14 @@
     </el-form-item>
   </el-form>
 </template>
-<script lang="ts" name="ResetPwd" setup>
+<script lang="ts" setup>
 import type { FormInstance, FormRules } from 'element-plus'
 
 import { InputPassword } from '@/components/InputPassword'
 import { updateUserPassword } from '@/api/system/user/profile'
 
+defineOptions({ name: 'ResetPwd' })
+
 const { t } = useI18n()
 const message = useMessage()
 const formRef = ref<FormInstance>()

+ 3 - 1
src/views/Profile/components/UserAvatar.vue

@@ -10,10 +10,12 @@
     />
   </div>
 </template>
-<script lang="ts" name="UserAvatar" setup>
+<script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
 import { uploadAvatar } from '@/api/system/user/profile'
 
+defineOptions({ name: 'UserAvatar' })
+
 const props = defineProps({
   img: propTypes.string.def('')
 })

+ 3 - 1
src/views/Profile/components/UserSocial.vue

@@ -21,11 +21,13 @@
     </el-table-column>
   </el-table>
 </template>
-<script lang="ts" name="UserSocial" setup>
+<script lang="ts" setup>
 import { SystemUserSocialTypeEnum } from '@/utils/constants'
 import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
 import { socialAuthRedirect, socialBind, socialUnbind } from '@/api/system/user/socialUser'
 
+defineOptions({ name: 'UserSocial' })
+
 const message = useMessage()
 const socialUsers = ref<any[]>([])
 const userInfo = ref<ProfileVO>()

+ 3 - 1
src/views/Redirect/Redirect.vue

@@ -1,7 +1,9 @@
 <template>
   <div></div>
 </template>
-<script setup lang="ts" name="Redirect">
+<script lang="ts" setup>
+defineOptions({ name: 'Redirect' })
+
 const { currentRoute, replace } = useRouter()
 const { params, query } = unref(currentRoute)
 const { path, _redirect_type = 'path' } = params

+ 4 - 1
src/views/bpm/definition/index.vue

@@ -94,12 +94,15 @@
   </Dialog>
 </template>
 
-<script setup lang="ts" name="BpmProcessDefinition">
+<script lang="ts" setup>
 import { DICT_TYPE } from '@/utils/dict'
 import { dateFormatter } from '@/utils/formatTime'
 import { MyProcessViewer } from '@/components/bpmnProcessDesigner/package'
 import * as DefinitionApi from '@/api/bpm/definition'
 import { setConfAndFields2 } from '@/utils/formCreate'
+
+defineOptions({ name: 'BpmProcessDefinition' })
+
 const { push } = useRouter() // 路由
 const { query } = useRoute() // 查询参数
 

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません