Explorar o código

蒙牛-直播配置

三七 hai 1 día
pai
achega
dadfd2f80a

+ 56 - 1
src/views/company/companyUser/index.vue

@@ -185,6 +185,25 @@
               </div>
             </template>
           </el-table-column>
+
+            <!-- 新增:绑定会员状态 -->
+            <el-table-column label="绑定会员状态" align="center" prop="bindStatus" width="100">
+                <template slot-scope="scope">
+                    <el-tag
+                        :type="scope.row.bindStatus === 1 ? 'success' : 'info'"
+                        size="mini">
+                        {{ scope.row.bindStatus === 1 ? '已绑定' : '未绑定' }}
+                    </el-tag>
+                </template>
+            </el-table-column>
+
+            <!-- 新增:绑定用户 -->
+            <el-table-column label="绑定用户" align="center" prop="bindUser" width="120">
+                <template slot-scope="scope">
+                    <span v-if="scope.row.bindUser">{{ scope.row.bindUser }}</span>
+                    <span v-else>-</span>
+                </template>
+            </el-table-column>
           <el-table-column label="区域" align="center" prop="addressId">
           </el-table-column>
           <el-table-column label="创建时间"  sortable align="center" prop="createTime" width="160">
@@ -841,7 +860,7 @@ import { getMyQwUserList,getMyQwCompanyList } from "@/api/qw/user";
 import  selectUser  from "@/views/company/components/selectQwUser.vue";
 import { getConfigByKey } from "@/api/company/companyConfig";
 import axios from "axios";
-import {addCodeUrl, getSaleBindUserList} from "../../../api/company/companyUser";
+import {addCodeUrl, bindSaleAndFsUser, getSaleBindUserList} from "../../../api/company/companyUser";
 import selectDoctor from "@/views/qw/user/selectDoctor.vue";
 import {bindCidServer,unbindCidServer} from "@/api/company/companyAiWorkflowServer";
 import AiSipCallUser from "../../aiSipCall/aiSipCallUser.vue";
@@ -1105,6 +1124,14 @@ export default {
     });
   },
   methods: {
+
+      handlePagination(data) {
+          // 添加防抖或判断,避免初始化时自动触发
+          if (this.member.open) {
+              this.getMemberList();
+          }
+      },
+
     onDomainBlur() {
       if (this.form.domain != null) {
         let value = this.form.domain.trim();
@@ -2100,3 +2127,31 @@ export default {
   },
 }
 </script>
+<style scoped>
+/* 确保筛选表单在一行显示 */
+.bind-member-dialog :deep(.el-form--inline .el-form-item) {
+    margin-right: 0;
+}
+
+.bind-member-dialog :deep(.el-form-item__label) {
+    font-size: 13px;
+    padding-right: 8px;
+}
+
+/* 修复小屏幕下的显示问题 */
+@media (max-width: 580px) {
+    .bind-member-dialog .filter-form > div {
+        flex-direction: column;
+        align-items: stretch !important;
+    }
+
+    .bind-member-dialog .filter-form .el-form-item {
+        width: 100%;
+        margin-right: 0;
+    }
+
+    .bind-member-dialog .filter-form .el-form-item:last-child {
+        text-align: right;
+    }
+}
+</style>

+ 237 - 0
src/views/company/companyUser/profile/index.vue

@@ -105,6 +105,7 @@
           </div>
         </el-card>
       </el-col>
+
       <el-col :span="18" :xs="24">
         <el-card>
           <div slot="header" class="clearfix">
@@ -121,6 +122,177 @@
         </el-card>
       </el-col>
     </el-row>
+
+
+      <!-- 绑定会员对话框 - 优化样式,无背景色 -->
+      <el-dialog
+          v-if="member && member.hasOwnProperty('title')"
+          :title="member.title"
+          :visible.sync="member.open"
+          width="800px"
+          append-to-body
+          class="bind-member-dialog"
+          :close-on-click-modal="false"
+          @open="handleDialogOpen"
+      >
+          <!-- 筛选表单 - 无背景色,优化排版 -->
+          <div class="filter-container">
+              <el-row :gutter="16" class="filter-row" type="flex" align="middle">
+                  <el-col :span="6">
+                      <el-input
+                          v-model="memberQueryParams.userId"
+                          placeholder="会员ID"
+                          clearable
+                          @keyup.enter="handleMemberQuery"
+                          size="small"
+                          prefix-icon="el-icon-user"
+                      />
+                  </el-col>
+                  <el-col :span="6">
+                      <el-input
+                          v-model="memberQueryParams.nickName"
+                          placeholder="昵称"
+                          clearable
+                          @keyup.enter="handleMemberQuery"
+                          size="small"
+                          prefix-icon="el-icon-user"
+                      />
+                  </el-col>
+                  <el-col :span="6">
+                      <el-input
+                          v-model="memberQueryParams.phone"
+                          placeholder="手机号"
+                          clearable
+                          @keyup.enter="handleMemberQuery"
+                          size="small"
+                          prefix-icon="el-icon-phone"
+                      />
+                  </el-col>
+                  <el-col :span="6" class="filter-buttons">
+                      <el-button
+                          type="primary"
+                          icon="el-icon-search"
+                          @click="handleMemberQuery"
+                          size="small"
+                          :loading="loading"
+                      >搜索</el-button>
+                      <el-button
+                          icon="el-icon-refresh"
+                          @click="resetMemberQuery"
+                          size="small"
+                      >重置</el-button>
+                  </el-col>
+              </el-row>
+          </div>
+
+          <!-- 表格区域 -->
+          <div class="table-section">
+              <el-table
+                  :data="memberList"
+                  height="300"
+                  highlight-current-row
+                  @current-change="selectMember"
+                  v-loading="loading"
+                  border
+                  stripe
+                  size="small"
+                  class="member-table"
+              >
+                  <el-table-column
+                      property="userId"
+                      label="ID"
+                      width="70"
+                      align="center"
+                  ></el-table-column>
+
+                  <el-table-column
+                      property="nickName"
+                      label="昵称"
+                      min-width="130"
+                      show-overflow-tooltip
+                  >
+                      <template slot-scope="scope">
+              <span class="nickname-cell">
+                <i class="el-icon-user"></i>
+                {{ scope.row.nickName || '--' }}
+              </span>
+                      </template>
+                  </el-table-column>
+
+                  <el-table-column
+                      property="phone"
+                      label="手机号"
+                      width="130"
+                      align="center"
+                  >
+                      <template slot-scope="scope">
+              <span v-if="scope.row.phone" class="phone-cell">
+                <i class="el-icon-phone"></i>
+                {{ scope.row.phone }}
+              </span>
+                          <span v-else class="no-data">--</span>
+                      </template>
+                  </el-table-column>
+
+                  <el-table-column
+                      property="status"
+                      label="绑定状态"
+                      width="100"
+                      align="center"
+                  >
+                      <template slot-scope="scope">
+                          <el-tag
+                              :type="scope.row.status === 1 ? 'success' : 'info'"
+                              size="small"
+                              effect="light"
+                              class="status-tag"
+                          >
+                              <i :class="scope.row.status === 1 ? 'el-icon-check' : 'el-icon-close'"></i>
+                              {{ scope.row.status === 1 ? '已绑定' : '未绑定' }}
+                          </el-tag>
+                      </template>
+                  </el-table-column>
+              </el-table>
+
+              <!-- 分页组件 - 支持每页条数选择 -->
+              <div class="pagination-wrapper" v-if="memberTotal > 0">
+                  <pagination
+                      :total="memberTotal"
+                      :page.sync="memberQueryParams.pageNum"
+                      :limit.sync="memberQueryParams.pageSize"
+                      @pagination="getMemberList"
+                      :page-sizes="[10, 20, 50,100,500]"
+                      :layout="'total, sizes, prev, pager, next, jumper'"
+                      class="custom-pagination"
+                  />
+              </div>
+
+              <!-- 空数据提示 -->
+              <div v-if="!loading && memberList.length === 0" class="empty-data">
+                  <i class="el-icon-info"></i>
+                  <span>暂无会员数据</span>
+              </div>
+          </div>
+
+          <!-- 底部按钮 -->
+          <div slot="footer" class="dialog-footer">
+              <div class="selected-info" v-if="selectedMember">
+                  <i class="el-icon-success" style="color: #67C23A;"></i>
+                  已选中:{{ selectedMember.nickName || selectedMember.userId }}
+              </div>
+              <div class="action-buttons">
+                  <el-button @click="cancelBindMember" size="medium">取 消</el-button>
+                  <el-button
+                      type="primary"
+                      @click="confirmBindMember"
+                      size="medium"
+                      :disabled="!selectedMember"
+                      :loading="confirmLoading"
+                  >确 定</el-button>
+              </div>
+          </div>
+      </el-dialog>
+
     <el-dialog
       title="订阅服务号通知"
       :visible.sync="bindDialogVisible"
@@ -188,6 +360,65 @@ export default {
   },
   methods: {
 
+  confirmBindMember() {
+      if (!this.selectedMember) {
+          this.$message.warning('请选择要绑定的会员');
+          return;
+      }
+
+      this.confirmLoading = true;
+      const bindData = {
+          companyUserId: this.currentCompanyId,
+          userId: this.selectedMember.userId
+      };
+
+      bindSaleAndFsUser(bindData)
+          .then(response => {
+              if (response.code === 200) {
+                  this.$message.success('绑定会员成功');
+                  this.cancelBindMember();
+                  this.getUser();
+              } else {
+                  this.$message.error(response.msg || '绑定失败');
+              }
+          })
+          .catch(error => {
+              console.error('绑定会员失败:', error);
+              this.$message.error('绑定会员失败');
+          })
+          .finally(() => {
+              this.confirmLoading = false;
+          });
+  },
+
+  cancelBindMember() {
+      this.member.open = false;
+      this.memberList = [];
+      this.selectedMember = null;
+      this.currentCompanyId = null;
+      this.memberQueryParams = {
+          nickName: null,
+          phone: null,
+          userId: null,
+          pageNum: 1,
+          pageSize: 10
+      };
+  },
+
+  selectMember(member) {
+      this.selectedMember = member;
+  },
+
+  handleDialogOpen() {
+      this.selectedMember = null;
+      this.getMemberList();
+  },
+
+  handleMemberQuery() {
+      this.memberQueryParams.pageNum = 1;
+      this.getMemberList();
+  },
+
     handleBindMember() {
       this.currentCompanyId = this.user.userId;
       this.resetMemberQuery();
@@ -266,6 +497,12 @@ export default {
         this.user = response.data;
         this.roleGroup = response.roleGroup;
         this.postGroup = response.postGroup;
+          // 将 fsUserId 字符串拆分为数组
+          if (this.user.fsUserId) {
+              this.user.fsUserIdArray = this.user.fsUserId.split(',').map(id => id.trim());
+          } else {
+              this.user.fsUserIdArray = [];
+          }
       });
     },
     openWechatBindDialog() {