From a1f78d5809d624cd7e4cd3352d9ece858cad2090 Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期三, 03 七月 2024 16:31:31 +0800 Subject: [PATCH] 成员管管增删改接口调试 --- Source/plt-web/plt-web-ui/src/App.vue | 2 Source/plt-web/plt-web-ui/src/views/system/user/index.vue | 182 ++++++++++++++++++++++++- Source/plt-web/plt-web-ui/src/api/system/user/api.js | 34 ++++ Source/plt-web/plt-web-ui/README-AVUE.md | 90 ++++++++++++ Source/plt-web/plt-web-ui/src/views/system/user/option.js | 65 ++++++++- 5 files changed, 349 insertions(+), 24 deletions(-) diff --git a/Source/plt-web/plt-web-ui/README-AVUE.md b/Source/plt-web/plt-web-ui/README-AVUE.md new file mode 100644 index 0000000..44a3145 --- /dev/null +++ b/Source/plt-web/plt-web-ui/README-AVUE.md @@ -0,0 +1,90 @@ +## AVUE-CRUD 琛ㄦ牸閰嶇疆 + +```javascript +<avue-crud :option="option" //琛ㄦ牸閰嶇疆灞炴�� + :table-loading="loading" //琛ㄦ牸绛夊緟妗嗙殑鎺у埗锛屽姞杞界殑鏃跺�欒浆鍦堝湀锛岃缃畉rue/false + :search.sync="search" //鎼滅储鐨勫彉閲�(闇�瑕乻ync淇グ绗�) + :visible.sync="changeInfo" //鏄惁鏄剧ず锛岃缃畉rue/false + :data="data" //琛ㄦ牸鏄剧ず鐨勬暟鎹� + :page.sync="page" //琛ㄦ牸鍒嗛〉閰嶇疆閫夐」(闇�瑕乻ync淇グ绗�) + :permission="permissionList" //鏉冮檺鎺у埗 + :before-open="beforeOpen" //鎵撳紑鍓嶇殑鍥炶皟function(file,column) + v-model="form" //鏁版嵁妯″瀷 鐢ㄦ潵瀛樺彇椤甸潰鍊肩殑 + ref="crud" //鍦ㄦ櫘閫氱殑 DOM 鍏冪礌涓婁娇鐢紝寮曠敤鎸囧悜鐨勫氨鏄� DOM 鍏冪礌锛� + @cell-click="pageto" //琛ㄦ牸鐐瑰嚮杩愯鏂规硶 onclick鏂规硶瀹氫箟 + @row-update="rowUpdate" //淇敼鏁版嵁鍚庣偣鍑荤‘瀹氳Е鍙戣浜嬩欢 + @row-save="rowSave" //鏂板鏁版嵁鍚庣偣鍑荤‘瀹氳Е鍙戣浜嬩欢 + @row-del="rowDel" //琛屾暟鎹垹闄ゆ椂瑙﹀彂璇ヤ簨浠� + @row-click="handleRowClick" //鍗曞嚮琛岃繍琛岀殑鏂规硶 + @search-change="searchChange" //鎼滅储鏍忓彉鍖栦簨浠� + @search-reset="searchReset" //娓呯┖鎼滅储鏍忓彉鍖栦簨浠� + @selection-change="selectionChange"//閫夋嫨妗嗗彉鍖栧彉鍖栦簨浠� + @current-change="currentChange" //鐐瑰嚮椤电爜浼氳皟鐢╟urrent-change鏂规硶鍥炶皟褰撳墠椤垫暟锛岃繑鍥炲綋鍓嶇鍑犻〉 + @size-change="sizeChange" //鐐瑰嚮姣忛〉澶氬皯鏉′細璋僺ize-change鏂规硶鍥炶皟 + @refresh-change="refreshChange" //鐐瑰嚮鍒锋柊鎸夐挳瑙﹀彂璇ヤ簨浠� + @on-load="onLoad"> //鎵撳紑琛ㄦ牸椤甸潰鐨勬柟娉曪紝涓�鑸敤鏉ュ垵濮嬪寲锛岃繑鍥為〉闈㈡暟鎹� + </avue-crud> + +option: { + height:'auto', //琛ㄦ牸楂樺害 + emptyText: "鏆傛棤鏁版嵁鍝", //鏁版嵁涓虹┖鐨勬彁绀� + calcHeight: 30, //琛ㄦ牸楂樺害宸紙涓昏鐢ㄤ簬鍑忓幓鍏朵粬閮ㄥ垎璁╄〃鏍奸珮搴﹁嚜閫傚簲锛� + tip: false, //鎻愮ず淇℃伅 + searchShow: true, //棣栨鍔犺浇鏄惁鏄剧ず鎼滅储 + searchMenuSpan: 4, //鎼滅储鎸夐挳闀垮害 + searchSpan:6, //鎼滅储妗嗛暱搴� 鏈�澶ч暱搴�24 + border: true, //琛ㄦ牸杈规鏄惁鏄剧ず + index: true, //鏄惁鏄剧ず搴忓彿 + viewBtn: true, //鏄惁鏄剧ず鏌ョ湅鎸夐挳 + selection: true, //鎼滅储妗嗘樉绀� + addBtn:false, //鏄惁鏄剧ず娣诲姞鎸夐挳 + editBtn:false, //鏄惁鏄剧ず缂栬緫鎸夐挳 + delBtn:false, //鏄惁鏄剧ず鍒犻櫎鎸夐挳 + excelBtn:false, //琛ㄦ牸瀵煎嚭鎸夐挳鏄惁鏄剧ず + labelWidth:120, //琛ㄥ崟鍓嶉潰鐨勬爣棰橀暱搴� + refreshBtn: false, //琛ㄦ牸涓婇潰灏忕殑 鍒锋柊鎸夐挳 + columnBtn: false, //琛ㄦ牸涓婇潰灏忕殑 鍒楄〃鎸夐挳 + searchBtn: false, //琛ㄦ牸涓婇潰灏忕殑 鎼滅储鎸夐挳 + menu: true, //鏄惁鏄剧ず鎿嶄綔鏍� + defaultExpandAll:true, //鏍戦粯璁ゅ睍寮� + column:[ + { + label: "", //琛ㄥ崟灞炴�у悕绉� + prop: "", //灞炴�у搴斿疄浣撶被瀛楁 + type: "", //杈撳叆妗嗙被鍨� + addDisplay: false, //鏂板鏃舵槸鍚︽樉绀� + editDisplay: false, //缂栬緫鏃舵槸鍚︽樉绀� + viewDisplay: true, //璇︽儏鏃舵槸鍚︽樉绀� + hide: true, //琛ㄥ崟鏌ヨ鏃舵槸鍚︽樉绀� + display: true, //鍦ㄦ煡鐪嬶紝鏂板锛岀紪杈戦〉闈㈡槸鍚︽樉绀� + labelWidth:'100', //鏍囬鍚嶇О瀹藉害 + span: 24, //24涓�鏉℃暟鎹崰涓�琛岋紝8涓�琛�3鏉℃暟鎹� + gutter:20, //椤归棿璺� + addDisabled: true, //娣诲姞鐨勬椂鍊欎笉鑳戒慨鏀� + editDisabled: true, //缂栬緫鐨勬椂鍊欎笉鑳戒慨鏀� + sortable:true, //鎺掑簭鏂瑰紡鍒囨崲锛屽�掑簭銆佹搴忓垏鎹� + maxlength: 30, //瀛楁暟闄愬埗 + showWordLimit:true, //鏄剧ず瀛楁暟闄愬埗 + defaultExpandAll:true, //鏍戦粯璁ゅ睍寮� + search锛歵rue, //鏌ヨ鏄惁鏄剧ず + searchFilterable:true, //select閫夋嫨妗嗗尮閰� + showColumn:false, //鍒楁樉闅愪腑鏄惁鏈� + addDisplay: false, // 娣诲姞寮圭獥涓嶆樉绀� + editDisplay: false, // 缂栬緫寮圭獥涓嶆樉绀� + viewDisplay: false // 鏌ョ湅寮圭獥涓嶆樉绀� + disabled:true, //琛ㄥ崟item绂佺敤 + row:'false/true', //鏄惁鍗曠嫭鎴愯 + rules:Obj, //楠岃瘉瑙勫垯 + dicData:[], //瀛楀吀 + dicUrl:'', //杩滅▼瀛楀吀鍦板潃 + dicMethod:'get/post' //瀛楀吀璇锋眰鏂瑰紡 + dicQuery:obj, //瀛楀吀璇锋眰鏂瑰紡 + props:{ + lable:'瀛楀吀鐨勫悕绉板睘鎬у��', + value:'瀛楀吀鐨勫�煎睘鎬у��', + children:'瀛楀吀鐨勫瓙灞炴�у��' + }, + + } +``` + diff --git a/Source/plt-web/plt-web-ui/src/App.vue b/Source/plt-web/plt-web-ui/src/App.vue index 32b2829..4b2c36e 100644 --- a/Source/plt-web/plt-web-ui/src/App.vue +++ b/Source/plt-web/plt-web-ui/src/App.vue @@ -32,7 +32,7 @@ margin: 50px auto; } .avue-dialog .el-dialog{ - top:50%; + top:43%; max-height: calc(100% - 100px); -webkit-transform: translate(-50%, 0); transform: translate(-50%, -50%); diff --git a/Source/plt-web/plt-web-ui/src/api/system/user/api.js b/Source/plt-web/plt-web-ui/src/api/system/user/api.js index 3e042a6..b24c646 100644 --- a/Source/plt-web/plt-web-ui/src/api/system/user/api.js +++ b/Source/plt-web/plt-web-ui/src/api/system/user/api.js @@ -54,19 +54,19 @@ } // 鏂板鎴愬憳 -export function addUser(data) { +export function addUser(row) { return request({ - url: "/api/roleQueryController/addUser", + url: "/api/userQueryController/addUser", method: "post", - data:data + data:row }); } // 淇敼鎴愬憳 export function updateUser(data) { return request({ - url: "/api/roleQueryController/updateUser", - method: "post", + url: "/api/userQueryController/updateUser", + method: "put", data:data }); } @@ -74,8 +74,30 @@ // 鍒犻櫎鎴愬憳 export function deleteUser(params) { return request({ - url: "/api/roleQueryController/deleteUser", + url: "/api/userQueryController/deleteUser", method: "delete", params }); } + +//鑾峰彇瀵嗙爜绛栫暐 +export function selectPwdStrategyMap(params) { + return request({ + url: "/api/passwordStrategyQueryController/selectPwdStrategyMap", + method: "get", + params + }); +} + +//淇濆瓨瀵嗙爜绛栫暐 +export function saveUserPasswordStrateg(params) { + let formData = new FormData() + for (let key in params){ + formData.append(key,params[key]) + } + return request({ + url: "/api/passwordStrategyQueryController/saveUserPasswordStrateg", + method: "post", + data:formData + }); +} 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..f584d62 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,9 @@ @current-change="currentChange" @selection-change="selectChange" @row-click="rowClickHandler" + @row-save="rowSaveHandler" + @row-update="rowUpdateHandler" + @row-del="rowDelHandler" > <template slot="status" slot-scope="{row}"> <el-tag v-if="row.status === 0" type="success">鍚敤</el-tag> @@ -33,22 +36,62 @@ </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-delete" plain size="small" type="danger" @click="allDelHandler">鍒犻櫎</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-key" plain size="small" type="success" @click="setPwsHandler">璁剧疆瀵嗙爜绛栫暐</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> </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" + :destroy-on-close="true" + :visible.sync="pwdVisible" + append-to-body="true" + class="avue-dialog" + style="margin-top: -20vh !important;" + title="璁剧疆瀵嗙爜绛栫暐" + width="30%" + > + + <div class="password-strategy-container"> + <div><i class="el-icon-setting"/>璁剧疆瀵嗙爜绛栫暐锛�</div> + <el-select v-model="pwdValue" placeholder="璇烽�夋嫨瀵嗙爜绛栫暐"> + <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" @click="pwdVisible = false">鍙� 娑�</el-button> + <el-button size="small" type="primary" @click="savePwdHandler">纭� 瀹�</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 +} from '@/api/system/user/api' import {column} from "./option" import func from '@/util/func' @@ -56,10 +99,15 @@ name: "userManage", data() { return { + pwdVisible: false, + pwdLoading: false, + pwdValue: '', + pwdList: [], tableLoading: false, tableData: [], option: { ...basicOption, + dialogWidth: '50%', calcHeight: -60, column: column }, @@ -73,7 +121,7 @@ selectList: [], leftRoleData: [], // 鍒嗛厤瑙掕壊绌挎妗嗗乏渚у垵濮嬫暟鎹� rightRoleData: [], // 鍒嗛厤瑙掕壊绌挎妗嗗彸渚у垵濮嬫暟鎹� - transferTitle:['鐜版湁瑙掕壊', '鎷ユ湁瑙掕壊'] + transferTitle: ['鐜版湁瑙掕壊', '鎷ユ湁瑙掕壊'] } }, created() { @@ -183,7 +231,7 @@ // 绌挎妗嗙粍浠跺洖濉� roleSendHandler(row) { let params = { - userOid: this.selectList[0].oid, + userOids: this.selectList[0].oid, roleIds: row.join(',') } saveRights(params).then(res => { @@ -192,12 +240,130 @@ }).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) + }).catch(err => { + this.$message.error(err) + }) + }, + + // 鏂板 + rowSaveHandler(row, done) { + 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(); + } + }).catch(err => { + console.log(err); + }) + done() + }, + + // 缂栬緫 + rowUpdateHandler(row, index, done) { + 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(); + } + }).catch(err => { + console.log(err); + }); + done() + }, + + // 鍒犻櫎 + rowDelHandler(row) { + let params = { + ids: row.oid + } + deleteUser(params).then(res => { + if (res.data.code === 200) { + this.$message.success(res.data.obj); + this.getTableList(); + } + }).catch(err => { + console.log(err); + }) + }, + + // 澶氶�夊垹闄� + 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: '宸插彇娑堝垹闄�' + }); + }); } } } </script> -<style scoped> +<style lang="scss" scoped> +.password-strategy-container { + padding-left: 20px; + display: flex; + //justify-content: center; + align-items: center; + gap: 10px; +} </style> diff --git a/Source/plt-web/plt-web-ui/src/views/system/user/option.js b/Source/plt-web/plt-web-ui/src/views/system/user/option.js index 0602863..58c46e3 100644 --- a/Source/plt-web/plt-web-ui/src/views/system/user/option.js +++ b/Source/plt-web/plt-web-ui/src/views/system/user/option.js @@ -1,16 +1,62 @@ -export const column = [ +export let column = [ + { + label: '璐﹀彿', + prop: 'id', + align:'center', + search:true, + sortable:true, + rules: [ + { + required: true, + message: '璇疯緭鍏ュ鍚�', + trigger: 'blur' + } + ] + }, { label: '濮撳悕', prop: 'name', align:'center', search:true, - sortable:true - }, { - label: '璐﹀彿', - prop: 'id', - align:'center', - search:true, - sortable:true + sortable:true, + rules: [ + { + required: true, + message: '璇疯緭鍏ュ鍚�', + trigger: 'blur' + } + ] + }, + { + label: '瀵嗙爜', + prop: 'password', + hide:true, + type:'password', + change: (val)=>{ + const confirmPasswordColumn = column.find(item => item.prop === 'confirmPassword'); + confirmPasswordColumn.disabled = val.value === ""; + }, + rules: [ + { + required: true, + message: '璇疯緭鍏ュ瘑鐮�', + trigger: 'blur' + } + ] + }, + { + label: '纭瀵嗙爜', + prop: 'confirmPassword', + hide:true, + type:'password', + disabled:true, + rules: [ + { + required: true, + message: '璇峰啀娆$‘璁ゅ瘑鐮�', + trigger: 'blur' + } + ] }, { label: '鐘舵��', @@ -40,6 +86,7 @@ search:true, sortable:true, searchslot:true, + row:true, }, { label: '涓撲笟', @@ -88,5 +135,5 @@ align:'center', sortable:true, display:false, - } + }, ]; -- Gitblit v1.9.3