Procházet zdrojové kódy

修复多值页面组件传递问题

Guos před 1 týdnem
rodič
revize
044704d6b3

+ 173 - 121
src/views/company/companyUser/index.vue

@@ -490,11 +490,15 @@
       </div>
     </el-dialog>
 
+<!--    <el-dialog :title="user.title" :visible.sync="user.open" width="1000px" append-to-body>-->
+<!--      <selectUser ref="selectUser" @bindQwUser="bindQwUser"></selectUser>-->
+<!--    </el-dialog>-->
+
+    <!-- 修改 selectUser 组件的引用 -->
     <el-dialog :title="user.title" :visible.sync="user.open" width="1000px" append-to-body>
-      <selectUser ref="selectUser" @bindQwUser="bindQwUser"></selectUser>
+      <selectUser ref="selectUser" @bindQwUser="bindQwUser" @close="handleSelectUserClose"/>
     </el-dialog>
 
-
     <el-dialog :title="companyUserArea.title" :visible.sync="companyUserArea.open" width="300px" append-to-body>
       <el-select v-model="addressId"  filterable placeholder="请选择所属销售的区域" style="width: 200px;">
         <el-option
@@ -825,7 +829,7 @@ export default {
   },
   methods: {
     onDomainBlur() {
-      if (this.form.domain!=null){
+      if (this.form.domain != null) {
         let value = this.form.domain.trim();
 
         // 强制只保留第一个 http://
@@ -844,11 +848,94 @@ export default {
         // 正则校验最终格式,提醒用户
         const domainPattern = /^http:\/\/([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/;
         if (!domainPattern.test(this.form.domain)) {
-          return  this.$message.error('请输入正确格式的域名,如:http://xxx.xxx.com');
+          return this.$message.error('请输入正确格式的域名,如:http://xxx.xxx.com');
         }
       }
+    },
+
+    // 添加处理 selectUser 关闭的方法
+    handleSelectUserClose() {
+      this.user.open = false
+      // 如果 selectUser 组件有 clearSelection 方法,也可以调用
+      if (this.$refs.selectUser && typeof this.$refs.selectUser.clearSelection === 'function') {
+        this.$refs.selectUser.clearSelection()
+      }
+    },
+
+    // edit G start
+    // selectQwUser(){
+    //   this.user.open=true;
+    // },
+    // 修改 selectQwUser 方法
+    selectQwUser() {
+      this.user.open = true;
+      // 在下次DOM更新后设置已选中的项
+      this.$nextTick(() => {
+        if (this.$refs.selectUser && this.qwUserList.length > 0) {
+          // 将已选中的用户传递给子组件
+          this.$refs.selectUser.setSelectedUsers(this.qwUserList);
+        }
+      });
+    },
+
+    // bindQwUser(row){
+    //   this.user.open=false;
+    //   if (!this.qwUserList.some(item => item.id == row.id)) {
+    //     this.qwUserList.push(row)
+    //   }
+    //   if (!this.qwUser.some(item => item == row.id)) {
+    //     this.qwUser.push(row.id);
+    //   }
+    // },
+
+    // 修改 bindQwUser 方法
+    bindQwUser(row) {
+      // this.user.open = false; // 暂时注释掉这行,改为在 handleBatchBind 中处理
+      if (!this.qwUserList.some(item => item.id == row.id)) {
+        this.qwUserList.push(row)
+      }
+      if (!this.qwUser.some(item => item == row.id)) {
+        this.qwUser.push(row.id)
+      }
+    },
+
+    // qwBind(row){
+    //   this.qwUser=[];
+    //   this.qwUserList=[];
+    //   this.qwForm.companyUserId=row.userId
+    //   getUser(row.userId).then((response) => {
+    //     if(response.data.qwUserId!=null){
+    //       this.qwUser=((response.data.qwUserId).split(",").map(Number))
+    //       getQwUserByIds(this.qwUser).then(res => {
+    //         this.qwUserList=res.data;
+    //       })
+    //       // this.qwUser.forEach(item => {
+    //       //     getQwUser(item).then(response => {
+    //       //         this.qwUserList.push(response.data);
+    //       //     });
+    //       // });
+    //     }
+    //     this.qwOpen = true;
+    //   });
+    // 修改 qwBind 方法
+    qwBind(row) {
+      this.qwUser = [];
+      this.qwUserList = [];
+      this.qwForm.companyUserId = row.userId;
 
+      getUser(row.userId).then((response) => {
+        if (response.data.qwUserId != null) {
+          // 保存已绑定的企微用户ID列表
+          this.qwUser = ((response.data.qwUserId).split(",").map(Number));
+          getQwUserByIds(this.qwUser).then(res => {
+            this.qwUserList = res.data;
+          });
+        }
+        // 先打开"绑定企微账号"对话框
+        this.qwOpen = true;
+      });
     },
+
     /** 查询用户列表 */
     getList() {
       this.loading = true;
@@ -857,14 +944,12 @@ export default {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;
-          console.log(" this.userList ", this.userList )
+          console.log(" this.userList ", this.userList)
         }
       );
     },
-    selectQwUser(){
-      this.user.open=true;
-    },
-    handleClosegroupUser(list){
+
+    handleClosegroupUser(list) {
       const index = this.qwUser.findIndex(t => t === list);
       if (index !== -1) {
         this.qwUser.splice(index, 1);
@@ -898,13 +983,13 @@ export default {
           type: "warning",
         }
       )
-        .then(function () {
+        .then(function() {
           return changeUserStatus(row.userId, row.status);
         })
         .then(() => {
           this.msgSuccess(text + "成功");
         })
-        .catch(function () {
+        .catch(function() {
           row.status = row.status === "0" ? "1" : "0";
         });
     },
@@ -913,37 +998,37 @@ export default {
       this.open = false;
       this.reset();
     },
-    cancelBind(){
-      this.bindCompanyOpen=false;
+    cancelBind() {
+      this.bindCompanyOpen = false;
       this.resetBindCompany();
     },
 
-    submitFormArea(address){
+    submitFormArea(address) {
       const uIds = this.ids;
 
-      if (address == null){
+      if (address == null) {
         this.$message.error("请选择地区");
         return;
       }
-      updateCompanyUserAreaList({userIds:uIds,addressId:address}).then(res=>{
-        this.companyUserArea.open=false;
+      updateCompanyUserAreaList({ userIds: uIds, addressId: address }).then(res => {
+        this.companyUserArea.open = false;
         this.getList();
         this.msgSuccess("操作成功");
 
       })
 
     },
-    cancelArea(){
-      this.companyUserArea.open=false;
-      this.addressId=null;
+    cancelArea() {
+      this.companyUserArea.open = false;
+      this.addressId = null;
     },
     qwCancel() {
       this.qwOpen = false;
-      this.qwUserId=null;
+      this.qwUserId = null;
     },
 
-    handerCompanyUserAreaList(){
-      this.companyUserArea.open=true;
+    handerCompanyUserAreaList() {
+      this.companyUserArea.open = true;
     },
     // 表单重置
     reset() {
@@ -1006,7 +1091,7 @@ export default {
       });
     },
 
-    handleBindCompanyUserCode(){
+    handleBindCompanyUserCode() {
       this.reset();
       this.getTreeselect();
       getUser().then((response) => {
@@ -1016,40 +1101,7 @@ export default {
         this.title = "创建 新增/绑定销售 的二维码";
       });
     },
-    qwBind(row){
-      this.qwUser=[];
-      this.qwUserList=[];
-      this.qwForm.companyUserId=row.userId
-      getUser(row.userId).then((response) => {
-        if(response.data.qwUserId!=null){
-           this.qwUser=((response.data.qwUserId).split(",").map(Number))
-          getQwUserByIds(this.qwUser).then(res => {
-            this.qwUserList=res.data;
-          })
-           // this.qwUser.forEach(item => {
-           //     getQwUser(item).then(response => {
-           //         this.qwUserList.push(response.data);
-           //     });
-           // });
-        }
-        this.qwOpen = true;
-      });
-
-    },
-
-    bindQwUser(row){
-      this.user.open=false;
 
-
-        if (!this.qwUserList.some(item => item.id == row.id)) {
-          this.qwUserList.push(row)
-        }
-
-        if (!this.qwUser.some(item => item == row.id)) {
-          this.qwUser.push(row.id);
-        }
-
-    },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
@@ -1091,10 +1143,11 @@ export default {
             }
           });
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
     /** 提交按钮 */
-    submitForm: function () {
+    submitForm: function() {
 
       // this.onDomainBlur();
 
@@ -1136,7 +1189,7 @@ export default {
       document.body.removeChild(link);
     },
 
-    submitBingCompanyForm: function () {
+    submitBingCompanyForm: function() {
 
       this.$refs["formBindCompany"].validate((valid) => {
         if (valid) {
@@ -1148,23 +1201,23 @@ export default {
             background: 'rgba(0, 0, 0, 0.7)'
           });
 
-            addCodeUrl(this.formBindCompany).then((response) => {
-              this.bindCompanyOpen=false;
-              this.bindCompanyUrl.url=response.data.url
-              this.bindCompanyUrl.open=true;
-              this.bindCompanyUrl.name="绑定或新增 销售二维码";
-            }).finally(res=>{
-              loadingRock.close();
-            })
+          addCodeUrl(this.formBindCompany).then((response) => {
+            this.bindCompanyOpen = false;
+            this.bindCompanyUrl.url = response.data.url
+            this.bindCompanyUrl.open = true;
+            this.bindCompanyUrl.name = "绑定或新增 销售二维码";
+          }).finally(res => {
+            loadingRock.close();
+          })
         }
       });
     },
     /**
-    * 同步企业微信员工
-    */
+     * 同步企业微信员工
+     */
     synSubmitForm() {
-      this.synOpen=false;
-      this.loading=true;
+      this.synOpen = false;
+      this.loading = true;
       /*this.msgSuccess("");
 
       let loadingRock = this.$loading({
@@ -1174,63 +1227,60 @@ export default {
         background: 'rgba(0, 0, 0, 0.7)'
       });*/
 
-
       addQwUser(this.synform.corpId).then(response => {
         //this.msgSuccess("同步成功");
         this.msgSuccess("正在同步中...");
         this.getList();
-        this.synOpen=false;
-      }).finally(()=>{
-        this.loading=false;
-        this.synOpen=false;
+        this.synOpen = false;
+      }).finally(() => {
+        this.loading = false;
+        this.synOpen = false;
         //loadingRock.close();
       });
     },
 
     synNameSubmitForm() {
-      this.synNameOpen=false;
-      this.loading=true;
+      this.synNameOpen = false;
+      this.loading = true;
 
       addQwUserName(this.synNameform.corpId).then(response => {
         // this.msgSuccess("同步成功");
         this.msgSuccess("正在同步中...");
         this.getList();
-        this.synNameOpen=false;
-      }).finally(()=>{
-        this.loading=false;
-        this.synNameOpen=false;
+        this.synNameOpen = false;
+      }).finally(() => {
+        this.loading = false;
+        this.synNameOpen = false;
         //loadingRock.close();
       });
     },
     /**
-    * 同步企业微信部门
-    */
-    qwSyncDept(){
+     * 同步企业微信部门
+     */
+    qwSyncDept() {
       syncDept().then(response => {
         this.msgSuccess("同步成功");
         this.getList();
-      }).catch(()=>{
-        this.msgError("同步失败:"+response.msg);
+      }).catch(() => {
+        this.msgError("同步失败:" + response.msg);
       })
     },
-    qwSubmitForm(){
 
+    qwSubmitForm() {
       let loadingRock = this.$loading({
         lock: true,
         text: '绑定中.....同步客户信息中.....',
         spinner: 'el-icon-loading',
         background: 'rgba(0, 0, 0, 0.7)'
       });
-
       this.qwForm.id = (this.qwUser).join(',');
-
       bindQwUser(this.qwForm).then(response => {
         this.msgSuccess("绑定成功");
         this.qwOpen = false;
         this.getList();
-        this.qwUserId=null;
-        this.qwUser=[];
-      }).finally(res=>{
+        this.qwUserId = null;
+        this.qwUser = [];
+      }).finally(res => {
         loadingRock.close()
       });
     },
@@ -1246,14 +1296,15 @@ export default {
           type: "warning",
         }
       )
-        .then(function () {
+        .then(function() {
           return delUser(userIds);
         })
         .then(() => {
           this.getList();
           this.msgSuccess("删除成功");
         })
-        .catch(function () {});
+        .catch(function() {
+        });
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -1263,13 +1314,14 @@ export default {
         cancelButtonText: "取消",
         type: "warning",
       })
-        .then(function () {
+        .then(function() {
           return exportUser(queryParams);
         })
         .then((response) => {
           this.download(response.msg);
         })
-        .catch(function () {});
+        .catch(function() {
+        });
     },
     /** 导入按钮操作 */
     handleImport() {
@@ -1298,15 +1350,15 @@ export default {
     submitFileForm() {
       this.$refs.upload.submit();
     },
-    generateDomain(){
+    generateDomain() {
       let queryParams;
-      if(this.form.userId){
-        queryParams= {
+      if (this.form.userId) {
+        queryParams = {
           'userId': this.form.userId,
         }
       }
       generateSubDomain(queryParams).then(response => {
-        this.form.domain=response.data
+        this.form.domain = response.data
       });
     },
     /** 设置单独注册会员按钮操作 */
@@ -1316,7 +1368,7 @@ export default {
     },
     /** 提交设置单独注册会员 */
     submitRegisterForm() {
-      setIsRegisterMember({status: this.registerForm.status}, this.ids).then(response => {
+      setIsRegisterMember({ status: this.registerForm.status }, this.ids).then(response => {
         if (response.code === 200) {
           this.msgSuccess("设置成功");
           this.registerOpen = false;
@@ -1331,8 +1383,8 @@ export default {
       // this.allowedAllRegisterForm.status = true;
     },
     // 提交
-    submitAllowedAllRegisterForm(){
-      isAllowedAllRegister({status: this.allowedAllRegisterForm.status}, this.ids).then(response => {
+    submitAllowedAllRegisterForm() {
+      isAllowedAllRegister({ status: this.allowedAllRegisterForm.status }, this.ids).then(response => {
         if (response.code === 200) {
           this.msgSuccess("操作成功");
           this.allowedAllRegisterOpen = false;
@@ -1378,7 +1430,7 @@ export default {
       const formData = new FormData();
       formData.append('file', file);
 
-      formData.append('userId',row.userId)
+      formData.append('userId', row.userId)
 
       this.$set(row, 'uploading', true);
       this.$set(row, 'uploadError', '');
@@ -1420,7 +1472,7 @@ export default {
     },
     requestUpload() {
     },
-    beforeUpload(){
+    beforeUpload() {
       console.log(file.type)
       const isPic =
         file.type === 'image/jpeg' ||
@@ -1438,25 +1490,25 @@ export default {
       }
       return isPic && isLt2M
     },
-    handleUpdateDoctor(row){
-      this.doctor.title="绑定医生"
-      this.doctor.open=true;
-      this.doctorForm.userId=row.userId;
+    handleUpdateDoctor(row) {
+      this.doctor.title = "绑定医生"
+      this.doctor.open = true;
+      this.doctorForm.userId = row.userId;
     },
-    bindCompanyUserDoctorId(row){
+    bindCompanyUserDoctorId(row) {
       console.log(row)
-      this.doctorForm.doctorId=row;
-      bindDoctorId(this.doctorForm).then(res=>{
-        if (res.code==200){
+      this.doctorForm.doctorId = row;
+      bindDoctorId(this.doctorForm).then(res => {
+        if (res.code == 200) {
           this.$message.success('绑定成功')
-        }else {
-          this.$message.error('绑定失败:',res.msg)
+        } else {
+          this.$message.error('绑定失败:', res.msg)
         }
         this.getList()
-        this.doctor.open=false;
+        this.doctor.open = false;
       })
     },
-    handleUnBindUserId(val){
+    handleUnBindUserId(val) {
       this.$confirm(
         '确认解绑医生:<span style="color: green;">' + val.nickName + '' +
         '</span> 的医生?',
@@ -1471,10 +1523,10 @@ export default {
       }).then(response => {
         this.getList();
         this.msgSuccess("解绑成功");
-      }).finally(res=>{
+      }).finally(res => {
         this.getList();
       })
     },
   },
-};
+}
 </script>

+ 67 - 22
src/views/company/components/selectQwUser.vue

@@ -60,7 +60,7 @@
 
     <div style="margin-top: 10px; text-align: right;">
       <el-button type="primary" @click="handleBatchBind">确定</el-button>
-      <el-button @click="cancelSelect">取消</el-button>
+      <el-button @click="cancelSelect">取消选择</el-button>
     </div>
 
     <pagination
@@ -108,7 +108,9 @@ export default {
       // 表单校验
       rules: {},
       // 多选数据
-      selectedUsers: []
+      selectedUsers: [],
+      // 已选中的用户ID列表(用于初始化选中状态)
+      preSelectedUserIds: []
     };
   },
   created() {
@@ -135,9 +137,31 @@ export default {
         this.customerList = response.rows;
         this.total = response.total;
         this.loading = false;
+
+        // 在数据加载完成后设置已选中项
+        this.$nextTick(() => {
+          this.setPreSelectedItems();
+        });
       });
     },
 
+    // 设置预选中的项
+    setPreSelectedItems() {
+      if (this.preSelectedUserIds.length > 0 && this.customerList.length > 0) {
+        // 找到需要预选中的行
+        const selectedRows = this.customerList.filter(row =>
+          this.preSelectedUserIds.includes(row.id)
+        );
+
+        // 设置选中状态
+        this.$nextTick(() => {
+          selectedRows.forEach(row => {
+            this.$refs.customerList.toggleRowSelection(row, true);
+          });
+        });
+      }
+    },
+
     // 多选处理
     handleSelectionChange(selection) {
       this.selectedUsers = selection;
@@ -156,8 +180,28 @@ export default {
       });
 
       // 清空选择
-      this.resetQuery();
-      this.$refs.customerList.clearSelection();
+      this.clearSelection();
+      this.$emit('close'); // 通知父组件关闭对话框
+    },
+
+    // 添加一个新的方法用于清除选择
+    clearSelection() {
+      this.selectedUsers = [];
+      this.preSelectedUserIds = [];
+      if (this.$refs.customerList) {
+        this.$refs.customerList.clearSelection();
+      }
+    },
+
+    // 设置已选中的用户(由父组件调用)
+    setSelectedUsers(users) {
+      this.preSelectedUserIds = users.map(user => user.id);
+      this.selectedUsers = [...users];
+
+      // 如果数据已经加载,直接设置选中状态
+      if (this.customerList.length > 0) {
+        this.setPreSelectedItems();
+      }
     },
 
     // 取消选择
@@ -170,6 +214,7 @@ export default {
     cancel() {
       this.open = false;
       this.reset();
+      this.clearSelection(); // 清除选择
     },
     /** 搜索按钮操作 */
     handleQuery() {
@@ -187,22 +232,22 @@ export default {
 </script>
 
 <style>
-  .el-tag + .el-tag {
-    margin-left: 10px;
-  }
-  .button-new-tag {
-    margin-left: 10px;
-    height: 32px;
-    line-height: 30px;
-    padding-top: 0;
-    padding-bottom: 0;
-  }
-  .input-new-tag {
-    width: 90px;
-    margin-left: 10px;
-    vertical-align: bottom;
-  }
-  .el-dialog__wrapper{
-    z-index: 100000;
-  }
+.el-tag + .el-tag {
+  margin-left: 10px;
+}
+.button-new-tag {
+  margin-left: 10px;
+  height: 32px;
+  line-height: 30px;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+.input-new-tag {
+  width: 90px;
+  margin-left: 10px;
+  vertical-align: bottom;
+}
+.el-dialog__wrapper{
+  z-index: 100000;
+}
 </style>