Ver Fonte

添加同步 商品库

wenjie há 11 meses atrás
pai
commit
2a365a0830

+ 28 - 1
src/api/common.js

@@ -2,7 +2,7 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2023-11-16 15:14:42
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-07-19 10:04:19
+ * @LastEditTime: 2024-08-16 10:45:00
  * @FilePath: \admin-manage\src\api\common.js
  * @Description: 
  * 
@@ -129,3 +129,30 @@ export function uidToAddress(params) {
     params
   })
 }
+
+// 城市列表
+export function getCityList(data) {
+  return request({
+    url: '/productcenterserver/region/list',
+    method: 'post',
+    data
+  })
+}
+
+// 新增修改城市
+export function putCity(data) {
+  return request({
+    url: '/productcenterserver/region/put',
+    method: 'post',
+    data
+  })
+}
+
+// 删除城市
+export function delCity(data) {
+  return request({
+    url: '/productcenterserver/region/remove',
+    method: 'post',
+    data
+  })
+}

+ 78 - 2
src/api/goods.js

@@ -2,7 +2,7 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2023-11-09 11:35:30
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-07-19 14:40:04
+ * @LastEditTime: 2024-08-18 16:23:43
  * @FilePath: \admin-manage\src\api\goods.js
  * @Description: 
  * 
@@ -198,4 +198,80 @@ export function addOrUpdateLabel(data) {
     method: 'post',
     data
   })
-}
+}
+
+
+// 产品库
+export function goodsStoreList(params) {
+  return request({
+    url: '/productcenterserver/product/data/list',
+    method: 'get',
+    params
+  })
+}
+
+
+
+// 首页商品黑名单列表
+export function listHidden(params) {
+  return request({
+    url: '/productcenterserver/product/data/listHidden',
+    method: 'get',
+    params
+  })
+}
+
+// 首页商品列表
+export function homeGoodsList(params) {
+  return request({
+    url: '/productcenterserver/search/v1/list',
+    method: 'get',
+    params
+  })
+}
+
+// 首页商品拉黑
+export function setHidden(data) {
+  return request({
+    url: '/productcenterserver/product/data/setHidden',
+    method: 'post',
+    data
+  })
+}
+
+// 首页商品展示类型
+export function listShowTypes(data) {
+  return request({
+    url: '/productcenterserver/product/data/listShowTypes',
+    method: 'post',
+    data
+  })
+}
+
+// 首页商品所有类型
+export function listAllTypes(data) {
+  return request({
+    url: '/productcenterserver/product/data/listAllTypes',
+    method: 'post',
+    data
+  })
+}
+
+// 设置首页商品展示类型
+export function setShowTypes(data) {
+  return request({
+    url: '/productcenterserver/product/data/setShowTypes',
+    method: 'post',
+    data
+  })
+}
+
+
+// 设置首页商品排序
+export function setTop(params) {
+  return request({
+    url: '/productcenterserver/product/data/setTop',
+    method: 'post',
+    params
+  })
+}

+ 38 - 0
src/api/task.js

@@ -0,0 +1,38 @@
+/*
+ * @Author: wenjie 1454560336@qq.com
+ * @Date: 2024-08-16 11:02:28
+ * @LastEditors: wenjie 1454560336@qq.com
+ * @LastEditTime: 2024-08-16 11:05:01
+ * @FilePath: \admin-manage\src\api\task.js
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
+import request from '@/utils/request'
+
+// 同步任务列表
+export function taskList(data) {
+  return request({
+    url: '/productcenterserver/product/task/list',
+    method: 'post',
+    data
+  })
+}
+
+// 添加更新同步任务
+export function taskUpsert(data) {
+    return request({
+      url: '/productcenterserver/product/task/upsert',
+      method: 'post',
+      data
+    })
+  }
+
+// 删除同步任务
+export function delTask(data) {
+    return request({
+      url: '/productcenterserver/product/task/remove',
+      method: 'post',
+      data
+    })
+  }

+ 41 - 1
src/router/index.js

@@ -2,7 +2,7 @@
  * @Author: wenjie 1454560336@qq.com
  * @Date: 2024-03-05 11:36:07
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-08-06 15:28:49
+ * @LastEditTime: 2024-08-18 15:45:41
  * @FilePath: \admin-manage\src\router\index.js
  * @Description: 
  * 
@@ -370,6 +370,26 @@ export let constantRoutes = [{
               icon: ''
             },
           },
+          {
+            id: 1,
+            path: '/operationManage/goodsManage/productLibrary',
+            name: '/operationManage/goodsManage/productLibrary',
+            component: () => import('@/views/operationManage/goodsManage/productLibrary.vue'),
+            meta: {
+              title: '产品库',
+              icon: ''
+            },
+          },
+          {
+            id: 1,
+            path: '/operationManage/goodsManage/homeGoodsSet',
+            name: '/operationManage/goodsManage/homeGoodsSet',
+            component: () => import('@/views/operationManage/goodsManage/homeGoodsSet.vue'),
+            meta: {
+              title: '首页设置',
+              icon: ''
+            },
+          },
         ]
       },
       // {
@@ -1318,6 +1338,26 @@ export let constantRoutes = [{
                 },
               ]
       },
+      {
+        id: 1,
+        path: '/setting/synchronization',
+        name: '/setting/synchronization',
+        component: () => import('@/views/setting/synchronization.vue'),
+        meta: {
+          title: '同步管理',
+          icon: ''
+        },
+      },
+      {
+        id: 1,
+        path: '/setting/cityList',
+        name: '/setting/cityList',
+        component: () => import('@/views/setting/cityList.vue'),
+        meta: {
+          title: '城市列表',
+          icon: ''
+        },
+      },
       // {
       //   id: 0,
       //   path: '/setting/commissionManage',

+ 3 - 3
src/utils/config.js

@@ -2,14 +2,14 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2024-01-05 16:08:18
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-08-08 19:23:45
+ * @LastEditTime: 2024-08-13 10:29:33
  * @FilePath: \admin-manage\src\utils\config.js
  * @Description: 124234
  * 
  * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
  */
-const BASE_URL = 'https://api.zonelife.cn/';
-// const BASE_URL = 'https://api.dev.zonelife.cn/';
+// const BASE_URL = 'https://api.zonelife.cn/';
+const BASE_URL = 'https://api.dev.zonelife.cn/';
 // http://192.168.110.226:9002
 
 

+ 2 - 2
src/views/operationManage/couponManage/refuelCoupon.vue

@@ -9,7 +9,7 @@
       v-loading="pageLoading"
     >
      <el-form-item label="活动ID:" prop="activityXiaojuId">
-       <el-select v-model="setQuery.activityXiaojuId" size="small" class="item-width-300" placeholder="请选择活动">
+       <el-select v-model="setQuery.activityXiaojuId" :disabled="mode != 'add'" size="small" class="item-width-300" placeholder="请选择活动">
           <el-option
             v-for="item in activityOptions"
             :key="item.activityId"
@@ -140,7 +140,7 @@
         <div class="notice">例:用户在 1月1日9:00 领券,则该券的可用时间为 6月23日00:00:00 至 6月23日23:59:59(按自然天计算)</div>
        
       </el-form-item>
-      <el-form-item label="发放数量:" prop="limitNum" required>
+      <el-form-item label="发放数量:" prop="limitNum">
         <el-input
           v-model.number="setQuery.limitNum"
           type="number"

+ 0 - 894
src/views/operationManage/goodsManage/goodsDetail1.vue

@@ -1,894 +0,0 @@
-<template>
-  <div class="addGoods app-container">
-    <el-form
-      :model="setQuery"
-      ref="setQuery"
-      :rules="rules"
-      v-loading="loading"
-      label-width="150px"
-    >
-      <el-form-item label="商品图片:">
-        <Upload
-          disabled
-          width="100px"
-          height="100px"
-          type="goodsImg"
-          :imgUrl="setQuery.goodsImg"
-          @uploadEnd="uploadEnd"
-        ></Upload>
-      </el-form-item>
-      <el-form-item label="商品名称:" prop="goodsName">
-        <el-input
-          disabled
-          v-model="setQuery.goodsName"
-          class="item-width-300"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="商品类型:" prop="goodsType">
-        <el-select
-          disabled
-          v-model="setQuery.goodsType"
-          class="item-width-300"
-          placeholder="请选择商品类型"
-        >
-          <el-option
-            v-for="item in options"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          >
-          </el-option>
-        </el-select>
-      </el-form-item>
-
-      <template v-if="setQuery.goodsType == 1">
-        <el-form-item label="优惠券类型:" prop="goodsCode">
-          <el-select
-            disabled
-            v-model="setQuery.goodsCode"
-            class="item-width-300"
-            placeholder="请选择优惠券类型"
-          >
-            <el-option
-              v-for="item in options1"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-
-        <el-form-item
-          v-if="setQuery.goodsCode == 102"
-          label="立减额度:"
-          prop="discount"
-        >
-          <el-input
-            disabled
-            v-model.number="setQuery.discount"
-            :maxlength="18"
-            class="item-width-300"
-          >
-            <template slot="append">元</template>
-          </el-input>
-        </el-form-item>
-
-        <el-form-item
-          v-else-if="setQuery.goodsCode == 103"
-          label="折扣率:"
-          prop="discount"
-        >
-          <el-input
-            disabled
-            v-model.number="setQuery.discount"
-            :maxlength="18"
-            class="item-width-300"
-          >
-            <template slot="append">%</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item
-          v-else-if="setQuery.goodsCode == 104"
-          label="满减规则:"
-          prop="discount"
-        >
-          <el-input
-            disabled
-            v-model.number="setQuery.condition"
-            :maxlength="18"
-            class="item-width-150"
-          >
-          </el-input>
-          减
-          <el-input
-            disabled
-            v-model.number="setQuery.discount"
-            :maxlength="18"
-            class="item-width-100"
-          >
-          </el-input>
-        </el-form-item>
-      </template>
-
-      <!-- 研学 -->
-      <template v-else-if="setQuery.goodsType == 6">
-        <el-form-item label="研学栏目:" prop="columnId">
-          <el-cascader
-            disabled
-            class="item-width-300"
-            v-model="setQuery.columnId"
-            show-all-levels
-            :options="columnOptions"
-            :props="{ value: 'id', label: 'columnName', children: 'pages' }"
-            clearable
-          ></el-cascader>
-        </el-form-item>
-      </template>
-
-      <el-form-item label="售价:" prop="realPrice">
-        <el-input
-          disabled
-          v-model.number="setQuery.realPrice"
-          :maxlength="18"
-          class="item-width-300"
-        >
-          <template slot="append">元</template>
-        </el-input>
-      </el-form-item>
-      <el-form-item
-        label="库存:"
-        v-if="setQuery.goodsCode == 101"
-        prop="exchangeCodeDataCode"
-      >
-        <el-select
-          disabled
-          v-model="setQuery.exchangeCodeDataCode"
-          class="item-width-300"
-          placeholder="请选择库存"
-        >
-          <el-option
-            v-for="item in options2"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          >
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="库存:" v-else prop="stockCount">
-        <el-input
-          disabled
-          v-model.number="setQuery.stockCount"
-          :maxlength="18"
-          class="item-width-300"
-        >
-        </el-input>
-      </el-form-item>
-
-      <template
-        v-if="
-          setQuery.goodsCode == 102 ||
-          setQuery.goodsCode == 103 ||
-          setQuery.goodsCode == 104
-        "
-      >
-        <el-form-item disabled label="有效期限制:" prop="validType">
-          <el-radio disabled v-model="setQuery.validType" :label="1"
-            >不限制</el-radio
-          >
-          <el-radio disabled v-model="setQuery.validType" :label="2"
-            >限制</el-radio
-          >
-          <div v-show="setQuery.validType == 2">
-            <el-date-picker
-              disabled
-              v-model="date1"
-              type="datetimerange"
-              class="item-width-400"
-              value-format="yyyy-MM-dd HH:mm:ss"
-              :picker-options="pickerOptions"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-              align="right"
-            >
-            </el-date-picker>
-          </div>
-        </el-form-item>
-
-        <el-form-item disabled label="使用限制时间:" prop="shopName">
-          <div class="tabs">
-            <div
-              class="tab"
-              v-for="(item, index) in tabs"
-              :class="[setQuery.useType == index + 1 ? 'active' : '']"
-              :key="item"
-              @click="handleTab(index + 1)"
-            >
-              {{ item }}
-            </div>
-          </div>
-          <el-date-picker
-            disabled
-            v-show="setQuery.useType == 2"
-            v-model="date"
-            type="datetimerange"
-            class="item-width-400"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            align="right"
-          >
-          </el-date-picker>
-
-          <el-select
-            disabled
-            v-show="setQuery.useType == 3 || setQuery.useType == 4"
-            v-model="setQuery.day"
-            clearable
-            filterable
-            class="item-width-400"
-            placeholder="请选择"
-          >
-            <el-option
-              v-for="item in nums"
-              :key="item"
-              :label="
-                (nums == 7 ? '每周' : '每月') + item + (nums == 31 ? '号' : '')
-              "
-              :value="item"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="过期自动退:" prop="advent">
-          <el-radio disabled v-model="setQuery.advent" :label="1">是</el-radio>
-          <el-radio disabled v-model="setQuery.advent" :label="2">否</el-radio>
-        </el-form-item>
-
-        <el-form-item label="支付抵扣限制:" prop="useMethod">
-          <el-radio disabled v-model="setQuery.useMethod" :label="1"
-            >线上和线下</el-radio
-          >
-          <el-radio disabled v-model="setQuery.useMethod" :label="2"
-            >仅线上</el-radio
-          >
-          <el-radio disabled v-model="setQuery.useMethod" :label="3"
-            >仅线下</el-radio
-          >
-        </el-form-item>
-
-        <el-form-item disabled label="优惠券适用商品范围:" prop="useRangeType">
-          <el-radio disabled v-model="setQuery.useRangeType" :label="1"
-            >全部商品</el-radio
-          >
-          <el-radio disabled v-model="setQuery.useRangeType" :label="2"
-            >指定商品</el-radio
-          >
-        </el-form-item>
-
-        <template v-if="setQuery.useRangeType == 2 && setQuery.useMethod != 3">
-          <el-table
-            :data="tableData"
-            tooltip-effect="dark"
-            border
-            v-loading="tableLoading"
-            style="width: 100%"
-          >
-            <el-table-column
-              align="center"
-              label="商品名称"
-              prop="goodsName"
-              show-overflow-tooltip
-            >
-            </el-table-column>
-            <el-table-column
-              prop="goodsType"
-              align="center"
-              label="类型"
-              show-overflow-tooltip
-            >
-              <template slot-scope="scope">
-                {{ scope.row.goodsType == 1 ? "优惠券" : "研学" }}
-              </template>
-            </el-table-column>
-            <el-table-column
-              prop="discountContent"
-              align="center"
-              label="所属店铺"
-              show-overflow-tooltip
-            >
-            </el-table-column>
-            <el-table-column prop="address" align="center" label="操作">
-              <template slot-scope="scope">
-                <el-button type="text" size="small" @click="">查看</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-          <div class="page-box">
-            <el-pagination
-              @size-change="handleSizeChange"
-              @current-change="handleCurrentChange"
-              background
-              :current-page="query.currentPage"
-              :page-sizes="[10]"
-              :page-size="query.pageSize"
-              layout="total, sizes, prev, pager, next, jumper"
-              :total="total"
-            >
-            </el-pagination>
-          </div>
-        </template>
-      </template>
-
-      <!-- 研学 -->
-      <template v-if="setQuery.goodsType == 6">
-        <el-form-item label="使用限制时间:" prop="shopName">
-          <div class="tabs">
-            <div
-              class="tab"
-              v-for="(item, index) in tabs"
-              :class="[setQuery.useType == index + 1 ? 'active' : '']"
-              :key="item"
-              @click="handleTab(index + 1)"
-            >
-              {{ item }}
-            </div>
-          </div>
-          <el-date-picker
-            v-show="setQuery.useType == 2"
-            v-model="date"
-            type="datetimerange"
-            class="item-width-400"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            align="right"
-          >
-          </el-date-picker>
-
-          <el-select
-            v-show="setQuery.useType == 3 || setQuery.useType == 4"
-            v-model="setQuery.day"
-            clearable
-            filterable
-            class="item-width-400"
-            placeholder="请选择"
-          >
-            <el-option
-              v-for="item in nums"
-              :key="item"
-              :label="
-                (nums == 7 ? '每周' : '每月') + item + (nums == 31 ? '号' : '')
-              "
-              :value="item"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="研学商品顶部图:" prop="studyItem">
-          <div class="notice">需真实展示店内环境情况 查看示例图</div>
-          <div class="notice">
-            (图片支持jpg, png, bmp格式,建议上传100kb~500kb大小文件)
-          </div>
-          <Upload
-            type="studyItem"
-            id="studyItem"
-            width="300px"
-            height="200px"
-            uploadType="GOODS_INFO"
-            :imgUrl="setQuery.studyItem"
-            @uploadEnd="uploadEnd"
-          ></Upload>
-        </el-form-item>
-      </template>
-
-      <el-form-item label="商品详情:" prop="goodsDescribe">
-        <div style="border: 1px solid #E4E7ED; width: 500px;border-radius:4px;padding:0 15px;min-height:60px;" v-html="setQuery.goodsDescribe">
-        </div>
-      </el-form-item>
-
-      <el-form-item label="商品购买设置:">
-        <el-table
-          :data="setQuery.details"
-          tooltip-effect="dark"
-          border
-          style="width: 600px"
-        >
-          <el-table-column
-            align="center"
-            label="人员类型"
-            prop="setMealId"
-            show-overflow-tooltip
-          >
-            <template slot-scope="scope">
-              {{ scope.row.setMealId | filterMeal(that) }}
-            </template>
-          </el-table-column>
-          <el-table-column
-            prop="shopName"
-            align="center"
-            label="购买设置"
-            show-overflow-tooltip
-          >
-            <template slot-scope="scope">
-              <el-checkbox
-                :true-label="2"
-                :false-label="1"
-                v-model="scope.row.buySet"
-                >限制购买</el-checkbox
-              >
-            </template>
-          </el-table-column>
-          <el-table-column
-            prop="shopName"
-            align="center"
-            label="限购数量"
-            show-overflow-tooltip
-          >
-            <template slot-scope="scope">
-              <el-input
-                v-model="scope.row.buyNum"
-                :maxlength="8"
-                size="small"
-                class="item-width-100"
-              >
-              </el-input>
-            </template>
-          </el-table-column>
-          <el-table-column
-            prop="shopName"
-            align="center"
-            label="优惠价格"
-            show-overflow-tooltip
-          >
-            <template slot-scope="scope">
-              <el-input
-                v-model="scope.row.buyPrice"
-                :maxlength="8"
-                size="small"
-                class="item-width-100"
-              >
-              </el-input>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form-item>
-        <el-form-item label="分账规则:" prop="shareId">
-        <el-select
-          v-model="setQuery.shareId"
-          class="item-width-300"
-          placeholder="请选择分账规则"
-        >
-          <el-option
-            v-for="item in ruleOptions"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          >
-          </el-option>
-        </el-select>
-      </el-form-item>
-
-    </el-form>
-
-    <div class="btn-group" v-if="mode != 'detail'">
-      <el-button>取 消</el-button>
-      <el-button type="primary" :loading="loading" @click="save"
-        >确 定</el-button
-      >
-    </div>
-  </div>
-</template>
-
-<script>
-import {
-  allCouponByShop,
-  get,
-  getGoodsCoupon,
-  search,
-  goodsCouponSet,
-  addOrUpdate
-} from "@/api/goods";
-import { getSetMealNameAndId } from "@/api/common";
-import { getData } from "@/api/study";
-import {getRuleList } from "@/api/rule";
-
-import Upload from "@/components/Upload";
-export default {
-  components: {
-    Upload,
-  },
-  data() {
-    return {
-      mode: "add",
-      that: this,
-      nums: 7,
-      value2: "",
-      tabs: ["不限制", "自定义时间", "每周", "每月"],
-      tab: 0,
-      date: "",
-      date1: "",
-      loading: false,
-      tableLoading: false,
-      tableData: [],
-      imgList: [],
-      ruleOptions:[],
-      query: {
-        shopId: localStorage.getItem("epid"),
-        currentPage: 1,
-        pageSize: 10,
-      },
-      total: 0,
-      setQuery: {
-        advent: 1,
-        condition: 0,
-        day: 0,
-        discount: 0,
-        exchangeCodeDataCode: "",
-        goodsCode: "",
-        goodsDescribe: "",
-        goodsId: "",
-        goodsImg: "",
-        goodsName: "",
-        goodsType: "",
-        goodsWeight: 0,
-        realPrice: 0,
-        shopId: localStorage.getItem("epid"),
-        stockCount: 0,
-        useEndTime: "",
-        useMethod: 1,
-        useRange: "",
-        useRangeType: 1,
-        useStartTime: "",
-        useType: 1,
-        validEndTime: "",
-        validStartTime: "",
-        validType: 1,
-      },
-      rules: {
-        condition: [
-          { required: true, message: "请输入满足条件", trigger: "blur" },
-        ],
-        discount: [
-          { required: true, message: "请输入	优惠值", trigger: "blur" },
-        ],
-        goodsCode: [
-          { required: true, message: "请选择优惠券类型", trigger: "change" },
-        ],
-        // goodsDescribe: [{ required: true, message: "请输入", trigger: "blur" }],
-        goodsName: [
-          { required: true, message: "请输入商品名称", trigger: "blur" },
-        ],
-        goodsType: [
-          { required: true, message: "请选择商品类型", trigger: "change" },
-        ],
-        realPrice: [{ required: true, message: "请输入售价", trigger: "blur" }],
-        stockCount: [
-          { required: true, message: "请输入库存", trigger: "blur" },
-        ],
-        shareId: [{ required: true, message: "请选择分账规则", trigger: "change" }],
-        // goodsType: [{ required: true, message: "请选择商品类型", trigger: "change" }],
-        // goodsType: [{ required: true, message: "请选择商品类型", trigger: "change" }],
-        // goodsType: [{ required: true, message: "请选择商品类型", trigger: "change" }],
-      },
-      options: [
-        {
-          value: "1",
-          label: "优惠券",
-        },
-        {
-          value: "6",
-          label: "研学",
-        },
-      ],
-      options1: [
-        // {
-        //   value: "102",
-        //   label: "立减券",
-        // },
-        // {
-        //   value: "103",
-        //   label: "折扣券",
-        // },
-        // {
-        //   value: "104",
-        //   label: "满减券",
-        // },
-        // {
-        //   value: "101",
-        //   label: "兑换码",
-        // },
-      ],
-      options2: [],
-      mealOption: [],
-      pickerOptions: {
-        shortcuts: [
-          {
-            text: "最近一周",
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 6);
-              picker.$emit("pick", [start, end]);
-            },
-          },
-          {
-            text: "最近一个月",
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
-              picker.$emit("pick", [start, end]);
-            },
-          },
-          {
-            text: "最近三个月",
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
-              picker.$emit("pick", [start, end]);
-            },
-          },
-        ],
-      },
-    };
-  },
-  watch: {
-    // 使用限制时间
-    date(val) {
-      if (val) {
-        this.setQuery.useStartTime = val[0];
-        this.setQuery.useEndTime = val[1];
-      } else {
-        this.setQuery.useStartTime = "";
-        this.setQuery.useEndTime = "";
-      }
-    },
-    // 有效期时间
-    date1(val) {
-      if (val) {
-        this.setQuery.validStartTime = val[0];
-        this.setQuery.validEndTime = val[1];
-      } else {
-        this.setQuery.validStartTime = "";
-        this.setQuery.validEndTime = "";
-      }
-    },
-  },
-  filters: {
-    filterMeal: function (val, that) {
-      let msg;
-      that.mealOption.map((item) => {
-        if (val == item.value) {
-          msg = item.label;
-        } else if (val === 0) {
-          msg = "无套餐";
-        }
-      });
-      return msg;
-    },
-  },
-  methods: {
-    // 获取研学栏目
-    getData() {
-      getData().then((res) => {
-        if (res.state == "Success") {
-          this.columnOptions = res.content;
-        }
-      });
-    },
-    uploadEnd(val) {
-      this.setQuery[val.type] = val.url;
-    },
-    handleSizeChange(val) {
-      this.query.currentPage = 1;
-      this.query.pageSize = val;
-      this.allCouponByShop();
-    },
-    handleCurrentChange(val) {
-      this.query.currentPage = val;
-      this.allCouponByShop();
-    },
-    handleTab(val) {
-      if (this.mode == "detail") return;
-      this.setQuery.useType = val;
-      this.setQuery.day = "";
-      val == 3 ? (this.nums = 7) : (this.nums = 31);
-    },
-    save() {
-      this.$refs.setQuery.validate((v) => {
-        if (v) {
-          this.setQuery.goodsId = this.$route.query.id
-          addOrUpdate(this.setQuery).then((res) => {
-            this.loading = false;
-            if (res.state == "Success") {
-              this.goodsCouponSet();
-            }
-          })
-        }
-      });
-    },
-    // 获取兑换码库存
-    getCode() {
-      search({ currentPage: 1, pageSize: 999 }).then((res) => {
-        if (res.state == "Success") {
-          res.content.records.map((item) => {
-            this.options2.push({
-              label: item.exchangeCodeDataName + `(${item.totalNum})`,
-              value: item.exchangeCodeDataId,
-            });
-          });
-        }
-      });
-    },
-    // 获取优惠券类型
-    getGoodsCoupon() {
-      getGoodsCoupon().then((res) => {
-        if (res.state == "Success") {
-          for (const key in res.content) {
-            if (Object.hasOwnProperty.call(res.content, key)) {
-              this.options1.push({
-                label: res.content[key],
-                value: key,
-              });
-            }
-          }
-        }
-      });
-    },
-    // 所有商品
-    allCouponByShop() {
-      this.tableLoading = true;
-      allCouponByShop(this.query).then((res) => {
-        this.tableLoading = false;
-        if (res.state == "Success") {
-          this.tableData = res.content;
-        }
-      });
-    },
-    // 商品详情
-    get() {
-      this.loading = true;
-      get({
-        goodsId: this.$route.query.id,
-        shopId: this.$route.query.shopId,
-      }).then((res) => {
-        this.loading = false;
-        if (res.state == "Success") {
-          this.setQuery = res.content;
-          this.setQuery.shopId = localStorage.getItem("epid");
-          // 使用时间为自定义时
-          if (this.setQuery.useType == 2) {
-            this.date = [this.setQuery.useStartTime, this.setQuery.useEndTime];
-          }
-          // 限制有效期
-          if (this.setQuery.validType == 2) {
-            this.date1 = [
-              this.setQuery.validStartTime,
-              this.setQuery.validEndTime,
-            ];
-          }
-          this.setQuery.exchangeCodeDataCode = this.setQuery.exchangeCodeDataId;
-          // 初始化购买设置
-          if (!this.setQuery.details) {
-            this.setQuery.details = [];
-            this.mealOption.map((item) => {
-              this.setQuery.details.push({
-                buyNum: 0,
-                buyPrice: this.setQuery.realPrice,
-                buySet: 2,
-                setMealId: item.value,
-              });
-            });
-          }
-        }
-      });
-    },
-    getSetMealNameAndId() {
-      return new Promise((resolve, reject) => {
-        getSetMealNameAndId().then((res) => {
-          if (res.state == "Success") {
-            for (const key in res.content) {
-              if (Object.hasOwnProperty.call(res.content, key)) {
-                this.mealOption.push({
-                  label: res.content[key],
-                  value: key,
-                });
-              }
-            }
-            resolve();
-          }
-        });
-      });
-    },
-    // 商品购买配置
-    goodsCouponSet() {
-      this.loading = true;
-      goodsCouponSet({
-        goodsCouponSets: this.setQuery.details,
-        goodsId: this.$route.query.id,
-        shopId: this.$route.query.shopId,
-      }).then((res) => {
-        this.loading = true;
-        if (res.state == "Success") {
-          this.$notify({
-            title: "成功",
-            message: "操作成功",
-            type: "success",
-          });
-          this.$router.push("/operationManage/goodsManage/index");
-        }
-      });
-    },
-    // 规则
-    getRuleList() {
-      getRuleList({currentPage:1,pageSize:999}).then((res) => {
-        if (res.state == "Success") {
-          res.content.records.map(item=>{
-            this.ruleOptions.push({
-              label:item.shareRule,
-              value:item.id
-            })
-          })
-        }
-      });
-    },
-  },
-  created() {
-    this.mode = this.$route.query.mode || "add";
-    this.getCode();
-    this.getData();
-    this.getGoodsCoupon();
-    this.getRuleList()
-    this.getSetMealNameAndId().then(() => {
-      if (this.$route.query.id) {
-        this.get();
-      }
-    });
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-@import "@/styles/element-variables";
-.addGoods {
-  padding-bottom: 40px;
-  .btn-group {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-  }
-  .tabs {
-    display: flex;
-    border-radius: 4px;
-    margin-bottom: 10px;
-    cursor: pointer;
-    .tab {
-      width: 90px;
-      height: 30px;
-      line-height: 30px;
-      text-align: center;
-      border: 1px solid #f1f1f1;
-    }
-  }
-  .active {
-    color: $--color-primary;
-    border: 1px solid $--color-primary !important;
-    background: #d1d3fa;
-    border-radius: 4px;
-  }
-
-  .notice {
-    font-size: 12px;
-    color: #ccc;
-  }
-}
-</style>

+ 660 - 0
src/views/operationManage/goodsManage/homeGoodsSet.vue

@@ -0,0 +1,660 @@
+
+<template>
+  <div class="homeGoodsSet app-container">
+    <div class="tab-list">
+      <div class="tab" :class="[query.productType == ''?'active':'']" @click="handleTab('')">全部</div>
+      <div class="tab" :class="[query.productType == item.value?'active':'']" v-for="item in tabList" :key="item.value" @click="handleTab(item.value)">{{item.label}}</div>
+    </div>
+     <div class="search">
+      <div>
+
+        <el-input
+          v-model="query.key"
+          size="small"
+          placeholder="请输入产品名称"
+          clearable
+          class="item-width-200 "
+        ></el-input>
+        <el-button
+        class="ml10"
+        type="primary"
+        size="small"
+        icon="el-icon-search"
+        @click="handleSearch"
+      >
+        搜索
+      </el-button>
+      </div>
+       <!-- <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+        >添加</el-button
+      > -->
+       <div>
+        <el-button class="add-btn" size="small" @click="handleSetting"
+          >产品配置</el-button
+        >
+        <el-button class="add-btn" size="small" @click="handleList"
+          >黑名单</el-button
+        >
+      </div>
+    </div>
+
+    <!-- <div class="search">
+      <div>
+          <el-button class="add-btn" type="primary" size="small" @click="handleSetting"
+          >批量加入黑名单</el-button
+        >
+      </div>
+
+      <div>
+        <el-button class="add-btn" size="small" @click="handleSetting"
+          >产品配置</el-button
+        >
+        <el-button class="add-btn" size="small" @click="handleList"
+          >黑名单</el-button
+        >
+      </div>
+    </div> -->
+
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+     <el-table-column
+      align="center"
+      type="selection"
+      width="55">
+    </el-table-column>
+     <el-table-column
+        align="center"
+        label="产品信息"
+        prop="产品信息"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        <el-imageproductType
+        v-if="scope.row.cover.length"
+        :src="scope.row.cover[0]"
+          class="small-img"
+          style="width: 40px; height: 40px;"
+          fit="cover"
+          >
+          </el-imageproductType>
+          <span class="ml10">{{scope.row.title}}</span>
+      </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="价格"
+        prop="salePrice"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="销量"
+        prop="salesCount"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="区域"
+        prop="regionCode"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="产品类型"
+        prop="productType"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        {{productType[scope.row.productType]||'暂无分类'}}
+      </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="排序"
+        prop="top"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+        <span>{{scope.row.top}}</span> <i class="el-icon-edit"  @click="handleTop(scope.row)"></i>
+      </template>
+      </el-table-column>
+
+      <el-table-column align="center" label="操作">
+        <template slot-scope="scope">
+          <!-- <el-button type="text" size="small" @click="handleEdit(scope.row)"
+            >编辑</el-button
+          > -->
+          <el-button type="text" size="small" @click="handleDel(scope.row.pid,true)"
+            >加入黑名单</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-box">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+        :current-page="query.page"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="query.size"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+
+      <el-dialog title="黑名单" width="80%" :visible.sync="dialogFormVisible3">
+        <el-table
+        :data="tableData1"
+        tooltip-effect="dark"
+        border
+        v-loading="loading"
+        style="width: 100%"
+      >
+      <el-table-column
+        align="center"
+        type="selection"
+        width="55">
+      </el-table-column>
+      <el-table-column
+          align="center"
+          label="产品信息"
+          prop="产品信息"
+          show-overflow-tooltip
+        >
+        <template slot-scope="scope">
+          <el-imageproductType
+          v-if="scope.row.cover.length"
+          :src="scope.row.cover[0]"
+            class="small-img"
+            style="width: 40px; height: 40px;"
+            fit="cover"
+            >
+            </el-imageproductType>
+            <span class="ml10">{{scope.row.title}}</span>
+        </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="价格"
+          prop="salePrice"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="销量"
+          prop="salesCount"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="区域"
+          prop="regionCode"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="产品类型"
+          prop="productType"
+          show-overflow-tooltip
+        >
+        <template slot-scope="scope">
+          {{productType[scope.row.productType]||'暂无分类'}}
+        </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="排序"
+          prop="top"
+          show-overflow-tooltip
+        >
+        <template slot-scope="scope">
+          <span>{{scope.row.top}}</span> <i class="el-icon-edit"  @click="handleTop(scope.row)"></i>
+        </template>
+        </el-table-column>
+
+        <el-table-column align="center" label="操作">
+          <template slot-scope="scope">
+            <!-- <el-button type="text" size="small" @click="handleEdit(scope.row)"
+              >编辑</el-button
+            > -->
+            <el-button type="text" size="small" @click="handleDel(scope.row.pid,false)"
+              >移除黑名单</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="page-box">
+        <el-pagination
+          @size-change="handleSizeChange1"
+          @current-change="handleCurrentChange1"
+          background
+          :current-page="query1.page"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="query1.size"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total1"
+        >
+        </el-pagination>
+      </div>
+  
+    </el-dialog>
+
+<el-dialog title="产品配置" width="550px" :visible.sync="dialogFormVisible1">
+    <el-form label-width="130px" :model="setQuery1"
+      ref="setQuery1"
+      :rules="rules1">
+        <el-form-item label="产品类型"  prop="type">
+
+            <el-select v-model="setQuery1.type" multiple class="item-width-300" 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>
+  <div slot="footer" class="dialog-footer">
+    <el-button @click="dialogFormVisible1 = false">取 消</el-button>
+    <el-button type="primary" :loading="btnLoading1" @click="save1">确 定</el-button>
+  </div>
+</el-dialog>
+
+    <el-dialog title="排序" width="550px" :visible.sync="dialogFormVisible2">
+        <el-form label-width="130px" :model="topFrom"
+          ref="topFrom"
+          :rules="rules2">
+            <el-form-item label="产品类型"  prop="top">
+               <el-input
+              v-model.number="topFrom.top"
+              class="item-width-300"
+              ></el-input>
+            </el-form-item>
+        </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible2 = false">取 消</el-button>
+        <el-button type="primary" :loading="btnLoading2" @click="save2">确 定</el-button>
+      </div>
+    </el-dialog>
+
+
+  </div>
+</template>
+  
+  <script>
+import { debounce } from "@/utils/index";
+import { homeGoodsList,setHidden,listShowTypes,listAllTypes,setShowTypes,setTop,listHidden } from "@/api/goods";
+export default {
+  name: "marketing",
+  data() {
+    return {
+      date:'',
+      title:'',
+      tableData: [],
+      tableData1: [],
+      loading: false,
+      btnLoading: false,
+      dialogFormVisible: false,
+      btnLoading1: false,
+      dialogFormVisible1: false,
+      btnLoading2: false,
+      dialogFormVisible2: false,
+      dialogFormVisible3: false,
+      query: {
+        distance:100000000,
+        latitude:30.57447,
+        longitude:103.92377,
+        productType:'',
+        page: 1,
+        size: 10,
+      },
+      query1: {
+        page: 1,
+        size: 10,
+      },
+      total: 0,
+      total1: 0,
+      setQuery1:{
+        type:''
+      },
+      options:[],
+      setQuery:{
+        "activityContent": "",
+        "activityId": "",
+        "activityMoney": 0,
+        "endTime": "",
+        "id": 0,
+        "startTime": ""
+      },
+      topFrom:{
+        pid:"",
+        top:0
+      },
+      tabList:[],
+      rules:{
+         activityId: [{ required: true, message: "请输入活动ID", trigger: "blur" }],
+         activityMoney: [{ required: true, message: "请输入活动金额", trigger: "blur" }],
+         startTime: [{ required: true, message: "请选择活动时间", trigger: "change" }],
+      },
+      rules1:{
+         type: [{ required: true, message: "请选择产品类型", trigger: "change" }],
+      },
+      rules2:{
+         top: [{ required: true, message: "请输入排序", trigger: "blur" }],
+      },
+      productType:{
+        'Web'
+				    :'链接',
+				'Recharge'
+				    :'充值类',
+				'Scenic'
+				    :'景区',
+				'ScenicTicket'
+				    :'景区门票',
+				'StudyTour'
+				    :'研学旅游',
+				'Hotel'
+				    :'酒店',
+				'HotelRoom'
+				    :'酒店房型',
+				'Cinema'
+				    :'电影院',
+				'MovieTicket'
+				    :'电影票',
+				'Restaurant'
+				    :'餐厅',
+				'RestaurantFood'
+				    :'餐厅美食',
+				'CarMaintain'
+				    :'汽车保养门店',
+				'CarMaintainGoods'
+				    :'汽车保养商品',
+				'CarMaintainService'
+				    :'汽车保养服务',
+				'Shop'
+				    :'店铺',
+				'ShopGoods'
+				    :'店铺商品',
+				'ShopService'
+				    :'店铺服务',
+				'Coupon'
+				    :'优惠券',
+				'PetrolStation'
+				    :'加油站',
+			
+      }
+    };
+  },
+  watch: {
+
+     date(val){
+      if(val){
+        this.setQuery.startTime = val[0]
+        this.setQuery.endTime = val[1]
+      }else{
+        this.setQuery.startTime = ''
+        this.setQuery.endTime = ''
+      }
+    },
+  },
+  methods: {
+    handleList(){
+      this.dialogFormVisible3 = true
+      this.query1.page = 1
+      this.listHidden()
+    },
+    handleTab(val){
+      this.query.productType = val
+      this.handleSearch()
+    },
+    handleSetting(){
+      this.dialogFormVisible1 = true
+      
+    },
+    handleSearch(){
+        this.query.page = 1;
+        this.getList();
+    },
+    handleEdit(row){
+        this.title = '编辑'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "activityContent": row.activityContent,
+        "activityId": row.activityId,
+        "activityMoney": row.activityMoney,
+        "endTime": row.endTime,
+        "startTime": row.startTime,
+        "id":row.id
+      }
+      this.date = [row.startTime, row.endTime]
+    },
+    handleAdd() {
+        this.title = '添加'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "activityContent": "",
+        "activityId": "",
+        "activityMoney": 0,
+        "endTime": "",
+        "startTime": ""
+      }
+      this.data = []
+    },
+
+    handleTop(row){
+      this.topFrom.pid = row.pid
+      this.dialogFormVisible2 = true
+      this.topFrom.top = row.top
+    },
+    // 删除
+     handleDel(id,hidden) {
+      let str = ''
+      if(hidden){
+        str = '拉黑'
+      }else{
+        str = '取消拉黑'
+      }
+       this.$confirm(`此操作将${str}该数据, 是否继续?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          setHidden({pids:[id],hidden}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: '成功',
+                message: '操作成功',
+                type: 'success'
+              });
+              if(hidden){
+                this.getList()
+
+              }else{
+                this.listHidden()
+              }
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.page = 1;
+      this.query.size = val;
+      this.getList();
+    },
+    handleCurrentChange(val) {
+      this.query.page = val;
+      this.getList();
+    },
+     handleSizeChange1(val) {
+      this.query1.page = 1;
+      this.query1.size = val;
+      this.listHidden();
+    },
+    handleCurrentChange1(val) {
+      this.query1.page = val;
+      this.listHidden();
+    },
+
+    search() {
+      this.query.page = 1;
+      this.getList();
+    },
+    getList() {
+      this.loading = true
+      let query = JSON.parse(JSON.stringify(this.query))
+      query.page-=1
+      homeGoodsList(query).then((res) => {
+        this.loading = false
+        if (res.state == "Success") {
+          this.tableData = res.content.content;
+          this.total = res.content.totalElements
+        }
+      });
+    },
+    listHidden(){
+       let query = JSON.parse(JSON.stringify(this.query1))
+      query.page-=1
+      listHidden(query).then(res=>{
+        if (res.state == "Success") {
+          this.tableData1 = res.content.content;
+          this.total1 = res.content.totalElements
+        }
+      })
+    },
+    listAllTypes(){
+       listAllTypes().then((res) => {
+        if (res.state == "Success") {
+          res.content.map(item=>{
+            this.options.push({
+              value:item.productType,
+              label:item.productTypeDesc
+            })
+          })
+        }
+      });
+    },
+    listShowTypes(){
+      listShowTypes().then(res=>{
+        if (res.state == "Success") {
+          this.tabList = []
+          res.content.map(item=>{
+            this.tabList.push({
+              value:item.productType,
+              label:item.productTypeDesc
+            })
+          })
+          this.setQuery1.type = res.content.map(item=>item.productType)
+        }
+      })
+    },
+    save(){
+        this.$refs.setQuery.validate((v) => {
+        if (v) {
+          this.btnLoading = true
+          addOrUpdateActivityXiaoju(this.setQuery).then(res=>{
+            this.btnLoading = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.query.page = 1
+                this.getList();
+
+            }
+          })
+              
+        }
+      });
+    },
+    save1(){
+        this.$refs.setQuery1.validate((v) => {
+        if (v) {
+          this.btnLoading1 = true
+          setShowTypes(this.setQuery1.type).then(res=>{
+            this.btnLoading1 = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible1 = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.listShowTypes();
+                this.handleSearch()
+
+            }
+          })
+              
+        }
+      });
+    },
+    save2(){
+        this.$refs.topFrom.validate((v) => {
+        if (v) {
+          this.btnLoading2 = true
+          setTop(this.topFrom).then(res=>{
+            this.btnLoading2 = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible2 = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.getList();
+
+            }
+          })
+              
+        }
+      });
+    },
+  
+  },
+  created() {
+    this.getList();
+    this.listAllTypes()
+    this.listShowTypes()
+  },
+};
+</script>
+  
+<style lang="scss" >
+.homeGoodsSet {
+  .tab-list{
+    display: flex;
+    align-items: center;
+    padding-bottom: 20px;
+    .tab{
+      font-size: 16px;
+      color: #222;
+      cursor: pointer;
+    }
+    .tab+.tab{
+      margin-left: 10px;
+    }
+    .tab.active{
+      color: #2836fe;
+      font-weight: bold;
+    }
+  }
+}
+</style>
+  

+ 518 - 0
src/views/operationManage/goodsManage/productLibrary.vue

@@ -0,0 +1,518 @@
+
+<template>
+  <div class="cityList app-container">
+     <div class="search">
+      <div>
+
+        <el-input
+          v-model="query.title"
+          size="small"
+          placeholder="请输入产品名称"
+          clearable
+          class="item-width-200 "
+        ></el-input>
+        <el-button
+        class="ml10"
+        type="primary"
+        size="small"
+        icon="el-icon-search"
+        @click="handleSearch"
+      >
+        搜索
+      </el-button>
+      </div>
+       <!-- <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+        >添加</el-button
+      > -->
+    
+    </div>
+
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+     <el-table-column
+      align="center"
+      type="selection"
+      width="55">
+    </el-table-column>
+     <el-table-column
+        align="center"
+        label="产品信息"
+        prop="产品信息"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        <el-imageproductType
+        v-if="scope.row.cover.length"
+        :src="scope.row.cover[0]"
+          class="small-img"
+          style="width: 40px; height: 40px;"
+          fit="cover"
+          >
+          </el-imageproductType>
+          <span class="ml10">{{scope.row.title}}</span>
+      </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="价格"
+        prop="salePrice"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="销量"
+        prop="salesCount"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="区域"
+        prop="regionCode"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="产品类型"
+        prop="productType"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        {{productType[scope.row.productType]||'暂无分类'}}
+      </template>
+      </el-table-column>
+
+      <el-table-column align="center" label="操作">
+        <template slot-scope="scope">
+          <!-- <el-button type="text" size="small" @click="handleEdit(scope.row)"
+            >编辑</el-button
+          > -->
+          <el-button type="text" size="small" @click="handleDel(scope.row.pid)"
+            >加入黑名单</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-box">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+        :current-page="query.page"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="query.size"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+
+    <el-dialog :title="title" width="550px" :visible.sync="dialogFormVisible">
+    <el-form label-width="130px" :model="setQuery"
+      ref="setQuery"
+      :rules="rules">
+        <el-form-item label="活动ID"  prop="activityId">
+            <el-input
+            v-model="setQuery.activityId"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+         <el-form-item label="活动金额"  prop="activityMoney">
+            <el-input
+            v-model.number="setQuery.activityMoney"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+         <el-form-item label="活动有效期"  prop="startTime">
+            <el-date-picker
+            v-model="date"
+            size="small"
+            class="item-width-350 ml10"
+            value-format="yyyy-MM-dd hh:mm:ss"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+            </el-date-picker>
+        </el-form-item>
+         <el-form-item label="活动内容"  prop="activityContent">
+            <el-input
+            v-model.number="setQuery.activityContent"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+    </el-form>
+  <div slot="footer" class="dialog-footer">
+    <el-button @click="dialogFormVisible = false">取 消</el-button>
+    <el-button type="primary" :loading="btnLoading" @click="save">确 定</el-button>
+  </div>
+</el-dialog>
+
+<el-dialog title="产品配置" width="550px" :visible.sync="dialogFormVisible1">
+    <el-form label-width="130px" :model="setQuery1"
+      ref="setQuery1"
+      :rules="rules1">
+        <el-form-item label="产品类型"  prop="type">
+
+            <el-select v-model="setQuery1.type" multiple class="item-width-300" 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>
+  <div slot="footer" class="dialog-footer">
+    <el-button @click="dialogFormVisible1 = false">取 消</el-button>
+    <el-button type="primary" :loading="btnLoading1" @click="save1">确 定</el-button>
+  </div>
+</el-dialog>
+
+    <el-dialog title="排序" width="550px" :visible.sync="dialogFormVisible2">
+        <el-form label-width="130px" :model="topFrom"
+          ref="topFrom"
+          :rules="rules2">
+            <el-form-item label="产品类型"  prop="top">
+               <el-input
+              v-model.number="topFrom.top"
+              class="item-width-300"
+              ></el-input>
+            </el-form-item>
+        </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible2 = false">取 消</el-button>
+        <el-button type="primary" :loading="btnLoading2" @click="save2">确 定</el-button>
+      </div>
+    </el-dialog>
+
+
+  </div>
+</template>
+  
+  <script>
+import { debounce } from "@/utils/index";
+import { goodsStoreList,setHidden,listShowTypes,listAllTypes,setShowTypes,setTop } from "@/api/goods";
+export default {
+  name: "marketing",
+  data() {
+    return {
+      date:'',
+      title:'',
+      tableData: [],
+      loading: false,
+      btnLoading: false,
+      dialogFormVisible: false,
+      btnLoading1: false,
+      dialogFormVisible1: false,
+      btnLoading2: false,
+      dialogFormVisible2: false,
+      query: {
+        regionCode:'520101',
+        title:'',
+        page: 1,
+        size: 10,
+      },
+      total: 0,
+      setQuery1:{
+        type:''
+      },
+      options:[],
+      setQuery:{
+        "activityContent": "",
+        "activityId": "",
+        "activityMoney": 0,
+        "endTime": "",
+        "id": 0,
+        "startTime": ""
+      },
+      topFrom:{
+        pid:"",
+        top:0
+      },
+      tabList:[],
+      rules:{
+         activityId: [{ required: true, message: "请输入活动ID", trigger: "blur" }],
+         activityMoney: [{ required: true, message: "请输入活动金额", trigger: "blur" }],
+         startTime: [{ required: true, message: "请选择活动时间", trigger: "change" }],
+      },
+      rules1:{
+         type: [{ required: true, message: "请选择产品类型", trigger: "change" }],
+      },
+      rules2:{
+         top: [{ required: true, message: "请输入排序", trigger: "blur" }],
+      },
+      productType:{
+        'Web'
+				    :'链接',
+				'Recharge'
+				    :'充值类',
+				'Scenic'
+				    :'景区',
+				'ScenicTicket'
+				    :'景区门票',
+				'StudyTour'
+				    :'研学旅游',
+				'Hotel'
+				    :'酒店',
+				'HotelRoom'
+				    :'酒店房型',
+				'Cinema'
+				    :'电影院',
+				'MovieTicket'
+				    :'电影票',
+				'Restaurant'
+				    :'餐厅',
+				'RestaurantFood'
+				    :'餐厅美食',
+				'CarMaintain'
+				    :'汽车保养门店',
+				'CarMaintainGoods'
+				    :'汽车保养商品',
+				'CarMaintainService'
+				    :'汽车保养服务',
+				'Shop'
+				    :'店铺',
+				'ShopGoods'
+				    :'店铺商品',
+				'ShopService'
+				    :'店铺服务',
+				'Coupon'
+				    :'优惠券',
+				'PetrolStation'
+				    :'加油站',
+			
+      }
+    };
+  },
+  watch: {
+
+     date(val){
+      if(val){
+        this.setQuery.startTime = val[0]
+        this.setQuery.endTime = val[1]
+      }else{
+        this.setQuery.startTime = ''
+        this.setQuery.endTime = ''
+      }
+    },
+  },
+  methods: {
+    handleTab(val){
+      this.query.productType = val
+      this.handleSearch()
+    },
+    handleSetting(){
+      this.dialogFormVisible1 = true
+      
+    },
+    handleSearch(){
+        this.query.page = 1;
+        this.getList();
+    },
+    handleEdit(row){
+        this.title = '编辑'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "activityContent": row.activityContent,
+        "activityId": row.activityId,
+        "activityMoney": row.activityMoney,
+        "endTime": row.endTime,
+        "startTime": row.startTime,
+        "id":row.id
+      }
+      this.date = [row.startTime, row.endTime]
+    },
+    handleAdd() {
+        this.title = '添加'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "activityContent": "",
+        "activityId": "",
+        "activityMoney": 0,
+        "endTime": "",
+        "startTime": ""
+      }
+      this.data = []
+    },
+
+    handleTop(row){
+      this.topFrom.pid = row.pid
+      this.dialogFormVisible2 = true
+      this.topFrom.top = row.top
+    },
+    // 删除
+     handleDel(id) {
+       this.$confirm(`此操作将拉黑该数据, 是否继续?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          setHidden({pids:[id],hidden:true}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: '成功',
+                message: '操作成功',
+                type: 'success'
+              });
+              this.getList()
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.page = 1;
+      this.query.size = val;
+      this.getList();
+    },
+    handleCurrentChange(val) {
+      this.query.page = val;
+      this.getList();
+    },
+
+    search() {
+      this.query.page = 1;
+      this.getList();
+    },
+    getList() {
+      this.loading = true
+      let query = JSON.parse(JSON.stringify(this.query))
+      query.page-=1
+      goodsStoreList(query).then((res) => {
+        this.loading = false
+        if (res.state == "Success") {
+          this.tableData = res.content.content;
+          this.total = res.content.totalElements
+        }
+      });
+    },
+    listAllTypes(){
+       listAllTypes().then((res) => {
+        if (res.state == "Success") {
+          res.content.map(item=>{
+            this.options.push({
+              value:item.productType,
+              label:item.productTypeDesc
+            })
+          })
+        }
+      });
+    },
+    listShowTypes(){
+      listShowTypes().then(res=>{
+        if (res.state == "Success") {
+          this.tabList = []
+          res.content.map(item=>{
+            this.tabList.push({
+              value:item.productType,
+              label:item.productTypeDesc
+            })
+          })
+          this.setQuery1.type = res.content.map(item=>item.productType)
+        }
+      })
+    },
+    save(){
+        this.$refs.setQuery.validate((v) => {
+        if (v) {
+          this.btnLoading = true
+          addOrUpdateActivityXiaoju(this.setQuery).then(res=>{
+            this.btnLoading = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.query.page = 1
+                this.getList();
+
+            }
+          })
+              
+        }
+      });
+    },
+    save1(){
+        this.$refs.setQuery1.validate((v) => {
+        if (v) {
+          this.btnLoading1 = true
+          setShowTypes(this.setQuery1.type).then(res=>{
+            this.btnLoading1 = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible1 = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.listShowTypes();
+
+            }
+          })
+              
+        }
+      });
+    },
+    save2(){
+        this.$refs.topFrom.validate((v) => {
+        if (v) {
+          this.btnLoading2 = true
+          setTop(this.topFrom).then(res=>{
+            this.btnLoading2 = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible2 = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.getList();
+
+            }
+          })
+              
+        }
+      });
+    },
+  
+  },
+  created() {
+    this.getList();
+    this.listAllTypes()
+    this.listShowTypes()
+  },
+};
+</script>
+  
+<style lang="scss" >
+.cityList {
+  .tab-list{
+    display: flex;
+    align-items: center;
+    padding-bottom: 20px;
+    .tab{
+      font-size: 16px;
+      color: #222;
+      cursor: pointer;
+    }
+    .tab+.tab{
+      margin-left: 10px;
+    }
+    .tab.active{
+      color: #2836fe;
+      font-weight: bold;
+    }
+  }
+}
+</style>
+  

+ 1 - 0
src/views/operationManage/marketingManage/index.vue

@@ -213,6 +213,7 @@ export default {
         "endTime": "",
         "startTime": ""
       }
+      this.date = []
     },
     // 删除
      handleDel(id) {

+ 14 - 3
src/views/operationManage/shopManage/shopAdd.vue

@@ -2,7 +2,7 @@
  * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
  * @Date: 2023-05-26 16:37:34
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-08-01 17:53:54
+ * @LastEditTime: 2024-08-15 15:55:07
  * @FilePath: \admin-manage\src\views\operationManage\shopManage\shopAdd.vue
  * @Description: 
  * 
@@ -86,6 +86,14 @@
           ></el-input>
           <i class="el-icon-location ml10 position red" @click="chooseAddress"></i>
       </el-form-item>
+       <el-form-item label="邮政编码:" prop="regionCode">
+        <el-input
+          placeholder="请输入邮政编码"
+          v-model="setQuery.regionCode"
+          class="item-width-500"
+        >
+        </el-input>
+      </el-form-item>
        
        <el-form-item label="店铺简介:">
         <el-input
@@ -103,7 +111,6 @@
           type="tel"
           placeholder="请输入店铺电话"
           v-model="setQuery.serviceTel"
-          :maxlength="11"
           class="item-width-300"
         >
         </el-input>
@@ -302,6 +309,7 @@ export default {
       cityName:'',
       addressLoading:false,
       setQuery: {
+        regionCode:'',
         address: "",
         businessImg: "",
         city: "",
@@ -357,6 +365,9 @@ export default {
       pageLoading: false, //页面loading
       loading: false,
       rules: {
+         regionCode: [
+          { required: true, message: "请输入邮政编码", trigger: "blur" },
+        ],
         shopMainId: [
           { required: true, message: "请选择商铺主体", trigger: "change" },
         ],
@@ -398,7 +409,7 @@ export default {
         ],
         serviceTel: [
           { required: true, message: "请输入店铺电话", trigger: "blur" },
-          { validator: validateTel, trigger: 'change' }
+          // { validator: validateTel, trigger: 'change' }
         ],
       },
       rules1:{

+ 240 - 0
src/views/setting/cityList.vue

@@ -0,0 +1,240 @@
+
+<template>
+  <div class="cityList app-container">
+     <div class="search">
+      <div>
+
+        <el-input
+          v-model="query.name"
+          size="small"
+          placeholder="请输入城市名称"
+          clearable
+          class="item-width-200 "
+        ></el-input>
+        <el-button
+        class="ml10"
+        type="primary"
+        size="small"
+        icon="el-icon-search"
+        @click="handleSearch"
+      >
+        搜索
+      </el-button>
+      </div>
+       <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+        >添加</el-button
+      >
+    </div>
+
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+     <el-table-column
+        align="center"
+        label="行政区域名称"
+        prop="name"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="区域编码"
+        prop="code"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="创建时间"
+        prop="createTime"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column align="center" label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleEdit(scope.row)"
+            >编辑</el-button
+          >
+          <el-button type="text" size="small" @click="handleDel(scope.row.code)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-box">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+        :current-page="query.currentPage"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="query.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+
+    <el-dialog :title="title" width="550px" :visible.sync="dialogFormVisible">
+    <el-form label-width="130px" :model="setQuery"
+      ref="setQuery"
+      :rules="rules">
+        <el-form-item label="邮政编码"  prop="code">
+            <el-input
+            v-model="setQuery.code"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+         <el-form-item label="城市名称"  prop="name">
+            <el-input
+            v-model.number="setQuery.name"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+
+    </el-form>
+  <div slot="footer" class="dialog-footer">
+    <el-button @click="dialogFormVisible = false">取 消</el-button>
+    <el-button type="primary" :loading="btnLoading" @click="save">确 定</el-button>
+  </div>
+</el-dialog>
+
+
+  </div>
+</template>
+  
+  <script>
+import { debounce } from "@/utils/index";
+import { getCityList,putCity,delCity } from "@/api/common";
+export default {
+  name: "marketing",
+  data() {
+    return {
+      date:'',
+      title:'',
+      tableData: [],
+      loading: false,
+      btnLoading: false,
+      dialogFormVisible: false,
+      query: {
+        name:'',
+        currentPage: 1,
+        pageSize: 10,
+      },
+      total: 0,
+      setQuery:{
+        "code": "",
+        "name": "",
+        "type": 'City',
+      },
+      rules:{
+         code: [{ required: true, message: "请输入邮政编码", trigger: "blur" }],
+         name: [{ required: true, message: "请输入城市名", trigger: "blur" }],
+      }
+    };
+  },
+  methods: {
+    handleSearch(){
+        this.query.currentPage = 1;
+        this.getList();
+    },
+    handleEdit(row){
+      this.title = '编辑'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "code": row.code,
+        "name": row.name,
+        "type": row.type,
+      }
+      this.date = [row.startTime, row.endTime]
+    },
+    handleAdd() {
+      this.title = '添加'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "code": "",
+        "name": "",
+        "type": 'City',
+      }
+    },
+    // 删除
+     handleDel(code) {
+       this.$confirm(`此操作将删除该数据, 是否继续?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          delCity({code}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: '成功',
+                message: '操作成功',
+                type: 'success'
+              });
+              this.getList()
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.currentPage = 1;
+      this.query.pageSize = val;
+      this.getList();
+    },
+    handleCurrentChange(val) {
+      this.query.currentPage = val;
+      this.getList();
+    },
+
+    search() {
+      this.query.currentPage = 1;
+      this.getList();
+    },
+    getList() {
+      this.loading = true
+      getCityList(this.query).then((res) => {
+        this.loading = false
+        if (res.state == "Success") {
+          this.tableData = res.content.content;
+          this.total = res.content.totalElements
+        }
+      });
+    },
+    save(){
+        this.$refs.setQuery.validate((v) => {
+        if (v) {
+          this.btnLoading = true
+          putCity([this.setQuery]).then(res=>{
+            this.btnLoading = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.query.currentPage = 1
+                this.getList();
+
+            }
+          })
+              
+        }
+      });
+    }
+  },
+  created() {
+    this.getList();
+  },
+};
+</script>
+  
+<style lang="scss" >
+.cityList {
+}
+</style>
+  

+ 316 - 0
src/views/setting/synchronization.vue

@@ -0,0 +1,316 @@
+
+<template>
+  <div class="synchronization app-container">
+     <div class="search">
+      <!-- <div>
+
+        <el-input
+          v-model="query.key"
+          size="small"
+          placeholder="请输入ID或活动名称"
+          clearable
+          class="item-width-200 "
+        ></el-input>
+        <el-button
+        class="ml10"
+        type="primary"
+        size="small"
+        icon="el-icon-search"
+        @click="handleSearch"
+      >
+        搜索
+      </el-button>
+      </div> -->
+       <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+        >添加</el-button
+      >
+    </div>
+
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+     <el-table-column
+        align="center"
+        label="产品类型"
+        prop="productType"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        {{scope.row.productType}}
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="区域"
+        prop="regionCode"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="参数"
+        prop="parameter"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        {{scope.row.parameter}}
+        </template>
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="同步时间"
+        prop="updateTime"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        {{timeFormat(scope.row.updateTime) }}
+        </template>
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="是否禁止"
+        prop="disable"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+        {{scope.row.disable?'是':'否'}}
+       </template>
+      </el-table-column>
+      <el-table-column align="center" label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleEdit(scope.row)"
+            >编辑</el-button
+          >
+          <el-button type="text" size="small" @click="handleDel(scope.row.id)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-box">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+        :current-page="query.currentPage"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="query.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+
+    <el-dialog :title="title" width="550px" :visible.sync="dialogFormVisible">
+    <el-form label-width="130px" :model="setQuery"
+      ref="setQuery"
+      :rules="rules">
+        <el-form-item label="活动ID"  prop="activityId">
+            <el-input
+            v-model="setQuery.activityId"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+         <el-form-item label="活动金额"  prop="activityMoney">
+            <el-input
+            v-model.number="setQuery.activityMoney"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+         <el-form-item label="活动有效期"  prop="startTime">
+            <el-date-picker
+            v-model="date"
+            size="small"
+            class="item-width-350 ml10"
+            value-format="yyyy-MM-dd hh:mm:ss"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+            </el-date-picker>
+        </el-form-item>
+         <el-form-item label="活动内容"  prop="activityContent">
+            <el-input
+            v-model.number="setQuery.activityContent"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+    </el-form>
+  <div slot="footer" class="dialog-footer">
+    <el-button @click="dialogFormVisible = false">取 消</el-button>
+    <el-button type="primary" :loading="btnLoading" @click="save">确 定</el-button>
+  </div>
+</el-dialog>
+
+
+  </div>
+</template>
+  
+  <script>
+import { debounce } from "@/utils/index";
+import { taskList,taskUpsert,delTask } from "@/api/task";
+import {timeFormat} from '@/utils/index'
+
+export default {
+  name: "marketing",
+  data() {
+    return {
+      date:'',
+      title:'',
+      tableData: [],
+      loading: false,
+      btnLoading: false,
+      dialogFormVisible: false,
+      query: {
+        key:'',
+        currentPage: 1,
+        pageSize: 10,
+      },
+      total: 0,
+      setQuery:{
+        "cron": "0/60 * * * * *",
+        "disable": false,
+        "id": "",
+        "parameter": {
+          "test": "1"
+        },
+        "productType": [
+          "Scenic",
+          "Hotel",
+          "MovieTicket"
+        ],
+        "regionCode": 520101
+      },
+      rules:{
+         activityId: [{ required: true, message: "请输入活动ID", trigger: "blur" }],
+         activityMoney: [{ required: true, message: "请输入活动金额", trigger: "blur" }],
+         startTime: [{ required: true, message: "请选择活动时间", trigger: "change" }],
+      }
+    };
+  },
+  watch: {
+
+     date(val){
+      if(val){
+        this.setQuery.startTime = val[0]
+        this.setQuery.endTime = val[1]
+      }else{
+        this.setQuery.startTime = ''
+        this.setQuery.endTime = ''
+      }
+    },
+  },
+  methods: {
+    timeFormat(val){
+      return timeFormat(val)
+    },
+    handleSearch(){
+        this.query.currentPage = 1;
+        this.getList();
+    },
+    handleEdit(row){
+        this.title = '编辑'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "activityContent": row.activityContent,
+        "activityId": row.activityId,
+        "activityMoney": row.activityMoney,
+        "endTime": row.endTime,
+        "startTime": row.startTime,
+        "id":row.id
+      }
+      this.date = [row.startTime, row.endTime]
+    },
+    handleAdd() {
+        this.title = '添加'
+      this.dialogFormVisible = true
+      this.setQuery = {
+        "activityContent": "",
+        "activityId": "",
+        "activityMoney": 0,
+        "endTime": "",
+        "startTime": ""
+      }
+      this.data = []
+    },
+    // 删除
+     handleDel(id) {
+       this.$confirm(`此操作将删除该数据, 是否继续?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          delTask({id}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: '成功',
+                message: '操作成功',
+                type: 'success'
+              });
+              this.getList()
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.currentPage = 1;
+      this.query.pageSize = val;
+      this.getList();
+    },
+    handleCurrentChange(val) {
+      this.query.currentPage = val;
+      this.getList();
+    },
+
+    search() {
+      this.query.currentPage = 1;
+      this.getList();
+    },
+    getList() {
+      this.loading = true
+      taskList(this.query).then((res) => {
+        this.loading = false
+        if (res.state == "Success") {
+          this.tableData = res.content.content;
+          this.total = res.content.totalElements
+        }
+      });
+    },
+    save(){
+        this.$refs.setQuery.validate((v) => {
+        if (v) {
+          this.btnLoading = true
+          taskUpsert(this.setQuery).then(res=>{
+            this.btnLoading = false
+            if(res.state == 'Success'){
+                this.dialogFormVisible = false
+              this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.query.currentPage = 1
+                this.getList();
+
+            }
+          })
+              
+        }
+      });
+    }
+  },
+  created() {
+    this.getList();
+  },
+};
+</script>
+  
+<style lang="scss" >
+.synchronization {
+}
+</style>
+