Просмотр исходного кода

fix:面包屑更改及添加详情

刘恒 2 лет назад
Родитель
Сommit
ca25865b81

+ 32 - 4
src/layouts/header/AdminHeader.vue

@@ -12,15 +12,24 @@
       <a-divider v-if="isMobile" type="vertical" />
       <div class="breadcrumb">
         <a-breadcrumb>
-          <a-breadcrumb-item :key="index" v-for="(item, index) in breadcrumb">
+          <a-breadcrumb-item
+            :key="index"
+            v-for="(item, index) in breadcrumb"
+            v-show="item.path != '/'"
+          >
             <!-- {{ item.path }} -->
+
+            <!-- <div style="display: flex; flex-wrap: wrap"> -->
             <router-link
               v-if="item.path == '/channel'"
               :to="'/personnelManage' + item.path"
               >{{ item.name }}</router-link
             >
-
-            <router-link v-else :to="item.path">{{ item.name }}</router-link>
+            <router-link
+              v-else
+              :to="countCharacter(item.path, '/') > 2 ? item.path : ''"
+              >{{ item.name }}</router-link
+            >
           </a-breadcrumb-item>
         </a-breadcrumb>
       </div>
@@ -133,6 +142,9 @@ export default {
     },
   },
   methods: {
+    countCharacter(str, charToCount) {
+      return str.split(charToCount).length - 1;
+    },
     toggleCollapse() {
       this.$emit("toggleCollapse");
     },
@@ -149,7 +161,7 @@ export default {
         .filter((item) => path.includes(item.path))
         .forEach((route) => {
           const path = route.path;
-
+          console.log(route.name);
           if (route.name == "保费详情") {
             switch (path.split("/message")[0]) {
               case "/business/sales":
@@ -172,6 +184,22 @@ export default {
                 break;
             }
           }
+          if (route.name == "团队管理") {
+            switch (path.split("/teammanage")[0]) {
+              case "/personnelManage/front/personnel":
+                breadcrumb.push({
+                  path: path.split("/teammanage")[0],
+                  name: "代理人统计",
+                });
+                break;
+              case "/personnelManage/front/resources":
+                breadcrumb.push({
+                  path: path.split("/teammanage")[0],
+                  name: "人力达标",
+                });
+                break;
+            }
+          }
 
           breadcrumb.push({ path: path, name: route.name });
         });

+ 31 - 6
src/pages/personnelManage/channel/message.vue

@@ -115,7 +115,15 @@
             {{ item.userName }}
           </div>
           <p>
-            <a-button type="primary" @click="openDrawer(item)">详情</a-button>
+            <a-button type="primary" @click="taskMessage(item)"
+              >任务数据</a-button
+            >
+            <a-button type="primary" @click="orderMessage(item)"
+              >订单数据</a-button
+            >
+            <a-button type="primary" @click="openDrawer(item)"
+              >考核数据</a-button
+            >
           </p>
         </div>
       </div>
@@ -226,6 +234,23 @@ export default {
     handleFinish() {
       //
     },
+    taskMessage(item) {
+      this.$router.push({
+        path: "/personnelManage/channel/task",
+        query: {
+          userId: item.userId,
+        },
+      });
+    },
+    orderMessage(item) {
+      this.$router.push({
+        path: "/personnelManage/channel/order",
+        query: {
+          userId: item.userId,
+        },
+      });
+    },
+
     openDrawer(item) {
       // item
       this.visible = true;
@@ -401,11 +426,11 @@ export default {
           display: flex;
           justify-content: space-between;
         }
-        p:last-child {
-          margin: 0;
-          justify-content: flex-end;
-          // text-align: right;
-        }
+        // p:last-child {
+        //   margin: 0;
+        //   justify-content: ;
+        //   // text-align: right;
+        // }
         div {
           width: 56px;
           height: 56px;

+ 592 - 0
src/pages/personnelManage/channel/order.vue

@@ -0,0 +1,592 @@
+<template>
+  <div class="quote">
+    <!-- <div class="quote-tree" style="border-radius: 8px">
+      <div><h2>部门所属</h2></div>
+      <div>
+        
+        <tree @getList="getVerification"></tree>
+      </div>
+    </div> -->
+    <div class="back-line-main">
+      <div class="back-line-header" v-show="mode == 'big'">
+        <div class="back-line-header-title">
+          <h2>合计</h2>
+          <div>
+            <dl>
+              <dt><img src="../../../assets/img/car.png" alt="" /></dt>
+              <dd>
+                <span>车辆数</span>
+                <span>{{ BigOrder.frameno }}</span>
+              </dd>
+            </dl>
+            <dl>
+              <dt><img src="../../../assets/img/order.png" alt="" /></dt>
+              <dd>
+                <span>订单数数</span>
+                <span>{{ BigOrder.orderNumber || 0 }}</span>
+              </dd>
+            </dl>
+            <dl>
+              <dt><img src="../../../assets/img/orderMoney.png" alt="" /></dt>
+              <dd>
+                <span>成交率</span>
+                <span>
+                  {{
+                    BigOrder.closeRate
+                      ? (BigOrder.closeRate * 100).toFixed(2) + "%"
+                      : 0
+                  }}
+                </span>
+              </dd>
+            </dl>
+          </div>
+        </div>
+      </div>
+      <div style="background-color: #fff; margin-top: 15px">
+        <div class="table-title">
+          <h2>总报价</h2>
+          <div>
+            <a-radio-group v-model="mode" :style="{ marginBottom: '8px' }">
+              <a-radio-button value="big"> 大订单 </a-radio-button>
+              <a-radio-button value="smill"> 小订单 </a-radio-button>
+            </a-radio-group>
+            <span>时间筛选</span>
+            <a-range-picker
+              @change="onChangeTime"
+              v-model="formState.time"
+              value-format="YYYY-MM-DD"
+              style="margin-left: 10px"
+            >
+              <a-icon slot="suffixIcon" type="calendar" />
+            </a-range-picker>
+            <a-radio-group
+              default-value="0"
+              button-style="solid"
+              v-model="formState.dateType"
+              @change="getVerification()"
+              style="margin-left: 10px"
+            >
+              <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>
+        <a-form
+          v-show="mode == 'big'"
+          layout="inline"
+          :class="className"
+          :model="formState"
+          style="padding: 0 0 0 15px; box-sizing: border-box"
+        >
+          <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: 8 }"
+            :colon="false"
+          >
+            <a-input
+              placeholder="请输入业务员姓名"
+              v-model="formState.userName"
+              allowClear
+            ></a-input>
+          </a-form-item>
+          <a-form-item label="手机号" :labelCol="{ span: 5 }" :colon="false">
+            <a-input
+              placeholder="请输入手机号"
+              v-model="formState.mobile"
+              allowClear
+            ></a-input>
+          </a-form-item>
+          <a-form-item label="车牌号" :labelCol="{ span: 5 }" :colon="false">
+            <a-input
+              placeholder="请输入车牌号"
+              v-model="formState.licenseno"
+              allowClear
+            ></a-input>
+          </a-form-item>
+          <a-form-item label="车架号" :labelCol="{ span: 5 }" :colon="false">
+            <a-input
+              placeholder="请输入车架号"
+              v-model="formState.frameno"
+              allowClear
+            ></a-input>
+          </a-form-item>
+        </a-form>
+        <div
+          v-show="mode == 'big'"
+          style="
+            display: flex;
+            justify-content: flex-end;
+            padding-right: 15px;
+            box-sizing: border-box;
+          "
+        >
+          <a-button type="primary" @click="getList">查询</a-button>
+        </div>
+        <standard-table
+          v-show="mode == 'big'"
+          bordered
+          :columns="columns"
+          :dataSource="tableList"
+          :pagination="pagination"
+          @clear="onClear"
+          @change="onChange"
+          :loading="loading"
+        >
+          <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>
+        <standard-table
+          v-show="mode != 'big'"
+          bordered
+          :columns="columns1"
+          :dataSource="tableList"
+          :pagination="pagination"
+          @clear="onClear"
+          @change="onChange"
+          :loading="loading"
+        >
+          <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: "licenseno",
+  },
+
+  {
+    title: "车架号",
+    dataIndex: "frameno",
+    // scopedSlots: { customRender: "parterCompanyName" },
+  },
+
+  {
+    title: "订单数量",
+    dataIndex: "orderNumber",
+  },
+  {
+    title: "成交率",
+    dataIndex: "closeRate",
+    scopedSlots: { customRender: "rate" },
+  },
+  {
+    title: "承保公司",
+    dataIndex: "namesimple",
+  },
+];
+const columns1 = [
+  {
+    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: {
+        dateType: undefined,
+        time: [moment().format("YYYY-MM-DD"), moment().format("YYYY-MM-DD")],
+        beginDate: moment().format("YYYY-MM-DD"),
+        endDate: moment().format("YYYY-MM-DD"),
+        licenseno: "",
+        userName: "",
+        mobile: "",
+        frameno: "",
+        userId: "",
+      },
+      mode: "big",
+      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: [],
+      treeData: [
+        { title: "Expand to load", key: "0" },
+        { title: "Expand to load", key: "1" },
+        { title: "Tree Node", key: "2", isLeaf: true },
+      ],
+      BigOrder: {},
+    };
+  },
+  watch: {
+    mode() {
+      this.getVerification();
+    },
+  },
+  mounted() {
+    this.getVerification();
+    // setTimeout(() => {
+    // }, 1000);
+  },
+  methods: {
+    getList() {
+      this.pagination.current = 1;
+      this.pagination.defaultPageSize = 10;
+      this.getVerification();
+    },
+    onChangeTime(val) {
+      // console.log(val);
+      this.formState.beginDate = val[0];
+      this.formState.endDate = val[1];
+      this.formState.dateType = undefined;
+      this.getVerification();
+    },
+    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);
+    },
+
+    async getVerification() {
+      this.loading = true;
+
+      if (this.mode != "big") {
+        this.$API.quote
+          .getQuoteList({
+            pageNum: this.pagination.current,
+            pageSize: this.pagination.defaultPageSize,
+            dateType: this.formState.dateType,
+            beginDate: this.formState.beginDate,
+            endDate: this.formState.endDate,
+            userId: this.$route.query.userId,
+          })
+          .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,
+              };
+            }
+          });
+      } else {
+        this.$API.quote
+          .getBigOrderList({
+            pageNum: this.pagination.current,
+            pageSize: this.pagination.defaultPageSize,
+            ...this.formState,
+            userId: this.$route.query.userId,
+          })
+          .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,
+              };
+            }
+          });
+        this.$API.quote
+          .getBigOrderMount({
+            ...this.formState,
+            userId: this.$route.query.userId,
+          })
+          .then((res) => {
+            if (res.data.code === 200) {
+              console.log(res);
+              this.BigOrder = { ...res.data.data };
+            }
+          });
+      }
+    },
+    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: 20%;
+    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 {
+      padding: 15px;
+      box-sizing: border-box;
+      background: #ffffff;
+      box-shadow: 0px 2px 8px 0px rgba(141, 149, 176, 0.15);
+      border-radius: 8px 8px 8px 8px;
+      border: 2px solid rgba(255, 255, 255, 0.2);
+      h2 {
+        margin: 0;
+      }
+      > div {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        > dl {
+          flex: none;
+          width: 271px;
+          height: 61px;
+          display: flex;
+          align-items: center;
+          background: linear-gradient(
+            267deg,
+            rgba(42, 85, 229, 0.1) 0%,
+            rgba(42, 85, 229, 0) 100%
+          );
+          box-shadow: 0px 2px 8px 0px rgba(42, 85, 229, 0.1);
+          border-radius: 4px 4px 4px 4px;
+          border: 1px solid #ffffff;
+
+          img {
+            width: 44px;
+            height: auto;
+          }
+          > dd {
+            display: flex;
+            align-items: center;
+            margin: 0;
+            font-family: PingFang SC, PingFang SC;
+            font-weight: 500;
+            font-size: 18px;
+            color: rgba(0, 0, 0, 0.85);
+            padding-left: 15px;
+            box-sizing: border-box;
+          }
+        }
+      }
+      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;
+      }
+    }
+  }
+  .table-title {
+    padding: 15px 15px 0;
+    box-sizing: border-box;
+    display: flex;
+    align-items: center;
+    h2 {
+      margin: 0;
+    }
+    > div {
+      flex: 1;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+      /deep/.ant-radio-group {
+        margin-bottom: 0 !important;
+        margin-right: 10px;
+      }
+    }
+  }
+}
+</style>

+ 360 - 0
src/pages/personnelManage/channel/task.vue

@@ -0,0 +1,360 @@
+<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>
+      <fromRow
+        :formState="formState"
+        @getList="getList"
+        :exportExcel="true"
+        @exportList="exportList"
+      ></fromRow>
+    </div>
+    <standard-table
+      bordered
+      :columns="columns"
+      :dataSource="tableList"
+      :pagination="pagination"
+      @clear="onClear"
+      @change="onChange"
+      :loading="loading"
+    >
+      <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>
+  </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: "deptName",
+  },
+  {
+    title: "业务员姓名",
+    dataIndex: "userName",
+  },
+  {
+    title: "业务员工号",
+    dataIndex: "userId",
+  },
+  {
+    title: "报价中",
+    dataIndex: "qutationCount",
+    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" },
+  },
+  {
+    // title: "核保通过率",
+    dataIndex: "contributionRate",
+    scopedSlots: { title: "title_slot3", customRender: "quotationRate" },
+  },
+];
+import moment from "moment";
+export default {
+  components: {
+    StandardTable,
+    fromRow,
+  },
+  mixins: [mixin],
+  data() {
+    return {
+      formState: {
+        whole: undefined,
+        cityId: undefined,
+        countyId: undefined,
+        houseId: undefined,
+        provinceId: undefined,
+        days: undefined,
+        time: [moment().format("YYYY-MM-DD"), moment().format("YYYY-MM-DD")],
+        endDate: moment().format("YYYY-MM-DD"),
+        beginDate: 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: [],
+      process: process.env.VUE_APP_API_BASE_URL,
+    };
+  },
+  watch: {
+    "formState.days"() {
+      this.getList();
+    },
+  },
+  mounted() {
+    this.getList();
+    // setTimeout(() => {
+
+    // }, 1000);
+  },
+  methods: {
+    handleFinish() {
+      //
+    },
+    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
+        .getTaskStatistics({
+          pageNum: this.pagination.current,
+          pageSize: this.pagination.defaultPageSize,
+          ...this.formState,
+          ...val,
+          userId: this.$route.query.userId,
+        })
+        .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,
+            };
+          }
+        });
+    },
+    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, filters, sorter, { currentDataSource }) {
+      // this.$message.info('表格状态改变了')
+      console.log(pagination, filters, sorter, { currentDataSource });
+      this.pagination = {
+        current: pagination.current,
+        defaultPageSize: pagination.pageSize,
+        total: pagination.total,
+      };
+      this.getList();
+    },
+  },
+};
+</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;
+    .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>

+ 398 - 0
src/pages/personnelManage/front/order.vue

@@ -0,0 +1,398 @@
+<template>
+  <div class="quote">
+    <!-- <div class="quote-tree">
+      <div><h2>部门所属</h2></div>
+      <div>
+      
+        <tree @getList="getAgentTree"></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; flex: 1">
+        <!-- <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: 0 }"
+        >
+          <div slot="count" slot-scope="{ text }">
+            {{ text ? text + "次" : 0 }}
+          </div>
+          <div slot="rate" slot-scope="{ text }">
+            {{ text ? (text * 100).toFixed(2) + "%" : 0 }}
+          </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>
+          <span slot="title_slot4">
+            承保率
+            <a-tooltip
+              placement="topLeft"
+              title="承保数 / 报价数"
+              arrow-point-at-center
+            >
+              <a-icon type="question-circle" />
+            </a-tooltip>
+          </span>
+        </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: { title: "title_slot", customRender: "rate" },
+  },
+  {
+    // title: "核保通过率",
+    dataIndex: "passRate",
+
+    scopedSlots: { title: "title_slot2", customRender: "rate" },
+  },
+  {
+    // title: "成交率",
+    dataIndex: "closeRate",
+
+    scopedSlots: { title: "title_slot3", customRender: "rate" },
+  },
+  {
+    // title: "承保率",
+    dataIndex: "contributionRate",
+
+    scopedSlots: { title: "title_slot4", customRender: "rate" },
+  },
+];
+
+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();
+
+    // setTimeout(() => {
+    // }, 1000);
+  },
+  methods: {
+    onChangeTime(val) {
+      // console.log(val);
+      this.formState.beginDate = val[0];
+      this.formState.endDate = val[1];
+      this.formState.dateType = undefined;
+      this.getVerification();
+    },
+    handleFinish() {
+      //
+    },
+
+    getVerification() {
+      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: 1,
+          userId: this.$route.query.userId,
+          // 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,
+            };
+          }
+        });
+    },
+    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;
+    }
+    .tree {
+      scrollbar-width: thin;
+    }
+  }
+}
+.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;
+    .standard-table {
+      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;
+      }
+    }
+  }
+}
+</style>

+ 4 - 2
src/pages/personnelManage/front/personnel.vue

@@ -35,8 +35,10 @@
         <a-row class="personnel-message">
           <a-col v-for="(item, index) in list" :key="item.userId" :span="5">
             <div :class="Math.floor((index / 3) % 2) ? 'list-2' : 'list-1'">
-              <p>姓名:{{ item.name }}</p>
+              <p>员工工号:{{ item.userId }}</p>
+              <p>联系方式:{{ item.mobile }}</p>
               <p>机构归属:{{ item.deptName }}</p>
+              <p>管理人名称:{{ item.leaderName }}</p>
               <p>
                 <span>总人力:{{ item.totalManpower || 0 }}</span>
                 <span>出单人力:{{ item.orderManpower || 0 }}</span>
@@ -366,7 +368,7 @@ export default {
       // item
       // console.log(this.$route)
       this.$router.push({
-        path: "/personnelManage/front/teammanage",
+        path: "/personnelManage/front/personnel/teammanage",
         query: {
           userId: item.userId,
           totalManpower: item.totalManpower,

+ 1 - 1
src/pages/personnelManage/front/resources.vue

@@ -241,7 +241,7 @@ export default {
       // item
       // console.log(this.$route)
       this.$router.push({
-        path: "/personnelManage/front/teammanage",
+        path: "/personnelManage/front/resources/teammanage",
         query: {
           userId: item.userId,
           totalManpower: item.totalManpower,

+ 360 - 0
src/pages/personnelManage/front/task.vue

@@ -0,0 +1,360 @@
+<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>
+      <fromRow
+        :formState="formState"
+        @getList="getList"
+        :exportExcel="true"
+        @exportList="exportList"
+      ></fromRow>
+    </div>
+    <standard-table
+      bordered
+      :columns="columns"
+      :dataSource="tableList"
+      :pagination="pagination"
+      @clear="onClear"
+      @change="onChange"
+      :loading="loading"
+    >
+      <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>
+  </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: "deptName",
+  },
+  {
+    title: "业务员姓名",
+    dataIndex: "userName",
+  },
+  {
+    title: "业务员工号",
+    dataIndex: "userId",
+  },
+  {
+    title: "报价中",
+    dataIndex: "qutationCount",
+    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" },
+  },
+  {
+    // title: "核保通过率",
+    dataIndex: "contributionRate",
+    scopedSlots: { title: "title_slot3", customRender: "quotationRate" },
+  },
+];
+import moment from "moment";
+export default {
+  components: {
+    StandardTable,
+    fromRow,
+  },
+  mixins: [mixin],
+  data() {
+    return {
+      formState: {
+        whole: undefined,
+        cityId: undefined,
+        countyId: undefined,
+        houseId: undefined,
+        provinceId: undefined,
+        days: undefined,
+        time: [moment().format("YYYY-MM-DD"), moment().format("YYYY-MM-DD")],
+        endDate: moment().format("YYYY-MM-DD"),
+        beginDate: 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: [],
+      process: process.env.VUE_APP_API_BASE_URL,
+    };
+  },
+  watch: {
+    "formState.days"() {
+      this.getList();
+    },
+  },
+  mounted() {
+    this.getList();
+    // setTimeout(() => {
+
+    // }, 1000);
+  },
+  methods: {
+    handleFinish() {
+      //
+    },
+    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
+        .getAgentList({
+          pageNum: this.pagination.current,
+          pageSize: this.pagination.defaultPageSize,
+          ...this.formState,
+          ...val,
+          userId: this.$route.query.userId,
+        })
+        .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,
+            };
+          }
+        });
+    },
+    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, filters, sorter, { currentDataSource }) {
+      // this.$message.info('表格状态改变了')
+      console.log(pagination, filters, sorter, { currentDataSource });
+      this.pagination = {
+        current: pagination.current,
+        defaultPageSize: pagination.pageSize,
+        total: pagination.total,
+      };
+      this.getList();
+    },
+  },
+};
+</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;
+    .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>

+ 26 - 7
src/pages/personnelManage/front/teammanage.vue

@@ -101,6 +101,12 @@
                 {{ item.userName }}
               </div>
               <p>
+                <a-button type="primary" @click="taskMessage(item)"
+                  >任务数据</a-button
+                >
+                <a-button type="primary" @click="orderMessage(item)"
+                  >订单数据</a-button
+                >
                 <a-button type="primary" @click="openDrawer(item)"
                   >详情</a-button
                 >
@@ -245,8 +251,21 @@ export default {
     this.getList();
   },
   methods: {
-    handleFinish() {
-      //
+    taskMessage(item) {
+      this.$router.push({
+        path: "/personnelManage/front/task",
+        query: {
+          userId: item.userId,
+        },
+      });
+    },
+    orderMessage(item) {
+      this.$router.push({
+        path: "/personnelManage/front/order",
+        query: {
+          userId: item.userId,
+        },
+      });
     },
     openDrawer(item) {
       // item
@@ -428,11 +447,11 @@ export default {
             display: flex;
             justify-content: space-between;
           }
-          p:last-child {
-            margin: 0;
-            justify-content: flex-end;
-            // text-align: right;
-          }
+          // p:last-child {
+          //   margin: 0;
+          //   justify-content: flex-end;
+          //   // text-align: right;
+          // }
           div {
             width: 56px;
             height: 56px;

+ 0 - 4
src/pages/quote/smallorders/quote.vue

@@ -262,10 +262,6 @@ export default {
           dateType: this.formState.dateType,
           beginDate: this.formState.beginDate,
           endDate: this.formState.endDate,
-          // provinceId: this.formState.provinceId,
-          // cityId: this.formState.cityId,
-          // countyId: this.formState.countyId,
-          // houseId: this.formState.houseId,
         })
         .then((res) => {
           if (res.data.code === 200) {

+ 51 - 42
src/pages/sales/index.vue

@@ -67,17 +67,20 @@
           :model="formState"
           style="padding: 15px; box-sizing: border-box"
         >
-          <a-form-item label="姓名" :colon="false">
-            <a-input
-              placeholder="请输入姓名"
-              v-model="formState.userName"
-              allowClear
-              style="width: 200px"
-            ></a-input>
+          <a-form-item label="组别" :colon="false">
+            <a-select style="width: 200px" placeholder="请选择">
+              <a-select-option
+                v-for="item in groupList"
+                :key="item.deptId"
+                :value="item.deptId"
+              >
+                {{ item.deptName }}
+              </a-select-option>
+            </a-select>
           </a-form-item>
-          <a-form-item label="工号" :colon="false">
+          <a-form-item label="组员" :colon="false">
             <a-input
-              placeholder="请输入工号"
+              placeholder="请输入组员"
               v-model="formState.userId"
               style="width: 200px"
               allowClear
@@ -117,7 +120,7 @@
   </div>
 </template>
           
-  <script>
+<script>
 import StandardTable from "@/components/table/StandardTable";
 // import mixin from "../../minins/mixin";
 import tree from "@/components/tree/tree";
@@ -125,35 +128,39 @@ import moment from "moment";
 
 const columns = [
   {
-    title: "姓名",
-    dataIndex: "userName",
+    title: "组别",
+    dataIndex: "groupName",
   },
 
   {
-    title: "工号",
-    dataIndex: "userId",
+    title: "组员",
+    dataIndex: "userName",
     // scopedSlots: { customRender: "parterCompanyName" },
   },
 
   {
-    title: "签单保费",
-    dataIndex: "sumPremium",
+    title: "呼出时长(分钟)",
+    dataIndex: "exhaleDuration",
+  },
+  {
+    title: "呼出数量",
+    dataIndex: "outgoingCallsNumber",
   },
   {
-    title: "交强险保费",
-    dataIndex: "jqpremium",
+    title: "接通数量",
+    dataIndex: "connectionsNumber",
   },
   {
-    title: "车船税",
-    dataIndex: "taxamount",
+    title: "输出成功率",
+    dataIndex: "callSuccessRate",
   },
   {
-    title: "商业险保费",
-    dataIndex: "sypremium",
+    title: "添加微信人数",
+    dataIndex: "wxCount",
   },
   {
-    title: "非车险保费",
-    dataIndex: "jypremium",
+    title: "添加企业微信人数",
+    dataIndex: "qywxCount",
   },
   {
     title: "操作",
@@ -176,8 +183,8 @@ export default {
         createtimeStart: moment().format("YYYY-MM-DD"),
         createtimeEnd: moment().format("YYYY-MM-DD"),
         userName: "",
-        userId: "",
-        treeUserId: "",
+        groupId: "",
+        deptId: "",
       },
       backLinePersonnel: {},
       columns: columns,
@@ -205,6 +212,7 @@ export default {
         { title: "Tree Node", key: "2", isLeaf: true },
       ],
       amount: {},
+      groupList: [],
     };
   },
   mounted() {
@@ -213,8 +221,20 @@ export default {
     // }, 1000);
   },
   methods: {
+    getGroupList() {
+      this.$API.sales
+        .getSalesGroupList({
+          deptId: this.formState.deptId,
+        })
+        .then((res) => {
+          if (res.data.code === 200) {
+            this.groupList = [...res.data.data];
+          }
+        });
+    },
     chooseUser(val) {
-      this.formState.treeUserId = val;
+      this.formState.deptId = val;
+      this.getGroupList();
       this.getVerification();
     },
     getList() {
@@ -248,12 +268,11 @@ export default {
     async getVerification() {
       this.loading = true;
 
-      this.$API.business
-        .getBusinessAgentList({
+      this.$API.sales
+        .getSalesList({
           pageNum: this.pagination.current,
           pageSize: this.pagination.defaultPageSize,
           ...this.formState,
-          managementSource: 2,
         })
         .then((res) => {
           if (res.data.code === 200) {
@@ -266,16 +285,6 @@ export default {
             };
           }
         });
-      this.$API.business
-        .getBusinessAgentTotalList({
-          ...this.formState,
-          managementSource: 2,
-        })
-        .then((res) => {
-          if (res.data.code === 200) {
-            this.amount = { ...res.data.data };
-          }
-        });
     },
     onClear() {
       this.$message.info("您清空了勾选的所有行");
@@ -294,7 +303,7 @@ export default {
   },
 };
 </script>
-  <style lang='less' scoped>
+<style lang='less' scoped>
 .quote {
   display: flex;
   > div:first-child {
@@ -439,6 +448,6 @@ export default {
   box-sizing: border-box;
 }
 .ant-form-item {
-  display: flex;
+  // display: flex;
 }
 </style>

+ 57 - 8
src/router/config.js

@@ -30,15 +30,50 @@ const router = new Router({
           hidden: true,
           component: () => import('@/pages/financial/receivablesMessage'),
         },
-        // {
-        //   path: '/personnelManage/channel',
-        //   name: '渠道',
-        //   hidden: true,
-        //   component: () => import('@/pages/personnelManage/channel'),
-        //   children: [
+        {
+          path: '/',
+          name: '代理人统计',
+          component: PageView,
+          children: [
+            {
+              path: '/personnelManage/front/personnel/teammanage',
+              name: '团队管理',
+              hidden: true,
+              component: () => import('@/pages/personnelManage/front/teammanage'),
+
+            },
+            {
+              path: '/personnelManage/front/task',
+              name: '任务数据',
+              hidden: true,
+              component: () => import('@/pages/personnelManage/front/task'),
+
+            },
+            {
+              path: '/personnelManage/front/order',
+              name: '订单数据',
+              hidden: true,
+              component: () => import('@/pages/personnelManage/front/order'),
+
+            }
+          ]
+        },
+        {
+          path: '/',
+          name: '人力达标',
+          component: PageView,
+          children: [
+            {
+              path: '/personnelManage/front/resources/teammanage',
+              name: '团队管理',
+              hidden: true,
+              component: () => import('@/pages/personnelManage/front/teammanage'),
+
+            },
+
+          ]
+        },
 
-        //   ]
-        // },
         {
           path: '/channel',
           name: '渠道人员统计',
@@ -51,6 +86,20 @@ const router = new Router({
               component: () => import('@/pages/personnelManage/channel/message'),
 
             },
+            {
+              path: '/personnelManage/channel/task',
+              name: '任务数据',
+              hidden: true,
+              component: () => import('@/pages/personnelManage/channel/task'),
+
+            },
+            {
+              path: '/personnelManage/channel/order',
+              name: '订单数据',
+              hidden: true,
+              component: () => import('@/pages/personnelManage/channel/order'),
+
+            }
           ]
         },
         // {

+ 4 - 2
src/services/index.js

@@ -10,7 +10,8 @@ import quote from './quote'//报价
 import profit from './profit'//利润
 import business from "./business" //业务
 import sysManage from "./sysManage"//系统管理
-import wallet from "./wallet"
+import wallet from "./wallet" //钱包
+import sales from "./sales" //电销
 export const api = {
   userService,
   dataSource,
@@ -23,6 +24,7 @@ export const api = {
   profit,
   business,
   sysManage,
-  wallet
+  wallet,
+  sales
 }
 Vue.prototype.$API = api //挂载实例

+ 21 - 0
src/services/sales.js

@@ -0,0 +1,21 @@
+import { request, METHOD, } from '@/utils/request'
+
+//获取电销组别列表
+export async function getSalesGroupList(data) {
+    return request("/khglData/queryGroupListByDeptId", METHOD.POST, data)
+}
+//获取电销列表
+export async function getSalesList(data) {
+    return request("/khglData/queryDxDataPage", METHOD.POST, data)
+}
+
+//获取电销详情
+export async function getSalesDetails(data) {
+    return request("/khglData/queryDxDataDayPage", METHOD.POST, data)
+}
+
+export default {
+    getSalesGroupList,
+    getSalesList,
+    getSalesDetails
+}