Commit 9896e501a946c4b1c911eeb7eae58c47d4a0f117

Authored by 芋道源码
Committed by Gitee
2 parents 62dc600c e16f8abc

!234 vue3 添加验证码关闭功能 修复vue2部分查询问题

Merge pull request !234 from xingyu/master
Showing 59 changed files with 931 additions and 261 deletions
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClient.java
... ... @@ -10,7 +10,6 @@ import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient;
10 10  
11 11 import java.io.ByteArrayInputStream;
12 12 import java.io.ByteArrayOutputStream;
13   -import java.io.File;
14 13  
15 14 /**
16 15 * Ftp 文件客户端
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm
... ... @@ -19,11 +19,6 @@
19 19 })
20 20 const { getList, setSearchParams, delList, exportList } = methods
21 21  
22   - // 导出操作
23   - const handleExport = async () => {
24   - await exportList('数据.xls')
25   - }
26   -
27 22 // ========== CRUD 相关 ==========
28 23 const actionLoading = ref(false) // 遮罩层
29 24 const actionType = ref('') // 操作按钮的类型
... ... @@ -74,11 +69,6 @@
74 69 }
75 70 }
76 71  
77   - // 删除操作
78   - const handleDelete = (row: ${simpleClassName}VO) => {
79   - delList(row.id, false)
80   - }
81   -
82 72 // ========== 详情相关 ==========
83 73 const detailRef = ref() // 详情 Ref
84 74  
... ... @@ -108,7 +98,7 @@
108 98 type="warning"
109 99 v-hasPermi="['${permissionPrefix}:export']"
110 100 :loading="tableObject.exportLoading"
111   - @click="handleExport"
  101 + @click="exportList('数据.xls')"
112 102 >
113 103 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
114 104 </el-button>
... ... @@ -161,7 +151,7 @@
161 151 link
162 152 type="primary"
163 153 v-hasPermi="['${permissionPrefix}:delete']"
164   - @click="handleDelete(row)"
  154 + @click="delList(row.id, false)"
165 155 >
166 156 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
167 157 </el-button>
... ...
yudao-ui-admin-vue3/package.json
... ... @@ -26,8 +26,8 @@
26 26 },
27 27 "dependencies": {
28 28 "@iconify/iconify": "^2.2.1",
29   - "@vueuse/core": "^8.9.4",
30   - "@wangeditor/editor": "^5.1.10",
  29 + "@vueuse/core": "^9.0.0",
  30 + "@wangeditor/editor": "^5.1.14",
31 31 "@wangeditor/editor-for-vue": "^5.1.10",
32 32 "@zxcvbn-ts/core": "^2.0.3",
33 33 "animate.css": "^4.1.1",
... ... @@ -35,7 +35,7 @@
35 35 "dayjs": "^1.11.4",
36 36 "echarts": "^5.3.3",
37 37 "echarts-wordcloud": "^2.0.0",
38   - "element-plus": "2.2.9",
  38 + "element-plus": "2.2.11",
39 39 "intro.js": "^6.0.0",
40 40 "jsencrypt": "^3.2.1",
41 41 "lodash-es": "^4.17.21",
... ... @@ -49,14 +49,14 @@
49 49 "vue": "3.2.37",
50 50 "vue-cropper": "^1.0.3",
51 51 "vue-i18n": "9.1.10",
52   - "vue-router": "^4.1.2",
  52 + "vue-router": "^4.1.3",
53 53 "vue-types": "^4.2.0",
54 54 "web-storage-cache": "^1.1.1"
55 55 },
56 56 "devDependencies": {
57 57 "@commitlint/cli": "^17.0.3",
58 58 "@commitlint/config-conventional": "^17.0.3",
59   - "@iconify/json": "^2.1.82",
  59 + "@iconify/json": "^2.1.84",
60 60 "@intlify/vite-plugin-vue-i18n": "^5.0.1",
61 61 "@purge-icons/generated": "^0.8.1",
62 62 "@types/intro.js": "^5.1.0",
... ... @@ -83,7 +83,7 @@
83 83 "postcss-less": "^6.0.0",
84 84 "prettier": "^2.7.1",
85 85 "rimraf": "^3.0.2",
86   - "rollup": "^2.77.0",
  86 + "rollup": "^2.77.2",
87 87 "stylelint": "^14.9.1",
88 88 "stylelint-config-html": "^1.1.0",
89 89 "stylelint-config-prettier": "^9.0.3",
... ... @@ -100,7 +100,7 @@
100 100 "vite-plugin-style-import": "^1.4.1",
101 101 "vite-plugin-svg-icons": "^2.0.1",
102 102 "vite-plugin-windicss": "^1.8.7",
103   - "vue-tsc": "^0.39.0",
  103 + "vue-tsc": "^0.39.2",
104 104 "windicss": "^3.5.6",
105 105 "windicss-analysis": "^0.3.5"
106 106 },
... ...
yudao-ui-admin-vue3/src/api/bpm/form/index.ts 0 → 100644
  1 +import { useAxios } from '@/hooks/web/useAxios'
  2 +import { FormVO } from './types'
  3 +const request = useAxios()
  4 +
  5 +// 创建工作流的表单定义
  6 +export const createFormApi = async (data: FormVO) => {
  7 + return await request.post({
  8 + url: '/bpm/form/create',
  9 + data: data
  10 + })
  11 +}
  12 +
  13 +// 更新工作流的表单定义
  14 +export const updateFormApi = async (data: FormVO) => {
  15 + return await request.put({
  16 + url: '/bpm/form/update',
  17 + data: data
  18 + })
  19 +}
  20 +
  21 +// 删除工作流的表单定义
  22 +export const deleteFormApi = async (id: number) => {
  23 + return await request.delete({
  24 + url: '/bpm/form/delete?id=' + id
  25 + })
  26 +}
  27 +
  28 +// 获得工作流的表单定义
  29 +export const getFormApi = async (id: number) => {
  30 + return await request.get({
  31 + url: '/bpm/form/get?id=' + id
  32 + })
  33 +}
  34 +
  35 +// 获得工作流的表单定义分页
  36 +export const getFormPageApi = async (params) => {
  37 + return await request.get({
  38 + url: '/bpm/form/page',
  39 + params
  40 + })
  41 +}
  42 +
  43 +// 获得动态表单的精简列表
  44 +export const getSimpleFormsApi = async () => {
  45 + return await request.get({
  46 + url: '/bpm/form/list-all-simple'
  47 + })
  48 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/form/types.ts 0 → 100644
  1 +export type FormVO = {
  2 + id: number
  3 + name: string
  4 + conf: string
  5 + fields: string[]
  6 + status: number
  7 + remark: string
  8 + createTime: string
  9 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/leave/index.ts 0 → 100644
  1 +import { useAxios } from '@/hooks/web/useAxios'
  2 +import { LeaveVO } from './types'
  3 +const request = useAxios()
  4 +
  5 +// 创建请假申请
  6 +export const createLeaveApi = async (data: LeaveVO) => {
  7 + return await request.post({ url: '/bpm/oa/leave/create', data: data })
  8 +}
  9 +
  10 +// 获得请假申请
  11 +export const getLeaveApi = async (id: number) => {
  12 + return await request.get({ url: '/bpm/oa/leave/get?id=' + id })
  13 +}
  14 +
  15 +// 获得请假申请分页
  16 +export const getLeavePageApi = async (params) => {
  17 + return await request.get({ url: '/bpm/oa/leave/page', params })
  18 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/leave/types.ts 0 → 100644
  1 +export type LeaveVO = {
  2 + id: number
  3 + result: number
  4 + type: number
  5 + reason: string
  6 + processInstanceId: string
  7 + startTime: string
  8 + endTime: string
  9 + createTime: string
  10 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/model/index.ts 0 → 100644
  1 +import { useAxios } from '@/hooks/web/useAxios'
  2 +import { ModelVO } from './types'
  3 +const request = useAxios()
  4 +
  5 +export const getModelPage = async (params) => {
  6 + return await request.get({ url: '/bpm/model/page', params })
  7 +}
  8 +
  9 +export const getModel = async (id: number) => {
  10 + return await request.get({ url: '/bpm/model/get?id=' + id })
  11 +}
  12 +
  13 +export const updateModel = async (data: ModelVO) => {
  14 + return await request.put({ url: '/bpm/model/update', data: data })
  15 +}
  16 +
  17 +// 任务状态修改
  18 +export const updateModelState = async (id: number, state: string) => {
  19 + const data = {
  20 + id: id,
  21 + state: state
  22 + }
  23 + return await request.put({ url: '/bpm/model/update-state', data: data })
  24 +}
  25 +
  26 +export const createModel = async (data: ModelVO) => {
  27 + return await request.post({ url: '/bpm/model/create', data: data })
  28 +}
  29 +
  30 +export const deleteModel = async (id: number) => {
  31 + return await request.delete({ url: '/bpm/model/delete?id=' + id })
  32 +}
  33 +
  34 +export const deployModel = async (id: number) => {
  35 + return await request.post({ url: '/bpm/model/deploy?id=' + id })
  36 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/model/types.ts 0 → 100644
  1 +export type ModelVO = {
  2 + id: number
  3 + formName: string
  4 + key: string
  5 + name: string
  6 + description: string
  7 + category: string
  8 + formType: number
  9 + formId: number
  10 + formCustomCreatePath: string
  11 + formCustomViewPath: string
  12 + status: number
  13 + remark: string
  14 + createTime: string
  15 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/processInstance/index.ts 0 → 100644
  1 +import { useAxios } from '@/hooks/web/useAxios'
  2 +import { ProcessInstanceVO } from './types'
  3 +const request = useAxios()
  4 +
  5 +export const getMyProcessInstancePage = async (params) => {
  6 + return await request.get({ url: '/bpm/process-instance/my-page', params })
  7 +}
  8 +
  9 +export const createProcessInstance = async (data: ProcessInstanceVO) => {
  10 + return await request.post({ url: '/bpm/process-instance/create', data: data })
  11 +}
  12 +
  13 +export const cancelProcessInstance = async (id: number, reason: string) => {
  14 + const data = {
  15 + id: id,
  16 + reason: reason
  17 + }
  18 + return await request.delete({ url: '/bpm/process-instance/cancel', data: data })
  19 +}
  20 +
  21 +export const getProcessInstance = async (id: number) => {
  22 + return await request.get({ url: '/bpm/process-instance/get?id=' + id })
  23 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/processInstance/types.ts 0 → 100644
  1 +export type task = {
  2 + id: string
  3 + name: string
  4 +}
  5 +export type ProcessInstanceVO = {
  6 + id: number
  7 + name: string
  8 + processDefinitionId: string
  9 + category: string
  10 + result: number
  11 + tasks: task[]
  12 + fields: string[]
  13 + status: number
  14 + remark: string
  15 + businessKey: string
  16 + createTime: string
  17 + endTime: string
  18 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/task/index.ts 0 → 100644
  1 +import { useAxios } from '@/hooks/web/useAxios'
  2 +
  3 +const request = useAxios()
  4 +
  5 +export const getTodoTaskPage = async (params) => {
  6 + return await request.get({ url: '/bpm/task/todo-page', params })
  7 +}
  8 +
  9 +export const getDoneTaskPage = async (params) => {
  10 + return await request.get({ url: '/bpm/task/done-page', params })
  11 +}
  12 +
  13 +export const completeTask = async (data) => {
  14 + return await request.put({ url: '/bpm/task/complete', data: data })
  15 +}
  16 +
  17 +export const approveTask = async (data) => {
  18 + return await request.put({ url: '/bpm/task/approve', data: data })
  19 +}
  20 +
  21 +export const rejectTask = async (data) => {
  22 + return await request.put({ url: '/bpm/task/reject', data: data })
  23 +}
  24 +export const backTask = async (data) => {
  25 + return await request.put({ url: '/bpm/task/back', data: data })
  26 +}
  27 +
  28 +export const updateTaskAssignee = async (data) => {
  29 + return await request.put({ url: '/bpm/task/update-assignee', data: data })
  30 +}
  31 +
  32 +export const getTaskListByProcessInstanceId = async (processInstanceId) => {
  33 + return await request.get({
  34 + url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId
  35 + })
  36 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/task/types.ts 0 → 100644
  1 +export type FormVO = {
  2 + id: number
  3 + name: string
  4 + conf: string
  5 + fields: string[]
  6 + status: number
  7 + remark: string
  8 + createTime: string
  9 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/taskAssignRule/index.ts 0 → 100644
  1 +import { useAxios } from '@/hooks/web/useAxios'
  2 +import { TaskAssignVO } from './types'
  3 +const request = useAxios()
  4 +
  5 +export const getTaskAssignRuleList = async (params) => {
  6 + return await request.get({ url: '/bpm/task-assign-rule/list', params })
  7 +}
  8 +
  9 +export const createTaskAssignRule = async (data: TaskAssignVO) => {
  10 + return await request.post({
  11 + url: '/bpm/task-assign-rule/create',
  12 + data: data
  13 + })
  14 +}
  15 +
  16 +export const updateTaskAssignRule = async (data: TaskAssignVO) => {
  17 + return await request.put({
  18 + url: '/bpm/task-assign-rule/update',
  19 + data: data
  20 + })
  21 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/taskAssignRule/types.ts 0 → 100644
  1 +export type TaskAssignVO = {
  2 + id: number
  3 + modelId: string
  4 + processDefinitionId: string
  5 + taskDefinitionKey: string
  6 + taskDefinitionName: string
  7 + options: string[]
  8 + type: number
  9 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/userGroup/index.ts 0 → 100644
  1 +import { useAxios } from '@/hooks/web/useAxios'
  2 +import { UserGroupVO } from './types'
  3 +const request = useAxios()
  4 +
  5 +// 创建用户组
  6 +export const createUserGroupApi = async (data: UserGroupVO) => {
  7 + return await request.post({
  8 + url: '/bpm/user-group/create',
  9 + data: data
  10 + })
  11 +}
  12 +
  13 +// 更新用户组
  14 +export const updateUserGroupApi = async (data: UserGroupVO) => {
  15 + return await request.put({
  16 + url: '/bpm/user-group/update',
  17 + data: data
  18 + })
  19 +}
  20 +
  21 +// 删除用户组
  22 +export const deleteUserGroupApi = async (id: number) => {
  23 + return await request.delete({ url: '/bpm/user-group/delete?id=' + id })
  24 +}
  25 +
  26 +// 获得用户组
  27 +export const getUserGroupApi = async (id: number) => {
  28 + return await request.get({ url: '/bpm/user-group/get?id=' + id })
  29 +}
  30 +
  31 +// 获得用户组分页
  32 +export const getUserGroupPageApi = async (params) => {
  33 + return await request.get({ url: '/bpm/user-group/page', params })
  34 +}
  35 +
  36 +// 获取用户组精简信息列表
  37 +export const listSimpleUserGroupsApi = async () => {
  38 + return await request.get({ url: '/bpm/user-group/list-all-simple' })
  39 +}
... ...
yudao-ui-admin-vue3/src/api/bpm/userGroup/types.ts 0 → 100644
  1 +export type UserGroupVO = {
  2 + id: number
  3 + name: string
  4 + description: string
  5 + memberUserIds: number[]
  6 + status: number
  7 + remark: string
  8 + createTime: string
  9 +}
... ...
yudao-ui-admin-vue3/src/api/system/user/index.ts
... ... @@ -55,3 +55,8 @@ export const updateUserStatusApi = (id: number, status: number) =&gt; {
55 55 }
56 56 return request.put({ url: '/system/user/update-status', data: data })
57 57 }
  58 +
  59 +// 获取用户精简信息列表
  60 +export const getListSimpleUsersApi = () => {
  61 + return request.get({ url: '/system/user/list-all-simple' })
  62 +}
... ...
yudao-ui-admin-vue3/src/api/system/user/profile/index.ts
... ... @@ -24,6 +24,6 @@ export const updateUserPwdApi = (oldPassword: string, newPassword: string) =&gt; {
24 24 }
25 25  
26 26 // 用户头像上传
27   -export const uploadAvatarApi = (data) => {
28   - return request.put({ url: '/system/user/profile/update-avatar', data: data })
  27 +export const uploadAvatarApi = (params) => {
  28 + return request.upload({ url: '/system/user/profile/update-avatar', params })
29 29 }
... ...
yudao-ui-admin-vue3/src/hooks/web/useAxios.ts
... ... @@ -42,12 +42,19 @@ async function downloadFn&lt;T = any&gt;(option: AxiosConfig): Promise&lt;T&gt; {
42 42 return res as unknown as Promise<T>
43 43 }
44 44  
  45 +async function uploadFn<T = any>(option: AxiosConfig): Promise<T> {
  46 + option.headersType = 'multipart/form-data'
  47 + const res = await request({ method: 'PUT', ...option })
  48 + return res as unknown as Promise<T>
  49 +}
  50 +
45 51 export const useAxios = () => {
46 52 return {
47 53 get: getFn,
48 54 post: postFn,
49 55 delete: deleteFn,
50 56 put: putFn,
51   - download: downloadFn
  57 + download: downloadFn,
  58 + upload: uploadFn
52 59 }
53 60 }
... ...
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
... ... @@ -47,12 +47,17 @@ const iconHouse = useIcon({ icon: &#39;ep:house&#39; })
47 47 const iconAvatar = useIcon({ icon: 'ep:avatar' })
48 48 const iconLock = useIcon({ icon: 'ep:lock' })
49 49 const iconCircleCheck = useIcon({ icon: 'ep:circle-check' })
50   -const LoginRules = {
  50 +const LoginCaptchaRules = {
51 51 tenantName: [required],
52 52 username: [required],
53 53 password: [required],
54 54 code: [required]
55 55 }
  56 +const LoginRules = {
  57 + tenantName: [required],
  58 + username: [required],
  59 + password: [required]
  60 +}
56 61 const loginLoading = ref(false)
57 62 const loginData = reactive({
58 63 codeImg: '',
... ... @@ -76,8 +81,11 @@ const loginData = reactive({
76 81 // 获取验证码
77 82 const getCode = async () => {
78 83 const res = await LoginApi.getCodeImgApi()
79   - loginData.codeImg = 'data:image/gif;base64,' + res.img
80   - loginData.loginForm.uuid = res.uuid
  84 + loginData.captchaEnable = res.enable
  85 + if (res.enable) {
  86 + loginData.codeImg = 'data:image/gif;base64,' + res.img
  87 + loginData.loginForm.uuid = res.uuid
  88 + }
81 89 }
82 90 //获取租户ID
83 91 const getTenantId = async () => {
... ... @@ -159,7 +167,7 @@ onMounted(async () =&gt; {
159 167 <template>
160 168 <el-form
161 169 :model="loginData.loginForm"
162   - :rules="LoginRules"
  170 + :rules="loginData.captchaEnable ? LoginCaptchaRules : LoginRules"
163 171 label-position="top"
164 172 class="login-form"
165 173 label-width="120px"
... ... @@ -205,7 +213,7 @@ onMounted(async () =&gt; {
205 213 </el-form-item>
206 214 </el-col>
207 215 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
208   - <el-form-item prop="code">
  216 + <el-form-item prop="code" v-if="loginData.captchaEnable">
209 217 <el-row justify="space-between" style="width: 100%">
210 218 <el-col :span="14">
211 219 <el-input
... ...
yudao-ui-admin-vue3/src/views/Profile/components/ProfileUser.vue
... ... @@ -2,7 +2,7 @@
2 2 import { getUserProfileApi } from '@/api/system/user/profile'
3 3 import { onMounted, reactive } from 'vue'
4 4 import dayjs from 'dayjs'
5   -import { UserAvatarVue } from './'
  5 +import UserAvatar from './UserAvatar.vue'
6 6 import { ProfileVO } from '@/api/system/user/profile/types'
7 7 import { useI18n } from '@/hooks/web/useI18n'
8 8 const { t } = useI18n()
... ... @@ -43,7 +43,7 @@ onMounted(async () =&gt; {
43 43 <template>
44 44 <div>
45 45 <div class="text-center">
46   - <UserAvatarVue :img="userInfo.user.avatar" />
  46 + <UserAvatar :img="userInfo.user.avatar" />
47 47 </div>
48 48 <ul class="list-group list-group-striped">
49 49 <li class="list-group-item">
... ...
yudao-ui-admin-vue3/src/views/Profile/components/UserAvatar.vue
... ... @@ -2,7 +2,7 @@
2 2 import { ref, reactive, watch } from 'vue'
3 3 import 'vue-cropper/dist/index.css'
4 4 import { VueCropper } from 'vue-cropper'
5   -import { ElRow, ElCol, ElUpload, ElMessage } from 'element-plus'
  5 +import { ElRow, ElCol, ElUpload, ElMessage, ElDialog } from 'element-plus'
6 6 import { propTypes } from '@/utils/propTypes'
7 7 import { uploadAvatarApi } from '@/api/system/user/profile'
8 8 const cropper = ref()
... ... @@ -43,6 +43,8 @@ const changeScale = (num: number) =&gt; {
43 43 num = num || 1
44 44 cropper.value.changeScale(num)
45 45 }
  46 +// 覆盖默认的上传行为
  47 +const requestUpload = () => {}
46 48 /** 上传预处理 */
47 49 const beforeUpload = (file: Blob) => {
48 50 if (file.type.indexOf('image/') == -1) {
... ... @@ -84,7 +86,7 @@ watch(
84 86 <div class="user-info-head" @click="editCropper()">
85 87 <img :src="state.options.img" title="点击上传头像" class="img-circle img-lg" alt="" />
86 88 </div>
87   - <Dialog
  89 + <el-dialog
88 90 v-model="state.dialogVisible"
89 91 :title="state.dialogTitle"
90 92 width="50%"
... ... @@ -92,7 +94,7 @@ watch(
92 94 style="padding: 30px 20px"
93 95 >
94 96 <el-row>
95   - <el-col :xs="24" :md="12" :style="{ height: '350px' }">
  97 + <el-col :xs="24" :md="12" style="height: 350px">
96 98 <VueCropper
97 99 ref="cropper"
98 100 :img="state.options.img"
... ... @@ -105,7 +107,7 @@ watch(
105 107 v-if="state.cropperVisible"
106 108 />
107 109 </el-col>
108   - <el-col :xs="24" :md="12" :style="{ height: '350px' }">
  110 + <el-col :xs="24" :md="12" style="height: 350px">
109 111 <div class="avatar-upload-preview">
110 112 <img
111 113 :src="state.previews.url"
... ... @@ -119,7 +121,12 @@ watch(
119 121 <template #footer>
120 122 <el-row>
121 123 <el-col :lg="2" :md="2">
122   - <el-upload action="#" :show-file-list="false" :before-upload="beforeUpload">
  124 + <el-upload
  125 + action="#"
  126 + :http-request="requestUpload"
  127 + :show-file-list="false"
  128 + :before-upload="beforeUpload"
  129 + >
123 130 <el-button size="small">
124 131 <Icon icon="ep:upload-filled" class="mr-5px" />
125 132 选择
... ... @@ -151,7 +158,7 @@ watch(
151 158 </el-col>
152 159 </el-row>
153 160 </template>
154   - </Dialog>
  161 + </el-dialog>
155 162 </template>
156 163 <style scoped>
157 164 .user-info-head {
... ...
yudao-ui-admin-vue3/src/views/bpm/definition/index.vue deleted
1   -<script setup lang="ts"></script>
2   -
3   -<template>
4   - <div>index</div>
5   -</template>
6   -
7   -<style scoped></style>
yudao-ui-admin-vue3/src/views/bpm/form/form.data.ts 0 → 100644
  1 +import { reactive } from 'vue'
  2 +import { useI18n } from '@/hooks/web/useI18n'
  3 +import { required } from '@/utils/formRules'
  4 +import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas'
  5 +import { DICT_TYPE } from '@/utils/dict'
  6 +const { t } = useI18n() // 国际化
  7 +
  8 +// 表单校验
  9 +export const rules = reactive({
  10 + name: [required]
  11 +})
  12 +
  13 +// CrudSchema
  14 +const crudSchemas = reactive<CrudSchema[]>([
  15 + {
  16 + label: t('common.index'),
  17 + field: 'id',
  18 + type: 'index',
  19 + form: {
  20 + show: false
  21 + },
  22 + detail: {
  23 + show: false
  24 + }
  25 + },
  26 + {
  27 + label: '表单名',
  28 + field: 'name',
  29 + search: {
  30 + show: true
  31 + }
  32 + },
  33 + {
  34 + label: t('common.status'),
  35 + field: 'status',
  36 + dictType: DICT_TYPE.COMMON_STATUS
  37 + },
  38 + {
  39 + label: '备注',
  40 + field: 'remark'
  41 + },
  42 + {
  43 + label: t('common.createTime'),
  44 + field: 'createTime',
  45 + form: {
  46 + show: false
  47 + }
  48 + },
  49 + {
  50 + label: t('table.action'),
  51 + field: 'action',
  52 + width: '240px',
  53 + form: {
  54 + show: false
  55 + },
  56 + detail: {
  57 + show: false
  58 + }
  59 + }
  60 +])
  61 +export const { allSchemas } = useCrudSchemas(crudSchemas)
... ...
yudao-ui-admin-vue3/src/views/bpm/form/index.vue
1   -<script setup lang="ts"></script>
  1 +<script setup lang="ts">
  2 +import { ref, unref } from 'vue'
  3 +import dayjs from 'dayjs'
  4 +import { ElMessage } from 'element-plus'
  5 +import { DICT_TYPE } from '@/utils/dict'
  6 +import { useTable } from '@/hooks/web/useTable'
  7 +import { useI18n } from '@/hooks/web/useI18n'
  8 +import { FormExpose } from '@/components/Form'
  9 +import type { FormVO } from '@/api/bpm/form/types'
  10 +import { rules, allSchemas } from './form.data'
  11 +import * as FormApi from '@/api/bpm/form'
  12 +const { t } = useI18n() // 国际化
  13 +
  14 +// ========== 列表相关 ==========
  15 +const { register, tableObject, methods } = useTable<FormVO>({
  16 + getListApi: FormApi.getFormPageApi,
  17 + delListApi: FormApi.deleteFormApi
  18 +})
  19 +const { getList, setSearchParams, delList } = methods
  20 +
  21 +// ========== CRUD 相关 ==========
  22 +const actionLoading = ref(false) // 遮罩层
  23 +const actionType = ref('') // 操作按钮的类型
  24 +const dialogVisible = ref(false) // 是否显示弹出层
  25 +const dialogTitle = ref('edit') // 弹出层标题
  26 +const formRef = ref<FormExpose>() // 表单 Ref
  27 +
  28 +// 设置标题
  29 +const setDialogTile = (type: string) => {
  30 + dialogTitle.value = t('action.' + type)
  31 + actionType.value = type
  32 + dialogVisible.value = true
  33 +}
  34 +
  35 +// 新增操作
  36 +const handleCreate = () => {
  37 + setDialogTile('create')
  38 + // 重置表单
  39 + unref(formRef)?.getElFormRef()?.resetFields()
  40 +}
  41 +
  42 +// 修改操作
  43 +const handleUpdate = async (row: FormVO) => {
  44 + setDialogTile('update')
  45 + // 设置数据
  46 + const res = await FormApi.getFormApi(row.id)
  47 + unref(formRef)?.setValues(res)
  48 +}
  49 +
  50 +// 提交按钮
  51 +const submitForm = async () => {
  52 + actionLoading.value = true
  53 + // 提交请求
  54 + try {
  55 + const data = unref(formRef)?.formModel as FormVO
  56 + if (actionType.value === 'create') {
  57 + await FormApi.createFormApi(data)
  58 + ElMessage.success(t('common.createSuccess'))
  59 + } else {
  60 + await FormApi.updateFormApi(data)
  61 + ElMessage.success(t('common.updateSuccess'))
  62 + }
  63 + // 操作成功,重新加载列表
  64 + dialogVisible.value = false
  65 + await getList()
  66 + } finally {
  67 + actionLoading.value = false
  68 + }
  69 +}
  70 +
  71 +// ========== 详情相关 ==========
  72 +const detailRef = ref() // 详情 Ref
  73 +
  74 +// 详情操作
  75 +const handleDetail = async (row: FormVO) => {
  76 + // 设置数据
  77 + detailRef.value = row
  78 + setDialogTile('detail')
  79 +}
  80 +
  81 +// ========== 初始化 ==========
  82 +getList()
  83 +</script>
2 84  
3 85 <template>
4   - <div>index</div>
5   -</template>
  86 + <!-- 搜索工作区 -->
  87 + <ContentWrap>
  88 + <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
  89 + </ContentWrap>
  90 + <ContentWrap>
  91 + <!-- 操作工具栏 -->
  92 + <div class="mb-10px">
  93 + <el-button type="primary" v-hasPermi="['bpm:form:create']" @click="handleCreate">
  94 + <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
  95 + </el-button>
  96 + </div>
  97 + <!-- 列表 -->
  98 + <Table
  99 + :columns="allSchemas.tableColumns"
  100 + :selection="false"
  101 + :data="tableObject.tableList"
  102 + :loading="tableObject.loading"
  103 + :pagination="{
  104 + total: tableObject.total
  105 + }"
  106 + v-model:pageSize="tableObject.pageSize"
  107 + v-model:currentPage="tableObject.currentPage"
  108 + @register="register"
  109 + >
  110 + <template #status="{ row }">
  111 + <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
  112 + </template>
  113 + <template #createTime="{ row }">
  114 + <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
  115 + </template>
  116 + <template #action="{ row }">
  117 + <el-button link type="primary" v-hasPermi="['bpm:form:update']" @click="handleUpdate(row)">
  118 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
  119 + </el-button>
  120 + <el-button link type="primary" v-hasPermi="['bpm:form:update']" @click="handleDetail(row)">
  121 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
  122 + </el-button>
  123 + <el-button
  124 + link
  125 + type="primary"
  126 + v-hasPermi="['bpm:form:delete']"
  127 + @click="delList(row.id, false)"
  128 + >
  129 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
  130 + </el-button>
  131 + </template>
  132 + </Table>
  133 + </ContentWrap>
6 134  
7   -<style scoped></style>
  135 + <Dialog v-model="dialogVisible" :title="dialogTitle">
  136 + <!-- 对话框(添加 / 修改) -->
  137 + <Form
  138 + v-if="['create', 'update'].includes(actionType)"
  139 + :schema="allSchemas.formSchema"
  140 + :rules="rules"
  141 + ref="formRef"
  142 + />
  143 + <!-- 对话框(详情) -->
  144 + <Descriptions
  145 + v-if="actionType === 'detail'"
  146 + :schema="allSchemas.detailSchema"
  147 + :data="detailRef"
  148 + >
  149 + <template #status="{ row }">
  150 + <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
  151 + </template>
  152 + <template #createTime="{ row }">
  153 + <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
  154 + </template>
  155 + </Descriptions>
  156 + <!-- 操作按钮 -->
  157 + <template #footer>
  158 + <el-button
  159 + v-if="['create', 'update'].includes(actionType)"
  160 + type="primary"
  161 + :loading="actionLoading"
  162 + @click="submitForm"
  163 + >
  164 + {{ t('action.save') }}
  165 + </el-button>
  166 + <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
  167 + </template>
  168 + </Dialog>
  169 +</template>
... ...
yudao-ui-admin-vue3/src/views/bpm/group/group.data.ts 0 → 100644
  1 +import { reactive } from 'vue'
  2 +import { useI18n } from '@/hooks/web/useI18n'
  3 +import { required } from '@/utils/formRules'
  4 +import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas'
  5 +import { DICT_TYPE } from '@/utils/dict'
  6 +const { t } = useI18n() // 国际化
  7 +
  8 +// 表单校验
  9 +export const rules = reactive({
  10 + name: [required]
  11 +})
  12 +
  13 +// CrudSchema
  14 +const crudSchemas = reactive<CrudSchema[]>([
  15 + {
  16 + label: t('common.index'),
  17 + field: 'id',
  18 + type: 'index',
  19 + form: {
  20 + show: false
  21 + },
  22 + detail: {
  23 + show: false
  24 + }
  25 + },
  26 + {
  27 + label: '组名',
  28 + field: 'name',
  29 + search: {
  30 + show: true
  31 + }
  32 + },
  33 + {
  34 + label: '成员',
  35 + field: 'memberUserIds'
  36 + },
  37 + {
  38 + label: '描述',
  39 + field: 'description'
  40 + },
  41 + {
  42 + label: t('common.status'),
  43 + field: 'status',
  44 + dictType: DICT_TYPE.COMMON_STATUS
  45 + },
  46 + {
  47 + label: '备注',
  48 + field: 'remark',
  49 + table: {
  50 + show: false
  51 + }
  52 + },
  53 + {
  54 + label: t('common.createTime'),
  55 + field: 'createTime',
  56 + form: {
  57 + show: false
  58 + }
  59 + },
  60 + {
  61 + label: t('table.action'),
  62 + field: 'action',
  63 + width: '240px',
  64 + form: {
  65 + show: false
  66 + },
  67 + detail: {
  68 + show: false
  69 + }
  70 + }
  71 +])
  72 +export const { allSchemas } = useCrudSchemas(crudSchemas)
... ...
yudao-ui-admin-vue3/src/views/bpm/group/index.vue
1   -<script setup lang="ts"></script>
  1 +<script setup lang="ts">
  2 +import { ref, unref, onMounted } from 'vue'
  3 +import dayjs from 'dayjs'
  4 +import { ElMessage, ElSelect, ElOption } from 'element-plus'
  5 +import { DICT_TYPE } from '@/utils/dict'
  6 +import { useTable } from '@/hooks/web/useTable'
  7 +import { useI18n } from '@/hooks/web/useI18n'
  8 +import { FormExpose } from '@/components/Form'
  9 +import type { UserGroupVO } from '@/api/bpm/userGroup/types'
  10 +import { rules, allSchemas } from './group.data'
  11 +import * as UserGroupApi from '@/api/bpm/userGroup'
  12 +import { getListSimpleUsersApi } from '@/api/system/user'
  13 +import { UserVO } from '@/api/system/user/types'
  14 +
  15 +const { t } = useI18n() // 国际化
  16 +
  17 +// ========== 列表相关 ==========
  18 +const { register, tableObject, methods } = useTable<UserGroupVO>({
  19 + getListApi: UserGroupApi.getUserGroupPageApi,
  20 + delListApi: UserGroupApi.deleteUserGroupApi
  21 +})
  22 +const { getList, setSearchParams, delList } = methods
  23 +
  24 +// ========== CRUD 相关 ==========
  25 +const actionLoading = ref(false) // 遮罩层
  26 +const actionType = ref('') // 操作按钮的类型
  27 +const dialogVisible = ref(false) // 是否显示弹出层
  28 +const dialogTitle = ref('edit') // 弹出层标题
  29 +const formRef = ref<FormExpose>() // 表单 Ref
  30 +
  31 +// ========== 用户选择 ==========
  32 +const userIds = ref<number[]>([])
  33 +const userOptions = ref<UserVO[]>([])
  34 +const getUserOptions = async () => {
  35 + const res = await getListSimpleUsersApi()
  36 + userOptions.value.push(...res)
  37 +}
  38 +
  39 +// 设置标题
  40 +const setDialogTile = (type: string) => {
  41 + dialogTitle.value = t('action.' + type)
  42 + actionType.value = type
  43 + dialogVisible.value = true
  44 +}
  45 +
  46 +// 新增操作
  47 +const handleCreate = () => {
  48 + setDialogTile('create')
  49 + userIds.value = []
  50 + // 重置表单
  51 + unref(formRef)?.getElFormRef()?.resetFields()
  52 +}
  53 +
  54 +// 修改操作
  55 +const handleUpdate = async (row: UserGroupVO) => {
  56 + setDialogTile('update')
  57 + // 设置数据
  58 + const res = await UserGroupApi.getUserGroupApi(row.id)
  59 + userIds.value = res.memberUserIds
  60 + unref(formRef)?.setValues(res)
  61 +}
  62 +
  63 +// 提交按钮
  64 +const submitForm = async () => {
  65 + actionLoading.value = true
  66 + // 提交请求
  67 + try {
  68 + const data = unref(formRef)?.formModel as UserGroupVO
  69 + data.memberUserIds = userIds.value
  70 + if (actionType.value === 'create') {
  71 + await UserGroupApi.createUserGroupApi(data)
  72 + ElMessage.success(t('common.createSuccess'))
  73 + } else {
  74 + await UserGroupApi.updateUserGroupApi(data)
  75 + ElMessage.success(t('common.updateSuccess'))
  76 + }
  77 + // 操作成功,重新加载列表
  78 + dialogVisible.value = false
  79 + await getList()
  80 + } finally {
  81 + actionLoading.value = false
  82 + }
  83 +}
  84 +
  85 +// 根据用户名获取用户真实名
  86 +const getUserNickName = (userId: number) => {
  87 + for (const user of userOptions.value) {
  88 + if (user.id === userId) return user.nickname
  89 + }
  90 + return '未知(' + userId + ')'
  91 +}
  92 +// ========== 详情相关 ==========
  93 +const detailRef = ref() // 详情 Ref
  94 +
  95 +// 详情操作
  96 +const handleDetail = async (row: UserGroupVO) => {
  97 + // 设置数据
  98 + detailRef.value = row
  99 + setDialogTile('detail')
  100 +}
  101 +
  102 +// ========== 初始化 ==========
  103 +onMounted(async () => {
  104 + await getList()
  105 + await getUserOptions()
  106 +})
  107 +</script>
2 108  
3 109 <template>
4   - <div>index</div>
5   -</template>
  110 + <!-- 搜索工作区 -->
  111 + <ContentWrap>
  112 + <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
  113 + </ContentWrap>
  114 + <ContentWrap>
  115 + <!-- 操作工具栏 -->
  116 + <div class="mb-10px">
  117 + <el-button type="primary" v-hasPermi="['bpm:user-group:create']" @click="handleCreate">
  118 + <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
  119 + </el-button>
  120 + </div>
  121 + <!-- 列表 -->
  122 + <Table
  123 + :columns="allSchemas.tableColumns"
  124 + :selection="false"
  125 + :data="tableObject.tableList"
  126 + :loading="tableObject.loading"
  127 + :pagination="{
  128 + total: tableObject.total
  129 + }"
  130 + v-model:pageSize="tableObject.pageSize"
  131 + v-model:currentPage="tableObject.currentPage"
  132 + @register="register"
  133 + >
  134 + <template #status="{ row }">
  135 + <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
  136 + </template>
  137 + <template #memberUserIds="{ row }">
  138 + <span v-for="userId in row.memberUserIds" :key="userId">
  139 + {{ getUserNickName(userId) + ' ' }}
  140 + </span>
  141 + </template>
  142 + <template #createTime="{ row }">
  143 + <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
  144 + </template>
  145 + <template #action="{ row }">
  146 + <el-button
  147 + link
  148 + type="primary"
  149 + v-hasPermi="['bpm:user-group:update']"
  150 + @click="handleUpdate(row)"
  151 + >
  152 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
  153 + </el-button>
  154 + <el-button
  155 + link
  156 + type="primary"
  157 + v-hasPermi="['bpm:user-group:update']"
  158 + @click="handleDetail(row)"
  159 + >
  160 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
  161 + </el-button>
  162 + <el-button
  163 + link
  164 + type="primary"
  165 + v-hasPermi="['bpm:user-group:delete']"
  166 + @click="delList(row.id, false)"
  167 + >
  168 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
  169 + </el-button>
  170 + </template>
  171 + </Table>
  172 + </ContentWrap>
6 173  
7   -<style scoped></style>
  174 + <Dialog v-model="dialogVisible" :title="dialogTitle">
  175 + <!-- 对话框(添加 / 修改) -->
  176 + <Form
  177 + v-if="['create', 'update'].includes(actionType)"
  178 + :schema="allSchemas.formSchema"
  179 + :rules="rules"
  180 + ref="formRef"
  181 + >
  182 + <template #memberUserIds>
  183 + <el-select v-model="userIds" multiple>
  184 + <el-option
  185 + v-for="item in userOptions"
  186 + :key="item.id"
  187 + :label="item.nickname"
  188 + :value="item.id"
  189 + />
  190 + </el-select>
  191 + </template>
  192 + </Form>
  193 + <!-- 对话框(详情) -->
  194 + <Descriptions
  195 + v-if="actionType === 'detail'"
  196 + :schema="allSchemas.detailSchema"
  197 + :data="detailRef"
  198 + >
  199 + <template #memberUserIds="{ row }">
  200 + <span v-for="userId in row.memberUserIds" :key="userId">
  201 + {{ getUserNickName(userId) + ' ' }}
  202 + </span>
  203 + </template>
  204 + <template #status="{ row }">
  205 + <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
  206 + </template>
  207 + <template #createTime="{ row }">
  208 + <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
  209 + </template>
  210 + </Descriptions>
  211 + <!-- 操作按钮 -->
  212 + <template #footer>
  213 + <el-button
  214 + v-if="['create', 'update'].includes(actionType)"
  215 + type="primary"
  216 + :loading="actionLoading"
  217 + @click="submitForm"
  218 + >
  219 + {{ t('action.save') }}
  220 + </el-button>
  221 + <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
  222 + </template>
  223 + </Dialog>
  224 +</template>
... ...
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
... ... @@ -23,10 +23,6 @@ const { getList, setSearchParams, exportList } = methods
23 23 const detailRef = ref() // 详情 Ref
24 24 const dialogVisible = ref(false) // 是否显示弹出层
25 25 const dialogTitle = ref('') // 弹出层标题
26   -// 导出操作
27   -const handleExport = async () => {
28   - await exportList('用户数据.xls')
29   -}
30 26  
31 27 // 详情操作
32 28 const handleDetail = (row: ApiErrorLogVO) => {
... ... @@ -57,7 +53,7 @@ getList()
57 53 <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
58 54 </ContentWrap>
59 55 <ContentWrap>
60   - <el-button v-hasPermi="['infra:api-error-log:export']" @click="handleExport">
  56 + <el-button v-hasPermi="['infra:api-error-log:export']" @click="exportList('错误数据.xls')">
61 57 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
62 58 </el-button>
63 59 <!-- 列表 -->
... ...
yudao-ui-admin-vue3/src/views/infra/codegen/index.vue
... ... @@ -49,10 +49,6 @@ const handleGenTable = async (row: CodegenTableVO) =&gt; {
49 49 const res = await CodegenApi.downloadCodegenApi(row.id)
50 50 download.zip(res, 'codegen-' + row.className + '.zip')
51 51 }
52   -// 删除操作
53   -const handleDelete = (row: CodegenTableVO) => {
54   - delList(row.id, false)
55   -}
56 52 // 查询操作
57 53 const handleQuery = () => {
58 54 getList()
... ... @@ -112,7 +108,7 @@ getList()
112 108 link
113 109 type="primary"
114 110 v-hasPermi="['infra:codegen:delete']"
115   - @click="handleDelete(row)"
  111 + @click="delList(row.id, false)"
116 112 >
117 113 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
118 114 </el-button>
... ...
yudao-ui-admin-vue3/src/views/infra/config/index.vue
... ... @@ -19,11 +19,6 @@ const { register, tableObject, methods } = useTable&lt;ConfigVO&gt;({
19 19 })
20 20 const { getList, setSearchParams, delList, exportList } = methods
21 21  
22   -// 导出操作
23   -const handleExport = async () => {
24   - await exportList('参数配置.xls')
25   -}
26   -
27 22 // ========== CRUD 相关 ==========
28 23 const actionLoading = ref(false) // 遮罩层
29 24 const actionType = ref('') // 操作按钮的类型
... ... @@ -74,11 +69,6 @@ const submitForm = async () =&gt; {
74 69 }
75 70 }
76 71  
77   -// 删除操作
78   -const handleDelete = (row: ConfigVO) => {
79   - delList(row.id, false)
80   -}
81   -
82 72 // ========== 详情相关 ==========
83 73 const detailRef = ref() // 详情 Ref
84 74  
... ... @@ -108,7 +98,7 @@ getList()
108 98 type="warning"
109 99 v-hasPermi="['infra:config:export']"
110 100 :loading="tableObject.exportLoading"
111   - @click="handleExport"
  101 + @click="exportList('参数配置.xls')"
112 102 >
113 103 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
114 104 </el-button>
... ... @@ -156,7 +146,7 @@ getList()
156 146 link
157 147 type="primary"
158 148 v-hasPermi="['infra:config:delete']"
159   - @click="handleDelete(row)"
  149 + @click="delList(row.id, false)"
160 150 >
161 151 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
162 152 </el-button>
... ...
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
... ... @@ -79,11 +79,6 @@ const submitForm = async () =&gt; {
79 79 }
80 80 }
81 81  
82   -// 删除操作
83   -const handleDelete = (row: FileConfigVO) => {
84   - delList(row.id, false)
85   -}
86   -
87 82 // ========== 详情相关 ==========
88 83 const detailRef = ref() // 详情 Ref
89 84  
... ... @@ -169,7 +164,7 @@ getList()
169 164 link
170 165 type="primary"
171 166 v-hasPermi="['infra:file-config:delete']"
172   - @click="handleDelete(row)"
  167 + @click="delList(row.id, false)"
173 168 >
174 169 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
175 170 </el-button>
... ...
yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
... ... @@ -69,10 +69,6 @@ const excelUploadError = (): void =&gt; {
69 69 const detailRef = ref() // 详情 Ref
70 70 const dialogVisible = ref(false) // 是否显示弹出层
71 71 const dialogTitle = ref('') // 弹出层标题
72   -// 删除操作
73   -const handleDelete = (row: FileVO) => {
74   - delList(row.id, false)
75   -}
76 72 // 详情操作
77 73 const handleDetail = (row: FileVO) => {
78 74 // 设置数据
... ... @@ -128,7 +124,7 @@ getList()
128 124 link
129 125 type="primary"
130 126 v-hasPermi="['infra:file:delete']"
131   - @click="handleDelete(row)"
  127 + @click="delList(row.id, false)"
132 128 >
133 129 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
134 130 </el-button>
... ...
yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue
... ... @@ -25,10 +25,6 @@ const getTableList = async () =&gt; {
25 25 }
26 26 await getList()
27 27 }
28   -// 导出操作
29   -const handleExport = async () => {
30   - await exportList('定时任务日志.xls')
31   -}
32 28  
33 29 // ========== CRUD 相关 ==========
34 30 const dialogVisible = ref(false) // 是否显示弹出层
... ... @@ -63,7 +59,7 @@ onMounted(() =&gt; {
63 59 type="warning"
64 60 v-hasPermi="['infra:job:export']"
65 61 :loading="tableObject.exportLoading"
66   - @click="handleExport"
  62 + @click="exportList('定时任务日志.xls')"
67 63 >
68 64 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
69 65 </el-button>
... ...
yudao-ui-admin-vue3/src/views/infra/job/index.vue
... ... @@ -22,11 +22,6 @@ const { register, tableObject, methods } = useTable&lt;JobVO&gt;({
22 22 })
23 23 const { getList, setSearchParams, delList, exportList } = methods
24 24  
25   -// 导出操作
26   -const handleExport = async () => {
27   - await exportList('定时任务.xls')
28   -}
29   -
30 25 // ========== CRUD 相关 ==========
31 26 const actionLoading = ref(false) // 遮罩层
32 27 const actionType = ref('') // 操作按钮的类型
... ... @@ -92,11 +87,6 @@ const submitForm = async () =&gt; {
92 87 }
93 88 }
94 89  
95   -// 删除操作
96   -const handleDelete = (row: JobVO) => {
97   - delList(row.id, false)
98   -}
99   -
100 90 // ========== 详情相关 ==========
101 91 const detailRef = ref() // 详情 Ref
102 92  
... ... @@ -126,7 +116,7 @@ getList()
126 116 type="warning"
127 117 v-hasPermi="['infra:job:export']"
128 118 :loading="tableObject.exportLoading"
129   - @click="handleExport"
  119 + @click="exportList('定时任务.xls')"
130 120 >
131 121 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
132 122 </el-button>
... ... @@ -157,7 +147,12 @@ getList()
157 147 <el-button link type="primary" v-hasPermi="['infra:job:query']" @click="handleDetail(row)">
158 148 <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
159 149 </el-button>
160   - <el-button link type="primary" v-hasPermi="['infra:job:delete']" @click="handleDelete(row)">
  150 + <el-button
  151 + link
  152 + type="primary"
  153 + v-hasPermi="['infra:job:delete']"
  154 + @click="delList(row.id, false)"
  155 + >
161 156 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
162 157 </el-button>
163 158 <el-button link type="primary" v-hasPermi="['infra:job:trigger']" @click="handleRun(row)">
... ...
yudao-ui-admin-vue3/src/views/pay/app/index.vue
... ... @@ -19,11 +19,6 @@ const { register, tableObject, methods } = useTable&lt;AppVO&gt;({
19 19 })
20 20 const { getList, setSearchParams, delList, exportList } = methods
21 21  
22   -// 导出操作
23   -const handleExport = async () => {
24   - await exportList('应用数据.xls')
25   -}
26   -
27 22 // ========== CRUD 相关 ==========
28 23 const actionLoading = ref(false) // 遮罩层
29 24 const actionType = ref('') // 操作按钮的类型
... ... @@ -74,11 +69,6 @@ const submitForm = async () =&gt; {
74 69 }
75 70 }
76 71  
77   -// 删除操作
78   -const handleDelete = (row: AppVO) => {
79   - delList(row.id, false)
80   -}
81   -
82 72 // ========== 详情相关 ==========
83 73 const detailRef = ref() // 详情 Ref
84 74  
... ... @@ -108,7 +98,7 @@ getList()
108 98 type="warning"
109 99 v-hasPermi="['system:post:export']"
110 100 :loading="tableObject.exportLoading"
111   - @click="handleExport"
  101 + @click="exportList('应用数据.xls')"
112 102 >
113 103 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
114 104 </el-button>
... ... @@ -153,7 +143,7 @@ getList()
153 143 link
154 144 type="primary"
155 145 v-hasPermi="['system:post:delete']"
156   - @click="handleDelete(row)"
  146 + @click="delList(row.id, false)"
157 147 >
158 148 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
159 149 </el-button>
... ...
yudao-ui-admin-vue3/src/views/pay/merchant/index.vue
... ... @@ -19,11 +19,6 @@ const { register, tableObject, methods } = useTable&lt;MerchantVO&gt;({
19 19 })
20 20 const { getList, setSearchParams, delList, exportList } = methods
21 21  
22   -// 导出操作
23   -const handleExport = async () => {
24   - await exportList('商户数据.xls')
25   -}
26   -
27 22 // ========== CRUD 相关 ==========
28 23 const actionLoading = ref(false) // 遮罩层
29 24 const actionType = ref('') // 操作按钮的类型
... ... @@ -74,11 +69,6 @@ const submitForm = async () =&gt; {
74 69 }
75 70 }
76 71  
77   -// 删除操作
78   -const handleDelete = (row: MerchantVO) => {
79   - delList(row.id, false)
80   -}
81   -
82 72 // ========== 详情相关 ==========
83 73 const detailRef = ref() // 详情 Ref
84 74  
... ... @@ -108,7 +98,7 @@ getList()
108 98 type="warning"
109 99 v-hasPermi="['system:post:export']"
110 100 :loading="tableObject.exportLoading"
111   - @click="handleExport"
  101 + @click="exportList('商户数据.xls')"
112 102 >
113 103 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
114 104 </el-button>
... ... @@ -153,7 +143,7 @@ getList()
153 143 link
154 144 type="primary"
155 145 v-hasPermi="['system:post:delete']"
156   - @click="handleDelete(row)"
  146 + @click="delList(row.id, false)"
157 147 >
158 148 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
159 149 </el-button>
... ...
yudao-ui-admin-vue3/src/views/pay/order/index.vue
... ... @@ -17,10 +17,6 @@ const { register, tableObject, methods } = useTable&lt;OrderVO&gt;({
17 17 exportListApi: OrderApi.exportOrderApi
18 18 })
19 19 const { getList, setSearchParams, delList, exportList } = methods
20   -// 导出操作
21   -const handleExport = async () => {
22   - await exportList('订单数据.xls')
23   -}
24 20 // ========== CRUD 相关 ==========
25 21 const actionLoading = ref(false) // 遮罩层
26 22 const actionType = ref('') // 操作按钮的类型
... ... @@ -71,11 +67,6 @@ const submitForm = async () =&gt; {
71 67 }
72 68 }
73 69  
74   -// 删除操作
75   -const handleDelete = (row: OrderVO) => {
76   - delList(row.id, false)
77   -}
78   -
79 70 // ========== 详情相关 ==========
80 71 const detailRef = ref() // 详情 Ref
81 72  
... ... @@ -105,7 +96,7 @@ getList()
105 96 type="warning"
106 97 v-hasPermi="['pay:order:export']"
107 98 :loading="tableObject.exportLoading"
108   - @click="handleExport"
  99 + @click="exportList('订单数据.xls')"
109 100 >
110 101 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
111 102 </el-button>
... ... @@ -133,7 +124,12 @@ getList()
133 124 <el-button link type="primary" v-hasPermi="['pay:order:update']" @click="handleDetail(row)">
134 125 <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
135 126 </el-button>
136   - <el-button link type="primary" v-hasPermi="['pay:order:delete']" @click="handleDelete(row)">
  127 + <el-button
  128 + link
  129 + type="primary"
  130 + v-hasPermi="['pay:order:delete']"
  131 + @click="delList(row.id, false)"
  132 + >
137 133 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
138 134 </el-button>
139 135 </template>
... ...
yudao-ui-admin-vue3/src/views/pay/refund/index.vue
... ... @@ -17,20 +17,10 @@ const { register, tableObject, methods } = useTable&lt;RefundVO&gt;({
17 17 })
18 18 const { getList, setSearchParams, delList, exportList } = methods
19 19  
20   -// 导出操作
21   -const handleExport = async () => {
22   - await exportList('退款订单.xls')
23   -}
24   -
25 20 // ========== CRUD 相关 ==========
26 21 const dialogVisible = ref(false) // 是否显示弹出层
27 22 const dialogTitle = ref('edit') // 弹出层标题
28 23  
29   -// 删除操作
30   -const handleDelete = (row: RefundVO) => {
31   - delList(row.id, false)
32   -}
33   -
34 24 // ========== 详情相关 ==========
35 25 const detailRef = ref() // 详情 Ref
36 26  
... ... @@ -58,7 +48,7 @@ getList()
58 48 type="warning"
59 49 v-hasPermi="['system:post:export']"
60 50 :loading="tableObject.exportLoading"
61   - @click="handleExport"
  51 + @click="exportList('退款订单.xls')"
62 52 >
63 53 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
64 54 </el-button>
... ... @@ -95,7 +85,7 @@ getList()
95 85 link
96 86 type="primary"
97 87 v-hasPermi="['system:post:delete']"
98   - @click="handleDelete(row)"
  88 + @click="delList(row.id, false)"
99 89 >
100 90 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
101 91 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/dict/index.vue
... ... @@ -38,10 +38,6 @@ const handleTypeUpdate = async (row: DictTypeVO) =&gt; {
38 38 const res = await DictTypeApi.getDictTypeApi(row.id)
39 39 unref(typeFormRef)?.setValues(res)
40 40 }
41   -// 字典分类删除操作
42   -const handleTypeDelete = async (row: DictTypeVO) => {
43   - await delTypeList(row.id, false)
44   -}
45 41  
46 42 // ========== 字典数据列表相关 ==========
47 43 const tableTypeSelect = ref(false)
... ... @@ -71,10 +67,6 @@ const handleDataUpdate = async (row: DictDataVO) =&gt; {
71 67 const res = await DictDataApi.getDictDataApi(row.id)
72 68 unref(dataFormRef)?.setValues(res)
73 69 }
74   -// 字典数据删除操作
75   -const handleDataDelete = async (row: DictTypeVO) => {
76   - await delDataList(row.id, false)
77   -}
78 70 // 字典分类点击行事件
79 71 const parentType = ref('')
80 72 const onClickType = async (data: { [key: string]: any }) => {
... ... @@ -195,7 +187,7 @@ onMounted(async () =&gt; {
195 187 link
196 188 type="primary"
197 189 v-hasPermi="['system:dict:delete']"
198   - @click="handleTypeDelete(row)"
  190 + @click="delTypeList(row.id, false)"
199 191 >
200 192 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
201 193 </el-button>
... ... @@ -252,7 +244,7 @@ onMounted(async () =&gt; {
252 244 link
253 245 type="primary"
254 246 v-hasPermi="['system:dict:delete']"
255   - @click="handleDataDelete(row)"
  247 + @click="delDataList(row.id, false)"
256 248 >
257 249 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
258 250 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
... ... @@ -68,11 +68,6 @@ const submitForm = async () =&gt; {
68 68 }
69 69 }
70 70  
71   -// 删除操作
72   -const handleDelete = (row: ErrorCodeVO) => {
73   - delList(row.id, false)
74   -}
75   -
76 71 // ========== 详情相关 ==========
77 72 const detailRef = ref() // 详情 Ref
78 73  
... ... @@ -139,7 +134,7 @@ getList()
139 134 link
140 135 type="primary"
141 136 v-hasPermi="['system:error-code:delete']"
142   - @click="handleDelete(row)"
  137 + @click="delList(row.id, false)"
143 138 >
144 139 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
145 140 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/notice/index.vue
... ... @@ -67,11 +67,6 @@ const submitForm = async () =&gt; {
67 67 }
68 68 }
69 69  
70   -// 删除操作
71   -const handleDelete = (row: NoticeVO) => {
72   - delList(row.id, false)
73   -}
74   -
75 70 // ========== 详情相关 ==========
76 71 const detailRef = ref() // 详情 Ref
77 72  
... ... @@ -141,7 +136,7 @@ getList()
141 136 link
142 137 type="primary"
143 138 v-hasPermi="['system:notice:delete']"
144   - @click="handleDelete(row)"
  139 + @click="delList(row.id, false)"
145 140 >
146 141 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
147 142 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue
... ... @@ -68,11 +68,6 @@ const submitForm = async () =&gt; {
68 68 }
69 69 }
70 70  
71   -// 删除操作
72   -const handleDelete = (row: OAuth2ClientVo) => {
73   - delList(row.id, false)
74   -}
75   -
76 71 // ========== 详情相关 ==========
77 72 const detailRef = ref() // 详情 Ref
78 73  
... ... @@ -152,7 +147,7 @@ getList()
152 147 link
153 148 type="primary"
154 149 v-hasPermi="['system:oauth2-client:delete']"
155   - @click="handleDelete(row)"
  150 + @click="delList(row.id, false)"
156 151 >
157 152 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
158 153 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
... ... @@ -18,10 +18,6 @@ const detailRef = ref() // 详情 Ref
18 18 const dialogVisible = ref(false) // 是否显示弹出层
19 19 const dialogTitle = ref(t('action.detail')) // 弹出层标题
20 20 const { getList, setSearchParams, exportList } = methods
21   -// 导出操作
22   -const handleExport = async () => {
23   - await exportList('操作日志.xls')
24   -}
25 21 // 详情
26 22 const handleDetail = (row: OperateLogVO) => {
27 23 // 设置数据
... ... @@ -41,7 +37,7 @@ getList()
41 37 type="warning"
42 38 v-hasPermi="['system:operate-log:export']"
43 39 :loading="tableObject.exportLoading"
44   - @click="handleExport"
  40 + @click="exportList('操作日志.xls')"
45 41 >
46 42 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
47 43 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/post/index.vue
... ... @@ -19,11 +19,6 @@ const { register, tableObject, methods } = useTable&lt;PostVO&gt;({
19 19 })
20 20 const { getList, setSearchParams, delList, exportList } = methods
21 21  
22   -// 导出操作
23   -const handleExport = async () => {
24   - await exportList('岗位数据.xls')
25   -}
26   -
27 22 // ========== CRUD 相关 ==========
28 23 const actionLoading = ref(false) // 遮罩层
29 24 const actionType = ref('') // 操作按钮的类型
... ... @@ -74,11 +69,6 @@ const submitForm = async () =&gt; {
74 69 }
75 70 }
76 71  
77   -// 删除操作
78   -const handleDelete = (row: PostVO) => {
79   - delList(row.id, false)
80   -}
81   -
82 72 // ========== 详情相关 ==========
83 73 const detailRef = ref() // 详情 Ref
84 74  
... ... @@ -108,7 +98,7 @@ getList()
108 98 type="warning"
109 99 v-hasPermi="['system:post:export']"
110 100 :loading="tableObject.exportLoading"
111   - @click="handleExport"
  101 + @click="exportList('岗位数据.xls')"
112 102 >
113 103 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
114 104 </el-button>
... ... @@ -153,7 +143,7 @@ getList()
153 143 link
154 144 type="primary"
155 145 v-hasPermi="['system:post:delete']"
156   - @click="handleDelete(row)"
  146 + @click="delList(row.id, false)"
157 147 >
158 148 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
159 149 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/role/index.vue
... ... @@ -83,11 +83,6 @@ const submitForm = async () =&gt; {
83 83 }
84 84 }
85 85  
86   -// 删除操作
87   -const handleDelete = (row: RoleVO) => {
88   - delList(row.id, false)
89   -}
90   -
91 86 // ========== 详情相关 ==========
92 87 const detailRef = ref() // 详情 Ref
93 88  
... ... @@ -221,7 +216,7 @@ getList()
221 216 link
222 217 type="primary"
223 218 v-hasPermi="['system:role:delete']"
224   - @click="handleDelete(row)"
  219 + @click="delList(row.id, false)"
225 220 >
226 221 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
227 222 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
... ... @@ -19,10 +19,6 @@ const { register, tableObject, methods } = useTable&lt;SensitiveWordVO&gt;({
19 19 })
20 20 const { getList, setSearchParams, delList, exportList } = methods
21 21  
22   -// 导出操作
23   -const handleExport = async () => {
24   - await exportList('敏感词数据.xls')
25   -}
26 22 // 获取标签
27 23 const tagsOptions = ref()
28 24 const getTags = async () => {
... ... @@ -79,11 +75,6 @@ const submitForm = async () =&gt; {
79 75 }
80 76 }
81 77  
82   -// 删除操作
83   -const handleDelete = (row: SensitiveWordVO) => {
84   - delList(row.id, false)
85   -}
86   -
87 78 // ========== 详情相关 ==========
88 79 const detailRef = ref() // 详情 Ref
89 80  
... ... @@ -116,7 +107,7 @@ onMounted(async () =&gt; {
116 107 type="warning"
117 108 v-hasPermi="['system:post:export']"
118 109 :loading="tableObject.exportLoading"
119   - @click="handleExport"
  110 + @click="exportList('敏感词数据.xls')"
120 111 >
121 112 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
122 113 </el-button>
... ... @@ -171,7 +162,7 @@ onMounted(async () =&gt; {
171 162 link
172 163 type="primary"
173 164 v-hasPermi="['system:post:delete']"
174   - @click="handleDelete(row)"
  165 + @click="delList(row.id, false)"
175 166 >
176 167 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
177 168 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/sms/smsChannel/index.vue
... ... @@ -68,11 +68,6 @@ const submitForm = async () =&gt; {
68 68 }
69 69 }
70 70  
71   -// 删除操作
72   -const handleDelete = (row: SmsChannelVO) => {
73   - delList(row.id, false)
74   -}
75   -
76 71 // ========== 详情相关 ==========
77 72 const detailRef = ref() // 详情 Ref
78 73  
... ... @@ -142,7 +137,7 @@ getList()
142 137 link
143 138 type="primary"
144 139 v-hasPermi="['system:sms-channel:delete']"
145   - @click="handleDelete(row)"
  140 + @click="delList(row.id, false)"
146 141 >
147 142 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
148 143 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue
... ... @@ -68,11 +68,6 @@ const submitForm = async () =&gt; {
68 68 }
69 69 }
70 70  
71   -// 删除操作
72   -const handleDelete = (row: SmsTemplateVO) => {
73   - delList(row.id, false)
74   -}
75   -
76 71 // ========== 详情相关 ==========
77 72 const detailRef = ref() // 详情 Ref
78 73  
... ... @@ -190,7 +185,7 @@ getList()
190 185 link
191 186 type="primary"
192 187 v-hasPermi="['system:sms-template:delete']"
193   - @click="handleDelete(row)"
  188 + @click="delList(row.id, false)"
194 189 >
195 190 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
196 191 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/tenant/index.vue
... ... @@ -21,10 +21,6 @@ const { register, tableObject, methods } = useTable&lt;TenantVO&gt;({
21 21 })
22 22 const { getList, setSearchParams, delList, exportList } = methods
23 23  
24   -// 导出操作
25   -const handleExport = async () => {
26   - await exportList('租户数据.xls')
27   -}
28 24 // ========== 套餐 ==========
29 25 const tenantPackageId = ref() // 套餐
30 26 const tenantPackageOptions = ref<TenantPackageVO[]>([]) //套餐列表
... ... @@ -97,11 +93,6 @@ const submitForm = async () =&gt; {
97 93 }
98 94 }
99 95  
100   -// 删除操作
101   -const handleDelete = (row: TenantVO) => {
102   - delList(row.id, false)
103   -}
104   -
105 96 // ========== 详情相关 ==========
106 97 const detailRef = ref() // 详情 Ref
107 98  
... ... @@ -134,7 +125,7 @@ onMounted(async () =&gt; {
134 125 type="warning"
135 126 v-hasPermi="['system:tenant:export']"
136 127 :loading="tableObject.exportLoading"
137   - @click="handleExport"
  128 + @click="exportList('租户数据.xls')"
138 129 >
139 130 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
140 131 </el-button>
... ... @@ -191,7 +182,7 @@ onMounted(async () =&gt; {
191 182 link
192 183 type="primary"
193 184 v-hasPermi="['system:tenant:delete']"
194   - @click="handleDelete(row)"
  185 + @click="delList(row.id, false)"
195 186 >
196 187 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
197 188 </el-button>
... ...
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
... ... @@ -101,11 +101,6 @@ const submitForm = async () =&gt; {
101 101 }
102 102 }
103 103  
104   -// 删除操作
105   -const handleDelete = (row: TenantPackageVO) => {
106   - delList(row.id, false)
107   -}
108   -
109 104 // ========== 初始化 ==========
110 105 onMounted(async () => {
111 106 await getList()
... ... @@ -149,7 +144,7 @@ onMounted(async () =&gt; {
149 144 <el-button link type="primary" @click="handleUpdate(row)">
150 145 <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
151 146 </el-button>
152   - <el-button link type="primary" @click="handleDelete(row)">
  147 + <el-button link type="primary" @click="delList(row.id, false)">
153 148 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
154 149 </el-button>
155 150 </template>
... ...
yudao-ui-admin-vue3/src/views/system/user/index.vue
... ... @@ -164,15 +164,6 @@ const handleResetPwd = (row: UserVO) =&gt; {
164 164 })
165 165 })
166 166 }
167   -// 删除操作
168   -const handleDelete = (row: UserVO) => {
169   - delList(row.id, false)
170   -}
171   -
172   -// 导出操作
173   -const handleExport = async () => {
174   - await exportList('用户数据.xls')
175   -}
176 167  
177 168 // ========== 详情相关 ==========
178 169 const detailRef = ref()
... ... @@ -300,7 +291,11 @@ getList()
300 291 >
301 292 <Icon icon="ep:upload" class="mr-5px" /> {{ t('action.import') }}
302 293 </el-button>
303   - <el-button type="warning" v-hasPermi="['system:user:export']" @click="handleExport">
  294 + <el-button
  295 + type="warning"
  296 + v-hasPermi="['system:user:export']"
  297 + @click="exportList('用户数据.xls')"
  298 + >
304 299 <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
305 300 </el-button>
306 301 </div>
... ... @@ -360,7 +355,7 @@ getList()
360 355 link
361 356 type="primary"
362 357 v-hasPermi="['system:user:delete']"
363   - @click="handleDelete(row)"
  358 + @click="delList(row.id, false)"
364 359 >
365 360 <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
366 361 </el-button>
... ...
yudao-ui-admin-vue3/vite.config.ts
... ... @@ -137,16 +137,19 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; {
137 137 'vue',
138 138 'vue-router',
139 139 'vue-types',
  140 + 'vue-i18n',
140 141 'element-plus/es/locale/lang/zh-cn',
141 142 'element-plus/es/locale/lang/en',
142 143 '@iconify/iconify',
143 144 '@vueuse/core',
144 145 'axios',
145 146 'qs',
  147 + 'dayjs',
146 148 'echarts',
147 149 'echarts-wordcloud',
148 150 'intro.js',
149 151 'qrcode',
  152 + 'pinia',
150 153 '@wangeditor/editor',
151 154 '@wangeditor/editor-for-vue'
152 155 ]
... ...
yudao-ui-admin/src/views/bpm/form/index.vue
... ... @@ -101,10 +101,8 @@ export default {
101 101 /** 查询列表 */
102 102 getList() {
103 103 this.loading = true;
104   - // 处理查询参数
105   - let params = {...this.queryParams};
106 104 // 执行查询
107   - getFormPage(params).then(response => {
  105 + getFormPage(this.queryParams).then(response => {
108 106 this.list = response.data.list;
109 107 this.total = response.data.total;
110 108 this.loading = false;
... ...
yudao-ui-admin/src/views/bpm/model/index.vue
... ... @@ -121,7 +121,7 @@
121 121 <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
122 122 <el-form ref="form" :model="form" :rules="rules" label-width="110px">
123 123 <el-form-item label="流程标识" prop="key">
124   - <el-input v-model="form.key" placeholder="请输入流标标识" style="width: 330px;" :disabled="form.id" />
  124 + <el-input v-model="form.key" placeholder="请输入流标标识" style="width: 330px;" :disabled="!!form.id" />
125 125 <el-tooltip v-if="!form.id" class="item" effect="light" content="新建后,流程标识不可修改!" placement="top">
126 126 <i style="padding-left: 5px;" class="el-icon-question" />
127 127 </el-tooltip>
... ... @@ -130,7 +130,7 @@
130 130 </el-tooltip>
131 131 </el-form-item>
132 132 <el-form-item label="流程名称" prop="name">
133   - <el-input v-model="form.name" placeholder="请输入流程名称" :disabled="form.id" clearable />
  133 + <el-input v-model="form.name" placeholder="请输入流程名称" :disabled="!!form.id" clearable />
134 134 </el-form-item>
135 135 <el-form-item v-if="form.id" label="流程分类" prop="category">
136 136 <el-select v-model="form.category" placeholder="请选择流程分类" clearable style="width: 100%">
... ...
yudao-ui-admin/src/views/infra/file/index.vue
... ... @@ -131,7 +131,7 @@ export default {
131 131 getList() {
132 132 this.loading = true;
133 133 // 执行查询
134   - getFilePage(params).then(response => {
  134 + getFilePage(this.queryParams).then(response => {
135 135 this.list = response.data.list;
136 136 this.total = response.data.total;
137 137 this.loading = false;
... ...
yudao-ui-admin/src/views/mall/market/banner/index.vue
... ... @@ -165,7 +165,7 @@ export default {
165 165 getList() {
166 166 this.loading = true;
167 167 // 执行查询
168   - getBannerPage(params).then(response => {
  168 + getBannerPage(this.queryParams).then(response => {
169 169 this.list = response.data.list;
170 170 this.total = response.data.total;
171 171 this.loading = false;
... ...
yudao-ui-admin/src/views/mall/product/spu/index.vue
... ... @@ -571,7 +571,7 @@
571 571 getList() {
572 572 this.loading = true;
573 573 // 执行查询
574   - getSpuPage(params).then(response => {
  574 + getSpuPage(this.queryParams).then(response => {
575 575 this.list = response.data.list;
576 576 this.total = response.data.total;
577 577 this.loading = false;
... ...
yudao-ui-admin/src/views/system/oauth2/client/index.vue
... ... @@ -206,10 +206,8 @@ export default {
206 206 /** 查询列表 */
207 207 getList() {
208 208 this.loading = true;
209   - // 处理查询参数
210   - let params = {...this.queryParams};
211 209 // 执行查询
212   - getOAuth2ClientPage(params).then(response => {
  210 + getOAuth2ClientPage(this.queryParams).then(response => {
213 211 this.list = response.data.list;
214 212 this.total = response.data.total;
215 213 this.loading = false;
... ...