yumeng hai 1 ano
pai
achega
c591e6aa59

+ 50 - 0
src/api/jiaoyang/promoter.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+// 获取达人列表
+export function getPromoterList(query) {
+  return request({
+    url: '/kuaishou/promoter/list3',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+// 获取达人列表
+export function getPromoterDetail(query) {
+  return request({
+    url: '/kuaishou/promoter/getById',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 新增达人
+
+export function addPromoter(query) {
+  return request({
+    url: '/kuaishou/promoter/add3',
+    method: 'post',
+    data: query
+  })
+}
+
+
+// 删除达人
+export function deleteById(query) {
+  return request({
+    url: '/kuaishou/promoter/deleteById3',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+
+
+
+
+

+ 53 - 0
src/api/jiaoyang/report.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 获取达人列表
+export function getItemList(query) {
+  return request({
+    url: '/jy/report/item',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getItemDetail(query) {
+  return request({
+    url: '/jy/report/itemDetail',
+    method: 'get',
+    params: query
+  })
+}
+export function promoterReport(query) {
+  return request({
+    url: '/jy/report/promoter',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function getOrderDetail(query) {
+  return request({
+    url: '/jy/report/promoterDetail',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getOrderStatistics(query) {
+  return request({
+    url: '/jy/report/promoterStatistics',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+
+
+
+
+
+
+
+

+ 8 - 0
src/views/index.vue

@@ -364,6 +364,7 @@
 
     <staging v-else-if="showOld == 2" />
     <operationHome v-else-if="showOld == 3" />
+    <jiaoyang v-else-if="showOld == 4" />
   </div>
 </template>
 
@@ -378,6 +379,7 @@ import {
   getTimeRatio, //时间段对比
 } from "@/api/index";
 import staging from "./staging.vue";
+import jiaoyang from "./jiaoyang/jyHome.vue";
 import operationHome from "./report/operationHome.vue";
 var echarts = require("echarts");
 export default {
@@ -557,6 +559,12 @@ export default {
           this.$store.getters.roles[0] == "directorOperations" ||
           this.$store.getters.roles[0] == "operator"
         ? 3
+        : this.$store.getters.roles[0] == "jy_bd_manage" ||
+        this.$store.getters.roles[0] == "jy_bd" ||
+        this.$store.getters.roles[0] == "jy_scissors_manage" ||
+        this.$store.getters.roles[0] == "jy_admnin" ||
+        this.$store.getters.roles[0] == "jy_scissors"
+          ? 4
         : 1;
   },
   mounted() {

+ 0 - 0
src/views/jiaoyang/jyHome.vue


+ 310 - 0
src/views/jiaoyang/jyItemDetailsReport.vue

@@ -0,0 +1,310 @@
+<style scoped lang="scss">
+  ::v-deep a {
+    color: #409eff;
+    display: block;
+  }
+</style>
+<template>
+  <div class="app-container">
+    <div></div>
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="100px"
+    >
+      <el-form-item label="商品名称" prop="itemTitle">
+        {{ $route.query ? $route.query.name : "-" }}
+      </el-form-item>
+      <el-form-item label="商品Id" prop="itemId">
+        {{ $route.query ? $route.query.id : "-" }}
+      </el-form-item>
+      <br/>
+      <el-form-item label="达人名称" prop="promoterNickName">
+        <el-input
+          v-model="queryParams.promoterNickName"
+          placeholder="请输入达人名称"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="达人Id" prop="promoterId">
+        <el-input
+          v-model.number="queryParams.promoterId"
+          placeholder="请输入达人Id"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
+        >搜索
+        </el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <!--      <el-button
+                type="warning"
+                plain
+                icon="el-icon-download"
+                size="mini"
+                @click="handleExport"
+                :loading="downLoadLoading"
+                >导出</el-button
+              >-->
+      </el-form-item>
+    </el-form>
+
+    <el-table
+      v-loading="loading"
+      :data="typeList"
+      @selection-change="handleSelectionChange"
+      ref="multipleTable"
+    >
+      <!-- <el-table-column type="selection" width="55" align="center" /> -->
+
+      <el-table-column
+        label="达人信息"
+        align="center"
+        prop="itemTitle"
+        width="300"
+      >
+        <template slot-scope="scope">
+          <div style="display: flex; width: 100%">
+            <div style="width: 40%">
+              <img
+                :src="scope.row.headImg"
+                alt=""
+                style="width: 70px; height: auto"
+              />
+            </div>
+            <div style="width: 60%" class="item-name-calss">
+              <p>
+
+                {{ scope.row.promoterNickName }}
+              </p>
+              <p>达人Id: {{ scope.row.promoterId }}</p>
+
+
+            </div>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="绑定人" align="center" prop="mediaId" width="100px">
+        <template slot-scope="scope">
+          <div v-if="!!scope.row.userName">
+            {{ scope.row.userName }}
+          </div>
+          <div v-else>-</div>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="类型" align="center" prop="mediaId" width="100px">
+        <template slot-scope="scope">
+          <div v-if="!!scope.row.type">
+            {{ scope.row.type | typeStatusName }}
+          </div>
+          <div v-else>-</div>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="订单数" align="center" prop="orderNum"></el-table-column>
+      <el-table-column label="有效订单数" align="center" prop="validOrderNUm"/>
+      <el-table-column label="有效率" align="center" prop="validRadio">
+        <template slot-scope="scope">
+          {{ scope.row.validRadio ? (scope.row.validRadio * 100).toFixed(2) + "%" : "-" }}
+        </template>
+      </el-table-column>
+      <el-table-column label="发货数" align="center" prop="deliveryNum">
+      </el-table-column>
+      <el-table-column label="发货率" align="center" prop="deliveryRadio">
+        <template slot-scope="scope">
+          {{
+          scope.row.deliveryRadio
+          ? (scope.row.deliveryRadio * 100).toFixed(2) + "%"
+          : "-"
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="未发货数" align="center" prop="notDeliveryNum">
+      </el-table-column>
+      <el-table-column label="付款金额" align="center" prop="payAmount">
+        <template slot-scope="scope">
+          {{ allMoney(scope.row.payAmount / 100) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="服务费率" align="center" prop="regimentalPromotionRate">
+        <template slot-scope="scope">
+          {{ scope.row.regimentalPromotionRate / 10 + "%" }}
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getItemDetail"
+    />
+  </div>
+</template>
+
+<script>
+  import {
+    listType,
+    getType,
+    delType,
+    addType,
+    updateType,
+    refreshCache,
+  } from "@/api/system/dict/type";
+  import {getItemDetail} from "@/api/jiaoyang/report";
+
+  var echarts = require("echarts");
+  export default {
+    name: "sale",
+    dicts: ["sys_normal_disable"],
+    data() {
+      return {
+        downLoadLoading: false,
+        dialogTableVisible: false,
+        logPage: {
+          pageNum: 1,
+          pageSize: 10,
+        },
+        logData: [],
+        logTotal: 0,
+        logLoading: false,
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        typeList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 分配销售
+        openAllocation: false,
+        // 选择的销售id
+        saleId: undefined,
+        // 获取用户id
+        userId: undefined,
+        // 销售列表
+        saleList: [],
+        // 分配销售确定loading
+        confirmLoadingSale: false,
+        // 日期范围
+        dateRange: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          promoterId: undefined,
+          promoterNickName: undefined,
+          orderStartDate: undefined,
+          orderEndDate: undefined,
+        },
+        uploadDate: [new Date(), new Date()],
+        //查询参数所用下拉数据
+        queryParamsList: {},
+      };
+    },
+    created() {
+      if (
+        this.$route &&
+        this.$route.query.id &&
+        this.$route.query.orderStartDate &&
+        this.$route.query.orderEndDate
+      ) {
+        this.getItemDetail();
+      }
+    },
+    mounted() {
+      this.$nextTick(() => {
+
+        //   this.initEchart('echart', this.handlerEchartOption(res.result, 'cost'))
+      });
+    },
+
+    filters: {
+      typeStatusName(status) {
+        const statusMap = {
+          1: "自营",
+          2: "分销",
+        };
+        return statusMap[status];
+      },
+
+    },
+
+    methods: {
+
+      toDetail(id) {
+      },
+
+      getItemDetail() {
+        this.loading = true;
+        getItemDetail({
+          ...this.queryParams,
+          orderStartDate: this.$route.query.orderStartDate,
+          orderEndDate: this.$route.query.orderEndDate,
+          itemId: this.$route.query.id,
+        }).then((response) => {
+          this.typeList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.confirmLoading = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {};
+        this.dateFile = null;
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getItemDetail();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.dateRange = [];
+        //   let date = new Date();
+        //   let y = date.getFullYear();
+        //   let MM = date.getMonth() + 1;
+        //   MM = MM < 10 ? "0" + MM : MM;
+        //   let dd = date.getDate();
+        //   dd = dd < 10 ? "0" + dd : dd;
+        //   this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
+        this.resetForm("queryForm");
+        this.queryParams.pageNum = 1;
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map((item) => item.id);
+      },
+    },
+  };
+</script>

+ 397 - 0
src/views/jiaoyang/jyItemReport.vue

@@ -0,0 +1,397 @@
+<style scoped lang="scss">
+  ::v-deep a {
+    color: #409eff;
+    display: block;
+  }
+
+  .item-name-calss p {
+    margin: 0;
+    text-align: left;
+  }
+
+  .tableBox {
+    width: 100%;
+  }
+
+  ::v-deep .el-table {
+
+    height: calc(100vh - 280px);
+  }
+</style>
+<template>
+  <div class="app-container" style="height: 100%">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="100px"
+    >
+
+      <el-form-item label="商品名称" prop="itemTitle">
+        <el-input
+          v-model="queryParams.itemTitle"
+          placeholder="请输入商品名称"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="商品Id" prop="itemId">
+        <el-input
+          v-model.number="queryParams.itemId"
+          placeholder="请输入商品Id"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="选择日期">
+        <el-date-picker
+          v-model="uploadDate"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+        ></el-date-picker>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索
+        </el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置
+        </el-button
+        >
+<!--        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          :loading="downLoadLoading"
+        >导出
+        </el-button>-->
+      </el-form-item>
+    </el-form>
+
+    <div class="tableBox">
+      <el-table
+        v-loading="loading"
+        :data="typeList"
+        @selection-change="handleSelectionChange"
+        ref="multipleTable"
+        @sort-change="sortChange"
+        height="calc(100vh - 100px);"
+      >
+        <el-table-column
+          label="商品名称"
+          align="center"
+          prop="itemTitle"
+          width="300"
+        >
+          <template slot-scope="scope">
+            <div style="display: flex; width: 100%">
+              <div style="width: 40%">
+                <img
+                  :src="scope.row.imageUrl"
+                  alt=""
+                  style="width: 70px; height: auto"
+                />
+              </div>
+              <div style="width: 60%" class="item-name-calss">
+                <a
+                  @click="toIndexDetail(scope.row)"
+                  style="
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    overflow: hidden;
+                    width: 100%;
+                  "
+                  :title="scope.row.itemTitle"
+                >
+                  {{ scope.row.itemTitle }}
+                </a>
+                <p>商品Id: {{ scope.row.itemId }}</p>
+                <p>商品单价: {{ scope.row.reservePrice / 100 }}元</p>
+                <p>
+                  佣金率:
+                  {{
+                  scope.row.itemCommissionRate
+                  ? scope.row.itemCommissionRate / 10 + "%"
+                  : "-"
+                  }}
+                </p>
+              </div>
+            </div>
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="订单数"
+          align="center"
+          prop="orderNum"
+          sortable="custom"
+        >
+        </el-table-column>
+        <el-table-column
+          label="有效订单数"
+          align="center"
+          prop="validOrderNUm"
+          sortable="custom"
+        />
+        <el-table-column
+          label="有效率"
+          align="center"
+          prop="validRadio"
+          sortable="custom"
+        >
+          <template slot-scope="scope">
+            {{
+            scope.row.validRadio
+            ? (scope.row.validRadio * 100).toFixed(2) + "%"
+            : "-"
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="发货数"
+          align="center"
+          prop="deliveryNum"
+          sortable="custom"
+        >
+        </el-table-column>
+        <el-table-column
+          label="发货率"
+          align="center"
+          prop="deliveryRadio"
+          sortable="custom"
+        >
+          <template slot-scope="scope">
+            {{
+            scope.row.deliveryRadio
+            ? (scope.row.deliveryRadio * 100).toFixed(2) + "%"
+            : "-"
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="未发货数"
+          align="center"
+          prop="notDeliveryNum"
+          sortable="custom"
+        >
+        </el-table-column>
+
+      </el-table>
+
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        :page.sync="queryParams.pageNum"
+        :limit.sync="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+  import {
+    listType,
+    getType,
+    delType,
+    addType,
+    updateType,
+    refreshCache,
+  } from "@/api/system/dict/type";
+  import {
+    getItemList,
+  } from "@/api/jiaoyang/report";
+
+  export default {
+    name: "Goods",
+    dicts: ["sys_normal_disable"],
+    data() {
+      return {
+        downLoadLoading: false,
+        dialogTableVisible: false,
+        logPage: {
+          pageNum: 1,
+          pageSize: 10,
+        },
+        logData: [],
+        logTotal: 0,
+        logLoading: false,
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        typeList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 分配销售
+        openAllocation: false,
+        // 选择的销售id
+        saleId: undefined,
+        // 获取用户id
+        userId: undefined,
+        // 销售列表
+        saleList: [],
+        // 分配销售确定loading
+        confirmLoadingSale: false,
+        // 日期范围
+        dateRange: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          userId: undefined,
+          itemId: undefined,
+          itemTitle: undefined,
+          orderStartDate: undefined,
+          orderEndDate: undefined,
+        },
+        uploadDate: [new Date(), new Date()],
+        //查询参数所用下拉数据
+        queryParamsList: {
+          personList: [],
+        },
+        videoTag: [],
+        videoVisibleChange: undefined,
+        prop: "orderNum",
+        sort: "desc",
+      };
+    },
+    created() {
+      this.userId = this.$store.getters.userId;
+      let date = new Date();
+      let y = date.getFullYear();
+      let MM = date.getMonth() + 1;
+      MM = MM < 10 ? "0" + MM : MM;
+      let dd = date.getDate();
+      dd = dd < 10 ? "0" + dd : dd;
+      this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
+    },
+    mounted() {
+      this.$nextTick(() => {
+        this.getList();
+      });
+    },
+    methods: {
+      showTitle(visible) {
+        console.log(visible);
+        if (this.videoVisibleChange != visible.itemId) {
+          this.videoVisibleChange = visible.itemId;
+          this.videoTag = [];
+          getTopPromoterByItemId(
+            this.addDateRange(
+              {itemId: visible.itemId},
+              this.uploadDate,
+              "orderStartDate",
+              "orderEndDate"
+            )
+          ).then((res) => {
+            this.videoTag = res.rows;
+          });
+        } else {
+          return;
+        }
+      },
+
+      toIndexDetail(item) {
+        this.$router.replace({
+          path: "/jiaoyang/jyItemDetailsReport",
+          query: {
+            id: item.itemId,
+            name: item.itemTitle,
+            orderStartDate: this.uploadDate[0],
+            orderEndDate: this.uploadDate[1],
+          },
+        });
+      },
+      sortChange(col, prop, order) {
+        this.prop = col.prop;
+        this.sort = !!col.order
+          ? col.order == "descending"
+            ? "desc"
+            : "asc"
+          : "desc";
+        this.handleQuery();
+      },
+
+      /** 查询字典类型列表 */
+      getList() {
+        this.loading = true;
+        getItemList(
+          this.addDateRange(
+            {...this.queryParams, fieId: this.prop, sort: this.sort},
+            this.uploadDate,
+            "orderStartDate",
+            "orderEndDate"
+          )
+        ).then((response) => {
+          this.typeList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.confirmLoading = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {};
+        this.dateFile = null;
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.dateRange = [];
+        let date = new Date();
+        let y = date.getFullYear();
+        let MM = date.getMonth() + 1;
+        MM = MM < 10 ? "0" + MM : MM;
+        let dd = date.getDate();
+        dd = dd < 10 ? "0" + dd : dd;
+        this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
+        this.resetForm("queryForm");
+        this.queryParams.pageNum = 1;
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map((item) => item.id);
+      },
+    },
+  };
+</script>

+ 506 - 0
src/views/jiaoyang/jyPromoterDetailsReport.vue

@@ -0,0 +1,506 @@
+<style scoped lang="scss">
+::v-deep a {
+  color: #409eff;
+  display: block;
+}
+</style>
+<template>
+  <div class="app-container">
+    <div></div>
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="100px"
+    >
+      <el-form-item label="达人名称" prop="promoterName">
+        {{ $route.query ? $route.query.name : "-" }}
+      </el-form-item>
+      <el-form-item label="达人Id" prop="promoterId">
+        {{ $route.query ? $route.query.id : "-" }}
+      </el-form-item>
+      <br />
+      <el-form-item label="商品名称" prop="itemTitle">
+        <el-input
+          v-model="queryParams.itemTitle"
+          placeholder="请输入商品名称"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="商品Id" prop="itemId">
+        <el-input
+          v-model.number="queryParams.itemId"
+          placeholder="请输入商品Id"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
+          >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+     <!--   <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          :loading="downLoadLoading"
+          >导出</el-button
+        >-->
+      </el-form-item>
+    </el-form>
+
+    <el-table
+      v-loading="loading"
+      :data="typeList"
+      @selection-change="handleSelectionChange"
+      ref="multipleTable"
+    >
+      <!-- <el-table-column type="selection" width="55" align="center" /> -->
+
+      <el-table-column label="商品图片" align="center" prop="imageUrl">
+        <template slot-scope="scope">
+          <img :src="scope.row.imageUrl" alt="" style="width: 100px; height: auto" />
+        </template>
+      </el-table-column>
+      <el-table-column label="商品名称" align="center" prop="itemTitle">
+        <template slot-scope="scope">
+          <a @click="toIndexDetail(scope.row)">
+            {{ scope.row.itemTitle }}
+          </a>
+        </template>
+      </el-table-column>
+      <el-table-column label="商品Id" align="center" prop="itemId" />
+
+      <el-table-column label="商品单价" align="center" prop="reservePrice">
+        <template slot-scope="scope"> {{ scope.row.reservePrice / 100 }}元 </template>
+      </el-table-column>
+
+      <el-table-column label="订单数" align="center" prop="orderNum"> </el-table-column>
+      <el-table-column label="有效订单数" align="center" prop="validOrderNUm" />
+      <el-table-column label="有效率" align="center" prop="validRadio" width="100">
+        <template slot-scope="scope">
+          {{ scope.row.validRadio ? (scope.row.validRadio * 100).toFixed(2) + "%" : "-" }}
+        </template>
+      </el-table-column>
+      <el-table-column label="发货数" align="center" prop="deliveryNum" width="100">
+      </el-table-column>
+      <el-table-column label="发货率" align="center" prop="deliveryRadio" width="100">
+        <template slot-scope="scope">
+          {{
+            scope.row.deliveryRadio
+              ? (scope.row.deliveryRadio * 100).toFixed(2) + "%"
+              : "-"
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="未发货数" align="center" prop="notDeliveryNum" width="100">
+      </el-table-column>
+      <el-table-column label="付款金额" align="center" prop="payAmount">
+        <template slot-scope="scope">
+          {{ allMoney(scope.row.payAmount / 100) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="服务费率" align="center" prop="regimentalPromotionRate">
+        <template slot-scope="scope">
+          {{ scope.row.regimentalPromotionRate / 10 + "%" }}
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getOrderDetail"
+    />
+
+    <div class="echart">
+      <div class="echartBody">
+        <h3 style="font-weight: bold">订单统计</h3>
+        <el-date-picker
+          v-model="uploadDate"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :picker-options="pickerOptions"
+          @change="getAllEchartsData"
+        ></el-date-picker>
+        <div id="echart" ref="echart" style="height: 500px; width: 100%"></div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  listType,
+  getType,
+  delType,
+  addType,
+  updateType,
+  refreshCache,
+} from "@/api/system/dict/type";
+import {
+  getOrderDetail,
+  getOrderStatistics
+} from "@/api/jiaoyang/report";
+var echarts = require("echarts");
+export default {
+  name: "sale",
+  dicts: ["sys_normal_disable"],
+  data() {
+    return {
+      downLoadLoading: false,
+      dialogTableVisible: false,
+      logPage: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+      logData: [],
+      logTotal: 0,
+      logLoading: false,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 字典表格数据
+      typeList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 分配销售
+      openAllocation: false,
+      // 选择的销售id
+      saleId: undefined,
+      // 获取用户id
+      userId: undefined,
+      // 销售列表
+      saleList: [],
+      // 分配销售确定loading
+      confirmLoadingSale: false,
+      // 日期范围
+      dateRange: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        itemId: undefined,
+        itemTitle: undefined,
+        orderStartDate: undefined,
+        orderEndDate: undefined,
+      },
+      uploadDate: [new Date(), new Date()],
+      //查询参数所用下拉数据
+      queryParamsList: {},
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "今天",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "昨天",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 1);
+              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "最近三天",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "最近一周",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "最近一个月",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "最近三个月",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
+      },
+    };
+  },
+  filters: {
+    statusName(status) {
+      let name = {
+        1: "待审核",
+        2: "领样申请审核拒绝",
+        3: "待录入订单号",
+        4: "已发货",
+        5: "已签收待上传作业",
+        6: "待招商审核",
+        7: "审核通过",
+      };
+      return name[status];
+    },
+  },
+  created() {
+    let start = new Date();
+    let end = new Date();
+
+    let y = end.getFullYear();
+    let MM = end.getMonth() + 1;
+    MM = MM < 10 ? "0" + MM : MM;
+    let dd = end.getDate();
+    dd = dd < 10 ? "0" + dd : dd;
+
+    start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+    let sy = start.getFullYear();
+    let sMM = start.getMonth() + 1;
+    sMM = sMM < 10 ? "0" + sMM : sMM;
+    let sdd = start.getDate();
+    sdd = sdd < 10 ? "0" + sdd : sdd;
+    this.uploadDate = [`${sy}-${sMM}-${sdd}`, `${y}-${MM}-${dd}`];
+    if (
+      this.$route &&
+      this.$route.query.id &&
+      this.$route.query.orderStartDate &&
+      this.$route.query.orderEndDate
+    ) {
+      this.getOrderDetail();
+      this.getOrderStatistics();
+    }
+  },
+  mounted() {
+    this.$nextTick(() => {
+      //   this.initEchart('echart', this.handlerEchartOption(res.result, 'cost'))
+    });
+  },
+  methods: {
+    getOrderDetail() {
+      this.loading = true;
+      getOrderDetail({
+        ...this.queryParams,
+        orderStartDate: this.$route.query.orderStartDate,
+        orderEndDate: this.$route.query.orderEndDate,
+        promoterId: this.$route.query.id,
+      }).then((response) => {
+        this.typeList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    getAllEchartsData(e) {
+      console.log(e);
+      if (e.length == 2) {
+        this.getOrderStatistics();
+      }
+    },
+    getOrderStatistics() {
+      getOrderStatistics({
+        promoterId: this.$route.query.id,
+        orderStartDate: this.uploadDate[0],
+        orderEndDate: this.uploadDate[1],
+      }).then((response) => {
+        this.initEchart("echart", this.handlerEchartOption(response.data));
+      });
+    },
+    /** 获取echart的值 */
+    initEchart(idName, optionName) {
+      let that = this;
+      const chart = this.$refs[idName];
+      if (chart) {
+        const myChart = echarts.init(document.getElementById(idName));
+        myChart.setOption(optionName);
+        window.addEventListener("resize", function () {
+          that.clientWidth = document.documentElement.clientWidth - 224;
+          myChart.resize();
+        });
+      }
+    },
+    /** echarts数据展示 订单统计*/
+    handlerEchartOption(data, typeShow) {
+      let option = {
+        noDataLoadingOption: {
+          text: "暂无数据",
+          effect: "bubble",
+          effectOption: {
+            effect: {
+              n: 0,
+            },
+          },
+        },
+        tooltip: {
+          trigger: "axis",
+          // formatter: function(params) {
+          // 	if(typeShow == 'play_duration_3s'){
+          // 		return `${params[0].marker}${params[0].name}<br/>${params[0].seriesName}:${params[0].value}%`
+          // 	}else{
+          // 		return `${params[0].marker}${params[0].name}<br/>${params[0].seriesName}:${params[0].value}`
+          // 	}
+
+          // },
+        },
+        grid: {
+          left: "3%",
+          right: "4%",
+          bottom: "3%",
+          containLabel: true,
+        },
+        legend: {
+          icon: "circle",
+          top: "5%",
+          right: "5%",
+          itemWidth: 6,
+          itemGap: 20,
+          textStyle: {
+            color: "#556677",
+          },
+        },
+        xAxis: {
+          type: "category",
+          data: data.map((item) => {
+            return item.date;
+          }),
+          boundaryGap: false,
+          // 坐标轴线
+          axisLine: {
+            show: false,
+            lineStyle: {
+              color: "#999",
+            },
+          },
+          // 分割线
+          splitLine: {
+            show: true,
+            lineStyle: {
+              type: "dashed",
+              color: "#e5e5e5",
+            },
+          },
+        },
+        yAxis: {
+          type: "value",
+          axisLine: {
+            show: false,
+            lineStyle: {
+              color: "#999",
+            },
+          },
+          splitLine: {
+            lineStyle: {
+              type: "dashed",
+              color: "#e5e5e5",
+            },
+          },
+        },
+        series: [
+          {
+            smooth: true,
+            name: "订单统计",
+
+            type: "line",
+            stack: "总量",
+            data: data.map((item) => {
+              return item.orderNum;
+            }),
+            symbol: "circle",
+            symbolSize: 6,
+            lineStyle: {
+              normal: {
+                width: 2,
+              },
+            },
+            itemStyle: {
+              borderColor: "#ffffff",
+              borderWidth: 0,
+            },
+          },
+        ],
+      };
+      return option;
+    },
+
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.confirmLoading = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.dateFile = null;
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getOrderDetail();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      //   let date = new Date();
+      //   let y = date.getFullYear();
+      //   let MM = date.getMonth() + 1;
+      //   MM = MM < 10 ? "0" + MM : MM;
+      //   let dd = date.getDate();
+      //   dd = dd < 10 ? "0" + dd : dd;
+      //   this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
+      this.resetForm("queryForm");
+      this.queryParams.pageNum = 1;
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+    },
+  },
+};
+</script>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1045 - 0
src/views/jiaoyang/jyPromoterList.vue


+ 412 - 0
src/views/jiaoyang/jyPromoterReport.vue

@@ -0,0 +1,412 @@
+<style scoped lang="scss">
+  ::v-deep a {
+    color: #409eff;
+    display: block;
+  }
+</style>
+<template>
+  <div class="app-container">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="100px"
+    >
+
+      <el-form-item label="类型" prop="categoryId">
+        <el-select
+          filterable
+          v-model="queryParams.type"
+          placeholder="选择类型"
+          clearable
+          style="width: 240px"
+        >
+          <el-option
+            v-for="item in queryParamsList.typeList"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="达人名称" prop="promoterNickName">
+        <el-input
+          v-model="queryParams.promoterNickName"
+          placeholder="请输入达人名称"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="达人Id" prop="promoterId">
+        <el-input
+          v-model.number="queryParams.promoterId"
+          placeholder="请输入达人Id"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="选择日期">
+        <el-date-picker
+          v-model="uploadDate"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+        ></el-date-picker>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+        >搜索
+        </el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+        >重置
+        </el-button
+        >
+        <!-- <el-button
+           type="warning"
+           plain
+           icon="el-icon-download"
+           size="mini"
+           @click="handleExport"
+           :loading="downLoadLoading"
+         >导出
+         </el-button
+         >-->
+      </el-form-item>
+    </el-form>
+
+    <el-table
+      v-loading="loading"
+      :data="typeList"
+      @selection-change="handleSelectionChange"
+      ref="multipleTable"
+    >
+      <!-- <el-table-column type="selection" width="55" align="center" /> -->
+      <el-table-column
+        label="达人信息"
+        align="center"
+        prop="itemTitle"
+        width="300"
+      >
+        <template slot-scope="scope">
+          <div style="display: flex; width: 100%">
+            <div style="width: 40%">
+              <img
+                :src="scope.row.headImg"
+                alt=""
+                style="width: 70px; height: auto"
+              />
+            </div>
+            <div style="width: 60%" class="item-name-calss">
+              <a
+                @click="toPromoterDetail(scope.row)"
+                style="
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    overflow: hidden;
+                    width: 100%;
+                  "
+                :title="scope.row.promoterNickName"
+              >
+                {{ scope.row.promoterNickName }}
+              </a>
+              <p>达人Id: {{ scope.row.promoterId }}</p>
+            </div>
+          </div>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="类型" align="center" prop="mediaId" width="100px">
+        <template slot-scope="scope">
+          <div v-if="!!scope.row.type">
+            {{ scope.row.type | typeStatusName }}
+          </div>
+          <div v-else>-</div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="单数"
+        align="center"
+        prop="orderNum"
+        width="80"
+      >
+      </el-table-column>
+      <el-table-column
+        label="有效单数"
+        align="center"
+        prop="validOrderNUm"
+        width="100"
+      />
+      <el-table-column
+        label="有效率"
+        align="center"
+        prop="validRadio"
+        width="70"
+      >
+        <template slot-scope="scope">
+          {{
+          scope.row.validRadio
+          ? (scope.row.validRadio * 100).toFixed(2) + "%"
+          : "-"
+          }}
+        </template>
+      </el-table-column>
+
+      <el-table-column label="GMV" align="center" prop="payAmount" width="80">
+        <template slot-scope="scope">
+          {{
+          scope.row.payAmount ? (scope.row.payAmount / 100).toFixed(2) : "-"
+          }}
+        </template>
+      </el-table-column>
+
+      <el-table-column label="GMV(有效)" align="center" prop="validPayAmount" width="100">
+        <template slot-scope="scope">
+          {{
+          scope.row.validPayAmount ? (scope.row.validPayAmount / 100).toFixed(2) : "-"
+          }}
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        label="发货数"
+        align="center"
+        prop="deliveryNum"
+        width="70"
+      >
+      </el-table-column>
+      <el-table-column
+        label="发货率"
+        align="center"
+        prop="deliveryRadio"
+        width="70"
+      >
+        <template slot-scope="scope">
+          {{
+          scope.row.deliveryRadio
+          ? (scope.row.deliveryRadio * 100).toFixed(2) + "%"
+          : "-"
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="未发货数" align="center" prop="notDeliveryNum" width="80">
+      </el-table-column>
+      <el-table-column label="绑定人" align="center" prop="userName" width="150">
+        <template slot-scope="scope">
+          {{
+          scope.row.userName
+          ? scope.row.userName
+          : "-"
+          }}
+        </template>
+      </el-table-column>
+
+      <!-- <el-table-column label="订单top3(订单数)" align="center" prop="topOrders">
+         <template slot-scope="scope">
+           <a
+             v-for="(item, index) in scope.row.topOrders"
+             :key="index"
+             @click="toDetail(item)"
+             style="text-align: left"
+           >
+             <img
+               :src="item.imageUrl"
+               alt=""
+               style="width: 50px; height: auto"
+             />
+             {{ item.itemTitle }}
+           </a>
+         </template>
+       </el-table-column>-->
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+  import {
+    listType,
+    getType,
+    delType,
+    addType,
+    updateType,
+    refreshCache,
+  } from "@/api/system/dict/type";
+  import {promoterReport} from "@/api/jiaoyang/report";
+
+  export default {
+    name: "Index",
+    dicts: ["sys_normal_disable"],
+    data() {
+      return {
+        downLoadLoading: false,
+        dialogTableVisible: false,
+        logPage: {
+          pageNum: 1,
+          pageSize: 10,
+        },
+        logData: [],
+        logTotal: 0,
+        logLoading: false,
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        typeList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 分配销售
+        openAllocation: false,
+        // 选择的销售id
+        saleId: undefined,
+        // 获取用户id
+        userId: undefined,
+        // 销售列表
+        saleList: [],
+        // 分配销售确定loading
+        confirmLoadingSale: false,
+        // 日期范围
+        dateRange: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          promoterId: undefined,
+          promoterNickName: undefined,
+          orderStartDate: undefined,
+          orderEndDate: undefined,
+        },
+        uploadDate: [new Date(), new Date()],
+        //查询参数所用下拉数据
+        queryParamsList: {
+          typeList: [
+            {value: 1, label: "自营"},
+            {value: 2, label: "分销"},
+          ],
+        },
+      };
+    },
+    created() {
+      this.userId = this.$store.getters.userId;
+      let date = new Date();
+      let y = date.getFullYear();
+      let MM = date.getMonth() + 1;
+      MM = MM < 10 ? "0" + MM : MM;
+      let dd = date.getDate();
+      dd = dd < 10 ? "0" + dd : dd;
+      this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
+    },
+    mounted() {
+      this.$nextTick(() => {
+        this.getList();
+      });
+    },
+
+    filters: {
+      typeStatusName(status) {
+        const statusMap = {
+          1: "自营",
+          2: "分销",
+        };
+        return statusMap[status];
+      },
+
+    },
+    methods: {
+      toPromoterDetail(item) {
+        this.$router.replace({
+          path: "/jiaoyang/jyPromoterDetailsReport",
+          query: {
+            id: item.promoterId,
+            name: item.promoterNickName,
+            orderStartDate: this.uploadDate[0],
+            orderEndDate: this.uploadDate[1],
+          },
+        });
+      },
+      /** 查询字典类型列表 */
+      getList() {
+        this.loading = true;
+        promoterReport(
+          this.addDateRange(
+            this.queryParams,
+            this.uploadDate,
+            "orderStartDate",
+            "orderEndDate"
+          )
+        ).then((response) => {
+          this.typeList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.confirmLoading = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {};
+        this.dateFile = null;
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.dateRange = [];
+        let date = new Date();
+        let y = date.getFullYear();
+        let MM = date.getMonth() + 1;
+        MM = MM < 10 ? "0" + MM : MM;
+        let dd = date.getDate();
+        dd = dd < 10 ? "0" + dd : dd;
+        this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
+        this.resetForm("queryForm");
+        this.queryParams.pageNum = 1;
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map((item) => item.id);
+      },
+    },
+  };
+</script>

+ 363 - 351
src/views/promoter/promoterSeas.vue

@@ -9,7 +9,7 @@
       label-width="100px"
     >
 
-      <el-form-item label="绑定人"  prop="bdUserId">
+      <el-form-item label="绑定人" prop="bdUserId">
         <el-select
           filterable
           v-model="queryParams.bdUserId"
@@ -77,7 +77,8 @@
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
-          >搜索</el-button
+        >搜索
+        </el-button
         >
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
@@ -120,7 +121,7 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="粉丝数" align="center" prop="fansNumber"> </el-table-column>
+      <el-table-column label="粉丝数" align="center" prop="fansNumber"></el-table-column>
 
       <el-table-column
         label="单视频销售额"
@@ -204,7 +205,7 @@
           <div v-else>-</div>
         </template>
       </el-table-column>
-      <el-table-column label="认领记录" align="center" prop="userName"> </el-table-column>
+      <el-table-column label="认领记录" align="center" prop="userName"></el-table-column>
       <el-table-column label="操作" align="center" prop="action">
         <template slot-scope="scope">
           <el-button
@@ -212,10 +213,12 @@
             type="text"
             icon="el-icon-edit"
             @click="handleAddbroadcast(scope.row)"
-            >认领</el-button
+          >认领
+          </el-button
           >
           <el-button size="mini" type="text" @click="updateOneData(scope.row)"
-            >更新</el-button
+          >更新
+          </el-button
           >
         </template>
       </el-table-column>
@@ -381,7 +384,8 @@
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitFormBroadcast" :loading="confirmLoading"
-          >确 定</el-button
+        >确 定
+        </el-button
         >
         <el-button
           @click="
@@ -389,7 +393,8 @@
             openAllocation = false;
             formBroadcast = {};
           "
-          >取 消</el-button
+        >取 消
+        </el-button
         >
       </div>
     </el-dialog>
@@ -397,348 +402,303 @@
 </template>
 
 <script>
-import { refreshCache } from "@/api/system/dict/type";
-import {getSupplyChainUserList} from "@/api/supplyChain/supplyChain";
-import {
-  getPromoterList2,
-  addPromoter,
-  editPromoter,
-  deleteById,
-  getGongHaiVideoSales,
-} from "@/api/promoter/promoter";
-export default {
-  name: "account-list",
-  components: {},
+  import {refreshCache} from "@/api/system/dict/type";
+  import {getSupplyChainUserList} from "@/api/supplyChain/supplyChain";
+  import {
+    getPromoterList2,
+    addPromoter,
+    editPromoter,
+    deleteById,
+    getGongHaiVideoSales,
+  } from "@/api/promoter/promoter";
 
-  data() {
-    let validatePhone = (rule, value, callback) => {
-      /*console.log(rule);
-        console.log(value);
-        console.log(callback);*/
-      if (!value) {
-        callback(new Error("联系方式不能为空!"));
-      }
-      //使用正则表达式进行验证手机号码
-      if (!/^1[3456789]\d{9}$/.test(value)) {
-        callback(new Error("手机号不正确!"));
-      }
-      callback();
-    };
-    return {
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: null,
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 字典表格数据
-      typeList: [],
-      //上传文件类型
-      fileType: [".doc", ".xls", ".xlsx", ".ppt", ".pdf", ".csv"],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      openFp: false,
-      formFp: {},
-      // 是否可编辑
-      edit: false,
-      // 分配销售
-      openAllocation: false,
-      // 选择的销售id
-      saleId: undefined,
-      // 销售列表
-      saleList: [],
-      // 分配销售确定loading
-      confirmLoadingSale: false,
-      // 日期范围
-      dateRange: [],
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        promoterNickName: undefined,
-        promoterId: undefined,
-        status: undefined,
-      },
-      //页面所有的下拉数据
-      queryParamsList: {
-        statusList: [
-          { value: 1, label: "已认领" },
-          { value: 2, label: "未认领" },
-        ],
-      },
-      // 表单参数
-      form: {},
-      formBroadcast: {},
-      //上传报表下拉数据
-      formList: {},
-      fileList: [],
-      accept: "",
-      //获取销售线索文件流
-      dateFile: new FormData(),
-      //销售线索上传loading
-      confirmLoading: false,
-      // 表单校验
-      rules: {},
-      rulesBroadcast: {
-        consignee: {
-          required: true,
-          message: "收货人必填",
-          trigger: "blur",
+  export default {
+    name: "account-list",
+    components: {},
+
+    data() {
+      let validatePhone = (rule, value, callback) => {
+        /*console.log(rule);
+          console.log(value);
+          console.log(callback);*/
+        if (!value) {
+          callback(new Error("联系方式不能为空!"));
+        }
+        //使用正则表达式进行验证手机号码
+        if (!/^1[3456789]\d{9}$/.test(value)) {
+          callback(new Error("手机号不正确!"));
+        }
+        callback();
+      };
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: null,
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        typeList: [],
+        //上传文件类型
+        fileType: [".doc", ".xls", ".xlsx", ".ppt", ".pdf", ".csv"],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        openFp: false,
+        formFp: {},
+        // 是否可编辑
+        edit: false,
+        // 分配销售
+        openAllocation: false,
+        // 选择的销售id
+        saleId: undefined,
+        // 销售列表
+        saleList: [],
+        // 分配销售确定loading
+        confirmLoadingSale: false,
+        // 日期范围
+        dateRange: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          promoterNickName: undefined,
+          promoterId: undefined,
+          status: undefined,
         },
-        phone: {
-          required: true,
-          // message: "联系方式必填",
-          validator: validatePhone,
-          trigger: "blur",
+        //页面所有的下拉数据
+        queryParamsList: {
+          statusList: [
+            {value: 1, label: "已认领"},
+            {value: 2, label: "未认领"},
+          ],
         },
-        promoterAddress: [
-          {
+        // 表单参数
+        form: {},
+        formBroadcast: {},
+        //上传报表下拉数据
+        formList: {},
+        fileList: [],
+        accept: "",
+        //获取销售线索文件流
+        dateFile: new FormData(),
+        //销售线索上传loading
+        confirmLoading: false,
+        // 表单校验
+        rules: {},
+        rulesBroadcast: {
+          consignee: {
             required: true,
-            message: "发货地址必填",
+            message: "收货人必填",
             trigger: "blur",
           },
-          {
-            min: 5,
-            max: 200,
-            message: "发货地址最少输入5个字符",
-            trigger: "change",
+          phone: {
+            required: true,
+            // message: "联系方式必填",
+            validator: validatePhone,
+            trigger: "blur",
           },
-        ],
-      },
-      // 分配销售展示列表
-      ksInfo: null,
-      userId: null,
-      prop: "",
-      sort: "DESC",
-      personList: [],
-    };
-  },
-  created() {
-    this.userId = this.$store.getters.userId;
-    this.getList();
-    this.getPersonList();
-  },
-  filters: {},
-  methods: {
-    getPersonList() {
-      getSupplyChainUserList().then((response) => {
-        this.queryParamsList.personList = response.rows;
-      });
-    },
-    toIndexDetail(item) {
-      this.$router.replace({
-        path: "/promoter/detail",
-        query: {
-          id: item.id,
+          promoterAddress: [
+            {
+              required: true,
+              message: "发货地址必填",
+              trigger: "blur",
+            },
+            {
+              min: 5,
+              max: 200,
+              message: "发货地址最少输入5个字符",
+              trigger: "change",
+            },
+          ],
         },
-      });
+        // 分配销售展示列表
+        ksInfo: null,
+        userId: null,
+        prop: "",
+        sort: "DESC",
+        personList: [],
+      };
     },
-    sortChange(col, prop, order) {
-      this.prop = col.prop;
-
-      this.sort = !!col.order ? (col.order == "descending" ? "DESC" : "ASC") : "DESC";
-      this.handleQuery();
-    },
-    /** 查询字典类型列表 */
-    getList() {
-      this.loading = true;
-
-      getPromoterList2({
-        userId: this.userId,
-        ...this.queryParams,
-        parameter: this.prop,
-        orderBy: this.sort,
-      }).then((response) => {
-        this.typeList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.confirmLoading = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {};
-      this.dateFile = null;
-      this.resetForm("formBroadcast");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
+    created() {
+      this.userId = this.$store.getters.userId;
       this.getList();
+      this.getPersonList();
     },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    addNew() {
-      this.openAllocation = true;
-      this.edit = false;
-      this.ids = null;
-      this.confirmLoading = false;
-      this.formBroadcast = {};
-      setTimeout(() => {
-        this.$refs.formBroadcast.clearValidate();
-      }, 0);
-    },
-    handleDelete(item) {
-      this.$modal
-        .confirm(`请确认是否解绑此达人?`)
-        .then(() => {
-          var params = {};
-          params.id = item.id;
-          params.userId = this.$store.getters.userId;
-          deleteById(params)
-            .then((res) => {
-              this.$modal.msgSuccess("解绑成功");
-              this.handleQuery();
-            })
-            .catch(() => {
-              this.loading = false;
-            });
-        })
-        .catch(() => {});
-    },
-    updateOneData(item) {
-      getGongHaiVideoSales({ promoterId: item.promoterId }).then((res) => {
-        this.$modal.msgSuccess("更新成功");
-        this.getList();
-      });
-    },
-    /** 编辑地址 新增达人*/
-    handleAddbroadcast(item) {
-      this.ids = item.id;
-      this.edit = true;
-      this.openAllocation = true;
+    filters: {},
+    methods: {
+      getPersonList() {
+        getSupplyChainUserList().then((response) => {
+          this.queryParamsList.personList = response.rows;
+        });
+      },
+      toIndexDetail(item) {
+        this.$router.replace({
+          path: "/promoter/detail",
+          query: {
+            id: item.id,
+          },
+        });
+      },
+      sortChange(col, prop, order) {
+        this.prop = col.prop;
 
-      this.$set(this.formBroadcast, "consignee", item.consignee);
-      this.$set(this.formBroadcast, "phone", item.phone);
-      this.$set(this.formBroadcast, "promoterAddress", item.promoterAddress);
-      this.$set(this.formBroadcast, "promoterNickName", item.promoterNickName);
-      this.$set(this.formBroadcast, "promoterId", item.promoterId);
-    },
-    copyInfomation(item) {
-      if (navigator.clipboard && window.isSecureContext) {
-        navigator.clipboard
-          .writeText(
-            `
-  收货人: ${item.consignee}
-  手机号: ${item.phone}
-  收货地址: ${item.promoterAddress}`
-          )
+        this.sort = !!col.order ? (col.order == "descending" ? "DESC" : "ASC") : "DESC";
+        this.handleQuery();
+      },
+      /** 查询字典类型列表 */
+      getList() {
+        this.loading = true;
+
+        getPromoterList2({
+          userId: this.userId,
+          ...this.queryParams,
+          parameter: this.prop,
+          orderBy: this.sort,
+        }).then((response) => {
+          this.typeList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.confirmLoading = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {};
+        this.dateFile = null;
+        this.resetForm("formBroadcast");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.dateRange = [];
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      addNew() {
+        this.openAllocation = true;
+        this.edit = false;
+        this.ids = null;
+        this.confirmLoading = false;
+        this.formBroadcast = {};
+        setTimeout(() => {
+          this.$refs.formBroadcast.clearValidate();
+        }, 0);
+      },
+      handleDelete(item) {
+        this.$modal
+          .confirm(`请确认是否解绑此达人?`)
           .then(() => {
-            this.$message.success("复制成功");
+            var params = {};
+            params.id = item.id;
+            params.userId = this.$store.getters.userId;
+            deleteById(params)
+              .then((res) => {
+                this.$modal.msgSuccess("解绑成功");
+                this.handleQuery();
+              })
+              .catch(() => {
+                this.loading = false;
+              });
           })
-          .catch((err) => {
-            this.$message.error("复制失败");
+          .catch(() => {
           });
-      } else {
-        // 创建text area
-        const textArea = document.createElement("textarea");
-        textArea.value = `
+      },
+      updateOneData(item) {
+        getGongHaiVideoSales({promoterId: item.promoterId}).then((res) => {
+          this.$modal.msgSuccess("更新成功");
+          this.getList();
+        });
+      },
+      /** 编辑地址 新增达人*/
+      handleAddbroadcast(item) {
+        this.ids = item.id;
+        this.edit = true;
+        this.openAllocation = true;
+
+        this.$set(this.formBroadcast, "consignee", item.consignee);
+        this.$set(this.formBroadcast, "phone", item.phone);
+        this.$set(this.formBroadcast, "promoterAddress", item.promoterAddress);
+        this.$set(this.formBroadcast, "promoterNickName", item.promoterNickName);
+        this.$set(this.formBroadcast, "promoterId", item.promoterId);
+      },
+      copyInfomation(item) {
+        if (navigator.clipboard && window.isSecureContext) {
+          navigator.clipboard
+            .writeText(
+              `
   收货人: ${item.consignee}
   手机号: ${item.phone}
-  收货地址: ${item.promoterAddress}`;
-        // 使text area不在viewport,同时设置不可见
-        document.body.appendChild(textArea);
-        textArea.focus();
-        textArea.select();
-        return new Promise((resolve, reject) => {
-          // 执行复制命令并移除文本框
-          document.execCommand("copy") ? resolve() : reject(new Error("出错了"));
-          textArea.remove();
-        }).then(
-          () => {
-            this.$message.success("复制成功");
-          },
-          () => {
-            this.$message.error("复制失败");
-          }
-        );
-      }
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-    },
-    /** 新增直播确定按钮 */
-    submitFormBroadcast: function () {
-      this.$refs["formBroadcast"].validate((valid) => {
-        if (valid) {
-          this.confirmLoading = true;
-          let formData = {
-            userId: this.userId,
-            userName: this.$store.getters.name,
-            ...this.formBroadcast,
-          };
-
-          addPromoter(formData)
-            .then((res) => {
-              this.confirmLoading = false;
-              this.$message.success("认领成功");
-              this.openAllocation = false;
-              this.ids = null;
-              this.cancel();
-              this.handleQuery();
+  收货地址: ${item.promoterAddress}`
+            )
+            .then(() => {
+              this.$message.success("复制成功");
             })
             .catch((err) => {
-              this.confirmLoading = false;
+              this.$message.error("复制失败");
             });
+        } else {
+          // 创建text area
+          const textArea = document.createElement("textarea");
+          textArea.value = `
+  收货人: ${item.consignee}
+  手机号: ${item.phone}
+  收货地址: ${item.promoterAddress}`;
+          // 使text area不在viewport,同时设置不可见
+          document.body.appendChild(textArea);
+          textArea.focus();
+          textArea.select();
+          return new Promise((resolve, reject) => {
+            // 执行复制命令并移除文本框
+            document.execCommand("copy") ? resolve() : reject(new Error("出错了"));
+            textArea.remove();
+          }).then(
+            () => {
+              this.$message.success("复制成功");
+            },
+            () => {
+              this.$message.error("复制失败");
+            }
+          );
         }
-      });
-    },
-    /** 提交按钮 */
-    submitForm: function () {
-      this.$refs["form"].validate((valid) => {
-        if (valid) {
-          var fileList = this.$refs.fileUploadDialog.fileList;
-          var dapanUrls = this.$refs.fileUpload.fileList;
-          var portraitUrls = this.$refs.fileUploadFx.fileList;
-          if (fileList.length == 0 && dapanUrls.length == 0 && portraitUrls.length == 0) {
-            this.$message.error("直播数据,数据大盘,画像分析必须最少上传一项");
-            return;
-          } else {
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+      },
+      /** 新增直播确定按钮 */
+      submitFormBroadcast: function () {
+        this.$refs["formBroadcast"].validate((valid) => {
+          if (valid) {
             this.confirmLoading = true;
-            let formData = new FormData();
-            this.ids;
-            formData.append("id", this.ids);
-            formData.append("actualGmv", this.delcommafy(this.form.actualGmv));
-            formData.append(
-              "dapanUrls",
-              JSON.stringify(
-                dapanUrls.map((item) => {
-                  return item.url;
-                })
-              )
-            );
-            formData.append(
-              "portraitUrls",
-              JSON.stringify(
-                portraitUrls.map((item) => {
-                  return item.url;
-                })
-              )
-            );
-            fileList.forEach((file) => formData.append("files", file.raw));
-            dataUpload(formData)
+            let formData = {
+              mediaId: 2,
+              userId: this.userId,
+              userName: this.$store.getters.name,
+              ...this.formBroadcast,
+            };
+
+            addPromoter(formData)
               .then((res) => {
                 this.confirmLoading = false;
-                this.$message.success("上传成功");
-                this.open = false;
+                this.$message.success("认领成功");
+                this.openAllocation = false;
                 this.ids = null;
                 this.cancel();
                 this.handleQuery();
@@ -747,35 +707,87 @@ export default {
                 this.confirmLoading = false;
               });
           }
-          console.log(fileList, dapanUrls, portraitUrls);
-        }
-      });
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function () {
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            var fileList = this.$refs.fileUploadDialog.fileList;
+            var dapanUrls = this.$refs.fileUpload.fileList;
+            var portraitUrls = this.$refs.fileUploadFx.fileList;
+            if (fileList.length == 0 && dapanUrls.length == 0 && portraitUrls.length == 0) {
+              this.$message.error("直播数据,数据大盘,画像分析必须最少上传一项");
+              return;
+            } else {
+              this.confirmLoading = true;
+              let formData = new FormData();
+              this.ids;
+              formData.append("id", this.ids);
+              formData.append("actualGmv", this.delcommafy(this.form.actualGmv));
+              formData.append(
+                "dapanUrls",
+                JSON.stringify(
+                  dapanUrls.map((item) => {
+                    return item.url;
+                  })
+                )
+              );
+              formData.append(
+                "portraitUrls",
+                JSON.stringify(
+                  portraitUrls.map((item) => {
+                    return item.url;
+                  })
+                )
+              );
+              fileList.forEach((file) => formData.append("files", file.raw));
+              dataUpload(formData)
+                .then((res) => {
+                  this.confirmLoading = false;
+                  this.$message.success("上传成功");
+                  this.open = false;
+                  this.ids = null;
+                  this.cancel();
+                  this.handleQuery();
+                })
+                .catch((err) => {
+                  this.confirmLoading = false;
+                });
+            }
+            console.log(fileList, dapanUrls, portraitUrls);
+          }
+        });
+      },
     },
-  },
-};
+  };
 </script>
 <style lang="scss" scoped>
-.entire-line {
-  width: 100%;
-  ::v-deep .el-form-item__content {
-    width: 60%;
+  .entire-line {
+    width: 100%;
+
+    ::v-deep .el-form-item__content {
+      width: 60%;
+    }
+  }
+
+  ::v-deep .el-form-item__label {
+    white-space: nowrap;
   }
-}
-::v-deep .el-form-item__label {
-  white-space: nowrap;
-}
 </style>
 <style scoped lang="scss">
-::v-deep a {
-  color: #409eff;
-  display: block;
-  text-align: left;
-}
-.item-name-calss p {
-  margin: 0;
-  text-align: left;
-}
-.tableBox {
-  width: 100%;
-}
+  ::v-deep a {
+    color: #409eff;
+    display: block;
+    text-align: left;
+  }
+
+  .item-name-calss p {
+    margin: 0;
+    text-align: left;
+  }
+
+  .tableBox {
+    width: 100%;
+  }
 </style>

+ 3 - 5
src/views/staging.vue

@@ -619,16 +619,14 @@
       let dd = date.getDate();
       dd = dd < 10 ? "0" + dd : dd;
       this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
-      this.getInfomation();
-      this.getOrderData();
-      this.getDataAnalysis();
-      // this.getIndexPromoterRank();
-      // this.getIndexOrderRank();
     },
     methods: {
       getMediaId() {
         getMediaId({userId: this.userId}).then((res) => {
           this.mediaId = res.data;
+          this.getInfomation();
+          this.getOrderData();
+          this.getDataAnalysis();
         });
 
       },