王新雷 преди 4 години
родител
ревизия
f0a1875494

+ 7 - 1
src/router/index.js

@@ -332,6 +332,12 @@ export const asyncRoutes = {
   // 更换列表
   resetList: () => import('@/views/businessManager/resetList'),
   // 进货清单
-  purchaseLlist: () => import('@/views/businessManager/shopManager/purchase-llist')
+  purchaseLlist: () => import('@/views/businessManager/shopManager/purchase-llist'),
+  // 抽奖活动管理
+  lotteryManager: () => import('@/views/luckyDraw/lotteryManager'),
+  // 活动奖品设置
+  trophyManager: () => import('@/views/luckyDraw/trophyManager'),
+  // 抽奖记录
+  lotteryRecord: () => import('@/views/luckyDraw/lotteryRecord')
 }
 export default router

+ 29 - 7
src/views/contentManager/contentOperation.vue

@@ -42,15 +42,23 @@
           <el-input v-model.trim="form.linkUrl"></el-input>
         </el-form-item>
 
-        <el-form-item label="时间范围" v-if="type == 5">
-          <el-date-picker v-model.trim="actionTime"
+        <el-form-item label="有效期" v-if="type == 5">
+          <el-date-picker style="width:400px;"
+                        v-model="actionTime"
+                        type="datetimerange"
+                        range-separator="至"
+                        :picker-options="{ firstDayOfWeek: 1 }"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期">
+                    </el-date-picker>
+          <!-- <el-date-picker v-model.trim="actionTime"
                           style="width:400px;"
                           type="daterange"
                           value-format="yyyy-MM-dd"
                           range-separator="至"
                           :picker-options="{ firstDayOfWeek: 1 }"
                           start-placeholder="开始日期"
-                          end-placeholder="结束日期"></el-date-picker>
+                          end-placeholder="结束日期"></el-date-picker> -->
         </el-form-item>
         <!-- 广告管理才有类型 -->
         <el-form-item label="广告类型"
@@ -461,6 +469,7 @@ export default {
         tenantId: null,
         subType: null
       };
+      this.actionTime = null
       this.$refs["form"].clearValidate();
 
       this.dialogForm = {
@@ -575,17 +584,24 @@ export default {
     onSubmit (formName) {
       this.$refs[formName].validate(valid => {
         if (valid) {
+          let form = Object.assign({}, this.form)
+          let actionTime = this.actionTime
+          console.log(actionTime)
+          if(actionTime.length > 0) {
+            form.onlineTime = dayjs(actionTime[0]).format('YYYY-MM-DD HH:mm:ss')
+            form.offlineTime = dayjs(actionTime[1]).format('YYYY-MM-DD HH:mm:ss')
+          }
           if (this.pageType == "create") {
-            if (this.form.id) {
+            if (form.id) {
               // 判断有没有Id,如果有则删除
-              delete this.form.id;
+              delete form.id;
             }
             // return false
-            newsAdd(this.form).then(res => {
+            newsAdd(form).then(res => {
               this.messageTips("添加", res);
             });
           } else if (this.pageType == "update") {
-            newsUpdate(this.form).then(res => {
+            newsUpdate(form).then(res => {
               this.messageTips("修改", res);
             });
           }
@@ -654,6 +670,7 @@ export default {
         tenantId: null,
         subType: null
       };
+      this.actionTime = null
       this.$refs[formName].resetFields();
     },
     onLook () {
@@ -708,6 +725,11 @@ export default {
               tenantId: result.tenantId.toString(),
               subType: result.subType ? result.subType : null
             };
+            if(result.onlineTime && result.offlineTime) {
+              this.actionTime = [result.onlineTime, result.offlineTime]
+            } else {
+              this.actionTime = null
+            }
             this.dataInfo.updateTime = result.updateTime
           }
         });

+ 77 - 0
src/views/luckyDraw/api.js

@@ -0,0 +1,77 @@
+import request from '@/utils/request'
+import qs from 'qs'
+
+// 查询奖品组列表
+export function luckDrawGroupList(data) {
+  return request({
+    url: '/api-web/luckDrawGroup/list',
+    method: 'get',
+    headers: {
+      'content-type': 'application/x-www-form-urlencoded'
+    },
+    data: {},
+    params: data
+  })
+}
+
+// 添加抽奖组
+export function luckDrawGroupAdd(data) {
+  return request({
+    url: '/api-web/luckDrawGroup/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 编辑抽奖组
+export function luckDrawGroupUpdate(data) {
+  return request({
+    url: '/api-web/luckDrawGroup/update',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 查询奖品列表
+export function luckDrawPrizeList(data) {
+  return request({
+    url: '/api-web/luckDrawPrize/list',
+    method: 'get',
+    headers: {
+      'content-type': 'application/x-www-form-urlencoded'
+    },
+    data: {},
+    params: data
+  })
+}
+
+// 添加奖品
+export function luckDrawPrizeAdd(data) {
+  return request({
+    url: '/api-web/luckDrawPrize/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 编辑奖品
+export function luckDrawPrizeUpdate(data) {
+  return request({
+    url: '/api-web/luckDrawPrize/update',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 查询抽奖列表
+export function luckDrawLogList(data) {
+  return request({
+    url: '/api-web/luckDrawLog/rewardlist',
+    method: 'get',
+    headers: {
+      'content-type': 'application/x-www-form-urlencoded'
+    },
+    data: {},
+    params: data
+  })
+}

+ 201 - 0
src/views/luckyDraw/lotteryManager.vue

@@ -0,0 +1,201 @@
+<!--  -->
+<template>
+    <div class="m-container">
+        <h2>
+            <div class="squrt"></div>抽奖活动管理
+        </h2>
+        <div class="newBand" v-permission="'luckDrawGroup/add'" @click="onOperationLottery('create')">添加</div>
+        <!-- 搜索标题 -->
+        <el-form :inline="true"
+                class="searchForm"
+                v-model.trim="searchForm">
+        <el-form-item >
+            <el-input v-model.trim="searchForm.search"
+                    placeholder="请输入活动名称"></el-input>
+        </el-form-item>
+        <el-form-item>
+            <el-button @click="getList"
+                    type="danger">搜索</el-button>
+        </el-form-item>
+        </el-form>
+        <!-- 列表 -->
+        <div class="tableWrap">
+            <el-table :data="tableList"
+                        :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+                <el-table-column align="center"
+                                prop="name"
+                                label="活动名称"></el-table-column>
+                <el-table-column align="center"
+                                prop="startTime"
+                                label="活动开始时间">
+                </el-table-column>
+                <el-table-column align="center"
+                                prop="endTime"
+                                label="活动结束时间">
+                </el-table-column>
+                <el-table-column align="center" label="操作">
+                    <template slot-scope="scope">
+                        <el-button @click="onOperationLottery(scope.row)" v-permission="'luckDrawGroup/update'" type="text">修改</el-button>
+                        <el-button @click="onLook(scope.row)" v-permission="'/trophyManager'" type="text">查看奖品</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination :total="pageInfo.total"
+                        :page.sync="pageInfo.page"
+                        :limit.sync="pageInfo.limit"
+                        :page-sizes="pageInfo.page_size"
+                        @pagination="getList" />
+        </div>
+
+        <el-dialog :title="formTitle[formActionTitle]"
+                :visible.sync="lotteryStatus"
+                @close="onFormClose('ruleForm')"
+                width="550px">
+            <el-form :model="form"
+                    :rules="rules"
+                    label-width="100PX"
+                    ref="ruleForm">
+                <el-form-item label="活动名称"
+                            prop="name">
+                <el-input v-model.trim="form.name"
+                            autocomplete="off"
+                            placeholder="请输入活动名称"></el-input>
+                </el-form-item>
+                <el-form-item label="活动时间"
+                            prop="time">
+                    <el-date-picker
+                        style="width: 100%"
+                        v-model="form.time"
+                        :picker-options="{ firstDayOfWeek: 1 }"
+                        type="datetimerange"
+                        range-separator="至"
+                        start-placeholder="活动开始日期"
+                        end-placeholder="活动结束日期">
+                    </el-date-picker>
+                </el-form-item>
+            </el-form>
+            <span slot="footer"
+                    class="dialog-footer">
+                <el-button @click="lotteryStatus = false">取 消</el-button>
+                <el-button type="primary" @click="onSubmit('ruleForm')">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import dayjs from 'dayjs';
+import cleanDeep from 'clean-deep';
+import { luckDrawGroupList, luckDrawGroupAdd, luckDrawGroupUpdate } from './api'
+export default {
+    components: { pagination },
+    data () {
+        return {
+            searchForm: {
+                search: null,
+            },
+            formTitle: {
+                create: "添加活动",
+                update: "修改活动"
+            },
+            formActionTitle: 'create',
+            lotteryStatus: false,
+            tableList: [],
+            form: {
+                name: null,
+                time: null
+            },
+            rules: {
+                name: [{required: true, message:'请输入活动名称', trigger: 'blur'}],
+                time: [{required: true, message:'请选择活动时间', trigger: 'change'}]
+            },
+            pageInfo: {
+                // 分页规则
+                limit: 10, // 限制显示条数
+                page: 1, // 当前页
+                total: 1, // 总条数
+                page_size: [10, 20, 40, 50] // 选择限制显示条数
+            }
+        };
+    },
+    //生命周期 - 创建完成(可以访问当前this实例)
+    created () {
+        // 设置默认为当前周
+    },
+    //生命周期 - 挂载完成(可以访问DOM元素)
+    mounted () {
+        this.getList()
+    },
+    activated () {
+        // this.getList()
+    },
+    methods: {
+        onOperationLottery(type, data) {
+            this.formActionTitle = type
+
+            this.lotteryStatus = true
+        },
+        onSubmit(formName) {
+            this.$refs[formName].validate(item => {
+                if(item) {
+                    console.log(this.form)
+                    let form = Object.assign({}, this.form)
+                    let params = {
+                        name: form.name,
+                        consumeType: 1,
+                        consumeValue: 1,
+                        startTime: dayjs(form.time[0]).format('YYYY-MM-DD HH:mm:ss'),
+                        endTime: dayjs(form.time[1]).format('YYYY-MM-DD HH:mm:ss'),
+                    }
+                    if(this.formActionTitle == 'create') {
+                        luckDrawGroupAdd(params).then(res => {
+                            this.messageTips('添加', res)
+                        })
+                    } else if(this.formActionTitle == 'update') {
+                        params.id = form.id
+                        luckDrawGroupUpdate(params).then(res => {
+                            this.messageTips('修改', res)
+                        })
+                    }
+                }
+            })
+        },
+        messageTips (title, res) {
+            if (res.code == 200) {
+                this.$message.success(title + '成功')
+                this.branchStatus = false
+                this.getList()
+            } else {
+                this.$message.error(res.msg)
+            }
+        },
+        getList() {
+            let params = Object.assign({}, this.searchForm)
+            params.rows = this.pageInfo.limit
+            params.page = this.pageInfo.page
+            luckDrawGroupList(cleanDeep(params)).then(res => {
+                if (res.code == 200 && res.data) {
+                    this.tableList = res.data.rows
+                    this.pageInfo.total = res.data.total
+                }
+            })
+        },
+        onLook(row) {
+            this.$router.push({
+                path: '/luckyDraw/trophyManager',
+                query: {
+                    groupId: row.id
+                }
+            })
+        }
+    }
+};
+</script>
+<style lang='scss' scoped>
+.micon {
+  position: absolute;
+  top: 3px;
+  right: 2px;
+}
+</style>

+ 121 - 0
src/views/luckyDraw/lotteryRecord.vue

@@ -0,0 +1,121 @@
+<!--  -->
+<template>
+    <div class="m-container">
+        <h2>
+            <div class="squrt"></div>抽奖记录
+        </h2>
+        <!-- 搜索标题 -->
+        <el-form :inline="true"
+                class="searchForm"
+                v-model.trim="searchForm">
+           <el-form-item>
+                <el-input v-model.trim="searchForm.search"
+                        placeholder="学生编号/姓名/手机号"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-select v-model.trim="searchForm.groupId"
+                        style="width: 100% !important"
+                        placeholder="请选择所属分部">
+                    <el-option value="reg" label="未缴费"></el-option>
+                    <el-option value="pay" label="已缴费"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="getList"
+                        type="danger">搜索</el-button>
+            </el-form-item>
+        </el-form>
+        <!-- 列表 -->
+        <div class="tableWrap">
+            <el-table :data="tableList"
+                        :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+                <el-table-column align="center"
+                                prop="title"
+                                label="学员编号"></el-table-column>
+                <el-table-column align="center"
+                                label="学员姓名">
+                <template slot-scope="scope">{{ scope.row.linkUrl + '/' + scope.row.id }}</template>
+                </el-table-column>
+                <el-table-column align="center"
+                                prop="remark"
+                                label="手机号码">
+                    <template slot-scope="scope">{{ scope.row.status == 1 ? '是' : '否' }}</template>
+                </el-table-column>
+
+                <el-table-column align="center"
+                                prop="order"
+                                label="所属分部"></el-table-column>
+                <el-table-column align="center"
+                                prop="remark"
+                                label="奖项">
+                </el-table-column>
+                <el-table-column align="center"
+                                prop="remark"
+                                label="抽奖时间">
+                </el-table-column>
+            </el-table>
+            <pagination :total="pageInfo.total"
+                        :page.sync="pageInfo.page"
+                        :limit.sync="pageInfo.limit"
+                        :page-sizes="pageInfo.page_size"
+                        @pagination="getList" />
+        </div>
+    </div>
+</template>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import { luckDrawLogList } from './api'
+import dayjs from 'dayjs';
+import cleanDeep from 'clean-deep';
+export default {
+    components: { pagination },
+    data () {
+        return {
+            searchForm: {
+                search: null,
+                organId: null
+            },
+            tableList: [],
+            pageInfo: {
+                // 分页规则
+                limit: 10, // 限制显示条数
+                page: 1, // 当前页
+                total: 1, // 总条数
+                page_size: [10, 20, 40, 50] // 选择限制显示条数
+            }
+        };
+    },
+    //生命周期 - 创建完成(可以访问当前this实例)
+    created () {
+        // 设置默认为当前周
+    },
+    //生命周期 - 挂载完成(可以访问DOM元素)
+    mounted () {
+        this.getList()
+    },
+    activated () {
+
+    },
+    methods: {
+        getList() {
+            let params = Object.assign({}, this.searchForm)
+            params.rows = this.pageInfo.limit
+            params.page = this.pageInfo.page
+            luckDrawLogList(cleanDeep(params)).then(res => {
+                if (res.code == 200 && res.data) {
+                    this.tableList = res.data.rows
+                    this.pageInfo.total = res.data.total
+                }
+            })
+        }
+    }
+};
+</script>
+<style lang='scss' scoped>
+.micon {
+  position: absolute;
+  top: 3px;
+  right: 2px;
+}
+</style>

+ 252 - 0
src/views/luckyDraw/trophyManager.vue

@@ -0,0 +1,252 @@
+<!--  -->
+<template>
+    <div class="m-container">
+        <h2>
+            <div class="squrt"></div>奖品设置
+        </h2>
+        <div class="newBand" v-permission="'luckDrawPrize/add'" @click="onOperationTrophy('create')">添加</div>
+        <!-- 搜索标题 -->
+        <el-form :inline="true"
+                class="searchForm"
+                v-model.trim="searchForm">
+            <el-form-item>
+                <el-input v-model.trim="searchForm.search"
+                        placeholder="请输入奖品名称"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-select v-model.trim="searchForm.groupId"
+                        style="width: 100% !important"
+                        placeholder="请选择所属活动">
+                    <el-option value="reg" label="未缴费"></el-option>
+                    <el-option value="pay" label="已缴费"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="getList"
+                        type="danger">搜索</el-button>
+            </el-form-item>
+        </el-form>
+        <!-- 列表 -->
+        <div class="tableWrap">
+            <el-table :data="tableList"
+                        :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+                <el-table-column align="center"
+                                prop="name"
+                                label="奖品名称"></el-table-column>
+                <el-table-column align="center"
+                                prop="groupName"
+                                label="所属活动"></el-table-column>
+                <el-table-column align="center"
+                                prop="chances"
+                                label="中奖概率">
+                    <template slot-scope="scope">
+                        {{ scope.row.chances }}%
+                    </template>
+                </el-table-column>
+                <el-table-column align="center"
+                                prop="stock"
+                                label="库存"></el-table-column>
+                <el-table-column align="center"
+                                prop="enabled"
+                                label="是否启用">
+                    <template slot-scope="scope">
+                        {{ scope.row.enabled ? '启用' : '不启用' }}
+                    </template>
+                </el-table-column>
+                <el-table-column align="center"
+                                prop="rewardType"
+                                label="奖品类型"></el-table-column>
+                <el-table-column align="center"
+                                prop="memo"
+                                label="备注">
+                    <template slot-scope="scope">
+                        <tool-tip :content="scope.row.memo" />
+                    </template>
+                </el-table-column>
+                </el-table-column>
+                <el-table-column align="center" label="操作">
+                    <template slot-scope="scope">
+                        <el-button @click="onOperationTrophy(scope.row)" v-permission="'luckDrawPrize/update'" type="text">修改</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination :total="pageInfo.total"
+                        :page.sync="pageInfo.page"
+                        :limit.sync="pageInfo.limit"
+                        :page-sizes="pageInfo.page_size"
+                        @pagination="getList" />
+        </div>
+
+        <el-dialog :title="formTitle[formActionTitle]"
+                :visible.sync="lotteryStatus"
+                @close="onFormClose('ruleForm')"
+                width="500px">
+            <el-form :model="form"
+                    :rules="rules"
+                    label-width="100PX"
+                    ref="ruleForm">
+                <el-form-item label="奖品名称"
+                            prop="name">
+                <el-input v-model.trim="form.name"
+                            autocomplete="off"
+                            placeholder="请输入奖品名称"></el-input>
+                </el-form-item>
+                <el-form-item label="所属活动" prop="groupId">
+                    <el-select v-model.trim="form.groupId"
+                            style="width: 100% !important"
+                            placeholder="请选择所属活动">
+                        <el-option value="reg" label="未缴费"></el-option>
+                        <el-option value="pay" label="已缴费"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="中奖概率"
+                            prop="chances">
+                    <el-input v-model.trim="form.chances"
+                            type="number"
+                            autocomplete="off"
+                            placeholder="请输入中奖概率">
+                        <template slot="append">%</template>
+                    </el-input>
+                </el-form-item>
+                <el-form-item label="库存"
+                            prop="stock">
+                    <el-input v-model.trim="form.stock"
+                            type="number"
+                            autocomplete="off"
+                            placeholder="请输入库存">
+                    </el-input>
+                </el-form-item>
+                <el-form-item label="备注"
+                            prop="memo">
+                    <el-input type="textarea" :rows="2" v-model.trim="form.memo"
+                            autocomplete="off"
+                            placeholder="请输入备注"></el-input>
+                </el-form-item>
+            </el-form>
+            <span slot="footer"
+                    class="dialog-footer">
+                <el-button @click="lotteryStatus = false">取 消</el-button>
+                <el-button type="primary" @click="onSubmit('ruleForm')">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import Tooltip from '@/components/Tooltip/index'
+import pagination from "@/components/Pagination/index";
+import dayjs from 'dayjs';
+import cleanDeep from 'clean-deep';
+import { luckDrawPrizeList, luckDrawPrizeAdd, luckDrawPrizeUpdate } from './api'
+export default {
+    components: { pagination, Tooltip, },
+    data () {
+        return {
+            searchForm: {
+                search: null,
+                groupId: null,
+                enabled: null
+            },
+            formTitle: {
+                create: "添加奖品",
+                update: "修改奖品"
+            },
+            formActionTitle: 'create',
+            lotteryStatus: false,
+            tableList: [],
+            form: {
+                name: null,
+                groupId: null,
+                chances: null,
+                stock: null,
+                memo: null
+            },
+            rules: {
+                name: [{required: true, message:'请输入活动名称', trigger: 'blur'}],
+                groupId: [{required: true, message:'请选择所属活动', trigger: 'change'}],
+                chances: [{required: true, message:'请输入中奖概率', trigger: 'blur'}],
+                stock: [{required: true, message:'请输入库存', trigger: 'blur'}],
+                enabled: [{required: true, message:'请选择是否启用', trigger: 'change'}]
+            },
+            pageInfo: {
+                // 分页规则
+                limit: 10, // 限制显示条数
+                page: 1, // 当前页
+                total: 1, // 总条数
+                page_size: [10, 20, 40, 50] // 选择限制显示条数
+            }
+        };
+    },
+    //生命周期 - 创建完成(可以访问当前this实例)
+    created () {
+        // 设置默认为当前周
+    },
+    //生命周期 - 挂载完成(可以访问DOM元素)
+    mounted () {
+        this.getList()
+    },
+    activated () {
+        // this.getList()
+    },
+    methods: {
+        onOperationTrophy(type, data) {
+            this.formActionTitle = type
+
+            this.lotteryStatus = true
+        },
+        onSubmit(formName) {
+            this.$refs[formName].validate(item => {
+                if(item) {
+                    console.log(this.form)
+                    let form = Object.assign({}, this.form)
+                    let params = {
+                        name: form.name,
+                        groupId: form.groupId,
+                        chances: form.chances,
+                        stock: form.stock,
+                        memo: form.memo,
+                        enabled: 1
+                    }
+                    if(this.formActionTitle == 'create') {
+                        luckDrawPrizeAdd(params).then(res => {
+                            this.messageTips('添加', res)
+                        })
+                    } else if(this.formActionTitle == 'update') {
+                        params.id = form.id
+                        luckDrawPrizeUpdate(params).then(res => {
+                            this.messageTips('修改', res)
+                        })
+                    }
+                }
+            })
+        },
+        messageTips (title, res) {
+            if (res.code == 200) {
+                this.$message.success(title + '成功')
+                this.branchStatus = false
+                this.getList()
+            } else {
+                this.$message.error(res.msg)
+            }
+        },
+        getList() {
+            let params = Object.assign({}, this.searchForm)
+            params.rows = this.pageInfo.limit
+            params.page = this.pageInfo.page
+            luckDrawPrizeList(cleanDeep(params)).then(res => {
+                if (res.code == 200 && res.data) {
+                    this.tableList = res.data.rows
+                    this.pageInfo.total = res.data.total
+                }
+            })
+        }
+    }
+};
+</script>
+<style lang='scss' scoped>
+.micon {
+  position: absolute;
+  top: 3px;
+  right: 2px;
+}
+</style>