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

+ 27 - 1
src/router/index.js

@@ -143,7 +143,7 @@ export const constantRoutes = [
     ]
   },
   {
-    path: '/marketing',
+    path: '/marketing/seckill',
     component: Layout,
     hidden: true,
     redirect: 'noredirect',
@@ -162,6 +162,32 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/marketing/groupBooking',
+    component: Layout,
+    hidden: true,
+    redirect: 'noredirect',
+    children: [
+      {
+        path: 'gbProduct',
+        component: () => import('@/views/marketing/groupBooking/gbProduct'),
+        name: 'gbProduct',
+        meta: { title: '拼团商品列表', icon: 'user' }
+      },
+      {
+        path: 'groupOrder',
+        component: () => import('@/views/marketing/groupBooking/groupOrder'),
+        name: 'groupOrder',
+        meta: { title: '拼团订单', icon: 'user' }
+      },
+      {
+        path: 'gbAddList',
+        component: () => import('@/views/marketing/groupBooking/gbAddList'),
+        name: 'gbAddList',
+        meta: { title: '添加拼团商品', icon: 'user' }
+      }
+    ]
+  },
 ]
 
 // 动态路由,基于用户权限动态去加载

+ 320 - 0
src/views/marketing/groupBooking/components/GbPdAdd.vue

@@ -0,0 +1,320 @@
+<template>
+  <el-dialog
+    title="活动商品"
+    :close-on-click-modal="false"
+    :visible.sync="visible"
+  >
+    <el-form
+      :model="dataForm"
+      :rules="dataRule"
+      ref="dataForm"
+      @keyup.enter.native="dataFormSubmit()"
+      label-width="100px"
+    >
+      <el-form-item label="活动价" prop="price_type">
+        <el-radio-group v-model="dataForm.price_type">
+          <el-radio :label="0">固定折扣</el-radio>
+          <el-radio :label="1">固定减价 </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item
+        v-if="dataForm.price_type == 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>折</span>
+          <span>
+            <el-button type="primary" @click="goSet">设置</el-button>
+          </span>
+        </el-col>
+      </el-form-item>
+      <el-form-item
+        v-if="dataForm.price_type == 1"
+        prop="fix_price"
+        :rules="[
+          { required: true, message: '固定减价不能为空', trigger: 'blur' },
+        ]"
+      >
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.fix_price"
+            :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>
+
+      <el-table
+        :data="dataList"
+        row-key="Id"
+        border
+        style="width: 100%; margin-top: 30px"
+      >
+        <el-table-column prop="sku_set_name" align="center" label="规格">
+        </el-table-column>
+
+        <el-table-column prop="cost_price" align="center" label="成本价">
+        </el-table-column>
+        <el-table-column prop="sale_price" align="center" label="原价">
+        </el-table-column>
+        <el-table-column prop="activity_price" align="center" label="价格">
+          <template slot-scope="scope">
+            <el-input-number
+              v-model="scope.row.activity_price"
+              :min="0"
+              :precision="2"
+              :controls="false"
+              :max="100000"
+            ></el-input-number>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-form-item label="限购数量" prop="limit_buy_num" class="mt30">
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.limit_buy_num"
+            :min="0"
+            :precision="0"
+            :controls="false"
+            :max="10000000"
+          ></el-input-number>
+        </el-col>
+        <el-col :span="12" :offset="2"
+          >件 每个用户允许购买的最大数量(输入0不限购)</el-col
+        >
+      </el-form-item>
+
+      <el-form-item label="可售数量" prop="real_stock_total">
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.real_stock_total"
+            :min="0"
+            :precision="0"
+            :controls="false"
+            :max="100000"
+          ></el-input-number>
+        </el-col>
+        <el-col :span="12" :offset="2">此次活动所有SKU可售数量</el-col>
+      </el-form-item>
+      <el-form-item label="初始销量" prop="init_sale_num">
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.init_sale_num"
+            :min="0"
+            :precision="0"
+            :controls="false"
+            :max="10000000"
+          ></el-input-number>
+        </el-col>
+      </el-form-item>
+
+      <el-form-item label="团购人数" prop="group_people_num">
+        <el-col :span="4">
+          <el-input-number
+            v-model="dataForm.group_people_num"
+            :min="2"
+            :precision="0"
+            :controls="false"
+            :max="10000000"
+          ></el-input-number>
+        </el-col>
+        <el-col :span="12" :offset="2">人团</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>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="celForm()">取消</el-button>
+      <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+// import seviceApi from "@/api/serviceApi.js";
+export default {
+  data() {
+    return {
+      visible: false,
+      dataForm: {
+        goods_id: null, // 商品id
+        group_buy_id: null, // 拼团活动id
+        price_type: null, // 0固定折扣,1固定减价
+        discount: null, // 固定折扣
+        fix_price: null, // 固定减价
+        limit_buy_num: null, // 限购
+        sort: null, // 商品排序
+        real_stock_total: null, // 真实库存总数
+        init_sale_num: null, // 初始化销量
+        group_people_num: null, // 成团总人数
+        group_buy_goods_sku_list: [],
+      },
+      dataList: [],
+      dataRule: {
+        price_type: [
+          {
+            required: true,
+            message: "活动价不能为空",
+            trigger: "blur",
+          },
+        ],
+        real_stock_total: [
+          {
+            required: true,
+            message: "可售数量不能为空",
+            trigger: "blur",
+          },
+        ],
+        init_sale_num: [
+          {
+            required: true,
+            message: "初始销量不能为空",
+            trigger: "blur",
+          },
+        ],
+        group_people_num: [
+          {
+            required: true,
+            message: "团购人数不能为空",
+            trigger: "blur",
+          },
+        ],
+        sort: [
+          {
+            required: true,
+            message: "商品排序不能为空",
+            trigger: "blur",
+          },
+        ],
+        limit_buy_num: [
+          {
+            required: true,
+            message: "限购数量不能为空",
+            trigger: "blur",
+          },
+        ],
+      },
+    };
+  },
+
+  methods: {
+    celForm() {
+      this.visible = false;
+    },
+    init(id, groupBuyId, goodsId) {
+      this.dataForm.id = id || null;
+      this.visible = true;
+      this.dataForm.goods_id = goodsId;
+      this.dataForm.group_buy_id = groupBuyId;
+      this.$nextTick(() => {
+        this.$refs["dataForm"].resetFields();
+      });
+      if (id) {
+        seviceApi.getActivitygoodsInfo(id).then((res) => {
+          if (res && res.data.code == 200) {
+            this.dataForm = res.data.data;
+            seviceApi.getGroupbuySku(id).then((res1) => {
+              this.dataList = res1.data.list;
+            });
+          }
+        });
+      } else {
+        // 查询商品所有规格
+        if (goodsId) {
+          seviceApi.getGoodsSkus(goodsId).then((res) => {
+            if (res && res.data.code == 200) {
+              res.data.list.forEach((i) => {
+                i.activity_price = i.sale_price;
+              });
+              this.dataList = res.data.list;
+            }
+          });
+        }
+      }
+    },
+    goSet() {
+      if (this.dataForm.discount != "") {
+        this.dataList.map((v, i) => {
+          v.activity_price = Number(
+            v.sale_price * (this.dataForm.discount / 10)
+          ).toFixed(2);
+        });
+      } else {
+        this.$message.error("请输入折扣");
+      }
+    },
+    setFixPrice() {
+      if (this.dataForm.fix_price != "") {
+        if (
+          this.dataList.some((val) => val.sale_price <= this.dataForm.fix_price)
+        ) {
+          this.$message.error("减价金额不得超过商品原价");
+          return false;
+        }
+        this.dataList.map((v, i) => {
+          v.activity_price = Number(
+            v.sale_price - this.dataForm.fix_price
+          ).toFixed(2);
+        });
+      } else {
+        this.$message.error("请输入减价");
+      }
+    },
+    // 提交
+    dataFormSubmit() {
+      this.$refs["dataForm"].validate((valid) => {
+        if (valid) {
+          if (this.dataForm.id == null || undefined) {
+            delete this.dataForm.id;
+          }
+          this.dataForm.group_buy_goods_sku_list = this.dataList;
+          seviceApi.saveGroupbuyActivitygoods(this.dataForm).then((res) => {
+            if (res && res.data.code == 200) {
+              this.$message({
+                message: "添加成功",
+                type: "success",
+              });
+              this.visible = false;
+              this.$emit("updataList", 1);
+            }
+          });
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+.mt30 {
+  margin-top: 30px;
+}
+</style>

+ 236 - 0
src/views/marketing/groupBooking/components/GroupBookingAddUpdate.vue

@@ -0,0 +1,236 @@
+<template>
+  <el-drawer
+    :title="!dataForm.id ? '新增' : '修改'"
+    size="900px"
+    :visible.sync="visible"
+    :wrapperClosable="false"
+  >
+    <el-form
+      :model="dataForm"
+      :rules="dataRule"
+      ref="dataForm"
+      @keyup.enter.native="dataFormSubmit()"
+      label-width="150px"
+      style="padding-right: 20px"
+    >
+      <el-form-item label="活动名称" prop="name">
+        <el-input
+          maxlength="15"
+          placeholder="活动名称"
+          v-model="dataForm.name"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="起止时间" class="date-lable" prop="start_time">
+        <el-form-item prop="start_time" label-width="0px">
+          <el-date-picker
+            v-model="dataForm.start_time"
+            type="date"
+            placeholder="选择日期"
+            value-format="yyyy-MM-dd"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <span style="padding: 0 20px">——</span>
+        <el-form-item prop="end_time" label-width="0px">
+          <el-date-picker
+            v-model="dataForm.end_time"
+            type="date"
+            placeholder="选择日期"
+            value-format="yyyy-MM-dd"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-form-item>
+      <el-form-item label="活动图片" prop="img_url">
+        <ImageUpload
+          v-model="imgArr"
+          :fileSize="0"
+          :limit="100"
+          :isShowTip="false"
+          :fileType="['jpg', 'png']"
+        />
+        <div>上传jpg/png文件;尺寸建议750x268</div>
+        <el-dialog :visible.sync="dialogVisible">
+          <img width="100%" :src="dataForm.img_url" alt="" />
+        </el-dialog>
+      </el-form-item>
+      <el-form-item label="活动说明" prop="explain">
+        <el-input
+          type="textarea"
+          v-model="dataForm.explain"
+          placeholder=""
+          :maxlength="200"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="订单自动关闭时间" prop="close_time">
+        <el-input-number
+          v-model="dataForm.close_time"
+          :min="3"
+          :precision="0"
+          :controls="false"
+          :max="360"
+        ></el-input-number>
+        <span>分钟(可输入3-360分钟)</span>
+      </el-form-item>
+      <el-form-item label="成团小时数" prop="limit_hour">
+        <el-input-number
+          v-model="dataForm.limit_hour"
+          :min="1"
+          :precision="0"
+          :controls="false"
+          :max="360"
+        ></el-input-number>
+        <span>小时</span>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="visible = false">取消</el-button>
+        <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
+      </el-form-item>
+    </el-form>
+  </el-drawer>
+</template>
+
+<script>
+// import seviceApi from "@/api/serviceApi.js";
+export default {
+  data() {
+    return {
+      visible: false,
+      dialogVisible: false,
+      dataForm: {},
+      dataRule: {
+        name: [
+          { required: true, message: "活动名称不能为空", trigger: "blur" },
+        ],
+        start_time: [
+          { required: true, message: "起止时间不能为空", trigger: "blur" },
+        ],
+        end_time: [
+          { required: true, message: "起止时间不能为空", trigger: "blur" },
+        ],
+        img_url: [
+          {
+            required: true,
+            message: "活动图片不能为空",
+            trigger: "blur",
+          },
+        ],
+        close_time: [
+          {
+            required: true,
+            message: "订单自动关闭时间不能为空",
+            trigger: "blur",
+          },
+        ],
+        limit_hour: [
+          {
+            required: true,
+            message: "成团小时数不能为空",
+            trigger: "blur",
+          },
+        ],
+      },
+      imgArr: [],
+    };
+  },
+
+  methods: {
+    init(id) {
+      //   this.resetData();
+      this.dataForm.id = id || null;
+      this.visible = true;
+
+      if (id) {
+        seviceApi.getGroupbuyActivityInfo(id).then((res) => {
+          if (res && res.data.code == 200) {
+            this.dataForm = res.data.data;
+            this.imgArr = this.dataForm.img_url.split(";");
+          }
+        });
+      }
+    },
+    resetData() {
+      (this.dataForm = {
+        name: "", // 拼团活动名称
+        start_time: "", // 活动开始时间
+        end_time: "", // 活动结束时间
+        img_url: "", // 活动图片
+        explain: "", // 活动说明
+        limit_hour: "", // 成团小时数(开团之后的小时数)
+        close_time: "", // 订单自动关闭时间(商品按下单减库存,请设置未付款订单自动取消时间及时释放库存,可输入3-360分钟)
+      }),
+        this.resetForm("dataForm");
+      this.imgArr = [];
+      this.timeQuantum = "";
+    },
+    // 上传图片
+    updataImg(e) {
+      this.dataForm.img_url = e;
+      console.log(e);
+      this.$refs["dataForm"].clearValidate(["img_url"]);
+    },
+    // 提交
+    dataFormSubmit() {
+      this.$refs["dataForm"].validate((valid) => {
+        if (valid) {
+          if (
+            new Date(this.dataForm.end_time).getTime() -
+              new Date(this.dataForm.start_time).getTime() <
+            0
+          ) {
+            this.$message({
+              showClose: true,
+              message: "结束时间不能小于开始时间",
+              type: "error",
+            });
+            return false;
+          }
+          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 (this.dataForm.id == null) {
+            delete this.dataForm.id;
+            seviceApi.saveGroupbuyActivity(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 {
+            seviceApi.updateGroupbuyActivity(this.dataForm).then((res) => {
+              if (res && res.data.code == 200) {
+                this.$message({
+                  showClose: true,
+                  message: "修改成功",
+                  type: "success",
+                });
+                this.visible = false;
+                this.$emit("updataList", 1);
+              }
+            });
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.date-lable {
+  ::v-deep .el-form-item__content {
+    display: flex;
+    justify-content: flex-start;
+  }
+}
+</style>

+ 133 - 0
src/views/marketing/groupBooking/gbAddList.vue

@@ -0,0 +1,133 @@
+<template>
+  <div class="app-container">
+    <div class="mb10">
+      <el-button @click="getBack">返回管理商品</el-button>
+    </div>
+    <el-form :inline="true" :model="search" :size="ELsize">
+      <el-form-item label="商品名称" prop="title">
+        <el-input
+          v-model="search.title"
+          placeholder="商品名称"
+          clearable
+        ></el-input>
+      </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">
+      <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="title" align="center" label="商品名称">
+      </el-table-column>
+      <el-table-column prop="min_sale_price" align="center" label="销售价格">
+      </el-table-column>
+      <!-- <el-table-column prop="" align="center" label="成本价格">
+      </el-table-column> -->
+      <el-table-column
+        prop="added"
+        align="center"
+        :formatter="added"
+        label="商品状态"
+      >
+      </el-table-column>
+      <el-table-column prop="real_sale_num" align="center" label="实际销量">
+      </el-table-column>
+      <el-table-column prop="is_join" align="center" label="是否已参加拼团">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.is_join">是</el-tag>
+          <el-tag v-else type="success">否</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        label="操作"
+      >
+        <template slot-scope="scope" v-if="scope.row.is_join == false">
+          <el-button
+            type="text"
+            size="small"
+            @click="addOrUpdateHandle(scope.row.id)"
+            >添加</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 弹窗, 新增 / 修改 -->
+    <GbPdAdd
+      v-if="addOrUpdateVisible"
+      ref="gbPdAddRef"
+      @updataList="getBack"
+    ></GbPdAdd>
+  </div>
+</template>
+
+<script>
+import GbPdAdd from "./components/GbPdAdd.vue";
+// import seviceApi from "@/api/serviceApi.js";
+import getListApi from "@/mixins/getListApi";
+
+export default {
+  mixins: [getListApi],
+  data() {
+    return {
+      //   listURL: agentAccountCodeApplyWaitPage,
+      dataForm: {},
+      dataListLoading: false,
+      addOrUpdateVisible: false,
+    };
+  },
+  components: {
+    GbPdAdd,
+  },
+  watch: {
+    $route() {},
+  },
+  mounted() {
+    this.search.group_buy_id = this.$route.query.id;
+  },
+  methods: {
+    added(row, column) {
+      let status = row.added;
+      if (status === true) {
+        return "上架";
+      } else {
+        return "下架";
+      }
+    },
+    // 新增 / 修改
+    addOrUpdateHandle(id) {
+      this.addOrUpdateVisible = true;
+      this.$nextTick(() => {
+        this.$refs.gbPdAddRef.init("", this.search.group_buy_id, id);
+      });
+    },
+    // 返回管理商品
+    getBack() {
+      this.$tab.closeOpenPage();
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+<style>
+.mb10 {
+  margin-bottom: 10px;
+}
+</style>

+ 176 - 0
src/views/marketing/groupBooking/gbProduct.vue

@@ -0,0 +1,176 @@
+<template>
+  <div class="app-container">
+    <div class="mb10">
+      <el-button @click="getBack">返回拼团列表</el-button>
+    </div>
+    <el-form :inline="true" :model="search" :size="ELsize">
+      <el-form-item label="商品名称">
+        <el-input
+          v-model="search.title"
+          placeholder="商品名称"
+          clearable
+        ></el-input>
+      </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="ELsize"
+          @click="addOrUpdateHandle()"
+          >新增</el-button
+        >
+      </el-col>
+      <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="title" align="center" label="商品名称">
+      </el-table-column>
+      <el-table-column prop="min_sale_price" align="center" label="销售价格">
+      </el-table-column>
+      <el-table-column prop="min_price" align="center" label="活动价格">
+      </el-table-column>
+      <el-table-column prop="group_people_num" align="center" label="团购规模">
+      </el-table-column>
+      <el-table-column prop="real_stock_total" align="center" label="可售数量">
+      </el-table-column>
+      <el-table-column prop="result_sale_num" align="center" label="已售数量">
+      </el-table-column>
+      <el-table-column prop="sort" align="center" label="商品排序">
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        label="操作"
+      >
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="goOrder(scope.row)">
+            团详情
+          </el-button>
+          <el-button
+            type="text"
+            size="small"
+            @click="upGbPdAdd(scope.row.id, scope.row.goods_id)"
+            >编辑</el-button
+          >
+          <el-button
+            type="text"
+            size="small"
+            @click="deleteHandle(scope.row.id)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 弹窗,修改 -->
+    <GbPdAdd
+      v-if="gbPdAddVisible"
+      ref="gbPdAddRef"
+      @updataList="getList"
+    ></GbPdAdd>
+  </div>
+</template>
+
+<script>
+import getListApi from "@/mixins/getListApi";
+import GbPdAdd from "./components/GbPdAdd.vue";
+// import seviceApi from "@/api/serviceApi.js";
+export default {
+  mixins: [getListApi],
+  data() {
+    return {
+      //   listURL: agentAccountCodeApplyWaitPage,
+      dataListLoading: false,
+      addOrUpdateVisible: false,
+      gbPdAddVisible: false,
+    };
+  },
+  components: {
+    GbPdAdd,
+  },
+  watch: {
+    $route() {
+      this.getList();
+    },
+  },
+  mounted() {
+    this.search.group_buy_id = this.$route.query.id;
+  },
+
+  methods: {
+    queryGetDataList() {
+      this.search.page = 1;
+      this.getList();
+    },
+    goOrder(item) {
+      this.$router.push({
+        path: "/marketing/groupBooking/groupOrder",
+        query: { id: item.group_buy_id, activeId: item.id },
+      });
+    },
+    deleteHandle(id) {
+      this.$confirm(`确定要删除该条数据?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          seviceApi.delGroupbuyActivitygoods(id).then((res) => {
+            if (res && res.data.code == 200) {
+              this.$message({
+                message: "删除成功",
+                type: "success",
+              });
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {});
+    },
+
+    // 商品列表
+    addOrUpdateHandle(id) {
+      this.$router.push({
+        path: "/marketing/groupBooking/gbAddList",
+        query: { id: this.search.group_buy_id },
+      });
+    },
+    // 编辑
+    upGbPdAdd(id, goodsId) {
+      this.gbPdAddVisible = true;
+      this.$nextTick(() => {
+        this.$refs.gbPdAddRef.init(id, this.search.group_buy_id, goodsId);
+      });
+    },
+    // 返回拼团列表
+    getBack() {
+      this.$tab.closeOpenPage();
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+<style>
+.mb10 {
+  margin-bottom: 10px;
+}
+</style>

+ 220 - 0
src/views/marketing/groupBooking/groupOrder.vue

@@ -0,0 +1,220 @@
+<template>
+  <div class="app-container">
+    <div class="mb10">
+      <el-button @click="getBack">返回商品列表</el-button>
+    </div>
+    <el-form :inline="true" :model="search" :size="ELsize">
+      <el-form-item label="开团时间">
+        <el-date-picker
+          v-model="date"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          format="yyyy-MM-dd"
+          @change="changeDate"
+          placeholder="开团时间"
+          clearable
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item label="拼团状态">
+        <el-select v-model="search.status" clearable placeholder="请选择">
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </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">
+      <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="goods_title"
+        align="center"
+        label="商品名称"
+        width="300px"
+      >
+      </el-table-column>
+      <el-table-column prop="goods_cover" align="center" label="商品图片">
+        <template slot-scope="scope">
+          <el-image
+            class="table-img"
+            :src="scope.row.goods_cover"
+            :preview-src-list="[scope.row.goods_cover]"
+          >
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column prop="format_start_time" align="center" label="开团时间">
+      </el-table-column>
+      <el-table-column prop="complete_time" align="center" label="成团时间">
+        <template slot-scope="scope">
+          <div>{{ scope.row.complete_time || "--" }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="format_end_time" align="center" label="截至时间">
+      </el-table-column>
+      <el-table-column prop="group_person_number" align="center" label="人数">
+        <template slot-scope="scope">
+          {{ scope.row.valid_person_number }} /
+          {{ scope.row.group_person_number }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="status" align="center" label="拼团状态">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.status == 0">建团中</el-tag>
+          <el-tag type="success" v-if="scope.row.status == 1">建团成功</el-tag>
+          <el-tag type="info" v-if="scope.row.status == 2">组团完成</el-tag>
+          <el-tag type="warning" v-if="scope.row.status == 3">建团失败</el-tag>
+          <el-tag type="warning" v-if="scope.row.status == 4">组团失败</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        label="操作"
+      >
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="groupPeople(scope.row)"
+            >拼团人员</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 弹窗,修改 -->
+    <el-dialog
+      title="拼团人员"
+      :visible.sync="dialogTableVisible"
+      width="1000px"
+    >
+      <el-table :data="peopleTable">
+        <el-table-column
+          property="nickname"
+          label="人员"
+          width="150"
+        ></el-table-column>
+        <el-table-column
+          property="order_code"
+          label="订单编号"
+          width="200"
+        ></el-table-column>
+        <el-table-column property="leader" label="身份">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.leader">团长</el-tag>
+            <el-tag type="success" v-else>团员</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column
+          property="create_time"
+          label="下单时间"
+        ></el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+// import seviceApi from '@/api/serviceApi.js'
+import getListApi from "@/mixins/getListApi";
+
+export default {
+  mixins: [getListApi],
+  data() {
+    return {
+      //   listURL: agentAccountCodeApplyWaitPage,
+      dataListLoading: false,
+      date: [],
+
+      dialogTableVisible: false,
+      peopleTable: [],
+      options: [
+        {
+          label: "建团中",
+          value: 0,
+        },
+        {
+          label: "建团成功",
+          value: 1,
+        },
+        {
+          label: "组团完成",
+          value: 2,
+        },
+        {
+          label: "建团失败",
+          value: 3,
+        },
+        {
+          label: "组团失败",
+          value: 4,
+        },
+      ],
+    };
+  },
+  components: {},
+  watch: {
+    $route() {},
+  },
+  mounted() {},
+
+  methods: {
+    changeDate() {
+      if (this.date != null && this.date.length > 0) {
+        this.search.start_time = this.date[0];
+        this.search.end_time = this.date[1];
+      } else {
+        delete this.search.start_time;
+        delete this.search.end_time;
+      }
+    },
+
+    // 商品列表
+    addOrUpdateHandle(id) {
+      this.$router.push({
+        path: "/marketing/groupBooking/gbAddList",
+        query: { id: this.search.group_buy_id },
+      });
+    },
+    // 拼团人员
+    groupPeople(item) {
+      this.dialogTableVisible = true;
+      seviceApi.groupbuyTeammember({ team_id: item.id }).then((res) => {
+        if (res && res.data.code == 200) {
+          this.peopleTable = res.data.list;
+        }
+      });
+    },
+    // 返回拼团列表
+    getBack() {
+      this.$tab.closeOpenPage();
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+<style>
+.mb10 {
+  margin-bottom: 10px;
+}
+</style>

+ 209 - 0
src/views/marketing/groupBooking/list.vue

@@ -0,0 +1,209 @@
+<template>
+  <div class="app-container">
+    <el-form :inline="true" :model="search" :size="ELsize">
+      <el-form-item label="活动名称">
+        <el-input
+          v-model="search.name"
+          placeholder="活动名称"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="活动状态">
+        <el-select v-model="search.active_state" clearable placeholder="请选择">
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </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="ELsize"
+          @click="addOrUpdateHandle()"
+          >新增</el-button
+        >
+      </el-col>
+      <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>
+      <el-table-column align="center" label="活动时间">
+        <template slot-scope="scope">
+          <div>开始时间: {{ scope.row.start_time }}</div>
+          <div>结束时间:{{ scope.row.end_time }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="active_state"
+        align="center"
+        :formatter="activeState"
+        label="活动状态"
+      >
+        <template slot-scope="scope">
+          <el-tag type="info" v-if="scope.row.active_state === 0"
+            >未开始</el-tag
+          >
+          <el-tag type="success" v-else-if="scope.row.active_state == 1"
+            >进行中</el-tag
+          >
+          <el-tag type="danger" v-else>已结束</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        header-align="center"
+        align="center"
+        label="操作"
+      >
+        <template slot-scope="scope">
+          <el-button
+            type="text"
+            size="small"
+            @click="addOrUpdateHandle(scope.row.id)"
+            v-if="scope.row.active_state == 0"
+            >修改</el-button
+          >
+          <el-button type="text" size="small" @click="goProduct(scope.row.id)">
+            管理商品</el-button
+          >
+
+          <el-button
+            type="text"
+            size="small"
+            class="c-error"
+            @click="deleteHandle(scope.row.id)"
+            v-if="scope.row.active_state != 1"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 弹窗, 新增 / 修改 -->
+    <GroupBookingAddUpdate
+      v-if="addOrUpdateVisible"
+      ref="groupBookingAddUpdate"
+      @updataList="updataList"
+    ></GroupBookingAddUpdate>
+  </div>
+</template>
+
+<script>
+// import seviceApi from "@/api/serviceApi.js";
+import getListApi from "@/mixins/getListApi";
+import GroupBookingAddUpdate from "./components/GroupBookingAddUpdate";
+
+export default {
+  mixins: [getListApi],
+  data() {
+    return {
+      //   listURL: agentAccountCodeApplyWaitPage,
+      showGroupMember: false,
+      options: [
+        {
+          label: "未开始",
+          value: 0,
+        },
+        {
+          label: "进行中",
+          value: 1,
+        },
+        {
+          label: "已结束",
+          value: 2,
+        },
+      ],
+      dataListLoading: false,
+      addOrUpdateVisible: false,
+    };
+  },
+  components: {
+    GroupBookingAddUpdate,
+  },
+  mounted() {
+
+  },
+  methods: {
+    getMember(id) {
+      this.showGroupMember = true;
+      this.$nextTick(() => {
+        this.$refs.groupMember.init(id);
+      });
+    },
+    updataList(e) {
+      if (e == 1) {
+        this.getList();
+      }
+    },
+    // 活动状态
+    activeState(row, column) {
+      let status = row.active_state;
+      if (status === 0) {
+        return "未开始";
+      } else if (status === 1) {
+        return "进行中";
+      } else {
+        return "已结束";
+      }
+    },
+    // 新增 / 修改
+    addOrUpdateHandle(id) {
+      this.addOrUpdateVisible = true;
+      this.$nextTick(() => {
+        this.$refs.groupBookingAddUpdate.init(id);
+      });
+    },
+    // 拼团管理商品页
+    goProduct(id) {
+      this.$router.push({ path: "/marketing/groupBooking/gbProduct", query: { id: id } });
+    },
+
+    // 删除
+    deleteHandle(id) {
+      this.$confirm(`确定要删除该条数据?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          seviceApi.delGroupbuyActivity(id).then((res) => {
+            if (res && res.data.code == 200) {
+              this.$message({
+                message: "删除成功",
+                type: "success",
+              });
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {});
+    },
+  },
+};
+</script>

+ 2 - 2
src/views/marketing/seckill/list.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" :size="ELsize">
     <el-form :inline="true" :model="search" ref="queryForm">
       <el-form-item label="活动名称" prop="name">
         <el-input
@@ -207,7 +207,7 @@ export default {
     // 管理商品页
     goSeckillPd(id) {
       // this.$router.push({name:'seckill-pd'},);
-      this.$router.push({ path: "/marketing/seckillPd", query: { id: id } });
+      this.$router.push({ path: "/marketing/seckill/seckillPd", query: { id: id } });
     },
     // 删除
     deleteHandle(id) {

+ 3 - 2
src/views/marketing/seckill/seckillPd.vue

@@ -3,7 +3,7 @@
     <div class="mb10">
       <el-button @click="getBack">返回秒杀列表</el-button>
     </div>
-    <el-form :inline="true" :model="search">
+    <el-form :inline="true" :model="search" :size="ELsize">
       <el-form-item label="商品名称">
         <el-input
           v-model="search.title"
@@ -135,7 +135,7 @@ export default {
     // 新增
     addOrUpdateHandle() {
       this.$router.push({
-        path: "/marketing/seckillPdAddUpdate",
+        path: "/marketing/seckill/seckillPdAddUpdate",
         query: {
           seckill_id: this.search.seckill_id,
         },
@@ -170,6 +170,7 @@ export default {
     },
     // 返回秒杀列表
     getBack() {
+      this.$tab.closeOpenPage();
       this.$router.go(-1);
     },
   },

+ 2 - 1
src/views/marketing/seckill/seckillPdAddUpdate.vue

@@ -3,7 +3,7 @@
     <div class="mb10">
       <el-button @click="getBack">返回管理商品</el-button>
     </div>
-    <el-form :inline="true" :model="search">
+    <el-form :inline="true" :model="search" :size="ELsize">
       <el-form-item label="商品名称">
         <el-input
           v-model="search.title"
@@ -128,6 +128,7 @@ export default {
     },
     // 返回管理商品
     getBack() {
+      this.$tab.closeOpenPage();
       this.$router.go(-1);
     },
   },