Kaynağa Gözat

fix:任务统计增加详情

刘恒 2 yıl önce
ebeveyn
işleme
b48142782c

+ 537 - 0
src/pages/copartner/index.vue

@@ -0,0 +1,537 @@
+<template>
+  <div class="quote">
+    <div class="quote-tree">
+      <div>
+        <a-tree
+          :tree-data="treeData"
+          :replaceFields="replaceFields"
+          :title="'1'"
+          @select="treeChoose"
+        />
+        <!-- <tree @getList="treeChoose"></tree> -->
+      </div>
+    </div>
+    <div class="back-line-main">
+      <div class="back-line-header">
+        <div class="back-line-header-title">
+          <h2>合伙人</h2>
+          <div>
+            <span>时间筛选</span>
+            <a-range-picker
+              v-model="formState.time"
+              @change="onChangeTime"
+              valueFormat="YYYY-MM-DD"
+            >
+              <a-icon slot="suffixIcon" type="calendar" />
+            </a-range-picker>
+            <a-radio-group
+              default-value="1"
+              button-style="solid"
+              v-model="formState.days"
+            >
+              <a-radio-button
+                :value="1"
+                @click="
+                  (formState.time = []),
+                    (formState.beginDate = ''),
+                    (formState.endDate = '')
+                "
+              >
+                当天
+              </a-radio-button>
+              <a-radio-button
+                :value="2"
+                @click="
+                  (formState.time = []),
+                    (formState.beginDate = ''),
+                    (formState.endDate = '')
+                "
+              >
+                近7天
+              </a-radio-button>
+              <a-radio-button
+                :value="3"
+                @click="
+                  (formState.time = []),
+                    (formState.beginDate = ''),
+                    (formState.endDate = '')
+                "
+              >
+                近30天
+              </a-radio-button>
+            </a-radio-group>
+          </div>
+        </div>
+      </div>
+      <div class="list">
+        <a-form layout="inline" :model="formState">
+          <a-form-item label="姓名" :labelCol="{ span: 5 }" :colon="false">
+            <a-input
+              placeholder="请输入姓名"
+              v-model="formState.name"
+              allowClear
+            ></a-input>
+          </a-form-item>
+          <a-form-item label="工号" :labelCol="{ span: 5 }" :colon="false">
+            <a-input
+              placeholder="请输入工号"
+              v-model="formState.userCode"
+              allowClear
+            ></a-input>
+          </a-form-item>
+          <a-form-item label="手机号" :labelCol="{ span: 5 }" :colon="false">
+            <a-input
+              placeholder="请输入手机号"
+              v-model="formState.phoneNumber"
+              allowClear
+            ></a-input>
+          </a-form-item>
+          <a-form-item label="" :labelCol="{ span: 5 }" :colon="false">
+          </a-form-item>
+          <a-form-item
+            label="             "
+            :labelCol="{ span: 5 }"
+            :colon="false"
+            class="form-item-search"
+          >
+            <a-button type="primary" @click="getList('')">查询</a-button>
+          </a-form-item>
+        </a-form>
+        <a-spin :spinning="loading">
+          <a-row class="personnel-message" type="flex" :gutter="16">
+            <a-col
+              v-for="item in list"
+              :key="item.deptId"
+              :class="item.comLevel ? 'agency' + item.comLevel : 'agency'"
+              :span="6"
+            >
+              <div>
+                <div class="user-icon">
+                  <img
+                    v-show="item.filePath"
+                    :src="process + item.filePath"
+                    alt=""
+                  />
+                  <img
+                    v-if="!item.filePath && item.sex == 'M'"
+                    src="../../assets/img/man.png"
+                    alt=""
+                  />
+                  <img
+                    v-if="!item.filePath && item.sex == 'F'"
+                    src="../../assets/img/woman.png"
+                    alt=""
+                  />
+                  <img
+                    v-if="!item.filePath && !item.sex"
+                    src="../../assets/img/man.png"
+                    alt=""
+                  />
+                  {{ item.userName }}
+                </div>
+
+                <p>归属:{{ item.deptName }}</p>
+
+                <!-- <p>
+                  <span>总保费:¥{{ item.totalIncome || 0 }}</span>
+                  <span>管理费:¥{{ item.deptManagementFee || 0 }}</span>
+                </p>
+                <p>
+                  <span>已提现:¥{{ item.withdrawn || 0 }}</span>
+                  <span>未提现:¥{{ item.notWithdrawn || 0 }}</span>
+                </p> -->
+              </div>
+            </a-col>
+          </a-row>
+        </a-spin>
+        <div class="page">
+          <a-pagination
+            v-model="pageInfo.pageNum"
+            :total="pageInfo.total"
+            show-less-items
+            show-size-changer
+            show-quick-jumper
+            :show-total="(total) => `共 ${total} 条数据`"
+            @change="pageChange"
+            @showSizeChange="pageChange"
+            :page-size.sync="pageInfo.pageSize"
+            :pageSizeOptions="['12', '24', '36', '48']"
+          />
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+              
+  <script>
+// import mixin from "../../minins/mixin";
+// import tree from "@/components/tree/tree";
+import moment from "moment";
+export default {
+  components: {
+    // tree,
+  },
+  //   mixins: [mixin],
+  data() {
+    return {
+      formState: {
+        days: undefined,
+        time: [moment().format("YYYY-MM-DD"), moment().format("YYYY-MM-DD")],
+        name: undefined,
+        userCode: undefined,
+        phoneNumber: undefined,
+        endDate: moment().format("YYYY-MM-DD"),
+        beginDate: moment().format("YYYY-MM-DD"),
+      },
+      labelCol: { span: 4 },
+      dataForm: {},
+      visible: false,
+      backLinePersonnel: {},
+      //   columns: columns,
+      companyList: [],
+      tableList: [],
+      pageInfo: {
+        pageNum: 1,
+        pageSize: 12,
+        total: 0,
+      },
+      list: [],
+      loading: false,
+      process: process.env.VUE_APP_API_BASE_URL,
+      treeData: [],
+      onLoadData: false,
+      replaceFields: {
+        children: "children",
+        title: "name",
+        key: "id",
+      },
+      deptId: "",
+    };
+  },
+  watch: {
+    "formState.days"() {
+      this.getList();
+    },
+  },
+  async mounted() {
+    console.log(13465);
+    await this.getTreeDeptUser();
+
+    // setTimeout(() => {
+    // }, 1000);
+  },
+  methods: {
+    getList() {
+      this.pageInfo.pageNum = 1;
+      this.pageInfo.pageSize = 12;
+      this.getAgencyList();
+    },
+    async getTreeDeptUser() {
+      this.onLoadData = true;
+
+      this.$API.wallet.getSysDeptTree({}).then((res) => {
+        if (res.data.code === 200) {
+          this.treeData = [...res.data.data];
+          this.deptId = res.data.data[0].id;
+          this.getAgencyList();
+        }
+      });
+    },
+    numberToChinese(num) {
+      const chineseNumbers = [
+        "一",
+        "二",
+        "三",
+        "四",
+        "五",
+        "六",
+        "七",
+        "八",
+        "九",
+      ];
+      return chineseNumbers[num - 1]; // 假设num是1到9的数字
+    },
+
+    treeChoose(id) {
+      this.pageInfo.pageNum = 1;
+      this.pageInfo.pageSize = 10;
+      this.deptId = id[0];
+      this.getList();
+    },
+
+    onChangeTime(val) {
+      // console.log(val);
+      this.formState.beginDate = val[0];
+      this.formState.endDate = val[1];
+      this.formState.days = undefined;
+      this.getList();
+    },
+    handleFinish() {
+      //
+    },
+    wholeHandleChange() {
+      this.getProvinceList(this.formState.whole);
+    },
+    provinceHandleChange() {
+      this.getCityList(this.formState.provinceId);
+    },
+    cityHandleChange() {
+      this.getAreaList(this.formState.cityId);
+    },
+    countyHandleChange() {
+      this.getStoreList(this.formState.countyId);
+    },
+
+    getAgencyList() {
+      this.loading = true;
+
+      this.$API.wallet
+        .getPartnerStatistics({
+          pageNum: this.pageInfo.pageNum,
+          pageSize: this.pageInfo.pageSize,
+          deptId: this.deptId,
+          ...this.formState,
+        })
+        .then((res) => {
+          if (res.data.code === 200) {
+            this.loading = false;
+            this.list = [...res.data.data.records];
+            this.pageInfo.total = res.data.data.total;
+          }
+        });
+    },
+    //分页事件
+    pageChange(page, pageSize) {
+      //   console.log(page, pageSize);
+      this.pageInfo.pageNum = page;
+      this.pageInfo.pageSize = pageSize;
+      this.getAgencyList();
+    },
+  },
+};
+</script>
+      <style lang='less' scoped>
+.quote {
+  display: flex;
+  > div:first-child {
+    width: 20%;
+    background: #fff;
+    margin-right: 15px;
+  }
+  .quote-tree {
+    padding: 15px;
+    box-sizing: border-box;
+    //
+  }
+}
+.back-line-main {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  .back-line-header {
+    padding: 15px;
+    box-sizing: border-box;
+    background: #fff;
+    .back-line-header-title {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding-bottom: 15px;
+      // background: #fff;
+      border-bottom: 1px solid #eee;
+      box-sizing: border-box;
+      h2 {
+        margin: 0;
+      }
+      > div {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+      }
+      span {
+        display: block;
+        margin-right: 15px;
+      }
+      /deep/.ant-calendar-picker {
+        width: 300px;
+      }
+    }
+  }
+  > div {
+    // height: 152px;
+    // background: #fff;
+  }
+  .ant-modal-body {
+    /deep/.ant-form-inline {
+      display: flex;
+    }
+    /deep/ .ant-form-inline .ant-form-item {
+      flex: none;
+      width: 50%;
+    }
+  }
+}
+.list {
+  padding: 0px;
+  box-sizing: border-box;
+  flex: 1;
+  > .ant-form {
+    padding: 10px;
+    box-sizing: border-box;
+    background: #fff;
+  }
+  background: none;
+  .ant-spin-nested-loading {
+    padding: 10px 0;
+    box-sizing: border-box;
+  }
+}
+.personnel-message {
+  // display: flex;
+  // flex-wrap: wrap;
+  // justify-content: space-between;
+  > div {
+    height: auto;
+
+    border-radius: 8px;
+
+    padding: 15px;
+
+    box-sizing: border-box;
+    margin-bottom: 15px;
+    position: relative;
+
+    padding: 0 10px;
+    box-sizing: border-box;
+    > div {
+      background: linear-gradient(360deg, #ffffff 70%, #ffd6d8 100%);
+      box-shadow: 0px 2px 8px 0px rgba(141, 149, 176, 0.15);
+      border-radius: 8px 8px 8px 8px;
+      padding: 10px;
+      box-sizing: border-box;
+    }
+    //初始化样式
+
+    p {
+      display: flex;
+      justify-content: space-between;
+    }
+    p:first-child {
+      justify-content: flex-start;
+      > span {
+        display: flex;
+        margin-left: 15px;
+        color: #fff;
+        padding: 0 10px;
+        box-sizing: border-box;
+        border-radius: 4px;
+        align-items: center;
+        justify-content: center;
+      }
+    }
+    // p:last-child {
+    //   margin: 0;
+    //   justify-content: flex-end;
+    //   // text-align: right;
+    // }
+    div.user-icon {
+      width: 100%;
+      height: auto;
+      // position: absolute;
+      // top: 12px;
+      // right: 15px;
+      border-radius: 50%;
+      // overflow: hidden;
+      display: flex;
+      justify-content: space-between;
+      padding-bottom: 10px;
+      box-sizing: border-box;
+      align-items: center;
+      img {
+        width: 40px;
+        height: 40px;
+        border-radius: 50%;
+      }
+    }
+    .progress {
+      width: 100%;
+      height: 5px;
+      background: #eee;
+      border-radius: 8px;
+      margin-bottom: 8px;
+      > p {
+        width: 67%;
+        height: 100%;
+        background: #2a55e5;
+        border-radius: 8px;
+      }
+    }
+    // margin-right: 2%;
+  }
+  > div.agency1 {
+    background: linear-gradient(360deg, #ffffff 70%, #ffd6d8 100%);
+    box-shadow: 0px 2px 8px 0px rgba(141, 149, 176, 0.15);
+    border-radius: 8px 8px 8px 8px;
+    > p:first-child {
+      color: #d32029;
+      span {
+        background: #d32029;
+      }
+    }
+  }
+  > div.agency2 {
+    background: rgba(216, 74, 27, 0.05);
+    box-shadow: 0px 2px 8px 0px rgba(216, 74, 27, 0.15);
+    border-radius: 8px 8px 8px 8px;
+    border: 1px solid rgba(216, 74, 27, 0.5);
+    > p:first-child {
+      color: #d84a1b;
+      span {
+        background: #d84a1b;
+      }
+    }
+  }
+  > div.agency3 {
+    background: rgba(42, 85, 229, 0.05);
+    box-shadow: 0px 2px 8px 0px rgba(42, 85, 229, 0.15);
+    border-radius: 8px 8px 8px 8px;
+    border: 1px solid rgba(42, 85, 229, 0.5);
+    > p:first-child {
+      color: #2a55e5;
+      span {
+        background: #2a55e5;
+      }
+    }
+  }
+  > div.agency4 {
+    background: rgba(19, 168, 168, 0.05);
+    box-shadow: 0px 2px 8px 0px rgba(19, 168, 168, 0.15);
+    border-radius: 8px 8px 8px 8px;
+    border: 1px solid rgba(19, 168, 168, 0.5);
+    > p:first-child {
+      color: #13a8a8;
+      span {
+        background: #13a8a8;
+      }
+    }
+  }
+  > div.agency5 {
+    background: rgba(23, 125, 220, 0.05);
+    box-shadow: 0px 2px 8px 0px rgba(23, 125, 220, 0.15);
+    border-radius: 8px 8px 8px 8px;
+    border: 1px solid rgba(23, 125, 220, 0.5);
+
+    > p:first-child {
+      color: #177ddc;
+      span {
+        background: #177ddc;
+      }
+    }
+  }
+}
+.page {
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 274 - 1
src/pages/task/agent.vue

@@ -66,6 +66,7 @@
       @clear="onClear"
       @clear="onClear"
       @change="onChange"
       @change="onChange"
       :loading="loading"
       :loading="loading"
+      :scroll="{ x: 2200 }"
     >
     >
       <div slot="qutationCount" slot-scope="{ text }">
       <div slot="qutationCount" slot-scope="{ text }">
         {{ text + "条" }}
         {{ text + "条" }}
@@ -103,11 +104,114 @@
           <a-icon type="question-circle" />
           <a-icon type="question-circle" />
         </a-tooltip>
         </a-tooltip>
       </span>
       </span>
+      <div slot="operation" slot-scope="{ record }">
+        <a-button type="link" @click="watchMessage(record)">详情</a-button>
+      </div>
     </standard-table>
     </standard-table>
+    <a-drawer
+      :width="1300"
+      :placement="'right'"
+      :visible="visible"
+      :headerStyle="headerStyle"
+      :closable="false"
+    >
+      <template slot="title">
+        <div class="custom-title" :style="headerStyle">
+          <div>
+            <a-icon type="close" @click="onClose" />
+            渠道详情
+          </div>
+          <div>
+            <a-button style="margin-right: 8px" @click="onClose">取消</a-button>
+            <a-button type="primary" @click="onClose">确认</a-button>
+          </div>
+        </div>
+        <div>
+          <dl>
+            <dt>
+              <img
+                v-show="detailsObj.logo"
+                :src="process + detailsObj.logo"
+                alt=""
+              />
+              <img
+                v-if="!detailsObj.logo && detailsObj.sex == 'M'"
+                src="../../assets/img/man.png"
+                alt=""
+              />
+              <img
+                v-if="!detailsObj.logo && detailsObj.sex == 'F'"
+                src="../../assets/img/woman.png"
+                alt=""
+              />
+              <img
+                v-if="!detailsObj.logo && !detailsObj.sex"
+                src="../../assets/img/man.png"
+                alt=""
+              />
+            </dt>
+            <dd>
+              <p>
+                <span> {{ detailsObj.userName }} </span>({{
+                  detailsObj.userId
+                }})
+              </p>
+              <p>归属机构:{{ detailsObj.deptName }}</p>
+            </dd>
+          </dl>
+        </div>
+        <standard-table
+          bordered
+          :columns="columns1"
+          :dataSource="detailList"
+          :pagination="pageInfo"
+          @change="detailsChange"
+          :loading="loading"
+          :scroll="{ x: 2200 }"
+        >
+          <div slot="qutationCount" slot-scope="{ text }">
+            {{ text + "条" }}
+          </div>
+          <div slot="quotationRate" slot-scope="{ text }">
+            {{ (text * 100).toFixed(2) + "%" }}
+          </div>
+          <span slot="title_slot">
+            报价率
+            <a-tooltip
+              placement="topLeft"
+              title="报价中 / 报价数"
+              arrow-point-at-center
+            >
+              <a-icon type="question-circle" />
+            </a-tooltip>
+          </span>
+          <span slot="title_slot2">
+            承保率
+            <a-tooltip
+              placement="topLeft"
+              title="承保数 / 报价数"
+              arrow-point-at-center
+            >
+              <a-icon type="question-circle" />
+            </a-tooltip>
+          </span>
+          <span slot="title_slot3">
+            核保通过率
+            <a-tooltip
+              placement="topLeft"
+              title="(承保数+ 核保数) / 报价数"
+              arrow-point-at-center
+            >
+              <a-icon type="question-circle" />
+            </a-tooltip>
+          </span>
+        </standard-table>
+      </template>
+    </a-drawer>
   </div>
   </div>
 </template>
 </template>
     
     
-    <script>
+<script>
 import StandardTable from "@/components/table/StandardTable";
 import StandardTable from "@/components/table/StandardTable";
 import mixin from "../../minins/mixin";
 import mixin from "../../minins/mixin";
 const columns = [
 const columns = [
@@ -191,6 +295,68 @@ const columns = [
     dataIndex: "contributionRate",
     dataIndex: "contributionRate",
     scopedSlots: { title: "title_slot3", customRender: "quotationRate" },
     scopedSlots: { title: "title_slot3", customRender: "quotationRate" },
   },
   },
+  {
+    title: "操作",
+    dataIndex: "operation",
+    fixed: "right",
+
+    scopedSlots: { customRender: "operation" },
+  },
+];
+const columns1 = [
+  {
+    title: "保险公司",
+    dataIndex: "inscompany",
+  },
+
+  {
+    title: "报价中(PC)",
+    dataIndex: "pcOrderSource",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "报价中(APP)",
+    dataIndex: "appOrderSource",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "待审核",
+    dataIndex: "auditOrder",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "已核保待缴费",
+    dataIndex: "underwritingCount",
+    scopedSlots: { customRender: "qutationCount" },
+
+    // sorter: true,
+    needTotal: true,
+  },
+  {
+    title: "已承保",
+    dataIndex: "qutationInsureCount",
+    needTotal: true,
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "核保退回",
+    dataIndex: "underwritingReturn",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    // title: "报价率",
+    dataIndex: "quotationRate",
+    scopedSlots: { title: "title_slot", customRender: "quotationRate" },
+  },
+  {
+    // title: "承保率",
+    dataIndex: "closeRate",
+    scopedSlots: { title: "title_slot2", customRender: "quotationRate" },
+  },
+  {
+    dataIndex: "contributionRate",
+    scopedSlots: { title: "title_slot3", customRender: "quotationRate" },
+  },
 ];
 ];
 import fromRow from "@/components/form/FormRow";
 import fromRow from "@/components/form/FormRow";
 import moment from "moment";
 import moment from "moment";
@@ -215,6 +381,7 @@ export default {
       },
       },
       backLinePersonnel: {},
       backLinePersonnel: {},
       columns: columns,
       columns: columns,
+      columns1: columns1,
       companyList: [],
       companyList: [],
       tableList: [],
       tableList: [],
       pagination: {
       pagination: {
@@ -234,6 +401,24 @@ export default {
       areaList: [],
       areaList: [],
       storeList: [],
       storeList: [],
       process: process.env.VUE_APP_API_BASE_URL,
       process: process.env.VUE_APP_API_BASE_URL,
+      visible: false,
+      headerStyle: {
+        display: "flex",
+        "align-items": "center",
+        "justify-content": "space-between",
+      },
+      pageInfo: {
+        current: 1,
+        defaultPageSize: 10,
+        total: 0,
+        pagesize0ptions: ["10", "20", "30", "50", "100"],
+        hideOnSinglePage: false,
+        showQuickJumper: true, //
+        showSizeChanger: true, //是否可以改变pagesize
+        showTotal: (total) => `共 ${total} 条数据`,
+      },
+      detailsObj: {},
+      detailList: [],
     };
     };
   },
   },
   watch: {
   watch: {
@@ -248,6 +433,35 @@ export default {
     // }, 1000);
     // }, 1000);
   },
   },
   methods: {
   methods: {
+    watchMessage(item) {
+      //
+      this.detailsObj = { ...item };
+      this.visible = true;
+      this.getDetailsList(item);
+    },
+    getDetailsList(item) {
+      this.detailList = [];
+      this.$API.task
+        .getChannelAgentDetails({
+          pageNum: this.pageInfo.current,
+          pageSize: this.pageInfo.defaultPageSize,
+          userId: item.userId,
+        })
+        .then((res) => {
+          if (res.data.code === 200) {
+            this.detailList = res.data.data.records;
+            this.pageInfo = {
+              current: res.data.data.current,
+              defaultPageSize: res.data.data.size,
+              total: res.data.data.total,
+            };
+          }
+        });
+    },
+    onClose() {
+      //
+      this.visible = false;
+    },
     exportList() {
     exportList() {
       delete this.formState.time;
       delete this.formState.time;
       this.$API.task
       this.$API.task
@@ -326,6 +540,14 @@ export default {
       };
       };
       this.getBackLinePersonnel();
       this.getBackLinePersonnel();
     },
     },
+    detailsChange(pageInfo) {
+      this.pageInfo = {
+        current: pageInfo.current,
+        defaultPageSize: pageInfo.pageSize,
+        total: pageInfo.total,
+      };
+      this.getDetailsList(this.detailsObj);
+    },
   },
   },
 };
 };
 </script>
 </script>
@@ -383,4 +605,55 @@ export default {
     }
     }
   }
   }
 }
 }
+/deep/.ant-drawer-title {
+  width: 100%;
+}
+/deep/.custom-title {
+  display: flex;
+  > i {
+    cursor: pointer;
+  }
+}
+/deep/.ant-drawer-body {
+}
+dl {
+  width: 346px;
+  height: 78px;
+  background: #ffffff;
+  border-radius: 4px 4px 4px 4px;
+  border: 1px solid #f87f2c;
+  display: flex;
+  margin-left: 15px;
+  span {
+    color: #f87f2c;
+  }
+  dt {
+    width: 64px;
+    height: 100%;
+    background: #fff9f7;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    border-radius: 4px 0 0 4px;
+    img {
+      width: 40px;
+      height: 40px;
+    }
+  }
+  dd {
+    padding: 8px 0;
+    box-sizing: border-box;
+    margin-left: 10px;
+    p {
+      margin: 0;
+    }
+    p:first-child {
+      color: #aaa;
+    }
+    display: flex;
+    flex-direction: column;
+    // align-items: ;
+    justify-content: space-between;
+  }
+}
 </style>
 </style>

+ 267 - 5
src/pages/task/channel.vue

@@ -63,7 +63,6 @@
         :columns="columns"
         :columns="columns"
         :dataSource="tableList"
         :dataSource="tableList"
         :pagination="pagination"
         :pagination="pagination"
-        @clear="onClear"
         @change="onChange"
         @change="onChange"
         :loading="loading"
         :loading="loading"
         :scroll="{ x: 2200 }"
         :scroll="{ x: 2200 }"
@@ -104,9 +103,111 @@
             <a-icon type="question-circle" />
             <a-icon type="question-circle" />
           </a-tooltip>
           </a-tooltip>
         </span>
         </span>
-        <div></div>
+        <div slot="operation" slot-scope="{ record }">
+          <a-button type="link" @click="watchMessage(record)">详情</a-button>
+        </div>
       </standard-table>
       </standard-table>
     </div>
     </div>
+    <a-drawer
+      :width="1300"
+      :placement="'right'"
+      :visible="visible"
+      :headerStyle="headerStyle"
+      :closable="false"
+    >
+      <template slot="title">
+        <div class="custom-title" :style="headerStyle">
+          <div>
+            <a-icon type="close" @click="onClose" />
+            渠道详情
+          </div>
+          <div>
+            <a-button style="margin-right: 8px" @click="onClose">取消</a-button>
+            <a-button type="primary" @click="onClose">确认</a-button>
+          </div>
+        </div>
+        <div>
+          <dl>
+            <dt>
+              <img
+                v-show="detailsObj.logo"
+                :src="process + detailsObj.logo"
+                alt=""
+              />
+              <img
+                v-if="!detailsObj.logo && detailsObj.sex == 'M'"
+                src="../../assets/img/man.png"
+                alt=""
+              />
+              <img
+                v-if="!detailsObj.logo && detailsObj.sex == 'F'"
+                src="../../assets/img/woman.png"
+                alt=""
+              />
+              <img
+                v-if="!detailsObj.logo && !detailsObj.sex"
+                src="../../assets/img/man.png"
+                alt=""
+              />
+            </dt>
+            <dd>
+              <p>
+                <span> {{ detailsObj.userName }} </span>({{
+                  detailsObj.userId
+                }})
+              </p>
+              <p>归属机构:{{ detailsObj.deptName }}</p>
+            </dd>
+          </dl>
+        </div>
+        <standard-table
+          bordered
+          :columns="columns1"
+          :dataSource="detailList"
+          :pagination="pageInfo"
+          @change="detailsChange"
+          :loading="loading"
+          :scroll="{ x: 2200 }"
+        >
+          <div slot="qutationCount" slot-scope="{ text }">
+            {{ text + "条" }}
+          </div>
+          <div slot="quotationRate" slot-scope="{ text }">
+            {{ (text * 100).toFixed(2) + "%" }}
+          </div>
+          <span slot="title_slot">
+            报价率
+            <a-tooltip
+              placement="topLeft"
+              title="报价中 / 报价数"
+              arrow-point-at-center
+            >
+              <a-icon type="question-circle" />
+            </a-tooltip>
+          </span>
+          <span slot="title_slot2">
+            承保率
+            <a-tooltip
+              placement="topLeft"
+              title="承保数 / 报价数"
+              arrow-point-at-center
+            >
+              <a-icon type="question-circle" />
+            </a-tooltip>
+          </span>
+          <span slot="title_slot3">
+            核保通过率
+            <a-tooltip
+              placement="topLeft"
+              title="(承保数+ 核保数) / 报价数"
+              arrow-point-at-center
+            >
+              <a-icon type="question-circle" />
+            </a-tooltip>
+          </span>
+        </standard-table>
+      </template>
+    </a-drawer>
   </div>
   </div>
 </template>
 </template>
   
   
@@ -198,9 +299,66 @@ const columns = [
   {
   {
     title: "操作",
     title: "操作",
     dataIndex: "operation",
     dataIndex: "operation",
+    fixed: "right",
+
     scopedSlots: { customRender: "operation" },
     scopedSlots: { customRender: "operation" },
   },
   },
 ];
 ];
+const columns1 = [
+  {
+    title: "保险公司",
+    dataIndex: "inscompany",
+  },
+
+  {
+    title: "报价中(PC)",
+    dataIndex: "pcOrderSource",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "报价中(APP)",
+    dataIndex: "appOrderSource",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "待审核",
+    dataIndex: "auditOrder",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "已核保待缴费",
+    dataIndex: "underwritingCount",
+    scopedSlots: { customRender: "qutationCount" },
+
+    // sorter: true,
+    needTotal: true,
+  },
+  {
+    title: "已承保",
+    dataIndex: "qutationInsureCount",
+    needTotal: true,
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "核保退回",
+    dataIndex: "underwritingReturn",
+    scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    // title: "报价率",
+    dataIndex: "quotationRate",
+    scopedSlots: { title: "title_slot", customRender: "quotationRate" },
+  },
+  {
+    // title: "承保率",
+    dataIndex: "closeRate",
+    scopedSlots: { title: "title_slot2", customRender: "quotationRate" },
+  },
+  {
+    dataIndex: "contributionRate",
+    scopedSlots: { title: "title_slot3", customRender: "quotationRate" },
+  },
+];
 import moment from "moment";
 import moment from "moment";
 export default {
 export default {
   components: {
   components: {
@@ -221,8 +379,15 @@ export default {
         endDate: moment().format("YYYY-MM-DD"),
         endDate: moment().format("YYYY-MM-DD"),
         beginDate: moment().format("YYYY-MM-DD"),
         beginDate: moment().format("YYYY-MM-DD"),
       },
       },
+      visible: false,
+      headerStyle: {
+        display: "flex",
+        "align-items": "center",
+        "justify-content": "space-between",
+      },
       backLinePersonnel: {},
       backLinePersonnel: {},
       columns: columns,
       columns: columns,
+      columns1: columns1,
       companyList: [],
       companyList: [],
       tableList: [],
       tableList: [],
       pagination: {
       pagination: {
@@ -242,6 +407,18 @@ export default {
       areaList: [],
       areaList: [],
       storeList: [],
       storeList: [],
       process: process.env.VUE_APP_API_BASE_URL,
       process: process.env.VUE_APP_API_BASE_URL,
+      pageInfo: {
+        current: 1,
+        defaultPageSize: 10,
+        total: 0,
+        pagesize0ptions: ["10", "20", "30", "50", "100"],
+        hideOnSinglePage: false,
+        showQuickJumper: true, //
+        showSizeChanger: true, //是否可以改变pagesize
+        showTotal: (total) => `共 ${total} 条数据`,
+      },
+      detailsObj: {},
+      detailList: [],
     };
     };
   },
   },
   watch: {
   watch: {
@@ -256,8 +433,34 @@ export default {
     // }, 1000);
     // }, 1000);
   },
   },
   methods: {
   methods: {
-    handleFinish() {
+    watchMessage(item) {
+      //
+      this.detailsObj = { ...item };
+      this.visible = true;
+      this.getDetailsList(item);
+    },
+    getDetailsList(item) {
+      this.detailList = [];
+      this.$API.task
+        .getChannelAgentDetails({
+          pageNum: this.pageInfo.current,
+          pageSize: this.pageInfo.defaultPageSize,
+          userId: item.userId,
+        })
+        .then((res) => {
+          if (res.data.code === 200) {
+            this.detailList = res.data.data.records;
+            this.pageInfo = {
+              current: res.data.data.current,
+              defaultPageSize: res.data.data.size,
+              total: res.data.data.total,
+            };
+          }
+        });
+    },
+    onClose() {
       //
       //
+      this.visible = false;
     },
     },
     exportList() {
     exportList() {
       delete this.formState.time;
       delete this.formState.time;
@@ -310,9 +513,9 @@ export default {
       this.getList();
       this.getList();
     },
     },
 
 
-    onChange(pagination, filters, sorter, { currentDataSource }) {
+    onChange(pagination) {
       // this.$message.info('表格状态改变了')
       // this.$message.info('表格状态改变了')
-      console.log(pagination, filters, sorter, { currentDataSource });
+
       this.pagination = {
       this.pagination = {
         current: pagination.current,
         current: pagination.current,
         defaultPageSize: pagination.pageSize,
         defaultPageSize: pagination.pageSize,
@@ -320,6 +523,14 @@ export default {
       };
       };
       this.getList();
       this.getList();
     },
     },
+    detailsChange(pageInfo) {
+      this.pageInfo = {
+        current: pageInfo.current,
+        defaultPageSize: pageInfo.pageSize,
+        total: pageInfo.total,
+      };
+      this.getDetailsList(this.detailsObj);
+    },
   },
   },
 };
 };
 </script>
 </script>
@@ -377,4 +588,55 @@ export default {
     }
     }
   }
   }
 }
 }
+/deep/.ant-drawer-title {
+  width: 100%;
+}
+/deep/.custom-title {
+  display: flex;
+  > i {
+    cursor: pointer;
+  }
+}
+/deep/.ant-drawer-body {
+}
+dl {
+  width: 346px;
+  height: 78px;
+  background: #ffffff;
+  border-radius: 4px 4px 4px 4px;
+  border: 1px solid #f87f2c;
+  display: flex;
+  margin-left: 15px;
+  span {
+    color: #f87f2c;
+  }
+  dt {
+    width: 64px;
+    height: 100%;
+    background: #fff9f7;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    border-radius: 4px 0 0 4px;
+    img {
+      width: 40px;
+      height: 40px;
+    }
+  }
+  dd {
+    padding: 8px 0;
+    box-sizing: border-box;
+    margin-left: 10px;
+    p {
+      margin: 0;
+    }
+    p:first-child {
+      color: #aaa;
+    }
+    display: flex;
+    flex-direction: column;
+    // align-items: ;
+    justify-content: space-between;
+  }
+}
 </style>
 </style>

+ 4 - 4
src/pages/wallet/agent.vue

@@ -15,7 +15,7 @@
     <div class="back-line-main">
     <div class="back-line-main">
       <div class="back-line-header">
       <div class="back-line-header">
         <div class="back-line-header-title">
         <div class="back-line-header-title">
-          <h2>机构</h2>
+          <h2>代理人</h2>
           <div>
           <div>
             <span>时间筛选</span>
             <span>时间筛选</span>
             <a-range-picker
             <a-range-picker
@@ -110,17 +110,17 @@
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && item.sex == 'M'"
                     v-if="!item.filePath && item.sex == 'M'"
-                    src="../../assets/img/manbg.png"
+                    src="../../assets/img/man.png"
                     alt=""
                     alt=""
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && item.sex == 'F'"
                     v-if="!item.filePath && item.sex == 'F'"
-                    src="../../assets/img/womanbg.png"
+                    src="../../assets/img/woman.png"
                     alt=""
                     alt=""
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && !item.sex"
                     v-if="!item.filePath && !item.sex"
-                    src="../../assets/img/normalbg.png"
+                    src="../../assets/img/man.png"
                     alt=""
                     alt=""
                   />
                   />
                   {{ item.userName }}
                   {{ item.userName }}

+ 4 - 4
src/pages/wallet/channel.vue

@@ -15,7 +15,7 @@
     <div class="back-line-main">
     <div class="back-line-main">
       <div class="back-line-header">
       <div class="back-line-header">
         <div class="back-line-header-title">
         <div class="back-line-header-title">
-          <h2>机构</h2>
+          <h2>渠道</h2>
           <div>
           <div>
             <span>时间筛选</span>
             <span>时间筛选</span>
             <a-range-picker
             <a-range-picker
@@ -110,17 +110,17 @@
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && item.sex == 'M'"
                     v-if="!item.filePath && item.sex == 'M'"
-                    src="../../assets/img/manbg.png"
+                    src="../../assets/img/man.png"
                     alt=""
                     alt=""
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && item.sex == 'F'"
                     v-if="!item.filePath && item.sex == 'F'"
-                    src="../../assets/img/womanbg.png"
+                    src="../../assets/img/woman.png"
                     alt=""
                     alt=""
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && !item.sex"
                     v-if="!item.filePath && !item.sex"
-                    src="../../assets/img/normalbg.png"
+                    src="../../assets/img/man.png"
                     alt=""
                     alt=""
                   />
                   />
                   {{ item.userName }}
                   {{ item.userName }}

+ 4 - 4
src/pages/wallet/partner.vue

@@ -14,7 +14,7 @@
     <div class="back-line-main">
     <div class="back-line-main">
       <div class="back-line-header">
       <div class="back-line-header">
         <div class="back-line-header-title">
         <div class="back-line-header-title">
-          <h2>机构</h2>
+          <h2>合伙人</h2>
           <div>
           <div>
             <span>时间筛选</span>
             <span>时间筛选</span>
             <a-range-picker
             <a-range-picker
@@ -114,17 +114,17 @@
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && item.sex == 'M'"
                     v-if="!item.filePath && item.sex == 'M'"
-                    src="../../assets/img/manbg.png"
+                    src="../../assets/img/man.png"
                     alt=""
                     alt=""
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && item.sex == 'F'"
                     v-if="!item.filePath && item.sex == 'F'"
-                    src="../../assets/img/womanbg.png"
+                    src="../../assets/img/woman.png"
                     alt=""
                     alt=""
                   />
                   />
                   <img
                   <img
                     v-if="!item.filePath && !item.sex"
                     v-if="!item.filePath && !item.sex"
-                    src="../../assets/img/normalbg.png"
+                    src="../../assets/img/man.png"
                     alt=""
                     alt=""
                   />
                   />
                   {{ item.userName }}
                   {{ item.userName }}

+ 21 - 16
src/router/config.js

@@ -80,16 +80,8 @@ const router = new Router({
           component: () => import('@/pages/sales/message'),
           component: () => import('@/pages/sales/message'),
 
 
         },
         },
-        // {
-        //   path: '/sales',
-        //   name: '电销呼出',
-        //   component: PageView,
-        //   children: [
 
 
 
 
-        //   ]
-        // },
-
         {
         {
           path: '/channel',
           path: '/channel',
           name: '渠道人员统计',
           name: '渠道人员统计',
@@ -118,14 +110,7 @@ const router = new Router({
             }
             }
           ]
           ]
         },
         },
-        // {
-        //   path: '/agent',
-        //   name: '代理人',
-        //   component: PageView,
-        //   children: [
 
 
-        //   ]
-        // },
         {
         {
           path: '/business/sales/message',
           path: '/business/sales/message',
           name: '保费详情',
           name: '保费详情',
@@ -141,6 +126,23 @@ const router = new Router({
           name: '保费详情',
           name: '保费详情',
           component: () => import('@/pages/business/message'),
           component: () => import('@/pages/business/message'),
         },
         },
+        // {
+
+
+        //   path: '/copartner',
+        //   name: '合伙人',
+        //   component: PageView,
+        //   children: [
+        //     {
+
+        //       path: '/copartner/index',
+        //       name: '合伙人',
+        //       component: () => import('@/pages/copartner/index'),
+        //     }
+        //   ]
+
+        // }
+
 
 
         // {
         // {
         //   path: 'task',
         //   path: 'task',
@@ -356,6 +358,7 @@ router.beforeEach(async (to, from, next) => {
     await store.dispatch('setting/getMenuList', userInfo.id)
     await store.dispatch('setting/getMenuList', userInfo.id)
     await store.dispatch('setting/getPermissionsAuth', userInfo.id)
     await store.dispatch('setting/getPermissionsAuth', userInfo.id)
     let menuData = store.state.setting.menuData
     let menuData = store.state.setting.menuData
+
     let auth = store.state.setting.authType
     let auth = store.state.setting.authType
 
 
     sessionStorage.setItem("user", userInfo.id);
     sessionStorage.setItem("user", userInfo.id);
@@ -486,10 +489,11 @@ function addDynamicRoutes(menuList = [],) {
         },
         },
         children: []
         children: []
       })
       })
-      // console.log(router.getRoutes(), 1)
+
 
 
 
 
     } else if (menuList[i].type == 1) {
     } else if (menuList[i].type == 1) {
+
       let mulu = {}
       let mulu = {}
       let url = menuList[i].url
       let url = menuList[i].url
       let parentPath = menuList[i].parentUrl
       let parentPath = menuList[i].parentUrl
@@ -508,6 +512,7 @@ function addDynamicRoutes(menuList = [],) {
 
 
       router.addRoute(menuList[i].parentName, mulu)
       router.addRoute(menuList[i].parentName, mulu)
 
 
+
     }
     }
     if (menuList[i].children instanceof Array && menuList[i].children.length) {
     if (menuList[i].children instanceof Array && menuList[i].children.length) {
       addDynamicRoutes(menuList[i].children)
       addDynamicRoutes(menuList[i].children)

+ 9 - 1
src/services/task.js

@@ -39,6 +39,13 @@ export async function exportInsurancelList(data) {
         }
         }
     )
     )
 }
 }
+//渠道代理人详情
+export async function getChannelAgentDetails(data) {
+    return request("/taskStatistics/channelAgentDetails", METHOD.POST, data,
+
+    )
+}
+
 
 
 
 
 
 
@@ -50,5 +57,6 @@ export default {
     getAgentList,
     getAgentList,
     exportChannelList,
     exportChannelList,
     exportAgentlList,
     exportAgentlList,
-    exportInsurancelList
+    exportInsurancelList,
+    getChannelAgentDetails
 }
 }