yumeng 8 mēneši atpakaļ
vecāks
revīzija
94e7f1e5da

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

@@ -312,5 +312,27 @@ export function getTeamDetail(query) {
   })
 }
 
+export function getTeamExpertBusinessDetail(query) {
+  return request({
+    url: '/jy/dingpan/getTeamExpertBusinessDetail',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getPromoterItemDetail(query) {
+  return request({
+    url: '/jy/dingpan/getPromoterItemDetail',
+    method: 'get',
+    params: query
+  })
+}export function getItemPromoterDetail(query) {
+  return request({
+    url: '/jy/dingpan/getItemPromoterDetail',
+    method: 'get',
+    params: query
+  })
+}
+
 
 

+ 20 - 0
src/api/supplyChain/supplyChain.js

@@ -74,6 +74,22 @@ export function getItemList(query) {
   })
 }
 
+export function getShopList(query) {
+  return request({
+    url: '/isv/supply_chain/shopList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getShopDetail(query) {
+  return request({
+    url: '/isv/supply_chain/shopDetail',
+    method: 'get',
+    params: query
+  })
+}
+
 // 商品详情
 export function getItemDetail(query) {
   return request({
@@ -210,6 +226,7 @@ export function submitPromotersCount(query) {
     params: query
   })
 }
+
 //查询渠道详情
 export function getBdDetailList(query) {
   return request({
@@ -218,6 +235,7 @@ export function getBdDetailList(query) {
     params: query
   })
 }
+
 export function getBdDetailListV2(query) {
   return request({
     url: '/isv/supply_chain/bdDetailListV2',
@@ -234,6 +252,7 @@ export function getBdTotalV2(query) {
     params: query
   })
 }
+
 //查询渠道详情汇总
 export function getBdTotal(query) {
   return request({
@@ -242,6 +261,7 @@ export function getBdTotal(query) {
     params: query
   })
 }
+
 //查询渠道详情-导出
 export function exportBdDetail(query) {
   return request({

+ 13 - 1
src/views/bytedance/bytedanceChannelList.vue

@@ -154,7 +154,19 @@
       >
       </el-table-column>
 
-      <el-table-column label="订单数" align="center" prop="orderNum" width="100px">
+      <el-table-column label="订单数" align="center" prop="orderNum" width="100px"></el-table-column>
+
+      <el-table-column
+        label="环比"
+        align="center"
+        prop="orderNumRatio"
+        sortable="custom"
+      >
+        <template slot-scope="scope">
+          <i :style=" scope.row.orderNumRatio > 0 ? 'color:red' : 'color:green'"
+          >{{ scope.row.orderNumRatio + "%" }}
+          </i>
+        </template>
       </el-table-column>
 
       <el-table-column

+ 14 - 0
src/views/bytedance/bytedanceGoods.vue

@@ -178,6 +178,20 @@
           sortable="custom"
         >
         </el-table-column>
+
+        <el-table-column
+          label="环比"
+          align="center"
+          prop="orderNumRatio"
+          sortable="custom"
+        >
+          <template slot-scope="scope">
+            <i :style=" scope.row.orderNumRatio > 0 ? 'color:red' : 'color:green'"
+            >{{ scope.row.orderNumRatio + "%" }}
+            </i>
+          </template>
+        </el-table-column>
+
         <el-table-column
           label="有效订单数"
           align="center"

+ 28 - 12
src/views/bytedance/bytedanceInvestment.vue

@@ -42,7 +42,7 @@
                 :style="
                   item.status == '0' ? 'backgroundColor:green' : 'backgroundColor:red'
                 "
-                >{{ item.value }}</span
+              >{{ item.value }}</span
               ><span>{{ item.nickMame }}</span>
             </div>
           </el-option>
@@ -79,7 +79,8 @@
 
       <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-button
@@ -89,7 +90,8 @@
           size="mini"
           @click="handleExport"
           :loading="downLoadLoading"
-        >导出</el-button
+        >导出
+        </el-button
         >
       </el-form-item>
     </el-form>
@@ -108,10 +110,23 @@
           </a>
         </template>
       </el-table-column>
-      <el-table-column label="商品数" align="center" prop="itemCount" />
-      <el-table-column label="发样数" align="center" prop="sendSampleCount" />
-      <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="itemCount"/>
+      <el-table-column label="发样数" align="center" prop="sendSampleCount"/>
+      <el-table-column label="订单数" align="center" prop="orderNum"></el-table-column>
+      <el-table-column
+        label="环比"
+        align="center"
+        prop="orderNumRatio"
+        sortable="custom"
+      >
+        <template slot-scope="scope">
+          <i :style=" scope.row.orderNumRatio > 0 ? 'color:red' : 'color:green'"
+          >{{ scope.row.orderNumRatio + "%" }}
+          </i>
+        </template>
+      </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 }}
@@ -186,6 +201,7 @@ import {
   adminBytedanceReportList,
   downFile,
 } from "@/api/bytedance/bytedance";
+
 export default {
   name: "Investment",
   dicts: ["sys_normal_disable"],
@@ -263,17 +279,17 @@ export default {
     });
   },
   methods: {
-    cleanBindDate(){
+    cleanBindDate() {
       this.bindDate = [];
     },
 
-    cleanUploadDate(){
+    cleanUploadDate() {
       this.uploadDate = [];
     },
     /** 导出按钮操作 */
     handleExport() {
       this.downLoadLoading = true;
-      if(!!this.bindDate){
+      if (!!this.bindDate) {
         this.queryParams.bindStartDate = this.bindDate[0],
           this.queryParams.bindEndDate = this.bindDate[1]
       }
@@ -329,9 +345,9 @@ export default {
     /** 查询字典类型列表 */
     getList() {
       this.loading = true;
-      if(!!this.bindDate){
+      if (!!this.bindDate) {
         this.queryParams.bindStartDate = this.bindDate[0],
-        this.queryParams.bindEndDate = this.bindDate[1]
+          this.queryParams.bindEndDate = this.bindDate[1]
       }
 
       adminBytedanceReportList(

+ 14 - 0
src/views/bytedance/bytedancePromoterList.vue

@@ -97,6 +97,20 @@
         prop="orderNum"
         width="80"
       >
+
+        <el-table-column
+          label="环比"
+          align="center"
+          prop="orderNumRatio"
+          sortable="custom"
+        >
+          <template slot-scope="scope">
+            <i :style=" scope.row.orderNumRatio > 0 ? 'color:red' : 'color:green'"
+            >{{ scope.row.orderNumRatio + "%" }}
+            </i>
+          </template>
+        </el-table-column>
+
       </el-table-column>
       <el-table-column
         label="有效单数"

+ 346 - 29
src/views/jiaoyang/jyDingPan.vue

@@ -478,6 +478,17 @@
           prop="userName"
 
         >
+          <template slot-scope="scope">
+            <el-button
+              style="text-align: center;"
+              type="text"
+              @click="getTeamDetail(2,scope.row.userId,scope.row.userName,scope.row.type)">
+              {{
+                scope.row.userName
+              }}
+            </el-button>
+          </template>
+
         </el-table-column>
         <el-table-column
           label="类型"
@@ -491,6 +502,17 @@
         </el-table-column>
 
         <el-table-column
+          label="人数"
+          align="center"
+          prop="teamCount"
+          width="120px"
+        >
+          <template slot-scope="scope">
+            {{ scope.row.teamCount }}
+          </template>
+        </el-table-column>
+
+        <el-table-column
           label="订单量"
           align="center"
           prop="orderNum"
@@ -640,7 +662,7 @@
             <el-button
               style="text-align: center; padding: 3px 0"
               type="text"
-              @click="getTeamDetail(scope.row.deptId,scope.row.deptName)">
+              @click="getTeamDetail(1,scope.row.deptId,scope.row.deptName,null)">
               {{
                 scope.row.deptName
               }}
@@ -970,9 +992,15 @@
       v-loading="promoterLoading"
     >
       <div slot="header" class="clearfix">
-              <span style="font-size: 16px; font-weight: bold; float: left"
-              >分达人数据</span
-              >
+        <span style="font-size: 16px; font-weight: bold; float: left">分达人数据</span>
+
+
+        <el-radio-group v-model="selectPromoterType" style="float: right" size="mini" @change="changePromoterType()">
+          <el-radio-button label="0">全部</el-radio-button>
+          <el-radio-button label="1">自营</el-radio-button>
+          <el-radio-button label="2">分销</el-radio-button>
+        </el-radio-group>
+
       </div>
       <el-table
         :data="promoterList"
@@ -985,6 +1013,8 @@
           prop="itemTitle"
           width="240"
         >
+
+
           <template slot-scope="scope">
             <div style="display: flex; width: 100%">
               <div style="width: 40%">
@@ -995,7 +1025,10 @@
                 />
               </div>
               <div style="width: 60%" class="item-name-calss">
-                <p>Id:{{ scope.row.clipUserId }}</p>
+                <p>
+                  Id:{{ scope.row.clipUserId }}
+
+                </p>
                 <p
                   style="
                     text-overflow: ellipsis;
@@ -1004,7 +1037,12 @@
                     width: 100%;
                   "
                   :title="scope.row.clipNickName">
-                  {{ scope.row.clipNickName }}
+                  <el-button
+                    style="text-align: center; padding: 3px 0"
+                    type="text"
+                    @click="getItemOrPromoterDetail(1,scope.row)">
+                    {{ scope.row.clipNickName }}
+                  </el-button>
                 </p>
               </div>
             </div>
@@ -1195,7 +1233,12 @@
                     width: 100%;
                   "
                   :title="scope.row.itemTitle">
-                  {{ scope.row.itemTitle }}
+                  <el-button
+                    style="text-align: center; padding: 3px 0"
+                    type="text"
+                    @click="getItemOrPromoterDetail(2,scope.row)">
+                    {{ scope.row.itemTitle }}
+                  </el-button>
                 </p>
 
 
@@ -1204,6 +1247,7 @@
           </template>
         </el-table-column>
         <el-table-column
+          v-if=" this.$store.getters.roles[0] == 'jy_admnin' || this.$store.getters.roles[0] == 'admin'"
           label="毛利"
           align="center"
           prop="teamMember"
@@ -1521,7 +1565,7 @@
       :before-close="handleClose">
       <el-table
         :data="teamDetailList"
-        v-loading="teamDetailLoading"
+        v-loading="drawerLoading"
         ref="multipleTable"
       >
         <el-table-column
@@ -1647,6 +1691,205 @@
     </el-drawer>
 
 
+    <!-- 达人商品出单详情抽屉-->
+    <el-drawer
+      size="950px"
+      :title="drawerName"
+      :visible.sync="itemPromoterDetailDrawer"
+      :direction="direction"
+      :before-close="handleClose">
+      <el-table
+        :data="itemPromoterDetailList"
+        v-loading="drawerLoading"
+        ref="multipleTable"
+      >
+        <el-table-column
+          v-if="this.itemPromoterType == 1"
+          label="商品信息"
+          align="center"
+          prop="itemId"
+          width="260"
+        >
+          <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">
+                <p>Id: {{ scope.row.itemId }}</p>
+                <p
+                  style="
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    overflow: hidden;
+                    width: 100%;
+                  "
+                  :title="scope.row.itemTitle">
+                  {{ scope.row.itemTitle }}
+                </p>
+
+
+              </div>
+            </div>
+          </template>
+
+        </el-table-column>
+
+
+        <el-table-column
+          label="达人信息"
+          align="center"
+          prop="itemTitle"
+          width="260"
+          v-if="this.itemPromoterType == 2"
+        >
+          <template slot-scope="scope">
+            <div style="display: flex; width: 100%">
+              <div style="width: 40%">
+                <img
+                  :src="scope.row.promoterUrl"
+                  alt=""
+                  style="width: 70px; height: auto"
+                />
+              </div>
+              <div style="width: 60%" class="item-name-calss">
+                <p>
+                  Id:{{ scope.row.clipUserId }}
+
+                </p>
+                <p
+                  style="
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    overflow: hidden;
+                    width: 100%;
+                  "
+                  :title="scope.row.clipNickName">
+                  {{ scope.row.clipNickName }}
+                </p>
+              </div>
+            </div>
+          </template>
+        </el-table-column>
+
+
+        <el-table-column
+          label="类型"
+          align="center"
+          prop="orderNum"
+          v-if="this.itemPromoterType == 2"
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.promoterType
+            }}
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="归属"
+          align="center"
+          prop="orderNum"
+          v-if="this.itemPromoterType == 2"
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.userName
+            }}
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="订单量"
+          align="center"
+          prop="orderNum"
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.orderNum
+            }}
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="环比"
+          align="center"
+          prop="orderNumRate"
+
+        >
+          <template slot-scope="scope">
+            <i v-if="scope.row.orderNumRate" :style=" scope.row.orderNumRate > 0 ? 'color:red' : 'color:green'"
+            >{{ (scope.row.orderNumRate) + "%" }} </i>
+            <i v-else>
+              -
+            </i>
+
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="有效率"
+          align="center"
+          prop="teamMember"
+
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.validRadio
+                ? (scope.row.validRadio).toFixed(2) + "%"
+                : "-"
+            }}
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="gmv"
+          align="center"
+          prop="payAmount"
+
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.payAmount
+            }}
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="有效率"
+          align="center"
+          prop="teamMember"
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.validPayAmountRadio
+                ? (scope.row.validPayAmountRadio).toFixed(2) + "%"
+                : "-"
+            }}
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="发货率"
+          align="center"
+          prop="teamMember"
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.deliveryRadio
+                ? (scope.row.deliveryRadio).toFixed(2) + "%"
+                : "-"
+            }}
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-drawer>
+
+
   </div>
 
 </template>
@@ -1656,24 +1899,27 @@
 import {
   getAddItemList, getAddItemListByClipUserId, getAddItemListByExpertId,
   getAddItemListByUserId, getDingPanItemList,
-  getGmvHours, getMentorBusinessList,
+  getGmvHours, getItemPromoterDetail, getMentorBusinessList,
   getMonthData,
-  getPeopleList, getPromoterList,
-  getSumInfo, getTeamDetail,
+  getPeopleList, getPromoterItemDetail, getPromoterList,
+  getSumInfo, getTeamDetail, getTeamExpertBusinessDetail,
   getTeamList, getTuiGuangList, getVideoList
 } from "@/api/jiaoyang/report";
 
 var echarts = require("echarts");
 export default {
-  name: "JyDingPan",
+  name: "jyDingPan",
   data() {
     return {
+      itemPromoterType: null,
+      itemPromoterDetailList: [],
+      itemPromoterDetailDrawer: false,
       videoInfo: null,
       openVideoVisible: false,
       drawerName: null,
       direction: 'rtl',
       teamDetaildrawer: false,
-      teamDetailLoading: false,
+      drawerLoading: false,
       teamDetailList: [],
       // 遮罩层
       loading: false,
@@ -1811,6 +2057,7 @@ export default {
       type: 1,
       promoterRankList: [],
       promoterTotal: 0,
+      selectPromoterType: 0,
     };
   },
   filters: {},
@@ -1846,29 +2093,98 @@ export default {
 
   methods: {
 
-    getTeamDetail(item, deptName) {
+    changePromoterType() {
+      this.getPromoterList();
+    },
+
+    getItemOrPromoterDetail(type, item) { // type 1 达人下商品出单详情 2 商品下达人出单详情
+      this.itemPromoterDetailDrawer = true;
+      this.drawerLoading = true;
+      if (type == 1) {
+        this.itemPromoterType = 1;
+        let name = item.clipNickName + "(" + item.clipUserId + ")";
+        this.drawerName = name;
+        getPromoterItemDetail(
+          this.addDateRange(
+            {clipUserId: item.clipUserId},
+            this.uploadDate,
+            "startDate",
+            "endDate"
+          )
+        ).then((response) => {
+          this.drawerLoading = false;
+          this.itemPromoterDetailList = response.data;
+        }).catch((e) => {
+          this.drawerLoading = false;
+        });
+      }
+      if (type == 2) {
+        this.itemPromoterType = 2;
+        let name = item.itemTitle + "(" + item.itemId + ")";
+        this.drawerName = name;
+        getItemPromoterDetail(
+          this.addDateRange(
+            {itemId: item.itemId, userId: this.userId},
+            this.uploadDate,
+            "startDate",
+            "endDate"
+          )
+        ).then((response) => {
+          this.drawerLoading = false;
+          this.itemPromoterDetailList = response.data;
+        }).catch((e) => {
+          this.drawerLoading = false;
+        });
+      }
+    },
+
+
+    getTeamDetail(type, item, deptName, userType) {
       this.drawerName = deptName;
       this.teamDetaildrawer = true;
-      this.teamDetailLoading = true;
-      getTeamDetail(
-        this.addDateRange(
-          {deptId: item},
-          this.uploadDate,
-          "startDate",
-          "endDate"
-        )
-      ).then((response) => {
-        this.teamDetailLoading = false;
-        this.teamDetailList = response.data;
-      }).catch((e) => {
-        this.teamDetailLoading = false;
-      });
+      this.drawerLoading = true;
+      if (type == 1) {
+        getTeamDetail(
+          this.addDateRange(
+            {deptId: item},
+            this.uploadDate,
+            "startDate",
+            "endDate"
+          )
+        ).then((response) => {
+          this.drawerLoading = false;
+          this.teamDetailList = response.data;
+        }).catch((e) => {
+          this.drawerLoading = false;
+        });
+      }
+
+
+      if (type == 2) {
+        getTeamExpertBusinessDetail(
+          this.addDateRange(
+            {userId: item, userType: userType},
+            this.uploadDate,
+            "startDate",
+            "endDate"
+          )
+        ).then((response) => {
+          this.drawerLoading = false;
+          this.teamDetailList = response.data;
+        }).catch((e) => {
+          this.drawerLoading = false;
+        });
+      }
+
+
     },
 
     handleClose() {
       this.teamDetaildrawer = false;
+      this.itemPromoterDetailDrawer = false;
       this.drawerName = null;
       this.teamDetailList = [];
+      this.itemPromoterDetailList = [];
     },
 // 获取汇总信息
     getSumData() {
@@ -1969,7 +2285,7 @@ export default {
       this.promoterLoading = true;
       getPromoterList(
         this.addDateRange(
-          {userId: this.userId},
+          {userId: this.userId, promoterType: this.selectPromoterType},
           this.uploadDate,
           "startDate",
           "endDate"
@@ -2187,6 +2503,7 @@ export default {
       let dd = date.getDate();
       dd = dd < 10 ? "0" + dd : dd;
       this.uploadDate = [`${y}-${MM}-${dd}`, `${y}-${MM}-${dd}`];
+      this.selectPromoterType = 0;
       this.resetForm("queryForm");
       this.handleQuery();
     },

+ 20 - 17
src/views/jiaoyang/jyPromoterDetailsReport.vue

@@ -21,7 +21,7 @@
       <el-form-item label="达人Id" prop="promoterId">
         {{ $route.query ? $route.query.id : "-" }}
       </el-form-item>
-      <br />
+      <br/>
       <el-form-item label="商品名称" prop="itemTitle">
         <el-input
           v-model="queryParams.itemTitle"
@@ -43,18 +43,19 @@
 
       <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-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          :loading="downLoadLoading"
-          >导出</el-button
-        >-->
+        <!--   <el-button
+             type="warning"
+             plain
+             icon="el-icon-download"
+             size="mini"
+             @click="handleExport"
+             :loading="downLoadLoading"
+             >导出</el-button
+           >-->
       </el-form-item>
     </el-form>
 
@@ -68,7 +69,7 @@
 
       <el-table-column label="商品图片" align="center" prop="imageUrl">
         <template slot-scope="scope">
-          <img :src="scope.row.imageUrl" alt="" style="width: 100px; height: auto" />
+          <img :src="scope.row.imageUrl" alt="" style="width: 100px; height: auto"/>
         </template>
       </el-table-column>
       <el-table-column label="商品名称" align="center" prop="itemTitle">
@@ -78,14 +79,14 @@
           </a>
         </template>
       </el-table-column>
-      <el-table-column label="商品Id" align="center" prop="itemId" />
+      <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>
+        <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="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) + "%" : "-" }}
@@ -109,7 +110,8 @@
           {{ allMoney(scope.row.payAmount / 100) }}
         </template>
       </el-table-column>
-      <el-table-column label="服务费率" align="center" prop="regimentalPromotionRate">
+      <el-table-column v-if="this.$store.getters.roles[0] == 'jy_admnin' || this.$store.getters.roles[0] == 'admin'"
+                       label="服务费率" align="center" prop="regimentalPromotionRate">
         <template slot-scope="scope">
           {{ scope.row.regimentalPromotionRate / 10 + "%" }}
         </template>
@@ -158,6 +160,7 @@ import {
   getOrderDetail,
   getOrderStatistics
 } from "@/api/jiaoyang/report";
+
 var echarts = require("echarts");
 export default {
   name: "JyPromoterDetailsReport",

+ 127 - 41
src/views/staging.vue

@@ -82,31 +82,55 @@
       </div>
       <el-row class="top-sum" style="display: flex" v-if="!!orderData">
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">订单总数</p>
             <p class="p-main">{{ orderData.allNumber }}</p>
+
+            <div style="display: flex; width: 100%">
+              <p class="p-title-1">
+                环比:<i :style="orderData.dateOrderRate > 0 ? 'color:red' : 'color:green'"
+              >{{ (orderData.dateOrderRate * 100).toFixed(2) + "%" }}
+              </i>
+              </p>
+            </div>
           </el-card>
         </el-col>
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">有效订单数</p>
             <p class="p-main">{{ orderData.validOrderNUm }}</p>
+            <div style="display: flex; width: 100%">
+              <p class="p-title-1">
+                环比:<i :style="orderData.validOrderNUmRoi > 0 ? 'color:red' : 'color:green'"
+              >{{ (orderData.validOrderNUmRoi) + "%" }}
+              </i>
+              </p>
+            </div>
           </el-card>
         </el-col>
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">失效订单数</p>
             <p class="p-main">{{ orderData.inValidOrderNUm }}</p>
+            <div style="display: flex; width: 100%">
+              <p class="p-title-1">
+                环比:<i :style="orderData.inValidOrderNUmRoi > 0 ? 'color:red' : 'color:green'"
+              >{{ (orderData.inValidOrderNUmRoi) + "%" }}
+              </i>
+              </p>
+
+            </div>
+
           </el-card>
         </el-col>
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">达人总数</p>
             <p class="p-main">{{ orderData.promoterCount }}</p>
           </el-card>
         </el-col>
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">
               {{ type == 1 ? "完成作业数" : "发货数" }}
             </p>
@@ -119,7 +143,7 @@
       <el-row class="top-sum" style="display: flex" v-if="!!orderData">
         <div style="display: flex; width: 100%">
           <div style="margin-right: 20px">
-            <p class="p-main-data">
+            <p class="p-main-data" v-if="!!orderData.dataOrderRate">
               数据对比:
 
               <i :style="orderData.dataOrderRate > 0 ? 'color:red' : 'color:green'">
@@ -138,38 +162,48 @@
             >
             </p>
           </div>
-          <div :style="dateType == 0 ? '' : 'visibility: hidden'">
-            <p class="p-main-data">
-              日环比:<i :style="orderData.dateOrderRate > 0 ? 'color:red' : 'color:green'"
-            >{{ (orderData.dateOrderRate * 100).toFixed(2) + "%" }}
-            </i>
-            </p>
-          </div>
         </div>
       </el-row>
       <el-row class="top-sum" style="display: flex" v-if="!!orderData">
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">订单金额</p>
             <p class="p-main">
               {{
                 orderData.orderAmount >= 0 ? priceFormat(orderData.orderAmount / 100) : 0
               }}
             </p>
+
+            <div style="display: flex; width: 100%">
+              <p class="p-title-1">
+                环比:<i
+                :style="orderData.dateAmountRate > 0 ? 'color:red' : 'color:green'"
+              >{{ (orderData.dateAmountRate * 100).toFixed(2) + "%" }}
+              </i>
+              </p>
+            </div>
+
           </el-card>
         </el-col>
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">有效订单金额</p>
             <p class="p-main">
               {{
                 orderData.baseAmount >= 0 ? priceFormat(orderData.baseAmount / 100) : 0
               }}
             </p>
+            <div style="display: flex; width: 100%">
+              <p class="p-title-1">
+                环比:<i :style="orderData.baseAmountRoi > 0 ? 'color:red' : 'color:green'"
+              >{{ (orderData.baseAmountRoi) + "%" }}
+              </i>
+              </p>
+            </div>
           </el-card>
         </el-col>
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">预估服务费</p>
             <p class="p-main">
               {{
@@ -178,11 +212,18 @@
                   : 0
               }}
             </p>
+            <div style="display: flex; width: 100%">
+              <p class="p-title-1">
+                环比:<i :style="orderData.regimentalPromotionAmountRoi > 0 ? 'color:red' : 'color:green'"
+              >{{ (orderData.regimentalPromotionAmountRoi) + "%" }}
+              </i>
+              </p>
+            </div>
           </el-card>
         </el-col>
 
         <el-col :span="5" v-if="this.mediaId == 1">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">预估服务费支出</p>
             <p class="p-main">
               {{
@@ -195,7 +236,7 @@
         </el-col>
 
         <el-col :span="5">
-          <el-card shadow="never" class="card-show">
+          <el-card shadow="never" class="card-show" style="height: 145px">
             <p class="p-title">
               {{ type == 1 ? "合格作业率" : "订单发货率" }}
             </p>
@@ -209,7 +250,7 @@
       <el-row class="top-sum" style="display: flex" v-if="!!orderData">
         <div style="display: flex; width: 100%">
           <div style="margin-right: 20px">
-            <p class="p-main-data">
+            <p class="p-main-data" v-if="!!orderData.dataAmountRate">
               数据对比:<i
               :style="orderData.dataAmountRate > 0 ? 'color:red' : 'color:green'"
             >{{ (orderData.dataAmountRate * 100).toFixed(2) + "%" }}</i
@@ -227,14 +268,6 @@
             >
             </p>
           </div>
-          <div :style="dateType == 0 ? '' : 'visibility: hidden'">
-            <p class="p-main-data">
-              日环比:<i
-              :style="orderData.dateAmountRate > 0 ? 'color:red' : 'color:green'"
-            >{{ (orderData.dateAmountRate * 100).toFixed(2) + "%" }}
-            </i>
-            </p>
-          </div>
         </div>
       </el-row>
     </el-card>
@@ -685,7 +718,7 @@ export default {
           this.chartList = res.result.today
           this.initEchart(
             'hourEchart',
-            this.hourEchartOption(res.result.today, res.result.yesterday, [], [])
+            this.hourEchartOption(res.result.today, res.result.yesterday, res.result.roi, [], [])
           )
         }
         this.hourEchartsLoading = false
@@ -1096,7 +1129,7 @@ export default {
       });
     },
     toOrderDetail(item) {
-      if(this.mediaId == 2){
+      if (this.mediaId == 2) {
         this.$router.replace({
           path: "/supplyChain/kuaishou/goodsDetails",
           query: {
@@ -1109,7 +1142,7 @@ export default {
       }
 
 
-      if(this.mediaId == 1){
+      if (this.mediaId == 1) {
         this.$router.replace({
           path: "/supplyChain/bytedance/bytedanceGoodsDetails",
           query: {
@@ -1123,17 +1156,16 @@ export default {
       }
 
 
-
     },
     toOrderList() {
-      if(this.mediaId == 2){
+      if (this.mediaId == 2) {
         this.$router.replace({
           path: "/supplyChain/kuaishou/goods",
         });
       }
 
 
-      if(this.mediaId == 1){
+      if (this.mediaId == 1) {
         this.$router.replace({
 
           path: "/supplyChain/bytedance/bytedanceGoods",
@@ -1142,7 +1174,7 @@ export default {
 
     },
     toPersonDetail(item) {
-      if(this.mediaId == 2 ){
+      if (this.mediaId == 2) {
         this.$router.replace({
           path: "/supplyChain/kuaishou/indexDetails",
           query: {
@@ -1155,7 +1187,7 @@ export default {
       }
 
 
-      if(this.mediaId == 1 ){
+      if (this.mediaId == 1) {
         this.$router.replace({
           path: "/supplyChain/bytedance/bytedancePromoterDetail",
           query: {
@@ -1170,14 +1202,14 @@ export default {
 
     },
     toPersonList() {
-      if(this.mediaId == 2){
+      if (this.mediaId == 2) {
         this.$router.replace({
           path: "/supplyChain/kuaishou/index",
         });
       }
 
 
-      if(this.mediaId == 1){
+      if (this.mediaId == 1) {
         this.$router.replace({
           path: "/supplyChain/bytedance/bytedancePromoterList",
         });
@@ -1291,7 +1323,7 @@ export default {
       return num;
     },
 
-    hourEchartOption(todayList, yesterdayList, timeData, lengthData) {
+    hourEchartOption(todayList, yesterdayList, roi, timeData, lengthData) {
       var that = this
       if (!!yesterdayList) {
         let option = {
@@ -1300,8 +1332,11 @@ export default {
             formatter: function (params) {
               if (todayList[0].time == 0) {
                 if (params.length > 1) {
-                  return `${params[0].marker}今天${params[0].name}时: ${params[0].value}<br/>
-                            ${params[1].marker}昨天${params[1].name}时: ${params[1].value}`
+                  return `${params[0].marker}今天${params[0].name}时:${params[0].value}<br/>
+                            ${params[1].marker}昨天${params[1].name}时:${params[1].value}<br/>
+                             ${params[2].marker}环比:${params[2].value}<br/>
+
+`
                 } else {
                   return `${params[0].marker}昨天${params[0].name}时: ${params[0].value}`
                 }
@@ -1345,6 +1380,20 @@ export default {
               position: 'bottom',
               offset: 30,
             },
+            {
+              id: 2,
+              type: 'category',
+              boundaryGap: false,
+              data: roi.map((item) => {
+                return item.time
+              }),
+              axisPointer: {
+                type: 'none',
+              },
+              position: 'bottom',
+              offset: 30,
+            },
+
           ],
 
           yAxis: {
@@ -1403,6 +1452,35 @@ export default {
                 borderColor: '#00FF00',
               },
             },
+
+
+            {
+              id: 2,
+              name: '环比',
+              type: 'line',
+              smooth: true,
+              symbol: 'circle',
+              xAxisIndex: 1,
+              data:
+                this.mediaDimension === 'a'
+                  ? roi.map((item) => {
+                    return item.roi
+                  })
+                  : roi.map((item) => {
+                    return item.roi
+                  }),
+
+              lineStyle: {
+                width: 0, // 线宽是0
+                color: 'rgba(0, 0, 0, 0)' // 线的颜色是透明的
+              },
+              itemStyle: {
+                borderColor: "#ffffff",
+                borderWidth: 0,
+              },
+            },
+
+
           ],
         }
         return option
@@ -1516,7 +1594,7 @@ export default {
 }
 
 .top-sum {
-  margin-bottom: 15px;
+  margin-bottom: 10px;
 
   ::v-deep .card-show {
     text-align: center;
@@ -1528,6 +1606,14 @@ export default {
       font-weight: bold;
     }
 
+    .p-title-1 {
+      width: 100%;
+      font-size: 12px;
+      color: darkgray;
+      font-weight: bold;
+      margin-right: 1px;
+    }
+
     .p-main {
       width: 100%;
       font-size: 20px;

+ 23 - 0
src/views/supplyChain/goods.vue

@@ -232,6 +232,23 @@
           sortable="custom"
         >
         </el-table-column>
+
+
+        <el-table-column
+          v-if="isShow"
+          label="环比"
+          align="center"
+          prop="orderNumRoi"
+          sortable="custom"
+        >
+          <template slot-scope="scope">
+            <i :style=" scope.row.orderNumRoi > 0 ? 'color:red' : 'color:green'"
+            >{{ scope.row.orderNumRoi + "%" }}
+            </i>
+          </template>
+        </el-table-column>
+
+
         <el-table-column
           label="有效订单数"
           align="center"
@@ -355,6 +372,7 @@ import {
   getTopPromoterByItemId,
   getSupplyChainUserList, getSupplyChainCourtshipList,
 } from "@/api/supplyChain/supplyChain";
+import fa from "element-ui/src/locale/lang/fa";
 
 export default {
   name: "Goods",
@@ -372,6 +390,7 @@ export default {
       logLoading: false,
       // 遮罩层
       loading: true,
+      isShow: true,
       // 选中数组
       ids: [],
       // 非单个禁用
@@ -441,10 +460,14 @@ export default {
   },
   methods: {
     cleanBindDate() {
+      this.isShow = true;
       this.bindDate = [];
     },
     cleanUploadDate() {
       this.uploadDate = [];
+      this.isShow = false;
+      this.prop = "orderNum";
+      this.sort = "desc";
     },
     showTitle(visible) {
       console.log(visible);

+ 13 - 0
src/views/supplyChain/index.vue

@@ -110,6 +110,19 @@
       >
       </el-table-column>
       <el-table-column
+        width="100px"
+        label="环比"
+        align="center"
+        prop="orderNumRoi"
+      >
+        <template slot-scope="scope">
+          <i :style=" scope.row.orderNumRoi > 0 ? 'color:red' : 'color:green'"
+          >{{ scope.row.orderNumRoi + "%" }}
+          </i>
+        </template>
+      </el-table-column>
+
+      <el-table-column
         label="有效单数"
         align="center"
         prop="validOrderNUm"

+ 34 - 15
src/views/supplyChain/investment.vue

@@ -42,7 +42,7 @@
                 :style="
                   item.status == '0' ? 'backgroundColor:green' : 'backgroundColor:red'
                 "
-                >{{ item.value }}</span
+              >{{ item.value }}</span
               ><span>{{ item.nickMame }}</span>
             </div>
           </el-option>
@@ -79,7 +79,8 @@
 
       <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-button
@@ -89,7 +90,8 @@
           size="mini"
           @click="handleExport"
           :loading="downLoadLoading"
-        >导出</el-button
+        >导出
+        </el-button
         >
       </el-form-item>
     </el-form>
@@ -108,10 +110,22 @@
           </a>
         </template>
       </el-table-column>
-      <el-table-column label="商品数" align="center" prop="itemCount" />
-      <el-table-column label="发样数" align="center" prop="sendSampleCount" />
-      <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="itemCount"/>
+      <el-table-column label="发样数" align="center" prop="sendSampleCount"/>
+      <el-table-column label="订单数" align="center" prop="orderNum"></el-table-column>
+      <el-table-column
+        label="环比"
+        v-if="isShow"
+        align="center"
+        prop="orderNumRoi"
+      >
+        <template slot-scope="scope">
+          <i :style=" scope.row.orderNumRoi > 0 ? 'color:red' : 'color:green'"
+          >{{ scope.row.orderNumRoi + "%" }}
+          </i>
+        </template>
+      </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) + "%" : "-" }}
@@ -126,9 +140,9 @@
       >
         <template slot-scope="scope">
           {{
-          scope.row.shippingGreen
-          ? (scope.row.shippingGreen * 100).toFixed(2) + "%"
-          : "-"
+            scope.row.shippingGreen
+              ? (scope.row.shippingGreen * 100).toFixed(2) + "%"
+              : "-"
           }}
         </template>
       </el-table-column>
@@ -218,11 +232,13 @@ import {
   getAdminReportList,
   downFilePost,
 } from "@/api/supplyChain/supplyChain";
+
 export default {
   name: "Investment",
   dicts: ["sys_normal_disable"],
   data() {
     return {
+      isShow: true,
       downLoadLoading: false,
       dialogTableVisible: false,
       logPage: {
@@ -295,17 +311,20 @@ export default {
     });
   },
   methods: {
-    cleanBindDate(){
+    cleanBindDate() {
+      this.isShow = true;
       this.bindDate = [];
     },
 
-    cleanUploadDate(){
+    cleanUploadDate() {
+      this.isShow = false;
       this.uploadDate = [];
+
     },
     /** 导出按钮操作 */
     handleExport() {
       this.downLoadLoading = true;
-      if(!!this.bindDate){
+      if (!!this.bindDate) {
         this.queryParams.bindStartDate = this.bindDate[0],
           this.queryParams.bindEndDate = this.bindDate[1]
       }
@@ -361,9 +380,9 @@ export default {
     /** 查询字典类型列表 */
     getList() {
       this.loading = true;
-      if(!!this.bindDate){
+      if (!!this.bindDate) {
         this.queryParams.bindStartDate = this.bindDate[0],
-        this.queryParams.bindEndDate = this.bindDate[1]
+          this.queryParams.bindEndDate = this.bindDate[1]
       }
 
       getAdminReportList(

+ 431 - 0
src/views/supplyChain/shopDetails.vue

@@ -0,0 +1,431 @@
+<style scoped lang="scss">
+.item-name-calss p {
+  margin: 0;
+  text-align: left;
+}
+
+::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="sellerName">
+        {{ $route.query ? $route.query.sellerName : "-" }}
+      </el-form-item>
+      <el-form-item label="店铺Id" prop="sellerId">
+        {{ $route.query ? $route.query.sellerId : "-" }}
+      </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
+        label="商品名称"
+        align="center"
+        prop="itemTitle"
+        width="350"
+        fixed="left"
+      >
+        <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
+                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 }}元</p>
+            </div>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="归属人" align="center" prop="userName"></el-table-column>
+      <el-table-column
+        label="ccr"
+        align="center"
+        prop="ccrValue"
+        sortable="custom"
+      >
+        <template slot-scope="scope">
+          <font v-if="scope.row.ccrInt >= 1.5" color="red">
+            {{ scope.row.ccrValue }}
+          </font>
+          <font v-if="scope.row.ccrInt < 1.5">
+            {{ scope.row.ccrValue }}
+          </font>
+        </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 + "%" : "-" }}
+        </template>
+      </el-table-column>
+      <el-table-column label="发货数" align="center" prop="deliveryNum" width="100">
+      </el-table-column>
+      <el-table-column
+        label="发货率"
+        align="center"
+        prop="shippingGreen"
+      >
+        <template slot-scope="scope">
+          {{
+            scope.row.shippingGreen
+              ? scope.row.shippingGreen + "%"
+              : "-"
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="有效发货数" align="center" prop="effDeliveryNum" 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 + "%"
+              : "-"
+          }}
+        </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">
+          {{ scope.row.payAmount }}
+        </template>
+      </el-table-column>
+      <el-table-column label="服务费率" align="center" prop="regimentalPromotionRate">
+        <template slot-scope="scope">
+          {{ scope.row.regimentalPromotionRate + "%" }}
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getShopDetail"
+    />
+
+  </div>
+</template>
+
+<script>
+import {
+  listType,
+  getType,
+  delType,
+  addType,
+  updateType,
+  refreshCache,
+} from "@/api/system/dict/type";
+import {
+  downFilePost,
+  samplesCheck, getShopDetail,
+} from "@/api/supplyChain/supplyChain";
+
+var echarts = require("echarts");
+export default {
+  name: "ShopDetail",
+  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,
+        userId: 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: {},
+  created() {
+    this.queryParams.userId = this.$store.getters.userId;
+    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.sellerId &&
+      this.$route.query.orderStartDate &&
+      this.$route.query.orderEndDate
+    ) {
+      this.getShopDetail();
+    }
+  },
+  mounted() {
+    this.$nextTick(() => {
+      //   this.getList();
+    });
+  },
+  methods: {
+    /** 导出按钮操作 */
+    handleExport() {
+      this.downLoadLoading = true;
+      downFilePost("/isv/supply_chain/exportShopDetail", {
+        ...this.queryParams,
+        orderStartDate: this.$route.query.orderStartDate,
+        orderEndDate: this.$route.query.orderEndDate,
+        sellerId: this.$route.query.sellerId,
+      }).then((res) => {
+        let blob = new Blob([res], {
+          type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+        });
+        let downloadElement = document.createElement("a");
+        let href = window.URL.createObjectURL(blob); //创建下载的链接
+        downloadElement.href = href;
+        downloadElement.download = `店铺_${this.$route.query.sellerName}${this.$route.query.orderStartDate}-${this.$route.query.orderEndDate}商品详情.xlsx`; //下载后文件名
+        document.body.appendChild(downloadElement);
+        downloadElement.click(); //点击下载
+        document.body.removeChild(downloadElement); //下载完成移除元素
+        window.URL.revokeObjectURL(href); //释放掉blob对象
+        this.downLoadLoading = false;
+      });
+    },
+    toDetail(id) {
+    },
+    toIndexDetail(item) {
+      this.$router.replace({
+        path: "/supplyChain/kuaishou/goodsDetails",
+        query: {
+          id: item.itemId,
+          name: item.itemTitle,
+          orderStartDate: this.$route.query.orderStartDate,
+          orderEndDate: this.$route.query.orderEndDate,
+        },
+      });
+    },
+    getShopDetail() {
+      this.loading = true;
+      getShopDetail({
+        ...this.queryParams,
+        orderStartDate: this.$route.query.orderStartDate,
+        orderEndDate: this.$route.query.orderEndDate,
+        sellerId: this.$route.query.sellerId,
+      }).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.getShopDetail();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.pageNum = 1;
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+    },
+  },
+};
+</script>

+ 423 - 0
src/views/supplyChain/shopList.vue

@@ -0,0 +1,423 @@
+<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="店铺Id" prop="sellerId">
+        <el-input
+          v-model.number="queryParams.sellerId"
+          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="120"
+        >
+          <template slot-scope="scope">
+            <div style="width: 100%" class="item-name-calss">
+              <p>
+                {{ scope.row.sellerId }}</p>
+              <p class="item-name-calss">
+
+                <a
+                  @click="toShopDetail(scope.row)"
+                  style="
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    overflow: hidden;
+                    width: 100%;
+                  "
+
+                >
+                  {{ scope.row.sellerName }}
+                </a>
+              </p>
+            </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 + "%"
+                : "-"
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="订单金额"
+          align="center"
+          prop="payAmount"
+          sortable="custom"
+        >
+        </el-table-column>
+
+        <el-table-column
+          label="发货数"
+          align="center"
+          prop="deliveryNum"
+          sortable="custom"
+        >
+        </el-table-column>
+
+        <el-table-column
+          label="发货率"
+          align="center"
+          prop="shippingGreen"
+        >
+          <template slot-scope="scope">
+            {{
+              scope.row.shippingGreen
+                ? scope.row.shippingGreen + "%"
+                : "-"
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="有效发货数"
+          align="center"
+          prop="effDeliveryNum"
+          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 + "%"
+                : "-"
+            }}
+          </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 {
+  downFilePost,
+  getTopPromoterByItemId,
+  getSupplyChainUserList, getSupplyChainCourtshipList, getShopList,
+} from "@/api/supplyChain/supplyChain";
+
+export default {
+  name: "ShopList",
+  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;
+    this.queryParams.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: {
+
+    /** 导出按钮操作 */
+    handleExport() {
+      this.downLoadLoading = true;
+      downFilePost(
+        "/isv/supply_chain/exportShopList",
+        this.addDateRange(
+          this.queryParams,
+          this.uploadDate,
+          "orderStartDate",
+          "orderEndDate"
+        )
+      ).then((res) => {
+        let blob = new Blob([res], {
+          type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+        });
+        let downloadElement = document.createElement("a");
+        let href = window.URL.createObjectURL(blob); //创建下载的链接
+        downloadElement.href = href;
+        downloadElement.download = `商品列表.xlsx`; //下载后文件名
+        document.body.appendChild(downloadElement);
+        downloadElement.click(); //点击下载
+        document.body.removeChild(downloadElement); //下载完成移除元素
+        window.URL.revokeObjectURL(href); //释放掉blob对象
+        this.downLoadLoading = false;
+      });
+    },
+    toShopDetail(item) {
+      this.$router.replace({
+        path: "/supplyChain/kuaishou/shopDetails",
+        query: {
+          sellerId: item.sellerId,
+          sellerName: item.sellerName,
+          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();
+    },
+    getPersonList() {
+      getSupplyChainCourtshipList().then((response) => {
+        this.queryParamsList.personList = response.rows;
+      });
+    },
+    /** 查询字典类型列表 */
+    getList() {
+      this.loading = true;
+
+      getShopList(
+        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>