chengjunhui пре 1 месец
родитељ
комит
28cc911a60

+ 9 - 0
src/api/goods.js

@@ -68,3 +68,12 @@ export function productRecommendStatus (productIds) {
     method: 'post'
   })
 }
+
+// 查询商家直营商品,并显示是否参加了活动 (秒杀、拼团)
+export function productForActivityPage(query) {
+    return request({
+        url: '/shop/product/forActivity',
+        method: 'get',
+        params: query
+    })
+}

+ 76 - 0
src/api/marketing/seckill.js

@@ -0,0 +1,76 @@
+import request from '@/utils/request'
+
+// 查询秒杀活动列表
+export function seckillActivityPage_api(query) {
+    return request({
+        url: '/seckill/seckillActivity/page',
+        method: 'get',
+        params: query
+    })
+}
+// 删除秒杀活动
+export function seckillActivityDel_api(ids) {
+    return request({
+        url: `/seckill/seckillActivity/del/${ids}`,
+        method: 'post',
+    })
+}
+
+// 新增秒杀活动
+export function seckillActivityAdd_api (data) {
+  return request({
+    url: '/seckill/seckillActivity/add',  
+    method: 'post',
+    data
+  })
+}
+// 修改秒杀活动
+export function seckillActivityEdit_api (data) {
+  return request({
+    url: '/seckill/seckillActivity/edit',
+    method: 'post',
+    data
+  })
+}
+
+// 获取秒杀活动详细信息
+export function seckillActivityInfo_api (id) {
+  return request({
+    url: `/seckill/seckillActivity/info/${id}`,
+    method: 'get',
+  })
+}
+
+
+// 查询秒杀活动商品列表
+export function seckillActivityProductPage_api(query) {
+    return request({
+        url: '/seckill/seckillActivityProduct/page',
+        method: 'get',
+        params: query
+    })
+}
+// 删除秒杀活动商品
+export function seckillActivityProductDel_api(ids) {
+    return request({
+        url: `/seckill/seckillActivity/del/${ids}`,
+        method: 'post',
+    })
+}
+
+// 新增秒杀活动商品
+export function seckillActivityProductAdd_api (data) {
+  return request({
+    url: '/seckill/seckillActivityProduct/add',  
+    method: 'post',
+    data
+  })
+}
+
+// 获取秒杀活动商品详细信息
+export function seckillActivityProductInfo_api (id) {
+  return request({
+    url: `/seckill/seckillActivityProduct/info/${id}`,
+    method: 'get',
+  })
+}

+ 17 - 0
src/api/operating.js

@@ -302,4 +302,21 @@ export function businessSalesConfigInfo () {
     url: `/business/businessSalesConfig/info`,
     method: 'get',
   })
+}
+
+// 新增秒杀活动时间配置
+export function seckillTimeConfigAdd (data) {
+  return request({
+    url: `/seckill/seckillTimeConfig/add`,
+    method: 'post',
+    data
+  })
+}
+// 获取秒杀活动时间配置列表
+export function seckillTimeConfigList (query) {
+  return request({
+    url: `/seckill/seckillTimeConfig/list`,
+    method: 'get',
+    params: query
+  })
 }

+ 13 - 13
src/layout/components/Navbar.vue

@@ -7,11 +7,11 @@
     <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
 
     <div class="right-menu">
-      <template v-if="businessId && !shop.closeStatus && !shop.expiresStatus">
+      <!-- <template v-if="businessId && !shop.closeStatus && !shop.expiresStatus">
         <div class="right-menu-item" @click="dialogVisible = true">
           <span>店铺码</span>
         </div>
-      </template>
+      </template> -->
 
       <template v-if="device !== 'mobile'">
         <!-- <search id="header-search" class="right-menu-item" />
@@ -53,14 +53,14 @@
       </el-dropdown>
     </div>
 
-    <el-dialog title="店铺码" :visible.sync="dialogVisible" width="400px" append-to-body>
+    <!-- <el-dialog title="店铺码" :visible.sync="dialogVisible" width="400px" append-to-body>
       <div style="text-align: center">
         <img v-if="shop.qrCode" :src="shop.qrCode" class="qrCode-img" />
         <span class="dialog-footer">
           <el-button type="primary" @click="download">下载</el-button>
         </span>
       </div>
-    </el-dialog>
+    </el-dialog> -->
   </div>
 </template>
 
@@ -125,15 +125,15 @@ export default {
         }
       });
     },
-    download() {
-      if (!this.shop.qrCode) {
-        return this.$message({
-          message: "暂无店铺码",
-          type: "error",
-        });
-      }
-      window.open(this.shop.qrCode, "_blank");
-    },
+    // download() {
+    //   if (!this.shop.qrCode) {
+    //     return this.$message({
+    //       message: "暂无店铺码",
+    //       type: "error",
+    //     });
+    //   }
+    //   window.open(this.shop.qrCode, "_blank");
+    // },
     toggleSideBar() {
       this.$store.dispatch("app/toggleSideBar");
     },

+ 1 - 1
src/router/index.js

@@ -158,7 +158,7 @@ export const constantRoutes = [
         path: 'seckillPdAddUpdate',
         component: () => import('@/views/marketing/seckill/seckillPdAddUpdate'),
         name: 'seckillPdAddUpdate',
-        meta: { title: '秒杀活动新增', icon: 'user' }
+        meta: { title: '新增秒杀商品', icon: 'user' }
       }
     ]
   },

+ 328 - 0
src/views/marketing/seckill/components/ActivityPdAdd.vue

@@ -0,0 +1,328 @@
+<template>
+  <el-drawer
+    title="活动商品"
+    size="1000px"
+    :visible.sync="visible"
+    :wrapperClosable="false"
+  >
+    <el-form
+      :model="dataForm"
+      :rules="dataRule"
+      ref="dataForm"
+      @keyup.enter.native="dataFormSubmit()"
+      label-width="100px"
+      style="padding: 0 20px 64px 0; position: relative;"
+    >
+      <el-form-item label="活动价" prop="priceType">
+        <el-radio-group v-model="dataForm.priceType">
+          <el-radio :label="0">固定折扣</el-radio>
+          <el-radio :label="1">固定减价 </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item
+        v-if="dataForm.priceType == 0"
+        prop="discount"
+        :rules="[
+          { required: true, message: '固定折扣不能为空', trigger: 'blur' },
+        ]"
+      >
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.discount"
+            :min="0"
+            :precision="1"
+            :controls="false"
+            :max="10"
+          ></el-input-number>
+        </el-col>
+        <el-col :span="12" :offset="2">
+          <span style="margin: 0 10px">折</span>
+          <span>
+            <el-button type="primary" @click="goSet">设置</el-button>
+          </span>
+        </el-col>
+      </el-form-item>
+      <el-form-item
+        v-if="dataForm.priceType == 1"
+        prop="fixPrice"
+        :rules="[
+          { required: true, message: '固定减价不能为空', trigger: 'blur' },
+        ]"
+      >
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.fixPrice"
+            :min="0"
+            :precision="2"
+            :controls="false"
+            :max="100000"
+          ></el-input-number>
+        </el-col>
+        <el-col :span="12" :offset="2">
+          <span>元</span>
+          <span>
+            <el-button type="primary" @click="setFixPrice">设置</el-button>
+          </span>
+        </el-col>
+      </el-form-item>
+
+      <div style="padding: 0 20px">
+        <el-table
+          :data="dataList"
+          row-key="Id"
+          border
+          style="width: 100%; margin-top: 30px"
+        >
+          <el-table-column prop="skuSetName" align="center" label="规格">
+          </el-table-column>
+          <el-table-column prop="costPrice" align="center" label="成本价">
+          </el-table-column>
+          <el-table-column prop="originalSalePrice" align="center" label="原价">
+          </el-table-column>
+          <el-table-column prop="salePrice" align="center" label="价格">
+            <template slot-scope="scope">
+              <el-input-number
+                v-model="scope.row.salePrice"
+                :min="0"
+                :precision="2"
+                :controls="false"
+                :max="1000000000"
+                style="width: 100%"
+              ></el-input-number>
+            </template>
+          </el-table-column>
+          <el-table-column prop="originalStock" align="center" label="库存">
+          </el-table-column>
+          <el-table-column prop="stock" align="center" label="投放数量">
+            <template slot-scope="scope">
+              <el-input-number
+                v-model="scope.row.stock"
+                :min="0"
+                :precision="0"
+                :controls="false"
+                style="width: 100%"
+              ></el-input-number>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <el-form-item label="限购" prop="limitBuyNum" class="mt30">
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.limitBuyNum"
+            :min="0"
+            :precision="0"
+            :controls="false"
+            :max="100000"
+          ></el-input-number>
+        </el-col>
+        <el-col :span="12" :offset="2"
+          >件 每个用户允许购买的最大数量(输入0不限购)</el-col
+        >
+      </el-form-item>
+      <!-- <el-form-item label="可售数量" prop="realStockTotal">
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.realStockTotal"
+            :min="0"
+            :precision="0"
+            :controls="false"
+            :max="10000000"
+          ></el-input-number>
+        </el-col>
+      </el-form-item> -->
+      <el-form-item label="初始销量" prop="initSaleNum">
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.initSaleNum"
+            :min="0"
+            :precision="0"
+            :controls="false"
+            :max="10000000"
+          ></el-input-number>
+        </el-col>
+      </el-form-item>
+      <el-form-item label="商品排序" prop="sort">
+        <el-input-number
+          v-model="dataForm.sort"
+          :min="0"
+          :precision="0"
+          :controls="false"
+          :max="10000000"
+        ></el-input-number>
+      </el-form-item>
+      <div class="dialog-footer">
+        <el-button @click="cancel()">取消</el-button>
+        <el-button type="primary" :loading="loading" @click="dataFormSubmit()"
+          >确定</el-button
+        >
+      </div>
+    </el-form>
+  </el-drawer>
+</template>
+
+<script>
+import {
+  seckillActivityProductAdd_api,
+  seckillActivityProductInfo_api,
+} from "@/api/marketing/seckill";
+
+export default {
+  data() {
+    return {
+      visible: false,
+      dataForm: {
+        productId: undefined, // 商品id
+        seckillId: undefined, // 秒杀活动id
+        priceType: 0, // 价格类型(0:固定折扣,1:固定减价)
+        limitBuyNum: 0, // 限购数量
+        realStockTotal: 0, // 可售数量
+        initSaleNum: 0, // 初始销量
+        sort: 1, // 排序
+      },
+      dataList: [], // SKU
+      dataRule: {
+        priceType: [
+          {
+            required: true,
+            message: "活动价不能为空",
+            trigger: "change",
+          },
+        ],
+        limitBuyNum: [
+          {
+            required: true,
+            message: "限购不能为空",
+            trigger: "blur",
+          },
+        ],
+        realStockTotal: [
+          {
+            required: true,
+            message: "可售数量不能为空",
+            trigger: "blur",
+          },
+        ],
+        initSaleNum: [
+          {
+            required: true,
+            message: "初始销量不能为空",
+            trigger: "blur",
+          },
+        ],
+        sort: [
+          {
+            required: true,
+            message: "商品排序不能为空",
+            trigger: "blur",
+          },
+        ],
+      },
+      loading: false,
+    };
+  },
+
+  methods: {
+    init(id, seckillId, productId, skuList = []) {
+      this.dataForm.id = id || null;
+      this.dataForm.productId = productId;
+      this.dataForm.seckillId = seckillId;
+      this.visible = true;
+      this.$nextTick(() => {
+        this.$refs["dataForm"].resetFields();
+      });
+      // 查询商品所有规格
+      if (id) {
+        seckillActivityProductInfo_api(id).then((res) => {
+          if (res && res.code == 200) {
+            this.dataForm = res.data;
+          }
+        });
+      }
+      this.dataList = skuList;
+    },
+    // 设置折扣
+    goSet() {
+      if (this.dataForm.discount != "") {
+        this.dataList.map((v, i) => {
+          v.salePrice = Number(
+            v.originalSalePrice * (this.dataForm.discount / 10)
+          ).toFixed(2);
+        });
+      } else {
+        this.$message.error("请输入折扣");
+      }
+    },
+    setFixPrice() {
+      if (this.dataForm.fixPrice != "") {
+        if (
+          this.dataList.some(
+            (val) => val.originalSalePrice <= this.dataForm.fixPrice
+          )
+        ) {
+          this.$message.error("减价金额不得超过商品原价");
+          return false;
+        }
+        this.dataList.map((v, i) => {
+          v.salePrice = Number(v.salePrice - this.dataForm.fixPrice).toFixed(2);
+        });
+      } else {
+        this.$message.error("请输入减价");
+      }
+    },
+    // 提交
+    dataFormSubmit() {
+      this.$refs["dataForm"].validate((valid) => {
+        if (valid) {
+          this.loading = true;
+          this.dataForm.productSkuSetList = this.dataList.map((v) => {
+            if(!v.stock){
+              v.stock = 0;
+            }
+            return v;
+          });
+          seckillActivityProductAdd_api(this.dataForm)
+            .then((res) => {
+              this.loading = false;
+              if (res && res.code == 200) {
+                this.$message.success(
+                  this.dataForm.id ? "修改成功" : "添加成功"
+                );
+                this.visible = false;
+                this.$emit("updataList", 1);
+              }
+            })
+            .catch((err) => {
+              this.loading = false;
+            });
+        }
+      });
+    },
+    // 取消
+    cancel() {
+      this.visible = false;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.mt30 {
+  margin-top: 30px;
+}
+
+::v-deep .el-drawer__body {
+  position: relative !important;
+}
+
+.dialog-footer {
+  position: fixed;
+  bottom: 0;
+  right: 0;
+  background-color: #ffffff;
+  width: 1000px;
+  padding: 0 0 20px 40px;
+  box-sizing: border-box;
+}
+</style>

+ 69 - 89
src/views/marketing/seckill/components/SeckillAddUpdate.vue

@@ -20,10 +20,10 @@
           maxlength="15"
         ></el-input>
       </el-form-item>
-      <el-form-item label="起止时间" prop="start_time" class="date-lable">
-        <el-form-item prop="start_time" label-width="0px">
+      <el-form-item label="起止时间" prop="startTime" class="date-lable">
+        <el-form-item prop="startTime" label-width="0px">
           <el-date-picker
-            v-model="dataForm.start_time"
+            v-model="dataForm.startTime"
             type="date"
             placeholder="选择日期"
             value-format="yyyy-MM-dd"
@@ -31,9 +31,9 @@
           </el-date-picker>
         </el-form-item>
         <span style="padding: 0 20px">——</span>
-        <el-form-item prop="end_time" label-width="0px">
+        <el-form-item prop="endTime" label-width="0px">
           <el-date-picker
-            v-model="dataForm.end_time"
+            v-model="dataForm.endTime"
             type="date"
             placeholder="选择日期"
             value-format="yyyy-MM-dd"
@@ -41,14 +41,14 @@
           </el-date-picker>
         </el-form-item>
       </el-form-item>
-      <el-form-item label="周期" prop="cycle_mode">
-        <el-radio-group v-model="dataForm.cycle_mode">
+      <el-form-item label="周期" prop="cycleMode">
+        <el-radio-group v-model="dataForm.cycleMode">
           <el-radio :label="0">每天</el-radio>
           <el-radio :label="1">每周</el-radio>
         </el-radio-group>
       </el-form-item>
-      <el-form-item label="" v-show="dataForm.cycle_mode == 1">
-        <el-checkbox-group v-model="dataForm.week_list">
+      <el-form-item label="" v-show="dataForm.cycleMode == 1">
+        <el-checkbox-group v-model="dataForm.weekList">
           <el-checkbox-button
             v-for="(item, i) in weeklist"
             :label="item.label"
@@ -59,21 +59,27 @@
       </el-form-item>
 
       <div class="mt10 timeQuantum-box">
-        <el-form-item label="时间段" prop="start_hour">
+        <el-form-item label="时间段" prop="startHour">
           <el-radio-group v-model="timeQuantum" @change="selectTimeQuantum">
             <el-radio
               :label="item.id"
               v-for="item in timeQuantumList"
               :key="item.id"
             >
-              {{ item.start_hour }}-{{ item.end_hour }}</el-radio
+              {{ item.startHour }}-{{ item.endHour }}</el-radio
             >
           </el-radio-group>
         </el-form-item>
       </div>
 
-      <el-form-item label="活动图片" prop="img_url">
-        <ImageUpload v-model="imgArr" :fileSize="0" :limit="1" :isShowTip="false" :fileType="['jpg', 'png']"/>
+      <el-form-item label="活动图片" prop="imgUrl">
+        <ImageUpload
+          v-model="dataForm.imgUrl"
+          :fileSize="0"
+          :limit="1"
+          :isShowTip="false"
+          :fileType="['jpg', 'png']"
+        />
         <div>上传jpg/png文件;尺寸建议750x268</div>
       </el-form-item>
       <el-form-item label="活动说明" prop="explain">
@@ -84,9 +90,9 @@
           :maxlength="200"
         ></el-input>
       </el-form-item>
-      <el-form-item label="订单自动关闭时间(分钟)" prop="close_time">
+      <el-form-item label="订单自动关闭时间(分钟)" prop="closeTime">
         <el-input-number
-          v-model="dataForm.close_time"
+          v-model="dataForm.closeTime"
           :min="3"
           :precision="0"
           :controls="false"
@@ -103,8 +109,13 @@
 </template>
 
 <script>
-// import seviceApi from "@/api/serviceApi.js";
-// import sysService from "@/api/sysService.js";
+import {
+  seckillActivityAdd_api,
+  seckillActivityEdit_api,
+  seckillActivityInfo_api,
+} from "@/api/marketing/seckill";
+import { seckillTimeConfigList } from "@/api/operating";
+
 export default {
   data() {
     return {
@@ -114,7 +125,6 @@ export default {
       timeQuantum: "", // 选择时间段
       dialogVisible: false,
       dataForm: {},
-      imgArr: [],
       weeklist: [
         {
           label: 1,
@@ -153,42 +163,42 @@ export default {
             trigger: "blur",
           },
         ],
-        start_time: [
+        startTime: [
           {
             required: true,
             message: "起止时间不能为空",
             trigger: "blur",
           },
         ],
-        end_time: [
+        endTime: [
           {
             required: true,
             message: "起止时间不能为空",
             trigger: "blur",
           },
         ],
-        img_url: [
+        imgUrl: [
           {
             required: true,
             message: "活动图片不能为空",
             trigger: "blur",
           },
         ],
-        close_time: [
+        closeTime: [
           {
             required: true,
             message: "订单自动关闭时间(小时)不能为空",
             trigger: "blur",
           },
         ],
-        start_hour: [
+        startHour: [
           {
             required: true,
             message: "时间段不能为空",
             trigger: "blur",
           },
         ],
-        cycle_mode: [
+        cycleMode: [
           {
             required: true,
             message: "周期不能为空",
@@ -202,25 +212,24 @@ export default {
 
   methods: {
     init(id) {
-      //   this.resetData();
-      //   this.getAllKillConfig();
-      //   this.dataForm.id = id || null;
+      this.resetData();
+      this.getAllKillConfig();
+      this.dataForm.id = id || null;
       this.visible = true;
 
       if (id != undefined) {
-        seviceApi.getSeckillactivityInfo(id).then((res) => {
+        seckillActivityInfo_api(id).then((res) => {
           if (res && res.data.code == 200) {
-            res.data.data.week_list = res.data.data.week_list || [];
-            this.dataForm = res.data.data;
+            res.data.weekList = res.data.weekList || [];
+            this.dataForm = res.data;
 
-            this.imgArr = this.dataForm.img_url.split(";");
             for (let item of this.timeQuantumList) {
-              if (item.start_hour == res.data.data.start_hour) {
+              if (item.startHour == res.data.startHour) {
                 this.timeQuantum = item.id;
                 return false;
               }
             }
-            console.log(this.dataForm);
+            // console.log(this.dataForm);
           }
         });
       }
@@ -229,18 +238,17 @@ export default {
     resetData() {
       this.dataForm = {
         name: "",
-        start_hour: "",
-        end_hour: "",
-        start_time: "",
-        end_time: "",
-        img_url: "",
+        startHour: "",
+        endHour: "",
+        endHour: "",
+        endTime: "",
+        imgUrl: "",
         explain: "",
-        close_time: "",
-        cycle_mode: "",
-        week_list: [],
+        closeTime: "",
+        cycleMode: "",
+        weekList: [],
       };
       this.resetForm("dataForm");
-      this.imgArr = [];
       this.timeQuantum = "";
       this.timeQuantumList = [];
     },
@@ -252,16 +260,16 @@ export default {
     selectTimeQuantum(e) {
       for (let item of this.timeQuantumList) {
         if (item.id == e) {
-          this.dataForm.start_hour = item.start_hour;
-          this.dataForm.end_hour = item.end_hour;
+          this.dataForm.startHour = item.startHour;
+          this.dataForm.endHour = item.endHour;
           return false;
         }
       }
-      this.$refs["dataForm"].clearValidate(["start_hour"]);
+      this.$refs["dataForm"].clearValidate(["startHour"]);
     },
     getAllKillConfig() {
-      sysService.seckillConfigInfo().then((res) => {
-        this.timeQuantumList = res.data.list || [];
+      seckillTimeConfigList().then((res) => {
+        this.timeQuantumList = res.data || [];
       });
     },
     // 提交
@@ -269,52 +277,24 @@ export default {
       this.$refs["dataForm"].validate((valid) => {
         if (valid) {
           if (
-            Object.prototype.toString.call(this.dataForm.img_url) ===
-            "[object Array]"
-          ) {
-            this.dataForm.img_url = this.dataForm.img_url.join(",");
-          } else {
-            this.dataForm.img_url = this.dataForm.img_url;
-          }
-          if (
-            new Date(this.dataForm.end_time).getTime() -
-              new Date(this.dataForm.start_time).getTime() <
+            new Date(this.dataForm.endTime).getTime() -
+              new Date(this.dataForm.startTime).getTime() <
             0
           ) {
-            this.$message({
-              showClose: true,
-              message: "结束时间不能小于开始时间",
-              type: "error",
-            });
+            this.$message.error("结束时间不能小于开始时间");
             return false;
           }
-          if (this.dataForm.id == null || undefined) {
-            delete this.dataForm.id;
-            seviceApi.saveSeckillactivity(this.dataForm).then((res) => {
-              if (res && res.data.code == 200) {
-                this.$message({
-                  showClose: true,
-                  message: "添加成功",
-                  type: "success",
-                });
-                this.visible = false;
-                this.$emit("updataList", 1);
-              }
-            });
-          } else {
-            delete this.dataForm.discard;
-            seviceApi.updateSeckillactivity(this.dataForm).then((res) => {
-              if (res && res.data.code == 200) {
-                this.$message({
-                  showClose: true,
-                  message: "修改成功",
-                  type: "success",
-                });
-                this.visible = false;
-                this.$emit("updataList", 1);
-              }
-            });
-          }
+          let url = this.dataForm.id
+            ? seckillActivityEdit_api
+            : seckillActivityAdd_api;
+          url(this.dataForm).then((res) => {
+            if (res && res.code == 200) {
+              this.$message.success(this.dataForm.id ? "修改成功" : "添加成功");
+              this.visible = false;
+              this.resetData();
+              this.$emit("updataList", 1);
+            }
+          });
         }
       });
     },

+ 40 - 31
src/views/marketing/seckill/list.vue

@@ -1,6 +1,6 @@
 <template>
-  <div class="app-container" :size="ELsize">
-    <el-form :inline="true" :model="search" ref="queryForm">
+  <div class="app-container">
+    <el-form :inline="true" :model="search" ref="queryForm" v-show="showSearch">
       <el-form-item label="活动名称" prop="name">
         <el-input
           v-model="search.name"
@@ -8,7 +8,7 @@
           clearable
         ></el-input>
       </el-form-item>
-      <el-form-item label="活动状态" prop="active_state">
+      <el-form-item label="活动状态" prop="active_state" :size="ELsize">
         <el-select v-model="search.active_state" clearable placeholder="请选择">
           <el-option
             v-for="item in options"
@@ -20,35 +20,47 @@
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery"
+          >搜索</el-button
+        >
         <el-button icon="el-icon-refresh" @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="ELsize" @click="addOrUpdateHandle()">新增</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          :size="ELsize"
+          @click="addOrUpdateHandle()"
+          >新增</el-button
+        >
       </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
     </el-row>
     <el-table :data="dataList" row-key="Id" border style="width: 100%">
       <el-table-column prop="name" align="center" label="活动名称">
       </el-table-column>
-      <el-table-column prop="goods_num" align="center" label="活动商品">
+      <el-table-column prop="productNum" align="center" label="活动商品">
       </el-table-column>
       <el-table-column
-        prop="start_time,end_time,start_hour,end_hour,week_transform"
+        prop="startTime,endTime,startHour,endHour,weekTransform"
         align="center"
         label="活动时间"
         width="400"
       >
         <template slot-scope="scope">
-          <div>{{ scope.row.start_time }}至{{ scope.row.end_time }}</div>
-          <div v-if="scope.row.cycle_mode == 0">
-            每天 {{ scope.row.start_hour }}—{{ scope.row.end_hour }}
+          <div>{{ scope.row.startTime }}至{{ scope.row.endTime }}</div>
+          <div v-if="scope.row.cycleMode == 0">
+            每天 {{ scope.row.startHour }}—{{ scope.row.endHour }}
           </div>
-          <div v-if="scope.row.cycle_mode == 1">
+          <div v-if="scope.row.cycleMode == 1">
             每周
-            <span v-for="(item, index) in scope.row.week_list" :key="item.id">
+            <span v-for="(item, index) in scope.row.weekList" :key="item.id">
               <template v-if="item == 1">一</template>
               <template v-if="item == 2">二</template>
               <template v-if="item == 3">三</template>
@@ -56,12 +68,12 @@
               <template v-if="item == 5">五</template>
               <template v-if="item == 6">六</template>
               <template v-if="item == 0">日</template>
-              <template v-if="index < scope.row.week_list.length - 1"
+              <template v-if="index < scope.row.weekList.length - 1"
                 >,</template
               >
             </span>
 
-            {{ scope.row.start_hour }}—{{ scope.row.end_hour }}
+            {{ scope.row.startHour }}—{{ scope.row.endHour }}
           </div>
         </template>
       </el-table-column>
@@ -76,10 +88,10 @@
             <el-tag type="danger">已终止</el-tag>
           </template>
           <template v-else>
-            <el-tag type="info" v-if="scope.row.active_state === 0"
+            <el-tag type="info" v-if="scope.row.activeTimeState === 0"
               >未开始</el-tag
             >
-            <el-tag type="success" v-else-if="scope.row.active_state == 1"
+            <el-tag type="success" v-else-if="scope.row.activeTimeState == 1"
               >进行中</el-tag
             >
             <el-tag type="danger" v-else>已结束</el-tag>
@@ -97,8 +109,8 @@
             type="text"
             size="small"
             v-if="
-              scope.row.active_time_state != 1 &&
-              scope.row.active_time_state != 2
+              scope.row.activeTimeState != 1 &&
+              scope.row.activeTimeState != 2
             "
             @click="addOrUpdateHandle(scope.row.id)"
             >修改</el-button
@@ -110,7 +122,7 @@
             type="text"
             size="small"
             class="c-error"
-            v-if="scope.row.active_time_state != 1"
+            v-if="scope.row.activeTimeState != 1"
             @click="deleteHandle(scope.row.id)"
             >删除</el-button
           >
@@ -118,7 +130,7 @@
             type="text"
             size="small"
             @click="goSeckillStop(scope.row.id)"
-            v-if="scope.row.active_state == 1 && !scope.row.discard"
+            v-if="scope.row.activeState == 1 && !scope.row.discard"
             >终止</el-button
           >
         </template>
@@ -134,7 +146,6 @@
 
     <!-- 弹窗, 新增 / 修改 -->
     <SeckillAddUpdate
-      v-if="addOrUpdateVisible"
       ref="seckillAddUpdate"
       @updataList="updataList"
     ></SeckillAddUpdate>
@@ -142,8 +153,7 @@
 </template>
 
 <script>
-// import seviceApi from "@/api/serviceApi.js";
-// import sysService from "@/api/sysService.js";
+import { seckillActivityPage_api } from "@/api/marketing/seckill";
 import getListApi from "@/mixins/getListApi";
 import SeckillAddUpdate from "./components/SeckillAddUpdate";
 
@@ -151,8 +161,7 @@ export default {
   mixins: [getListApi],
   data() {
     return {
-      //   listURL: agentAccountCodeApplyWaitPage,
-
+      listURL: seckillActivityPage_api,
       options: [
         {
           label: "未开始",
@@ -171,8 +180,6 @@ export default {
           value: 3,
         },
       ],
-      dataListLoading: false,
-      addOrUpdateVisible: false,
     };
   },
 
@@ -188,7 +195,7 @@ export default {
     },
     // 活动状态
     activeState(row, column) {
-      let status = row.active_state;
+      let status = row.activeState;
       if (status === 0) {
         return "未开始";
       } else if (status === 1) {
@@ -199,7 +206,6 @@ export default {
     },
     // 新增 / 修改
     addOrUpdateHandle(id) {
-      this.addOrUpdateVisible = true;
       this.$nextTick(() => {
         this.$refs.seckillAddUpdate.init(id);
       });
@@ -207,7 +213,10 @@ export default {
     // 管理商品页
     goSeckillPd(id) {
       // this.$router.push({name:'seckill-pd'},);
-      this.$router.push({ path: "/marketing/seckill/seckillPd", query: { id: id } });
+      this.$router.push({
+        path: "/marketing/seckill/seckillPd",
+        query: { id: id },
+      });
     },
     // 删除
     deleteHandle(id) {

+ 23 - 38
src/views/marketing/seckill/seckillPd.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="app-container">
-    <div class="mb10">
+    <!-- <div class="mb10">
       <el-button @click="getBack">返回秒杀列表</el-button>
-    </div>
-    <el-form :inline="true" :model="search" :size="ELsize">
+    </div> -->
+    <el-form :inline="true" :model="search" :size="ELsize" v-show="showSearch">
       <el-form-item label="商品名称">
         <el-input
           v-model="search.title"
@@ -37,19 +37,19 @@
     <el-table :data="dataList" row-key="Id" border style="width: 100%">
       <el-table-column prop="title" align="center" label="商品名称">
       </el-table-column>
-      <el-table-column prop="min_sale_price" align="center" label="销售价格">
+      <el-table-column prop="minSalePrice" align="center" label="销售价格">
       </el-table-column>
-      <el-table-column prop="min_price" align="center" label="活动价格">
+      <el-table-column prop="minPrice" align="center" label="活动价格">
       </el-table-column>
-      <el-table-column prop="limit_buy_num" align="center" label="限购">
+      <el-table-column prop="limitBuyNum" align="center" label="限购">
         <template slot-scope="scope">
-          <span v-if="scope.row.limit_buy_num == 0">不限购</span>
-          <span v-else>{{ scope.row.limit_buy_num }}</span>
+          <span v-if="scope.row.limitBuyNum == 0">不限购</span>
+          <span v-else>{{ scope.row.limitBuyNum }}</span>
         </template>
       </el-table-column>
-      <el-table-column prop="real_stock_total" align="center" label="可售数量">
+      <el-table-column prop="realStockTotal" align="center" label="可售数量">
       </el-table-column>
-      <el-table-column prop="result_sale_num" align="center" label="已售数量">
+      <el-table-column prop="resultSaleNum" align="center" label="已售数量">
       </el-table-column>
       <el-table-column prop="sort" align="center" label="商品排序">
       </el-table-column>
@@ -63,7 +63,7 @@
           <el-button
             type="text"
             size="small"
-            @click="updateHandle(scope.row.id, scope.row.goods_id)"
+            @click="updateHandle(scope.row.id, scope.row.goodsId)"
             >编辑</el-button
           >
           <el-button
@@ -82,50 +82,36 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-    <!-- 弹窗, 新增 -->
-    <seckill-pd-add-update
-      v-if="addOrUpdateVisible"
-      ref="seckillPdAddUpdate"
-    ></seckill-pd-add-update>
     <!-- 弹窗,  修改 -->
-    <activity-pd-add
-      v-if="activityPdAdd"
-      ref="activityPdAdd"
+    <ActivityPdAdd
+      ref="activityPdAddRef"
       @updataList="updataList"
-    ></activity-pd-add>
+    ></ActivityPdAdd>
   </div>
 </template>
 
 <script>
 import getListApi from "@/mixins/getListApi";
+import { seckillActivityProductPage_api } from "@/api/marketing/seckill";
 
-// import seckillPdAddUpdate from "./seckill-pd-add-update";
-// import activityPdAdd from "./activity-pd-add";
+import ActivityPdAdd from "./components/ActivityPdAdd";
 // import seviceApi from "@/api/serviceApi.js";
 
 export default {
   mixins: [getListApi],
   data() {
     return {
-      //   listURL: agentAccountCodeApplyWaitPage,
+      listURL: seckillActivityProductPage_api,
+      initializationShow: false,
       dataForm: {},
-      totalPage: 0,
-      dataListLoading: false,
-      addOrUpdateVisible: false, // 添加
-      activityPdAdd: false, // 修改
     };
   },
   components: {
-    // seckillPdAddUpdate,
-    // activityPdAdd,
+    ActivityPdAdd,
   },
   mounted() {
-    this.search.seckill_id = this.$route.query.id;
-  },
-  watch: {
-    $route() {
-      this.getList();
-    },
+    this.queryParams.seckillId = this.$route.query.id;
+    this.getList();
   },
   methods: {
     updataList() {
@@ -137,15 +123,14 @@ export default {
       this.$router.push({
         path: "/marketing/seckill/seckillPdAddUpdate",
         query: {
-          seckill_id: this.search.seckill_id,
+          seckillId: this.queryParams.seckillId,
         },
       });
     },
     // 修改
     updateHandle(id, goodsId) {
-      this.activityPdAdd = true;
       this.$nextTick(() => {
-        this.$refs.activityPdAdd.init(id, this.search.id, goodsId);
+        this.$refs.activityPdAddRef.init(id, this.queryParams.seckillId, goodsId);
       });
     },
     // 删除

+ 33 - 37
src/views/marketing/seckill/seckillPdAddUpdate.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="app-container">
-    <div class="mb10">
+    <!-- <div class="mb10">
       <el-button @click="getBack">返回管理商品</el-button>
-    </div>
-    <el-form :inline="true" :model="search" :size="ELsize">
+    </div> -->
+    <el-form :inline="true" :model="search" :size="ELsize" v-show="showSearch">
       <el-form-item label="商品名称">
         <el-input
           v-model="search.title"
@@ -35,11 +35,11 @@
         label="商品状态"
       >
       </el-table-column>
-      <el-table-column prop="real_sale_num" align="center" label="实际销量">
+      <el-table-column prop="realSales" align="center" label="实际销量">
       </el-table-column>
-      <el-table-column prop="is_join" align="center" label="是否已参加秒杀">
+      <el-table-column prop="isJoin" align="center" label="是否已参加秒杀">
         <template slot-scope="scope">
-          <el-tag v-if="scope.row.is_join">是</el-tag>
+          <el-tag v-if="scope.row.isJoin">是</el-tag>
           <el-tag v-else type="success">否</el-tag>
         </template>
       </el-table-column>
@@ -50,11 +50,11 @@
         align="center"
         label="操作"
       >
-        <template slot-scope="scope" v-if="scope.row.is_join == false">
+        <template slot-scope="scope" v-if="scope.row.isJoin == false">
           <el-button
             type="text"
             size="small"
-            @click="addOrUpdateHandle(scope.row.id)"
+            @click="addOrUpdateHandle(scope.row.productId, scope.row.productSkuSetList || [])"
             >添加</el-button
           >
         </template>
@@ -68,51 +68,40 @@
       @pagination="getList"
     />
     <!-- 弹窗, 新增 / 修改 -->
-    <activity-pd-add
-      v-if="addOrUpdateVisible"
-      ref="activityPdAdd"
-      @updataList="updataList"
-    ></activity-pd-add>
+    <ActivityPdAdd
+      ref="activityPdAddRef"
+      @updataList="getBack"
+    ></ActivityPdAdd>
   </div>
 </template>
 
 <script>
 import getListApi from "@/mixins/getListApi";
-// import activityPdAdd from "./activity-pd-add";
+import ActivityPdAdd from "./components/ActivityPdAdd";
+import { productForActivityPage } from "@/api/goods";
 // import seviceApi from "@/api/serviceApi.js";
 
 export default {
   mixins: [getListApi],
   data() {
     return {
-      //   listURL: agentAccountCodeApplyWaitPage,
-
-      seckill_id: "",
-      dataListLoading: false,
-      addOrUpdateVisible: false,
+      listURL: productForActivityPage,
+      initializationShow: false,
     };
   },
   components: {
-    // activityPdAdd,
-  },
-  watch: {
-    $route() {
-      this.getList();
-    },
+    ActivityPdAdd,
   },
   mounted() {
-    console.log(this.$route.query.seckill_id);
-
-    this.seckill_id = this.$route.query.seckill_id;
-    // this.search.seckill_id = this.seckill_id;
-    // this.getList();
+    this.queryParams.seckillId = this.$route.query.seckillId;
+    this.getList();
   },
   methods: {
-    updataList() {
-      this.$router.go(-1);
-    },
+    // updataList() {
+    //   this.$router.go(-1);
+    // },
     added(row, column) {
-      let status = row.added;
+      let status = row.shelvedStatus;
       if (status === true) {
         return "上架";
       } else {
@@ -120,10 +109,17 @@ export default {
       }
     },
     // 新增
-    addOrUpdateHandle(goodsId) {
-      this.addOrUpdateVisible = true;
+    addOrUpdateHandle(productId, skuList) {
+      skuList = skuList.map(v=>{
+        v.originalSalePrice = v.originalSalePrice ? v.originalSalePrice * 1 : v.salePrice * 1;
+        v.salePrice = v.salePrice * 1;
+        v.id = undefined;
+        v.originalStock = v.stock ? v.stock * 1 : 0;
+        v.stock = 0;
+        return v;
+      });
       this.$nextTick(() => {
-        this.$refs.activityPdAdd.init("", this.seckill_id, goodsId);
+        this.$refs.activityPdAddRef.init("", this.queryParams.seckillId, productId, skuList);
       });
     },
     // 返回管理商品

+ 88 - 0
src/views/operating/seckillIntervalTime.vue

@@ -0,0 +1,88 @@
+<template>
+  <div class="app-container">
+    <h3>秒杀区间时间设置</h3>
+
+    <el-row :gutter="20">
+      <el-checkbox-group v-model="checkList">
+        <el-col
+          v-for="item in listArr"
+          :key="item.lable"
+          :span="6"
+          style="margin-bottom: 20px"
+        >
+          <el-checkbox :label="item.lable">{{ item.lable }}</el-checkbox>
+        </el-col>
+      </el-checkbox-group>
+    </el-row>
+
+    <div style="margin-top: 30px">
+      <el-button type="primary" :loading="loading" @click="dataFormSubmit()"
+        >保存</el-button
+      >
+    </div>
+  </div>
+</template>
+<script>
+import { seckillTimeConfigList, seckillTimeConfigAdd } from "@/api/operating";
+
+export default {
+  name: "seckillIntervalTime",
+  data() {
+    return {
+      loading: false,
+      listArr: [],
+      checkList: [],
+    };
+  },
+  created() {
+    let listArr = [];
+    for (let i = 9; i < 24; i++) {
+      let startHour = `${i}:00`;
+      let endHour = `${i + 1}:00`;
+      if (i == 23) {
+        endHour = "23:59";
+      }
+      listArr.push({
+        lable: `${startHour} - ${endHour}`,
+      });
+    }
+    this.listArr = listArr;
+    // console.log(listArr);
+    this.getList();
+  },
+  methods: {
+    getList() {
+      seckillTimeConfigList().then((res) => {
+        console.log(res);
+        if (res.code == 200 && res.data) {
+          this.checkList = res.data.map(
+            (item) => `${item.startHour} - ${item.endHour}`
+          );
+        }
+      });
+    },
+    dataFormSubmit() {
+      if (this.loading) return;
+      this.loading = true;
+      let list = this.checkList.map((item) => {
+        let objs = item.split(" - ");
+        return {
+          startHour: objs[0],
+          endHour: objs[1],
+        };
+      });
+      seckillTimeConfigAdd(list)
+        .then((res) => {
+          this.loading = false;
+          if (res.code == 200) {
+            this.$message.success("保存成功");
+          }
+        })
+        .catch((err) => {
+          this.loading = false;
+          console.log(err);
+        });
+    },
+  },
+};
+</script>