From 61c4053cbb3c81419d9e549be16e7254d14a6d6b Mon Sep 17 00:00:00 2001
From: halfninety <690534687@qq.com>
Date: Tue, 29 Nov 2022 22:58:00 +0800
Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=BF=AE=E6=94=B9=E7=A7=92?=
 =?UTF-8?q?=E6=9D=80=E7=9B=B8=E5=85=B3=E6=96=87=E4=BB=B6=E5=AD=98=E6=94=BE?=
 =?UTF-8?q?=E5=9C=B0=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../{ => mall}/promotion/seckillActivity.js   |   0
 .../api/{ => mall}/promotion/seckillTime.js   |   0
 .../seckill}/seckillActivity/index.vue        | 143 +++++++++---------
 .../promotion/seckill}/seckillTime/index.vue  |  64 ++------
 4 files changed, 77 insertions(+), 130 deletions(-)
 rename yudao-ui-admin/src/api/{ => mall}/promotion/seckillActivity.js (100%)
 rename yudao-ui-admin/src/api/{ => mall}/promotion/seckillTime.js (100%)
 rename yudao-ui-admin/src/views/{promotion => mall/promotion/seckill}/seckillActivity/index.vue (83%)
 rename yudao-ui-admin/src/views/{promotion => mall/promotion/seckill}/seckillTime/index.vue (71%)

diff --git a/yudao-ui-admin/src/api/promotion/seckillActivity.js b/yudao-ui-admin/src/api/mall/promotion/seckillActivity.js
similarity index 100%
rename from yudao-ui-admin/src/api/promotion/seckillActivity.js
rename to yudao-ui-admin/src/api/mall/promotion/seckillActivity.js
diff --git a/yudao-ui-admin/src/api/promotion/seckillTime.js b/yudao-ui-admin/src/api/mall/promotion/seckillTime.js
similarity index 100%
rename from yudao-ui-admin/src/api/promotion/seckillTime.js
rename to yudao-ui-admin/src/api/mall/promotion/seckillTime.js
diff --git a/yudao-ui-admin/src/views/promotion/seckillActivity/index.vue b/yudao-ui-admin/src/views/mall/promotion/seckill/seckillActivity/index.vue
similarity index 83%
rename from yudao-ui-admin/src/views/promotion/seckillActivity/index.vue
rename to yudao-ui-admin/src/views/mall/promotion/seckill/seckillActivity/index.vue
index 7fff0106f..3805def34 100644
--- a/yudao-ui-admin/src/views/promotion/seckillActivity/index.vue
+++ b/yudao-ui-admin/src/views/mall/promotion/seckill/seckillActivity/index.vue
@@ -18,8 +18,6 @@
                 <el-select v-model="queryParams.timeId" placeholder="请选择参与场次" clearable size="small">
                     <el-option v-for="item in seckillTimeList" :key="item.id" :label="item.name" :value="item.id" />
                 </el-select>
-                <!-- <el-option v-for="seckill in seckillTimeList" :key="seckill.id" :lable="seckill.name" :value="seckill.id" /> -->
-                <!-- <el-input v-model="queryParams.timeId" placeholder="请输入秒杀时段id" clearable @keyup.enter.native="handleQuery" /> -->
             </el-form-item>
             <el-form-item label="创建时间" prop="createTime">
                 <el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss"
@@ -39,8 +37,8 @@
                     v-hasPermi="['promotion:seckill-activity:create']">新增秒杀活动</el-button>
             </el-col>
             <el-col :span="1.5">
-                <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
-                    :loading="exportLoading" v-hasPermi="['promotion:seckill-activity:export']">导出</el-button>
+                <el-button type="primary" plain icon="el-icon-menu" size="mini" @click="openSeckillTime"
+                    v-hasPermi="['promotion:seckill-activity:create']">管理参与场次</el-button>
             </el-col>
             <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
         </el-row>
@@ -70,11 +68,6 @@
 
             <el-table-column label="付款订单数" align="center" prop="orderCount" />
             <el-table-column label="付款人数" align="center" prop="userCount" />
-            <el-table-column label="订单实付金额" align="center">
-                <template slot-scope="scope">
-                    ¥{{ (scope.row.totalPrice / 100.0).toFixed(2) }}
-                </template>
-            </el-table-column>
             <el-table-column label="创建时间" align="center" prop="createTime" width="180">
                 <template slot-scope="scope">
                     <span>{{ parseTime(scope.row.createTime) }}</span>
@@ -84,6 +77,8 @@
                 <template slot-scope="scope">
                     <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
                         v-hasPermi="['promotion:seckill-activity:update']">修改</el-button>
+                    <el-button size="mini" type="text" icon="el-icon-close" @click="handleClose(scope.row)"
+                        v-hasPermi="['promotion:seckill-activity:delete']">关闭</el-button>
                     <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
                         v-hasPermi="['promotion:seckill-activity:delete']">删除</el-button>
                 </template>
@@ -99,40 +94,20 @@
                 <el-form-item label="活动名称" prop="name">
                     <el-input v-model="form.name" placeholder="请输入秒杀活动名称" />
                 </el-form-item>
-                <!-- <el-form-item label="活动状态" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio v-for="dict in this.getDictDatas(DICT_TYPE.PROMOTION_ACTIVITY_STATUS)"
-                      :key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
-          </el-radio-group>
-        </el-form-item> -->
-
                 <el-form-item label="活动时间" prop="startAndEndTime">
                     <el-date-picker clearable v-model="form.startAndEndTime" type="datetimerange"
                         value-format="timestamp" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
                         style="width: 1080px" />
                 </el-form-item>
-                <!-- 
-        <el-form-item label="活动结束时间" prop="endTime">
-          <el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择活动结束时间" />
-        </el-form-item> -->
-
                 <el-form-item label="排序" prop="sort">
                     <el-input-number v-model="form.sort" controls-position="right" :min="0" :max="10000">
                     </el-input-number>
                 </el-form-item>
-
-                <!-- <el-form-item label="秒杀时段id" prop="timeId">
-          <el-input v-model="form.timeId" placeholder="请输入秒杀时段id" />
-        </el-form-item>
-        <el-form-item label="订单实付金额(分)" prop="totalPrice">
-          <el-input v-model="form.totalPrice" placeholder="请输入订单实付金额(分)" />
-        </el-form-item> -->
-
                 <el-form-item label="备注" prop="remark">
                     <el-input type="textarea" v-model="form.remark" placeholder="请输入备注" />
                 </el-form-item>
                 <el-form-item label="场次选择">
-                    <el-select v-model="form.timeIds" placeholder="请选择参与场次" clearable size="small" multiple filterable
+                    <el-select v-model="form.timeId" placeholder="请选择参与场次" clearable size="small" multiple filterable
                         style="width: 880px">
                         <el-option v-for="item in seckillTimeList" :key="item.id" :label="item.name" :value="item.id">
                             <span style="float: left">{{ item.name + ': { ' }} {{ item.startTime }} -- {{ item.endTime +
@@ -142,7 +117,6 @@
                         </el-option>
                     </el-select>
                 </el-form-item>
-
                 <el-form-item label="商品选择">
                     <el-select v-model="form.skuIds" placeholder="请选择活动商品" clearable size="small" multiple filterable
                         style="width: 880px" @change="changeFormSku">
@@ -154,13 +128,11 @@
                             }}</span>
                         </el-option>
                     </el-select>
-
                     <el-row>
                         <el-button type="primary" size="mini" @click="batchEditProduct('limitBuyCount')">限购</el-button>
                         <el-button type="primary" size="mini" @click="batchEditProduct('seckillPrice')">秒杀价</el-button>
                         <el-button type="primary" size="mini" @click="batchEditProduct('seckillStock')">秒杀库存</el-button>
                     </el-row>
-
                     <el-table v-loading="loading" ref="productsTable" :data="form.products">
                         <el-table-column type="selection" width="55">
                         </el-table-column>
@@ -177,28 +149,23 @@
                         <el-table-column label="库存" align="center" prop="productStock" />
                         <el-table-column label="限购(0为不限购)" align="center" width="150">
                             <template slot-scope="scope">
-                                <el-input-number v-model="scope.row.limitBuyCount" size="mini" controls-position="right"
-                                    :min="0" :max="10000">
+                                <el-input-number v-model="scope.row.limitBuyCount" size="mini" :min="0" :max="10000">
                                 </el-input-number>
                             </template>
                         </el-table-column>
-
                         <el-table-column label="秒杀价(元)" align="center" width="150">
                             <template slot-scope="scope">
-                                <el-input-number v-model="scope.row.seckillPrice" size="mini" controls-position="right"
-                                    :precision="2" :min="0" :max="10000">
+                                <el-input-number v-model="scope.row.seckillPrice" size="mini" :precision="2" :min="0"
+                                    :max="10000">
                                 </el-input-number>
                             </template>
                         </el-table-column>
-
-                        <el-table-column label="秒杀库存" align="center" width="150">
+                        <el-table-column label="秒杀库存" align="center" width="150" prop="seckillStock">
                             <template slot-scope="scope">
-                                <el-input-number v-model="scope.row.seckillStock" size="mini" controls-position="right"
-                                    :min="0" :max="10000">
+                                <el-input-number v-model="scope.row.seckillStock" size="mini" :min="0" :max="10000">
                                 </el-input-number>
                             </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" icon="el-icon-delete"
@@ -208,8 +175,6 @@
                         </el-table-column>
                     </el-table>
                 </el-form-item>
-
-
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -221,10 +186,9 @@
 
 <script>
 import { getSkuOptionList } from "@/api/mall/product/sku";
-import { createSeckillActivity, updateSeckillActivity, deleteSeckillActivity, getSeckillActivity, getSeckillActivityPage, exportSeckillActivityExcel } from "@/api/promotion/seckillActivity";
-import { getSeckillTimeList } from "@/api/promotion/seckillTime";
-import router from '@/router';
-import { PromotionDiscountTypeEnum } from "@/utils/constants";
+import { createSeckillActivity, updateSeckillActivity, closeSeckillActivity,deleteSeckillActivity, getSeckillActivity, getSeckillActivityPage, exportSeckillActivityExcel } from "@/api/mall/promotion/seckillActivity";
+import { getSeckillTimeList } from "@/api/mall/promotion/seckillTime";
+import { deepClone } from "@/utils";
 
 export default {
     name: "SeckillActivity",
@@ -234,8 +198,6 @@ export default {
         return {
             // 遮罩层
             loading: true,
-            // 导出遮罩层
-            exportLoading: false,
             // 显示搜索条件
             showSearch: true,
             // 总条数
@@ -261,7 +223,7 @@ export default {
             form: {
                 skuIds: [], // 选中的 SKU
                 products: [], // 商品信息
-                timeIds: [], //选中的秒杀场次id
+                timeId: [], //选中的秒杀场次id
             },
             // 商品 SKU 列表
             productSkus: [],
@@ -270,9 +232,8 @@ export default {
                 name: [{ required: true, message: "秒杀活动名称不能为空", trigger: "blur" }],
                 status: [{ required: true, message: "活动状态不能为空", trigger: "blur" }],
                 startAndEndTime: [{ required: true, message: "活动时间不能为空", trigger: "blur" }],
-                endTime: [{ required: true, message: "活动结束时间不能为空", trigger: "blur" }],
                 sort: [{ required: true, message: "排序不能为空", trigger: "blur" }],
-                timeIds: [{ required: true, message: "秒杀场次不能为空", trigger: "blur" }],
+                timeId: [{ required: true, message: "秒杀场次不能为空", trigger: "blur" }],
                 totalPrice: [{ required: true, message: "订单实付金额,单位:分不能为空", trigger: "blur" }],
             }
         };
@@ -280,17 +241,26 @@ export default {
     created() {
         this.getList();
     },
+    watch:{
+        $route: 'getList'
+    },
     methods: {
         /** 查询列表 */
         getList() {
+            const timeId = this.$route.params && this.$route.params.timeId;
+            if (timeId) {
+                this.queryParams.timeId = timeId
+            }
             this.loading = true;
             // 执行查询
             getSeckillActivityPage(this.queryParams).then(response => {
                 this.list = response.data.list;
-                console.log(response, "查询返回的秒杀活动列表");
                 this.total = response.data.total;
                 this.loading = false;
             });
+            if (timeId) {
+                this.$route.params.timeId = undefined
+            }
             // 获得 SKU 商品列表
             getSkuOptionList().then(response => {
                 this.productSkus = response.data;
@@ -298,7 +268,6 @@ export default {
             // 获取参与场次列表
             getSeckillTimeList().then(response => {
                 this.seckillTimeList = response.data;
-                console.log(this.seckillTimeList, "最终获取的参与场次列表");
             });
         },
         /** 取消按钮 */
@@ -316,7 +285,7 @@ export default {
                 startTime: undefined,
                 endTime: undefined,
                 sort: undefined,
-                timeId: undefined,
+                timeId: [],
                 totalPrice: undefined,
                 skuIds: [],
                 products: [],
@@ -333,6 +302,10 @@ export default {
             this.resetForm("queryForm");
             this.handleQuery();
         },
+        /**打开秒杀场次管理页面 */
+        openSeckillTime() {
+            this.$tab.openPage("秒杀场次管理", "/promotion/seckill-time");
+        },
         /** 新增按钮操作 */
         handleAdd() {
             this.reset();
@@ -341,14 +314,34 @@ export default {
         },
         /** 修改按钮操作 */
         handleUpdate(row) {
-            console.log(row, "当前行数据");
             this.reset();
             const id = row.id;
             getSeckillActivity(id).then(response => {
+                var timeIdList = response.data.timeId.split(',')
                 this.form = response.data;
+                // 修改数据
+                this.form.startAndEndTime = [response.data.startTime, response.data.endTime];
+                this.form.timeId = timeIdList.map(item => parseInt(item))
+                this.form.skuIds = response.data.products.map(item => item.skuId);
+                this.form.products.forEach(product => {
+                    // 获得对应的 SKU 信息
+                    const sku = this.productSkus.find(item => item.id === product.skuId);
+                    if (!sku) {
+                        return;
+                    }
+                    // 设置商品信息
+                    product.name = sku.name;
+                    product.spuName = sku.spuName;
+                    product.price = sku.price;
+                    product.productStock = sku.stock;
+                    this.$set(product,'seckillStock',product.stock);
+                    product.seckillPrice = product.seckillPrice !== undefined ? product.seckillPrice / 100 : undefined;
+
+                });
+                // 打开弹窗
                 this.open = true;
-                this.title = "修改秒杀活动";
-            });
+                this.title = "修改限时折扣活动";
+            })
         },
         /** 提交按钮 */
         submitForm() {
@@ -360,6 +353,11 @@ export default {
                 const data = deepClone(this.form);
                 data.startTime = this.form.startAndEndTime[0];
                 data.endTime = this.form.startAndEndTime[1];
+                data.timeId = data.timeId.toString();
+                data.products.forEach(product => {
+                    product.stock = product.seckillStock;
+                    product.seckillPrice = product.seckillPrice !== undefined ? product.seckillPrice * 100 : undefined;
+                });
                 // 修改的提交
                 if (this.form.id != null) {
                     updateSeckillActivity(data).then(response => {
@@ -377,6 +375,16 @@ export default {
                 });
             });
         },
+        /** 关闭按钮操作 */
+        handleClose(row) {
+            const id = row.id;
+            this.$modal.confirm('是否确认关闭秒杀活动编号为"' + id + '"的数据项?').then(function () {
+                return closeSeckillActivity(id);
+            }).then(() => {
+                this.getList();
+                this.$modal.msgSuccess("关闭成功");
+            }).catch(() => { });
+        },
         /** 删除按钮操作 */
         handleDelete(row) {
             const id = row.id;
@@ -387,20 +395,6 @@ export default {
                 this.$modal.msgSuccess("删除成功");
             }).catch(() => { });
         },
-        /** 导出按钮操作 */
-        handleExport() {
-            // 处理查询参数
-            let params = { ...this.queryParams };
-            params.pageNo = undefined;
-            params.pageSize = undefined;
-            this.$modal.confirm('是否确认导出所有秒杀活动数据项?').then(() => {
-                this.exportLoading = true;
-                return exportSeckillActivityExcel(params);
-            }).then(response => {
-                this.$download.excel(response, '秒杀活动.xls');
-                this.exportLoading = false;
-            }).catch(() => { });
-        },
         /** 批量修改商品秒杀价,秒杀库存,每人限购数量 */
         batchEditProduct(editType) {
             const selectProducts = this.$refs.productsTable.selection;
@@ -459,7 +453,6 @@ export default {
                     return;
                 }
                 // 判断已存在,直接跳过
-                console.log(this.form, "当前form")
                 const product = this.form.products.find(item => item.skuId === skuId);
                 if (product) {
                     return;
diff --git a/yudao-ui-admin/src/views/promotion/seckillTime/index.vue b/yudao-ui-admin/src/views/mall/promotion/seckill/seckillTime/index.vue
similarity index 71%
rename from yudao-ui-admin/src/views/promotion/seckillTime/index.vue
rename to yudao-ui-admin/src/views/mall/promotion/seckill/seckillTime/index.vue
index df829582b..aa7df7200 100644
--- a/yudao-ui-admin/src/views/promotion/seckillTime/index.vue
+++ b/yudao-ui-admin/src/views/mall/promotion/seckill/seckillTime/index.vue
@@ -1,36 +1,12 @@
 <template>
   <div class="app-container">
 
-    <!-- 搜索工作栏 -->
-    <!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
-      <el-form-item label="秒杀时段名称" prop="name">
-        <el-input v-model="queryParams.name" placeholder="请输入秒杀时段名称" clearable @keyup.enter.native="handleQuery" />
-      </el-form-item>
-
-      <el-form-item label="开始时间点" prop="startTime">
-        <el-time-picker v-model="queryParams.startTime" placeholder="选择开始时间" value-format="HH:mm:ss" />
-      </el-form-item>
-
-      <el-form-item label="结束时间点" prop="endTime">
-        <el-time-picker v-model="queryParams.endTime" placeholder="选择结束时间" value-format="HH:mm:ss" />
-      </el-form-item>
-
-      <el-form-item>
-        <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="mini" @click="handleAdd"
-          v-hasPermi="['promotion:seckill-time:create']">新增</el-button>
+          v-hasPermi="['promotion:seckill-time:create']">新增秒杀时段</el-button>
       </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
-          :loading="exportLoading" v-hasPermi="['promotion:seckill-time:export']">导出</el-button>
-      </el-col> -->
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -55,6 +31,8 @@
       </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" icon="el-icon-view" @click="handleOpenSeckillActivity(scope.row)">
+            查看秒杀活动</el-button>
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
             v-hasPermi="['promotion:seckill-time:update']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
@@ -62,9 +40,6 @@
         </template>
       </el-table-column>
     </el-table>
-    <!-- 分页组件 -->
-    <!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
-      @pagination="getList" /> -->
 
     <!-- 对话框(添加 / 修改) -->
     <el-dialog :title="title" :visible.sync="open" width="600px" v-dialogDrag append-to-body>
@@ -87,7 +62,8 @@
 </template>
 
 <script>
-import { createSeckillTime, updateSeckillTime, deleteSeckillTime, getSeckillTime, getSeckillTimePage, exportSeckillTimeExcel, getSeckillTimeList } from "@/api/promotion/seckillTime";
+import { createSeckillTime, updateSeckillTime, deleteSeckillTime, getSeckillTime, getSeckillTimePage, exportSeckillTimeExcel, getSeckillTimeList } from "@/api/mall/promotion/seckillTime";
+import router from "@/router";
 import { deepClone } from "@/utils";
 
 export default {
@@ -110,14 +86,6 @@ export default {
       title: "",
       // 是否显示弹出层
       open: false,
-      // 查询参数
-      // queryParams: {
-      //   pageNo: 1,
-      //   pageSize: 10,
-      //   name: null,
-      //   startTime: null,
-      //   endTime: null,
-      // },
       // 表单参数
       form: {},
       // 表单校验
@@ -136,9 +104,7 @@ export default {
       this.loading = true;
       // 执行查询
       getSeckillTimeList().then(response => {
-        console.log(response, "返回的数据")
         this.list = response.data;
-        // this.total = response.data.total;
         this.loading = false;
       });
     },
@@ -160,7 +126,6 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      // this.queryParams.pageNo = 1;
       this.getList();
     },
     /** 重置按钮操作 */
@@ -168,10 +133,13 @@ export default {
       this.resetForm("queryForm");
       this.handleQuery();
     },
+    /**查看当前秒杀时段的秒杀活动 */
+    handleOpenSeckillActivity(row) {
+      router.push({ name: 'SeckillActivity', params: { timeId: row.id } })
+    },
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      console.log(this.form, "点击新增时的form");
       this.open = true;
       this.title = "添加秒杀时段";
     },
@@ -224,20 +192,6 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => { });
     },
-    /** 导出按钮操作 */
-    // handleExport() {
-    //   // 处理查询参数
-    //   let params = { ...this.queryParams };
-    //   params.pageNo = undefined;
-    //   params.pageSize = undefined;
-    //   this.$modal.confirm('是否确认导出所有秒杀时段数据项?').then(() => {
-    //     this.exportLoading = true;
-    //     return exportSeckillTimeExcel(params);
-    //   }).then(response => {
-    //     this.$download.excel(response, '秒杀时段.xls');
-    //     this.exportLoading = false;
-    //   }).catch(() => { });
-    // }
   }
 };
 </script>