Procházet zdrojové kódy

fix:更改首页,添加电销,业务数据增加总计

刘恒 před 1 rokem
rodič
revize
b8a4a7fd2f

binární
src/assets/index/Frame1.png


binární
src/assets/index/Frame10.png


binární
src/assets/index/Frame11.png


binární
src/assets/index/Frame2.png


binární
src/assets/index/Frame3.png


binární
src/assets/index/Frame4.png


binární
src/assets/index/Frame5.png


binární
src/assets/index/Frame6.png


binární
src/assets/index/Frame7.png


binární
src/assets/index/Frame8.png


binární
src/assets/index/Frame9.png


+ 2 - 2
src/pages/business/channel.vue

@@ -50,7 +50,7 @@
               <dt><span>交强险保费</span></dt>
               <dd>
                 <span>
-                  {{ amount.jqpremium }}
+                  {{ amount.jqpremium || 0 }}
                 </span>
               </dd>
             </dl>
@@ -58,7 +58,7 @@
               <dt><span>车船税</span></dt>
               <dd>
                 <span>
-                  {{ amount.taxamount }}
+                  {{ amount.taxamount || 0 }}
                 </span>
               </dd>
             </dl>

+ 119 - 4
src/pages/business/index.vue

@@ -1,6 +1,45 @@
 <template>
   <div class="back-line-main">
     <div class="back-line-header">
+      <div class="back-line-header-amount">
+        <h2>合计</h2>
+        <div>
+          <dl>
+            <dt><span>总保司</span></dt>
+            <dd>
+              <span>{{ amount.totalPremium || 0 }}</span>
+            </dd>
+          </dl>
+          <dl>
+            <dt><span>人员数据</span></dt>
+            <dd>
+              <span>{{ amount.userNumber || 0 }}</span>
+            </dd>
+          </dl>
+          <dl>
+            <dt><span>单均保费</span></dt>
+            <dd>
+              <span>{{ amount.averagePremium || 0 }}</span>
+            </dd>
+          </dl>
+          <dl>
+            <dt><span>人均产能</span></dt>
+            <dd>
+              <span>
+                {{ amount.perCapitaAmount || 0 }}
+              </span>
+            </dd>
+          </dl>
+          <dl>
+            <dt><span>出单笔数</span></dt>
+            <dd>
+              <span>
+                {{ amount.qutationInsureCount || 0 }}
+              </span>
+            </dd>
+          </dl>
+        </div>
+      </div>
       <div class="back-line-header-title">
         <h2>业务数据</h2>
         <div>
@@ -203,6 +242,7 @@ export default {
         riskCode: undefined,
       },
       columns,
+      amount: {},
       //   listLoading: false,
       tableList: [],
       pagination: {
@@ -233,10 +273,10 @@ export default {
     };
   },
   watch: {
-    "formState.days"() {
+    "formState.days"(val) {
       this.pagination.current = 1;
       this.pagination.defaultPageSize = 10;
-      this.getList();
+      if (val != 0) this.getList();
     },
     "formState.riskCode"() {
       this.onClickRow(this.chooseTable);
@@ -279,7 +319,7 @@ export default {
       this.formState.days = 0;
       this.getList();
     },
-    getList() {
+    async getList() {
       this.loading = true;
       this.tableList = [];
       this.$API.business
@@ -296,6 +336,16 @@ export default {
             this.pagination.total = res.data.data.total;
           }
         });
+      this.$API.business
+        .getCountBusinessData({
+          ...this.formState,
+        })
+        .then((res) => {
+          // console.log(res);
+          if (res.data.code === 200) {
+            this.amount = { ...res.data.data };
+          }
+        });
     },
     onClear() {
       this.$message.info("您清空了勾选的所有行");
@@ -326,7 +376,7 @@ export default {
   },
 };
 </script>
-          <style lang='less' scoped>
+<style lang='less' scoped>
 .back-line-main {
   display: flex;
   //   flex-direction: column;
@@ -498,4 +548,69 @@ export default {
   display: flex;
   justify-content: flex-end;
 }
+.back-line-header-amount {
+  h2 {
+    margin: 0;
+  }
+  > div {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    > dl {
+      flex: none;
+      width: 200px;
+      height: 80px;
+      display: flex;
+      //   align-items: center;
+      justify-content: space-between;
+      flex-direction: column;
+      padding: 10px;
+      box-sizing: border-box;
+
+      border-radius: 4px 4px 4px 4px;
+
+      > dd {
+        display: flex;
+        // align-items: center;
+        justify-content: flex-end;
+        margin: 0;
+        font-family: PingFang SC, PingFang SC;
+        font-weight: 500;
+        font-size: 24px;
+        // color: rgba(0, 0, 0, 0.85);
+        // padding-left: 15px;
+        box-sizing: border-box;
+      }
+    }
+    > dl:first-child {
+      background: url("../../assets/img/business1.png");
+      color: #11a6d3;
+    }
+    > dl:nth-child(2) {
+      background: url("../../assets/img/business2.png");
+      color: #f87f2c;
+    }
+    > dl:nth-child(3) {
+      background: url("../../assets/img/business3.png");
+      color: #fab600;
+    }
+    > dl:nth-child(4) {
+      background: url("../../assets/img/business4.png");
+      color: #80be38;
+    }
+    > dl:nth-child(5) {
+      background: url("../../assets/img/business5.png");
+      color: #906cef;
+    }
+    > dl:nth-child(6) {
+      background: url("../../assets/img/business6.png");
+      color: #47a2eb;
+    }
+    > dl:nth-child(7) {
+      background: url("../../assets/img/business6.png");
+      color: #f879cd;
+    }
+  }
+}
 </style>

+ 128 - 7
src/pages/index/index.vue

@@ -1,7 +1,28 @@
 <template>
   <div class="home">
-    <a-row>
-      <a-col :span="6" v-for="item in menuData" :key="item.id">
+    <div class="header">
+      <div>
+        <div :class="['logo']">
+          <!-- <router-link to="/agreement/agreement"> -->
+          <img src="@/assets/img/title.png" />
+          <p>晋掌柜控制台</p>
+          <!-- </router-link> -->
+        </div>
+      </div>
+      <div>
+        <HeaderExpand class="header-item"></HeaderExpand>
+
+        <header-avatar class="header-item" />
+      </div>
+    </div>
+    <a-row class="title">
+      <h1>晋掌柜·控制台</h1>
+      <p>
+        公司愿景:构建中国最大的保险消费入口,中国最大
+        的第三方保险移动交易平台,中国最大的公共服务平台,拥有中国最大的专家顾问队伍以及中国最大的互助组织。
+      </p>
+      <p>公司使命:助力创业者实现财富梦想,促成所有家庭获得财务自由。</p>
+      <!-- <a-col :span="6" v-for="item in menuData" :key="item.id">
         <dl @click="RouterLink(item)">
           <dt>
             <img src="../../assets/img/money.png" alt="" />
@@ -10,16 +31,52 @@
             <h2>{{ item.name }}</h2>
           </dd>
         </dl>
+      </a-col> -->
+    </a-row>
+    <a-row class="menu-list">
+      <a-col :span="6" v-for="(item, index) in menuData" :key="item.id">
+        <dl @click="RouterLink(item)">
+          <dt>
+            <img
+              :src="
+                require('../../assets/index/Frame' + (index * 1 + 1) + '.png')
+              "
+              alt=""
+            />
+          </dt>
+          <dd>
+            <h2>{{ item.name }}</h2>
+            <p>{{ titleList[index] }}</p>
+          </dd>
+        </dl>
       </a-col>
     </a-row>
   </div>
 </template>
 
 <script>
+import HeaderAvatar from "../../layouts/header/HeaderAvatar";
+import HeaderExpand from "../../layouts/header/HeaderExpand";
 import { mapState } from "vuex";
 export default {
+  components: { HeaderAvatar, HeaderExpand },
+
   data() {
-    return {};
+    return {
+      titleList: [
+        "为用户展示协议数量",
+        "后线数据、渠道数据、前线数据、电销数据",
+        "渠道、供应商、代理人、电销",
+        "费用校验、财务应收、车险应收、非车险应收",
+        "大订单、小订单",
+        "公司每月利润成本分析",
+        "保险公司、代理人、渠道、电销",
+        "菜单管理、访问权限配置、数据权限、角色管理/配置",
+        "机构、合伙人、代理人、渠道",
+        "电销呼出数据",
+        "合伙人数据",
+      ],
+    };
   },
   created() {},
   mounted() {
@@ -46,22 +103,79 @@ export default {
 
   position: relative;
   z-index: 999;
-  > div {
-    padding-top: 200px;
+  display: flex;
+  flex-direction: column;
+  // justify-content: ;
+  align-items: center;
+  .header {
+    width: 100%;
+    height: 64px;
+    // position: absolute;
+    // z-index: 99;
+    background: #fff;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 0 15px;
+    box-sizing: border-box;
+    > div:last-child {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .header-item {
+        margin-right: 15px;
+      }
+    }
+    .logo {
+      display: flex;
+      align-items: center;
+      img {
+        width: 36px;
+        height: 36px;
+      }
+      p {
+        margin: 0;
+        margin-left: 5px;
+        font-family: PingFang SC, PingFang SC;
+        font-weight: 500;
+        font-size: 18px;
+        color: #333333;
+      }
+    }
+  }
+  > div.title {
+    // padding-top: 200px;
     box-sizing: border-box;
     background: url("../../assets/img/indexBg.png") no-repeat;
     background-size: 100% auto;
-
+    height: 360px;
+    padding: 60px 128px;
+    width: 100%;
+  }
+  > div.menu-list {
+    width: 100%;
+    position: absolute;
+    // bottom: 0;
+    padding: 0 113px;
+    box-sizing: border-box;
+    top: 340px;
     .ant-col {
-      padding: 15px;
+      padding: 0 15px;
       box-sizing: border-box;
     }
     dl {
+      width: 100%;
       background: #fff;
       display: flex;
       padding: 15px;
       box-sizing: border-box;
       border-radius: 8px;
+      height: 125px;
+      dt {
+        display: flex;
+        // flex-direction: column;
+        align-items: center;
+      }
       img {
         width: 80px;
         height: 80px;
@@ -69,6 +183,13 @@ export default {
     }
     dd {
       margin-left: 10px;
+      display: flex;
+      flex-direction: column;
+      // align-items: center;
+      justify-content: center;
+      p {
+        margin: 0;
+      }
     }
   }
 }

+ 1 - 1
src/pages/personnelManage/sales/task.vue

@@ -267,7 +267,7 @@ export default {
     getList(val) {
       this.loading = true;
       this.$API.task
-        .getTaskStatistics({
+        .getQueryPageElectric({
           pageNum: this.pagination.current,
           pageSize: this.pagination.defaultPageSize,
           ...this.formState,

+ 371 - 0
src/pages/quote/smallorders/sales.vue

@@ -0,0 +1,371 @@
+<template>
+  <div class="quote">
+    <div class="quote-tree">
+      <div><h2>部门所属</h2></div>
+      <div>
+        <!-- <a-tree  :tree-data="treeData" /> -->
+        <tree @getList="getVerification"></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
+              @change="onChangeTime"
+              v-model="formState.time"
+              value-format="YYYY-MM-DD"
+            >
+              <a-icon slot="suffixIcon" type="calendar" />
+            </a-range-picker>
+            <a-radio-group
+              default-value="0"
+              button-style="solid"
+              v-model="formState.dateType"
+              @change="getVerification()"
+            >
+              <a-radio-button
+                value="1"
+                @click="
+                  (formState.time = []),
+                    (formState.beginDate = ''),
+                    (formState.endDate = '')
+                "
+              >
+                近1月
+              </a-radio-button>
+              <a-radio-button
+                value="2"
+                @click="
+                  (formState.time = []),
+                    (formState.beginDate = ''),
+                    (formState.endDate = '')
+                "
+              >
+                近3月
+              </a-radio-button>
+              <a-radio-button
+                value="3"
+                @click="
+                  (formState.time = []),
+                    (formState.beginDate = ''),
+                    (formState.endDate = '')
+                "
+              >
+                近半年
+              </a-radio-button>
+            </a-radio-group>
+          </div>
+        </div>
+      </div>
+      <div style="display: flex">
+        <!-- <div style="width: 300px; height: 900px; overflow-y: auto">
+          <a-tree :tree-data="treeData" :replaceFields="replaceFields"></a-tree>
+        </div> -->
+        <standard-table
+          bordered
+          :columns="columns"
+          :dataSource="tableList"
+          :pagination="pagination"
+          @clear="onClear"
+          @change="onChange"
+          :loading="loading"
+          :scroll="{ x: 0, y: 800 }"
+        >
+          <div slot="count" slot-scope="{ text }">
+            {{ text ? text + "次" : text }}
+          </div>
+          <div slot="rate" slot-scope="{ text }">
+            {{ text ? (text * 100).toFixed(2) + "%" : text }}
+          </div>
+        </standard-table>
+      </div>
+    </div>
+  </div>
+</template>
+          
+  <script>
+import StandardTable from "@/components/table/StandardTable";
+// import mixin from "../../minins/mixin";
+import tree from "@/components/tree/tree";
+import moment from "moment";
+
+const columns = [
+  {
+    title: "保险公司",
+    dataIndex: "companyName",
+  },
+
+  {
+    title: "合作公司",
+    dataIndex: "parterCompanyName",
+    // scopedSlots: { customRender: "parterCompanyName" },
+  },
+  {
+    title: "报价数",
+
+    // scopedSlots: { customRender: "qutationCount" },
+    children: [
+      {
+        title: "总报价",
+        dataIndex: "allNumber",
+        scopedSlots: { customRender: "count" },
+      },
+      {
+        title: "报价成功",
+        dataIndex: "orderSuccessNumber",
+        scopedSlots: { customRender: "count" },
+      },
+      {
+        title: "报价失败",
+        dataIndex: "areaCompanyErrNumber",
+        scopedSlots: { customRender: "count" },
+      },
+    ],
+  },
+
+  {
+    title: "人工审核数",
+    dataIndex: "numberManual",
+    scopedSlots: { customRender: "count" },
+  },
+  {
+    title: "核保数",
+    dataIndex: "underwritingCount",
+    scopedSlots: { customRender: "count" },
+  },
+  {
+    title: "承保数",
+    dataIndex: "qutationInsureCount",
+    scopedSlots: { customRender: "count" },
+  },
+  {
+    title: "报价成功率",
+    dataIndex: "orderSuccessNumberRate",
+    scopedSlots: { customRender: "rate" },
+  },
+  {
+    title: "核保通过率",
+    dataIndex: "passRate",
+    scopedSlots: { customRender: "rate" },
+  },
+  {
+    title: "成交率",
+    dataIndex: "closeRate",
+    scopedSlots: { customRender: "rate" },
+
+    // scopedSlots: { customRender: "qutationCount" },
+  },
+  {
+    title: "承保率",
+    dataIndex: "contributionRate",
+    scopedSlots: { customRender: "rate" },
+
+    // scopedSlots: { customRender: "qutationCount" },
+  },
+];
+
+export default {
+  components: {
+    StandardTable,
+    tree,
+  },
+  //   mixins: [mixin],
+  data() {
+    return {
+      formState: {
+        whole: "",
+        cityId: "",
+        countyId: "",
+        houseId: "",
+        provinceId: "",
+        dateType: "",
+        time: [moment().format("YYYY-MM-DD"), moment().format("YYYY-MM-DD")],
+        beginDate: moment().format("YYYY-MM-DD"),
+        endDate: moment().format("YYYY-MM-DD"),
+      },
+      backLinePersonnel: {},
+      columns: columns,
+      companyList: [],
+      tableList: [],
+      pagination: {
+        current: 1,
+        defaultPageSize: 10,
+        total: 0,
+        pagesize0ptions: ["10", "20", "30", "50", "100"],
+        hideOnSinglePage: false,
+        showQuickJumper: true, //
+        showSizeChanger: true, //是否可以改变pagesize
+        showTotal: (total) => `共 ${total} 条数据`,
+      },
+      loading: false,
+      wholeList: [],
+      provinceList: [],
+      cityList: [],
+      areaList: [],
+      storeList: [],
+      treeData: [],
+      replaceFields: {
+        children: "children",
+        title: "userName",
+        key: "id",
+      },
+    };
+  },
+  mounted() {
+    this.getVerification();
+    this.getAgentTree();
+    // setTimeout(() => {
+    // }, 1000);
+  },
+  methods: {
+    // getAgentTree(id) {
+    //   this.$API.quote
+    //     .getAgentTree({
+    //       deptId: id ? id : "",
+    //       managementSource: 3,
+    //       // provinceId: this.formState.provinceId,
+    //       // cityId: this.formState.cityId,
+    //       // countyId: this.formState.countyId,
+    //       // houseId: this.formState.houseId,
+    //     })
+    //     .then((res) => {
+    //       if (res.data.code === 200) {
+    //         this.treeData = [...res.data.data];
+    //       }
+    //     });
+    // },
+    onChangeTime(val) {
+      // console.log(val);
+      this.formState.beginDate = val[0];
+      this.formState.endDate = val[1];
+      this.formState.dateType = undefined;
+      this.getVerification();
+    },
+    handleFinish() {
+      //
+    },
+
+    getVerification(id) {
+      this.loading = true;
+
+      this.$API.quote
+        .getQuoteList({
+          pageNum: this.pagination.current,
+          pageSize: this.pagination.defaultPageSize,
+          dateType: this.formState.dateType,
+          beginDate: this.formState.beginDate,
+          endDate: this.formState.endDate,
+          managementSource: 3,
+          deptId: id ? id : "",
+          // provinceId: this.formState.provinceId,
+          // cityId: this.formState.cityId,
+          // countyId: this.formState.countyId,
+          // houseId: this.formState.houseId,
+        })
+        .then((res) => {
+          if (res.data.code === 200) {
+            this.loading = false;
+            this.tableList = res.data.data.content;
+            this.pagination = {
+              current: res.data.data.pageNum,
+              defaultPageSize: res.data.data.pageSize,
+              total: res.data.data.totalSize,
+            };
+          }
+        })
+        .catch(() => {
+          this.loading = false;
+        });
+    },
+    onClear() {
+      this.$message.info("您清空了勾选的所有行");
+    },
+
+    onChange(pagination, filters, sorter, { currentDataSource }) {
+      // this.$message.info('表格状态改变了')
+      console.log(pagination, filters, sorter, { currentDataSource });
+      this.pagination = {
+        current: pagination.current,
+        defaultPageSize: pagination.pageSize,
+        total: pagination.total,
+      };
+      this.getVerification();
+    },
+  },
+};
+</script>
+  <style lang='less' scoped>
+.quote {
+  display: flex;
+  > div:first-child {
+    width: 17%;
+    background: #fff;
+    margin-right: 15px;
+  }
+  .quote-tree {
+    padding: 15px;
+    box-sizing: border-box;
+    //
+    > div:first-child {
+      border-bottom: 1px solid #f0f0f0;
+    }
+  }
+}
+.back-line-main {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  .back-line-header {
+    padding: 15px;
+    box-sizing: border-box;
+    .back-line-header-title {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding-bottom: 15px;
+      border-bottom: 1px solid #f0f0f0;
+      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-form {
+      display: flex;
+      > .ant-form-item {
+        flex: 1;
+        /deep/.ant-form-item-control-wrapper {
+          width: 100%;
+        }
+      }
+    }
+    .form-item-search {
+      // display: flex;
+      // justify-content: flex-end;
+      /deep/ .ant-form-item-control {
+        display: flex;
+        justify-content: flex-end;
+      }
+    }
+  }
+}
+</style>

+ 736 - 0
src/pages/task/dianxiao.vue

@@ -0,0 +1,736 @@
+<template>
+  <div class="back-line-main">
+    <div class="back-line-header">
+      <div class="back-line-header-title">
+        <h2>渠道数据</h2>
+        <div>
+          <span>时间筛选</span>
+          <a-range-picker
+            @change="onChangeTime"
+            v-model="formState.time"
+            valueFormat="YYYY-MM-DD"
+          >
+            <a-icon slot="suffixIcon" type="calendar" />
+          </a-range-picker>
+          <a-radio-group
+            default-value="0"
+            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="7"
+              @click="
+                (formState.time = []),
+                  (formState.beginDate = ''),
+                  (formState.endDate = '')
+              "
+            >
+              近7天
+            </a-radio-button>
+            <a-radio-button
+              value="30"
+              @click="
+                (formState.time = []),
+                  (formState.beginDate = ''),
+                  (formState.endDate = '')
+              "
+            >
+              近30天
+            </a-radio-button>
+          </a-radio-group>
+        </div>
+      </div>
+      <div>
+        <fromRow
+          :formState="formState"
+          @getList="getList"
+          :exportExcel="true"
+          @exportList="exportList"
+        ></fromRow>
+        <a-form layout="inline" :model="formState" class="users">
+          <a-form-item
+            label="业务员姓名"
+            :labelCol="{ span: 8 }"
+            :colon="false"
+          >
+            <a-input
+              placeholder="请输入业务员姓名"
+              v-model="formState.userName"
+              allowClear
+            ></a-input>
+          </a-form-item>
+          <a-form-item
+            label="业务员工号"
+            :labelCol="{ span: 8 }"
+            :colon="false"
+          >
+            <a-input
+              placeholder="请输入业务员工号"
+              v-model="formState.userId"
+              allowClear
+            ></a-input>
+          </a-form-item>
+
+          <a-form-item label="管理人" :labelCol="{ span: 5 }" :colon="false">
+            <a-select
+              placeholder="请选择"
+              v-model="formState.leaderId"
+              allowClear
+              show-search
+              :filter-option="filterOption"
+            >
+              <a-select-option
+                v-for="item in manageList"
+                :key="item.id"
+                :value="item.id"
+              >
+                {{ item.name }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </a-form>
+        <!-- <a-form-item label="管理人" :labelCol="{ span: 5 }" :colon="false">
+          <a-select
+            style="width: 300px"
+            placeholder="请选择"
+            v-model="formState.leaderId"
+            allowClear
+            show-search
+            :filter-option="filterOption"
+          >
+            <a-select-option
+              v-for="item in manageList"
+              :key="item.id"
+              :value="item.id"
+            >
+              {{ item.name }}
+            </a-select-option>
+          </a-select>
+        </a-form-item> -->
+      </div>
+    </div>
+    <div style="width: 100%">
+      <standard-table
+        bordered
+        :columns="columns"
+        :dataSource="tableList"
+        :pagination="pagination"
+        @change="onChange"
+        :loading="loading"
+        :scroll="{ x: 2200, y: 600 }"
+      >
+        <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>
+        <div slot="operation" slot-scope="{ record }">
+          <a-button type="link" @click="watchMessage(record)">详情</a-button>
+        </div>
+      </standard-table>
+    </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>
+</template>
+  
+  <script>
+import StandardTable from "@/components/table/StandardTable";
+import fromRow from "@/components/form/FormRow";
+import mixin from "../../minins/mixin";
+const columns = [
+  {
+    title: "二级机构",
+    dataIndex: "provinceName",
+  },
+  {
+    title: "三级机构",
+    dataIndex: "cityName",
+  },
+  {
+    title: "四级机构",
+    dataIndex: "districtName",
+  },
+  {
+    title: "五级机构",
+    dataIndex: "storeDeptName",
+  },
+  {
+    title: "归属机构",
+    dataIndex: "deptName",
+  },
+  {
+    title: "管理人",
+    dataIndex: "leaderName",
+  },
+  {
+    title: "联系电话",
+    dataIndex: "leaderMobile",
+  },
+
+  {
+    title: "业务员姓名",
+    dataIndex: "userName",
+  },
+  {
+    title: "业务员工号",
+    dataIndex: "userId",
+  },
+  {
+    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" },
+  },
+  {
+    title: "操作",
+    dataIndex: "operation",
+    fixed: "right",
+    width: 100,
+    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 manageminxin from "../../minins/manageMixin";
+import moment from "moment";
+export default {
+  components: {
+    StandardTable,
+    fromRow,
+  },
+  mixins: [mixin, manageminxin],
+  data() {
+    return {
+      formState: {
+        whole: undefined,
+        cityId: undefined,
+        countyId: undefined,
+        houseId: undefined,
+        provinceId: undefined,
+        days: undefined,
+        userId: undefined,
+        userName: undefined,
+        leaderId: undefined,
+        time: [moment().format("YYYY-MM-DD"), moment().format("YYYY-MM-DD")],
+        endDate: moment().format("YYYY-MM-DD"),
+        beginDate: moment().format("YYYY-MM-DD"),
+      },
+      visible: false,
+      headerStyle: {
+        display: "flex",
+        "align-items": "center",
+        "justify-content": "space-between",
+      },
+      backLinePersonnel: {},
+      columns: columns,
+      columns1: columns1,
+      companyList: [],
+      tableList: [],
+      pagination: {
+        current: 1,
+        defaultPageSize: 10,
+        total: 0,
+        pagesize0ptions: ["10", "20", "30", "50", "100"],
+        hideOnSinglePage: false,
+        showQuickJumper: true, //
+        showSizeChanger: true, //是否可以改变pagesize
+        showTotal: (total) => `共 ${total} 条数据`,
+      },
+      loading: false,
+      wholeList: [],
+      provinceList: [],
+      cityList: [],
+      areaList: [],
+      storeList: [],
+      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: {
+    "formState.days"() {
+      this.getList();
+    },
+  },
+  mounted() {
+    this.getList();
+    // setTimeout(() => {
+
+    // }, 1000);
+  },
+  methods: {
+    filterOption(input, option) {
+      return (
+        option.componentOptions.children[0].text
+          .toLowerCase()
+          .indexOf(input.toLowerCase()) >= 0
+      );
+    },
+    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,
+          beginDate: this.formState.beginDate,
+
+          endDate: this.formState.endDate,
+        })
+        .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() {
+      delete this.formState.time;
+      this.$API.task
+        .exportChannelList({
+          ...this.formState,
+        })
+        .then((res) => {
+          if (res.data.code == 200) {
+            let url = this.process + res.data.data; // 3.创建一个临时的url指向blob对象
+            let a = document.createElement("a");
+            a.href = url;
+            a.download = "导出文件.xlsx";
+            a.click();
+            window.URL.revokeObjectURL(url);
+          } else {
+            this.$message.error(res.msg);
+          }
+        });
+    },
+    getList(val) {
+      this.loading = true;
+      this.$API.task
+        .getQueryPageElectric({
+          pageNum: this.pagination.current,
+          pageSize: this.pagination.defaultPageSize,
+          ...this.formState,
+          ...val,
+        })
+        .then((res) => {
+          if (res.data.code === 200) {
+            this.loading = false;
+            this.tableList = res.data.data.records;
+            this.pagination = {
+              current: res.data.data.current,
+              defaultPageSize: res.data.data.size,
+              total: res.data.data.total,
+            };
+          } else {
+            this.loading = false;
+            this.tableList = [];
+            this.pagination.total = 0;
+          }
+        });
+    },
+    onClear() {
+      this.$message.info("您清空了勾选的所有行");
+    },
+    onChangeTime(val) {
+      // console.log(val);
+      this.formState.beginDate = val[0];
+      this.formState.endDate = val[1];
+      this.formState.days = undefined;
+      this.getList();
+    },
+
+    onChange(pagination) {
+      // this.$message.info('表格状态改变了')
+
+      this.pagination = {
+        current: pagination.current,
+        defaultPageSize: pagination.pageSize,
+        total: pagination.total,
+      };
+      this.getList();
+    },
+    detailsChange(pageInfo) {
+      this.pageInfo = {
+        current: pageInfo.current,
+        defaultPageSize: pageInfo.pageSize,
+        total: pageInfo.total,
+      };
+      this.getDetailsList(this.detailsObj);
+    },
+  },
+};
+</script>
+  <style lang='less' scoped>
+.back-line-main {
+  display: flex;
+  flex-direction: column;
+  .back-line-header {
+    padding: 15px;
+    box-sizing: border-box;
+    .back-line-header-title {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding-bottom: 15px;
+      border-bottom: 1px solid #f0f0f0;
+      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;
+    .users.ant-form {
+      display: flex;
+      > .ant-form-item {
+        flex: none;
+        width: 15.7%;
+        /deep/.ant-form-item-control-wrapper {
+          width: 100%;
+        }
+      }
+    }
+    .ant-form {
+      display: flex;
+      > .ant-form-item {
+        flex: 1;
+        /deep/.ant-form-item-control-wrapper {
+          width: 100%;
+        }
+      }
+    }
+    .form-item-search {
+      // display: flex;
+      // justify-content: flex-end;
+      /deep/ .ant-form-item-control {
+        display: flex;
+        justify-content: flex-end;
+      }
+    }
+  }
+}
+/deep/.ant-drawer-title {
+  width: 100%;
+}
+/deep/.custom-title {
+  display: flex;
+  > i {
+    cursor: pointer;
+  }
+}
+
+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>

+ 7 - 0
src/pages/task/insurance.vue

@@ -321,6 +321,13 @@ export default {
       // console.log(this.companyPage.page);
     },
     chooseInsurer(item) {
+      if (this.companyId == item.insuranceCompanyId) {
+        this.companyId = "";
+        this.pagination.current = 1;
+        this.pagination.defaultPageSize = 10;
+        this.getBackLinePersonnel();
+        return;
+      }
       this.companyId = item.insuranceCompanyId;
       //   // console.log(item,this.companyId)
       this.getBackLinePersonnel();

+ 533 - 0
src/pages/wallet/sales.vue

@@ -0,0 +1,533 @@
+<template>
+  <div class="quote">
+    <div class="quote-tree">
+      <div style="overflow-y: auto">
+        <!-- <a-tree  :tree-data="treeData" /> -->
+        <!-- <tree @getList="treeChoose"></tree> -->
+        <a-tree
+          :tree-data="treeData"
+          :replaceFields="replaceFields"
+          :title="'1'"
+          @select="treeChoose"
+        />
+      </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" :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>代理人:</p> -->
+
+                <p>归属:{{ item.deptName }}</p>
+
+                <p>
+                  <span>总收入:{{ item.totalIncome || 0 }}</span>
+                </p>
+                <p>
+                  <span>已提现:{{ item.withdrawn || 0 }}</span>
+                </p>
+                <p>
+                  <span>提现中:{{ item.withdrawingAmount || 0 }}</span>
+                </p>
+                <p>
+                  <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",
+      },
+    };
+  },
+  watch: {
+    "formState.days"() {
+      this.getList();
+    },
+  },
+  mounted() {
+    this.getAgencyList();
+    // setTimeout(() => {
+    // }, 1000);
+    this.getRole();
+  },
+  methods: {
+    getList(id) {
+      this.pageInfo.pageNum = 1;
+      this.pageInfo.pageSize = 12;
+      this.getAgencyList(id);
+    },
+    numberToChinese(num) {
+      const chineseNumbers = [
+        "一",
+        "二",
+        "三",
+        "四",
+        "五",
+        "六",
+        "七",
+        "八",
+        "九",
+      ];
+      return chineseNumbers[num - 1]; // 假设num是1到9的数字
+    },
+    getRole() {
+      this.$API.wallet
+        .getSysDeptTree({
+          sysType: 2,
+        })
+        .then((res) => {
+          if (res.data.code === 200) {
+            this.treeData = [...res.data.data];
+          }
+        });
+    },
+
+    treeChoose(id) {
+      this.pageInfo.pageNum = 1;
+      this.pageInfo.pageSize = 12;
+
+      this.getList(id[0]);
+    },
+
+    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(id) {
+      this.loading = true;
+
+      this.$API.wallet
+        .getAalletAgent({
+          pageNum: this.pageInfo.pageNum,
+          pageSize: this.pageInfo.pageSize,
+          managementSource: 3,
+          deptId: id || "",
+          ...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;
+      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: #fff;
+      // 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: 100%;
+      // position: absolute;
+      top: 12px;
+      right: 15px;
+      // border-radius: 50%;
+      padding-bottom: 10px;
+      box-sizing: border-box;
+      // overflow: hidden;
+      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: rgba(211, 32, 41, 0.05);
+    box-shadow: 0px 2px 8px 0px rgba(211, 32, 41, 0.15);
+    border-radius: 8px 8px 8px 8px;
+    border: 1px solid rgba(211, 32, 41, 0.5);
+    > 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>

+ 7 - 1
src/services/business.js

@@ -34,6 +34,11 @@ export async function findNextAgentTree(data) {
 export async function findAgentChanellTree(data) {
     return request("/dept/getUserDeptTree", METHOD.POST, data)
 }
+//业务数据保险公司添加总计
+export async function getCountBusinessData(data) {
+    return request("/taskStatistics/getCountBusinessData", METHOD.POST, data)
+}
+
 
 
 
@@ -47,5 +52,6 @@ export default {
     getUserTree,
     getBusinessAgentTotalDetails,
     findNextAgentTree,
-    findAgentChanellTree
+    findAgentChanellTree,
+    getCountBusinessData
 }

+ 9 - 1
src/services/task.js

@@ -46,6 +46,13 @@ export async function getChannelAgentDetails(data) {
     )
 }
 
+//电销数据
+export async function getQueryPageElectric(data) {
+    return request("/taskStatistics/queryPageElectric", METHOD.POST, data,
+
+    )
+}
+
 
 
 
@@ -58,5 +65,6 @@ export default {
     exportChannelList,
     exportAgentlList,
     exportInsurancelList,
-    getChannelAgentDetails
+    getChannelAgentDetails,
+    getQueryPageElectric
 }