10 次代码提交 7d3ff38cb0 ... 441d7da626

作者 SHA1 备注 提交日期
  Long 441d7da626 Merge branch 'master' into 会员关联项目 1 天之前
  Long 6b1e041f59 Merge branch 'master' into 会员关联项目 1 周之前
  yfh 0650c0e164 撤销 1 周之前
  yfh 69ded9ad07 增加2个搜索栏 1 周之前
  yfh d2f915d7f4 Merge remote-tracking branch 'origin/会员关联项目' into 会员关联项目 2 周之前
  Long 05c112e018 会员关联项目 2 周之前
  yfh ded9dbf6e6 调整会员管理,项目会员管理分离 2 周之前
  Long 7c38d98a4e Merge branch 'master' into 会员关联项目 2 周之前
  Long fae2278d56 会员关联项目 2 周之前
  Long a3ab27ceac 会员关联项目 3 周之前

+ 7 - 0
src/api/store/user.js

@@ -8,6 +8,13 @@ export function listUser(query) {
     params: query
   })
 }
+export function listUserByProject(query) {
+  return request({
+    url: '/store/user/listProject',
+    method: 'get',
+    params: query
+  })
+}
 
 // 查询用户详细
 export function getUser(userId) {

+ 73 - 212
src/views/store/user/index.vue

@@ -24,6 +24,7 @@
       </el-form-item>
       <el-form-item label="手机号码" prop="phone">
         <el-input
+
           v-model="queryParams.phone"
           placeholder="请输入手机号码"
           clearable
@@ -60,46 +61,17 @@
           @keyup.enter.native="handleQuery"
         />
       </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-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>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -108,16 +80,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"
@@ -148,31 +110,31 @@
       </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="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="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>
+        <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" />
@@ -198,7 +160,7 @@
             v-hasPermi="['store:user:edit']"
           >修改</el-button>
 
-           <el-button
+          <el-button
             size="mini"
             type="text"
             @click="handleShow(scope.row)"
@@ -281,27 +243,27 @@
         <el-form-item label="推线编码" prop="registerCode">
           <el-input v-model="form.registerCode" placeholder="请输入推线编码" />
         </el-form-item>
-          <el-form-item label="渠道来源" prop="source">
+        <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"
-                  />
+              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"
-                  />
+              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">
@@ -325,39 +287,10 @@
       </div>
     </el-dialog>
 
-       <el-drawer size="75%" :title="show.title" :visible.sync="show.open">
-         <store-user-details ref="storeUserDetails"></store-user-details>
+    <el-drawer size="75%" :title="show.title" :visible.sync="show.open">
+      <store-user-details ref="storeUserDetails"></store-user-details>
     </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>
 
@@ -445,23 +378,7 @@ export default {
         ],
 
       },
-      // 更换会员归属对话框
-      changeCompanyUserOpen: false,
-      // 更换会员归属表单
-      changeCompanyUserForm: {
-        companyId: null,
-        companyUserId: null,
-        userIds: []
-      },
-      // 更换会员归属表单校验
-      changeCompanyUserRules: {
-        companyId: [
-          { required: true, message: '请选择公司', trigger: 'change' }
-        ],
-        companyUserId: [
-          { required: true, message: '请选择销售', trigger: 'change' }
-        ]
-      },
+
       // 销售选项
       companyUserOptions: [],
       companyOptions: []
@@ -580,7 +497,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.userId)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -631,54 +548,39 @@ export default {
     handleDelete(row) {
       const userIds = row.userId || this.ids;
       this.$confirm('是否确认删除用户编号为"' + userIds + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delUser(userIds);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(function() {});
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delUser(userIds);
+      }).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() {});
+      this.$confirm('是否确认导出所有用户数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportUser(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      }).catch(function () {
+      });
     }
-    ,handleShow(row){
-      var that=this;
-      that.show.open=true;
+    , handleShow(row) {
+      var that = this;
+      that.show.open = true;
       setTimeout(() => {
-          that.$refs.storeUserDetails.getDetails(row.userId);
+        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) {
@@ -687,21 +589,13 @@ export default {
         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 => {
+        getCompanyUserList({companyId: companyId}).then(response => {
           if (response.code === 200) {
             this.companyUserOptions = response.data;
           } else {
@@ -716,39 +610,6 @@ export default {
         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.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>

+ 729 - 0
src/views/store/user/indexproject.vue

@@ -0,0 +1,729 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+
+      <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-input
+          v-model="queryParams.companyName"
+          placeholder="请输入所属公司"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="所属销售" prop="companyUserNickName">
+        <el-input
+          v-model="queryParams.companyUserNickName"
+          placeholder="请输入所属销售"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </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" fixed="right" 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">
+         <store-user-details ref="storeUserDetails"></store-user-details>
+    </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, delUser, addUser, updateUser, exportUser } from "@/api/store/user";
+import { getCompanyUserList, changeCompanyUser, getCompanyList } from '@/api/company/companyUser';
+import storeUserDetails from './components/storeUserDetails.vue';
+export default {
+  components: { storeUserDetails },
+  name: "User",
+  data() {
+    return {
+      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,
+        companyName: 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();
+  },
+  methods: {
+    /** 查询用户列表 */
+    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.companyName = null;
+      this.queryParams.companyUserNickName = 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 userIds = row.userId || this.ids;
+      this.$confirm('是否确认删除用户编号为"' + userIds + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delUser(userIds);
+        }).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>

+ 2 - 1
src/views/user/darkRoom/index.vue

@@ -32,6 +32,7 @@
     <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">
@@ -122,7 +123,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         keyword: null,
-        isBlack: true
+        status: 0
       },
     };
   },

+ 15 - 2
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>
@@ -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>