Browse Source

抽奖活动上线

wenjie 9 tháng trước cách đây
mục cha
commit
4d6a52c1e8

BIN
dist.zip


+ 2 - 2
src/api/coupon.js

@@ -2,7 +2,7 @@
  * @Author: wenjie 1454560336@qq.com
  * @Date: 2024-05-20 16:59:06
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-05-22 14:56:56
+ * @LastEditTime: 2024-09-06 11:32:09
  * @FilePath: \admin-manage\src\api\coupon.js
  * @Description: 
  * 
@@ -23,7 +23,7 @@ export function getCouponList(params) {
 export function detail(params) {
   return request({
     url: '/zswl-cloud-shop/couponInfo/detail',
-    method: '',
+    method: 'get',
     params
   })
 }

+ 20 - 2
src/api/equity.js

@@ -2,7 +2,7 @@
  * @Author: wenjie 1454560336@qq.com
  * @Date: 2024-07-12 14:03:08
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-07-15 14:01:41
+ * @LastEditTime: 2024-09-09 17:10:02
  * @FilePath: \admin-manage\src\api\equity.js
  * @Description: 
  * 
@@ -64,4 +64,22 @@ export function getEquity(params) {
         method: 'get',
         params
     })
-}
+}
+
+// 权益领取列表
+export function getLogList(params) {
+  return request({
+      url: '/zswl-cloud-shop/couponInfoLog/listMediaVip',
+      method: 'get',
+      params
+  })
+}
+// 权益发放
+export function commitEquity(params) {
+  return request({
+      url: '/zswl-cloud-shop/couponInfoLog/commitByPlatform',
+      method: 'get',
+      params
+  })
+}
+

+ 11 - 1
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-09-03 09:22:43
+ * @LastEditTime: 2024-10-10 16:51:51
  * @FilePath: \admin-manage\src\api\goods.js
  * @Description: 
  * 
@@ -300,3 +300,13 @@ export function setTop(params) {
     params
   })
 }
+
+// 商品类型查询
+export function getGoodsList(data) {
+	return request({
+		// url: `/productcenterserver/search/v2/group?productType=${data.productType}&page=${data.page}&size=${data.size}`,//这个是不用传区域 可能查出来是多区域的
+		url: `/productcenterserver/search/v2/find?regionCode=${data.regionCode||'520100'}&productType=${data.productType}&page=${data.page}&size=${data.size}&title=${data.title}`,
+		method:'post',
+		data
+	}) 
+}

+ 77 - 0
src/api/luckyDraw.js

@@ -0,0 +1,77 @@
+/*
+ * @Author: wenjie 1454560336@qq.com
+ * @Date: 2024-09-18 10:57:18
+ * @LastEditors: wenjie 1454560336@qq.com
+ * @LastEditTime: 2024-09-23 15:29:38
+ * @FilePath: \admin-manage\src\api\luckyDraw.js
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
+import request from '@/utils/request'
+
+// 抽奖列表
+export function getLuckyDrawList(params) {
+  return request({
+    url: '/zswl-cloud-shop/raffleInfo/search',
+    method: 'get',
+    params
+  })
+}
+
+// 添加编辑抽奖
+export function saveOrUpdateLuckyDraw(data) {
+    return request({
+      url: '/zswl-cloud-shop/raffleInfo/saveOrUpdate',
+      method: 'post',
+      data
+    })
+  }
+
+  
+// 抽奖详情
+export function getLuckyDrawDetail(params) {
+    return request({
+      url: '/zswl-cloud-shop/raffleInfo/detail',
+      method: 'get',
+      params
+    })
+  }
+
+// 抽奖开启关闭
+export function luckyDrawEnable(params) {
+  return request({
+    url: '/zswl-cloud-shop/raffleInfo/enable',
+    method: 'get',
+    params
+  })
+}
+
+
+// 抽奖规则
+export function luckyDrawRule(params) {
+  return request({
+    url: '/zswl-cloud-shop/raffleInfo/rule',
+    method: 'get',
+    params
+  })
+}
+
+// 中奖数据
+export function prizeList(params) {
+  return request({
+    url: '/zswl-cloud-shop/raffleInfo/prizeList',
+    method: 'get',
+    params
+  })
+}
+
+
+// 发放
+export function sendPrize(params) {
+  return request({
+    url: '/zswl-cloud-shop/raffleInfo/send',
+    method: 'get',
+    params
+  })
+}

+ 30 - 1
src/api/setting.js

@@ -1,3 +1,13 @@
+/*
+ * @Author: wenjie 1454560336@qq.com
+ * @Date: 2024-08-19 11:43:51
+ * @LastEditors: wenjie 1454560336@qq.com
+ * @LastEditTime: 2024-09-05 13:48:54
+ * @FilePath: \admin-manage\src\api\setting.js
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
 import request from '@/utils/request'
 
   // 获取商户信息
@@ -18,4 +28,23 @@ import request from '@/utils/request'
       method: 'post',
       data
     })
-  }
+  }
+
+  
+  // 查询小程序配置
+  export function getMiniSetting(params) {
+    return request({
+      url: '/rewardserver/miniAppSetting/getSetting',
+      method: 'get',
+      params
+    })
+  }
+
+    // 新增/修改小程序配置
+  export function setMini(data) {
+    return request({
+      url: '/rewardserver/miniAppSetting/saveOrUpdate',
+      method: 'post',
+      data
+    })
+  }

BIN
src/assets/recharge.png


+ 68 - 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-18 15:45:41
+ * @LastEditTime: 2024-09-20 09:55:47
  * @FilePath: \admin-manage\src\router\index.js
  * @Description: 
  * 
@@ -563,6 +563,16 @@ export let constantRoutes = [{
               icon: ''
             },
           },
+          {
+            id: 1,
+            path: '/operationManage/comboManage/logList',
+            name: '/operationManage/comboManage/logList',
+            component: () => import('@/views/operationManage/comboManage/logList.vue'),
+            meta: {
+              title: '权益记录',
+              icon: ''
+            },
+          },
           // {
           //   id: 1,
           //   path: '/operationManage/comboManage/addCombo',
@@ -859,6 +869,63 @@ export let constantRoutes = [{
           
         ]
       },
+      {
+        id: 0,
+        path: '/operationManage/luckyDrawManage/index',
+        component: operationLayout,
+        meta: {
+          title: '抽奖管理',
+          icon: ''
+        },
+        alwaysShow: true,
+        children: [{
+            id: 1,
+            path: '/operationManage/luckyDrawManage/index',
+            name: '/operationManage/luckyDrawManage/index',
+            component: () => import('@/views/operationManage/luckyDrawManage/index.vue'),
+            meta: {
+              title: '抽奖列表',
+              icon: ''
+            },
+          },
+          {
+            id: 1,
+            path: '/operationManage/luckyDrawManage/addLuckyDraw',
+            name: '/operationManage/luckyDrawManage/addLuckyDraw',
+            hidden:true,
+            component: () => import('@/views/operationManage/luckyDrawManage/addLuckyDraw.vue'),
+            meta: {
+              title: '添加抽奖',
+              icon: '',
+              activeMenu: '/operationManage/luckyDrawManage/index'
+            },
+          },
+          {
+            id: 1,
+            path: '/operationManage/luckyDrawManage/dataList',
+            name: '/operationManage/luckyDrawManage/dataList',
+            hidden:true,
+            component: () => import('@/views/operationManage/luckyDrawManage/dataList.vue'),
+            meta: {
+              title: '中奖数据',
+              icon: '',
+              activeMenu: '/operationManage/luckyDrawManage/index'
+            },
+          },
+          {
+            id: 1,
+            path: '/operationManage/luckyDrawManage/luckyDrawRule',
+            name: '/operationManage/luckyDrawManage/luckyDrawRule',
+            hidden:true,
+            component: () => import('@/views/operationManage/luckyDrawManage/luckyDrawRule.vue'),
+            meta: {
+              title: '活动规则',
+              icon: '',
+              activeMenu: '/operationManage/luckyDrawManage/index'
+            },
+          },
+        ]
+      },
       {
         id: 0,
         path: '/operationManage/activityManage/index',

+ 1 - 1
src/utils/config.js

@@ -2,7 +2,7 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2024-01-05 16:08:18
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-09-04 16:57:55
+ * @LastEditTime: 2024-10-14 11:23:43
  * @FilePath: \admin-manage\src\utils\config.js
  * @Description: 124234
  * 

+ 4 - 3
src/views/home/index.vue

@@ -1,8 +1,8 @@
 <!--
  * @Author: your name
  * @Date: 2021-07-08 12:10:55
- * @LastEditTime: 2024-01-17 15:37:12
- * @LastEditors: wen 1454560336@qq.com
+ * @LastEditTime: 2024-09-11 16:14:27
+ * @LastEditors: wenjie 1454560336@qq.com
  * @Description: In User Settings Edit
  * @FilePath: \admin-manage\src\views\home\index.vue
 -->
@@ -132,7 +132,8 @@
             <div>昨日</div>
           </div>
           <div class="item">
-            <div class="today">{{ userData.totalRegister }}</div>
+            <!-- <div class="today">{{ userData.totalRegister }}</div> -->
+            <div class="today">{{ userData.totalRegisterByHyx }}</div>
             <div class="lastDay">{{ userData.yesterdayRegister }} </div>
           </div>
         </el-col>

+ 273 - 0
src/views/operationManage/comboManage/logList.vue

@@ -0,0 +1,273 @@
+<!--
+ * @Author: wenjie 1454560336@qq.com
+ * @Date: 2024-07-11 13:51:26
+ * @LastEditors: wenjie 1454560336@qq.com
+ * @LastEditTime: 2024-09-09 17:43:27
+ * @FilePath: \admin-manage\src\views\operationManage\comboManage\logList.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+-->
+
+<template>
+  <div class="logList app-container">
+   
+    <div class="search">
+        <div>
+
+            <el-input
+            v-model="query.userMobile"
+            size="small"
+            placeholder="用户手机号"
+            class="item-width-200 "
+            ></el-input>
+                <el-date-picker
+            v-model="date"
+            size="small"
+            value-format="yyyy-MM-dd"
+            class="item-width-350 ml10"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+            </el-date-picker>
+            <el-select
+            v-model="query.status"
+            size="small"
+            clearable
+            class="item-width-200 ml10"
+            placeholder="请选择状态"
+            >
+            <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+            >
+            </el-option>
+            </el-select>
+            <el-button
+        class="ml10"
+        type="primary"
+        size="small"
+        icon="el-icon-search"
+        @click="handleSearch"
+      >
+        搜索
+      </el-button>
+        </div>
+    </div>
+
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+      <el-table-column
+        prop="userMobile"
+        align="center"
+        label="用户手机号"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column
+        prop="setMealDetail"
+        align="center"
+        label="权益图标"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+          <img class="icon" :src="scope.row.equityContent.icon" alt="">
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        prop="createTime"
+        align="center"
+        label="权益名称"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+        {{scope.row.equityContent.equityName}}
+        </template>
+      </el-table-column>
+       <el-table-column
+        prop="mobile"
+        align="center"
+        label="权益到账手机号"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        prop="createTime"
+        align="center"
+        label="领取时间"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+        {{scope.row.createTime}}
+        </template>
+      </el-table-column>
+       <el-table-column
+        prop="createTime"
+        align="center"
+        label="状态"
+        show-overflow-tooltip
+      >
+        <template slot-scope="scope">
+        {{scope.row.status == 1?'待充值':'已充值'}}
+        </template>
+      
+      </el-table-column>
+
+      <el-table-column align="center" label="操作">
+        <template slot-scope="scope">
+
+          <el-button type="text" size="small" v-if="scope.row.status == 1" @click="handleCommit(scope.row.id)"
+            >发放</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>
+  </div>
+</template>
+  
+  <script>
+import { debounce } from "@/utils/index";
+import { getLogList,commitEquity } from "@/api/equity";
+export default {
+  name: "logList",
+  data() {
+    return {
+        date:'',
+      options: [
+        {
+          value: "1",
+          label: "未使用",
+        },
+        {
+          value: "2",
+          label: "已使用",
+        },
+        {
+          value: "3",
+          label: "已失效",
+        },
+      ],
+      tableData: [],
+      loading: false,
+      query: {
+        userMobile:'',
+        endDay:'',
+        beginDay:'',
+        status:'',
+        currentPage: 1,
+        pageSize: 10,
+      },
+      title: "",
+      total: 0,
+    };
+  },
+  watch: {
+    date(val){
+      if(val){
+        this.query.beginDay = val[0]
+        this.query.endDay = val[1]
+      }else{
+        this.query.beginDay = ''
+        this.query.endDay = ''
+      }
+    }
+  },
+  methods: {
+    handleSearch(){
+        this.query.currentPage = 1
+      this.getList();
+    },
+
+    handleCommit(couponLogId) {
+      
+      this.$confirm(`此操作将发放该条数据, 是否继续?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          commitEquity({couponLogId}).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
+      let query = JSON.parse(JSON.stringify(this.query))
+      if(!query.status){
+        query.status = null
+      }
+      console.log(query);
+      getLogList(query).then((res) => {
+        this.loading = false
+        if (res.state == "Success") {
+          this.tableData = res.content.records;
+          this.tableData.map(item =>{
+            item.equityContent = JSON.parse(item.equityContent)
+          })
+          this.total = res.content.total
+        }
+      });
+    },
+  },
+  created() {
+    this.getList();
+  },
+};
+</script>
+  
+<style lang="scss" >
+.logList {
+    .icon{
+        width: 70px;
+        height: 70px;
+    }
+}
+</style>
+  

+ 402 - 60
src/views/operationManage/equitiesManage/addEquities.vue

@@ -52,9 +52,11 @@
           <!-- <el-radio :label="1">满减券</el-radio> -->
           <el-radio :label="2">小桔加油券</el-radio>
           <el-radio :label="3">品类权限</el-radio>
+          <el-radio :label="4">视频权益</el-radio>
+          <el-radio :label="5">抽奖</el-radio>
         </el-radio-group>
         </el-form-item>
-        <template v-if="setQuery.bindService !=3">
+        <template v-if="setQuery.bindService ==2">
           <el-form-item label="选择优惠券:" prop="bindContent">
             <el-input
             v-if="setQuery.bindContent"
@@ -62,12 +64,38 @@
             class="item-width-300"
             disabled
           ></el-input>
-          <el-button class="ml10" @click="handleChoose">{{setQuery.bindContent?'切换':'选择优惠券'}}</el-button>
+          <el-button class="ml10" @click="handleChoose(1)">{{setQuery.bindContent?'切换':'选择优惠券'}}</el-button>
           </el-form-item>
           <el-form-item label="限制核销后才能再次领取:">
             <el-checkbox v-model="setQuery.getFlag" :true-label="1" :false-label="2" ></el-checkbox>
           </el-form-item>
-          <el-form-item label="赠送数量:" prop="claimNum">
+        </template>
+
+           <template v-if="setQuery.bindService ==5">
+          <el-form-item label="选择抽奖活动:" prop="bindContent">
+            <el-input
+            v-if="setQuery.bindContent"
+            v-model="couponName"
+            class="item-width-300"
+            disabled
+          ></el-input>
+          <el-button class="ml10" @click="handleChoose(2)">{{setQuery.bindContent?'切换':'选择抽奖活动'}}</el-button>
+          </el-form-item>
+
+           <el-form-item label="抽奖次数:" prop="givenNum">
+              <el-input
+                  size="small"
+                  type="number"
+                  v-model.number="setQuery.givenNum"
+                  :maxlength="10"
+                  class="item-width-300"
+              >
+                <template slot="append">次</template>
+              </el-input>
+          </el-form-item>
+          
+        </template>
+          <el-form-item label="赠送数量:" prop="claimNum" v-if="setQuery.bindService ==2 ||setQuery.bindService ==4">
             <div class="item">
               <div class="label">限制每人</div>
                 <el-select v-model="setQuery.claimType" size="small" class="item-width-100" placeholder="">
@@ -90,9 +118,7 @@
               </el-input>
             </div>
           </el-form-item>
-          
-        </template>
-        <el-form-item label="选择品类:" prop="bindContent" v-else>
+        <el-form-item label="选择品类:" prop="bindContent" v-if="setQuery.bindService ==3">
           <el-tree
             v-loading="loadingTree"
               :data="data"
@@ -106,6 +132,47 @@
               @check-change="handleCheckChange">
           </el-tree>
         </el-form-item>
+
+          <el-form-item label="权益内容:" prop="equityContent"  v-if="setQuery.bindService ==4">
+          <el-table
+            :data="setQuery.equityContent"
+            tooltip-effect="dark"
+            border
+            style="width: 500px"
+          >
+          <el-table-column
+              align="center"
+              label="图标"
+              prop="icon"
+              show-overflow-tooltip
+              width="150px"
+            >
+            <template slot-scope="scope">
+              <img class="icon" :src="scope.row.icon" alt="">
+            </template>
+            </el-table-column>
+        
+            <el-table-column
+              align="center"
+              label="权益"
+              prop="equityName"
+              show-overflow-tooltip
+            >
+            </el-table-column>
+            <el-table-column align="center" label="操作" width="100px">
+              <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.$index)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+          <el-button type="text" size="small" @click="handleAdd">+添加</el-button>
+          </el-form-item>
+
       </template>
 
      
@@ -119,6 +186,36 @@
       >
     </div>
 
+
+
+    <el-dialog :title="title" width="550px" :visible.sync="dialogFormVisible1">
+
+    <el-form label-width="130px" :model="form"
+      ref="form"
+      :rules="rules1">
+
+       <el-form-item label="视频会员"  prop="pid">
+         <el-select v-model="form.pid" size="small" class="item-width-300" placeholder="请选择">
+            <el-option
+              v-for="item in goodsData"
+              :key="item.pid"
+              :label="item.title"
+              :value="item.pid">
+              <img style="float: left; width:30px;height:30px;border-radius:50%;" :src="item.cover&&item.cover[0]" alt="">
+              <span style="float: right; color: #8492a6; font-size: 13px">{{ item.title }}</span>
+            </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="70%" :visible.sync="dialogTableVisible">
       
       <div class="search">
@@ -127,7 +224,7 @@
             v-model="couponQuery.couponName"
             size="small"
             clearable
-            placeholder="请输入活动名称"
+            placeholder="请输入优惠券名称"
             class="item-width-200 "
             ></el-input>
             
@@ -204,13 +301,105 @@
     </el-dialog>
 
 
+    <el-dialog title="选择抽奖" width="70%" :visible.sync="dialogTableVisible1">
+      
+      <div class="search">
+        <div>
+            <el-input
+            v-model="query.raffleName"
+            size="small"
+            clearable
+            placeholder="请输入活动名称"
+            class="item-width-200 "
+            ></el-input>
+            
+            <el-button
+            class="ml10"
+            type="primary"
+            size="small"
+            icon="el-icon-search"
+            @click="handleSearch1"
+        >
+            搜索
+        </el-button>
+        </div>
+    </div>
+        <el-table
+      :data="tableData1"
+      tooltip-effect="dark"
+      border
+      v-loading="loading2"
+      style="width: 100%"
+    >
+      <el-table-column
+        align="center"
+        label="选择"
+        prop="setMealCode"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+         <el-radio v-model="setQuery.bindContent" :label="scope.row.id" @input="selectCoupon(scope.row.raffleName)"></el-radio>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="raffleName"
+        align="center"
+        label="活动名称"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column
+        prop="surplusNum"
+        align="center"
+        label="活动时间"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+        <div v-if="scope.row.raffleCycle == 1">
+          {{scope.row.startTime}} 至 {{scope.row.endTime}}
+        </div>
+        <div v-else>
+          {{scope.row.raffleCycleContent | filterDate}}
+        </div>
+        
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="useNum"
+        align="center"
+        label="展示状态"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        {{scope.row.raffleState == 1 ? '展示' : '不展示'}}
+      </template>
+      </el-table-column>
+      
+    </el-table>
+    <div class="page-box">
+      <el-pagination
+        @size-change="handleSizeChange1"
+        @current-change="handleCurrentChange1"
+        background
+        :current-page="query.currentPage"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="couponQuery.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+    </el-dialog>
+
+
   </div>
 </template>
 
 <script>
+import {getLuckyDrawList} from '@/api/luckyDraw.js'
 import { editEquity,getEquity } from "@/api/equity";
 import { getCouponList } from "@/api/coupon";
-import {getData} from '@/api/goods'
+import {getData,getGoodsList} from '@/api/goods'
 import Upload from "@/components/Upload";
 
 export default {
@@ -224,34 +413,23 @@ export default {
       loading1: false,
       loading2: false,
       loadingTree: false,
+      btnLoading1: false,
       dialogTableVisible: false,
+      dialogTableVisible1: false,
+      dialogFormVisible1: false,
+      query: {
+        enable:1,
+        raffleName:'',
+        "status":'',
+        "state":'',
+        "currentPage": 1,
+        "pageSize": 10,
+      },
       tableData: [],
+      tableData1: [],
       title: "",
       total: 0,
-      data:[
-        // {
-        //   label: '一级 1',
-        //   children: [{
-        //     label: '二级 1-1',
-        //     children: [{
-        //       label: '三级 1-1-1'
-        //     }]
-        //   }]
-        // }, {
-        //   label: '一级 2',
-        //   children: [{
-        //     label: '二级 2-1',
-        //     children: [{
-        //       label: '三级 2-1-1'
-        //     }]
-        //   }, {
-        //     label: '二级 2-2',
-        //     children: [{
-        //       label: '三级 2-2-1'
-        //     }]
-        //   }]
-        // }
-        ],
+      data:[],
         typeOptions:[
         {
           label:'每月',
@@ -262,13 +440,18 @@ export default {
           value:2
         }
       ],
+      form:{
+        pid:'',
+      },
       setQuery: {
         claimType: 1,
         claimNum:1,
+        givenNum:1,
         getFlag:1,
         "setMealCode":'',
         "bindContent": "",
         "bindService": 2,
+        equityContent:[],
         "equityDetail": "",
         "equityImg": "",
         "equityName": "",
@@ -286,33 +469,71 @@ export default {
         currentPage: 1,
         pageSize: 10,
       },
+      goodsData:[],
+      rules1:{
+          pid: [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+         equityName: [
+          { required: true, message: "请输入权益", trigger: "blur" },
+        ],
+      }
     };
   },
   computed: {
     rules() {
       if(this.setQuery.equityType == 2){
+        if(this.setQuery.bindService == 4){
+           return  {
+              equityName: [
+                { required: true, message: "请输入权益名称", trigger: "blur" },
+              ],
+              equityImg: [
+                { required: true, message: "请上传权益图片", trigger: "change" },
+              ],
+              equityDetail: [
+                { required: true, message: "请输入权益描述", trigger: "blur" },
+              ],
+              equityMsg: [
+                { required: true, message: "请输入权益说明", trigger: "blur" },
+              ],
+              equityContent: [
+                { required: true, message: "请选择", trigger: "change" },
+              ],
+              claimNum: [
+                { required: true, message: "请选择", trigger: "blur" },
+                { type:'number',min:1, message: "最小数量为1", trigger: "blur" },
+              ],
+            }
+          }else{
+              
+              return  {
+              equityName: [
+                { required: true, message: "请输入权益名称", trigger: "blur" },
+              ],
+              equityImg: [
+                { required: true, message: "请上传权益图片", trigger: "change" },
+              ],
+              equityDetail: [
+                { required: true, message: "请输入权益描述", trigger: "blur" },
+              ],
+              equityMsg: [
+                { required: true, message: "请输入权益说明", trigger: "blur" },
+              ],
+              bindContent: [
+                { required: true, message: "请选择", trigger: "change" },
+              ],
+              claimNum: [
+                { required: true, message: "请选择", trigger: "blur" },
+                { type:'number',min:1, message: "最小数量为1", trigger: "blur" },
+              ],
+              givenNum: [
+                { required: true, message: "请选择", trigger: "blur" },
+                { type:'number',min:1, message: "最小数量为1", trigger: "blur" },
+              ],
+            }
+          }
 
-        return  {
-        equityName: [
-          { required: true, message: "请输入权益名称", trigger: "blur" },
-        ],
-        equityImg: [
-          { required: true, message: "请上传权益图片", trigger: "change" },
-        ],
-        equityDetail: [
-          { required: true, message: "请输入权益描述", trigger: "blur" },
-        ],
-        equityMsg: [
-          { required: true, message: "请输入权益说明", trigger: "blur" },
-        ],
-         bindContent: [
-          { required: true, message: "请选择", trigger: "change" },
-        ],
-        claimNum: [
-          { required: true, message: "请选择", trigger: "blur" },
-          { type:'number',min:1, message: "最小数量为1", trigger: "blur" },
-        ],
-      }
       }else{
           return  {
         equityName: [
@@ -328,6 +549,17 @@ export default {
       }
     }
   },
+  filters: {
+    filterDate: function(value) {
+      let arr = ['','周一','周二','周三','周四','周五','周六','周日']
+      let str = ''
+      let list = value.split(',')
+      list.map(item=>{
+        str = str + arr[item] +'、'
+      })
+      return str;
+    }
+  },
   watch: {
     'setQuery.bindService'(val) {
       if(val==3&&!this.data.length){
@@ -336,10 +568,35 @@ export default {
     }
   },
   methods: {
+    handleAdd(){
+      this.title = '添加'
+      this.form = {
+        icon:'',
+        equityName:''
+      }
+      this.dialogFormVisible1 = true
+    },
+    handleEdit(row){
+      this.title = '编辑'
+      this.form = {
+        id:row.id,
+        icon:row.icon,
+        equityName:row.equityName,
+      }
+      this.dialogFormVisible1 = true
+
+    },
+    handleDel(index){
+      this.setQuery.equityContent.splice(index,1)
+    },
     handleSearch(){
       this.couponQuery.currentPage = 1
       this.getCouponList();
     },
+    handleSearch1(){
+      this.query.currentPage = 1
+      this.getLuckyDrawList();
+    },
     selectCoupon(name){
       this.couponName = name
     },
@@ -347,10 +604,16 @@ export default {
       this.setQuery.bindContent = ''
     },
     // 选择优惠券
-    handleChoose(){
-      this.dialogTableVisible = true
-      this.couponQuery.currentPage = 1
-      this.getCouponList()
+    handleChoose(type){
+      if(type==1){
+        this.dialogTableVisible = true
+        this.couponQuery.currentPage = 1
+        this.getCouponList()
+      }else{
+        this.dialogTableVisible1 = true
+        this.query.currentPage = 1
+        this.getLuckyDrawList()
+      }
     },
     handleCheckChange(val,ischecked){
       if(ischecked){
@@ -368,19 +631,38 @@ export default {
       this.couponQuery.currentPage = val;
       this.getCouponList()
     },
+    handleSizeChange1(val) {
+      this.query.currentPage = 1;
+      this.query.pageSize = val;
+      this.getLuckyDrawList()
+    },
+    handleCurrentChange1(val) {
+      this.query.currentPage = val;
+      this.getLuckyDrawList()
+    },
     uploadEnd(val) {
       this.setQuery[val.type] = val.url;
     },
+    uploadEnd1(val){
+      this.form[val.type] = val.url;
+
+    },
     save() {
-      let setQuery = JSON.parse(JSON.stringify(this.setQuery))
       
       if(this.setQuery.bindService==3){
         this.setQuery.bindContent = this.$refs.tree.getCheckedKeys().join()
+      }
+        let setQuery = JSON.parse(JSON.stringify(this.setQuery))
+
+      if(setQuery.bindService==4){
+        setQuery.equityContent = JSON.stringify(setQuery.equityContent) 
+      }else{
+        setQuery.equityContent = ''
       }
       this.$refs.setQuery.validate((v) => {
     if (v) {
           this.loading = true;
-          editEquity(this.setQuery).then((res) => {
+          editEquity(setQuery).then((res) => {
             this.loading = false;
             if (res.state == "Success") {
               this.$notify({
@@ -399,17 +681,49 @@ export default {
         }
       });
     },
+
+    save1(){
+        this.$refs.form.validate((v) => {
+        if (v) {
+          if(this.title == '编辑'){
+            let index = this.setQuery.equityContent.findIndex(item => item.id == this.form.id)
+            this.$set(this.setQuery.equityContent[index],'id',this.form.id)
+            this.$set(this.setQuery.equityContent[index],'icon',this.form.icon)
+            this.$set(this.setQuery.equityContent[index],'equityName',this.form.equityName)
+            
+            this.dialogFormVisible1 = false
+          }else{
+            this.goodsData.map(item=>{
+              if(item.pid == this.form.pid){
+                 this.setQuery.equityContent.push({
+                  icon:item.cover&&item.cover.length?item.cover[0]:'',
+                  equityName:item.title,
+                  serviceId:item.pid
+                 })
+              }
+            })
+
+            // this.setQuery.equityContent.push(this.form)
+            this.dialogFormVisible1 = false
+          }
+        }
+      });
+    },
     getDetail(){
        this.loading1 = true
-      getEquity({equityId:this.$route.query.id}).then((res) => {
+      getEquity({equityId:this.$route.query.id,regionCode:'520100'}).then((res) => {
         this.loading1 = false
         if (res.state == "Success") {
             this.setQuery = res.content
+            this.setQuery.bindContent = Number(this.setQuery.bindContent)
             if(this.setQuery.bindService == 3){
               this.$nextTick(()=>{
 
                 this.$refs.tree.setCheckedKeys(this.setQuery.bindContent.split(','))
               })
+            }else if(this.setQuery.bindService == 4){
+              this.setQuery.equityContent = JSON.parse(this.setQuery.equityContent)
+
             }else{
               this.couponName = this.setQuery.couponName
             }
@@ -436,9 +750,33 @@ export default {
             this.data = res.content
           }
       })
+    },
+    // 获取视频会员商品
+    getGoodsList(){
+      getGoodsList({
+					productType:['Recharge'],
+          regionCode:'520100',
+					page:0,
+					size:99}).then(res=>{
+        if(res.state == 'Success'){
+          this.goodsData = res.content.content
+        }
+      })
+    },
+    // 抽奖列表
+    getLuckyDrawList(){
+      this.loading = true
+      getLuckyDrawList(this.query).then(res=>{
+        this.loading = false
+        if(res.state == 'Success'){
+          this.tableData1 = res.content.records
+          this.total = res.content.total
+        }
+      })
     }
   },
   created () {
+    this.getGoodsList()
     this.setQuery.equityType = this.$route.query.equityType
     this.setQuery.setMealCode = this.$route.query.setMealCode
     if(this.$route.query.id){
@@ -451,6 +789,10 @@ export default {
 <style lang="scss" scoped>
 .addEquities {
   padding-bottom: 40px;
+  .icon{
+    width: 40px;
+    height: 40px;
+  }
   .btn-group {
     display: flex;
     align-items: center;

+ 1 - 1
src/views/operationManage/goodsManage/homeGoodsSet.vue

@@ -306,7 +306,7 @@
       ref="setQuery1"
       :rules="rules1">
        <el-form-item label="区域"  prop="regionCode">
-            <el-select v-model="setQuery1.regionCode" class="item-width-300" placeholder="请选择">
+            <el-select v-model="setQuery1.regionCode" filterable class="item-width-300" placeholder="请选择">
               <el-option
                 v-for="item in cityOptions"
                 :key="item.value"

+ 26 - 3
src/views/operationManage/goodsManage/productLibrary.vue

@@ -184,7 +184,7 @@
             class="item-width-300"
             ></el-input>
         </el-form-item>
-         <el-form-item label="邮政编码"  prop="regionCode">
+         <el-form-item label="区域"  prop="regionCode">
             <el-input
             v-model.number="setQuery.regionCode"
             class="item-width-300"
@@ -286,6 +286,7 @@ export default {
           latitude: 0
         }
       },
+      originalQuery: {},
       topFrom:{
         pid:"",
         top:0
@@ -295,7 +296,7 @@ export default {
       rules:{
          productType: [{ required: true, message: "请选择产品类型", trigger: "change" }],
          cover: [{ required: true, message: "请上传产品图片", trigger: "change" }],
-         regionCode: [{ required: true, message: "请输入邮政编码", trigger: "blur" }],
+         regionCode: [{ required: true, message: "请输入区域", trigger: "blur" }],
          title: [{ required: true, message: "请输入产品名称", trigger: "blur" }],
          'meta.url': [{ required: true, message: "请输入跳转链接", trigger: "blur" }],
          
@@ -407,6 +408,7 @@ export default {
       if(row.productType == 'Web'){
         this.setQuery.meta = row.meta
       }
+      this.originalQuery = JSON.parse(JSON.stringify(this.setQuery))
     },
     handleAdd() {
         this.title = '添加'
@@ -516,7 +518,28 @@ export default {
         this.$refs.setQuery.validate((v) => {
         if (v) {
           this.btnLoading = true
-          upsertProduct([this.setQuery]).then(res=>{
+          let obj ={}
+          if(this.title == '编辑'){//只传发生变化了的参数
+            for (const key in this.setQuery) {
+              if( typeof this.setQuery[key] == 'object'){
+                if(JSON.stringify(this.originalQuery[key]) != JSON.stringify(this.setQuery[key]) ){
+                    obj[key] = this.setQuery[key]
+                }
+              }else{
+                if (this.originalQuery[key] != this.setQuery[key]) {
+                         obj[key] = this.setQuery[key]
+                }
+              }
+            }
+            obj.regionCode = this.setQuery.regionCode
+            obj.productType = this.setQuery.productType
+            obj.pid = this.setQuery.pid
+          }else{
+            obj = this.setQuery
+          }
+          console.log(obj);
+
+          upsertProduct([obj]).then(res=>{
             this.btnLoading = false
             if(res.state == 'Success'){
                 this.dialogFormVisible = false

+ 1304 - 0
src/views/operationManage/luckyDrawManage/addLuckyDraw.vue

@@ -0,0 +1,1304 @@
+
+<template>
+  <div class="addActivity app-container">
+    <el-form
+      :model="setQuery"
+      ref="setQuery"
+      :rules="rules"
+      v-loading="loading"
+      label-width="170px"
+      :disabled="mode == 'detail'"
+    >
+          <el-form-item label="活动名称:" prop="raffleName">
+            <el-input
+              v-model="setQuery.raffleName"
+              class="item-width-300"
+              placeholder="请输入活动名称"
+            ></el-input>
+          </el-form-item>
+
+           <el-form-item label="活动类型:">
+            <el-radio-group v-model="setQuery.raffleType">
+                <el-radio :label="1">普通活动</el-radio>
+                <el-radio :label="2">会员专属活动</el-radio>
+            </el-radio-group>
+          </el-form-item>
+
+           <el-form-item label="排序:" prop="sort">
+            <el-input
+              v-model="setQuery.sort"
+              class="item-width-300"
+              placeholder="请输入排序"
+            ></el-input>
+          </el-form-item>
+
+           <el-form-item label="活动周期类型:">
+            <el-radio-group v-model="setQuery.raffleCycle">
+                <el-radio :label="1">固定日期范围</el-radio>
+                <el-radio :label="2">周循环</el-radio>
+            </el-radio-group>
+          </el-form-item>
+
+          <el-form-item v-if="setQuery.raffleCycle == 1" label="活动时间:" prop="endTime">
+             <el-date-picker
+            v-model="date"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            class="item-width-350"
+            type="datetimerange"
+            :default-time="['00:00:00', '23:59:00']"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+          
+          <el-form-item label="选择循环周期:" v-else prop="raffleCycleContent">
+             <el-checkbox-group v-model="setQuery.raffleCycleContent">
+              <el-checkbox :label="1">周一</el-checkbox>
+              <el-checkbox :label="2">周二</el-checkbox>
+              <el-checkbox :label="3">周三</el-checkbox>
+              <el-checkbox :label="4">周四</el-checkbox>
+              <el-checkbox :label="5">周五</el-checkbox>
+              <el-checkbox :label="6">周六</el-checkbox>
+              <el-checkbox :label="7">周天</el-checkbox>
+            </el-checkbox-group>
+          </el-form-item>
+
+           <el-form-item  label="活动封面:" prop="coverImg">
+            <Upload
+              width="100px"
+              height="100px"
+              id="coverImg"
+              type="coverImg"
+              :imgUrl="setQuery.coverImg"
+              @uploadEnd="uploadEnd"
+              :disabled="mode == 'detail'"
+            ></Upload>
+          </el-form-item>
+
+          <el-form-item label="活动背景:" prop="backImg">
+            <Upload
+              width="100px"
+              height="100px"
+              type="backImg"
+              id="backImg"
+              :imgUrl="setQuery.backImg"
+              @uploadEnd="uploadEnd"
+              :disabled="mode == 'detail'"
+            ></Upload>
+          </el-form-item>
+
+            <el-form-item label="是否开启:">
+            <el-radio-group v-model="setQuery.raffleStatus">
+                <el-radio :label="1">是</el-radio>
+                <el-radio :label="2">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+
+            <el-form-item label="是否展示:">
+            <el-radio-group v-model="setQuery.raffleState">
+                <el-radio :label="1">是</el-radio>
+                <el-radio :label="2">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+
+          <el-form-item label="奖品选择:" prop="prizes">
+          <el-button type="primary" size="small" @click="handleAdd">添加奖品</el-button>
+
+           <el-table
+              :data="setQuery.prizes"
+              tooltip-effect="dark"
+              border
+              style="width: 100%"
+            >
+              <el-table-column
+                align="center"
+                label="图标"
+                prop="prizeImg"
+                show-overflow-tooltip
+              >
+              <template slot-scope="scope">
+                <img :src="scope.row.prizeImg" class="img" alt="">
+                </template>
+              </el-table-column>
+               <el-table-column
+                align="center"
+                label="图片"
+                prop="prizeIcon"
+                show-overflow-tooltip
+              >
+              <template slot-scope="scope">
+                <img :src="scope.row.prizeIcon" class="img" alt="">
+                </template>
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="名称"
+                prop="prizeName"
+                show-overflow-tooltip
+              >
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="奖品类型"
+                prop="prizeType"
+                show-overflow-tooltip
+              >
+              <template slot-scope="scope">
+                {{ prizeTypeObj[scope.row.prizeType] }}
+                </template>
+              </el-table-column>
+            
+              <el-table-column
+                align="center"
+                label="数量"
+                prop="prizeNum"
+                show-overflow-tooltip
+              >
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="奖品权重"
+                prop="prizeWeight"
+                show-overflow-tooltip
+              >
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="奖品概率"
+                prop="probability"
+                show-overflow-tooltip
+              >
+               <template slot-scope="scope">
+                  {{scope.row.probability + '%'}}
+                </template>
+              </el-table-column>
+               <el-table-column
+                align="center"
+                label="中奖范围"
+                prop="prizeRang"
+                show-overflow-tooltip
+              >
+              </el-table-column>
+               <el-table-column
+                align="center"
+                label="中奖周期限制"
+                prop="showPrizeWeight"
+                show-overflow-tooltip
+              >
+              <template slot-scope="scope">
+                {{scope.row.prizeLotteryType | filterType}}
+              </template>
+              </el-table-column>
+               <el-table-column
+                align="center"
+                label="中奖数量限制"
+                prop="prizeLotteryNum"
+                show-overflow-tooltip
+              >
+              </el-table-column>
+               <el-table-column
+                align="center"
+                label="发货方式"
+                prop="sendType"
+                show-overflow-tooltip
+              >
+              <template slot-scope="scope">
+                {{sendTypeObj[scope.row.sendType]}}
+              </template>
+              </el-table-column>
+
+              <el-table-column prop="address" align="center" label="操作">
+                <template slot-scope="scope">
+                  <el-button type="text" size="small" @click="handleEdit(scope.row,scope.$index)">编辑</el-button>
+                  <el-button type="text" size="small" @click="handleDel(scope.$index)">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-form-item>
+         
+
+
+          <!-- <el-form-item label="活动详情:" prop="activityDetail">
+            <div style="border: 1px solid #ccc; width: 500px">
+              <Toolbar
+                style="border-bottom: 1px solid #ccc"
+                :editor="editor"
+                :defaultConfig="toolbarConfig"
+                :mode="editorMode"
+              />
+              <Editor
+                style="height: 500px; overflow-y: hidden"
+                v-model="setQuery.activityDetail"
+                :defaultConfig="editorConfig"
+                :mode="editorMode"
+                @onCreated="onCreated"
+              />
+            </div>
+          </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>
+
+
+    <el-dialog :title="title" width="750px" :visible.sync="dialogFormVisible">
+    <el-form label-width="130px" :model="form"
+      ref="form"
+      :rules="rules1">
+       
+        <el-form-item label="奖品类型:">
+          <el-radio-group v-model="form.prizeType" @input="changeType">
+              <el-radio :label="1">加油券</el-radio>
+              <el-radio :label="2">视频会员</el-radio>
+              <el-radio :label="3">商品</el-radio>
+              <el-radio :label="4">文字描述</el-radio>
+              <el-radio :label="5">未中奖</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="选择:" v-if="form.prizeType == 1||form.prizeType == 2||form.prizeType == 3" prop="prizeContent">
+         <el-input
+            v-if="form.prizeContent"
+            v-model="form.prizeContentDetail"
+            disabled
+            class="item-width-300"
+            ></el-input>
+          <el-button  type="primary" size="small" @click="choose(form.prizeType)">选择</el-button>
+
+        </el-form-item>
+         <el-form-item label="奖品图片:" prop="prizeImg">
+          <Upload
+            type="prizeImg"
+            id="prizeImg"
+            width="250px"
+            height="150px"
+            uploadType="OTHER"
+            :imgUrl="form.prizeImg"
+            @uploadEnd="uploadEnd1"
+          ></Upload>
+        </el-form-item>
+
+          <el-form-item label="奖品图标:" prop="prizeIcon">
+          <Upload
+            type="prizeIcon"
+            id="prizeIcon"
+            width="250px"
+            height="150px"
+            uploadType="OTHER"
+            :imgUrl="form.prizeIcon"
+            @uploadEnd="uploadEnd1"
+          ></Upload>
+        </el-form-item>
+     
+        <el-form-item label="奖品名称"  prop="prizeName">
+            <el-input
+            v-model="form.prizeName"
+            :maxlength="6"
+            show-word-limit
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+        <el-form-item label="奖品数量"  prop="prizeNum" v-if="form.prizeType != 5">
+            <el-input
+            v-model.number="form.prizeNum"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+        <el-form-item label="奖品概率"  prop="probability">
+            <el-input
+            v-model="form.probability"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+         <!-- <el-form-item label="显示区域权重"  prop="showPrizeWeight">
+            <el-input
+            v-model.number="form.showPrizeWeight"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item> -->
+         <el-form-item label="奖品说明"  prop="prizeMsg">
+            <el-input
+            v-model="form.prizeMsg"
+            class="item-width-300"
+            ></el-input>
+        </el-form-item>
+        <template v-if="form.prizeType != 5">
+          <el-form-item label="奖品有效期"  prop="valid">
+            中奖后请在
+              <el-input
+              v-model.number="form.valid"
+              class="item-width-100"
+              ></el-input>
+              天内进行领取,过期失效
+          </el-form-item>
+          <el-form-item label="发货方式:" prop="sendType">
+            <el-radio-group v-model="form.sendType" >
+              <template v-if="form.prizeType == 3 ||form.prizeType == 4 ||form.prizeType == 5">
+                <el-radio :label="1">线下自提</el-radio>
+                <el-radio :label="2">邮寄发货</el-radio>
+              </template>
+                <el-radio v-else :label="3" >线上发货</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="自提地址:" v-if="form.sendType == 1"  prop="address">
+              <el-input
+              v-model="form.address"
+              class="item-width-300"
+              ></el-input>
+          </el-form-item>
+        </template>
+
+
+        <el-form-item label="中奖范围:"  prop="prizeRang">
+            <el-select v-model="form.prizeRang" class="item-width-300" multiple 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 label="中奖周期限制:"  prop="prizeLotteryType">
+            <el-select v-model="form.prizeLotteryType" 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 label="中奖数量限制:"  prop="prizeLotteryNum" v-if="form.prizeType != 5 &&form.prizeLotteryType != -1">
+            <el-input
+            v-model.number="form.prizeLotteryNum"
+            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" @click="save1">确 定</el-button>
+  </div>
+</el-dialog>
+
+
+<el-dialog title="选择" width="70%" :visible.sync="dialogTableVisible" custom-class="table-dialog" append-to-body>
+      
+    
+
+    <div v-if="form.prizeType == 1" key="1">
+          <div class="search">
+            <div>
+                <el-input
+                v-model="couponQuery.couponName"
+                size="small"
+                clearable
+                placeholder="请输入活动名称"
+                class="item-width-200 "
+                ></el-input>
+                
+                <el-button
+                class="ml10"
+                type="primary"
+                size="small"
+                icon="el-icon-search"
+                @click="handleSearch"
+            >
+                搜索
+            </el-button>
+            </div>
+        </div>
+          <el-table
+        :data="tableData"
+        tooltip-effect="dark"
+        border
+        v-loading="loading2"
+        style="width: 100%"
+      >
+        <el-table-column
+          align="center"
+          label="选择"
+          prop="id"
+          show-overflow-tooltip
+        >
+        <template slot-scope="scope">
+          <el-radio v-model="form.prizeContent" :label="scope.row.id" @input="selectCoupon($event,scope.row.couponName)"></el-radio>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="couponName"
+          align="center"
+          label="优惠券名称"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          prop="surplusNum"
+          align="center"
+          label="剩余数量"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          prop="useNum"
+          align="center"
+          label="已使用"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          prop="createTime"
+          align="center"
+          label="创建时间"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+      </el-table>
+      <div class="page-box">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          background
+          :current-page="couponQuery.currentPage"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="couponQuery.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+        >
+        </el-pagination>
+      </div>
+    </div>
+    <div v-else-if="form.prizeType == 2" key="2">
+      <div class="search">
+            <div>
+                <el-input
+                v-model="query.title"
+                size="small"
+                clearable
+                placeholder="请输入名称"
+                class="item-width-200 "
+                ></el-input>
+                
+                <el-button
+                class="ml10"
+                type="primary"
+                size="small"
+                icon="el-icon-search"
+                @click="handleSearch1"
+            >
+                搜索
+            </el-button>
+            </div>
+        </div>
+          <el-table
+        :data="tableData1"
+        tooltip-effect="dark"
+        border
+        v-loading="loading1"
+        style="width: 100%"
+      >
+        <el-table-column
+          align="center"
+          label="选择"
+          prop="pid"
+          show-overflow-tooltip
+        >
+        <template slot-scope="scope">
+          <el-radio v-model="form.prizeContent" :label="scope.row.pid" @input="selectCoupon($event,scope.row.title)"></el-radio>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="title"
+          align="center"
+          label="视频会员名称"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          prop="salePrice"
+          align="center"
+          label="价格"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+      </el-table>
+      <div class="page-box">
+        <el-pagination
+          @size-change="handleSizeChange1"
+          @current-change="handleCurrentChange1"
+          background
+          :current-page="query.page"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="query.size"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total1"
+        >
+        </el-pagination>
+      </div>
+    </div>
+    <div v-else-if="form.prizeType == 3" key="3">
+      <div class="search">
+            <div>
+                <el-input
+                v-model="query1.goodsName"
+                size="small"
+                clearable
+                placeholder="请输入商品名称"
+                class="item-width-200 "
+                ></el-input>
+                
+                <el-button
+                class="ml10"
+                type="primary"
+                size="small"
+                icon="el-icon-search"
+                @click="handleSearch2"
+            >
+                搜索
+            </el-button>
+            </div>
+        </div>
+          <el-table
+        :data="tableData2"
+        tooltip-effect="dark"
+        border
+        v-loading="loading3"
+        style="width: 100%"
+      >
+        <el-table-column
+          align="center"
+          label="选择"
+          prop="goodsId"
+          show-overflow-tooltip
+        >
+        <template slot-scope="scope">
+          <el-radio v-model="form.prizeContent" :label="scope.row.goodsId" @input="selectCoupon($event,scope.row.goodsName)"></el-radio>
+          </template>
+        </el-table-column>
+         <el-table-column
+          align="center"
+          label="商品图片"
+          prop="setMealCode"
+          show-overflow-tooltip
+        >
+        <template slot-scope="scope">
+          <img :src="scope.row.goodsImg" class="img" alt="">
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="goodsName"
+          align="center"
+          label="商品名称"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+        <el-table-column
+          prop="goodsType"
+          align="center"
+          label="类型"
+          show-overflow-tooltip
+        >
+          <template slot-scope="scope">
+            {{goodsTypeObj[scope.row.goodsType]||scope.row.goodsType}}
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="shopName"
+          align="center"
+          label="店铺名称"
+          show-overflow-tooltip
+        >
+        </el-table-column>
+      </el-table>
+      <div class="page-box">
+        <el-pagination
+          @size-change="handleSizeChange2"
+          @current-change="handleCurrentChange2"
+          background
+          :current-page="query1.currentPage"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="query1.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total2"
+        >
+        </el-pagination>
+      </div>
+    </div>
+    </el-dialog>
+
+
+
+
+  </div>
+</template>
+
+<script>
+import {getLuckyDrawDetail,saveOrUpdateLuckyDraw} from '@/api/luckyDraw.js'
+import Upload from "@/components/Upload";
+import Vue from "vue";
+import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
+import OSS from "ali-oss";
+import { requestUploadImg, finishUploadImg,getList } from "@/api/common";
+import { getCouponList } from "@/api/coupon";
+import {getGoodsList,goodsList} from '@/api/goods'
+
+export default Vue.extend({
+  components: {
+    Upload,
+    Editor,
+    Toolbar,
+  },
+  data() {
+    let validateProbability = (rule, value, callback) => {
+        if (isNaN(value)) {
+          callback(new Error('请输入数字或小数'));
+        } else {
+          callback();
+        }
+      }
+    
+    return {
+      prizeTypeObj:{
+        1:'优惠券',
+        2:'视频会员',
+        3:'商品',
+        4:'文字描述',
+        5:'未中奖'
+      },
+      sendTypeObj:{
+        1:'线下自提',
+        2:'邮寄发货',
+        3:'线上发货',
+      },
+      goodsTypeObj:{},
+      total:0,
+      total1:0,
+      total2:0,
+      loading1:false,
+      loading2:false,
+      loading3:false,
+      tableData:[],
+      tableData1:[],
+      tableData2:[],
+      editIndex:0,
+      options:[
+        {
+          label:'非会员',
+          value:'0'
+        },
+      ],
+      options1:[
+        {
+          label:'每日',
+          value:1
+        },
+        {
+          label:'每周',
+          value:2
+        },
+        {
+          label:'每月',
+          value:3
+        },
+        {
+          label:'无限制',
+          value:-1
+        }
+      ],
+      title:'',
+      dialogTableVisible:false,
+      dialogFormVisible:false,
+      status:'',
+      date:'',
+      editor: null,
+      editorMode: "default", // or 'simple'
+      toolbarConfig: {},
+      editorConfig: {
+        placeholder: "请输入内容...",
+        MENU_CONF: {
+          uploadImage: {
+            // 自定义上传
+            customUpload(file, insertFn) {
+              // file 即选中的文件
+              requestUploadImg({
+                fineName: file.name,
+                operate: "OTHER",
+              }).then((res) => {
+                if (res.state == "Success") {
+                  const client = new OSS({
+                    // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
+                    region: res.content.endPoint.split(".")[0],
+                    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
+                    accessKeyId: res.content.token.accessKeyId,
+                    accessKeySecret: res.content.token.accessKeySecret,
+                    // 填写Bucket名称。
+                    bucket: res.content.bucket,
+                    stsToken: res.content.token.securityToken,
+                  });
+
+                  client
+                    .multipartUpload(res.content.paths[0].join("/"), file)
+                    .then((r) => {
+                      // 上传完成
+                      finishUploadImg([{ path: res.content.paths[0] }]).then(
+                        (msg) => {
+                          if (msg.state == "Success") {
+                            let url =
+                              "http://" +
+                              res.content.bucket +
+                              "." +
+                              res.content.endPoint +
+                              "/" +
+                              res.content.paths[0].join("/");
+                            insertFn(url, "", "");
+                          }
+                        }
+                      );
+                    })
+                    .catch((err) => {
+                      console.log(err); //上传失败之后
+                    });
+                }
+              });
+            },
+          },
+        },
+      },
+      mode: "add",
+      loading: false,
+      limited:1,
+      setQuery: {
+        "backImg": "",
+        "coverImg": "",
+        "endTime": "",
+        "prizes": [
+          // {
+          //   "prizeIcon": "",
+          //   "prizeImg": "",
+          //   "prizeMsg": "",
+          //   "prizeName": "",
+          //   "prizeNum": 0,
+          //   "prizeRang": "",
+          //   "prizeType": 0,
+          //   "prizeWeight": 0,
+          //   "probability":0,
+          //   "sendType": 0,
+          //   "showPrizeWeight": 0,
+          //   "valid": 0
+          // }
+        ],
+        "raffleCycle": 1,
+        "raffleCycleContent": [],
+        "raffleName": "",
+        "raffleState": 1,
+        "raffleStatus": 1,
+        "raffleType": 2,
+        "sort": 0,
+        "startTime": ""
+      },
+      form:{
+
+      },
+      couponQuery: {
+         couponName:'',
+        startTime:'',
+        endTime:'',
+        couponType: 3,
+        status:'2',
+        currentPage: 1,
+        pageSize: 10,
+      },
+      query:{
+          title:'',
+          regionCode:'520100',
+					productType:['Recharge'],
+					page:0,
+					size:10
+      },
+      query1: {
+        applyState:'',
+        status: '3',
+        goodsName: "",
+        currentPage: 1,
+        pageSize: 10,
+      },
+      couponName:'',
+      rules:{
+          raffleName: [
+            { required: true, message: "请输入活动名称", trigger: "blur" },
+          ],
+          endTime: [
+            { required: true, message: "请选择活动时间", trigger: "change" },
+          ],
+           raffleCycleContent: [
+            { required: true, message: "请选择循环周期", trigger: "change" },
+          ],
+          coverImg: [
+            { required: true, message: "请上传活动封面", trigger: "change" },
+          ],
+          backImg: [
+            { required: true, message: "请上传活动主图", trigger: "change" },
+          ],
+          prizes:[
+            { type:'array',required: true, message: "请添加奖品", trigger: "change" },
+          ],
+  
+        },
+      rules1:{
+        
+          prizeContent: [
+            { required: true, message: "请选择", trigger: "change" },
+          ],
+          prizeIcon: [
+            { required: true, message: "请上传奖品图标", trigger: "change" },
+          ],
+          prizeImg: [
+            { required: true, message: "请上传奖品图片", trigger: "change" },
+          ],
+           prizeRang: [
+            { required: true, message: "请选择中奖范围", trigger: "change" },
+          ],
+          prizeName: [
+            { required: true, message: "请输入奖品名称", trigger: "blur" },
+          ],
+          prizeMsg: [
+            { required: true, message: "请输入奖品说明", trigger: "blur" },
+          ],
+          prizeNum: [
+            { required: true, message: "请输入奖品数量", trigger: "blur" },
+            { type:'number',min:1,max:9999999999, message: "数量应在1-9999999999", trigger: "blur" },
+          ],
+          valid: [
+            { required: true, message: "请输入有效期", trigger: "blur" },
+            { type:'number',min:0,max:9999999999, message: "有效期需要数字", trigger: "blur" },
+          ],
+           sendType: [
+            { required: true, message: "请选择发货方式", trigger: "change" },
+          ],
+          probability: [
+            { required: true, message: "请输入概率", trigger: "blur" },
+             { validator: validateProbability, trigger: 'blur' }
+          ],
+          prizeWeight: [
+            { required: true, message: "请输入权重", trigger: "blur" },
+          ],
+           showPrizeWeight: [
+            { required: true, message: "请输入显示权重", trigger: "blur" },
+          ],
+            address: [
+            { required: true, message: "请输入显示地址", trigger: "blur" },
+          ],
+           prizeLotteryType: [
+            { required: true, message: "请选择中奖周期限制", trigger: "change" },
+          ],
+           prizeLotteryNum: [
+            { required: true, message: "请输入中奖数量限制", trigger: "blur" },
+          ],
+      },
+      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.startTime = val[0]
+        this.setQuery.endTime = val[1]
+      }else{
+        this.setQuery.startTime = ''
+        this.setQuery.endTime = ''
+      }
+    },
+  
+  },
+  filters: {
+    filterType(val) {
+     let arr = [
+        {
+          label:'每日',
+          value:1
+        },
+        {
+          label:'每周',
+          value:2
+        },
+        {
+          label:'每月',
+          value:3
+        },
+        {
+          label:'无限制',
+          value:-1
+        }
+      ]
+      let msg = ''
+      arr.forEach(item=>{
+        if(item.value == val){
+          msg = item.label
+        }
+      })
+      return msg
+    }
+   },
+  methods: {
+    changeType(val){
+      console.log('类型变化',val);
+      if(val == 1 || val == 2){
+        this.form.sendType = 3
+      }else if(val == 3 || val == 4 || val == 5){
+        this.form.sendType = 1
+      }
+
+
+      // this.form.prizeContent = ''
+      this.$set(this.form,'prizeContent','')
+    },
+    choose(type){
+      this.dialogTableVisible = true
+
+      if(type == 1){
+        this.handleSearch()
+      }else if(type == 2){
+        this.handleSearch1()
+      }else if(type == 3){
+        this.handleSearch2()
+      }
+    },
+    // 优惠券搜索
+    handleSearch(){
+      this.couponQuery.currentPage = 1
+      this.getCouponList();
+    },
+    handleSizeChange(val) {
+      this.couponQuery.currentPage = 1;
+      this.couponQuery.pageSize = val;
+      this.getCouponList()
+    },
+    handleCurrentChange(val) {
+      this.couponQuery.currentPage = val;
+      this.getCouponList()
+    },
+    // 虚拟商品搜索
+    handleSearch1(){
+      this.query.page = 1
+      this.getGoodsList();
+    },
+    handleSizeChange1(val) {
+      this.query.page = 1;
+      this.query.size = val;
+      this.getGoodsList()
+    },
+    handleCurrentChange1(val) {
+      this.query.page = val;
+      this.getGoodsList()
+    },
+    // 商品搜索
+    handleSearch2(){
+      this.query1.currentPage = 1
+      this.goodsList();
+    },
+    handleSizeChange2(val) {
+      this.query1.currentPage = 1;
+      this.query1.pageSize = val;
+      this.goodsList()
+    },
+    handleCurrentChange2(val) {
+      this.query1.currentPage = val;
+      this.goodsList()
+    },
+    // 选择优惠券
+    selectCoupon(e,name){
+      console.log(e,name);
+      // this.couponName = name
+      this.$set(this.form,'prizeContentDetail',name)
+
+    },
+    // 小桔优惠券列表
+    getCouponList(){
+      this.loading2 = true
+      getCouponList(this.couponQuery).then((res) => {
+          this.loading2 = false;
+          if (res.state == "Success") {
+            this.tableData = res.content.records;
+            this.total = res.content.total;
+          }
+        });
+    },
+    // 获取视频会员商品
+    getGoodsList(){
+      this.loading1 = true
+      let query = JSON.parse(JSON.stringify(this.query))
+      query.page--
+      getGoodsList(query).then(res=>{
+        this.loading1 = false
+        if(res.state == 'Success'){
+          this.tableData1 = res.content.content
+          this.tableData1.map(item=>{
+            item.salePrice = (item.salePrice/100).toFixed(2)
+          })
+          this.total1 = res.content.totalElements
+        }
+      })
+    },
+    // 商品列表
+    goodsList(){
+      this.loading3 = true
+      goodsList(this.query1).then(res=>{
+        this.loading3 = false
+        if(res.state == 'Success'){
+          this.tableData2 = res.content.records
+          this.total2 = res.content.total
+        }
+      })
+    },
+    handleAdd(){
+      this.dialogFormVisible = true
+      this.title = '添加'
+      this.form = {
+            "prizeIcon": "",
+            "prizeImg": "",
+            "prizeMsg": "",
+            "prizeName": "",
+            "prizeNum": 1,
+            "prizeRang": "",
+            "prizeType": 1,
+            "prizeWeight": 0,
+            "probability": 0,
+            "sendType": '',
+            "showPrizeWeight": 0,
+            "prizeContentDetail": '',
+            "valid": 0,
+            "address":"",
+            "prizeContent":"",
+            "prizeLotteryType":"",
+            "prizeLotteryNum":"",
+      }
+    },
+    handleEdit(row,index){
+      this.dialogFormVisible = true
+      this.title = '编辑'
+      this.editIndex = index
+       this.form = {
+          "id": row.id,
+          "prizeIcon": row.prizeIcon,
+          "prizeImg": row.prizeImg,
+          "prizeMsg": row.prizeMsg,
+          "prizeName": row.prizeName,
+          "prizeNum": row.prizeNum,
+          "prizeRang": row.prizeRang.split(','),
+          "prizeType": row.prizeType,
+          "prizeWeight": row.prizeWeight,
+          "probability": row.probability,
+          "sendType": row.sendType,
+          "showPrizeWeight": row.showPrizeWeight,
+          "prizeContentDetail": row.prizeContentDetail,
+          "valid": row.valid,
+          "address":row.address,
+          "prizeContent":Number(row.prizeContent),
+          "prizeLotteryType":row.prizeLotteryType,
+          "prizeLotteryNum":row.prizeLotteryNum, 
+      }
+      
+    },
+
+    handleDel(index){
+      this.setQuery.prizes.splice(index,1)
+    },
+    validatePrice  (rule, value, callback) {
+      if(value<0.01||value>999999){
+        callback(new Error('价格只支持0.01~999999'));
+      }else{
+        callback()
+      }
+    },
+    onCreated(editor) {
+      this.editor = Object.seal(editor); // 一定要用 Object.seal() ,否则会报错
+      if (this.mode == "detail") {
+        this.editor.disable();
+      }
+    },
+    uploadEnd(val) {
+      console.log(val);
+      this.setQuery[val.type] = val.url;
+    },
+    uploadEnd1(val) {
+      console.log(val);
+      this.form[val.type] = val.url;
+    },
+    save() {
+      if(this.setQuery.prizes.length != 8){
+        return this.$message.error('奖品必须设置为8个');
+      }
+      this.$refs.setQuery.validate((v) => {
+        if (v) {
+          this.loading = true;
+          let obj = JSON.parse(JSON.stringify(this.setQuery))
+            obj.raffleCycleContent = obj.raffleCycleContent.toString()
+          saveOrUpdateLuckyDraw(obj).then((res) => {
+            this.loading = false;
+            if (res.state == "Success") {
+              this.$notify({
+                title: "成功",
+                message: "操作成功",
+                type: "success",
+              });
+              this.$router.push("/operationManage/luckyDrawManage/index");
+            }else{
+              this.loading = false;
+            }
+          });
+        }else{
+          this.$message.error('请检查是否有必填项未填');
+        }
+      });
+    },
+
+    save1(){
+       this.$refs.form.validate((v) => {
+        if (v) {
+          let obj = JSON.parse(JSON.stringify(this.form))
+          obj.prizeRang = obj.prizeRang.join()
+          if(this.title == '添加'){
+            this.setQuery.prizes.push(obj)
+          }else{
+            this.setQuery.prizes.splice(this.editIndex,1,obj)
+          }
+          this.dialogFormVisible = false
+        }else{
+          this.$message.error('请检查是否有必填项未填');
+        }
+      });
+    },
+
+    // 详情
+    get() {
+      this.loading = true;
+      let raffleId = this.$route.query.id
+      getLuckyDrawDetail({raffleId,regionCode:'520100'}).then((res) => {
+        this.loading = false;
+        if (res.state == "Success") {
+          this.setQuery = res.content;
+          if(this.setQuery.raffleCycle == 2){
+            this.setQuery.raffleCycleContent = this.setQuery.raffleCycleContent.split(',').map(Number)
+          }else{
+             this.setQuery.raffleCycleContent = []
+          }
+          // this.setQuery.id = id
+          // this.date = [this.setQuery.startTime+':00',this.setQuery.endTime+':00']
+        }
+      });
+    },
+    getList() {
+      getList({currentPage:1,pageSize:99,status:1}).then((res) => {
+        if (res.state == "Success") {
+          res.content.records.map(item=>{
+            this.options.push({
+              label:item.setMealName,
+              value:item.setMealCode
+            })
+          })
+        }
+      });
+    },
+
+  },
+  created() {
+    this.goodsTypeObj = JSON.parse(sessionStorage.getItem('goodsTypeObj')) 
+    this.getList()
+    this.mode = this.$route.query.mode || "add";
+    this.status = this.$route.query.status
+    if (this.$route.query.id) {
+        this.get();
+    }
+  },
+})
+</script>
+<style src="@wangeditor/editor/dist/css/style.css"></style>
+
+<style lang="scss" >
+@import "@/styles/element-variables";
+.table-dialog{
+  .img{
+    width: 40px!important;
+    height: 40px!important;
+  }
+}
+.addActivity {
+  padding-bottom: 40px;
+  .cell{
+    .img{
+    width: 40px!important;
+    height: 40px!important;
+  }
+  }
+  .item {
+    display: flex;
+    align-items: flex-start;
+    margin-bottom: 10px;
+    .ml20{
+      margin-left: 20px !important;
+    }
+    .mb20{
+      margin-bottom: 20px;
+    }
+    .textarea textarea{
+      height: 40px;
+    }
+    .icon {
+      font-size: 18px;
+      font-weight: bold;
+      margin-left: 10px;
+      cursor: pointer;
+      margin-top: 10px;
+    }
+    .box {
+    }
+  }
+  .btn-group {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+
+
+}
+</style>

+ 340 - 0
src/views/operationManage/luckyDrawManage/dataList.vue

@@ -0,0 +1,340 @@
+
+<template>
+  <div class="dataList app-container">
+
+     <div class="search">
+        <div>
+            <el-input
+            v-model="query.userName"
+            size="small"
+            clearable
+            placeholder="请输入用户名称"
+            class="item-width-200 "
+            ></el-input>
+             <el-input
+            v-model="query.phoneNum"
+            size="small"
+            clearable
+            placeholder="请输入手机号码"
+            class="item-width-200 ml10"
+            ></el-input>
+            <el-select
+          v-model="query.prizeType"
+          size="small"
+          class="item-width-200 ml10"
+          placeholder="请选择奖品类型"
+          clearable
+        >
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+       
+        <el-button
+        class="ml10"
+        type="primary"
+        size="small"
+        icon="el-icon-search"
+        @click="handleSearch"
+        >
+            搜索
+        </el-button>
+        </div>
+    </div>
+
+
+  
+    <!-- <div class="export-box">
+         <el-button
+            type="primary"
+            size="small"
+            :disabled="total == 0"
+            @click="handleExport"
+            :loading="downloadLoading"
+        >
+            导出数据
+        </el-button>
+    </div> -->
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+      <el-table-column
+        align="center"
+        label="用户名称"
+        prop="nickname"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="手机号码"
+        prop="phoneNum"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="奖品信息"
+        prop="orderNo"
+        show-overflow-tooltip
+      >
+      <template slot-scope="scope">
+        <img :src="scope.row.prizeIcon" class="img" alt=""> <span>{{scope.row.prizeName}}</span>
+        </template>
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="抽奖时间"
+        prop="createTime"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="领取方式"
+        prop="orderNo"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+       <span>{{ sendTypeObj[scope.row.sendType]}}</span>
+        </template>
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="状态"
+        prop="orderNo"
+        show-overflow-tooltip
+      >
+      
+       <template slot-scope="scope">
+       <span>{{scope.row.status == 1?'未发放':'已发放'}}</span>
+        </template>
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="备注"
+        prop="notes"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+         <div style="text-align:left" v-html="filterNote(scope.row.notes)"></div>
+        </template>
+      </el-table-column>
+       <el-table-column prop="address" align="center" label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" v-if="scope.row.status == 1" @click="handleAudit(scope.row.rafflePrizeLogId)">发放</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>
+  </div>
+</template>
+  
+  <script>
+  import {debounce} from '@/utils/index'
+  import {verification} from '@/api/activity'
+  import {prizeList,sendPrize} from '@/api/luckyDraw.js'
+
+
+  import {timeFormat} from '@/utils/index'
+export default {
+  name: "dataList",
+  data() {
+    return {
+      sendTypeObj:{
+        1:'线下自提',
+        2:'邮寄发货',
+        3:'线上发货',
+      },
+      options:[
+        {
+          label:'加油券',
+          value:1
+        },
+        {
+          label:'视频会员',
+          value:2
+        },
+        {
+          label:'普通商品',
+          value:3
+        },
+        {
+          label:'文字描述',
+          value:4
+        },
+      ],
+      tableData: [],
+      loading: false,
+      downloadLoading: false,
+      list:[],
+      query: {
+        "raffleId":0,
+        "userName": '',
+        "prizeType": '',
+        "phoneNum": '',
+        "currentPage": 1,
+        "pageSize": 10,
+      },
+      title: "",
+      total: 0,
+    };
+  },
+
+  methods: {
+    filterNote(value) {
+      let obj = JSON.parse(value)
+      let keyObj = {
+        address:'地址',
+        phone:'手机号',
+        name:'姓名'
+      }
+      let str = ''
+      for (const key in obj) {
+        if (Object.hasOwnProperty.call(obj, key)) {
+            str+= keyObj[key]+':'+obj[key]+'<br>'
+          
+        }
+      }
+      return str || '无'
+    },
+    handleSearch(){
+      this.query.currentPage = 1
+      this.prizeList();
+    },
+
+    handleExport() {
+      this.downloadLoading = true
+      let query = JSON.parse(JSON.stringify(this.query))
+      query.currentPage = 1
+      query.pageSize = this.total
+       prizeList(query).then(res=>{
+        this.loading = false
+        if(res.state == 'Success'){
+          this.list = res.content.records
+          this.Export()
+        }
+      })
+      
+    },
+    Export(){
+      import('@/vendor/Export2Excel').then(excel => {
+        const tHeader = []
+        for (const key in this.list[0]) {
+          if (Object.hasOwnProperty.call(this.list[0], key)) {
+            tHeader.push(key)
+          }
+        }
+        const multiHeader = [[`活动时间:${this.info.activityStartTime} 至 ${this.info.activityEndTime}`,`报名时间:${this.info.signupStartTime} 至 ${this.info.signupEndTime}`,`报名费用:${this.info.price}元`]]
+        tHeader.map((item,index)=>{
+          if(!multiHeader[0][index]){
+            multiHeader[0][index] = ''
+          }
+        })
+        const data = this.formatJson(tHeader, this.list)
+        // console.log(data);
+        // let data = [[1,2,3,4,5]]
+        excel.export_json_to_excel({
+          multiHeader,
+          header: tHeader,
+          data,
+          filename: this.info.activityName,
+          // autoWidth: false,
+          bookType: 'xlsx'
+        })
+        this.downloadLoading = false
+      })
+    },
+    formatJson(filterVal, jsonData) {
+      return jsonData.map(v => filterVal.map(j => {
+        if (j === 'timestamp') {
+          return parseTime(v[j])
+        } else {
+          return v[j]
+        }
+      }))
+    },
+    timeFormat(val){
+      return timeFormat(val)
+    },
+    handleAudit(rafflePrizeLogId){
+         this.$confirm(`此操作将发放该奖励, 是否继续?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        }).then(() => {
+          sendPrize({rafflePrizeLogId}).then(res=>{
+            if(res.state == 'Success'){
+              this.handleCurrentChange(1)
+                 this.$notify({
+                title: "成功",
+                message: "操作成功",
+                type: "success",
+              });
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.currentPage = 1;
+      this.query.pageSize = val;
+      this.prizeList()
+    },
+    handleCurrentChange(val) {
+      this.query.currentPage = val;
+      this.prizeList()
+    },
+
+     prizeList(){
+      this.loading = true
+      prizeList(this.query).then(res=>{
+        this.loading = false
+        if(res.state == 'Success'){
+          this.tableData = res.content.records
+          this.total = res.content.total
+        }
+      })
+    }
+  },
+  created() {
+    this.query.raffleId = this.$route.query.id
+   this.prizeList()
+  },
+};
+</script>
+  
+<style lang="scss" >
+.dataList {
+    .img{
+      width: 40px;
+      height: 40px;
+    }
+
+    .export-box{
+        display: flex;
+        justify-content: flex-end;
+    }
+}
+
+</style>
+  

+ 388 - 0
src/views/operationManage/luckyDrawManage/index.vue

@@ -0,0 +1,388 @@
+
+<template>
+  <div class="luckyDrawManage app-container">
+    <div class="search">
+        <div>
+            <el-input
+            v-model="query.raffleName"
+            size="small"
+            clearable
+            placeholder="请输入活动名称"
+            class="item-width-200 "
+            ></el-input>
+            <el-select
+          v-model="query.status"
+          size="small"
+          class="item-width-200 ml10"
+          placeholder="请选择活动状态"
+          clearable
+        >
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+        <el-select
+          v-model="query.state"
+          size="small"
+          class="item-width-200 ml10"
+          placeholder="请选择展示状态"
+          clearable
+        >
+          <el-option
+            v-for="item in options1"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+            <el-button
+            class="ml10"
+            type="primary"
+            size="small"
+            icon="el-icon-search"
+            @click="handleSearch"
+        >
+            搜索
+        </el-button>
+        </div>
+        <el-button
+            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="活动ID"
+        prop="id"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="排序"
+        prop="sort"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="活动名称"
+        prop="raffleName"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="活动时间"
+        prop="orderNo"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+        <div v-if="scope.row.raffleCycle == 1">
+          {{scope.row.startTime}} 至 {{scope.row.endTime}}
+        </div>
+        <div v-else>
+          {{scope.row.raffleCycleContent | filterDate}}
+        </div>
+        
+        </template>
+      </el-table-column>
+     
+      <el-table-column
+        align="center"
+        label="活动状态"
+        prop="msg"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="展示状态"
+        prop="activityType"
+        show-overflow-tooltip
+      >
+       <template slot-scope="scope">
+        <el-switch
+          v-model="scope.row.raffleState"
+          :active-value="1"
+          :inactive-value="2"
+          disabled>
+        </el-switch>
+       </template>
+      </el-table-column>
+
+       <el-table-column prop="address" align="center" label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleData(scope.row.id)">中奖数据</el-button>
+          <!-- <el-button type="text" size="small" v-if="scope.row.status != '已结束'" @click="handleShare(scope.row)">分享</el-button> -->
+          <el-button type="text" size="small" @click="handleEdit(scope.row,'edit')">编辑</el-button>
+          <el-button type="text" size="small" @click="handleStop(scope.row.id,scope.row.raffleStatus)">{{scope.row.raffleStatus==1?'停止':'开启'}}</el-button>
+          <el-button type="text" size="small" @click="handleRule(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
+    :visible.sync="showCode"
+    width="400px"
+    center>
+    <div v-loading="codeLoading">
+      <img style="width:300px;height:300px;margin:0 auto;display:block" :src="codeImg" alt="">
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <a id="downBtn" v-show="false" :download="downName" :href="codeImg" >下载</a>
+      <el-button @click="download">下载</el-button>
+      <el-button @click="refresh">刷新二维码</el-button>
+    </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+  <script>
+  import {debounce} from '@/utils/index'
+  import {getLuckyDrawList,activityDel,luckyDrawEnable} from '@/api/luckyDraw.js'
+  import {timeFormat} from '@/utils/index'
+  import {BASE_URL} from '@/utils/config'
+  import axios from 'axios'
+  import {clear} from '@/api/common'
+export default {
+  name: "luckyDrawManage",
+  data() {
+    return {
+      options:[
+        {
+          value:1,
+          label:'未开始'
+        },
+        {
+          value:2,
+          label:'进行中'
+        },
+        {
+          value:3,
+          label:'已结束'
+        }
+      ],
+      options1:[
+        {
+          value:1,
+          label:'展示'
+        },
+        {
+          value:2,
+          label:'不展示'
+        },
+      ],
+      tableData: [],
+      loading: false,
+      codeLoading: false,
+      showCode: false,
+      codeImg:'',//收款码
+      downName:'',//下载名称
+      query: {
+        raffleName:'',
+        "status":'',
+        "state":'',
+        "currentPage": 1,
+        "pageSize": 10,
+      },
+      title: "",
+      total: 0,
+      id:''
+    };
+  },
+  filters: {
+    filterDate: function(value) {
+      let arr = ['','周一','周二','周三','周四','周五','周六','周日']
+      let str = ''
+      let list = value.split(',')
+      list.map(item=>{
+        str = str + arr[item] +'、'
+      })
+      return str;
+    }
+  },
+  methods: {
+    handleRule(id){
+      this.$router.push({
+            path:'/operationManage/luckyDrawManage/luckyDrawRule',
+            query:{
+              id
+            }
+        })
+    },
+    handleShare(item){
+      this.showCode = true
+      this.codeLoading = true
+      this.downName = item.activityName + "活动码"
+      this.id = item.id
+      const platformType = localStorage.getItem('platformType')
+      axios(
+        {
+      url: BASE_URL+'zswl-cloud-bdb/promotion/qrcode',
+      method: 'post',
+      responseType: "arraybuffer",
+      data:{
+        "page": "signUp/index",
+        "scene": item.id,
+        "platformType" : platformType
+      }
+    }).then(res=>{
+      console.log(res);
+      this.codeLoading = false
+       let blob = new Blob([res.data], { type: "image/png" });
+       this.codeImg =  (window.URL || window.webkitURL).createObjectURL(blob);
+      })
+    },
+    refresh(){
+      this.codeLoading = true
+      clear({type:1}).then(res=>{
+          if(res.state == 'Success'){
+             axios(
+              {
+              url: BASE_URL+'zswl-cloud-bdb/promotion/qrcode',
+              method: 'post',
+              responseType: "arraybuffer",
+              data:{
+                "page": "signUp/index",
+                "scene": this.id
+              }
+            }).then(res=>{
+              console.log(res);
+              this.codeLoading = false
+              let blob = new Blob([res.data], { type: "image/png" });
+              this.codeImg =  (window.URL || window.webkitURL).createObjectURL(blob);
+            })
+          }
+      })
+    },
+    // 下载
+    download(){
+      document.getElementById('downBtn').click()
+    },
+    handleAdd(){
+        this.$router.push({
+            path:'/operationManage/luckyDrawManage/addLuckyDraw',
+            query:{
+            mode:'add',
+            }
+        })
+    },
+    handleSearch(){
+      this.query.currentPage = 1
+      this.getLuckyDrawList();
+    },
+    timeFormat(val){
+      return timeFormat(val)
+    },
+    handleData(id){
+        this.$router.push({
+          path:'/operationManage/luckyDrawManage/dataList',
+          query:{
+            id
+          }
+        })
+    },
+    handleEdit(row,mode){
+      if(row.raffleStatus == 1){
+        return this.$message({
+          message: '进行中的活动不能编辑',
+          type: 'error'
+        });
+      }
+
+      this.$router.push({
+        path:'/operationManage/luckyDrawManage/addLuckyDraw',
+        query:{
+          mode,
+          id:row.id,
+        }
+      })
+    },
+
+    handleStop(raffleId,status){
+      let msg = ''
+      if(status == 1){
+        msg = '关闭'
+      }else{
+        msg = '开启'
+      }
+         this.$confirm(`此操作将${msg}该活动, 是否继续?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        }).then(() => {
+          luckyDrawEnable({raffleId,status:status == 1?2:1}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: "成功",
+                message: "操作成功",
+                type: "success",
+              });
+              this.handleSearch()
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.currentPage = 1;
+      this.query.pageSize = val;
+      this.getLuckyDrawList()
+    },
+    handleCurrentChange(val) {
+      this.query.currentPage = val;
+      this.getLuckyDrawList()
+    },
+    getLuckyDrawList(){
+      this.loading = true
+      getLuckyDrawList(this.query).then(res=>{
+        this.loading = false
+        if(res.state == 'Success'){
+          this.tableData = res.content.records
+          this.total = res.content.total
+        }
+      })
+    }
+  },
+  created() {
+    this.getLuckyDrawList()
+  },
+};
+</script>
+
+<style lang="scss" >
+.luckyDrawManage {
+
+}
+
+</style>

+ 160 - 0
src/views/operationManage/luckyDrawManage/luckyDrawRule.vue

@@ -0,0 +1,160 @@
+<!--
+ * @Author: wenjie 1454560336@qq.com
+ * @Date: 2024-09-20 09:52:06
+ * @LastEditors: wenjie 1454560336@qq.com
+ * @LastEditTime: 2024-09-25 09:11:55
+ * @FilePath: \admin-manage\src\views\operationManage\luckyDrawManage\luckyDrawRule.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+-->
+<template>
+    <div class="luckyDrawRule" v-loading="loading">
+
+        <div style="border: 1px solid #ccc; width: 500px">
+              <Toolbar
+                style="border-bottom: 1px solid #ccc"
+                :editor="editor"
+                :defaultConfig="toolbarConfig"
+                :mode="editorMode"
+              />
+              <Editor
+                style="height: 500px; overflow-y: hidden"
+                v-model="content"
+                :defaultConfig="editorConfig"
+                :mode="editorMode"
+                @onCreated="onCreated"
+              />
+            </div>
+
+            <div class="btn-group">
+                <el-button>取 消</el-button>
+                <el-button type="primary" :loading="loading" @click="save">确 定</el-button>
+            </div>
+
+    </div>
+</template>
+
+<script>
+import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
+import OSS from "ali-oss";
+import Vue from "vue";
+import { requestUploadImg, finishUploadImg } from "@/api/common";
+import {getLuckyDrawDetail,luckyDrawRule} from '@/api/luckyDraw.js'
+
+    export default Vue.extend({
+        components: {
+            Editor,
+            Toolbar,
+        },
+        data() {
+            return {
+                loading:false,
+                content:'',
+                editor: null,
+                editorMode: "default", // or 'simple'
+                toolbarConfig: {},
+                editorConfig: {
+                    placeholder: "请输入内容...",
+                    MENU_CONF: {
+                    uploadImage: {
+                        // 自定义上传
+                        customUpload(file, insertFn) {
+                        // file 即选中的文件
+                        requestUploadImg({
+                            fineName: file.name,
+                            operate: "OTHER",
+                        }).then((res) => {
+                            if (res.state == "Success") {
+                            const client = new OSS({
+                                // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
+                                region: res.content.endPoint.split(".")[0],
+                                // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
+                                accessKeyId: res.content.token.accessKeyId,
+                                accessKeySecret: res.content.token.accessKeySecret,
+                                // 填写Bucket名称。
+                                bucket: res.content.bucket,
+                                stsToken: res.content.token.securityToken,
+                            });
+
+                            client
+                                .multipartUpload(res.content.paths[0].join("/"), file)
+                                .then((r) => {
+                                // 上传完成
+                                finishUploadImg([{ path: res.content.paths[0] }]).then(
+                                    (msg) => {
+                                    if (msg.state == "Success") {
+                                        let url =
+                                        "http://" +
+                                        res.content.bucket +
+                                        "." +
+                                        res.content.endPoint +
+                                        "/" +
+                                        res.content.paths[0].join("/");
+                                        insertFn(url, "", "");
+                                    }
+                                    }
+                                );
+                                })
+                                .catch((err) => {
+                                console.log(err); //上传失败之后
+                                });
+                            }
+                        });
+                        },
+                    },
+                    },
+                },
+            }
+        },
+        methods: {
+            onCreated(editor) {
+                this.editor = Object.seal(editor); // 一定要用 Object.seal() ,否则会报错
+                if (this.mode == "detail") {
+                    this.editor.disable();
+                }
+            },
+            // 详情
+            getLuckyDrawDetail() {
+                this.loading = true;
+                let raffleId = this.$route.query.id
+                getLuckyDrawDetail({raffleId,regionCode:'520100'}).then((res) => {
+                    this.loading = false;
+                    if (res.state == "Success") {
+                        this.content = res.content.raffleRule
+                    }
+                });
+            },
+            save(){
+                this.loading = true
+                luckyDrawRule({raffleId:this.$route.query.id,rule:this.content}).then(res=>{
+                    this.loading = false
+                    if (res.state == "Success") {
+                        this.$notify({
+                title: "成功",
+                message: "操作成功",
+                type: "success",
+              });
+              this.$router.push("/operationManage/luckyDrawManage/index");
+                    }
+                })
+            }
+        },
+        created () {
+            this.getLuckyDrawDetail()
+        },
+    })
+</script>
+<style src="@wangeditor/editor/dist/css/style.css"></style>
+
+<style lang="scss" scoped>
+.luckyDrawRule{
+    .btn-group {
+        width: 500px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin-top: 20px;
+  }
+}
+</style>

+ 4 - 1
src/views/operationManage/orderManage/list.vue

@@ -114,7 +114,8 @@
         show-overflow-tooltip
       >
       <template slot-scope="scope">
-        <img :src="scope.row.goodsModelList[0].goodsInfo.activityCover||scope.row.goodsModelList[0].goodsInfo.goodsPath" alt="" class="icon">
+        <img src="@/assets/recharge.png" v-if="scope.row.goodsModelList[0].jobFlowMap == 'video2'" alt="" class="icon">
+        <img v-else :src="scope.row.goodsModelList[0].goodsInfo.activityCover||scope.row.goodsModelList[0].goodsInfo.goodsPath" alt="" class="icon">
       </template>
       </el-table-column>
       <el-table-column
@@ -366,6 +367,8 @@ export default {
             return '酒店住宿'
         }else if(row.goodsModelList[0].jobFlowMap == 'YPP'){
             return '电影票'
+        }else if(row.goodsModelList[0].jobFlowMap == 'video2'){
+            return '视频会员'
         }else{
             return '-'
         }

+ 14 - 2
src/views/operationManage/orderManage/orderDetail.vue

@@ -2,7 +2,7 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2023-11-01 14:21:43
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-08-29 14:14:58
+ * @LastEditTime: 2024-09-18 18:22:30
  * @FilePath: \admin-manage\src\views\operationManage\orderManage\orderDetail.vue
  * @Description:
  *
@@ -132,7 +132,8 @@
         show-overflow-tooltip
       >
       <template slot-scope="scope">
-        <img :src="scope.row.goodsList[0].goodsInfo.activityCover||scope.row.goodsList[0].goodsInfo.goodsPath" alt="" class="icon">
+        <img src="@/assets/recharge.png" v-if="scope.row.goodsList[0].jobFlowMap == 'video2'" alt="" class="icon">
+        <img v-else :src="scope.row.goodsList[0].goodsInfo.activityCover||scope.row.goodsList[0].goodsInfo.goodsPath" alt="" class="icon">
       </template>
       </el-table-column>
       <el-table-column
@@ -463,6 +464,8 @@ import {auditRefund,transfer,orderDetail,subOrdersConfirm,getReserve} from '@/ap
                     return '酒店住宿'
                 }else if(row.goodsList[0].jobFlowMap == 'YPP'){
                     return '电影票'
+                }else if(row.goodsList[0].jobFlowMap == 'video2'){
+                    return '视频会员'
                 }else{
                     return '-'
                 }
@@ -520,6 +523,15 @@ import {auditRefund,transfer,orderDetail,subOrdersConfirm,getReserve} from '@/ap
 
                     }
                 }
+                else if(row.goodsList[0].jobFlowMap == 'video2'){
+                    return {
+                        paymentTime:row.payment?row.payment.paymentTime:'',
+                        paymentWay:row.payment?row.payment.paymentWay:'',
+                        price:row.goodsList[0].payAmount,
+                        goodsName:row.goodsList[0].goodsInfo.goodsName,
+
+                    }
+                }
                 else{
                     return {
                         paymentTime:row.payment?row.payment.paymentTime:'',

+ 71 - 1
src/views/setting/base.vue

@@ -75,21 +75,42 @@
       <el-button>取 消</el-button>
       <el-button type="primary" :loading="loading" @click="save">确 定</el-button>
     </div>
+
+    <h3>小程序功能屏蔽设置</h3>
+    <el-form :model="setQuery1" ref="setQuery1" inline v-loading="loading1" label-width="200px" :rules="rules1">
+       <el-form-item label="移动会员订购开通" size="normal" prop="cmVipEnable">
+          <el-select v-model="setQuery1.cmVipEnable">
+            <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>
+
+    <div class="btn-group">
+      <el-button>取 消</el-button>
+      <el-button type="primary" :loading="loading1" @click="save1">确 定</el-button>
+    </div>
+
+
   </div>
 </template>
 
 <script>
 
 
-import { saveOrUpdate, getRuler } from "@/api/setting"
+import { saveOrUpdate, getRuler,getMiniSetting,setMini } from "@/api/setting"
 import currency from "@/utils/currency";
 export default {
 
   data() {
     return {
       loading: false,
+      loading1: false,
       startTime: '',
       endTime: '',
+      setQuery1: {
+        cmVipEnable: true, //是否开启会员功能
+      },
       setQuery: {
         timeUnit: 'DAY', //时间单位 DAY MONTH 
 
@@ -119,9 +140,28 @@ export default {
           value: 'MONTH'
         }
       ],
+      options1: [
+        {
+          label: '开启',
+          value: true
+        },
+        {
+          label: '关闭',
+          value: false
+        }
+      ],
       dayOption: [
 
       ],
+       rules1: {
+        cmVipEnable: [
+          {
+            required: true,
+            message: '请选择是否开启移动会员功能',
+            trigger: 'change'
+          }
+        ],
+       },
       rules: {
         timeUnit: [
           {
@@ -195,6 +235,25 @@ export default {
         }
       });
     },
+     save1() {
+
+      this.$refs.setQuery1.validate((v) => {
+        if (v) {
+          this.loading1 = true
+          setMini(this.setQuery1).then(res => {
+            this.loading1= false
+            if (res.state == 'Success') {
+              this.$notify({
+                title: '成功',
+                message: '操作成功',
+                type: 'success'
+              });
+
+            }
+          })
+        }
+      });
+    },
     changeTime() {
       if (this.startTime) return
       this.$message({
@@ -228,9 +287,20 @@ export default {
         this.setQuery.startMinute = ''
         this.setQuery.endMinute = ''
       }
+    },
+    getMiniSetting(){
+      this.loading1 =true
+      getMiniSetting().then(res=>{
+      this.loading1 =false
+
+        if(res.state=='Success'){
+          this.setQuery1.cmVipEnable = res.content.cmVipEnable
+        }
+      })
     }
   },
   created() {
+    this.getMiniSetting()
     // 月份天数
     for (let index = 0; index < 31; index++) {
       this.dayOption.push(

+ 2 - 2
src/views/setting/cityList.vue

@@ -83,7 +83,7 @@
     <el-form label-width="130px" :model="setQuery"
       ref="setQuery"
       :rules="rules">
-        <el-form-item label="政编码"  prop="code">
+        <el-form-item label="政编码"  prop="code">
             <el-input
             v-model="setQuery.code"
             class="item-width-300"
@@ -132,7 +132,7 @@ export default {
         "type": 'City',
       },
       rules:{
-         code: [{ required: true, message: "请输入政编码", trigger: "blur" }],
+         code: [{ required: true, message: "请输入政编码", trigger: "blur" }],
          name: [{ required: true, message: "请输入城市名", trigger: "blur" }],
       }
     };