From e521af0eaee067671aab2d2807ac9b5aa3d4cf30 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期三, 25 十二月 2024 23:45:06 +0800 Subject: [PATCH] !169 fix 修复用户管理界面修改按钮权限字符串错误 Merge pull request !169 from QianRj/dev --- src/views/system/user/index.vue | 92 +++++++++++++++++++++++++--------------------- 1 files changed, 50 insertions(+), 42 deletions(-) diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 6a7c874..430c55a 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -23,33 +23,28 @@ <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <div v-show="showSearch" class="mb-[10px]"> <el-card shadow="hover"> - <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="68px"> + <el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName"> - <el-input v-model="queryParams.userName" placeholder="璇疯緭鍏ョ敤鎴峰悕绉�" clearable style="width: 240px" @keyup.enter="handleQuery" /> + <el-input v-model="queryParams.userName" placeholder="璇疯緭鍏ョ敤鎴峰悕绉�" clearable @keyup.enter="handleQuery" /> </el-form-item> <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber"> - <el-input - v-model="queryParams.phonenumber" - placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" - clearable - style="width: 240px" - @keyup.enter="handleQuery" - /> + <el-input v-model="queryParams.phonenumber" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" clearable @keyup.enter="handleQuery" /> </el-form-item> <el-form-item label="鐘舵��" prop="status"> - <el-select v-model="queryParams.status" placeholder="鐢ㄦ埛鐘舵��" clearable style="width: 240px" > + <el-select v-model="queryParams.status" placeholder="鐢ㄦ埛鐘舵��" clearable> <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="鍒涘缓鏃堕棿" style="width: 308px"> <el-date-picker v-model="dateRange" - value-format="YYYY-MM-DD" + value-format="YYYY-MM-DD HH:mm:ss" type="daterange" range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" + :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]" ></el-date-picker> </el-form-item> <el-form-item> @@ -68,12 +63,12 @@ <el-button v-has-permi="['system:user:add']" type="primary" plain icon="Plus" @click="handleAdd()">鏂板</el-button> </el-col> <el-col :span="1.5"> - <el-button v-has-permi="['system:user:add']" type="success" plain :disabled="single" icon="Edit" @click="handleUpdate()"> + <el-button v-has-permi="['system:user:edit']" type="success" plain :disabled="single" icon="Edit" @click="handleUpdate()"> 淇敼 </el-button> </el-col> <el-col :span="1.5"> - <el-button v-has-permi="['system:user:delete']" type="danger" plain :disabled="multiple" icon="Delete" @click="handleDelete()"> + <el-button v-has-permi="['system:user:remove']" type="danger" plain :disabled="multiple" icon="Delete" @click="handleDelete()"> 鍒犻櫎 </el-button> </el-col> @@ -86,13 +81,13 @@ <template #dropdown> <el-dropdown-menu> <el-dropdown-item icon="Download" @click="importTemplate">涓嬭浇妯℃澘</el-dropdown-item> - <el-dropdown-item icon="Top" @click="handleImport"> 瀵煎叆鏁版嵁</el-dropdown-item> - <el-dropdown-item icon="Download" @click="handleExport"> 瀵煎嚭鏁版嵁</el-dropdown-item> + <el-dropdown-item v-has-permi="['system:user:import']" icon="Top" @click="handleImport">瀵煎叆鏁版嵁</el-dropdown-item> + <el-dropdown-item v-has-permi="['system:user:export']" icon="Download" @click="handleExport">瀵煎嚭鏁版嵁</el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> </el-col> - <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar> + <right-toolbar v-model:show-search="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar> </el-row> </template> @@ -159,11 +154,12 @@ <el-form-item label="褰掑睘閮ㄩ棬" prop="deptId"> <el-tree-select v-model="form.deptId" - :data="deptOptions" + :data="enabledDeptOptions" :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="璇烽�夋嫨褰掑睘閮ㄩ棬" check-strictly + @change="handleDeptChange" /> </el-form-item> </el-col> @@ -203,7 +199,7 @@ <el-col :span="12"> <el-form-item label="鐘舵��"> <el-radio-group v-model="form.status"> - <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio> + <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio> </el-radio-group> </el-form-item> </el-col> @@ -224,7 +220,7 @@ </el-col> <el-col :span="12"> <el-form-item label="瑙掕壊" prop="roleIds"> - <el-select v-model="form.roleIds" multiple placeholder="璇烽�夋嫨"> + <el-select v-model="form.roleIds" filterable multiple placeholder="璇烽�夋嫨"> <el-option v-for="item in roleOptions" :key="item.roleId" @@ -291,12 +287,13 @@ <script setup name="User" lang="ts"> import api from '@/api/system/user'; import { UserForm, UserQuery, UserVO } from '@/api/system/user/types'; -import { DeptVO } from '@/api/system/dept/types'; +import {DeptTreeVO, DeptVO} from '@/api/system/dept/types'; import { RoleVO } from '@/api/system/role/types'; -import { PostVO } from '@/api/system/post/types'; +import { PostQuery, PostVO } from '@/api/system/post/types'; import { treeselect } from '@/api/system/dept'; import { globalHeaders } from '@/utils/request'; import { to } from 'await-to-js'; +import { optionselect } from '@/api/system/post'; const router = useRouter(); const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -310,7 +307,8 @@ const total = ref(0); const dateRange = ref<[DateModelType, DateModelType]>(['', '']); const deptName = ref(''); -const deptOptions = ref<DeptVO[]>([]); +const deptOptions = ref<DeptTreeVO[]>([]); +const enabledDeptOptions = ref<DeptTreeVO[]>([]); const initPassword = ref<string>(''); const postOptions = ref<PostVO[]>([]); const roleOptions = ref<RoleVO[]>([]); @@ -396,7 +394,7 @@ message: '鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿', trigger: 'blur' }, - { pattern: /^[^<>"'|\\]+$/, message: "涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > \" ' \\\ |", trigger: "blur" } + { pattern: /^[^<>"'|\\]+$/, message: '涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > " \' \\ |', trigger: 'blur' } ], email: [ { @@ -434,12 +432,6 @@ } ); -/** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */ -const getTreeSelect = async () => { - const res = await api.deptTreeSelect(); - deptOptions.value = res.data; -}; - /** 鏌ヨ鐢ㄦ埛鍒楄〃 */ const getList = async () => { loading.value = true; @@ -447,6 +439,26 @@ loading.value = false; userList.value = res.rows; total.value = res.total; +}; + +/** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */ +const getDeptTree = async () => { + const res = await api.deptTreeSelect(); + deptOptions.value = res.data; + enabledDeptOptions.value = filterDisabledDept(res.data); +}; + +/** 杩囨护绂佺敤鐨勯儴闂� */ +const filterDisabledDept = (deptList: DeptTreeVO[]) => { + return deptList.filter(dept => { + if (dept.disabled) { + return false; + } + if (dept.children && dept.children.length) { + dept.children = filterDisabledDept(dept.children); + } + return true; + }); }; /** 鑺傜偣鍗曞嚮浜嬩欢 */ @@ -509,7 +521,7 @@ inputErrorMessage: '鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿', inputValidator: (value) => { if (/<|>|"|'|\||\\/.test(value)) { - return "涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > \" ' \\\ |" + return '涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > " \' \\ |'; } } }) @@ -567,15 +579,6 @@ uploadRef.value?.submit(); } -/** 鍒濆鍖栭儴闂ㄦ暟鎹� */ -const initTreeData = async () => { - // 鍒ゆ柇閮ㄩ棬鐨勬暟鎹槸鍚﹀瓨鍦紝瀛樺湪涓嶈幏鍙栵紝涓嶅瓨鍦ㄥ垯鑾峰彇 - if (deptOptions.value === undefined) { - const { data } = await treeselect(); - deptOptions.value = data; - } -}; - /** 閲嶇疆鎿嶄綔琛ㄥ崟 */ const reset = () => { form.value = { ...initFormData }; @@ -593,11 +596,11 @@ const { data } = await api.getUser(); dialog.visible = true; dialog.title = '鏂板鐢ㄦ埛'; - await initTreeData(); postOptions.value = data.posts; roleOptions.value = data.roles; form.value.password = initPassword.value.toString(); }; + /** 淇敼鎸夐挳鎿嶄綔 */ const handleUpdate = async (row?: UserForm) => { reset(); @@ -605,7 +608,6 @@ const { data } = await api.getUser(userId); dialog.visible = true; dialog.title = '淇敼鐢ㄦ埛'; - await initTreeData(); Object.assign(form.value, data.user); postOptions.value = data.posts; roleOptions.value = data.roles; @@ -645,12 +647,18 @@ form.value.status = '1'; }; onMounted(() => { - getTreeSelect(); // 鍒濆鍖栭儴闂ㄦ暟鎹� + getDeptTree(); // 鍒濆鍖栭儴闂ㄦ暟鎹� getList(); // 鍒濆鍖栧垪琛ㄦ暟鎹� proxy?.getConfigKey('sys.user.initPassword').then((response) => { initPassword.value = response.data; }); }); + +async function handleDeptChange(value: number | string) { + const response = await optionselect(value); + postOptions.value = response.data; + form.value.postIds = []; +} </script> <style lang="scss" scoped></style> -- Gitblit v1.9.3