Quellcode durchsuchen

销售端增加跟进会员功能

cgp vor 1 Woche
Ursprung
Commit
c8137d9bc6

+ 65 - 0
src/api/qw/companyUserFollowUpMembers.js

@@ -0,0 +1,65 @@
+import request from '@/utils/request'
+// 查询销售跟进列表
+export function selectCompanyUserMemberSalesVOList(query) {
+  return request({
+    url: '/qw/memberSales/companyUserFollowUpMembers',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询跟进会员任务处理记录
+export function selectCompanyUserTaskVoListHandleRecords(query) {
+  return request({
+    url: '/qw/memberSales/selectCompanyUserTaskVoListHandleRecords',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户历史订单列表
+export function userHistoryOrderList(query) {
+  return request({
+    url: '/qw/memberSales/storeOrder/userHistoryOrderList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+// 查询处理任务列表
+export function taskList(query) {
+  return request({
+    url: '/qw/memberSales/taskList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 提交销售处理任务
+export function submitCompanyTask(data) {
+  return request({
+    url: '/qw/memberSales/submitCompanyTask',
+    method: 'put',
+    data: data
+  })
+}
+
+// 获取会员订单列表
+export function getNoReceiveOrderList(id) {
+  return request({
+    url: '/qw/memberSales/getNoReceiveOrderList/' + id,
+    method: 'get'
+  })
+}
+
+
+// 根据用户Id查询用户采集详情
+export function getCollectionByUserId(userId) {
+  return request({
+    url: '/qw/memberSales/getCollectionByUserId/' + userId,
+    method: 'get'
+  })
+}

+ 13 - 1
src/router/index.js

@@ -247,7 +247,19 @@ export const constantRoutes = [
       }
     ]
   },
-
+  {
+    path: '/qw/companyUserFollowUpMembers',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'unprocessed',
+        component: () => import('@/views/qw/companyUserFollowUpMembers/unprocessed'),
+        name: 'Unprocessed',
+        meta: { title: '未处理任务', icon: 'edit' }
+      }
+    ]
+  },
   {
     path: '/watch/deviceInfo/details',
     component: Layout,

+ 552 - 0
src/views/qw/companyUserFollowUpMembers/index.vue

@@ -0,0 +1,552 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="客户名称" prop="userName">
+        <el-input
+          v-model="queryParams.userName"
+          placeholder="请输入客户名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="真实姓名" prop="realName">
+        <el-input
+          v-model="queryParams.realName"
+          placeholder="请输入客户真实姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="医生姓名" prop="doctorName">
+        <el-input
+          v-model="queryParams.doctorName"
+          placeholder="请输入医生姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="会员ID" prop="exId">
+        <el-input
+          v-model="queryParams.exId"
+          placeholder="请输入企微会员ID"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" 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-table border v-loading="loading" :data="memberSalesList" @selection-change="handleSelectionChange">
+      <el-table-column label="企微会员ID" align="center" prop="exId" />
+      <el-table-column label="客户名称" align="center" prop="userName" />
+      <el-table-column label="真实姓名" align="center" prop="realName" />
+      <el-table-column label="客户电话" align="center" prop="phone" />
+      <el-table-column label="待处理条数" align="center" prop="unprocessed" />
+      <el-table-column label="医生名称" align="center" prop="doctorName" />
+      <el-table-column label="创建时间" align="center" prop="createTime" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="selectUnprocessed(scope.row)"
+          >未处理</el-button>
+          <!-- 处理记录按钮 -->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-finished"
+            @click="getHandleRecordsList(scope.row)"
+          >处理记录</el-button>
+          <!-- 历史订单按钮 -->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-more"
+            @click="handleViewHistoryOrders(scope.row)"
+          >历史订单</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="处理记录"
+      :visible.sync="recordsDialogVisible"
+      width="45%"
+      append-to-body
+    >
+      <div class="records-dialog">
+        <!-- 搜索区域 -->
+        <el-form :inline="true" :model="recordsQueryParams" class="demo-form-inline">
+          <el-form-item label="处理方式">
+            <el-select v-model="recordsQueryParams.handleType" placeholder="请选择处理方式" clearable>
+              <el-option label="签收时提醒" :value="1" />
+              <el-option label="设置提醒时间" :value="2" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="loadHandleRecords">搜索</el-button>
+            <el-button @click="resetRecordsQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+
+        <!-- 处理记录表格 -->
+        <el-table
+          v-loading="recordsLoading"
+          :data="recordsList"
+          border
+          style="width: 100%; margin-top: 15px"
+        >
+          <el-table-column label="处理方式" align="center" prop="handleType" width="120">
+            <template slot-scope="scope">
+              <span>{{ formatHandleType(scope.row.handleType) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="订单号" align="center" prop="orderCode" width="180">
+            <template slot-scope="scope">
+              <span>{{ scope.row.orderCode || '--' }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="提醒天数" align="center" prop="sendDays" width="100">
+            <template slot-scope="scope">
+              <span>{{ scope.row.sendDays ? scope.row.sendDays + '天' : '--' }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="处理结果" align="center" prop="remark" />
+          <el-table-column label="处理人" align="center" prop="handlePersonType" >
+            <template slot-scope="scope">
+              <span v-if="scope.row.handlePersonType === 2">
+                销售: {{ scope.row.companyUserName }}
+              </span>
+              <span v-else>
+                医生: {{ scope.row.doctorName }}
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column label="处理时间" align="center" prop="createTime" width="180" />
+        </el-table>
+
+        <!-- 分页组件 -->
+        <pagination
+          v-show="recordsTotal>0"
+          :total="recordsTotal"
+          :page.sync="recordsQueryParams.pageNum"
+          :limit.sync="recordsQueryParams.pageSize"
+          @pagination="handleRecordsPagination"
+        />
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="recordsDialogVisible = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 历史订单弹窗 -->
+    <el-dialog
+      title="历史订单"
+      :visible.sync="historyDialogVisible"
+      width="45%"
+      append-to-body
+    >
+      <div class="history-dialog">
+        <!-- 搜索区域 -->
+        <el-form :inline="true" :model="historyQueryParams" class="demo-form-inline">
+          <el-form-item label="订单号">
+            <el-input
+              v-model="historyQueryParams.orderCode"
+              placeholder="请输入订单号"
+              clearable
+              style="width: 200px;"
+            />
+          </el-form-item>
+
+          <!-- 新增:商品名称搜索 -->
+          <el-form-item label="商品名称">
+            <el-input
+              v-model="historyQueryParams.packageName"
+            placeholder="请输入商品名称"
+            clearable
+            style="width: 200px;"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="loadHistoryOrders">搜索</el-button>
+            <el-button @click="resetHistoryQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+
+        <!-- 历史订单表格 -->
+        <el-table
+          v-loading="historyLoading"
+          :data="historyList"
+          border
+          style="width: 100%; margin-top: 15px"
+        >
+          <el-table-column label="订单号" align="center" prop="orderCode" width="180" />
+          <el-table-column label="商品名称" align="center" prop="packageName" width="200" />
+          <el-table-column label="创建时间" align="center" prop="createTime" width="180" />
+          <el-table-column label="状态" align="center" prop="status" width="180" >
+            <template slot-scope="scope">
+              <span>{{ formatOrderStatus(scope.row.status) }}</span>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <!-- 分页组件 -->
+        <pagination
+          v-show="historyTotal>0"
+          :total="historyTotal"
+          :page.sync="historyQueryParams.pageNum"
+          :limit.sync="historyQueryParams.pageSize"
+          @pagination="handleHistoryPagination"
+        />
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="historyDialogVisible = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import { selectCompanyUserMemberSalesVOList,selectCompanyUserTaskVoListHandleRecords, userHistoryOrderList} from "@/api/qw/companyUserFollowUpMembers";
+export default {
+  name: "MemberSales",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 医生会员搭销表格数据
+      memberSalesList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        exId: null, // 企微会员ID
+        fsUserId: null,
+        companyUserId: null,
+        companyId: null,
+        doctorId: null,
+        userName: null, // 客户名称
+        doctorName: null, // 医生姓名
+        realName: null // 客户真实姓名
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {},
+
+      // --- 处理记录相关数据 ---
+      recordsDialogVisible: false,
+      recordsLoading: false,
+      recordsList: [],
+      recordsTotal: 0,
+      recordsQueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        doctorMemberSalesId: null, // 用于查询,由打开弹窗时注入
+        handleType: null
+      },
+
+      // --- 历史订单相关数据 ---
+      historyDialogVisible: false,
+      historyLoading: false,
+      historyList: [],
+      historyTotal: 0,
+      historyQueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userId: null, // 用于查询,由打开弹窗时注入
+        orderCode: null,
+        packageName: ''
+      },
+
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    selectUnprocessed(row){
+      const query = {
+        id: row.id,
+        status: 0,
+        userName: row.userName,
+        phone: row.phone,
+        fsUserId: row.fsUserId,
+        doctorName: row.doctorName,
+        baseInfo: row.baseInfo,
+      }
+      // 使用 params 传递参数
+      this.$router.push({
+        path: `/qw/companyUserFollowUpMembers/unprocessed`,
+        query
+      });
+    },
+    /** 查询医生会员搭销列表 */
+    getList() {
+      this.loading = true;
+      selectCompanyUserMemberSalesVOList(this.queryParams).then(response => {
+        this.memberSalesList = response.data.list;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        exId: null,
+        fsUserId: null,
+        createTime: null,
+        updateTime: null,
+        companyUserId: null,
+        companyId: null,
+        doctorId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      // 重置整个表单
+      this.resetForm("queryForm");
+      // 触发一次搜索,以刷新列表(此时查询参数已为空)
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+
+    /**
+     * 查询跟进会员任务处理记录 - 打开弹窗入口点
+     */
+    getHandleRecordsList(row) {
+      // 初始化查询参数,注入必要的ID
+      this.recordsQueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        doctorMemberSalesId: row.id, // 使用当前行的 id 作为 doctorMemberSalesId
+        handleType: null
+      };
+      // 打开弹窗
+      this.recordsDialogVisible = true;
+      // 加载数据
+      this.loadHandleRecords();
+    },
+
+    /**
+     * 加载处理记录数据
+     */
+    loadHandleRecords() {
+      this.recordsLoading = true;
+      selectCompanyUserTaskVoListHandleRecords(this.recordsQueryParams)
+        .then(response => {
+          this.recordsList = response.rows || [];
+          this.recordsTotal = response.total || 0;
+        })
+        .catch(error => {
+          console.error('获取处理记录失败:', error);
+          this.$message.error('获取处理记录失败');
+          this.recordsList = [];
+          this.recordsTotal = 0;
+        })
+        .finally(() => {
+          this.recordsLoading = false;
+        });
+    },
+
+    /**
+     * 处理记录分页
+     */
+    handleRecordsPagination() {
+      this.loadHandleRecords();
+    },
+
+    /**
+     * 重置处理记录查询条件
+     */
+    resetRecordsQuery() {
+      const doctorMemberSalesId = this.recordsQueryParams.doctorMemberSalesId;
+      this.recordsQueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        doctorMemberSalesId: doctorMemberSalesId,
+        handleType: null
+      };
+      // 重置后重新查询
+      this.loadHandleRecords();
+    },
+
+    // --- 历史订单相关方法 ---
+
+    /**
+     * 查看历史订单 - 打开弹窗入口点
+     */
+    handleViewHistoryOrders(row) {
+      // 初始化查询参数
+      this.historyQueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        userId: row.fsUserId,
+        orderCode: null,
+        packageName: ''
+      };
+      // 打开弹窗
+      this.historyDialogVisible = true;
+      // 加载数据
+      this.loadHistoryOrders();
+    },
+
+    /**
+     * 加载历史订单数据
+     */
+    loadHistoryOrders() {
+      this.historyLoading = true;
+      userHistoryOrderList(this.historyQueryParams)
+        .then(response => {
+          this.historyList = response.rows || [];
+          this.historyTotal = response.total || 0;
+        })
+        .catch(error => {
+          console.error('获取历史订单失败:', error);
+          this.$message.error('获取历史订单失败');
+          this.historyList = [];
+          this.historyTotal = 0;
+        })
+        .finally(() => {
+          this.historyLoading = false;
+        });
+    },
+
+    /**
+     * 历史订单分页
+     */
+    handleHistoryPagination() {
+      this.loadHistoryOrders();
+    },
+
+    /**
+     * 重置历史订单查询条件
+     */
+    resetHistoryQuery() {
+      const userId = this.historyQueryParams.userId; // 保存当前 userId
+      this.historyQueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        userId: userId, // 重置时恢复 userId
+        orderCode: null,
+        packageName: '' // 重置时也设置为 ''
+      };
+      // 重置后重新查询
+      this.loadHistoryOrders();
+    },
+
+    /**
+     * 格式化订单状态数字为文本
+     */
+    formatOrderStatus(status) {
+      switch (status) {
+        case -3:
+          return '已取消';
+        case -2:
+          return '退货成功';
+        case -1:
+          return '申请退款';
+        case 1:
+          return '待支付';
+        case 2:
+          return '待发货';
+        case 3:
+          return '待收货';
+        case 4:
+          return '待评价';
+        default:
+          return '未知状态';
+      }
+    },
+
+    /**
+     * 格式化处理方式
+     */
+    formatHandleType(handleType) {
+      switch (handleType) {
+        case 1:
+          return '签收时提醒';
+        case 2:
+          return '设置提醒时间';
+        default:
+          return '未知';
+      }
+    },
+
+  }
+};
+</script>
+
+<style scoped>
+/*隐藏单选框的文本 */
+.custom-radio ::v-deep .el-radio__label {
+  display: none;
+}
+
+/* 处理记录弹窗样式 */
+.records-dialog {
+  min-height: 300px;
+}
+
+/* 历史订单弹窗样式 */
+.history-dialog {
+  min-height: 300px;
+}
+
+/* 表单内联样式 */
+.demo-form-inline {
+  margin-bottom: 0;
+}
+</style>

+ 628 - 0
src/views/qw/companyUserFollowUpMembers/unprocessed.vue

@@ -0,0 +1,628 @@
+<template>
+  <div class="app-container">
+    <div style="margin-bottom: 10px">
+      <el-card>
+        <!-- 第一行 - 基础信息 (4列) -->
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <div class="info-item">
+              <span class="info-label">会员姓名:</span>
+              <span class="info-value">{{ userName || '-' }}</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="info-item">
+              <span class="info-label">真实姓名:</span>
+              <span class="info-value">{{ formData.userName || '-' }}</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="info-item">
+              <span class="info-label">客户年龄:</span>
+              <span class="info-value">{{ formData.age || '-' }}</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="info-item">
+              <span class="info-label">性别:</span>
+              <span class="info-value">{{ displaySex }}</span>
+            </div>
+          </el-col>
+        </el-row>
+
+        <!-- 第二行 - 基础信息 (4列) -->
+        <el-row :gutter="20" style="margin-top: 10px;">
+          <el-col :span="6">
+            <div class="info-item">
+              <span class="info-label">会员电话:</span>
+              <span class="info-value">{{ phone || '-' }}</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="info-item">
+              <span class="info-label">过敏情况:</span>
+              <span class="info-value">{{ formData.allergy || '-' }}</span>
+            </div>
+          </el-col>
+          <!-- 如果还有其他基础信息可以放在这里,或者留空 -->
+          <el-col :span="6">
+            <div class="info-item">
+              <span class="info-label">推送销售:</span>
+              <span class="info-value">{{ doctorName || '-' }}</span>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div class="info-item">
+
+            </div>
+          </el-col>
+        </el-row>
+
+        <!-- 第三行 - 备注 -->
+        <el-row :gutter="20" style="margin-top: 10px;">
+          <el-col :span="24">
+            <div class="info-item">
+              <span class="info-label">备注:</span>
+              <span class="info-value">{{ formData.remark || '-' }}</span>
+            </div>
+          </el-col>
+        </el-row>
+
+        <!-- 第四行 - 采集信息 -->
+        <el-row :gutter="20" style="margin-top: 10px;">
+          <el-col :span="24">
+            <h4>采集信息:</h4>
+            <div v-if="formData.answers && formData.answers.length > 0">
+              <!-- 外层循环,每次处理3个问题 -->
+              <el-row :gutter="20" style="margin-top: 10px;" v-for="(answerGroup, groupIndex) in chunkedAnswers" :key="groupIndex">
+                <!-- 内层循环,处理当前组里的每一个问题 -->
+                <el-col :span="8" v-for="(answer, answerIndex) in answerGroup" :key="answerIndex" style="margin-bottom: 15px;">
+                  <!-- 使用 info-item 样式保持一致性 -->
+                  <div class="info-item">
+                    <span class="info-label">{{ answer.title }}</span>
+                    <span class="info-value">
+                       {{
+                        answer.value && answer.value.length > 0
+                          ? answer.value.map(v => {
+                            const opt = answer.options.find(o => o.value === v);
+                            return opt ? opt.name : '';
+                          }).join(', ')
+                          : '未选择'
+                      }}
+                     </span>
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+            <div v-else>
+              <p>暂无采集信息</p>
+            </div>
+          </el-col>
+        </el-row>
+
+      </el-card>
+    </div>
+
+    <!-- 原有的列表和弹窗部分保持不变 -->
+    <el-table border v-loading="loading" :data="unprocessedList" @selection-change="handleSelectionChange">
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="创建时间" align="center" prop="createTime" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-position"
+            @click="handleUpdate(scope.row)"
+          >处理
+          </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="45%"
+      append-to-body
+    >
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <!-- 处理类型选择 -->
+        <el-form-item label="处理方式" prop="handleType">
+          <el-radio-group v-model="form.handleType" @change="onProcessTypeChange">
+            <el-radio :label="1">签收时提醒</el-radio>
+            <el-radio :label="2">设置提醒时间</el-radio>
+          </el-radio-group>
+        </el-form-item>
+
+        <!-- 签收模式:订单选择 -->
+        <div v-if="form.handleType == 1">
+          <el-form-item label="订单号搜索">
+            <el-input
+              v-model="orderSearchKeyword"
+              placeholder="请输入订单号"
+              clearable
+              @keyup.enter.native="searchOrders"
+              @clear="searchOrders"
+              style="width: 300px"
+            >
+              <el-button slot="append" icon="el-icon-search" @click="searchOrders" />
+            </el-input>
+          </el-form-item>
+
+          <!-- 选择订单 -->
+          <el-form-item label="选择订单">
+            <el-table
+              :data="orderList"
+              height="200"
+              border
+              style="width: 100%"
+              highlight-current-row
+              @row-click="(row) => form.selectedOrderNo = row.orderCode"
+              :row-key="row => row.orderId"
+            >
+              <el-table-column label="选择" width="60" align="center">
+                <template slot-scope="scope">
+                  <el-radio
+                    v-model="form.selectedOrderNo"
+                    :label="scope.row.orderCode"
+                    :key="scope.row.orderCode"
+                    class-name="custom-radio"
+                  >
+                    <span></span>
+                  </el-radio>
+                </template>
+              </el-table-column>
+              <el-table-column prop="orderCode" label="订单号" width="180" />
+              <el-table-column prop="createTime" label="创建时间" width="160" />
+              <el-table-column prop="packageName" label="商品" width="160" />
+              <el-table-column prop="status" label="状态" width="100">
+                <template slot-scope="scope">
+                  <span>{{ formatOrderStatus(scope.row.status) }}</span>
+                </template>
+              </el-table-column>
+            </el-table>
+            <!-- 添加加载状态指示 -->
+            <div v-if="orderLoading" style="text-align: center; padding: 10px;">
+              <i class="el-icon-loading"></i> 加载中...
+            </div>
+            <!-- 显示无数据 -->
+            <div v-if="!orderList.length && orderSearched && !orderLoading" style="text-align: center; color: #999; margin-top: 10px;">
+              {{ orderSearchKeyword ? '未找到相关订单' : '暂无订单数据' }}
+            </div>
+          </el-form-item>
+        </div>
+
+        <!-- 设置提醒时间模式 -->
+        <el-form-item
+          v-if="form.handleType == 2"
+          label="提醒天数"
+          prop="sendDays"
+        >
+          <el-input-number
+            v-model="form.sendDays"
+            :min="1"
+            :max="99"
+            placeholder="请输入天数"
+            style="width: 100%"
+          />
+        </el-form-item>
+
+        <!-- 公共:处理结果 -->
+        <el-form-item label="处理结果" prop="remark">
+          <el-input
+            v-model="form.remark"
+            type="textarea"
+            :rows="4"
+            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>
+
+  </div>
+</template>
+
+<script>
+import {
+  taskList,
+  submitCompanyTask,
+  getNoReceiveOrderList,
+  getCollectionByUserId as getCollectionInfo} from "@/api/qw/companyUserFollowUpMembers";
+export default {
+  name: "unprocessed",
+  data() {
+    return {
+      globalVarDoctorMemberSalesId: null,
+      userName: null,
+      doctorName: null,
+      baseInfo: null,
+      phone: null,
+      fsUserId: null, // 保存用户ID
+      formData: {
+        id: null,
+        answers: [],
+        userName: '',
+        userPhoneFour: '',
+        sex: null,
+        allergy: '',
+        remark: ''
+      },
+
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 医生会员搭销表格数据
+      unprocessedList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        status: null,
+      },
+      // 表单参数
+      form: {
+        id: null,
+        handleType: 1,
+        sendDays: null,
+        remark: '',
+        selectedOrderNo: '',
+        doctorMemberSalesId: null,
+        companyUserId: null
+      },
+
+      // 订单相关
+      orderSearchKeyword: '',
+      orderList: [],
+      selectedOrder: null,
+      orderSearched: false,
+      orderLoading: false,
+
+      // 表单校验规则
+      rules: {
+        handleType: [{ required: true, message: '请选择处理方式', trigger: 'change' }],
+        sendDays: [
+          { required: true, message: '请输入提醒天数', trigger: 'blur' },
+          { type: 'number', min: 1, max: 99, message: '天数必须在 1 到 99 之间', trigger: 'blur' }
+        ],
+        remark: [{ required: true, message: '请输入处理结果', trigger: 'blur' }]
+      }
+    };
+  },
+  computed: {
+    // 将 answers 数组按指定大小(这里是3)进行分块
+    chunkedAnswers() {
+      const answers = this.formData.answers;
+      if (!answers || !Array.isArray(answers)) {
+        return [];
+      }
+      const chunkSize = 3;
+      const chunks = [];
+      for (let i = 0; i < answers.length; i += chunkSize) {
+        chunks.push(answers.slice(i, i + chunkSize));
+      }
+      return chunks;
+    },
+    // 新增计算属性,用于处理性别显示,优先取 formData.sex,否则取 formData.userPhoneFour
+    displaySex() {
+      // 优先检查 formData.sex
+      if (this.formData.sex !== undefined && this.formData.sex !== null) {
+        if (this.formData.sex === 0) {
+          return '女';
+        } else if (this.formData.sex === 1) {
+          return '男';
+        }
+        // 如果 sex 不是 0 或 1,则可能是错误数据,继续检查 userPhoneFour
+      }
+
+      // 如果 formData.sex 无效,再检查 formData.userPhoneFour
+      const phoneFourValue = this.formData.userPhoneFour;
+      if (phoneFourValue !== undefined && phoneFourValue !== null) {
+        if (phoneFourValue === 0) {
+          return '女';
+        } else if (phoneFourValue === 1) {
+          return '男';
+        }
+        // 如果 userPhoneFour 也不是 0 或 1,则也是无效数据
+      }
+
+      // 两者都无效,返回 '-'
+      return '-';
+    }
+  },
+  created() {
+    this.queryParams.status = this.$route.query.status;
+    this.queryParams.doctorMemberSalesId = this.$route.query.id;
+    this.globalVarDoctorMemberSalesId = this.$route.query.id;
+    this.userName = this.$route.query.userName;
+    this.phone = this.$route.query.phone;
+    this.fsUserId = this.$route.query.fsUserId;
+    this.doctorName = this.$route.query.doctorName;
+    this.baseInfo = this.$route.query.baseInfo;
+    this.fetchCollectionInfo();
+
+    this.getList();
+  },
+  methods: {
+    fetchCollectionInfo() {
+      if (!this.fsUserId) {
+        console.warn('fsUserId 未提供,无法获取采集信息');
+        this.loading = false; // 如果没有 ID,也停止加载
+        return;
+      }
+      getCollectionInfo(this.fsUserId).then(response => {
+        if (response.data) {
+          this.formData = response.data;
+        } else {
+          console.info('未找到该用户的采集信息');
+        }
+      }).catch(error => {
+        console.error('获取采集信息失败:', error);
+      }).finally(() => {
+      });
+    },
+
+    /** 查询医生会员搭销列表 */
+    getList() {
+      this.loading = true;
+      taskList(this.queryParams).then(response => {
+        this.unprocessedList = response.data.list;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        handleType: 1,
+        sendDays: null,
+        remark: '',
+        selectedOrderNo: '',
+        doctorMemberSalesId: null,
+        companyUserId: null
+      };
+      this.orderSearchKeyword = '';
+      this.orderList = [];
+      this.orderSearched = false;
+      this.orderLoading = false;
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除医生会员搭销编号为"' + ids + '"的数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        // return delMemberSales(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有医生会员搭销数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        this.exportLoading = true;
+        // return exportMemberSales(queryParams);
+      }).then(response => {
+        // this.download(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {
+      });
+    },
+    /** 打开修改对话框 */
+    handleUpdate(row) {
+      this.form = {
+        id: row.id,
+        handleType: 1,
+        sendDays: null,
+        remark: '',
+        selectedOrderNo: '',
+        doctorMemberSalesId: row.doctorMemberSalesId,
+        companyUserId: row.companyUserId
+      };
+
+      this.orderSearchKeyword = '';
+      this.orderList = [];
+      this.selectedOrder = null;
+      this.orderSearched = false;
+      this.orderLoading = false;
+      // 默认加载该用户的未签收的订单
+      this.searchOrders();
+      this.open = true;
+      this.title = "处理医生会员搭销";
+    },
+    /** 切换处理类型时重置相关字段 */
+    onProcessTypeChange(val) {
+      if (val == 1) {
+        this.form.sendDays = null;
+        this.form.selectedOrderNo = '';
+        // 切换到签收时,重新加载订单列表
+        this.searchOrders();
+      } else if (val == 2) {
+        this.form.selectedOrderNo = '';
+      }
+    },
+
+    /** 搜索订单*/
+    searchOrders() {
+      // 构建搜索参数
+      const keyword = this.orderSearchKeyword.trim();
+      // 设置加载状态
+      this.orderLoading = true;
+      this.orderSearched = true;
+      // 调用API
+      getNoReceiveOrderList(this.fsUserId)
+        .then(response => {
+          let orders = response.data || [];
+
+          if (keyword) {
+            orders = orders.filter(item => item.orderCode && item.orderCode.includes(keyword));
+          }
+
+          // 更新订单列表
+          this.orderList = orders;
+        })
+        .catch(error => {
+          console.error('获取订单列表失败:', error);
+          this.$message.error('获取订单列表失败,请稍后重试');
+          this.orderList = [];
+        })
+        .finally(() => {
+          this.orderLoading = false;
+        });
+    },
+    /**
+     * 格式化订单状态数字为文本
+     */
+    formatOrderStatus(status) {
+      switch (status) {
+        case -3:
+          return '已取消';
+        case -2:
+          return '退货成功';
+        case -1:
+          return '申请退款';
+        case 1:
+          return '待支付';
+        case 2:
+          return '待发货';
+        case 3:
+          return '待收货';
+        case 4:
+          return '待评价';
+        default:
+          return '未知状态';
+      }
+    },
+    /** 提交处理 */
+    submitForm() {
+      this.$refs.form.validate(valid => {
+        if (!valid) return;
+
+        const submitData = {
+          id: this.form.id,
+          handleType: Number(this.form.handleType),
+          remark: this.form.remark,
+          doctorMemberSalesId: this.form.doctorMemberSalesId,
+          companyUserId: this.form.companyUserId
+        };
+
+        if (submitData.handleType === 1) {
+          if (!this.form.selectedOrderNo) {
+            this.$message.warning('请先选择一条订单');
+            return;
+          }
+          submitData.orderCode = this.form.selectedOrderNo;
+        } else if (submitData.handleType === 2) {
+          if (this.form.sendDays === null || this.form.sendDays === undefined) {
+            this.$message.warning('请先填写提醒天数');
+            return;
+          }
+          submitData.sendDays = Number(this.form.sendDays);
+        }
+        submitCompanyTask(submitData).then(() => {
+          this.$message.success('提交成功');
+          this.open = false;
+          this.getList();
+        }).catch(() => {
+          // this.$message.error('提交失败');
+        });
+      });
+    },
+  }
+};
+</script>
+
+<style scoped>
+/** 信息卡片样式*/
+.info-item {
+  display: flex;
+  flex-direction: row;
+  align-items: flex-start;
+}
+
+.info-label {
+  font-weight: bold;
+  font-size: 14px;
+  color: #606266;
+  margin-right: 8px;
+  flex-shrink: 0;
+  line-height: 1.5;
+}
+
+.info-value {
+  font-size: 14px;
+  color: #303133;
+  flex-grow: 1;
+  line-height: 1.5;
+}
+
+/*隐藏单选框的文本 */
+.custom-radio ::v-deep .el-radio__label {
+  display: none;
+}
+
+/* 表单内联样式 */
+.demo-form-inline {
+  margin-bottom: 0;
+}
+</style>