Prechádzať zdrojové kódy

95:红德堂APP调试 同步会员项目代码

Long 3 dní pred
rodič
commit
ffcd4dc4c6

+ 16 - 0
src/api/his/user.js

@@ -99,3 +99,19 @@ export function addPoint(data) {
     data: data
   })
 }
+
+export function listUserByProject(query) {
+  return request({
+    url: '/his/user/listProject',
+    method: 'get',
+    params: query
+  })
+}
+
+// 删除用户
+export function delUserCompanyUser(id) {
+  return request({
+    url: '/his/user/delete/' + id,
+    method: 'delete'
+  })
+}

+ 12 - 146
src/views/his/user/index.vue

@@ -112,16 +112,6 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-user"
-          size="mini"
-          @click="handleChangeCompanyUser"
-          :disabled="multiple"
-          v-hasPermi="['company:companyUser:change']"
-        >更换会员归属</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -138,16 +128,19 @@
 
     <el-table height="660" v-loading="loading" border :data="userList" @selection-change="handleSelectionChange" >
       <el-table-column type="selection" width="55" align="center" />
-
+      <el-table-column label="ID" align="center" prop="userId" />
       <el-table-column label="用户昵称" align="center" prop="nickName" width="150px"/>
-      <el-table-column label="用户头像" align="center" prop="avatar" >
-         <template slot-scope="scope">
-                 <el-image v-if="scope.row.avatar!=null"
-                     style="width: 50px;"
-                     :src="scope.row.avatar"
-                    >
-                 </el-image>
-         </template>
+      <el-table-column label="会员头像" align="center" width="80">
+        <template slot-scope="scope">
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover"
+          >
+            <img slot="reference" :src="scope.row.avatar" width="50" >
+            <img :src="scope.row.avatar" style="max-width: 120px;">
+          </el-popover>
+        </template>
       </el-table-column>
       <el-table-column label="手机号码" align="center" prop="phone" width="150px" />
       <el-table-column label="用户积分" align="center" prop="integral" />
@@ -239,36 +232,6 @@
          <userDetailsByNew  ref="userDetailsByNew" />
        </el-drawer>
 
-    <!-- 更换会员归属对话框 -->
-    <el-dialog title="更换会员归属" :visible.sync="changeCompanyUserOpen" width="500px" append-to-body>
-      <el-form ref="changeCompanyUserForm" :model="changeCompanyUserForm" :rules="changeCompanyUserRules" label-width="100px">
-        <el-form-item label="选择公司" prop="companyId">
-          <el-select v-model="changeCompanyUserForm.companyId" placeholder="请选择公司" style="width: 100%" @change="handleCompanyChange">
-            <el-option
-              v-for="item in companyOptions"
-              :key="item.companyId"
-              :label="item.companyName"
-              :value="item.companyId"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="选择销售" prop="companyUserId">
-          <el-select v-model="changeCompanyUserForm.companyUserId" placeholder="请选择销售" style="width: 100%" @change="handleCompanyUserChange">
-            <el-option
-              v-for="item in companyUserOptions"
-              :key="item.userId"
-              :label="item.nickName + '_' + item.userName"
-              :value="item.userId"
-            />
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitChangeCompanyUserForm">确 定</el-button>
-        <el-button @click="cancelChangeCompanyUser">取 消</el-button>
-      </div>
-    </el-dialog>
-
     <el-dialog :title="addPointDialog.title" :visible.sync="addPointDialog.open" width="500px" append-to-body>
       <el-form ref="addPointForm" :model="addPointDialog.form" :rules="addPointDialog.rules" label-width="100px">
         <el-form-item label="积分" prop="point">
@@ -304,25 +267,8 @@ export default {
       queryCompanyUserId:null,
       companyName: null,
       companyUserNickName: null,
-      // 更换会员归属表单校验
-      changeCompanyUserRules: {
-        companyId: [
-          { required: true, message: '请选择公司', trigger: 'change' }
-        ],
-        companyUserId: [
-          { required: true, message: '请选择销售', trigger: 'change' }
-        ]
-      },
       companyOptions: [],
       companyUserOptions: [],
-      // 更换会员归属对话框
-      changeCompanyUserOpen: false,
-      // 更换会员归属表单
-      changeCompanyUserForm: {
-        companyId: null,
-        companyUserId: null,
-        userIds: []
-      },
       show:{
               title:"用户详情",
               open:false,
@@ -470,26 +416,6 @@ export default {
         this.companyQueryUserOptions = [];
       }
      },
-    handleCompanyChange(companyId) {
-      // 清空已选择的销售
-      this.changeCompanyUserForm.companyUserId = null;
-      // 根据公司ID获取对应的销售列表
-      if (companyId) {
-        getCompanyUserList({ companyId: companyId }).then(response => {
-          if (response.code === 200) {
-            this.companyUserOptions = response.data;
-          } else {
-            this.$message.error(response.msg || '获取销售列表失败');
-            this.companyUserOptions = [];
-          }
-        }).catch(() => {
-          this.$message.error('获取销售列表失败');
-          this.companyUserOptions = [];
-        });
-      } else {
-        this.companyUserOptions = [];
-      }
-    },
     /** 查询用户列表 */
     getList() {
       this.loading = true;
@@ -649,66 +575,6 @@ export default {
           this.exportLoading = false;
         }).catch(() => {});
     },
-    /** 更换会员归属按钮操作 */
-    handleChangeCompanyUser() {
-      // 获取公司下拉列表
-      getCompanyList().then(response => {
-        if (response.code === 200) {
-          this.companyOptions = response.data;
-          // 重置表单和销售列表
-          this.resetCompanyUserForm();
-          this.companyUserOptions = [];
-          this.changeCompanyUserOpen = true;
-        } else {
-          this.$message.error(response.msg || '获取公司列表失败');
-        }
-      }).catch(() => {
-        this.$message.error('获取公司列表失败');
-      });
-    },
-
-    /** 取消更换会员归属 */
-    cancelChangeCompanyUser() {
-      this.changeCompanyUserOpen = false;
-      this.resetCompanyUserForm();
-    },
-    /** 重置更换会员归属表单 */
-    resetCompanyUserForm() {
-      this.changeCompanyUserForm = {
-        companyId: null,
-        companyUserId: null,
-        userIds: []
-      };
-      this.resetForm("changeCompanyUserForm");
-    },
-    /** 提交更换会员归属 */
-    submitChangeCompanyUserForm() {
-      this.$refs["changeCompanyUserForm"].validate(valid => {
-        if (valid) {
-          // 调用更换会员归属接口
-          // 检查companyId是否已设置
-          if (!this.changeCompanyUserForm.companyId) {
-            this.$message.error('请选择公司');
-            return;
-          }
-
-          changeCompanyUser(this.ids, {
-            companyUserId: this.changeCompanyUserForm.companyUserId,
-            companyId: this.changeCompanyUserForm.companyId
-          }).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("操作成功");
-              this.changeCompanyUserOpen = false;
-              this.getList();
-            } else {
-              this.$message.error(response.msg || '操作失败');
-            }
-          }).catch(() => {
-            this.$message.error('操作失败');
-          });
-        }
-      });
-    }
   }
 };
 </script>

+ 794 - 0
src/views/his/user/indexProject.vue

@@ -0,0 +1,794 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="会员ID" prop="userId">
+        <el-input
+
+          v-model="queryParams.userId"
+          placeholder="请输入会员ID"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="会员昵称" prop="nickname">
+        <el-input
+
+          v-model="queryParams.nickname"
+          placeholder="请输入会员昵称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="手机号码" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入手机号码"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="注册时间" prop="createTimeRange">
+        <el-date-picker clearable size="small" style="width: 340px"
+                        v-model="dateRange"
+                        type="daterange"
+                        value-format="yyyy-MM-dd"
+                        range-separator="至"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                        @change="handleDateRangeChange">
+        </el-date-picker>
+      </el-form-item>
+
+
+
+      <el-form-item label="所属公司" prop="companyName">
+        <el-select
+          v-model="queryParams.companyId"
+          placeholder="请选择所属公司"
+          clearable
+          filterable
+          size="small"
+          @change="handleQueryCompanyChange"
+        >
+          <el-option
+            v-for="item in companyQueryOptions"
+            :key="item.companyId"
+            :label="item.companyName"
+            :value="item.companyId">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="所属销售" prop="companyUserNickName">
+
+        <el-select
+          v-model="queryParams.companyUserNickName"
+          placeholder="请选择所属销售"
+          clearable
+          filterable
+          size="small"
+        >
+          <el-option
+            v-for="item in companyQueryUserOptions"
+            :key="item.userId"
+            :label="item.nickName"
+            :value="item.nickName">
+          </el-option>
+        </el-select>
+      </el-form-item>
+
+
+
+
+      <!--      <el-form-item label="推线编码" prop="registerCode">-->
+      <!--        <el-input-->
+
+      <!--          v-model="queryParams.registerCode"-->
+      <!--          placeholder="请输入推线编码"-->
+      <!--          clearable-->
+      <!--          size="small"-->
+      <!--          @keyup.enter.native="handleQuery"-->
+      <!--        />-->
+      <!--      </el-form-item>-->
+      <el-form-item label="状态" prop="status">
+        <el-select  v-model="queryParams.status" placeholder="请选择状态" clearable size="small" >
+          <el-option
+            v-for="item in statusOptions"
+            :key="item.dictValue"
+            :label="item.dictLabel"
+            :value="item.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <!--      <el-form-item label="会员等级" prop="status">-->
+      <!--        <el-select   v-model="queryParams.level" placeholder="请选择会员等级" clearable size="small" >-->
+      <!--         <el-option-->
+      <!--                v-for="item in userLevelOptions"-->
+      <!--                :key="item.dictValue"-->
+      <!--                :label="item.dictLabel"-->
+      <!--                :value="item.dictValue"-->
+      <!--              />-->
+      <!--        </el-select>-->
+      <!--      </el-form-item>-->
+      <!--      <el-form-item label="推广员" prop="isPromoter">-->
+      <!--        <el-select  v-model="queryParams.isPromoter" placeholder="请选择" clearable size="small" >-->
+      <!--         <el-option-->
+      <!--                v-for="item in userIsPromoterOptions"-->
+      <!--                :key="item.dictValue"-->
+      <!--                :label="item.dictLabel"-->
+      <!--                :value="item.dictValue"-->
+      <!--              />-->
+      <!--        </el-select>-->
+      <!--      </el-form-item>-->
+      <el-form-item label="项目" prop="projectId">
+        <el-select  v-model="queryParams.projectId" placeholder="请选择项目" clearable size="small" >
+          <el-option
+            v-for="item in projectOptions"
+            :key="item.dictValue"
+            :label="item.dictLabel"
+            :value="item.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-user"
+          size="mini"
+          @click="handleChangeCompanyUser"
+          :disabled="multiple"
+          v-hasPermi="['company:companyUser:change']"
+        >更换会员归属</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['store:user:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table  height="500" border v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="ID" align="center" prop="userId" />
+      <el-table-column label="项目" align="center" prop="projectId">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.projectId !== null">{{ getProjectLabel(scope.row.projectId,scope.row) }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="会员昵称" align="center" prop="nickname" />
+      <el-table-column label="会员头像" align="center" width="80">
+        <template slot-scope="scope">
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover"
+          >
+            <img slot="reference" :src="scope.row.avatar" width="50" >
+            <img :src="scope.row.avatar" style="max-width: 120px;">
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column label="手机号码" align="center" prop="phone" />
+      <el-table-column label="用户余额" align="center" prop="nowMoney" />
+      <!--      <el-table-column label="推广佣金" align="center" prop="brokeragePrice" />-->
+      <el-table-column label="积分" align="center" prop="integral" />
+      <el-table-column label="会员注册时间" align="center" prop="createTime" />
+      <!--      <el-table-column label="累计消费金额" align="center" prop="totalAmount" />-->
+      <!--      <el-table-column label="上次消费时间" align="center" prop="lastBuyTime" />-->
+      <!--      <el-table-column label="上次消费金额(元)" align="center" prop="number" />-->
+      <!--      <el-table-column label="会员等级" align="center" prop="level" >-->
+      <!--          <template slot-scope="scope">-->
+      <!--              <el-tag prop="status" v-for="(item, index) in userLevelOptions"    v-if="scope.row.level==item.dictValue">{{item.dictLabel}}</el-tag>-->
+      <!--          </template>-->
+      <!--      </el-table-column>-->
+      <!--      <el-table-column label="是否允许下单" align="center" prop="isShow" >-->
+      <!--        <template slot-scope="scope">-->
+      <!--          <el-tag prop="isShow" v-for="(item, index) in isShowOptions"    v-if="scope.row.isShow==item.dictValue">{{item.dictLabel}}</el-tag>-->
+      <!--        </template>-->
+      <!--      </el-table-column>-->
+      <!--      <el-table-column label="推广员" align="center" prop="isPromoter" >-->
+      <!--          <template slot-scope="scope">-->
+      <!--              <el-tag prop="status" v-for="(item, index) in userIsPromoterOptions"    v-if="scope.row.isPromoter==item.dictValue">{{item.dictLabel}}</el-tag>-->
+      <!--          </template>-->
+      <!--      </el-table-column>-->
+      <el-table-column label="状态" align="center" prop="status" >
+        <template slot-scope="scope">
+          <el-tag prop="status" v-for="(item, index) in statusOptions"    v-if="scope.row.status==item.dictValue">{{item.dictLabel}}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="所属公司" align="center" prop="companyName" />
+      <el-table-column label="所属销售" align="center" prop="companyUserNickName" />
+      <!--      <el-table-column label="创建时间" align="center" prop="createTime" />-->
+      <!--      <el-table-column label="累计佣金" align="center" prop="registerDate" />-->
+      <!--      <el-table-column label="可提现佣金" align="center" prop="registerCode" />-->
+      <!--      <el-table-column label="冻结佣金" align="center" prop="source" />-->
+      <!--      <el-table-column label="已提现佣金" align="center" prop="remark" />-->
+      <el-table-column label="看课数量" align="center" prop="watchCourseCount" />
+      <el-table-column label="参与营期数" align="center" prop="partCourseCount" />
+      <el-table-column label="最后看课时间" align="center" prop="lastWatchDate" width="160">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.lastWatchDate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center"  width="150px"   class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['store:user:edit']"
+          >修改</el-button>
+
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleShow(scope.row)"
+            v-hasPermi="['store:user:query']"
+          >查看</el-button>
+
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['store:user:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改用户对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="会员头像" prop="avatar">
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover"
+          >
+            <img slot="reference" :src="form.avatar" width="80">
+            <img :src="form.avatar" style="max-width: 80px;">
+          </el-popover>
+        </el-form-item>
+        <el-form-item label="会员昵称" prop="nickname">
+          <el-input v-model="form.nickname" disabled placeholder="请输入用户昵称" />
+        </el-form-item>
+        <el-form-item label="手机号码" prop="phone">
+          <el-input v-model="form.phone" disabled placeholder="请输入手机号码" />
+        </el-form-item>
+        <el-form-item label="最后一次登录ip" prop="lastIp">
+          <el-input v-model="form.lastIp" disabled placeholder="请输入最后一次登录ip" />
+        </el-form-item>
+        <!-- <el-form-item label="用户余额" prop="nowMoney">
+          <el-input v-model="form.nowMoney" disabled placeholder="请输入用户余额" />
+        </el-form-item> -->
+        <!-- <el-form-item label="积分" prop="integral">
+          <el-input v-model="form.integral" disabled placeholder="请输入用户积分" />
+        </el-form-item> -->
+        <el-form-item label="进线日期" prop="registerDate">
+          <el-date-picker clearable size="small"
+                          v-model="form.registerDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择进线日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="推线编码" prop="registerCode">
+          <el-input v-model="form.registerCode" placeholder="请输入推线编码" />
+        </el-form-item>
+        <el-form-item label="渠道来源" prop="source">
+          <el-input v-model="form.source" placeholder="请输入渠道来源" />
+        </el-form-item>
+        <el-form-item label="会员等级" prop="level">
+          <el-select style="width: 200px" v-model="form.level" placeholder="请选择会员等级" clearable size="small" >
+            <el-option
+              v-for="item in userLevelOptions"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否为推广员" prop="isPromoter">
+          <el-select style="width: 200px" v-model="form.isPromoter" placeholder="请选择" clearable size="small" >
+            <el-option
+              v-for="item in userIsPromoterOptions"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="状态" prop="level">
+          <el-radio-group v-model="form.status">
+            <el-radio :label="item.dictValue" v-for="item in statusOptions" >{{item.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="是否展示" prop="isShow">
+          <el-radio-group v-model="form.isShow">
+            <el-radio :label="item.dictValue" v-for="item in isShowOptions" >{{item.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="用户备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入用户备注" />
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-drawer size="75%" :title="show.title" :visible.sync="show.open">
+      <userDetailsByNew  ref="userDetailsByNew" />
+    </el-drawer>
+
+    <!-- 更换会员归属对话框 -->
+    <el-dialog title="更换会员归属" :visible.sync="changeCompanyUserOpen" width="500px" append-to-body>
+      <el-form ref="changeCompanyUserForm" :model="changeCompanyUserForm" :rules="changeCompanyUserRules" label-width="100px">
+        <el-form-item label="选择公司" prop="companyId">
+          <el-select v-model="changeCompanyUserForm.companyId" placeholder="请选择公司" style="width: 100%" @change="handleCompanyChange">
+            <el-option
+              v-for="item in companyOptions"
+              :key="item.companyId"
+              :label="item.companyName"
+              :value="item.companyId"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="选择销售" prop="companyUserId">
+          <el-select v-model="changeCompanyUserForm.companyUserId" placeholder="请选择销售" style="width: 100%" @change="handleCompanyUserChange">
+            <el-option
+              v-for="item in companyUserOptions"
+              :key="item.userId"
+              :label="item.nickName + '_' + item.userName"
+              :value="item.userId"
+            />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitChangeCompanyUserForm">确 定</el-button>
+        <el-button @click="cancelChangeCompanyUser">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {listUserByProject, getUser, addUser, updateUser, exportUser, delUserCompanyUser} from "@/api/his/user";
+import { getCompanyUserList, changeCompanyUser, getCompanyList } from '@/api/company/companyUser';
+import userDetailsByNew from '@/views/his/user/userDetails.vue'
+export default {
+  name: "User",
+  components: { userDetailsByNew },
+  data() {
+    return {
+      companyQueryOptions:[],
+      companyQueryUserOptions:[],
+      userIsPromoterOptions:[],
+      userLevelOptions:[],
+      statusOptions:[],
+      isShowOptions:[],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      show:{
+        title:"会员详情",
+        open:false,
+      },
+      // 用户表格数据
+      userList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 日期范围
+      dateRange: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        username: null,
+        password: null,
+        realName: null,
+        birthday: null,
+        idCard: null,
+        mark: null,
+        nickname: null,
+        avatar: null,
+        phone: null,
+        lastIp: null,
+        nowMoney: null,
+        brokeragePrice: null,
+        integral: null,
+        signNum: null,
+        status: null,
+        level: null,
+        spreadUserId: null,
+        spreadTime: null,
+        userType: null,
+        isPromoter: null,
+        payCount: null,
+        spreadCount: null,
+        addres: null,
+        wxProfile: null,
+        isDel: null,
+        startCreateTime: null,
+        endCreateTime: null,
+        companyId: null,
+        companyUserNickName: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        status: [
+          { required: true, message: "状态不能为空", trigger: "blur" }
+        ],
+        level: [
+          { required: true, message: "等级不能为空", trigger: "blur" }
+        ],
+
+      },
+      // 更换会员归属对话框
+      changeCompanyUserOpen: false,
+      // 更换会员归属表单
+      changeCompanyUserForm: {
+        companyId: null,
+        companyUserId: null,
+        userIds: []
+      },
+      // 更换会员归属表单校验
+      changeCompanyUserRules: {
+        companyId: [
+          { required: true, message: '请选择公司', trigger: 'change' }
+        ],
+        companyUserId: [
+          { required: true, message: '请选择销售', trigger: 'change' }
+        ]
+      },
+      // 销售选项
+      companyUserOptions: [],
+      companyOptions: [],
+      projectOptions: [],
+      selectedUser: []
+    };
+  },
+  created() {
+    this.getDicts("user_status").then((response) => {
+      this.statusOptions = response.data;
+    });
+    this.getDicts("user_level").then((response) => {
+      this.userLevelOptions = response.data;
+    });
+    this.getDicts("sys_company_or").then((response) => {
+      this.isShowOptions = response.data;
+    });
+
+    this.getDicts("user_is_promoter").then((response) => {
+      this.userIsPromoterOptions = response.data;
+    });
+    this.getDicts("sys_course_project").then(response => {
+      this.projectOptions = response.data;
+    });
+
+    this.getList();
+
+    getCompanyList().then(response => {
+      if (response.code === 200) {
+        this.companyQueryOptions = response.data;
+      }});
+  },
+  methods: {
+
+    handleQueryCompanyChange(companyId){
+      // 清空已选择的销售
+      this.queryCompanyUserId = null;
+      // 根据公司ID获取对应的销售列表
+      if (companyId) {
+        getCompanyUserList({ companyId: companyId }).then(response => {
+          if (response.code === 200) {
+            this.companyQueryUserOptions = response.data;
+          } else {
+            this.$message.error(response.msg || '获取销售列表失败');
+            this.companyQueryUserOptions = [];
+          }
+        }).catch(() => {
+          this.$message.error('获取销售列表失败');
+          this.companyQueryUserOptions = [];
+        });
+      } else {
+        this.companyQueryUserOptions = [];
+      }
+    },
+
+
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUserByProject(this.queryParams).then(response => {
+        this.userList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: null,
+        username: null,
+        password: null,
+        realName: null,
+        birthday: null,
+        idCard: null,
+        mark: null,
+        nickname: null,
+        avatar: null,
+        phone: null,
+        createTime: null,
+        updateTime: null,
+        lastIp: null,
+        nowMoney: null,
+        brokeragePrice: null,
+        integral: null,
+        signNum: null,
+        status: 0,
+        level: 0,
+        spreadUserId: null,
+        spreadTime: null,
+        userType: null,
+        isPromoter: null,
+        payCount: null,
+        spreadCount: null,
+        addres: null,
+        wxProfile: null,
+        isDel: null,
+        isShow: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.companyId = null;
+      this.queryParams.companyUserNickName = null;
+      this.companyQueryUserOptions = null;
+      this.handleQuery();
+    },
+    /** 处理日期范围变化 */
+    handleDateRangeChange(dates) {
+      if (dates) {
+        this.queryParams.startCreateTime = dates[0];
+        this.queryParams.endCreateTime = dates[1];
+      } else {
+        this.queryParams.startCreateTime = null;
+        this.queryParams.endCreateTime = null;
+      }
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId)
+      this.selectedUser = selection.map(item => {return {userId: item.userId, projectId: item.projectId}})
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加用户";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.form.status = response.data.status.toString();
+        this.form.isShow = response.data.isShow.toString();
+        this.form.level = response.data.level.toString();
+        this.form.isPromoter = response.data.isPromoter.toString();
+        this.open = true;
+        this.title = "修改用户";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != null) {
+            updateUser(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          } else {
+            addUser(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const companyUserId = row.companyUserId;
+      this.$confirm('是否确认删除用户编号为"' + companyUserId + '"的数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return delUserCompanyUser(companyUserId);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出当前用户数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return exportUser(queryParams);
+      }).then(response => {
+        console.log(response)
+        this.download(response.msg);
+      }).catch(function() {});
+    }
+    ,handleShow(row){
+      var that=this;
+      that.show.open=true;
+      setTimeout(() => {
+        that.$refs.storeUserDetails.getDetails(row.userId);
+      }, 200);
+    },
+    /** 更换会员归属按钮操作 */
+    handleChangeCompanyUser() {
+      // 获取公司下拉列表
+      getCompanyList().then(response => {
+        if (response.code === 200) {
+          this.companyOptions = response.data;
+          // 重置表单和销售列表
+          this.resetCompanyUserForm();
+          this.companyUserOptions = [];
+          this.changeCompanyUserOpen = true;
+        } else {
+          this.$message.error(response.msg || '获取公司列表失败');
+        }
+      }).catch(() => {
+        this.$message.error('获取公司列表失败');
+      });
+    },
+    /** 销售选择变化 */
+    handleCompanyUserChange(userId) {
+      if (!this.changeCompanyUserForm.companyId) {
+        this.$message.warning('请先选择公司');
+        this.changeCompanyUserForm.companyUserId = null;
+        return;
+      }
+    },
+    /** 重置更换会员归属表单 */
+    resetCompanyUserForm() {
+      this.changeCompanyUserForm = {
+        companyId: null,
+        companyUserId: null,
+        userIds: []
+      };
+      this.resetForm("changeCompanyUserForm");
+    },
+    handleCompanyChange(companyId) {
+      // 清空已选择的销售
+      this.changeCompanyUserForm.companyUserId = null;
+      // 根据公司ID获取对应的销售列表
+      if (companyId) {
+        getCompanyUserList({ companyId: companyId }).then(response => {
+          if (response.code === 200) {
+            this.companyUserOptions = response.data;
+          } else {
+            this.$message.error(response.msg || '获取销售列表失败');
+            this.companyUserOptions = [];
+          }
+        }).catch(() => {
+          this.$message.error('获取销售列表失败');
+          this.companyUserOptions = [];
+        });
+      } else {
+        this.companyUserOptions = [];
+      }
+    },
+    /** 取消更换会员归属 */
+    cancelChangeCompanyUser() {
+      this.changeCompanyUserOpen = false;
+      this.resetCompanyUserForm();
+    },
+    /** 提交更换会员归属 */
+    submitChangeCompanyUserForm() {
+      this.$refs["changeCompanyUserForm"].validate(valid => {
+        if (valid) {
+          // 调用更换会员归属接口
+          // 检查companyId是否已设置
+          if (!this.changeCompanyUserForm.companyId) {
+            this.$message.error('请选择公司');
+            return;
+          }
+
+          changeCompanyUser(this.selectedUser, {
+            companyUserId: this.changeCompanyUserForm.companyUserId,
+            companyId: this.changeCompanyUserForm.companyId
+          }).then(response => {
+            if (response.code === 200) {
+              this.msgSuccess("操作成功");
+              this.changeCompanyUserOpen = false;
+              this.getList();
+            } else {
+              this.$message.error(response.msg || '操作失败');
+            }
+          }).catch(() => {
+            this.$message.error('操作失败');
+          });
+        }
+      });
+    },
+    /** 获取项目对应名称 */
+    getProjectLabel(projectId) {
+      return this.projectOptions.find(item => parseInt(item.dictValue) === projectId)?.dictLabel;
+    },
+  }
+};
+
+
+</script>

+ 23 - 22
src/views/user/darkRoom/index.vue

@@ -17,21 +17,22 @@
       </el-form-item>
     </el-form>
 
-    <el-row :gutter="10" class="mb8">
-      <el-button
-        size="mini"
-        type="primary"
-        style="margin-left: 5px"
-        :disabled="ids.length === 0"
-        @click="handleUpdateBatch"
-        v-hasPermi="['his:user:enabledUsers']"
-      >批量启用</el-button>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
+<!--    <el-row :gutter="10" class="mb8">-->
+<!--      <el-button-->
+<!--        size="mini"-->
+<!--        type="primary"-->
+<!--        style="margin-left: 5px"-->
+<!--        :disabled="ids.length === 0"-->
+<!--        @click="handleUpdateBatch"-->
+<!--        v-hasPermi="['his:user:enabledUsers']"-->
+<!--      >批量启用</el-button>-->
+<!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
+<!--    </el-row>-->
 
     <el-table  height="500" border v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="项目" align="center" prop="projectName" />
       <el-table-column label="用户昵称" align="center" prop="nickname" />
       <el-table-column label="用户头像" align="center" prop="avatar">
         <template slot-scope="scope">
@@ -66,16 +67,16 @@
       <el-table-column label="标签名称" align="center" prop="tag" />
       <el-table-column label="所属销售名称" align="center" prop="companyUserNickName" width="120px"/>
       <el-table-column label="备注" align="center" prop="remark" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['his:user:darkRoomList']"
-          >启用</el-button>
-        </template>
-      </el-table-column>
+<!--      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
+<!--        <template slot-scope="scope">-->
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            @click="handleUpdate(scope.row)"-->
+<!--            v-hasPermi="['his:user:darkRoomList']"-->
+<!--          >启用</el-button>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
     </el-table>
 
     <pagination
@@ -114,7 +115,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         keyword: null,
-        isBlack: true
+        status: 0
       },
     };
   },

+ 16 - 3
src/views/user/transfer/index.vue

@@ -163,6 +163,11 @@
         <el-form-item label="转移矩阵" prop="customerIds">
           <el-table :data="form.customerList" border>
             <el-table-column label="客户" align="center" prop="userName" />
+            <el-table-column label="项目" align="center" prop="projectId">
+              <template slot-scope="scope">
+                <el-tag v-if="scope.row.projectId">{{ getProjectLabel(scope.row.projectId) }}</el-tag>
+              </template>
+            </el-table-column>
             <el-table-column label="转移前销售" align="center" prop="beforeCompanyUserName" />
             <el-table-column label="转移后销售" align="center" prop="afterCompanyUserName" />
           </el-table>
@@ -182,7 +187,7 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item label="审批意见" prop="approvalRemark">
-          <el-input v-model="form.approvalRemark" type="textarea" placeholder="请输入内容"  disabled="disabled"/>
+          <el-input v-model="form.approvalRemark" type="textarea" placeholder="请输入内容"  :disabled="viewMode"/>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -281,7 +286,8 @@ export default {
         approvalRemark: [
           { required: true, message: "审批意见不能为空!", trigger: "blur" }
         ]
-      }
+      },
+      projectOptions: [],
     };
   },
   created() {
@@ -291,6 +297,9 @@ export default {
     getDicts('transfer_approval_status').then(response => {
       this.approvalStatusList = response.data;
     })
+    this.getDicts("sys_course_project").then(response => {
+      this.projectOptions = response.data;
+    });
     getAllUserListLimit().then(res=>{
       if(res.code === 200) {
         this.companyUserList = res.data
@@ -432,7 +441,11 @@ export default {
         }).then(response => {
           this.download(response.msg);
         }).catch(function() {});
-    }
+    },
+    /** 获取项目对应名称 */
+    getProjectLabel(projectId) {
+      return this.projectOptions.find(item => parseInt(item.dictValue) === projectId)?.dictLabel;
+    },
   }
 };
 </script>