From 404966637eda6881a0f17683c5aacc7c1c34aed8 Mon Sep 17 00:00:00 2001 From: 田源 <tianyuan@vci-tech.com> Date: 星期四, 16 一月 2025 16:18:34 +0800 Subject: [PATCH] 增加操作类型 --- Source/plt-web/plt-web-ui/src/views/system/user/index.vue | 484 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 448 insertions(+), 36 deletions(-) diff --git a/Source/plt-web/plt-web-ui/src/views/system/user/index.vue b/Source/plt-web/plt-web-ui/src/views/system/user/index.vue index ab0c3d1..c1cf595 100644 --- a/Source/plt-web/plt-web-ui/src/views/system/user/index.vue +++ b/Source/plt-web/plt-web-ui/src/views/system/user/index.vue @@ -14,6 +14,8 @@ @current-change="currentChange" @selection-change="selectChange" @row-click="rowClickHandler" + @row-save="rowSaveHandler" + @row-update="rowUpdateHandler" > <template slot="status" slot-scope="{row}"> <el-tag v-if="row.status === 0" type="success">鍚敤</el-tag> @@ -26,43 +28,196 @@ </template> <template #menu="{row,index,size}"> - <el-button size="small" type="text" @click="stopUserHandler(row)"> - <span v-if="row.status === 0" style="color: #fa3434"><i class="el-icon-video-pause"></i> 鍋滅敤</span> - <span v-if="row.status === 1" style="color: #55b61d"><i class="el-icon-video-pause"></i> 鍚敤</span> + <el-button v-if="permissionList.editBtn" size="small" type="text" + @click.stop="rowEditHandler(row,index)"> + <icon-show :name="permissionList.editBtn.source"></icon-show> + 缂栬緫 + </el-button> + <el-button v-if="permissionList.delBtn" size="small" type="text" + @click.stop="rowDeleteHandler(row)"> + <icon-show :name="permissionList.delBtn.source"></icon-show> + 鍒犻櫎 + </el-button> + <el-button size="small" type="text" @click.stop="stopUserHandler(row)"> + <span v-if="row.status === 0 && permissionList.stopBtn" style="color: #fa3434;display: flex"> + <icon-show :name="permissionList.stopBtn.source"></icon-show> + 鍋滅敤 + </span> + <span v-if="row.status === 1 && permissionList.actionBtn" style="color: #55b61d;display: flex"> + <icon-show :name="permissionList.actionBtn.source"></icon-show> + 鍚敤 + </span> </el-button> </template> <template slot="menuLeft" slot-scope="scope"> - <el-button icon="el-icon-delete" plain size="small" type="danger">鍒犻櫎</el-button> - <el-button icon="el-icon-user" plain size="small" type="primary" @click="roleHandler">鍒嗛厤瑙掕壊</el-button> - <el-button icon="el-icon-school" plain size="small" type="primary">鍒嗛厤閮ㄩ棬</el-button> - <el-button icon="el-icon-key" plain size="small" type="success">璁剧疆瀵嗙爜绛栫暐</el-button> - <el-button icon="el-icon-upload2" plain size="small" type="primary">瀵煎叆浜哄憳</el-button> - <el-button icon="el-icon-download" plain size="small" type="primary">涓嬭浇瀵煎叆妯℃澘</el-button> + <el-button v-if="permissionList.addBtn" class="button-custom-icon" size="small" type="primary" + @click="$refs.userCrud.rowAdd()"> + <icon-show :name="permissionList.addBtn.source"></icon-show> + 鏂� 澧� + </el-button> + <el-button v-if="permissionList.delBtn" class="button-custom-icon" plain size="small" type="danger" + @click="allDelHandler"> + <icon-show :name="permissionList.delBtn.source"></icon-show> + 鍒犻櫎 + </el-button> + <el-button v-if="permissionList.assigningRolesBtn" class="button-custom-icon" plain size="small" type="primary" + @click="roleHandler"> + <icon-show :name="permissionList.assigningRolesBtn.source"></icon-show> + 鍒嗛厤瑙掕壊 + </el-button> + <el-button v-if="permissionList.distributionDepartmentBtn" class="button-custom-icon" plain size="small" + type="primary" @click="departmentHandler"> + <icon-show :name="permissionList.distributionDepartmentBtn.source"></icon-show> + 鍒嗛厤閮ㄩ棬 + </el-button> + <el-button v-if="permissionList.setPasswordPolicyBtn" class="button-custom-icon" plain size="small" + type="success" + @click="setPwsHandler"> + <icon-show :name="permissionList.setPasswordPolicyBtn.source"></icon-show> + 璁剧疆瀵嗙爜绛栫暐 + </el-button> + <el-button v-if="permissionList.importPersonnelBtn" class="button-custom-icon" plain size="small" type="primary" + @click="uploadUser"> + <icon-show :name="permissionList.importPersonnelBtn.source"></icon-show> + 瀵煎叆浜哄憳 + </el-button> + <el-button v-if="permissionList.downloadImportTemplateBtn" class="button-custom-icon" plain size="small" + type="primary" @click="downloadHandler"> + <icon-show :name="permissionList.downloadImportTemplateBtn.source"></icon-show> + 涓嬭浇瀵煎叆妯℃澘 + </el-button> </template> </avue-crud> - <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" :transferTitle="transferTitle" title="鍒嗛厤瑙掕壊" - @transferSend="roleSendHandler"></transfer> + + <!-- 鍒嗛厤瑙掕壊绌挎妗� --> + <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" + :transferTitle="transferTitle" title="鍒嗛厤瑙掕壊" + @transferSend="roleSendHandler"> + </transfer> + + <!-- 璁剧疆瀵嗙爜绛栫暐瀵硅瘽妗� --> + <el-dialog + v-dialogDrag + v-loading="pwdLoading" + :visible.sync="pwdVisible" + append-to-body="true" + class="avue-dialog" + style="margin-top: -15vh !important;" + title="璁剧疆瀵嗙爜绛栫暐" + width="500px" + > + <div class="password-strategy-container"> + <div style="width:115px;"><i class="el-icon-setting"/>璁剧疆瀵嗙爜绛栫暐锛�</div> + <el-select v-model="pwdValue" placeholder="璇烽�夋嫨瀵嗙爜绛栫暐" style="width: 330px;"> + <el-option v-for="(item,index) in pwdList" :key="index" :label="item.name" :value="item.id"></el-option> + </el-select> + </div> + + <div slot="footer" class="dialog-footer"> + <el-button size="small" type="primary" @click="savePwdHandler">纭� 瀹�</el-button> + <el-button size="small" @click="pwdVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> + + <!-- 瀵煎叆浜哄憳 --> + <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" title="瀵煎叆浜哄憳" + @updata="getTableList"></upload-file> + + <!-- 鍒嗛厤閮ㄩ棬瀵硅瘽妗� --> + <el-dialog + v-dialogDrag + v-loading="departLoading" + :visible.sync="departVisible" + append-to-body="true" + class="avue-dialog" + title="鍒嗛厤閮ㄩ棬" + width="50%" + > + <avue-crud + ref="departCrud" + :data="departData" + :option="departOption" + @current-row-change="handleCurrentRowChange" + > + </avue-crud> + <div slot="footer" class="dialog-footer"> + <el-button size="small" type="primary" @click="saveDepartHandler">纭� 瀹�</el-button> + <el-button size="small" @click="departVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> </basic-container> </template> <script> import basicOption from '@/util/basic-option' -import {getDataUsers, stopUser, gridRoles, listRoleByUserOid, saveRights, addUser, updateUser, deleteUser} from '@/api/system/user/api' +import { + getDataUsers, + stopUser, + gridRoles, + listRoleByUserOid, + saveRights, + addUser, + updateUser, + deleteUser, + selectPwdStrategyMap, + saveUserPasswordStrateg, + download, + departmentQueryController, + saveUsersDepts +} from '@/api/system/user/api' import {column} from "./option" import func from '@/util/func' +import {mapGetters} from "vuex"; export default { name: "userManage", - data() { + data: function () { return { + departSearchObj: {}, + departSearchValue: '', + loadKey: 0, + departStatus: '', // 鍖哄垎涓嶅悓鏂瑰紡鎵撳紑閮ㄩ棬瀵硅瘽妗� + departCurrenRow: {}, + departOption: { + ...basicOption, + addBtn: false, + rowKey: 'oid', + rowParentKey: 'parentId', + selection: false, + highlightCurrentRow: true, + stripe: false, + menu: false, + refreshBtn: false, + gridBtn: false, + header: false, + column: [ + { + label: '鍚嶇О', + prop: 'name', + align: 'left' + }, + { + label: '缂栧彿', + prop: 'id', + }, + { + label: '鎻忚堪', + prop: 'description', + }, + ] + }, + departData: [], + departLoading: false, + departVisible: false, + upFileType: ['xls', 'xlsx'], + fileUrl: 'api/userQueryController/importUser', + pwdVisible: false, + pwdLoading: false, + pwdValue: '', + pwdList: [], tableLoading: false, tableData: [], - option: { - ...basicOption, - calcHeight: -60, - column: column - }, page: { currentPage: 1, pageSize: 10, @@ -73,10 +228,38 @@ selectList: [], leftRoleData: [], // 鍒嗛厤瑙掕壊绌挎妗嗗乏渚у垵濮嬫暟鎹� rightRoleData: [], // 鍒嗛厤瑙掕壊绌挎妗嗗彸渚у垵濮嬫暟鎹� - transferTitle:['鐜版湁瑙掕壊', '鎷ユ湁瑙掕壊'] + transferTitle: ['鐜版湁瑙掕壊', '鎷ユ湁瑙掕壊'], + tipList: ["瀵煎叆妯℃澘涓爣鏄庣孩鑹插瓧浣撶殑涓哄繀杈撻」", "閮ㄩ棬鍒椾笂涓嬬骇鍏崇郴蹇呴』鎸夌収鍙嶆枩鏉犻殧寮�(/)"], + lastIndex: null, } }, - created() { + computed: { + ...mapGetters(["permission"]), + permissionList() { + return { + addBtn: this.vaildData(this.permission[this.$route.query.id].ADD, false), + delBtn: this.vaildData(this.permission[this.$route.query.id].DELETE, false), + editBtn: this.vaildData(this.permission[this.$route.query.id].EDIT, false), + distributionDepartmentBtn: this.vaildData(this.permission[this.$route.query.id].ASSIGN, false), + assigningRolesBtn: this.vaildData(this.permission[this.$route.query.id].ASSIGN1, false), + downloadImportTemplateBtn: this.vaildData(this.permission[this.$route.query.id].DOWNLOADFILE, false), + importPersonnelBtn: this.vaildData(this.permission[this.$route.query.id].IMPORT, false), + setPasswordPolicyBtn: this.vaildData(this.permission[this.$route.query.id].RIGHT, false), + stopBtn: this.vaildData(this.permission[this.$route.query.id].FREEZE, false), + actionBtn: this.vaildData(this.permission[this.$route.query.id].UNFREZE, false), + }; + }, + option() { + return { + ...basicOption, + addBtn: false, + editBtn: false, + delBtn: false, + dialogWidth: '50%', + calcHeight: -60, + column: column + } + } }, methods: { // 琛ㄦ牸璇锋眰 @@ -84,12 +267,15 @@ this.tableLoading = true; getDataUsers(this.page.currentPage, this.page.pageSize, this.searchParams).then(res => { const data = res.data.data; + data.map(item => { + item.secretGrade = item.secretGrade.toString() + }) this.tableData = data; this.page.total = res.data.total; this.tableLoading = false; - }).catch(err => { - this.$message.error(err) - }); + s + }) + this.departmentQueryOnLoad() }, // 琛ㄦ牸鍙充晶鍒锋柊鍥炬爣 @@ -99,6 +285,7 @@ // 鎼滅储鏌ヨ handleSearch(params, done) { + this.searchParams = {}; if (!func.isEmptyObject(params)) { for (let key in params) { if (params.hasOwnProperty(key)) { @@ -107,9 +294,12 @@ this.searchParams[`conditionMap["${newKey}"]`] = params[key]; } } - } else { + } + + if (func.isEmptyObject(params)) { this.searchParams = {}; } + this.getTableList(); done(); }, @@ -140,9 +330,7 @@ stopUser(params).then(res => { this.$message.success(res.data.obj); this.getTableList(); - }).catch(err => { - this.$message.error(err) - }) + }); }, // 閫夋嫨妗� @@ -152,7 +340,17 @@ // 鐐瑰嚮琛� rowClickHandler(row) { - this.$refs.userCrud.toggleRowSelection(row); + func.rowClickHandler( + row, + this.$refs.userCrud, + this.lastIndex, + (newIndex) => { + this.lastIndex = newIndex; + }, + () => { + this.selectList = [row]; + } + ); }, // 鍒嗛厤瑙掕壊 @@ -174,30 +372,244 @@ listRoleByUserOid(userOid).then(res => { this.rightRoleData = res.data.data.map(item => item.oid); }) - }).catch(err => { - this.$message.error(err) - }) + }); this.$refs.transfer.visible = true; }, // 绌挎妗嗙粍浠跺洖濉� roleSendHandler(row) { let params = { - userOid: this.selectList[0].oid, + userOids: this.selectList[0].oid, roleIds: row.join(',') } saveRights(params).then(res => { this.$message.success(res.data.obj); this.getTableList(); - }).catch(err => { - this.$message.error(err) + }); + }, + + // 璁剧疆瀵嗙爜绛栫暐 + setPwsHandler() { + if (this.selectList.length <= 0) { + this.$message.warning('娓呭厛閫夋嫨浜哄憳鍐嶈繘琛屾搷浣滐紒') + return; + } + this.pwdLoading = false; + selectPwdStrategyMap().then(res => { + if (res.data.code === 200) { + this.pwdList = res.data.data; + this.pwdValue = res.data.data[0].id; + console.log(res.data) + this.pwdVisible = true; + this.pwdLoading = false; + } else { + this.$message.error(res.data.msg); + } }) - } + }, + + // 淇濆瓨瀵嗙爜绛栫暐 + savePwdHandler() { + let params = { + userIds: this.selectList.map(item => item.oid).join(','), + passwordStrategId: this.pwdValue + } + saveUserPasswordStrateg(params).then(res => { + this.pwdVisible = false; + this.$message.success(res.data.obj) + }); + }, + + // 鏂板 + rowSaveHandler(row, done, loading) { + if (row.password != row.confirmPassword) { + this.$message.error('璇锋鏌ヤ袱娆″瘑鐮佹槸鍚﹁緭鍏ヤ竴鑷达紒') + return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; + } + addUser(row).then(res => { + if (res.data.code === 200) { + this.$message.success(res.data.obj); + this.getTableList(); + done(); + } + }).catch(err => { + loading() + }) + }, + + // 鎿嶄綔鏍忕紪杈� + rowEditHandler(row, index) { + this.$refs.userCrud.rowEdit(row, index); + }, + + // 缂栬緫 + rowUpdateHandler(row, index, done, loading) { + if (row.password != row.confirmPassword) { + this.$message.error('璇锋鏌ヤ袱娆″瘑鐮佹槸鍚﹁緭鍏ヤ竴鑷达紒') + return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; + } + updateUser(row).then(res => { + if (res.data.code === 200) { + this.$message.success(res.data.obj); + this.getTableList(); + done() + } + }).catch(err => { + loading() + }); + }, + + // 鍒犻櫎 + rowDeleteHandler(row) { + let params = { + ids: row.oid + } + + this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎褰撳墠鐨勬垚鍛樺悧锛�', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + deleteUser(params).then(res => { + if (res.data.code === 200) { + this.$message.success(res.data.obj); + this.getTableList(); + } + }); + }).catch(() => { + this.$message({ + type: 'info', + message: '宸插彇娑堝垹闄�' + }); + }); + }, + + // 澶氶�夊垹闄� + allDelHandler() { + let params = { + ids: this.selectList.map(item => item.oid).join(',') + } + if (this.selectList.length <= 0) { + this.$message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹繘琛屽垹闄わ紒') + return; + } + this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎鎵�閫夋嫨鐨勬垚鍛樺悧锛�', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + deleteUser(params).then(res => { + if (res.data.code === 200) { + this.$message.success(res.data.obj); + this.getTableList(); + } + }); + }).catch(() => { + this.$message({ + type: 'info', + message: '宸插彇娑堝垹闄�' + }); + }); + }, + + // 涓嬭浇瀵煎叆妯℃澘 + downloadHandler() { + download().then(res => { + func.downloadFileByBlobHandler(res); + this.$message.success('涓嬭浇鎴愬姛'); + }) + }, + + // 瀵煎叆浜哄憳 + uploadUser() { + this.$refs.upload.visible = true; + }, + + // 鍒嗛厤閮ㄩ棬 + departmentHandler() { + if (this.selectList.length <= 0) { + this.$message.warning('娓呭厛閫夋嫨浜哄憳鍐嶈繘琛屾搷浣滐紒'); + return; + } + this.departStatus = 'default'; // 鍖哄垎涓嶅悓鏂瑰紡鎵撳紑閮ㄩ棬瀵硅瘽妗� + this.departVisible = true; + }, + + // 鍒嗛厤閮ㄩ棬琛ㄦ牸鍒濆鍖栬姹� + departmentQueryOnLoad() { + departmentQueryController({queryAllLevel: true}).then(res => { + const data = res.data.treeData; + this.departData = this.departDtaFormAtter(data); + this.option.column[7].dicData = [{ + oid: 'ALLDept', + name: '鎵�鏈夐儴闂�', + expand: true, + disabled: true, + children: this.departData + }] + this.option.column[7].defaultExpandedKeys = ['ALLDept']; + }); + }, + + // 鍒嗛厤閮ㄩ棬鏁版嵁杞崲 + departDtaFormAtter(items) { + return items.map(item => { + // 杞崲褰撳墠鑺傜偣鐨勫睘鎬� + const formList = { + oid: item.oid, + id: item.attributes.id, + name: item.attributes.name, + description: item.attributes.description, + parentId: item.parentId, + parentName: item.parentName, + parentBtmName: item.parentBtmName, + // 濡傛灉children瀛樺湪涓斾笉涓虹┖锛屽垯閫掑綊杞崲children + children: item.children && item.children.length > 0 ? this.departDtaFormAtter(item.children) : undefined + }; + return formList; + }); + }, + + // 鍒嗛厤閮ㄩ棬 琛屽崟閫� + handleCurrentRowChange(row) { + this.departCurrenRow = row; + }, + + // 鍒嗛厤閮ㄩ棬 淇濆瓨 + saveDepartHandler() { + if (func.isEmptyObject(this.departCurrenRow)) { + this.$message.warning('璇烽�夋嫨閮ㄩ棬鑺傜偣锛�') + return; + } + + //鍒嗛厤閮ㄩ棬 + if (this.departStatus == 'default') { + let params = { + userOIds: this.selectList.map(item => item.oid).join(','), + deptId: this.departCurrenRow.oid, + }; + saveUsersDepts(params).then(res => { + if (res.data.code === 200) { + this.departVisible = false; + this.getTableList(); + this.$message.success('鍒嗛厤鎴愬姛锛�') + } + }) + return; + } + }, } } </script> -<style scoped> +<style lang="scss" scoped> +.password-strategy-container { + margin-bottom: 20px; + display: flex; + //justify-content: center; + align-items: center; + gap: 10px; +} </style> -- Gitblit v1.9.3