From 3537672a52b9863763bd9d9509e3b530e833398d Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Wed, 2 Nov 2022 13:50:41 +0800 Subject: [PATCH 01/12] fix: captcha enable --- yudao-ui-admin-vue3/.env | 2 +- yudao-ui-admin-vue3/pnpm-lock.yaml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/yudao-ui-admin-vue3/.env b/yudao-ui-admin-vue3/.env index a7bbb6b7f6..e5996ca53c 100644 --- a/yudao-ui-admin-vue3/.env +++ b/yudao-ui-admin-vue3/.env @@ -11,4 +11,4 @@ VITE_OPEN=true VITE_APP_TENANT_ENABLE=true # 验证码的开关 -VITE_APP_CAPTCHA_ENABLE=false +VITE_APP_CAPTCHA_ENABLE=true diff --git a/yudao-ui-admin-vue3/pnpm-lock.yaml b/yudao-ui-admin-vue3/pnpm-lock.yaml index 065eebbb8d..bea67079ba 100644 --- a/yudao-ui-admin-vue3/pnpm-lock.yaml +++ b/yudao-ui-admin-vue3/pnpm-lock.yaml @@ -35,6 +35,7 @@ specifiers: eslint-plugin-prettier: ^4.2.1 eslint-plugin-vue: ^9.7.0 intro.js: ^6.0.0 + js-cookie: ^3.0.1 jsencrypt: ^3.3.0 less: ^4.1.3 lint-staged: ^13.0.3 @@ -93,6 +94,7 @@ dependencies: echarts-wordcloud: 2.0.0_echarts@5.4.0 element-plus: 2.2.19_vue@3.2.41 intro.js: 6.0.0 + js-cookie: 3.0.1 jsencrypt: 3.3.0 lodash-es: 4.17.21 mitt: 3.0.0 @@ -4471,6 +4473,11 @@ packages: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} dev: true + /js-cookie/3.0.1: + resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==} + engines: {node: '>=12'} + dev: false + /js-sdsl/4.1.5: resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} dev: true From e1b4ab2d1b68bb55384df9a8cd1468a84e4b6d57 Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Thu, 3 Nov 2022 10:47:21 +0800 Subject: [PATCH 02/12] fix: jsencrypt error --- yudao-ui-admin-vue3/package.json | 2 +- yudao-ui-admin-vue3/pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/yudao-ui-admin-vue3/package.json b/yudao-ui-admin-vue3/package.json index b4fb8db1eb..a43b1b7f4f 100644 --- a/yudao-ui-admin-vue3/package.json +++ b/yudao-ui-admin-vue3/package.json @@ -38,7 +38,7 @@ "echarts-wordcloud": "^2.0.0", "element-plus": "2.2.19", "intro.js": "^6.0.0", - "jsencrypt": "^3.3.0", + "jsencrypt": "^3.3.1", "js-cookie": "^3.0.1", "lodash-es": "^4.17.21", "mitt": "^3.0.0", diff --git a/yudao-ui-admin-vue3/pnpm-lock.yaml b/yudao-ui-admin-vue3/pnpm-lock.yaml index bea67079ba..592c89b806 100644 --- a/yudao-ui-admin-vue3/pnpm-lock.yaml +++ b/yudao-ui-admin-vue3/pnpm-lock.yaml @@ -36,7 +36,7 @@ specifiers: eslint-plugin-vue: ^9.7.0 intro.js: ^6.0.0 js-cookie: ^3.0.1 - jsencrypt: ^3.3.0 + jsencrypt: ^3.3.1 less: ^4.1.3 lint-staged: ^13.0.3 lodash-es: ^4.17.21 @@ -95,7 +95,7 @@ dependencies: element-plus: 2.2.19_vue@3.2.41 intro.js: 6.0.0 js-cookie: 3.0.1 - jsencrypt: 3.3.0 + jsencrypt: 3.3.1 lodash-es: 4.17.21 mitt: 3.0.0 nprogress: 0.2.0 @@ -4497,8 +4497,8 @@ packages: argparse: 2.0.1 dev: true - /jsencrypt/3.3.0: - resolution: {integrity: sha512-OPfQMUU3pJ6KKTvKzr83jePHfyD1zWiWeLtRU9yIWjcbaRWm8MuXIu1/eQlDXPwDZrUjZy+9HVamS2Kmwrvz/Q==} + /jsencrypt/3.3.1: + resolution: {integrity: sha512-dVvV54GdFuJgmEKn+oBiaifDMen4p6o6j/lJh0OVMcouME8sST0bJ7bldIgKBQk4za0zyGn0/pm4vOznR25mLw==} dev: false /jsesc/2.5.2: From 49237ad9666e2dfe9208abaf338a8dc1fdf466e8 Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Thu, 3 Nov 2022 14:33:30 +0800 Subject: [PATCH 03/12] feat: add vxe crud schemas --- .../src/hooks/web/useVxeCrudSchemas.ts | 245 ++++++++++++++++++ .../src/hooks/web/useVxeGrid.ts | 59 +++++ yudao-ui-admin-vue3/src/types/table.d.ts | 6 + .../src/views/system/post/index.vue | 186 +------------ .../src/views/system/post/indexd.vue | 194 -------------- .../src/views/system/post/post.data.ts | 32 ++- 6 files changed, 346 insertions(+), 376 deletions(-) create mode 100644 yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts create mode 100644 yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts delete mode 100644 yudao-ui-admin-vue3/src/views/system/post/indexd.vue diff --git a/yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts b/yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts new file mode 100644 index 0000000000..94b8750edb --- /dev/null +++ b/yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts @@ -0,0 +1,245 @@ +import { DescriptionsSchema } from '@/types/descriptions' +import { getIntDictOptions } from '@/utils/dict' +import { reactive } from 'vue' +import { + FormItemRenderOptions, + VxeFormItemProps, + VxeGridPropTypes, + VxeTableDefines +} from 'vxe-table' +import { eachTree } from 'xe-utils' +import { useI18n } from '@/hooks/web/useI18n' +import { VxeTableColumn } from '@/types/table' + +export type VxeCrudSchema = Omit & { + field: string + title?: string + search?: CrudSearchParams + table?: CrudTableParams + form?: CrudFormParams + detail?: CrudDescriptionsParams + print?: boolean + children?: VxeCrudSchema[] + dictType?: string +} +type CrudSearchParams = { + // 是否显示在查询项 + show?: boolean +} & Omit + +type CrudTableParams = { + // 是否显示表头 + show?: boolean +} & Omit + +type CrudFormParams = { + // 是否显示表单项 + show?: boolean +} & Omit + +type CrudDescriptionsParams = { + // 是否显示表单项 + show?: boolean +} & Omit + +interface VxeAllSchemas { + searchSchema: VxeFormItemProps[] + tableSchema: VxeGridPropTypes.Columns + formSchema: VxeFormItemProps[] + detailSchema: DescriptionsSchema[] + printSchema: VxeTableDefines.ColumnInfo[] +} + +// 过滤所有结构 +export const useVxeCrudSchemas = ( + crudSchema: VxeCrudSchema[] +): { + allSchemas: VxeAllSchemas +} => { + // 所有结构数据 + const allSchemas = reactive({ + searchSchema: [], + tableSchema: [], + formSchema: [], + detailSchema: [], + printSchema: [] + }) + + const searchSchema = filterSearchSchema(crudSchema) + allSchemas.searchSchema = searchSchema || [] + + const tableSchema = filterTableSchema(crudSchema) + allSchemas.tableSchema = tableSchema || [] + + const formSchema = filterFormSchema(crudSchema) + allSchemas.formSchema = formSchema + + const detailSchema = filterDescriptionsSchema(crudSchema) + allSchemas.detailSchema = detailSchema + + const printSchema = filterPrintSchema(crudSchema) + allSchemas.printSchema = printSchema + + return { + allSchemas + } +} + +// 过滤 Search 结构 +const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] => { + const searchSchema: VxeFormItemProps[] = [] + const { t } = useI18n() + eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { + // 判断是否显示 + if (schemaItem?.search?.show) { + let itemRenderName = schemaItem?.search?.itemRender?.name || '$input' + const options: any[] = [] + let itemRender: FormItemRenderOptions = { + name: itemRenderName, + props: { placeholder: t('common.inputText') } + } + if (schemaItem.dictType) { + const allOptions = { label: '全部', value: '' } + options.push(allOptions) + getIntDictOptions(schemaItem.dictType).forEach((dict) => { + options.push(dict) + }) + itemRender.options = options + if (!schemaItem.search.itemRender?.name) itemRenderName = '$select' + itemRender = { + name: itemRenderName, + options: options, + props: { placeholder: t('common.selectText') } + } + } + + const searchSchemaItem = { + // 默认为 input + span: 6, + itemRender: itemRender, + ...schemaItem.search, + field: schemaItem.field, + title: schemaItem.search?.title || schemaItem.title + } + // 删除不必要的字段 + delete searchSchemaItem.show + + searchSchema.push(searchSchemaItem) + } + }) + // 添加搜索按钮 + const buttons: VxeFormItemProps = { + span: 24, + align: 'center', + collapseNode: true, + itemRender: { + name: '$buttons', + children: [ + { props: { type: 'submit', content: t('common.query'), status: 'primary' } }, + { props: { type: 'reset', content: t('common.reset') } } + ] + } + } + searchSchema.push(buttons) + return searchSchema +} + +// 过滤 table 结构 +const filterTableSchema = (crudSchema: VxeCrudSchema[]): VxeGridPropTypes.Columns => { + const tableSchema: VxeGridPropTypes.Columns = [] + eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { + // 判断是否显示 + if (schemaItem?.table?.show !== false) { + const tableSchemaItem = { + ...schemaItem.table, + field: schemaItem.field, + title: schemaItem.table?.title || schemaItem.title + } + + // 删除不必要的字段 + delete tableSchemaItem.show + + tableSchema.push(tableSchemaItem) + } + }) + return tableSchema +} + +// 过滤 form 结构 +const filterFormSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] => { + const formSchema: VxeFormItemProps[] = [] + const { t } = useI18n() + eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { + // 判断是否显示 + if (schemaItem?.form?.show !== false) { + let itemRenderName = schemaItem?.form?.itemRender?.name || '$input' + let itemRender: FormItemRenderOptions = { + name: itemRenderName, + props: { placeholder: t('common.inputText') } + } + if (schemaItem.dictType) { + if (!(schemaItem.form && schemaItem.form.itemRender?.name)) itemRenderName = '$select' + itemRender = { + name: itemRenderName, + options: getIntDictOptions(schemaItem.dictType), + props: { placeholder: t('common.selectText') } + } + } + const formSchemaItem = { + // 默认为 input + itemRender: itemRender, + ...schemaItem.form, + field: schemaItem.field, + title: schemaItem.form?.title || schemaItem.title + } + + // 删除不必要的字段 + delete formSchemaItem.show + + formSchema.push(formSchemaItem) + } + }) + + return formSchema +} + +// 过滤 descriptions 结构 +const filterDescriptionsSchema = (crudSchema: VxeCrudSchema[]): DescriptionsSchema[] => { + const descriptionsSchema: DescriptionsSchema[] = [] + + eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { + // 判断是否显示 + if (schemaItem?.detail?.show !== false) { + const descriptionsSchemaItem = { + ...schemaItem.detail, + field: schemaItem.field, + label: schemaItem.detail?.label || schemaItem.title + } + + // 删除不必要的字段 + delete descriptionsSchemaItem.show + + descriptionsSchema.push(descriptionsSchemaItem) + } + }) + + return descriptionsSchema +} + +// 过滤 打印 结构 +const filterPrintSchema = (crudSchema: VxeCrudSchema[]): any[] => { + const printSchema: any[] = [] + + eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { + // 判断是否显示 + if (schemaItem?.detail?.show !== false) { + const printSchemaItem = { + field: schemaItem.field + } + + printSchema.push(printSchemaItem) + } + }) + + return printSchema +} diff --git a/yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts b/yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts new file mode 100644 index 0000000000..16f665f2e1 --- /dev/null +++ b/yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts @@ -0,0 +1,59 @@ +import { reactive } from 'vue' +import { VxeGridProps } from 'vxe-table' + +export const useVxeGrid = (allSchemas, getPageApi) => { + const gridOptions = reactive({ + loading: false, + rowConfig: { + keyField: 'id', + isHover: true + }, + toolbarConfig: { + custom: true, + slots: { buttons: 'toolbar_buttons' } + }, + printConfig: { + columns: allSchemas.printSchema + }, + formConfig: { + titleWidth: 100, + titleAlign: 'right', + items: allSchemas.searchSchema + }, + columns: allSchemas.tableSchema, + pagerConfig: { + border: false, + background: false, + perfect: true, + pageSize: 10, + pagerCount: 7, + pageSizes: [5, 10, 15, 20, 50, 100, 200, 500], + layouts: [ + 'PrevJump', + 'PrevPage', + 'Jump', + 'PageCount', + 'NextPage', + 'NextJump', + 'Sizes', + 'Total' + ] + }, + proxyConfig: { + seq: true, // 启用动态序号代理(分页之后索引自动计算为当前页的起始序号) + form: true, // 启用表单代理,当点击表单提交按钮时会自动触发 reload 行为 + props: { result: 'list', total: 'total' }, + ajax: { + query: ({ page, form }) => { + const queryParams = Object.assign({}, form) + queryParams.pageSize = page.pageSize + queryParams.pageNo = page.currentPage + return new Promise(async (resolve) => { + resolve(await getPageApi(queryParams)) + }) + } + } + } + }) + return gridOptions +} diff --git a/yudao-ui-admin-vue3/src/types/table.d.ts b/yudao-ui-admin-vue3/src/types/table.d.ts index 5adf91f473..3294234b87 100644 --- a/yudao-ui-admin-vue3/src/types/table.d.ts +++ b/yudao-ui-admin-vue3/src/types/table.d.ts @@ -4,6 +4,12 @@ export type TableColumn = { children?: TableColumn[] } & Recordable +export type VxeTableColumn = { + field: string + title?: string + children?: TableColumn[] +} & Recordable + export type TableSlotDefault = { row: Recordable column: TableColumn diff --git a/yudao-ui-admin-vue3/src/views/system/post/index.vue b/yudao-ui-admin-vue3/src/views/system/post/index.vue index c7b35b9c82..eaee48262c 100644 --- a/yudao-ui-admin-vue3/src/views/system/post/index.vue +++ b/yudao-ui-admin-vue3/src/views/system/post/index.vue @@ -1,24 +1,18 @@ - - diff --git a/yudao-ui-admin-vue3/src/views/system/post/post.data.ts b/yudao-ui-admin-vue3/src/views/system/post/post.data.ts index a3383241f1..6b19a98f1c 100644 --- a/yudao-ui-admin-vue3/src/views/system/post/post.data.ts +++ b/yudao-ui-admin-vue3/src/views/system/post/post.data.ts @@ -1,7 +1,7 @@ import { reactive } from 'vue' import { useI18n } from '@/hooks/web/useI18n' import { required } from '@/utils/formRules' -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' import { DICT_TYPE } from '@/utils/dict' const { t } = useI18n() // 国际化 @@ -13,9 +13,9 @@ export const rules = reactive({ }) // CrudSchema -const crudSchemas = reactive([ +const crudSchemas = reactive([ { - label: t('common.index'), + title: t('common.index'), field: 'id', type: 'index', form: { @@ -26,42 +26,54 @@ const crudSchemas = reactive([ } }, { - label: '岗位名称', + title: '岗位名称', field: 'name', search: { show: true } }, { - label: '岗位编码', + title: '岗位编码', field: 'code', search: { show: true } }, { - label: '岗位顺序', + title: '岗位顺序', field: 'sort' }, { - label: t('common.status'), + title: t('common.status'), field: 'status', dictType: DICT_TYPE.COMMON_STATUS, + table: { + slots: { + default: 'status_default' + } + }, search: { show: true } }, { - label: t('common.createTime'), + title: t('common.createTime'), field: 'createTime', form: { show: false } }, { - label: t('table.action'), + title: t('table.action'), field: 'action', width: '240px', + table: { + width: '240px', + showOverflow: true, + slots: { + default: 'action_default' + } + }, form: { show: false }, @@ -70,4 +82,4 @@ const crudSchemas = reactive([ } } ]) -export const { allSchemas } = useCrudSchemas(crudSchemas) +export const { allSchemas } = useVxeCrudSchemas(crudSchemas) From 3eb11e2658e9cbe112793dd189833ab1aabb3b95 Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Thu, 3 Nov 2022 16:55:01 +0800 Subject: [PATCH 04/12] refactor: refactor axios --- yudao-ui-admin-vue3/src/api/bpm/form/index.ts | 3 +- .../src/api/bpm/leave/index.ts | 3 +- .../src/api/bpm/model/index.ts | 3 +- .../src/api/bpm/processInstance/index.ts | 3 +- yudao-ui-admin-vue3/src/api/bpm/task/index.ts | 4 +- .../src/api/bpm/taskAssignRule/index.ts | 3 +- .../src/api/bpm/userGroup/index.ts | 3 +- .../src/api/infra/apiAccessLog/index.ts | 4 +- .../src/api/infra/apiErrorLog/index.ts | 4 +- .../src/api/infra/codegen/index.ts | 4 +- .../src/api/infra/config/index.ts | 4 +- .../src/api/infra/dataSourceConfig/index.ts | 4 +- .../src/api/infra/dbDoc/index.ts | 4 +- .../src/api/infra/fileConfig/index.ts | 4 +- .../src/api/infra/fileList/index.ts | 4 +- .../src/api/infra/job/index.ts | 4 +- .../src/api/infra/jobLog/index.ts | 4 +- .../src/api/infra/redis/index.ts | 4 +- yudao-ui-admin-vue3/src/api/login/index.ts | 4 +- yudao-ui-admin-vue3/src/api/pay/app/index.ts | 4 +- .../src/api/pay/channel/index.ts | 4 +- .../src/api/pay/merchant/index.ts | 4 +- .../src/api/pay/order/index.ts | 4 +- .../src/api/pay/refund/index.ts | 4 +- .../src/api/system/dept/index.ts | 4 +- .../src/api/system/dict/dict.data.ts | 4 +- .../src/api/system/dict/dict.type.ts | 4 +- .../src/api/system/errorCode/index.ts | 4 +- .../src/api/system/loginLog/index.ts | 4 +- .../src/api/system/menu/index.ts | 4 +- .../src/api/system/notice/index.ts | 4 +- .../src/api/system/oauth2/client.ts | 4 +- .../src/api/system/oauth2/token.ts | 4 +- .../src/api/system/operatelog/index.ts | 4 +- .../src/api/system/permission/index.ts | 4 +- .../src/api/system/post/index.ts | 4 +- .../src/api/system/role/index.ts | 4 +- .../src/api/system/sensitiveWord/index.ts | 4 +- .../src/api/system/sms/smsChannel/index.ts | 4 +- .../src/api/system/sms/smsLog/index.ts | 4 +- .../src/api/system/sms/smsTemplate/index.ts | 4 +- .../src/api/system/tenant/index.ts | 4 +- .../src/api/system/tenantPackage/index.ts | 4 +- .../src/api/system/user/index.ts | 4 +- .../src/api/system/user/profile/index.ts | 4 +- yudao-ui-admin-vue3/src/config/axios/index.ts | 261 +++--------------- .../src/config/axios/service.ts | 229 +++++++++++++++ yudao-ui-admin-vue3/src/hooks/web/useAxios.ts | 60 ---- yudao-ui-admin-vue3/src/router/index.ts | 2 +- 49 files changed, 314 insertions(+), 412 deletions(-) create mode 100644 yudao-ui-admin-vue3/src/config/axios/service.ts delete mode 100644 yudao-ui-admin-vue3/src/hooks/web/useAxios.ts diff --git a/yudao-ui-admin-vue3/src/api/bpm/form/index.ts b/yudao-ui-admin-vue3/src/api/bpm/form/index.ts index 23f2fce0bf..15856c5a11 100644 --- a/yudao-ui-admin-vue3/src/api/bpm/form/index.ts +++ b/yudao-ui-admin-vue3/src/api/bpm/form/index.ts @@ -1,6 +1,5 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { FormVO } from './types' -const request = useAxios() // 创建工作流的表单定义 export const createFormApi = async (data: FormVO) => { diff --git a/yudao-ui-admin-vue3/src/api/bpm/leave/index.ts b/yudao-ui-admin-vue3/src/api/bpm/leave/index.ts index 7f266cdf43..567fa58076 100644 --- a/yudao-ui-admin-vue3/src/api/bpm/leave/index.ts +++ b/yudao-ui-admin-vue3/src/api/bpm/leave/index.ts @@ -1,6 +1,5 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { LeaveVO } from './types' -const request = useAxios() // 创建请假申请 export const createLeaveApi = async (data: LeaveVO) => { diff --git a/yudao-ui-admin-vue3/src/api/bpm/model/index.ts b/yudao-ui-admin-vue3/src/api/bpm/model/index.ts index 0d95727e40..a2a0c7780d 100644 --- a/yudao-ui-admin-vue3/src/api/bpm/model/index.ts +++ b/yudao-ui-admin-vue3/src/api/bpm/model/index.ts @@ -1,6 +1,5 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { ModelVO } from './types' -const request = useAxios() export const getModelPageApi = async (params) => { return await request.get({ url: '/bpm/model/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/bpm/processInstance/index.ts b/yudao-ui-admin-vue3/src/api/bpm/processInstance/index.ts index 48715f8532..a56b1d4200 100644 --- a/yudao-ui-admin-vue3/src/api/bpm/processInstance/index.ts +++ b/yudao-ui-admin-vue3/src/api/bpm/processInstance/index.ts @@ -1,6 +1,5 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { ProcessInstanceVO } from './types' -const request = useAxios() export const getMyProcessInstancePageApi = async (params) => { return await request.get({ url: '/bpm/process-instance/my-page', params }) diff --git a/yudao-ui-admin-vue3/src/api/bpm/task/index.ts b/yudao-ui-admin-vue3/src/api/bpm/task/index.ts index c663a43210..d214d17548 100644 --- a/yudao-ui-admin-vue3/src/api/bpm/task/index.ts +++ b/yudao-ui-admin-vue3/src/api/bpm/task/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' export const getTodoTaskPage = async (params) => { return await request.get({ url: '/bpm/task/todo-page', params }) diff --git a/yudao-ui-admin-vue3/src/api/bpm/taskAssignRule/index.ts b/yudao-ui-admin-vue3/src/api/bpm/taskAssignRule/index.ts index f6105293d4..9bdbdf0e24 100644 --- a/yudao-ui-admin-vue3/src/api/bpm/taskAssignRule/index.ts +++ b/yudao-ui-admin-vue3/src/api/bpm/taskAssignRule/index.ts @@ -1,6 +1,5 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { TaskAssignVO } from './types' -const request = useAxios() export const getTaskAssignRuleList = async (params) => { return await request.get({ url: '/bpm/task-assign-rule/list', params }) diff --git a/yudao-ui-admin-vue3/src/api/bpm/userGroup/index.ts b/yudao-ui-admin-vue3/src/api/bpm/userGroup/index.ts index e7cd3f507a..e61ebf36d2 100644 --- a/yudao-ui-admin-vue3/src/api/bpm/userGroup/index.ts +++ b/yudao-ui-admin-vue3/src/api/bpm/userGroup/index.ts @@ -1,6 +1,5 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { UserGroupVO } from './types' -const request = useAxios() // 创建用户组 export const createUserGroupApi = async (data: UserGroupVO) => { diff --git a/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts b/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts index 9f3614f5a2..e058abd217 100644 --- a/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询列表API 访问日志 export const getApiAccessLogPageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts b/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts index e8209b2b40..e38a1de88b 100644 --- a/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询列表API 访问日志 export const getApiErrorLogPageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts b/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts index 8b4c30f979..54f00ff0e3 100644 --- a/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { CodegenUpdateReqVO, CodegenCreateListReqVO } from './types' -const request = useAxios() - // 查询列表代码生成表定义 export const getCodegenTablePageApi = (params) => { return request.get({ url: '/infra/codegen/table/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/infra/config/index.ts b/yudao-ui-admin-vue3/src/api/infra/config/index.ts index d3c042a576..38a8eeb6d3 100644 --- a/yudao-ui-admin-vue3/src/api/infra/config/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/config/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { ConfigVO } from './types' -const request = useAxios() - // 查询参数列表 export const getConfigPageApi = (params) => { return request.get({ url: '/infra/config/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/infra/dataSourceConfig/index.ts b/yudao-ui-admin-vue3/src/api/infra/dataSourceConfig/index.ts index e4479ef446..a0a321794e 100644 --- a/yudao-ui-admin-vue3/src/api/infra/dataSourceConfig/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/dataSourceConfig/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { DataSourceConfigVO } from './types' -const request = useAxios() - // 查询数据源配置列表 export const getDataSourceConfigListApi = () => { return request.get({ url: '/infra/data-source-config/list' }) diff --git a/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts b/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts index 2fd7716352..11bce4731d 100644 --- a/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 导出Html export const exportHtmlApi = () => { diff --git a/yudao-ui-admin-vue3/src/api/infra/fileConfig/index.ts b/yudao-ui-admin-vue3/src/api/infra/fileConfig/index.ts index 105b6004b7..2ba10879e6 100644 --- a/yudao-ui-admin-vue3/src/api/infra/fileConfig/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/fileConfig/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { FileConfigVO } from './types' -const request = useAxios() - // 查询文件配置列表 export const getFileConfigPageApi = (params) => { return request.get({ url: '/infra/file-config/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/infra/fileList/index.ts b/yudao-ui-admin-vue3/src/api/infra/fileList/index.ts index 6df37112a8..5c9c324fa8 100644 --- a/yudao-ui-admin-vue3/src/api/infra/fileList/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/fileList/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询文件列表 export const getFilePageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/infra/job/index.ts b/yudao-ui-admin-vue3/src/api/infra/job/index.ts index 985562da60..15c73d60cb 100644 --- a/yudao-ui-admin-vue3/src/api/infra/job/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/job/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { JobVO } from './types' -const request = useAxios() - // 任务列表 export const getJobPageApi = (params) => { return request.get({ url: '/infra/job/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts b/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts index a82724ddf0..349a23fb56 100644 --- a/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 任务日志列表 export const getJobLogPageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/infra/redis/index.ts b/yudao-ui-admin-vue3/src/api/infra/redis/index.ts index d22779aae2..1214a1daba 100644 --- a/yudao-ui-admin-vue3/src/api/infra/redis/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/redis/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' /** * 获取redis 监控信息 diff --git a/yudao-ui-admin-vue3/src/api/login/index.ts b/yudao-ui-admin-vue3/src/api/login/index.ts index 6b53f84e5e..3f9c9a93f4 100644 --- a/yudao-ui-admin-vue3/src/api/login/index.ts +++ b/yudao-ui-admin-vue3/src/api/login/index.ts @@ -1,9 +1,7 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { getRefreshToken } from '@/utils/auth' import type { UserLoginVO } from './types' -const request = useAxios() - export interface CodeImgResult { captchaOnOff: boolean img: string diff --git a/yudao-ui-admin-vue3/src/api/pay/app/index.ts b/yudao-ui-admin-vue3/src/api/pay/app/index.ts index 19885e3a63..501fb20243 100644 --- a/yudao-ui-admin-vue3/src/api/pay/app/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/app/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { AppVO } from './types' -const request = useAxios() - // 查询列表支付应用 export const getAppPageApi = (params) => { return request.get({ url: '/pay/app/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/pay/channel/index.ts b/yudao-ui-admin-vue3/src/api/pay/channel/index.ts index 05fdddb301..3fbd54def2 100644 --- a/yudao-ui-admin-vue3/src/api/pay/channel/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/channel/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { ChannelVO } from './types' -const request = useAxios() - // 查询列表支付渠道 export const getChannelPageApi = (params) => { return request.get({ url: '/pay/channel/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts b/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts index d6aba8dd26..749591c5c3 100644 --- a/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { MerchantVO } from './types' -const request = useAxios() - // 查询列表支付商户 export const getMerchantPageApi = (params) => { return request.get({ url: '/pay/merchant/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/pay/order/index.ts b/yudao-ui-admin-vue3/src/api/pay/order/index.ts index 662b2ebeee..9f4f18bc16 100644 --- a/yudao-ui-admin-vue3/src/api/pay/order/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/order/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { OrderVO } from './types' -const request = useAxios() - // 查询列表支付订单 export const getOrderPageApi = async (params) => { return await request.get({ url: '/pay/order/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/pay/refund/index.ts b/yudao-ui-admin-vue3/src/api/pay/refund/index.ts index 55185b7e0a..45d9bc9adf 100644 --- a/yudao-ui-admin-vue3/src/api/pay/refund/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/refund/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { RefundVO } from './types' -const request = useAxios() - // 查询列表退款订单 export const getRefundPageApi = (params) => { return request.get({ url: '/pay/refund/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/dept/index.ts b/yudao-ui-admin-vue3/src/api/system/dept/index.ts index 48d3b949cb..5e602d0672 100644 --- a/yudao-ui-admin-vue3/src/api/system/dept/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/dept/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { DeptVO, DeptListReqVO } from './types' -const request = useAxios() - // 查询部门(精简)列表 export const listSimpleDeptApi = () => { return request.get({ url: '/system/dept/list-all-simple' }) diff --git a/yudao-ui-admin-vue3/src/api/system/dict/dict.data.ts b/yudao-ui-admin-vue3/src/api/system/dict/dict.data.ts index dd9e9ec883..fd97a2dc9c 100644 --- a/yudao-ui-admin-vue3/src/api/system/dict/dict.data.ts +++ b/yudao-ui-admin-vue3/src/api/system/dict/dict.data.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { DictDataVO, DictDataPageReqVO, DictDataExportReqVO } from './types' -const request = useAxios() - // 查询字典数据(精简)列表 export const listSimpleDictDataApi = () => { return request.get({ url: '/system/dict-data/list-all-simple' }) diff --git a/yudao-ui-admin-vue3/src/api/system/dict/dict.type.ts b/yudao-ui-admin-vue3/src/api/system/dict/dict.type.ts index 7c2475c5df..22e6411e74 100644 --- a/yudao-ui-admin-vue3/src/api/system/dict/dict.type.ts +++ b/yudao-ui-admin-vue3/src/api/system/dict/dict.type.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { DictTypeVO, DictTypePageReqVO, DictTypeExportReqVO } from './types' -const request = useAxios() - // 查询字典(精简)列表 export const listSimpleDictTypeApi = () => { return request.get({ url: '/system/dict-type/list-all-simple' }) diff --git a/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts b/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts index fe3f128cca..da3a8e64db 100644 --- a/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { ErrorCodeVO } from './types' -const request = useAxios() - // 查询错误码列表 export const getErrorCodePageApi = (params) => { return request.get({ url: '/system/error-code/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts b/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts index f117439f9d..32c2d9796c 100644 --- a/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询登录日志列表 export const getLoginLogPageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/system/menu/index.ts b/yudao-ui-admin-vue3/src/api/system/menu/index.ts index 7baf8adbce..2fb9cc361c 100644 --- a/yudao-ui-admin-vue3/src/api/system/menu/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/menu/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { MenuVO } from './types' -const request = useAxios() - // 查询菜单(精简)列表 export const listSimpleMenusApi = () => { return request.get({ url: '/system/menu/list-all-simple' }) diff --git a/yudao-ui-admin-vue3/src/api/system/notice/index.ts b/yudao-ui-admin-vue3/src/api/system/notice/index.ts index c081359dcc..7ccafad4a2 100644 --- a/yudao-ui-admin-vue3/src/api/system/notice/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/notice/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { NoticeVO } from './types' -const request = useAxios() - // 查询公告列表 export const getNoticePageApi = (params) => { return request.get({ url: '/system/notice/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts b/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts index 981ef1843f..11b696f5cd 100644 --- a/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts +++ b/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { OAuth2ClientVo } from './client.types' -const request = useAxios() - // 查询 OAuth2列表 export const getOAuth2ClientPageApi = (params) => { return request.get({ url: '/system/oauth2-client/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts b/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts index ebe94bb5c4..d14ed27998 100644 --- a/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts +++ b/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询 token列表 export const getAccessTokenPageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts b/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts index aa55e1a854..bf990bb368 100644 --- a/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询操作日志列表 export const getOperateLogPageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/system/permission/index.ts b/yudao-ui-admin-vue3/src/api/system/permission/index.ts index f498826eaf..e7e87e7aa4 100644 --- a/yudao-ui-admin-vue3/src/api/system/permission/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/permission/index.ts @@ -1,12 +1,10 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { PermissionAssignRoleDataScopeReqVO, PermissionAssignRoleMenuReqVO, PermissionAssignUserRoleReqVO } from './types' -const request = useAxios() - // 查询角色拥有的菜单权限 export const listRoleMenusApi = async (roleId: number) => { return await request.get({ url: '/system/permission/list-role-resources?roleId=' + roleId }) diff --git a/yudao-ui-admin-vue3/src/api/system/post/index.ts b/yudao-ui-admin-vue3/src/api/system/post/index.ts index e2703d08d0..19f38657a1 100644 --- a/yudao-ui-admin-vue3/src/api/system/post/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/post/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { PostVO, PostPageReqVO, PostExportReqVO } from './types' -const request = useAxios() - // 查询岗位列表 export const getPostPageApi = async (params: PostPageReqVO) => { return await request.get({ url: '/system/post/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/role/index.ts b/yudao-ui-admin-vue3/src/api/system/role/index.ts index c5b3589f0d..efbb75d48f 100644 --- a/yudao-ui-admin-vue3/src/api/system/role/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/role/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { RoleVO } from './types' -const request = useAxios() - // 查询角色列表 export const getRolePageApi = async (params) => { return await request.get({ url: '/system/role/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts b/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts index af2e832b80..4ad3f8df12 100644 --- a/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { SensitiveWordVO } from './types' -const request = useAxios() - // 查询敏感词列表 export const getSensitiveWordPageApi = (params) => { return request.get({ url: '/system/sensitive-word/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/sms/smsChannel/index.ts b/yudao-ui-admin-vue3/src/api/system/sms/smsChannel/index.ts index 95f6a4c7a2..213cd22962 100644 --- a/yudao-ui-admin-vue3/src/api/system/sms/smsChannel/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/sms/smsChannel/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { SmsChannelVO } from './types' -const request = useAxios() - // 查询短信渠道列表 export const getSmsChannelPageApi = (params) => { return request.get({ url: '/system/sms-channel/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts b/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts index 92401fa013..b7c518720d 100644 --- a/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询短信日志列表 export const getSmsLogPageApi = (params) => { diff --git a/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts b/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts index cfc9b4c085..b096f00a79 100644 --- a/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { SmsTemplateVO } from './types' -const request = useAxios() - // 查询短信模板列表 export const getSmsTemplatePageApi = (params) => { return request.get({ url: '/system/sms-template/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/tenant/index.ts b/yudao-ui-admin-vue3/src/api/system/tenant/index.ts index 851ac11d15..0eb134d8c6 100644 --- a/yudao-ui-admin-vue3/src/api/system/tenant/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/tenant/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { TenantVO } from './types' -const request = useAxios() - // 查询租户列表 export const getTenantPageApi = (params) => { return request.get({ url: '/system/tenant/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/tenantPackage/index.ts b/yudao-ui-admin-vue3/src/api/system/tenantPackage/index.ts index 69f8c3187c..420cf24a38 100644 --- a/yudao-ui-admin-vue3/src/api/system/tenantPackage/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/tenantPackage/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { TenantPackageVO } from './types' -const request = useAxios() - // 查询租户套餐列表 export const getTenantPackageTypePageApi = (params) => { return request.get({ url: '/system/tenant-package/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/user/index.ts b/yudao-ui-admin-vue3/src/api/system/user/index.ts index 5085d5c118..3c989d881e 100644 --- a/yudao-ui-admin-vue3/src/api/system/user/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/user/index.ts @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import type { UserVO } from './types' -const request = useAxios() - // 查询用户管理列表 export const getUserPageApi = (params) => { return request.get({ url: '/system/user/page', params }) diff --git a/yudao-ui-admin-vue3/src/api/system/user/profile/index.ts b/yudao-ui-admin-vue3/src/api/system/user/profile/index.ts index 34bbaf8c0a..2863452b49 100644 --- a/yudao-ui-admin-vue3/src/api/system/user/profile/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/user/profile/index.ts @@ -1,6 +1,4 @@ -import { useAxios } from '@/hooks/web/useAxios' - -const request = useAxios() +import request from '@/config/axios' // 查询用户个人信息 export const getUserProfileApi = () => { diff --git a/yudao-ui-admin-vue3/src/config/axios/index.ts b/yudao-ui-admin-vue3/src/config/axios/index.ts index 60dad6aa06..28a546d839 100644 --- a/yudao-ui-admin-vue3/src/config/axios/index.ts +++ b/yudao-ui-admin-vue3/src/config/axios/index.ts @@ -1,229 +1,46 @@ -import axios, { - AxiosInstance, - AxiosRequestConfig, - AxiosRequestHeaders, - AxiosResponse, - AxiosError -} from 'axios' -import { ElMessage, ElMessageBox, ElNotification } from 'element-plus' -import qs from 'qs' -import { config } from '@/config/axios/config' -import { getAccessToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth' -import errorCode from './errorCode' -import { useI18n } from '@/hooks/web/useI18n' -import { resetRouter } from '@/router' -import { useCache } from '@/hooks/web/useCache' +import { service } from './service' -const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE -const { result_code, base_url, request_timeout } = config +import { config } from './config' -// 需要忽略的提示。忽略后,自动 Promise.reject('error') -const ignoreMsgs = [ - '无效的刷新令牌', // 刷新令牌被删除时,不用提示 - '刷新令牌已过期' // 使用刷新令牌,刷新获取新的访问令牌时,结果因为过期失败,此时需要忽略。否则,会导致继续 401,无法跳转到登出界面 -] -// 是否显示重新登录 -export const isRelogin = { show: false } -// Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现 -// 请求队列 -let requestList: any[] = [] -// 是否正在刷新中 -let isRefreshToken = false +const { default_headers } = config -// 创建axios实例 -const service: AxiosInstance = axios.create({ - baseURL: base_url, // api 的 base_url - timeout: request_timeout, // 请求超时时间 - withCredentials: false // 禁用 Cookie 等信息 -}) - -// request拦截器 -service.interceptors.request.use( - (config: AxiosRequestConfig) => { - // 是否需要设置 token - const isToken = (config!.headers || {}).isToken === false - if (getAccessToken() && !isToken) { - ;(config as Recordable).headers.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token +const request = (option: any) => { + const { url, method, params, data, headersType, responseType } = option + return service({ + url: url, + method, + params, + data, + responseType: responseType, + headers: { + 'Content-Type': headersType || default_headers } - // 设置租户 - if (tenantEnable) { - const tenantId = getTenantId() - if (tenantId) (config as Recordable).headers.common['tenant-id'] = tenantId - } - const params = config.params || {} - const data = config.data || false - if ( - config.method?.toUpperCase() === 'POST' && - (config.headers as AxiosRequestHeaders)['Content-Type'] === - 'application/x-www-form-urlencoded' - ) { - config.data = qs.stringify(data) - } - // get参数编码 - if (config.method?.toUpperCase() === 'GET' && params) { - let url = config.url + '?' - for (const propName of Object.keys(params)) { - const value = params[propName] - if (value !== void 0 && value !== null && typeof value !== 'undefined') { - if (typeof value === 'object') { - for (const val of Object.keys(value)) { - const params = propName + '[' + val + ']' - const subPart = encodeURIComponent(params) + '=' - url += subPart + encodeURIComponent(value[val]) + '&' - } - } else { - url += `${propName}=${encodeURIComponent(value)}&` - } - } - } - // 给 get 请求加上时间戳参数,避免从缓存中拿数据 - // const now = new Date().getTime() - // params = params.substring(0, url.length - 1) + `?_t=${now}` - url = url.slice(0, -1) - config.params = {} - config.url = url - } - return config - }, - (error: AxiosError) => { - // Do something with request error - console.log(error) // for debug - Promise.reject(error) - } -) - -// response 拦截器 -service.interceptors.response.use( - async (response: AxiosResponse) => { - const { data } = response - const config = response.config - if (!data) { - // 返回“[HTTP]请求没有返回值”; - throw new Error() - } - const { t } = useI18n() - // 未设置状态码则默认成功状态 - const code = data.code || result_code - // 二进制数据则直接返回 - if ( - response.request.responseType === 'blob' || - response.request.responseType === 'arraybuffer' - ) { - return response.data - } - // 获取错误信息 - const msg = data.msg || errorCode[code] || errorCode['default'] - if (ignoreMsgs.indexOf(msg) !== -1) { - // 如果是忽略的错误码,直接返回 msg 异常 - return Promise.reject(msg) - } else if (code === 401) { - // 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了 - if (!isRefreshToken) { - isRefreshToken = true - // 1. 如果获取不到刷新令牌,则只能执行登出操作 - if (!getRefreshToken()) { - return handleAuthorized() - } - // 2. 进行刷新访问令牌 - try { - const refreshTokenRes = await refreshToken() - // 2.1 刷新成功,则回放队列的请求 + 当前请求 - setToken(refreshTokenRes.data.data) - config.headers!.Authorization = 'Bearer ' + getAccessToken() - requestList.forEach((cb: any) => { - cb() - }) - requestList = [] - return service(config) - } catch (e) { - // 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。 - // 2.2 刷新失败,只回放队列的请求 - requestList.forEach((cb: any) => { - cb() - }) - // 提示是否要登出。即不回放当前请求!不然会形成递归 - return handleAuthorized() - } finally { - requestList = [] - isRefreshToken = false - } - } else { - // 添加到队列,等待刷新获取到新的令牌 - return new Promise((resolve) => { - requestList.push(() => { - config.headers!.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - resolve(service(config)) - }) - }) - } - } else if (code === 500) { - ElMessage.error(t('sys.api.errMsg500')) - return Promise.reject(new Error(msg)) - } else if (code === 901) { - ElMessage.error( - '
' + - t('sys.api.errMsg901') + - '
' + - '
 
' + - '
参考 https://doc.iocoder.cn/ 教程
' + - '
 
' + - '
5 分钟搭建本地环境
' - ) - return Promise.reject(new Error(msg)) - } else if (code !== 200) { - if (msg === '无效的刷新令牌') { - // hard coding:忽略这个提示,直接登出 - console.log(msg) - } else { - ElNotification.error({ - title: msg - }) - } - return Promise.reject('error') - } else { - return data - } - }, - (error: AxiosError) => { - console.log('err' + error) // for debug - let { message } = error - const { t } = useI18n() - if (message === 'Network Error') { - message = t('sys.api.errorMessage') - } else if (message.includes('timeout')) { - message = t('sys.api.apiTimeoutMessage') - } else if (message.includes('Request failed with status code')) { - message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3) - } - ElMessage.error(message) - return Promise.reject(error) - } -) - -const refreshToken = async () => { - return await axios.post(base_url + '/system/auth/refresh-token?refreshToken=' + getRefreshToken()) + }) } -const handleAuthorized = () => { - const { t } = useI18n() - if (!isRelogin.show) { - isRelogin.show = true - ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), { - confirmButtonText: t('login.relogin'), - cancelButtonText: t('common.cancel'), - type: 'warning' - }) - .then(() => { - const { wsCache } = useCache() - resetRouter() // 重置静态路由表 - wsCache.clear() - removeToken() - isRelogin.show = false - window.location.href = '/' - }) - .catch(() => { - isRelogin.show = false - }) +export default { + get: async (option: any) => { + const res = await request({ method: 'GET', ...option }) + return res.data as unknown as T + }, + post: async (option: any) => { + const res = await request({ method: 'POST', ...option }) + return res.data as unknown as T + }, + delete: async (option: any) => { + const res = await request({ method: 'DELETE', ...option }) + return res.data as unknown as T + }, + put: async (option: any) => { + const res = await request({ method: 'PUT', ...option }) + return res.data as unknown as T + }, + download: async (option: any) => { + const res = await request({ method: 'GET', responseType: 'blob', ...option }) + return res as unknown as Promise + }, + upload: async (option: any) => { + option.headersType = 'multipart/form-data' + const res = await request({ method: 'PUT', ...option }) + return res as unknown as Promise } - return Promise.reject(t('sys.api.timeoutMessage')) } -export { service } diff --git a/yudao-ui-admin-vue3/src/config/axios/service.ts b/yudao-ui-admin-vue3/src/config/axios/service.ts new file mode 100644 index 0000000000..60dad6aa06 --- /dev/null +++ b/yudao-ui-admin-vue3/src/config/axios/service.ts @@ -0,0 +1,229 @@ +import axios, { + AxiosInstance, + AxiosRequestConfig, + AxiosRequestHeaders, + AxiosResponse, + AxiosError +} from 'axios' +import { ElMessage, ElMessageBox, ElNotification } from 'element-plus' +import qs from 'qs' +import { config } from '@/config/axios/config' +import { getAccessToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth' +import errorCode from './errorCode' +import { useI18n } from '@/hooks/web/useI18n' +import { resetRouter } from '@/router' +import { useCache } from '@/hooks/web/useCache' + +const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE +const { result_code, base_url, request_timeout } = config + +// 需要忽略的提示。忽略后,自动 Promise.reject('error') +const ignoreMsgs = [ + '无效的刷新令牌', // 刷新令牌被删除时,不用提示 + '刷新令牌已过期' // 使用刷新令牌,刷新获取新的访问令牌时,结果因为过期失败,此时需要忽略。否则,会导致继续 401,无法跳转到登出界面 +] +// 是否显示重新登录 +export const isRelogin = { show: false } +// Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现 +// 请求队列 +let requestList: any[] = [] +// 是否正在刷新中 +let isRefreshToken = false + +// 创建axios实例 +const service: AxiosInstance = axios.create({ + baseURL: base_url, // api 的 base_url + timeout: request_timeout, // 请求超时时间 + withCredentials: false // 禁用 Cookie 等信息 +}) + +// request拦截器 +service.interceptors.request.use( + (config: AxiosRequestConfig) => { + // 是否需要设置 token + const isToken = (config!.headers || {}).isToken === false + if (getAccessToken() && !isToken) { + ;(config as Recordable).headers.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token + } + // 设置租户 + if (tenantEnable) { + const tenantId = getTenantId() + if (tenantId) (config as Recordable).headers.common['tenant-id'] = tenantId + } + const params = config.params || {} + const data = config.data || false + if ( + config.method?.toUpperCase() === 'POST' && + (config.headers as AxiosRequestHeaders)['Content-Type'] === + 'application/x-www-form-urlencoded' + ) { + config.data = qs.stringify(data) + } + // get参数编码 + if (config.method?.toUpperCase() === 'GET' && params) { + let url = config.url + '?' + for (const propName of Object.keys(params)) { + const value = params[propName] + if (value !== void 0 && value !== null && typeof value !== 'undefined') { + if (typeof value === 'object') { + for (const val of Object.keys(value)) { + const params = propName + '[' + val + ']' + const subPart = encodeURIComponent(params) + '=' + url += subPart + encodeURIComponent(value[val]) + '&' + } + } else { + url += `${propName}=${encodeURIComponent(value)}&` + } + } + } + // 给 get 请求加上时间戳参数,避免从缓存中拿数据 + // const now = new Date().getTime() + // params = params.substring(0, url.length - 1) + `?_t=${now}` + url = url.slice(0, -1) + config.params = {} + config.url = url + } + return config + }, + (error: AxiosError) => { + // Do something with request error + console.log(error) // for debug + Promise.reject(error) + } +) + +// response 拦截器 +service.interceptors.response.use( + async (response: AxiosResponse) => { + const { data } = response + const config = response.config + if (!data) { + // 返回“[HTTP]请求没有返回值”; + throw new Error() + } + const { t } = useI18n() + // 未设置状态码则默认成功状态 + const code = data.code || result_code + // 二进制数据则直接返回 + if ( + response.request.responseType === 'blob' || + response.request.responseType === 'arraybuffer' + ) { + return response.data + } + // 获取错误信息 + const msg = data.msg || errorCode[code] || errorCode['default'] + if (ignoreMsgs.indexOf(msg) !== -1) { + // 如果是忽略的错误码,直接返回 msg 异常 + return Promise.reject(msg) + } else if (code === 401) { + // 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了 + if (!isRefreshToken) { + isRefreshToken = true + // 1. 如果获取不到刷新令牌,则只能执行登出操作 + if (!getRefreshToken()) { + return handleAuthorized() + } + // 2. 进行刷新访问令牌 + try { + const refreshTokenRes = await refreshToken() + // 2.1 刷新成功,则回放队列的请求 + 当前请求 + setToken(refreshTokenRes.data.data) + config.headers!.Authorization = 'Bearer ' + getAccessToken() + requestList.forEach((cb: any) => { + cb() + }) + requestList = [] + return service(config) + } catch (e) { + // 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。 + // 2.2 刷新失败,只回放队列的请求 + requestList.forEach((cb: any) => { + cb() + }) + // 提示是否要登出。即不回放当前请求!不然会形成递归 + return handleAuthorized() + } finally { + requestList = [] + isRefreshToken = false + } + } else { + // 添加到队列,等待刷新获取到新的令牌 + return new Promise((resolve) => { + requestList.push(() => { + config.headers!.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + resolve(service(config)) + }) + }) + } + } else if (code === 500) { + ElMessage.error(t('sys.api.errMsg500')) + return Promise.reject(new Error(msg)) + } else if (code === 901) { + ElMessage.error( + '
' + + t('sys.api.errMsg901') + + '
' + + '
 
' + + '
参考 https://doc.iocoder.cn/ 教程
' + + '
 
' + + '
5 分钟搭建本地环境
' + ) + return Promise.reject(new Error(msg)) + } else if (code !== 200) { + if (msg === '无效的刷新令牌') { + // hard coding:忽略这个提示,直接登出 + console.log(msg) + } else { + ElNotification.error({ + title: msg + }) + } + return Promise.reject('error') + } else { + return data + } + }, + (error: AxiosError) => { + console.log('err' + error) // for debug + let { message } = error + const { t } = useI18n() + if (message === 'Network Error') { + message = t('sys.api.errorMessage') + } else if (message.includes('timeout')) { + message = t('sys.api.apiTimeoutMessage') + } else if (message.includes('Request failed with status code')) { + message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3) + } + ElMessage.error(message) + return Promise.reject(error) + } +) + +const refreshToken = async () => { + return await axios.post(base_url + '/system/auth/refresh-token?refreshToken=' + getRefreshToken()) +} +const handleAuthorized = () => { + const { t } = useI18n() + if (!isRelogin.show) { + isRelogin.show = true + ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), { + confirmButtonText: t('login.relogin'), + cancelButtonText: t('common.cancel'), + type: 'warning' + }) + .then(() => { + const { wsCache } = useCache() + resetRouter() // 重置静态路由表 + wsCache.clear() + removeToken() + isRelogin.show = false + window.location.href = '/' + }) + .catch(() => { + isRelogin.show = false + }) + } + return Promise.reject(t('sys.api.timeoutMessage')) +} +export { service } diff --git a/yudao-ui-admin-vue3/src/hooks/web/useAxios.ts b/yudao-ui-admin-vue3/src/hooks/web/useAxios.ts deleted file mode 100644 index 331969c6e0..0000000000 --- a/yudao-ui-admin-vue3/src/hooks/web/useAxios.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { service } from '@/config/axios' - -import { config } from '@/config/axios/config' - -const { default_headers } = config - -const request = (option: AxiosConfig) => { - const { url, method, params, data, headersType, responseType } = option - return service({ - url: url, - method, - params, - data, - responseType: responseType, - headers: { - 'Content-Type': headersType || default_headers - } - }) -} - -async function getFn(option: AxiosConfig): Promise { - const res = await request({ method: 'GET', ...option }) - return res.data -} - -async function postFn(option: AxiosConfig): Promise { - const res = await request({ method: 'POST', ...option }) - return res.data -} - -async function deleteFn(option: AxiosConfig): Promise { - const res = await request({ method: 'DELETE', ...option }) - return res.data -} - -async function putFn(option: AxiosConfig): Promise { - const res = await request({ method: 'PUT', ...option }) - return res.data -} -async function downloadFn(option: AxiosConfig): Promise { - const res = await request({ method: 'GET', responseType: 'blob', ...option }) - return res as unknown as Promise -} - -async function uploadFn(option: AxiosConfig): Promise { - option.headersType = 'multipart/form-data' - const res = await request({ method: 'PUT', ...option }) - return res as unknown as Promise -} - -export const useAxios = () => { - return { - get: getFn, - post: postFn, - delete: deleteFn, - put: putFn, - download: downloadFn, - upload: uploadFn - } -} diff --git a/yudao-ui-admin-vue3/src/router/index.ts b/yudao-ui-admin-vue3/src/router/index.ts index 6cdec5ee10..2dc045062d 100644 --- a/yudao-ui-admin-vue3/src/router/index.ts +++ b/yudao-ui-admin-vue3/src/router/index.ts @@ -10,7 +10,7 @@ import { usePermissionStoreWithOut } from '@/store/modules/permission' import { useDictStoreWithOut } from '@/store/modules/dict' import { useUserStoreWithOut } from '@/store/modules/user' import { listSimpleDictDataApi } from '@/api/system/dict/dict.data' -import { isRelogin } from '@/config/axios' +import { isRelogin } from '@/config/axios/service' import { getInfoApi } from '@/api/login' const { start, done } = useNProgress() From b5a4a5446eaf74ebbf02d515f216e33758520654 Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Thu, 3 Nov 2022 17:01:37 +0800 Subject: [PATCH 05/12] =?UTF-8?q?fix:=20vue3=20=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/codegen/vue3/api/api.ts.vm | 4 +--- .../src/main/resources/codegen/vue3/views/index.vue.vm | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm index 7d13b5dec5..d1099ecbfd 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm @@ -1,8 +1,6 @@ -import { useAxios } from '@/hooks/web/useAxios' +import request from '@/config/axios' import { ${simpleClassName}VO, ${simpleClassName}PageReqVO, ${simpleClassName}ExcelReqVO } from './types' -const request = useAxios() - #set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") // 查询${table.classComment}列表 export const get${simpleClassName}PageApi = async (params: ${simpleClassName}PageReqVO) => { diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm index 7a050b8bbd..0728a405ae 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm @@ -6,9 +6,9 @@ import { DICT_TYPE } from '@/utils/dict' import { useTable } from '@/hooks/web/useTable' import { useI18n } from '@/hooks/web/useI18n' import { FormExpose } from '@/components/Form' -import type { ${simpleClassName}VO } from '@/api/${table.moduleName}/${simpleClassName}/types' -import { rules, allSchemas } from './${simpleClassName}.data' -import * as ${simpleClassName}Api from '@/api/${table.moduleName}/${simpleClassName}' +import type { ${simpleClassName}VO } from '@/api/${table.moduleName}/${classNameVar}/types' +import { rules, allSchemas } from './${classNameVar}.data' +import * as ${simpleClassName}Api from '@/api/${table.moduleName}/${classNameVar}' const { t } = useI18n() // 国际化 // ========== 列表相关 ========== From fc8a23355238007f7926335b3c862281be10ccee Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Thu, 3 Nov 2022 18:09:40 +0800 Subject: [PATCH 06/12] feat: menu vxe table --- .../src/plugins/vxeTable/index.ts | 38 +- .../src/views/system/menu/index.vue | 440 +++++------------- .../src/views/system/post/index.vue | 2 +- 3 files changed, 152 insertions(+), 328 deletions(-) diff --git a/yudao-ui-admin-vue3/src/plugins/vxeTable/index.ts b/yudao-ui-admin-vue3/src/plugins/vxeTable/index.ts index bfe355d05f..be501037dd 100644 --- a/yudao-ui-admin-vue3/src/plugins/vxeTable/index.ts +++ b/yudao-ui-admin-vue3/src/plugins/vxeTable/index.ts @@ -60,7 +60,14 @@ VXETable.setup({ autoResize: true, // 自动监听父元素的变化去重新计算表格 resizable: true, // 列是否允许拖动列宽调整大小 emptyText: '暂无数据', // 空表单 - highlightHoverRow: true // 自动监听父元素的变化去重新计算表格 + highlightHoverRow: true, // 自动监听父元素的变化去重新计算表格 + treeConfig: { + rowField: 'id', + parentField: 'parentId', + children: 'children', + indent: 20, + showIcon: true + } }, grid: { toolbarConfig: { @@ -127,13 +134,28 @@ VXETable.setup({ : XEUtils.toFormatString(XEUtils.get(enUS, key), args) } }) -// 格式金额,默认2位数 -VXETable.formats.add('formatAmount', ({ cellValue }, digits = 2) => { - return XEUtils.commafy(XEUtils.toNumber(cellValue), { digits }) -}) -// 格式日期,默认 yyyy-MM-dd HH:mm:ss -VXETable.formats.add('formatDate', ({ cellValue }, format = 'yyyy-MM-dd HH:mm:ss') => { - return XEUtils.toDateString(cellValue, format) +// 自定义全局的格式化处理函数 +VXETable.formats.mixin({ + // 格式日期,默认 yyyy-MM-dd HH:mm:ss + formatDate({ cellValue }, format) { + return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss') + }, + // 四舍五入金额,每隔3位逗号分隔,默认2位数 + formatAmount({ cellValue }, digits = 2) { + return XEUtils.commafy(Number(cellValue), { digits }) + }, + // 格式化银行卡,默认每4位空格隔开 + formatBankcard({ cellValue }) { + return XEUtils.commafy(XEUtils.toValueString(cellValue), { spaceNumber: 4, separator: ' ' }) + }, + // 四舍五入,默认两位数 + formatFixedNumber({ cellValue }, digits = 2) { + return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits) + }, + // 向下舍入,默认两位数 + formatCutNumber({ cellValue }, digits = 2) { + return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits) + } }) export const setupVxeTable = (app: App) => { // 表格功能 diff --git a/yudao-ui-admin-vue3/src/views/system/menu/index.vue b/yudao-ui-admin-vue3/src/views/system/menu/index.vue index 73cb785878..43f74225de 100644 --- a/yudao-ui-admin-vue3/src/views/system/menu/index.vue +++ b/yudao-ui-admin-vue3/src/views/system/menu/index.vue @@ -1,76 +1,19 @@