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