潘超林 2 kuukautta sitten
vanhempi
commit
3176b8ec6c

+ 46 - 0
src/api/chain/index.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+
+// 连锁店铺
+export function queryPage(query) {
+  return request({
+    url: '/system/storeMultipleShop/queryPage',
+    method: 'get',
+    params: query
+  })
+}
+
+export function storeInfo(query) {
+  return request({
+    url: '/system/storeMultipleShop/storeInfo',
+    method: 'get',
+    params: query
+  })
+}
+export function storeMultipleShopSave(query) {
+  return request({
+    url: '/system/storeMultipleShop/save',
+    method: 'post',
+    data: query
+  })
+}
+export function statistics(query) {
+  return request({
+    url: '/system/storeMultipleShop/statistics',
+    method: 'get',
+    params: query
+  })
+}
+export function queryOrderByShopId(query) {
+  return request({
+    url: '/system/storeMultipleShop/queryOrderByShopId',
+    method: 'get',
+    params: query
+  })
+}
+export function spuInfoByCarPayNo(query) {
+  return request({
+    url: '/system/order/sendSecondOrderInfo/' + query,
+    method: 'get',
+  })
+}

+ 32 - 31
src/api/common/index.js

@@ -1,52 +1,53 @@
 import request from '@/utils/request'
 
 export function getCity(query) {
-    return request({
-        url: '/getCity',
-        method: 'get',
-        params: query
-    })
+  return request({
+    url: '/getCity',
+    method: 'get',
+    params: query
+  })
 }
 
 export function getClassificationListPage(query) {
-    return request({
-        url: '/system/classification/getClassificationListPage',
-        method: 'get',
-        params: query
-    })
+  return request({
+    url: '/system/classification/getClassificationListPage',
+    method: 'get',
+    params: query
+  })
 }
 export function modifyStoreInfo(query) {
-    return request({
-        url: '/system/appUser/modifyStoreInfo',
-        method: 'post',
-        data: query
-    })
+  return request({
+    url: '/system/appUser/modifyStoreInfo',
+    method: 'post',
+    data: query
+  })
 }
 /**
  * 设置账期
- * @param {*} query 
- * @returns 
+ * @param {*} query
+ * @returns
  */
 export function setAccount(query) {
-    return request({
-        url: '/system/goods/setAccount',
-        method: 'post',
-        data: query
-    })
+  return request({
+    url: '/system/goods/setAccount',
+    method: 'post',
+    data: query
+  })
 }
 
 export function getStoreInfo(query) {
-    return request({
-        url: '/system/appUser/getStoreInfo',
-        method: 'get',
-        params: query
-    })
+  return request({
+    url: '/system/appUser/getStoreInfo',
+    method: 'get',
+    params: query
+  })
 }
 
 export function getDict(query) {
-    return request({
-        url: '/system/dict/data/type/' + query,
-        method: 'get',
-    })
+  return request({
+    url: '/system/dict/data/type/' + query,
+    method: 'get',
+  })
 }
 
+

+ 1 - 1
src/api/manage/order.js

@@ -41,7 +41,7 @@ export function statisticsAfterSaleOrder(query) {
 
 export function queryAfterSalePage(query) {
   return request({
-    url: '/system/afterSale/queryAfterSalePage',
+    url: '/system/afterSale/queryAfterSalePageNew',
     method: 'get',
     params: query
   })

+ 72 - 0
src/components/areaCascader/index.vue

@@ -0,0 +1,72 @@
+<template>
+  <div>
+    <el-cascader
+      v-model="modelValue"
+      ref="myCascader"
+      :placeholder="placeholder"
+      :props="props"
+      style="width: 100%"
+      @change="araeChange"
+    />
+  </div>
+</template>
+
+<script>
+import { getCity } from "@/api/common/index";
+export default {
+  props: {
+    modelValue: {
+      type: String,
+    },
+    placeholder: {
+      type: String,
+    },
+  },
+  data() {
+    return {
+      area: [],
+      props: {
+        lazy: true,
+        lazyLoad: this.lazyLoad,
+        checkStrictly: true,
+      },
+    };
+  },
+  methods: {
+    araeChange(val) {
+      this.$emit("update:modelValue", val);
+      this.$emit("change", val);
+    },
+    lazyLoad(node, resolve) {
+      let level = node.level;
+      if (!node.data) {
+        getCity().then((res) => {
+          //接口
+          const nodes = Array.from(res.data).map((item, index) => ({
+            value: item.cityId,
+            label: `${item.name}`,
+            leaf: level >= 2,
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
+      } else if (level == 1) {
+        getCity({ parentCityId: node.data.value }).then((res) => {
+          const nodes = Array.from(res.data).map((item) => ({
+            value: item.cityId,
+            label: `${item.name}`,
+            leaf: true, // 二级节点设为叶子节点
+            disabled: false, // 二级节点设为可选
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
+      } else {
+        resolve({});
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 3 - 0
src/main.js

@@ -43,6 +43,8 @@ import VueMeta from 'vue-meta'
 // 字典数据组件
 import DictData from '@/components/DictData'
 import moment from 'moment'
+import areaCascader from "@/components/areaCascader";
+
 // 全局方法挂载
 Vue.prototype.getCity = getCity
 Vue.prototype.getDicts = getDicts
@@ -56,6 +58,7 @@ Vue.prototype.download = download
 Vue.prototype.handleTree = handleTree
 Vue.prototype.$moment = moment
 // 全局组件挂载
+Vue.component('areaCascader', areaCascader)
 Vue.component('DictTag', DictTag)
 Vue.component('Pagination', Pagination)
 Vue.component('RightToolbar', RightToolbar)

+ 119 - 123
src/views/manage/afterSaleOrder.vue

@@ -48,93 +48,59 @@
       v-show="showSearch"
       label-width="80px"
     >
-      <el-form-item label="商品名称" prop="spuName">
+      <el-form-item prop="key">
         <el-input
-          v-model="queryParams.spuName"
-          placeholder="请输入商品名称"
+          v-model="queryParams.key"
+          placeholder="请输入商品名称/订单编号/买家手机号搜索"
           clearable
-          style="width: 180px"
-        />
-      </el-form-item>
-      <el-form-item label="订单编号" prop="userOrderSn">
-        <el-input
-          v-model="queryParams.userOrderSn"
-          placeholder="请输入订单编号"
-          clearable
-          style="width: 180px"
-        />
-      </el-form-item>
-      <el-form-item label="买家手机号" prop="userPhone" label-width="140px">
-        <el-input
-          v-model="queryParams.userPhone"
-          placeholder="请输入下单用户手机号"
-          clearable
-          style="width: 180px"
+          style="width: 380px"
         />
       </el-form-item>
-      <el-form-item label="下单时间" prop="createTime">
+
+      <el-form-item label="申请时间" prop="times">
         <el-date-picker
-          v-model="queryParams.createTime"
+          v-model="queryParams.times"
+          type="daterange"
           value-format="yyyy-MM-dd"
           format="yyyy-MM-dd"
-          type="date"
-          placeholder="请选择下单时间"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="pickerChange"
         >
         </el-date-picker>
       </el-form-item>
-     
-      <el-form-item label="售后状态" prop="orderStatusKey">
-        <el-select
-          v-model="queryParams.orderStatusKey"
-          placeholder="请选择支付方式"
-          style="width: 180px"
-        >
-          <el-option label="已完成" value="ALREADY"> </el-option>
-          <el-option label="已拒绝" value="ALREADY_REFUSE"> </el-option>
-          <el-option label="待审核" value="WAIT_AUDIT"> </el-option>
-       
-        </el-select>
-      </el-form-item>
-      <!-- <el-form-item label="配送方式" prop="deliveryType ">
-        <el-select
-          v-model="queryParams.deliveryType "
-          placeholder="请选择支付方式"
-          style="width: 180px"
-        >
-          <el-option label="自提" value="0"> </el-option>
-          <el-option label="同城下单" value="1"> </el-option>
-          <el-option label="异地下单" value="2"> </el-option>
-        </el-select>
-      </el-form-item> -->
-      <el-form-item label="支付方式" prop="paymentType">
+
+      <el-form-item label="售后状态" prop="afterSaleStatus">
         <el-select
-          v-model="queryParams.paymentType"
-          placeholder="请选择支付方式"
+          v-model="queryParams.afterSaleStatus"
+          placeholder="请选择售后状态"
           style="width: 180px"
         >
-          <el-option label="支付宝" value="alipay"> </el-option>
-          <el-option label="微信支付" value="wechat"> </el-option>
+          <el-option label="全部" value=""> </el-option>
+          <el-option label="未申请" value="0"> </el-option>
+          <el-option label="已申请" value="1"> </el-option>
+          <el-option label="审核失败" value="2"> </el-option>
+          <el-option label="审核成功(退款中)" value="3"> </el-option>
+          <el-option label="退款成功" value="4"> </el-option>
+          <el-option label="退款失败(联系客服解决)" value="5"> </el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
+        <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 icon="el-icon-refresh" size="mini" @click="resetQuery"
+          >重置</el-button
+        >
       </el-form-item>
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          size="mini"
-          @click="printOrderBtn"
-          :disabled="!selectList.length > 0"
-          >订单打印</el-button
-        >
-      </el-col> -->
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -159,7 +125,11 @@
 
       <el-table-column label="商品图片" align="center" prop="skuPic">
         <template slot-scope="scope">
-          <el-image :src="scope.row.skuPic" style="width: 60px; height: 60px"> </el-image>
+          <el-image
+            :src="scope.row.goodsImg ? scope.row.goodsImg : scope.row.skuPic"
+            style="width: 60px; height: 60px"
+          >
+          </el-image>
         </template>
       </el-table-column>
 
@@ -173,44 +143,45 @@
           >
         </template>
       </el-table-column>
-      <el-table-column label="包装方式" align="center" prop="packageType">
+      <el-table-column label="包装方式" align="center" prop="packing">
       </el-table-column>
 
       <el-table-column label="规格名称" align="center" prop="specsName" />
       <el-table-column label="规格值" align="center" prop="specsValue" />
-      <el-table-column label="实付金额(元)" align="center" prop="goodsAmount">
-        <template slot-scope="scope"> {{ scope.row.goodsAmount }}元 </template>
+      <el-table-column label="实付金额" align="center">
+        <template slot-scope="scope">
+          {{ scope.row.paymentAmount }}元
+        </template>
       </el-table-column>
-      <el-table-column label="订单编号" align="center" prop="userOrderSn" width="220" />
+      <el-table-column
+        label="订单编号"
+        align="center"
+        prop="carPayNo"
+        width="220"
+      />
       <el-table-column label="买家姓名" align="center" prop="userNick" />
       <el-table-column label="买家头像" align="center">
         <template slot-scope="scope">
           <el-avatar :size="40" :src="scope.row.userHeadUrl"></el-avatar>
         </template>
       </el-table-column>
-      <el-table-column label="买家手机号" align="center" prop="userPhone" />
+      <el-table-column
+        label="买家手机号"
+        align="center"
+        prop="userPhone"
+        width="100"
+      />
 
       <el-table-column
         label="商品名称"
         align="center"
         prop="skuName"
         width="150"
-        :show-overflow-tooltip="true"
       >
+        <template slot-scope="scope">
+          {{ scope.row.title ? scope.row.title : scope.row.skuName }}
+        </template>
       </el-table-column>
-      <!-- <el-table-column label="配送方式" align="center" prop="paymentType" width="150">
-            <template slot-scope="scope">
-              {{
-                scope.row.deliveryType == "0"
-                  ? "自提"
-                  : scope.row.deliveryType == "1"
-                  ? "同城下单"
-                  : scope.row.deliveryType == "2"
-                  ? "异地下单"
-                  : ""
-              }}
-            </template>
-          </el-table-column> -->
       <el-table-column label="支付方式" align="center">
         <template slot-scope="scope">
           {{
@@ -286,7 +257,12 @@
     />
 
     <!-- 添加或修改参数配置对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
       <el-descriptions title="" column="3">
         <el-descriptions-item label="售后状态">
           <el-tag>
@@ -319,14 +295,18 @@
         }}</el-descriptions-item>
         <el-descriptions-item label="申请时间">
           {{
-            detailInfo.dxAfterSaleVO ? parseTime(detailInfo.dxAfterSaleVO.createTime) : ""
+            detailInfo.dxAfterSaleVO
+              ? parseTime(detailInfo.dxAfterSaleVO.createTime)
+              : ""
           }}
         </el-descriptions-item>
         <el-descriptions-item label="问题描述">{{
           detailInfo.dxAfterSaleVO ? detailInfo.dxAfterSaleVO.problemDesc : ""
         }}</el-descriptions-item>
         <el-descriptions-item label="实际退款金额(元)">{{
-          detailInfo.dxAfterSaleVO ? detailInfo.dxAfterSaleVO.actualRefundAmount : ""
+          detailInfo.dxAfterSaleVO
+            ? detailInfo.dxAfterSaleVO.actualRefundAmount
+            : ""
         }}</el-descriptions-item>
         <el-descriptions-item label="退款时间">
           {{
@@ -339,7 +319,7 @@
 
       <el-descriptions title="订单详情" column="3">
         <el-descriptions-item label="订单编号">{{
-          detailInfo ? detailInfo.userOrderSn : ""
+          detailInfo ? detailInfo.carPayNo : ""
         }}</el-descriptions-item>
         <el-descriptions-item label="订单状态">
           {{
@@ -476,7 +456,8 @@
         </el-table-column>
         <el-table-column prop="price" label="商品单价"> </el-table-column>
         <el-table-column prop="quantity" label="下单数量"> </el-table-column>
-        <el-table-column prop="totalPrice" label="总金额(元)"> </el-table-column>
+        <el-table-column prop="totalPrice" label="总金额(元)">
+        </el-table-column>
       </el-table>
     </el-dialog>
 
@@ -545,18 +526,17 @@ export default {
       queryParams: {
         pageNo: 1,
         pageSize: 10,
-        spuName: "",
-        userOrderSn: "",
-        userPhone: "",
-        createTime: "",
-        orderStatusKey: "",
-        paymentType: "",
+        key: "",
+        afterSaleStatus: "",
+        placeOrderStartTime: "",
+        placeOrderEndTime: "",
+        times:[]
       },
       printForm: {
         sn: "",
       },
       column: [
-        { header: "订单编号", key: "userOrderSn", width: 20 },
+        { header: "订单编号", key: "carPayNo", width: 20 },
         { header: "买家姓名", key: "userNick", width: 20 },
         { header: "买家手机号", key: "userPhone", width: 20 },
         { header: "商品名称", key: "skuName", width: 20 },
@@ -587,6 +567,10 @@ export default {
     this.getEquipmentList();
   },
   methods: {
+    pickerChange(val) {
+      this.queryParams.placeOrderStartTime = val[0];
+      this.queryParams.placeOrderEndTime = val[1];
+    },
     getEquipmentList() {
       equipmentList().then((res) => {
         if (res.code == 200) {
@@ -623,40 +607,47 @@ export default {
     getList() {
       this.selectList = [];
       this.loading = true;
-      queryAfterSalePage(this.addDateRange(this.queryParams, this.dateRange)).then(
-        (response) => {
-          let list = response.data.records;
-          let totalList = [];
-          for (let i = 0; i < list.length; i++) {
-            if (list[i].goodsInfo) {
-              var goods = JSON.parse(list[i].goodsInfo);
-              for (let a = 0; a < goods.length; a++) {
-                let bb = {};
-                if (goods[a].specsValue.length > 0) {
-                  for (let s = 0; s < goods[a].specsValue.length; s++) {
-                    bb = {
-                      ...list[i],
-                      ...goods[a],
-                      ...goods[a].specsValue[s],
-                    };
-                    totalList.push(bb);
-                  }
-                } else {
+      queryAfterSalePage(
+        this.addDateRange(this.queryParams, this.dateRange)
+      ).then((response) => {
+        let list = response.data.records;
+        let totalList = [];
+        for (let i = 0; i < list.length; i++) {
+          let as = "";
+
+          if (list[i].afterSaleGoodsInfo) {
+            as = list[i].afterSaleGoodsInfo;
+          } else {
+            as = list[i].goodsInfo;
+          }
+          if (as) {
+            var goods = JSON.parse(as);
+            for (let a = 0; a < goods.length; a++) {
+              let bb = {};
+              if (goods[a].specsValue.length > 0) {
+                for (let s = 0; s < goods[a].specsValue.length; s++) {
                   bb = {
                     ...list[i],
                     ...goods[a],
+                    ...goods[a].specsValue[s],
                   };
                   totalList.push(bb);
                 }
+              } else {
+                bb = {
+                  ...list[i],
+                  ...goods[a],
+                };
+                totalList.push(bb);
               }
             }
           }
-          this.spuList = totalList;
-          this.total = response.data.total;
-          this.loading = false;
-          console.log("loading", this.loading);
         }
-      );
+        this.spuList = totalList;
+        this.total = response.data.total;
+        this.loading = false;
+        console.log("loading", this.loading);
+      });
     },
     objectSpanMethod({ row, column, rowIndex, columnIndex }) {
       if (
@@ -671,10 +662,13 @@ export default {
         columnIndex === 13 ||
         columnIndex === 15
       ) {
-        if (rowIndex === 0 || row.userOrderSn != this.spuList[rowIndex - 1].userOrderSn) {
+        if (
+          rowIndex === 0 ||
+          row.carPayNo != this.spuList[rowIndex - 1].carPayNo
+        ) {
           let rowspan = 0;
           this.spuList.forEach((element) => {
-            if (element.userOrderSn === row.userOrderSn) {
+            if (element.carPayNo === row.carPayNo) {
               rowspan++;
             }
           });
@@ -734,6 +728,8 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.dateRange = [];
+      this.queryParams.placeOrderStartTime = "";
+      this.queryParams.placeOrderEndTime = "";
       this.resetForm("queryForm");
       this.handleQuery();
     },

+ 1 - 8
src/views/manage/sales.vue

@@ -337,14 +337,7 @@ export default {
       });
     },
     cascaderChange(val) {
-      if (val.length == 1) {
-        this.queryParams.categoryId = val[0];
-      } else if (val.length == 2) {
-        this.queryParams.categoryId = val[1];
-      } else if (val.length == 3) {
-        this.queryParams.categoryId = val[2];
-      }
-      // this.getList();
+      this.queryParams.categoryId = val[val.length - 1];
     },
     categoryLazyLoad(node, resolve) {
       let that = this;

+ 15 - 4
src/views/manage/shopInfo.vue

@@ -1,6 +1,6 @@
 <template>
   <div style="padding: 20px">
-    <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
+    <el-tabs v-model="activeName" @tab-click="handleClick">
       <el-tab-pane label="基本信息" :name="1">
         <div style="padding: 20px">
           <el-descriptions title="基本信息" :column="1">
@@ -52,10 +52,14 @@
               ><image :src="shopInfo ? shopInfo.storeIntro : ''" mode=""
             /></el-descriptions-item>
             <el-descriptions-item label="是否启用代金卷">
-              <el-tag> {{ shopInfo.enableVoucher == 0 ? "未启用" : "启用" }}</el-tag>
+              <el-tag>
+                {{ shopInfo.enableVoucher == 0 ? "未启用" : "启用" }}</el-tag
+              >
             </el-descriptions-item>
             <el-descriptions-item label="使用代金卷类型">
-              <el-tag> {{ shopInfo.useVoucherType == 0 ? "满减券" : "抵扣券" }}</el-tag>
+              <el-tag>
+                {{ shopInfo.useVoucherType == 0 ? "满减券" : "抵扣券" }}</el-tag
+              >
             </el-descriptions-item>
           </el-descriptions>
         </div>
@@ -88,7 +92,9 @@
                 :src="item"
                 :key="index"
                 :preview-src-list="
-                  shopInfo.auth.idCardUrl ? JSON.parse(shopInfo.auth.idCardUrl) : []
+                  shopInfo.auth.idCardUrl
+                    ? JSON.parse(shopInfo.auth.idCardUrl)
+                    : []
                 "
               />
             </el-descriptions-item>
@@ -110,13 +116,18 @@
           </el-descriptions>
         </div>
       </el-tab-pane>
+      <el-tab-pane label="连锁店铺" :name="3">
+        <chainStore></chainStore>
+      </el-tab-pane>
     </el-tabs>
   </div>
 </template>
 
 <script>
+import chainStore from "./shopInfoCommon/index.vue";
 import { getStoreInfo } from "@/api/common/index";
 export default {
+  components: { chainStore },
   data() {
     return {
       activeName: 1,

+ 153 - 0
src/views/manage/shopInfoCommon/detail-order.vue

@@ -0,0 +1,153 @@
+<template>
+  <div>
+    <el-dialog
+      title="订单商品详情"
+      :visible.sync="dialogVisible"
+      width="50%"
+      :before-close="handleClose"
+    >
+      <div>
+        <el-table v-loading="loading" :data="spuList" :border="true">
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column label="商品名称" align="center" prop="skuName" />
+          <el-table-column label="商品规格" align="center" prop="storeName">
+            <template slot-scope="scope">
+              <span v-for="(item, index) in scope.row.specsValue">
+                {{ item.specsName }}:{{ item.specsValue }}
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="商品分类"
+            align="center"
+            prop="categoryName"
+          />
+          <el-table-column label="单价" align="center" prop="price">
+            <template slot-scope="scope">
+              ¥{{ scope.row.price }}{{ scope.row.unit }}
+            </template>
+          </el-table-column>
+          <el-table-column label="数量" align="center" prop="quantity">
+          </el-table-column>
+          <el-table-column label="优惠" align="center" prop="discountAmount" />
+          <el-table-column label="包装费" align="center" prop="packingPrice" />
+          <el-table-column label="配送费" align="center" prop="freightFee" />
+          <el-table-column
+            label="总金额"
+            align="center"
+            prop="totalOrderAmount"
+          />
+        </el-table>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { spuInfoByCarPayNo, storeMultipleShopSave } from "@/api/chain/index";
+export default {
+  data() {
+    return {
+      loading: false,
+      dialogVisible: false,
+      spuList: [],
+      total: 0,
+      queryParams: {
+        pageNo: 1,
+        pageSize: 10,
+        key: "",
+      },
+      info: {},
+    };
+  },
+  methods: {
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      console.log(this.info.carPayNo);
+
+      spuInfoByCarPayNo(this.info.carPayNo).then((response) => {
+        if (response.code == 200) {
+          let list = response.data;
+          console.log(list);
+          if (list.length > 0) {
+            const newData = [];
+            list.forEach((item) => {
+              console.log(JSON.parse(item.goodsInfo));
+              let goos = JSON.parse(item.goodsInfo);
+              if (goos) {
+                newData.push({
+                  ...item,
+                  ...goos[0],
+                });
+              }
+            });
+            this.spuList = newData;
+            this.loading = false;
+          } else {
+            this.spuList = [];
+            this.loading = false;
+          }
+        } else {
+          this.spuList = [];
+          this.loading = false;
+        }
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNo = 1;
+      this.getList();
+    },
+    submit() {
+      if (this.ids.length < 1) {
+        this.$message({
+          type: "error",
+          message: "请选择要添加的店铺!",
+        });
+        return;
+      }
+      this.$confirm("是否确认添加所选店铺为连锁店?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          storeMultipleShopSave({ multipleShopIds: this.ids.toString() }).then(
+            (res) => {
+              console.log(res);
+              if (res.code == 200) {
+                this.$message({
+                  type: "success",
+                  message: res.msg,
+                });
+                this.closeDialog();
+                this.$emit("submit", true);
+              } else {
+                this.$message({
+                  type: "error",
+                  message: res.msg,
+                });
+              }
+            }
+          );
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消",
+          });
+        });
+    },
+    openDialog(record) {
+      this.info = record;
+      this.getList();
+      this.dialogVisible = true;
+    },
+    closeDialog() {
+      this.dialogVisible = false;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 472 - 0
src/views/manage/shopInfoCommon/detail.vue

@@ -0,0 +1,472 @@
+<template>
+  <div class="app-container">
+    <div
+      style="
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: center;
+      "
+    >
+      <h3>{{ storeInfo.shopName }} ID:{{ storeInfo.id }}</h3>
+
+      <el-date-picker
+        v-model="times"
+        value-format="yyyy-MM-dd HH:mm:ss"
+        format="yyyy-MM-dd HH:mm:ss"
+        type="datetimerange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        @change="statisticsChange"
+      >
+      </el-date-picker>
+    </div>
+    <div class="header" style="width: 100%">
+      <el-row class="row" :gutter="12">
+        <el-col :span="3">
+          <div class="item">
+            <div class="title">
+              <span>全部上架商品(个)</span>
+            </div>
+            <div class="count">
+              {{ orderStatistics ? orderStatistics.listingProducts : 0 }}
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="3">
+          <div class="item">
+            <div class="title">
+              <span>店铺销售总额(元)</span>
+            </div>
+            <div class="count">
+              {{ orderStatistics ? orderStatistics.storeRefundAmount : 0 }}
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="3">
+          <div class="item">
+            <div class="title">
+              <span>成交金额(元)</span>
+            </div>
+            <div class="count">
+              {{ orderStatistics ? orderStatistics.storeSales : 0 }}
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="3">
+          <div class="item">
+            <div class="title">
+              <span>退款金额(元)</span>
+            </div>
+            <div class="count">
+              {{ orderStatistics ? orderStatistics.storeTransactionAmount : 0 }}
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="3">
+          <div class="item">
+            <div class="title">
+              <span>成交人数(人)</span>
+            </div>
+            <div class="count">
+              {{ orderStatistics ? orderStatistics.storeTransactionNum : 0 }}
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="3">
+          <div class="item">
+            <div class="title">
+              <span>成交笔数(笔)</span>
+            </div>
+            <div class="count">
+              {{
+                orderStatistics ? orderStatistics.storeTransactionPersonNum : 0
+              }}
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div style="margin-top: 20px">
+      <el-form
+        :model="queryParams"
+        ref="queryForm"
+        size="small"
+        :inline="true"
+        label-width="100px"
+      >
+        <el-form-item label="关键字" prop="key" label-width="100px">
+          <el-input
+            v-model="queryParams.key"
+            placeholder="请输入订单编号/商品ID/商品名称搜索"
+            clearable
+            style="width: 200px"
+          />
+        </el-form-item>
+        <el-form-item label="分类" prop="categoryId">
+          <el-cascader
+            v-model="queryParams.categoryId"
+            ref="formCascader"
+            placeholder="请选择分类"
+            :props="categoryprops"
+            @change="cascaderChange"
+          />
+        </el-form-item>
+
+        <el-form-item label="订单类型" prop="spuType" label-width="100px">
+          <el-select
+            v-model="queryParams.spuType"
+            placeholder="请选择秒送订单状态"
+            style="width: 22 0px"
+          >
+            <el-option label="全部" value=""> </el-option>
+            <el-option label="同城秒送" value="1"> </el-option>
+            <el-option label="农商批发" value="2"> </el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+          label="秒送订单状态"
+          prop="orderStatusKey"
+          label-width="100px"
+        >
+          <el-select
+            v-model="queryParams.orderStatusKey"
+            placeholder="请选择秒送订单状态"
+            style="width: 22 0px"
+          >
+            <el-option label="全部" value=""> </el-option>
+            <el-option
+              :label="item.label"
+              :value="item.value"
+              v-for="item in dict.type.sys_order_query_orderstatus_transmission"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+          label="批发订单状态"
+          prop="wholesaleStatus"
+          label-width="100px"
+        >
+          <el-select
+            v-model="queryParams.wholesaleStatus"
+            placeholder="请选择批发订单状态"
+            style="width: 22 0px"
+          >
+            <el-option label="全部" value=""> </el-option>
+            <el-option
+              :label="item.label"
+              :value="item.value"
+              v-for="item in dict.type.sys_order_orderStatusKey"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="下单时间" prop="date" label-width="100px">
+          <el-date-picker
+            v-model="queryParams.date"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            format="yyyy-MM-dd HH:mm:ss"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            @change="dateChange"
+          >
+          </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-form-item>
+      </el-form>
+    </div>
+
+    <el-table
+      ref="multipleTable"
+      v-loading="loading"
+      :data="spuList"
+      :border="true"
+      @selection-change="handleSelectionChange"
+      row-key="id"
+    >
+      <el-table-column type="selection" align="center" />
+      <el-table-column
+        label="订单号"
+        align="center"
+        prop="carPayNo"
+        width="300"
+      />
+      <el-table-column label="商品信息" align="center" prop="goodsDetails" />
+      <el-table-column
+        label="成交金额(元)"
+        align="center"
+        prop="paymentAmount"
+      />
+      <el-table-column label="订单类型" align="center" prop="spuType">
+        <template slot-scope="scope">
+          {{
+            scope.row.spuType == 0
+              ? "批发商品"
+              : scope.row.spuType == 1
+              ? "秒送商品"
+              : ""
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="订单状态" align="center">
+        <template slot-scope="scope">
+          <dict-tag
+            v-if="scope.row.spuType == 1"
+            :options="dict.type.sys_order_query_orderstatus_transmission"
+            :value="scope.row.orderStatusKey"
+          />
+          ·
+          <dict-tag
+            v-if="scope.row.spuType == 0"
+            :options="dict.type.sys_order_orderStatusKey"
+            :value="scope.row.wholesaleStatus"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column label="下单时间" align="center" prop="createTime">
+        <template slot-scope="scope">
+          {{
+            scope.row.createTime
+              ? $moment(parseInt(scope.row.createTime)).format(
+                  "yyyy-MM-DD HH:mm:ss"
+                )
+              : ""
+          }}
+        </template>
+      </el-table-column>
+
+      <el-table-column label="操作" align="center" width="150" fixed="right">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" @click="handledetail(scope.row)"
+            >订单详情</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNo"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <order-dialog ref="orderRef"></order-dialog>
+  </div>
+</template>
+
+<script>
+import detailOrder from "./detail-order.vue";
+import { storeInfo, statistics, queryOrderByShopId } from "@/api/chain/index";
+import { getClassificationListPage } from "@/api/common/index";
+export default {
+  dicts: [
+    "sys_order_query_orderstatus_transmission",
+    "sys_order_orderStatusKey",
+  ],
+  components: {
+    "order-dialog": detailOrder,
+  },
+  name: "detail",
+  data() {
+    return {
+      times: [],
+      loading: false,
+      total: 0,
+      spuList: [],
+      createTime: [],
+      orderStatistics: {},
+      queryStatistics: {
+        createStartTime: "",
+        createEndTime: "",
+        shopId: "",
+      },
+      shopId: "",
+      storeInfo: {},
+      queryParams: {
+        pageNo: 1,
+        pageSize: 10,
+        key: "",
+        createStartTime: "",
+        createEndTime: "",
+        categoryId: "",
+        orderStatusKey: "",
+        wholesaleStatus: "",
+        spuType: "",
+        date: [],
+      },
+      categoryprops: {
+        checkStrictly: true,
+        lazy: true,
+        lazyLoad: this.categoryLazyLoad,
+      },
+    };
+  },
+  mounted() {
+    this.queryStatistics.shopId = this.$route.query.id;
+    this.storeInfo = this.$route.query;
+    this.getstatisticsOrder();
+    this.getList();
+  },
+  methods: {
+    handledetail(record){
+      this.$refs.orderRef.openDialog(record);
+    },
+    getstatisticsOrder() {
+      statistics(this.queryStatistics).then((res) => {
+        if (res.code == 200) {
+          this.orderStatistics = res.data;
+        } else {
+          this.$modal.msgError(res.msg);
+        }
+      });
+    },
+
+    /** 查询参数列表 */
+    getList() {
+      this.selectList = [];
+      this.loading = true;
+      queryOrderByShopId(this.queryParams).then((response) => {
+        if (response.code == 200) {
+          let list = response.data.records;
+          this.spuList = list;
+          this.total = response.data.total;
+          this.loading = false;
+        }
+      });
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams.createStartTime = "";
+      this.queryParams.createEndTime = "";
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNo = 1;
+      this.getList();
+    },
+    dateChange(val) {
+      this.queryParams.createStartTime = val[0];
+      this.queryParams.createEndTime = val[0];
+    },
+    cascaderChange(val) {
+      this.queryParams.categoryId = val[val.length - 1];
+    },
+    statisticsChange(val) {
+      if (val) {
+        this.queryStatistics.createStartTime = val[0];
+        this.queryStatistics.createEndTime = val[1];
+      } else {
+        this.queryStatistics.createStartTime = "";
+        this.queryStatistics.createEndTime = "";
+      }
+      this.getstatisticsOrder();
+    },
+
+    categoryLazyLoad(node, resolve) {
+      let that = this;
+      let level = node.level;
+      console.log(node);
+      if (!node.data) {
+        getClassificationListPage({ parentId: 0 }).then((res) => {
+          //接口
+          const nodes = Array.from(res.data).map((item, index) => ({
+            value: item.id,
+            label: `${item.className}`,
+            leaf: level >= 2,
+          }));
+          console.log("111", node);
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
+      } else if (level == 1) {
+        getClassificationListPage({ parentId: node.data.value }).then((res) => {
+          const nodes = Array.from(res.data).map((item) => ({
+            value: item.id,
+            label: `${item.className}`,
+            leaf: level >= 2,
+            // level: 2,
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
+      } else if (level == 2) {
+        getClassificationListPage({ parentId: node.data.value }).then((res) => {
+          const nodes = Array.from(res.data).map((item) => ({
+            value: item.id,
+            label: `${item.className}`,
+            leaf: level >= 1,
+            level: 1,
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
+      } else {
+        resolve({});
+      }
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.header {
+  .item {
+    height: 100px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    line-height: 40px;
+  }
+  .row {
+    background: #f4f4f4;
+    padding: 10px;
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+    .title {
+      text-align: center;
+    }
+    .count {
+      text-align: center;
+      font-size: 20px;
+      font-weight: bold;
+      color: rgb(64, 158, 255);
+    }
+    .zz {
+      font-size: 14px;
+      color: red;
+      padding: 0px 10px;
+    }
+  }
+}
+.radio {
+  margin: 20px 0px;
+}
+</style>
+<style>
+.el-radio-button__inner {
+  width: 150px;
+}
+</style>

+ 281 - 0
src/views/manage/shopInfoCommon/index.vue

@@ -0,0 +1,281 @@
+<template>
+  <div class="app-container">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="68px"
+    >
+      <el-form-item label="" prop="key">
+        <el-input
+          v-model="queryParams.key"
+          placeholder="请输入店铺名称/ID搜索"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="邀请时间">
+        <el-date-picker
+          v-model="dateRange"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="pickerChange"
+        ></el-date-picker>
+      </el-form-item>
+
+      <el-form-item label="店铺区域" prop="area">
+        <el-cascader
+          v-model="queryParams.area"
+          ref="myCascader"
+          :placeholder="placeholder"
+          :props="props"
+          style="width: 100%"
+          @change="cascaderChange"
+        />
+      </el-form-item>
+
+      <el-form-item label="审核状态" prop="auditStatus">
+        <el-select
+          v-model="queryParams.auditStatus"
+          placeholder="请选择审核状态"
+        >
+          <el-option label="全部" value=""> </el-option>
+          <el-option label="待审核" value="0"> </el-option>
+          <el-option label="已同意" value="1"> </el-option>
+          <el-option label="已拒绝" value="2"> </el-option>
+        </el-select>
+      </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-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          >添加</el-button
+        >
+      </el-col>
+
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-loading="loading"
+      :data="TableList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column label="店铺ID" align="center" prop="id" />
+      <el-table-column
+        label="店铺名称"
+        align="center"
+        prop="storeName"
+        :show-overflow-tooltip="true"
+      />
+      <el-table-column
+        label="店铺地址"
+        align="center"
+        prop="storeCity"
+        :show-overflow-tooltip="true"
+      />
+      <el-table-column label="联系方式" align="center" prop="storePhone" />
+      <el-table-column label="邀请时间" align="center">
+        <template slot-scope="scope">
+          {{
+            scope.row.createTime
+              ? $moment(parseInt(scope.row.createTime)).format(
+                  "yyyy-MM-DD HH:mm:ss"
+                )
+              : ""
+          }}
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        label="审核状态"
+        align="center"
+        prop="auditStatus"
+        width="180"
+      >
+        <template slot-scope="scope">
+          <span v-if="scope.row.auditStatus == 0">待审核</span>
+          <span v-if="scope.row.auditStatus == 1">已同意</span>
+          <span v-if="scope.row.auditStatus == 2">已拒绝</span>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        label="营业状态"
+        align="center"
+        prop="businessStatus"
+        width="180"
+      >
+        <template slot-scope="scope">
+          <span v-if="scope.row.businessStatus == 0">未营业</span>
+          <span v-if="scope.row.businessStatus == 1">营业中</span>
+          <span v-if="scope.row.businessStatus == 2">禁用</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" @click="handleLook(scope.row)"
+            >查看</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNo"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <shop-dialog ref="shopRef" @submit="shopSubmit"></shop-dialog>
+  </div>
+</template>
+
+<script>
+import shopDialog from "./shopDialog.vue";
+import { getCity } from "@/api/common/index";
+import { queryPage } from "@/api/chain/index";
+export default {
+  components: {
+    "shop-dialog": shopDialog,
+  },
+  name: "chainStore",
+  data() {
+    return {
+      loading: true,
+      showSearch: true,
+      total: 0,
+      TableList: [],
+      open: false,
+      dateRange: [],
+      queryParams: {
+        createStartTime: "",
+        createEndTime: "",
+        pageNo: 1,
+        pageSize: 10,
+        cityProvCode: "",
+        auditStatus: "",
+        area: [],
+        key: "",
+      },
+      props: {
+        lazy: true,
+        lazyLoad: this.lazyLoad,
+        checkStrictly: true,
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    shopSubmit() {
+      this.getList();
+    },
+    pickerChange(val) {
+      this.queryParams.createStartTime = val[0];
+      this.queryParams.createEndTime = val[1];
+    },
+    cascaderChange(val) {
+      this.queryParams.cityProvCode = val[val.length - 1];
+    },
+
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      queryPage(this.queryParams).then((response) => {
+        this.TableList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNo = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams.createStartTime = "";
+      this.queryParams.createEndTime = "";
+      this.queryParams.area = [];
+      this.queryParams.cityProvCode = "";
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.$refs.shopRef.openDialog();
+      console.log(this.$refs.shopRef);
+    },
+    handleLook(record) {
+      this.$router.push({
+        path: "/shop/manage/shopInfoCommon/detail",
+        query: { id: record.id, shopName: record.storeName },
+      });
+    },
+    lazyLoad(node, resolve) {
+      let level = node.level;
+      if (!node.data) {
+        getCity().then((res) => {
+          //接口
+          const nodes = Array.from(res.data).map((item, index) => ({
+            value: item.cityId,
+            label: `${item.name}`,
+            leaf: level >= 2,
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
+      } else if (level == 1) {
+        getCity({ parentCityId: node.data.value }).then((res) => {
+          const nodes = Array.from(res.data).map((item) => ({
+            value: item.cityId,
+            label: `${item.name}`,
+            leaf: true, // 二级节点设为叶子节点
+            disabled: false, // 二级节点设为可选
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
+      } else {
+        resolve({});
+      }
+    },
+  },
+};
+</script>

+ 191 - 0
src/views/manage/shopInfoCommon/shopDialog.vue

@@ -0,0 +1,191 @@
+<template>
+  <div>
+    <el-dialog
+      title="输入店铺ID/名称搜索,将店铺添加为连锁店铺,已成为连锁店铺的不可添加"
+      :visible.sync="dialogVisible"
+      width="50%"
+      :before-close="handleClose"
+    >
+      <div>
+        <el-form
+          :model="queryParams"
+          ref="queryForm"
+          size="small"
+          :inline="true"
+          label-width="68px"
+        >
+          <el-form-item label="" prop="key">
+            <el-input
+              v-model="queryParams.key"
+              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-form-item>
+        </el-form>
+
+        <el-table
+          v-loading="loading"
+          :data="list"
+          @selection-change="handleSelectionChange"
+        >
+          <el-table-column
+            type="selection"
+            width="55"
+            :selectable="rowSelectable"
+          >
+          </el-table-column>
+          <el-table-column label="店铺ID" align="center" prop="id" />
+          <el-table-column
+            label="店铺名称"
+            align="center"
+            prop="storeName"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="店铺地址"
+            align="center"
+            prop="storeCity"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column label="联系方式" align="center" prop="storePhone" />
+          <el-table-column
+            label="营业状态"
+            align="center"
+            prop="businessStatus"
+            width="180"
+          >
+            <template slot-scope="scope">
+              <span v-if="scope.row.businessStatus == 0">未营业</span>
+              <span v-if="scope.row.businessStatus == 1">营业中</span>
+              <span v-if="scope.row.businessStatus == 2">禁用</span>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <pagination
+          v-show="total > 0"
+          :total="total"
+          :page.sync="queryParams.pageNo"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </div>
+
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { storeInfo, storeMultipleShopSave } from "@/api/chain/index";
+export default {
+  data() {
+    return {
+      loading: false,
+      dialogVisible: false,
+      list: [],
+      total: 0,
+      queryParams: {
+        pageNo: 1,
+        pageSize: 10,
+        key: "",
+      },
+      ids: [],
+    };
+  },
+  methods: {
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      storeInfo(this.queryParams).then((response) => {
+        this.list = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNo = 1;
+      this.getList();
+    },
+    submit() {
+      console.log(1);
+
+      if (this.ids.length < 1) {
+        this.$message({
+          type: "error",
+          message: "请选择要添加的店铺!",
+        });
+        return;
+      }
+      this.$confirm("是否确认添加所选店铺为连锁店?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          storeMultipleShopSave({ multipleShopIds: this.ids.toString() }).then(
+            (res) => {
+              console.log(res);
+              if (res.code == 200) {
+                this.$message({
+                  type: "success",
+                  message: res.msg,
+                });
+                this.closeDialog();
+                this.$emit("submit", true);
+              } else {
+                this.$message({
+                  type: "error",
+                  message: res.msg,
+                });
+              }
+            }
+          );
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消",
+          });
+        });
+    },
+    handleSelectionChange(select) {
+      this.ids = select.map((item) => item.id);
+      console.log(this.ids);
+    },
+
+    rowSelectable(row) {
+      if (row.flag == 0) {
+        return !row.disabled;
+      }
+      console.log(row);
+
+      // return
+    },
+    openDialog() {
+      this.getList();
+      this.dialogVisible = true;
+    },
+    closeDialog() {
+      this.dialogVisible = false;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 45 - 13
src/views/member/module/sales-info.vue

@@ -21,13 +21,25 @@
       </el-col>
       <el-col :span="24">
         <el-form-item prop="giftDesc" label="快递类型">
-          <el-radio v-model="form.expressType" :label="0" :value="0" @change="passValue"
+          <el-radio
+            v-model="form.expressType"
+            :label="0"
+            :value="0"
+            @change="passValue"
             >水果特惠</el-radio
           >
-          <el-radio v-model="form.expressType" :label="1" :value="1" @change="passValue"
+          <el-radio
+            v-model="form.expressType"
+            :label="1"
+            :value="1"
+            @change="passValue"
             >生鲜特快</el-radio
           >
-          <el-radio v-model="form.expressType" :label="2" :value="2" @change="passValue"
+          <el-radio
+            v-model="form.expressType"
+            :label="2"
+            :value="2"
+            @change="passValue"
             >京东标快</el-radio
           >
         </el-form-item>
@@ -35,7 +47,11 @@
       <el-col :span="24">
         <el-form-item prop="unit">
           <span slot="label">计量单位</span>
-          <el-select v-model="form.unit" placeholder="请选择" @change="passValue">
+          <el-select
+            v-model="form.unit"
+            placeholder="请选择"
+            @change="passValue"
+          >
             <el-option
               v-for="item in measure"
               :key="item.dictLabel"
@@ -49,7 +65,9 @@
       <el-col :span="24">
         <el-form-item>
           <span slot="label"><span class="required">*</span> 商品规格</span>
-          <el-button @click="addSpecification" type="primary">添加规格</el-button>
+          <el-button @click="addSpecification" type="primary"
+            >添加规格</el-button
+          >
           <el-table :data="form.skuList" style="width: 100%; margin-top: 20px">
             <el-table-column prop="name" label="规格名称" width="160">
               <template slot-scope="scope">
@@ -211,7 +229,10 @@
               </el-form-item>
             </div>
 
-            <el-form-item label="自定义属性" v-if="form.props && form.props.length > 0">
+            <el-form-item
+              label="自定义属性"
+              v-if="form.props && form.props.length > 0"
+            >
               <div
                 style="
                   width: 100%;
@@ -268,7 +289,9 @@
               <el-radio :label="0" :value="0"
                 >双方协商后卖家进行修改,买家和订单一起支付</el-radio
               >
-              <el-radio :label="1" :value="1">全国包邮,由卖家承担运费</el-radio>
+              <el-radio :label="1" :value="1"
+                >全国包邮,由卖家承担运费</el-radio
+              >
             </el-radio-group>
           </div>
         </el-form-item>
@@ -286,7 +309,10 @@
                 flex-direction: row;
                 align-items: center;
               "
-              ><img src="@/assets/images/point.png" style="width: 20px; height: 20px" />
+              ><img
+                src="@/assets/images/point.png"
+                style="width: 20px; height: 20px"
+              />
               选择地址</el-button
             >
             <span style="margin-left: 20px">已选择地址:{{ addr }}</span>
@@ -308,7 +334,7 @@
           <span slot="label">分享比例</span>
           <el-input-number
             v-model="form.shareRate"
-            min=""
+            :min="0"
             :max="100"
             placeholder="请输入分享比例"
             :controls="false"
@@ -356,14 +382,20 @@ export default {
       measure: [],
       package: [],
       rules: {
-        freeShipping: [{ required: true, message: "请选择运费方式", trigger: "blur" }],
-        props: [{ required: true, message: "商品属性不能为空", trigger: "blur" }],
+        freeShipping: [
+          { required: true, message: "请选择运费方式", trigger: "blur" },
+        ],
+        props: [
+          { required: true, message: "商品属性不能为空", trigger: "blur" },
+        ],
         unit: [{ required: true, message: "计量单位", trigger: "blur" }],
         shippingTimeDesc: [
           { required: true, message: "发货时间不能为空", trigger: "blur" },
         ],
         skuList: [{ required: true, message: "规格不能为空", trigger: "blur" }],
-        packing: [{ required: true, message: "包装方式不能为空", trigger: "blur" }],
+        packing: [
+          { required: true, message: "包装方式不能为空", trigger: "blur" },
+        ],
         "shippingAddrBean.addrDetail": [
           { required: true, message: "详细地址不能为空", trigger: "blur" },
         ],
@@ -414,7 +446,7 @@ export default {
           provinceCode,
         } = {},
       } = record;
-      this.form.merchantClassifyName=merchantClassifyName;
+      this.form.merchantClassifyName = merchantClassifyName;
       // 赋值操作
       this.saleModel = saleModel;
       this.addr = shippingAddr;

+ 2 - 6
src/views/order/components/instantDelivery.vue

@@ -352,7 +352,7 @@
             v-if="scope.row.orderStatusEnum == 'WAIT_PENDING_ORDERS'"
             >确认出单</el-button
           >
-          <el-button size="mini" type="text" @click="handleDetail(scope.row)"
+          <el-button size="mini" type="text" @click="handledetail(scope.row)"
             >订单详情</el-button
           >
         </template>
@@ -457,7 +457,7 @@ export default {
       this.queryParams.createEndTime = val[1];
     },
 
-    handleDetail(record) {
+    handledetail(record) {
       this.$router.push({
         path: "/order/order/detail/transmission",
         query: { carPayNo: record.carPayNo },
@@ -522,7 +522,6 @@ export default {
               if (goods.specsValue) {
                 goods = { ...goods, ...goods.specsValue[0] };
               }
-
               newData.push({
                 ...item,
                 ...goods,
@@ -530,9 +529,6 @@ export default {
             });
           });
           this.spuList = newData;
-
-          console.log(this.spuList);
-
           this.total = response.data.total;
           this.loading = false;
         }

+ 50 - 16
src/views/product/module/basic-info.vue

@@ -17,11 +17,19 @@
               :value="0"
               v-if="shopInfo.scope == 0 || shopInfo.scope == 1"
               >{{
-                shopInfo.scope == 0 ? "整车" : shopInfo.scope == 1 ? "普通商品" : ""
+                shopInfo.scope == 0
+                  ? "整车"
+                  : shopInfo.scope == 1
+                  ? "普通商品"
+                  : ""
               }}</el-radio
             >
-            <el-radio :label="2" :value="2" v-if="shopInfo.scope == 0">拼车</el-radio>
-            <el-radio :label="4" :value="4" v-if="shopInfo.scope == 1">礼包</el-radio>
+            <el-radio :label="2" :value="2" v-if="shopInfo.scope == 0"
+              >拼车</el-radio
+            >
+            <el-radio :label="4" :value="4" v-if="shopInfo.scope == 1"
+              >礼包</el-radio
+            >
             <!-- <el-radio :label="5" :value="5" v-if="shopInfo.scope == 1">同城秒送</el-radio> -->
           </el-radio-group>
         </el-form-item>
@@ -159,7 +167,11 @@
               @start="start"
               @end="end"
             >
-              <div class="item" v-for="(item, index) in this.bannerList" :key="index">
+              <div
+                class="item"
+                v-for="(item, index) in this.bannerList"
+                :key="index"
+              >
                 <div class="fmt" v-if="index == 0">封面图</div>
                 <div class="gb" @click="removeImg(index)">X</div>
                 <img
@@ -222,7 +234,10 @@ export default {
         presaleEndTime: "",
       },
       bannerList: [],
-      headers: { Auth: "Bearer " + getToken(), "Content-type": "multipart/form-data" },
+      headers: {
+        Auth: "Bearer " + getToken(),
+        "Content-type": "multipart/form-data",
+      },
       categoryprops: {
         checkStrictly: true,
         lazy: true,
@@ -231,18 +246,34 @@ export default {
         value: "value",
       },
       rules: {
-        saleType: [{ required: true, message: "销售方式不能为空", trigger: "blur" }],
-        saleModel: [{ required: true, message: "销售模式不能为空", trigger: "blur" }],
-        categoryId: [{ required: true, message: "分类不能为空", trigger: "blur" }],
-        title: [{ required: true, message: "商品名称不能为空", trigger: "blur" }],
-        giftDesc: [{ required: true, message: "礼包描述不能为空", trigger: "blur" }],
+        saleType: [
+          { required: true, message: "销售方式不能为空", trigger: "blur" },
+        ],
+        saleModel: [
+          { required: true, message: "销售模式不能为空", trigger: "blur" },
+        ],
+        categoryId: [
+          { required: true, message: "分类不能为空", trigger: "blur" },
+        ],
+        title: [
+          { required: true, message: "商品名称不能为空", trigger: "blur" },
+        ],
+        giftDesc: [
+          { required: true, message: "礼包描述不能为空", trigger: "blur" },
+        ],
         bannerList: [
-          { required: true, message: "商品图最低上传两张图片", trigger: "blur" },
+          {
+            required: true,
+            message: "商品图最低上传两张图片",
+            trigger: "blur",
+          },
         ],
         carpoolSuccessTime: [
           { required: true, message: "拼车成功时间不能为空", trigger: "blur" },
         ],
-        datePicker: [{ required: true, message: "预售时间不能为空", trigger: "blur" }],
+        datePicker: [
+          { required: true, message: "预售时间不能为空", trigger: "blur" },
+        ],
       },
       index: 0,
       shopInfo: {},
@@ -342,10 +373,9 @@ export default {
       this.bannerList.splice(index, 1);
       this.passValue();
     },
-    pickerChange() {
+    pickerChange(val) {
       this.form.presaleStartTime = moment(this.form.datePicker[0]).valueOf();
       this.form.presaleEndTime = moment(this.form.datePicker[1]).valueOf();
-      console.log("cccc", this.form);
       this.passValue();
     },
     getInfo() {
@@ -366,13 +396,17 @@ export default {
 
     passValue() {
       console.log(this.form);
-      
+
       this.form.bannerList = [];
+      this.form.presaleStartTime = moment(this.form.datePicker[0]).valueOf();
+      this.form.presaleEndTime = moment(this.form.datePicker[1]).valueOf();
+
       if (this.bannerList.length > 0) {
         console.log("bannerList", this.bannerList);
         for (let index = 0; index < this.bannerList.length; index++) {
           this.form.bannerList.push({
-            fileUrl: this.bannerList[index].url || this.bannerList[index].fileUrl,
+            fileUrl:
+              this.bannerList[index].url || this.bannerList[index].fileUrl,
             sort: this.bannerList[index].name,
           });
         }

+ 70 - 29
src/views/product/module/sales-info.vue

@@ -21,13 +21,25 @@
       </el-col>
       <el-col :span="24">
         <el-form-item prop="giftDesc" label="快递类型">
-          <el-radio v-model="form.expressType" :label="0" :value="0" @change="passValue"
+          <el-radio
+            v-model="form.expressType"
+            :label="0"
+            :value="0"
+            @change="passValue"
             >水果特惠</el-radio
           >
-          <el-radio v-model="form.expressType" :label="1" :value="1" @change="passValue"
+          <el-radio
+            v-model="form.expressType"
+            :label="1"
+            :value="1"
+            @change="passValue"
             >生鲜特快</el-radio
           >
-          <el-radio v-model="form.expressType" :label="2" :value="2" @change="passValue"
+          <el-radio
+            v-model="form.expressType"
+            :label="2"
+            :value="2"
+            @change="passValue"
             >京东标快</el-radio
           >
         </el-form-item>
@@ -35,7 +47,11 @@
       <el-col :span="24">
         <el-form-item prop="unit">
           <span slot="label">计量单位</span>
-          <el-select v-model="form.unit" placeholder="请选择" @change="passValue">
+          <el-select
+            v-model="form.unit"
+            placeholder="请选择"
+            @change="passValue"
+          >
             <el-option
               v-for="item in measure"
               :key="item.dictLabel"
@@ -49,7 +65,9 @@
       <el-col :span="24">
         <el-form-item>
           <span slot="label"><span class="required">*</span> 商品规格</span>
-          <el-button @click="addSpecification" type="primary">添加规格</el-button>
+          <el-button @click="addSpecification" type="primary"
+            >添加规格</el-button
+          >
           <el-table
             :data="form.skuList"
             style="width: 100%; margin-top: 20px"
@@ -331,7 +349,11 @@
               </template>
             </el-table-column>
 
-            <el-table-column label="批发价" width="160" v-if="saleType != 4 && saleModel != 1">
+            <el-table-column
+              label="批发价"
+              width="160"
+              v-if="saleType != 4 && saleModel != 1"
+            >
               <template slot-scope="scope">
                 <el-input-number
                   :controls="false"
@@ -433,7 +455,10 @@
               </el-form-item>
             </div>
 
-            <el-form-item label="自定义属性" v-if="form.props && form.props.length > 0">
+            <el-form-item
+              label="自定义属性"
+              v-if="form.props && form.props.length > 0"
+            >
               <div
                 style="
                   width: 100%;
@@ -489,7 +514,9 @@
             v-model="form.merchantClassifyIds"
             ref="formCascader"
             :placeholder="
-              form.merchantClassifyName ? form.merchantClassifyName : '请选择分类'
+              form.merchantClassifyName
+                ? form.merchantClassifyName
+                : '请选择分类'
             "
             :props="categoryprops"
             @change="cascaderChange"
@@ -504,7 +531,9 @@
               <el-radio :label="0" :value="0"
                 >双方协商后卖家进行修改,买家和订单一起支付</el-radio
               >
-              <el-radio :label="1" :value="1">全国包邮,由卖家承担运费</el-radio>
+              <el-radio :label="1" :value="1"
+                >全国包邮,由卖家承担运费</el-radio
+              >
             </el-radio-group>
           </div>
         </el-form-item>
@@ -522,7 +551,10 @@
                 flex-direction: row;
                 align-items: center;
               "
-              ><img src="@/assets/images/point.png" style="width: 20px; height: 20px" />
+              ><img
+                src="@/assets/images/point.png"
+                style="width: 20px; height: 20px"
+              />
               选择地址</el-button
             >
             <span style="margin-left: 20px">已选择地址:{{ addr }}</span>
@@ -544,7 +576,7 @@
           <span slot="label">分享比例</span>
           <el-input-number
             v-model="form.shareRate"
-            min=""
+            :min="0"
             :max="100"
             placeholder="请输入分享比例"
             :controls="false"
@@ -596,14 +628,20 @@ export default {
       measure: [],
       package: [],
       rules: {
-        freeShipping: [{ required: true, message: "请选择运费方式", trigger: "blur" }],
-        props: [{ required: true, message: "商品属性不能为空", trigger: "blur" }],
+        freeShipping: [
+          { required: true, message: "请选择运费方式", trigger: "blur" },
+        ],
+        props: [
+          { required: true, message: "商品属性不能为空", trigger: "blur" },
+        ],
         unit: [{ required: true, message: "计量单位", trigger: "blur" }],
         shippingTimeDesc: [
           { required: true, message: "发货时间不能为空", trigger: "blur" },
         ],
         skuList: [{ required: true, message: "规格不能为空", trigger: "blur" }],
-        packing: [{ required: true, message: "包装方式不能为空", trigger: "blur" }],
+        packing: [
+          { required: true, message: "包装方式不能为空", trigger: "blur" },
+        ],
         "shippingAddrBean.addrDetail": [
           { required: true, message: "详细地址不能为空", trigger: "blur" },
         ],
@@ -643,29 +681,32 @@ export default {
     categoryLazyLoad(node, resolve) {
       let level = node.level;
       if (!node.data) {
-        getMerchantClassifyList({ classifyType: 1, isDefault: 1 }).then((res) => {
-          //接口
-          const nodes = Array.from(res.data).map((item, index) => ({
-            value: item.id,
-            label: `${item.classifyName}`,
-            leaf: level >= 2,
-          }));
-          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
-          resolve(nodes);
-        });
-      } else if (level == 1) {
-        getMerchantClassifyList({ parentId: node.data.value, classifyType: 1 }).then(
+        getMerchantClassifyList({ classifyType: 1, isDefault: 1 }).then(
           (res) => {
-            const nodes = Array.from(res.data).map((item) => ({
+            //接口
+            const nodes = Array.from(res.data).map((item, index) => ({
               value: item.id,
               label: `${item.classifyName}`,
               leaf: level >= 2,
-              // level: 2,
             }));
             // 通过调用resolve将子节点数据返回,通知组件数据加载完成
             resolve(nodes);
           }
         );
+      } else if (level == 1) {
+        getMerchantClassifyList({
+          parentId: node.data.value,
+          classifyType: 1,
+        }).then((res) => {
+          const nodes = Array.from(res.data).map((item) => ({
+            value: item.id,
+            label: `${item.classifyName}`,
+            leaf: level >= 2,
+            // level: 2,
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
       } else {
         resolve({});
       }
@@ -684,7 +725,7 @@ export default {
       this.passValue();
     },
     getFormInfo(record) {
-      this.form.merchantClassifyName =record.merchantClassifyName;
+      this.form.merchantClassifyName = record.merchantClassifyName;
       this.saleModel = record.saleModel;
       this.addr = record.shippingAddr;
       this.form.expressType = record.expressType;

+ 42 - 22
src/views/transmission/module/sales-info.vue

@@ -22,7 +22,11 @@
       <el-col :span="24">
         <el-form-item prop="unit">
           <span slot="label">计量单位</span>
-          <el-select v-model="form.unit" placeholder="请选择" @change="passValue">
+          <el-select
+            v-model="form.unit"
+            placeholder="请选择"
+            @change="passValue"
+          >
             <el-option
               v-for="item in measure"
               :key="item.dictLabel"
@@ -36,7 +40,9 @@
       <el-col :span="24">
         <el-form-item>
           <span slot="label"><span class="required">*</span> 商品规格</span>
-          <el-button @click="addSpecification" type="primary">添加规格</el-button>
+          <el-button @click="addSpecification" type="primary"
+            >添加规格</el-button
+          >
           <el-table :data="form.skuList" style="width: 100%; margin-top: 20px">
             <el-table-column prop="name" label="规格名称" width="160">
               <template slot-scope="scope">
@@ -204,7 +210,10 @@
               </el-form-item>
             </div>
 
-            <el-form-item label="自定义属性" v-if="form.props && form.props.length > 0">
+            <el-form-item
+              label="自定义属性"
+              v-if="form.props && form.props.length > 0"
+            >
               <div
                 style="
                   width: 100%;
@@ -260,7 +269,9 @@
             v-model="form.merchantClassifyIds"
             ref="formCascader"
             :placeholder="
-              form.merchantClassifyName ? form.merchantClassifyName : '请选择分类'
+              form.merchantClassifyName
+                ? form.merchantClassifyName
+                : '请选择分类'
             "
             :props="categoryprops"
             @change="cascaderChange"
@@ -272,7 +283,7 @@
           <span slot="label">分享比例</span>
           <el-input-number
             v-model="form.shareRate"
-            min=""
+            :min="0"
             :max="100"
             placeholder="请输入分享比例"
             :controls="false"
@@ -321,14 +332,20 @@ export default {
       measure: [],
       package: [],
       rules: {
-        freeShipping: [{ required: true, message: "请选择运费方式", trigger: "blur" }],
-        props: [{ required: true, message: "商品属性不能为空", trigger: "blur" }],
+        freeShipping: [
+          { required: true, message: "请选择运费方式", trigger: "blur" },
+        ],
+        props: [
+          { required: true, message: "商品属性不能为空", trigger: "blur" },
+        ],
         unit: [{ required: true, message: "计量单位", trigger: "blur" }],
         shippingTimeDesc: [
           { required: true, message: "发货时间不能为空", trigger: "blur" },
         ],
         skuList: [{ required: true, message: "规格不能为空", trigger: "blur" }],
-        packing: [{ required: true, message: "包装方式不能为空", trigger: "blur" }],
+        packing: [
+          { required: true, message: "包装方式不能为空", trigger: "blur" },
+        ],
         "shippingAddrBean.addrDetail": [
           { required: true, message: "详细地址不能为空", trigger: "blur" },
         ],
@@ -381,29 +398,32 @@ export default {
     categoryLazyLoad(node, resolve) {
       let level = node.level;
       if (!node.data) {
-        getMerchantClassifyList({ classifyType: 0, isDefault: 1 }).then((res) => {
-          //接口
-          const nodes = Array.from(res.data).map((item, index) => ({
-            value: item.id,
-            label: `${item.classifyName}`,
-            leaf: level >= 2,
-          }));
-          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
-          resolve(nodes);
-        });
-      } else if (level == 1) {
-        getMerchantClassifyList({ parentId: node.data.value, classifyType: 0 }).then(
+        getMerchantClassifyList({ classifyType: 0, isDefault: 1 }).then(
           (res) => {
-            const nodes = Array.from(res.data).map((item) => ({
+            //接口
+            const nodes = Array.from(res.data).map((item, index) => ({
               value: item.id,
               label: `${item.classifyName}`,
               leaf: level >= 2,
-              // level: 2,
             }));
             // 通过调用resolve将子节点数据返回,通知组件数据加载完成
             resolve(nodes);
           }
         );
+      } else if (level == 1) {
+        getMerchantClassifyList({
+          parentId: node.data.value,
+          classifyType: 0,
+        }).then((res) => {
+          const nodes = Array.from(res.data).map((item) => ({
+            value: item.id,
+            label: `${item.classifyName}`,
+            leaf: level >= 2,
+            // level: 2,
+          }));
+          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
+          resolve(nodes);
+        });
       } else {
         resolve({});
       }