Browse Source

perf: add aotu components

xingyu4j 2 years ago
parent
commit
3e1ce8b76a

+ 2 - 1
yudao-ui-admin-vue3/package.json

@@ -38,8 +38,8 @@
     "echarts-wordcloud": "^2.0.0",
     "element-plus": "2.2.21",
     "intro.js": "^6.0.0",
-    "jsencrypt": "^3.3.1",
     "js-cookie": "^3.0.1",
+    "jsencrypt": "^3.3.1",
     "lodash-es": "^4.17.21",
     "mitt": "^3.0.0",
     "nprogress": "^0.2.0",
@@ -94,6 +94,7 @@
     "stylelint-config-standard": "^29.0.0",
     "stylelint-order": "^5.0.0",
     "typescript": "4.8.4",
+    "unplugin-vue-components": "^0.22.9",
     "unplugin-vue-macros": "^0.16.3",
     "vite": "3.2.4",
     "vite-plugin-compression": "^0.5.1",

+ 43 - 0
yudao-ui-admin-vue3/pnpm-lock.yaml

@@ -59,6 +59,7 @@ specifiers:
   stylelint-config-standard: ^29.0.0
   stylelint-order: ^5.0.0
   typescript: 4.8.4
+  unplugin-vue-components: ^0.22.9
   unplugin-vue-macros: ^0.16.3
   url: ^0.11.0
   vite: 3.2.4
@@ -150,6 +151,7 @@ devDependencies:
   stylelint-config-standard: 29.0.0_stylelint@14.15.0
   stylelint-order: 5.0.0_stylelint@14.15.0
   typescript: 4.8.4
+  unplugin-vue-components: 0.22.9_rollup@3.3.0+vue@3.2.45
   unplugin-vue-macros: 0.16.3_drqowttw7xgwfzqyhu6wuedde4
   vite: 3.2.4_mp5lu76ee5qtwstsyca37sdhqi
   vite-plugin-compression: 0.5.1_vite@3.2.4
@@ -963,6 +965,21 @@ packages:
       picomatch: 2.3.1
     dev: true
 
+  /@rollup/pluginutils/5.0.2_rollup@3.3.0:
+    resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      rollup: ^1.20.0||^2.0.0||^3.0.0
+    peerDependenciesMeta:
+      rollup:
+        optional: true
+    dependencies:
+      '@types/estree': 1.0.0
+      estree-walker: 2.0.2
+      picomatch: 2.3.1
+      rollup: 3.3.0
+    dev: true
+
   /@sxzz/popperjs-es/2.11.7:
     resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
     dev: false
@@ -6829,6 +6846,32 @@ packages:
       vite: 3.2.4_mp5lu76ee5qtwstsyca37sdhqi
     dev: true
 
+  /unplugin-vue-components/0.22.9_rollup@3.3.0+vue@3.2.45:
+    resolution: {integrity: sha512-qBvooq3EgpjtYicxeccRUGUBBQCCw9rJ0kHPZPOSJd8TBZViSv86vuKLTRDHPyjWtclwOIkVStZJfPdJFhYUMw==}
+    engines: {node: '>=14'}
+    peerDependencies:
+      '@babel/parser': ^7.15.8
+      vue: 2 || 3
+    peerDependenciesMeta:
+      '@babel/parser':
+        optional: true
+    dependencies:
+      '@antfu/utils': 0.6.0
+      '@rollup/pluginutils': 5.0.2_rollup@3.3.0
+      chokidar: 3.5.3
+      debug: 4.3.4
+      fast-glob: 3.2.12
+      local-pkg: 0.4.2
+      magic-string: 0.26.7
+      minimatch: 5.1.0
+      resolve: 1.22.1
+      unplugin: 0.10.2
+      vue: 3.2.45
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+    dev: true
+
   /unplugin-vue-define-options/0.12.7:
     resolution: {integrity: sha512-relFORVPLDs4dd3ogEti5YyAqQ62XEieRgLu/OrDIRZdSZQ942pydf9ilfLFiFwCUt+EES/2Xl4EERtgP1T/og==}
     engines: {node: '>=14.19.0'}

+ 83 - 0
yudao-ui-admin-vue3/src/auto-components.d.ts

@@ -0,0 +1,83 @@
+// generated by unplugin-vue-components
+// We suggest you to commit this file into source control
+// Read more: https://github.com/vuejs/core/pull/3399
+import '@vue/runtime-core'
+
+export {}
+
+declare module '@vue/runtime-core' {
+  export interface GlobalComponents {
+    Backtop: typeof import('./components/Backtop/src/Backtop.vue')['default']
+    Breadcrumb: typeof import('./components/Breadcrumb/src/Breadcrumb.vue')['default']
+    Collapse: typeof import('./components/Collapse/src/Collapse.vue')['default']
+    ColorRadioPicker: typeof import('./components/Setting/src/components/ColorRadioPicker.vue')['default']
+    ConfigGlobal: typeof import('./components/ConfigGlobal/src/ConfigGlobal.vue')['default']
+    ContentDetailWrap: typeof import('./components/ContentDetailWrap/src/ContentDetailWrap.vue')['default']
+    ContentWrap: typeof import('./components/ContentWrap/src/ContentWrap.vue')['default']
+    ContextMenu: typeof import('./components/ContextMenu/src/ContextMenu.vue')['default']
+    CountTo: typeof import('./components/CountTo/src/CountTo.vue')['default']
+    Crontab: typeof import('./components/Crontab/src/Crontab.vue')['default']
+    Descriptions: typeof import('./components/Descriptions/src/Descriptions.vue')['default']
+    Dialog: typeof import('./components/Dialog/src/Dialog.vue')['default']
+    DictTag: typeof import('./components/DictTag/src/DictTag.vue')['default']
+    Echart: typeof import('./components/Echart/src/Echart.vue')['default']
+    Editor: typeof import('./components/Editor/src/Editor.vue')['default']
+    ElButton: typeof import('element-plus/es')['ElButton']
+    ElCard: typeof import('element-plus/es')['ElCard']
+    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+    ElCol: typeof import('element-plus/es')['ElCol']
+    ElForm: typeof import('element-plus/es')['ElForm']
+    ElFormItem: typeof import('element-plus/es')['ElFormItem']
+    ElInput: typeof import('element-plus/es')['ElInput']
+    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+    ElOption: typeof import('element-plus/es')['ElOption']
+    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
+    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
+    ElRow: typeof import('element-plus/es')['ElRow']
+    ElSelect: typeof import('element-plus/es')['ElSelect']
+    ElSwitch: typeof import('element-plus/es')['ElSwitch']
+    ElTag: typeof import('element-plus/es')['ElTag']
+    ElTransfer: typeof import('element-plus/es')['ElTransfer']
+    ElTree: typeof import('element-plus/es')['ElTree']
+    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
+    ElUpload: typeof import('element-plus/es')['ElUpload']
+    Error: typeof import('./components/Error/src/Error.vue')['default']
+    Footer: typeof import('./components/Footer/src/Footer.vue')['default']
+    Form: typeof import('./components/Form/src/Form.vue')['default']
+    Highlight: typeof import('./components/Highlight/src/Highlight.vue')['default']
+    Icon: typeof import('./components/Icon/src/Icon.vue')['default']
+    IconSelect: typeof import('./components/Icon/src/IconSelect.vue')['default']
+    IFrame: typeof import('./components/IFrame/src/IFrame.vue')['default']
+    ImageViewer: typeof import('./components/ImageViewer/src/ImageViewer.vue')['default']
+    Infotip: typeof import('./components/Infotip/src/Infotip.vue')['default']
+    InputPassword: typeof import('./components/InputPassword/src/InputPassword.vue')['default']
+    InterfaceDisplay: typeof import('./components/Setting/src/components/InterfaceDisplay.vue')['default']
+    LayoutRadioPicker: typeof import('./components/Setting/src/components/LayoutRadioPicker.vue')['default']
+    LocaleDropdown: typeof import('./components/LocaleDropdown/src/LocaleDropdown.vue')['default']
+    Logo: typeof import('./components/Logo/src/Logo.vue')['default']
+    Menu: typeof import('./components/Menu/src/Menu.vue')['default']
+    Qrcode: typeof import('./components/Qrcode/src/Qrcode.vue')['default']
+    RouterLink: typeof import('vue-router')['RouterLink']
+    RouterView: typeof import('vue-router')['RouterView']
+    Screenfull: typeof import('./components/Screenfull/src/Screenfull.vue')['default']
+    Search: typeof import('./components/Search/src/Search.vue')['default']
+    Setting: typeof import('./components/Setting/src/Setting.vue')['default']
+    SizeDropdown: typeof import('./components/SizeDropdown/src/SizeDropdown.vue')['default']
+    Sticky: typeof import('./components/Sticky/src/Sticky.vue')['default']
+    Table: typeof import('./components/Table/src/Table.vue')['default']
+    TabMenu: typeof import('./components/TabMenu/src/TabMenu.vue')['default']
+    TagsView: typeof import('./components/TagsView/src/TagsView.vue')['default']
+    ThemeSwitch: typeof import('./components/ThemeSwitch/src/ThemeSwitch.vue')['default']
+    Tooltip: typeof import('./components/Tooltip/src/Tooltip.vue')['default']
+    UserInfo: typeof import('./components/UserInfo/src/UserInfo.vue')['default']
+    Verify: typeof import('./components/Verifition/src/Verify.vue')['default']
+    VerifyPoints: typeof import('./components/Verifition/src/Verify/VerifyPoints.vue')['default']
+    VerifySlide: typeof import('./components/Verifition/src/Verify/VerifySlide.vue')['default']
+    XButton: typeof import('./components/XButton/src/XButton.vue')['default']
+    XModal: typeof import('./components/XModal/src/XModal.vue')['default']
+    XTextButton: typeof import('./components/XButton/src/XTextButton.vue')['default']
+  }
+  export interface ComponentCustomProperties {
+    vLoading: typeof import('element-plus/es')['ElLoadingDirective']
+  }
+}

+ 1 - 2
yudao-ui-admin-vue3/src/views/system/dept/index.vue

@@ -103,11 +103,10 @@
 </template>
 <script setup lang="ts">
 import { useI18n } from '@/hooks/web/useI18n'
-import { ElInput, ElCard, ElTree, ElTreeSelect, ElSelect, ElOption } from 'element-plus'
 import { handleTree } from '@/utils/tree'
 import { onMounted, ref, unref, watch } from 'vue'
 import * as DeptApi from '@/api/system/dept'
-import { Form, FormExpose } from '@/components/Form'
+import { FormExpose } from '@/components/Form'
 import { modelSchema, rules } from './dept.data'
 import { DeptVO } from '@/api/system/dept/types'
 import { useMessage } from '@/hooks/web/useMessage'

+ 0 - 2
yudao-ui-admin-vue3/src/views/system/dict/index.vue

@@ -159,11 +159,9 @@ import { ref, unref, onMounted } from 'vue'
 import { DICT_TYPE } from '@/utils/dict'
 import { useI18n } from '@/hooks/web/useI18n'
 import { FormExpose } from '@/components/Form'
-import { ElInput, ElTag } from 'element-plus'
 import * as DictTypeSchemas from './dict.type'
 import * as DictDataSchemas from './dict.data'
 import { useTable } from '@/hooks/web/useTable'
-import { ElCard, ElMessage } from 'element-plus'
 import * as DictTypeApi from '@/api/system/dict/dict.type'
 import * as DictDataApi from '@/api/system/dict/dict.data'
 import { DictDataVO, DictTypeVO } from '@/api/system/dict/types'

+ 1 - 14
yudao-ui-admin-vue3/src/views/system/menu/index.vue

@@ -247,20 +247,7 @@
 import { onMounted, reactive, ref } from 'vue'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useMessage } from '@/hooks/web/useMessage'
-import {
-  ElRow,
-  ElCol,
-  ElForm,
-  ElFormItem,
-  ElInput,
-  ElInputNumber,
-  ElSelect,
-  ElTreeSelect,
-  ElOption,
-  ElRadioGroup,
-  ElRadioButton,
-  FormInstance
-} from 'element-plus'
+import { FormInstance } from 'element-plus'
 import { Tooltip } from '@/components/Tooltip'
 import { IconSelect } from '@/components/Icon'
 import { VxeTableInstance } from 'vxe-table'

+ 6 - 14
yudao-ui-admin-vue3/src/views/system/role/index.vue

@@ -143,25 +143,16 @@
 </template>
 <script setup lang="ts">
 import { onMounted, reactive, ref, unref } from 'vue'
-import {
-  ElForm,
-  ElFormItem,
-  ElSelect,
-  ElOption,
-  ElTree,
-  ElCard,
-  ElSwitch,
-  ElTag
-} from 'element-plus'
-import { DICT_TYPE, getDictOptions } from '@/utils/dict'
+import { ElTree } from 'element-plus'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useMessage } from '@/hooks/web/useMessage'
+import { useVxeGrid } from '@/hooks/web/useVxeGrid'
 import { FormExpose } from '@/components/Form'
-import { rules, allSchemas } from './role.data'
+import { VxeGridInstance } from 'vxe-table'
 import { handleTree } from '@/utils/tree'
 import { SystemDataScopeEnum } from '@/utils/constants'
-import { useVxeGrid } from '@/hooks/web/useVxeGrid'
-import { VxeGridInstance } from 'vxe-table'
+import { DICT_TYPE, getDictOptions } from '@/utils/dict'
+import { rules, allSchemas } from './role.data'
 import * as RoleApi from '@/api/system/role'
 import { listSimpleMenusApi } from '@/api/system/menu'
 import { listSimpleDeptApi } from '@/api/system/dept'
@@ -170,6 +161,7 @@ import type {
   PermissionAssignRoleDataScopeReqVO,
   PermissionAssignRoleMenuReqVO
 } from '@/api/system/permission/types'
+
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 // 列表相关的变量

+ 5 - 3
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue

@@ -114,7 +114,7 @@
 <script setup lang="ts">
 import { onMounted, ref, unref } from 'vue'
 import dayjs from 'dayjs'
-import { ElMessage, ElTag, ElSelect, ElOption } from 'element-plus'
+import { useMessage } from '@/hooks/web/useMessage'
 import { DICT_TYPE } from '@/utils/dict'
 import { useTable } from '@/hooks/web/useTable'
 import { useI18n } from '@/hooks/web/useI18n'
@@ -122,7 +122,9 @@ import { FormExpose } from '@/components/Form'
 import type { SensitiveWordVO } from '@/api/system/sensitiveWord/types'
 import { rules, allSchemas } from './sensitiveWord.data'
 import * as SensitiveWordApi from '@/api/system/sensitiveWord'
+
 const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
 
 // ========== 列表相关 ==========
 const { register, tableObject, methods } = useTable<SensitiveWordVO>({
@@ -180,10 +182,10 @@ const submitForm = async () => {
         data.tags = tags.value
         if (actionType.value === 'create') {
           await SensitiveWordApi.createSensitiveWordApi(data)
-          ElMessage.success(t('common.createSuccess'))
+          message.success(t('common.createSuccess'))
         } else {
           await SensitiveWordApi.updateSensitiveWordApi(data)
-          ElMessage.success(t('common.updateSuccess'))
+          message.success(t('common.updateSuccess'))
         }
         // 操作成功,重新加载列表
         dialogVisible.value = false

+ 0 - 1
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue

@@ -118,7 +118,6 @@ import { useMessage } from '@/hooks/web/useMessage'
 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
 import { VxeGridInstance } from 'vxe-table'
 import { FormExpose } from '@/components/Form'
-import { ElForm, ElFormItem, ElInput } from 'element-plus'
 // 业务相关的 import
 import * as SmsTemplateApi from '@/api/system/sms/smsTemplate'
 import { rules, allSchemas } from './sms.template.data'

+ 5 - 3
yudao-ui-admin-vue3/src/views/system/tenant/index.vue

@@ -124,17 +124,19 @@
 <script setup lang="ts">
 import { ref, unref, onMounted } from 'vue'
 import dayjs from 'dayjs'
-import { ElMessage, ElTag, ElSelect, ElOption } from 'element-plus'
 import { DICT_TYPE } from '@/utils/dict'
 import { useTable } from '@/hooks/web/useTable'
 import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { FormExpose } from '@/components/Form'
 import type { TenantVO } from '@/api/system/tenant/types'
 import { rules, allSchemas } from './tenant.data'
 import * as TenantApi from '@/api/system/tenant'
 import { getTenantPackageList } from '@/api/system/tenantPackage'
 import { TenantPackageVO } from '@/api/system/tenantPackage/types'
+
 const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
 
 // ========== 列表相关 ==========
 const { register, tableObject, methods } = useTable<TenantVO>({
@@ -205,11 +207,11 @@ const submitForm = async () => {
         if (actionType.value === 'create') {
           data.expireTime = dayjs(data.expireTime).valueOf().toString()
           await TenantApi.createTenantApi(data)
-          ElMessage.success(t('common.createSuccess'))
+          message.success(t('common.createSuccess'))
         } else {
           data.expireTime = dayjs(data.expireTime).valueOf().toString()
           await TenantApi.updateTenantApi(data)
-          ElMessage.success(t('common.updateSuccess'))
+          message.success(t('common.updateSuccess'))
         }
         // 操作成功,重新加载列表
         dialogVisible.value = false

+ 6 - 3
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue

@@ -94,13 +94,16 @@ import { handleTree } from '@/utils/tree'
 import { DICT_TYPE } from '@/utils/dict'
 import { useTable } from '@/hooks/web/useTable'
 import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { FormExpose } from '@/components/Form'
 import { TenantPackageVO } from '@/api/system/tenantPackage/types'
-import { ElMessage, ElCard, ElSwitch, ElTree } from 'element-plus'
 import { rules, allSchemas } from './tenantPackage.data'
 import * as TenantPackageApi from '@/api/system/tenantPackage'
 import { listSimpleMenusApi } from '@/api/system/menu'
+
+import { ElTree } from 'element-plus'
 const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
 
 const defaultProps = {
   children: 'children',
@@ -174,10 +177,10 @@ const submitForm = async () => {
         data.menuIds = treeRef.value!.getCheckedKeys(false) as string[]
         if (actionType.value === 'create') {
           await TenantPackageApi.createTenantPackageTypeApi(data)
-          ElMessage.success(t('common.createSuccess'))
+          message.success(t('common.createSuccess'))
         } else {
           await TenantPackageApi.updateTenantPackageTypeApi(data)
-          ElMessage.success(t('common.updateSuccess'))
+          message.success(t('common.updateSuccess'))
         }
         // 操作成功,重新加载列表
         dialogVisible.value = false

+ 1 - 17
yudao-ui-admin-vue3/src/views/system/user/index.vue

@@ -237,23 +237,6 @@
 </template>
 <script setup lang="ts">
 import { nextTick, onMounted, reactive, ref, unref, watch } from 'vue'
-import {
-  ElTag,
-  ElInput,
-  ElCard,
-  ElTree,
-  ElTreeSelect,
-  ElSelect,
-  ElOption,
-  ElTransfer,
-  ElForm,
-  ElFormItem,
-  ElUpload,
-  ElSwitch,
-  ElCheckbox,
-  UploadInstance,
-  UploadRawFile
-} from 'element-plus'
 import { handleTree } from '@/utils/tree'
 import { useI18n } from '@/hooks/web/useI18n'
 import { FormExpose } from '@/components/Form'
@@ -272,6 +255,7 @@ import { getAccessToken, getTenantId } from '@/utils/auth'
 import { useMessage } from '@/hooks/web/useMessage'
 import { VxeGridInstance } from 'vxe-table'
 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
+import { ElTree, UploadInstance, UploadRawFile } from 'element-plus'
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗

+ 1 - 1
yudao-ui-admin-vue3/tsconfig.json

@@ -34,6 +34,6 @@
     ],
     "typeRoots": ["./node_modules/@types/", "./types"]
   },
-  "include": ["src/**/*", "types/**/*.d.ts"],
+  "include": ["src/**/*", "types/**/*.d.ts", "src/auto-components.d.ts"],
   "exclude": ["dist", "node_modules"]
 }

+ 16 - 0
yudao-ui-admin-vue3/vite.config.ts

@@ -6,6 +6,8 @@ import WindiCSS from 'vite-plugin-windicss'
 import VueJsx from '@vitejs/plugin-vue-jsx'
 import EslintPlugin from 'vite-plugin-eslint'
 import VueI18n from '@intlify/vite-plugin-vue-i18n'
+import Components from 'unplugin-vue-components/vite'
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
 import { createStyleImportPlugin, ElementPlusResolve, VxeTableResolve } from 'vite-plugin-style-import'
 import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
 import PurgeIcons from 'vite-plugin-purge-icons'
@@ -70,6 +72,20 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
             return `vxe-table/es/${name}/style.css`
           }
         }]
+      }),
+       Components({
+        // 要搜索组件的目录的相对路径
+        dirs: ['src/components'],
+        // 组件的有效文件扩展名
+        extensions: ['vue', 'md'],
+         // 搜索子目录
+        deep: true,
+        include: [/\.vue$/, /\.vue\?vue/],
+        // 生成自定义 `auto-components.d.ts` 全局声明
+        dts: 'src/auto-components.d.ts',
+        // 自定义组件的解析器
+        resolvers: [ElementPlusResolver()],
+        exclude: [/[\\/]node_modules[\\/]/]
       }),
       EslintPlugin({
         cache: false,