From 163d11dac842eff7614bb387815aae80613ef5f2 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Wed, 23 Apr 2025 09:43:04 +0800 Subject: [PATCH] feat(mall): 重构活动模块接口和数据结构 --- src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java | 2 src/main/resources/templates/febs/views/modules/votesActivity/voteoptionDetail.html | 177 ++ src/main/resources/templates/febs/views/modules/votesActivity/optionInfo-bak.html | 373 ++++++ src/main/resources/templates/febs/views/modules/votesActivity/list.html | 281 ++++ src/main/resources/templates/febs/views/modules/votesActivity/add.html | 293 ++++ src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java | 9 src/main/resources/templates/febs/views/modules/votesActivity/groupList.html | 198 +++ src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html | 88 + src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java | 14 src/main/resources/templates/febs/views/modules/votesActivity/optionAdd-bak.html | 293 ++++ src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html | 456 +++++++ src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html | 55 src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java | 100 + src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html | 369 +++++ src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityController.java | 39 src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java | 2 src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html | 107 + src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java | 42 src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html | 316 +++++ src/main/resources/templates/febs/views/modules/votesActivity/discountAudit.html | 199 +++ src/main/resources/templates/febs/views/modules/votesActivity/optionList.html | 256 ++++ src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java | 2 src/main/java/cc/mrbird/febs/mall/vo/activity/VoteActivityVo.java | 42 23 files changed, 3,710 insertions(+), 3 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityController.java new file mode 100644 index 0000000..5575d41 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityController.java @@ -0,0 +1,39 @@ +package cc.mrbird.febs.mall.controller.activity; + +import cc.mrbird.febs.common.controller.BaseController; +import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.common.utils.RedisUtils; +import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto; +import cc.mrbird.febs.mall.service.IAdminHappyActivityService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.Map; + +@Slf4j +@Validated +@RestController +@RequiredArgsConstructor +@RequestMapping(value = "/admin/happyActivity") +public class AdminVotesActivityController extends BaseController { + + + private final IAdminHappyActivityService adminHappyActivityService; + private final RedisUtils redisUtils; + + /** + * 分类列表 + * @return + */ + @GetMapping("groupList") + public FebsResponse groupList(AdminHappyActivityCategoryDto dto, QueryRequest request) { + Map<String, Object> data = getDataTable(adminHappyActivityService.getGroupList(dto, request)); + return new FebsResponse().success().data(data); + } + +} diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java similarity index 96% rename from src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityCategoryController.java rename to src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java index 40eb8c7..60eb729 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityCategoryController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java @@ -1,4 +1,4 @@ -package cc.mrbird.febs.mall.controller; +package cc.mrbird.febs.mall.controller.activity; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.service.HappyActivityCategoryService; diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java similarity index 98% rename from src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityController.java rename to src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java index 0d4f8a5..72ed54a 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java @@ -1,4 +1,4 @@ -package cc.mrbird.febs.mall.controller; +package cc.mrbird.febs.mall.controller.activity; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java similarity index 98% rename from src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityOrderController.java rename to src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java index 771a30a..57c4265 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityOrderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java @@ -1,4 +1,4 @@ -package cc.mrbird.febs.mall.controller; +package cc.mrbird.febs.mall.controller.activity; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java new file mode 100644 index 0000000..9204752 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java @@ -0,0 +1,100 @@ +package cc.mrbird.febs.mall.controller.activity; + +import cc.mrbird.febs.common.controller.BaseController; +import cc.mrbird.febs.common.entity.FebsConstant; +import cc.mrbird.febs.common.utils.FebsUtil; +import cc.mrbird.febs.common.utils.RedisUtils; +import cc.mrbird.febs.mall.entity.HappyActivity; +import cc.mrbird.febs.mall.entity.HappyActivityCategory; +import cc.mrbird.febs.mall.entity.HappyActivityOption; +import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper; +import cc.mrbird.febs.mall.mapper.HappyActivityOptionMapper; +import cc.mrbird.febs.mall.service.IAdminHappyActivityService; +import cc.mrbird.febs.mall.vo.activity.VoteActivityVo; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller("votesActivityView") +@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/votesActivity") +@RequiredArgsConstructor +public class ViewHappyActivityController extends BaseController { + + private final IAdminHappyActivityService iVoteActivityService; + private final HappyActivityCategoryMapper happyActivityCategoryMapper; + private final HappyActivityOptionMapper happyActivityOptionMapper; + private final RedisUtils redisUtils; + + /** + * 活动分类列表 + */ + @GetMapping("groupList") + @RequiresPermissions("groupList:view") + public String groupList() { + return FebsUtil.view("modules/votesActivity/groupList"); + } + + /** + * 活动分类新增 + * @return + */ + @GetMapping(value = "/groupAdd") + @RequiresPermissions("groupAdd:add") + public String groupAdd() { + return FebsUtil.view("modules/votesActivity/groupAdd"); + } + + /** + * 活动分类编辑 + * @param id + * @param model + * @return + */ + @GetMapping("groupInfo/{id}") + @RequiresPermissions("groupInfo:view") + public String groupInfo(@PathVariable long id, Model model) { + HappyActivityCategory voteActivityGroup = happyActivityCategoryMapper.selectById(id); + model.addAttribute("groupInfo", voteActivityGroup); + return FebsUtil.view("modules/votesActivity/groupInfo"); + } + + /** + * 活动选项列表 + */ + @GetMapping("optionList") + @RequiresPermissions("optionList:view") + public String optionList() { + return FebsUtil.view("modules/votesActivity/optionList"); + } + + /** + * 活动选项新增 + * @return + */ + @GetMapping(value = "/optionAdd") + @RequiresPermissions("optionAdd:add") + public String optionAdd() { + return FebsUtil.view("modules/votesActivity/optionAdd"); + } + + /** + * 活动选项新增编辑 + * @param id + * @param model + * @return + */ + @GetMapping("optionInfo/{id}") + @RequiresPermissions("optionInfo:view") + public String optionInfo(@PathVariable long id, Model model) { + HappyActivityOption voteOption = happyActivityOptionMapper.selectById(id); + model.addAttribute("voteOption", voteOption); + return FebsUtil.view("modules/votesActivity/optionInfo"); + } +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java new file mode 100644 index 0000000..dcd2375 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java @@ -0,0 +1,9 @@ +package cc.mrbird.febs.mall.dto; + +import lombok.Data; + +@Data +public class AdminHappyActivityCategoryDto { + private String name; + private Integer status; +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java new file mode 100644 index 0000000..2a108bd --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java @@ -0,0 +1,14 @@ +package cc.mrbird.febs.mall.service; + +import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto; +import cc.mrbird.febs.mall.entity.HappyActivity; +import cc.mrbird.febs.mall.entity.HappyActivityCategory; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface IAdminHappyActivityService extends IService<HappyActivity>{ + + + IPage<HappyActivityCategory> getGroupList(AdminHappyActivityCategoryDto dto, QueryRequest request); +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java new file mode 100644 index 0000000..4f260d4 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java @@ -0,0 +1,42 @@ +package cc.mrbird.febs.mall.service.impl; + +import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto; +import cc.mrbird.febs.mall.entity.HappyActivity; +import cc.mrbird.febs.mall.entity.HappyActivityCategory; +import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper; +import cc.mrbird.febs.mall.mapper.HappyActivityMapper; +import cc.mrbird.febs.mall.service.IAdminHappyActivityService; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@RequiredArgsConstructor +@Transactional +public class AdminHappyActivityServiceImpl extends ServiceImpl<HappyActivityMapper, HappyActivity> implements IAdminHappyActivityService { + + private final HappyActivityCategoryMapper happyActivityCategoryMapper; + @Override + public IPage<HappyActivityCategory> getGroupList(AdminHappyActivityCategoryDto dto, QueryRequest request) { + Page<HappyActivityCategory> page = new Page<>(request.getPageNum(), request.getPageSize()); + LambdaQueryWrapper<HappyActivityCategory> voteOptionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(StrUtil.isNotEmpty(dto.getName())){ + voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getName,dto.getName()); + } + if(ObjectUtil.isNotEmpty(dto.getStatus())){ + voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getState,dto.getStatus()); + } + voteOptionLambdaQueryWrapper.orderByDesc(HappyActivityCategory::getCreatedTime); + Page<HappyActivityCategory> adminOptionVoIPage = happyActivityCategoryMapper.selectPage(page, voteOptionLambdaQueryWrapper); + return adminOptionVoIPage; + } +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/activity/VoteActivityVo.java b/src/main/java/cc/mrbird/febs/mall/vo/activity/VoteActivityVo.java new file mode 100644 index 0000000..f850628 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/activity/VoteActivityVo.java @@ -0,0 +1,42 @@ +package cc.mrbird.febs.mall.vo.activity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; +/** + * 投票活动表 + */ +@Data +public class VoteActivityVo extends BaseEntity { + + private String name;//投票活动名称 + //活动分类ID + private Long groupId; + + private String coverImage;//活动封面图片 URL + + private String activityType;//活动类型 + + private String votesType;//投票类型 + + private String isMultiple;//是否多选 + + private String introduce;//投票活动描述 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime;//投票开始时间; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime;//投票结束时间; + + private String totalVotes;//票数总数 + + private String totalParticipants;//参与人数 + + private Integer status;//状态 1.未开始 2.已开始 + + private Integer proStatus;//进行状态 1.未开始 2.已开始 3.已结束 + +} diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/add.html b/src/main/resources/templates/febs/views/modules/votesActivity/add.html new file mode 100644 index 0000000..e9c71bb --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/add.html @@ -0,0 +1,293 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity-add" lay-title="新增"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="activity-add"> + <form class="layui-form" action="" lay-filter="activity-add-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">所属分类:</label> + <div class="layui-input-block"> + <div id="activity-group"></div> + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">名称:</label> + <div class="layui-input-block"> + <input type="text" name="name" lay-verify="required" + placeholder="" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">活动类型:</label> + <div class="layui-input-block"> + <select name="activityType" class="activity-type"> + <option value="1">文字</option> + <option value="2">图片</option> + <option value="3">视频</option> + <option value="4">二维码</option> + </select> + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label ">票数总数:</label> + <div class="layui-input-block"> + <input type="text" name="totalVote" + placeholder="" autocomplete="off" class="layui-input" disabled> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label ">参与人数:</label> + <div class="layui-input-block"> + <input type="text" name="totalParticipants" + placeholder="" autocomplete="off" class="layui-input" disabled> + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">开始时间:</label> + <div class="layui-input-block"> + <input type="text" name="startTime" id="febs-form-group-date-start" lay-verify="datetime" + placeholder="yyyy-MM-dd hh:mm:ss" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">结束时间:</label> + <div class="layui-input-block"> + <input type="text" name="endTime" id="febs-form-group-date-end" lay-verify="datetime" + placeholder="yyyy-MM-dd hh:mm:ss" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">是否多选:</label> + <div class="layui-input-block"> + <select name="isMultiple" class="activity-type"> + <option value="1">是</option> + <option value="2">否</option> + </select> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">投票方式:</label> + <div class="layui-input-block"> + <select name="votesType" class="activity-type" > + <option value="1">一天一次</option> + </select> + </div> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">背景图片:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMax">上传</button> + <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> + <div class="layui-upload-list" id="demoMax"></div> + </blockquote> + </div> + </div> + </div> + <div class="layui-form-item febs-hide"> + <label class="layui-form-label">图片链接:</label> + <div class="layui-input-block"> + <input type="text" id="coverImage" lay-verify="required" name="coverImage" autocomplete="off" class="layui-input" readonly> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">活动描述:</label> + <div class="layui-input-block"> + <div style="border: 1px solid #ccc;"> + <div id="toolbar-container" class="toolbar"></div> + <div id="text-container" class="text" style="height: 450px;"></div> + </div> + </div> + </div> + + </div> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="activity-add-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } +</style> + +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + laydate = layui.laydate, + eleTree = layui.eleTree, + $view = $('#activity-add'), + layedit = layui.layedit, + upload = layui.upload, + validate = layui.validate, + element = layui.element; + + form.render(); + + const E = window.wangEditor; + const editor = new E('#toolbar-container', '#text-container'); // 传入两个元素 + editor.config.showLinkImg = false; + editor.config.uploadFileName = 'file'; + editor.config.customUploadImg = function (files, insertImgFn) { + // files 是 input 中选中的文件列表 + // insertImgFn 是获取图片 url 后,插入到编辑器的方法 + // 上传图片,返回结果,将图片插入到编辑器中 + for (let i = 0; i < files.length; i++){ + var form = new FormData(); + form.append("file", files[0]); + $.ajax({ + url:'/admin/goods/uploadFileBaseEsc', + type: "post", + processData: false, + contentType: false, + data: form, + dataType: 'json', + success(res) { + // 上传代码返回结果之后,将图片插入到编辑器中 + insertImgFn(res.data.src, res.data.title, '') + } + }) + } + }; + editor.create(); + + laydate.render({ + elem: '#febs-form-group-date-start', + type: 'datetime', // 选择器类型为日期时间 + format: 'yyyy-MM-dd HH:mm:ss' // 自定义格式 + }); + + laydate.render({ + elem: '#febs-form-group-date-end', + type: 'datetime', // 选择器类型为日期时间 + format: 'yyyy-MM-dd HH:mm:ss' // 自定义格式 + }); + + formSelects.render(); + + let activityGroup = xmSelect.render({ + el: '#activity-group', + language: 'zn', + prop : { + value : 'id', + children : 'child' + }, + iconfont: { + parent: 'hidden', + }, + tips: '请选择', + filterable: true, + radio: true, + clickClose: true, + tree: { + show: true, + //非严格模式 + strict: false, + }, + data: [] + }) + + febs.get(ctx + 'admin/votesActivity/allGroup', null, function(res) { + activityGroup.update({ + data : res.data, + autoRow: true, + }); + }) + + //图片上传 + upload.render({ + elem: '#testMax' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,accept: 'file' //普通文件 + ,size: 10240 //限制文件大小,单位 KB + ,before: function(obj){ + //预读本地文件示例,不支持ie8 + obj.preview(function(index, file, result){ + $('#demoMax').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">') + }); + } + ,done: function(res){ + $("#coverImage").val(res.data.src); + } + }); + + form.on('submit(activity-add-form-submit)', function (data) { + data.field.groupId = activityGroup.getValue('valueStr'); + data.field.introduce = editor.txt.html(); + $.ajax({ + 'url':ctx + 'admin/votesActivity/add', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity').find('#reset').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + + // form.on('select(activity-type-select)', function(data){ + // $('.discount-size').each(function() { + // if (data.value == 1) { + // $(this).show(); + // } else { + // $(this).hide(); + // } + // }) + // $('.coupon-size').each(function() { + // if (data.value == 2) { + // $(this).show(); + // } else { + // $(this).hide(); + // } + // }) + // }); + }); +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/discountAudit.html b/src/main/resources/templates/febs/views/modules/votesActivity/discountAudit.html new file mode 100644 index 0000000..a2a8c15 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/discountAudit.html @@ -0,0 +1,199 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity" lay-title="佳丽列表"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="activity-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="hidden" placeholder="activityId" name="activityId" + autocomplete="off" class="layui-input" id="activityId" + th:value="${activityId}"> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area" style="display: none;"> + <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" id="queryAudit"> + <i class="layui-icon"></i> 查询 + </button> + </div> + </div> + </form> + <table id="activityAuditTable" lay-filter="activityAuditTable"></table> + </div> + </div> + </div> + </div> +</div> + +<script type="text/html" id="activityOptionAudit"> + <button class="layui-btn layui-btn-primary layui-btn-sm" type="button" lay-event="activityAuditEvent">审核</button> + <button class="layui-btn layui-btn-sm layui-btn-normal" type="button" lay-event="activityDetailEvent">查看详情</button> +</script> + +<style> + .layui-form-onswitch { + background-color: #5FB878 !important; + } +</style> + +<script data-th-inline="none" type="text/javascript"> + layui.use(['jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + ctx = '', // 这里需要定义你的 `ctx` + $view = $('#febs-activity'), + $query = $('#queryAudit'), + $searchForm = $view.find('form'), + sortObject = { field: 'phone', type: null }, + tableIns; + + form.render(); + initTable(); + + // 监听表格操作按钮 + table.on('tool(activityAuditTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + + if (layEvent === 'activityAuditEvent') { + febs.modal.confirm('审批', '确认通过审批?', function () { + auditAct(data.id, 1); + }); + } else if (layEvent === 'activityDetailEvent') { + if (!data.id || !data.activityId) { + febs.alert.error('数据异常,无法打开详情页面'); + return; + } + openDetailModal(data.id, data.activityId); + } + }); + + // 审批 + function auditAct(id, status) { + febs.get(ctx + 'admin/votesOption/auditOption/' + id + '/' + status, null, function (data) { + febs.alert.success(data.message); + tableIns.reload({ page: { curr: 1 } }); + }); + } + + // 删除活动 + function deleteAct(id) { + febs.get(ctx + 'admin/votesActivity/delActivity/' + id, null, function (data) { + febs.alert.success(data.message); + tableIns.reload({ page: { curr: 1 } }); + }); + } + + + // 查询按钮点击事件 + $query.on('click', function (e) { + e.preventDefault(); + var params = getQueryParams(); + params = $.extend(params, { field: sortObject.field, order: sortObject.type }); + + tableIns.reload({ + where: params, + page: { curr: 1 } + }); + }); + + // 初始化表格 + function initTable() { + tableIns = febs.table.init({ + elem: '#activityAuditTable', + id: 'activityAuditTable', + url: ctx + 'admin/votesOption/list/', + where: getQueryParams(), // 传递查询参数 + page: true, + cols: [[ + { field: 'beautyName', title: '名称', minWidth: 150, align: 'left' }, + { field: 'number', title: '编号', minWidth: 50, align: 'left' }, + { + field: 'image', + title: '图片', + templet: function (d) { + return '<a lay-event="seeImgThumb">' + + '<img id="seeImgThumb' + d.id + '" src="' + d.image + + '" alt="图片" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' + + '</a>'; + }, + minWidth: 150, + align: 'center' + }, + + { + field: 'videoUrl', + title: '视频', + templet: function (d) { + return '<a lay-event="seeVideoThumb">' + + '<video id="seeVideoThumb' + d.id + '" src="' + d.videoUrl + + '" style="width: 100px; height: 100px; object-fit: cover; border-radius: 5px; cursor: pointer;" ' + + 'muted playsinline></video>' + + '</a>'; + }, + minWidth: 150, + align: 'center' + }, + { field: 'description', title: '描述', minWidth: 200, align: 'left' }, + { + field: 'audit', + title: '是否审核', + minWidth: 50, + align: 'left', + templet: function (d) { + if (d.audit === 0) { + return '未审核'; + } else if (d.audit === 1) { + return '已审核'; + } else if (d.audit === 2) { + return '已拒绝'; + } else { + return '其他'; + } + } + }, + { + title: '操作', + minWidth: 200, + align: 'center', + templet: function (d) { + var btns = ''; + if (d.audit === 0) { + btns += '<button class="layui-btn layui-btn-primary layui-btn-sm" type="button" lay-event="activityAuditEvent">审核</button>'; + } + btns += '<button class="layui-btn layui-btn-sm layui-btn-normal" type="button" lay-event="activityDetailEvent">查看详情</button>'; + return btns; + + } + } + + + ]] + }); + } + + // 打开详情页面 + function openDetailModal(id,activityId) { + var detailUrl = ctx + 'modules/votesActivity/votesoptionDetail/' + encodeURIComponent(id) + '/' + encodeURIComponent(activityId); + febs.modal.open('详情', detailUrl, { + area: ['80%', '80%'], + maxmin: true + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + // activityId: $searchForm.find('input[name="activityId"]').val().trim(), + activityId: $("#activityId").val().trim(), // 从前端 input 获取值 + }; + } + }); +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html b/src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html new file mode 100644 index 0000000..0316b61 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html @@ -0,0 +1,316 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity-discount" lay-title="活动设置"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="activity-discount-update"> + <form class="layui-form" action="" lay-filter="activity-discount-update-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + <!-- 隐藏的 ID 项 --> + <div class="layui-form-item febs-hide"> + <label class="layui-form-label">ID:</label> + <div class="layui-input-block"> + <input type="text" name="id" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">所属分类:</label> + <div class="layui-input-block"> + <div id="activity-group"></div> + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">名称:</label> + <div class="layui-input-block"> + <input type="text" name="name" lay-verify="required" + placeholder="" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">活动类型:</label> + <div class="layui-input-block"> + <select name="activityType" class="activity-type"> + <option value="1">文字</option> + <option value="2">图片</option> + <option value="3">视频</option> + <option value="4">二维码</option> + </select> + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label">票数总数:</label> + <div class="layui-input-block"> + <input type="text" name="totalVotes" lay-verify="required" + placeholder="" autocomplete="off" class="layui-input" disabled> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label">参与人数:</label> + <div class="layui-input-block"> + <input type="text" name="totalParticipants" lay-verify="required" + placeholder="" autocomplete="off" class="layui-input" disabled> + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">开始时间:</label> + <div class="layui-input-block"> + <input type="text" name="startTime" id="febs-form-group-date-start" lay-verify="datetime" + placeholder="yyyy-MM-dd hh:mm:ss" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">结束时间:</label> + <div class="layui-input-block"> + <input type="text" name="endTime" id="febs-form-group-date-end" lay-verify="datetime" + placeholder="yyyy-MM-dd hh:mm:ss" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">是否多选:</label> + <div class="layui-input-block"> + <select name="isMultiple" class="activity-type"> + <option value="1">是</option> + <option value="2">否</option> + </select> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">投票方式:</label> + <div class="layui-input-block"> + <select name="votesType" class="activity-type" > + <option value="1">一天一次</option> + </select> + </div> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">背景图片:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMax">上传</button> + <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> + <div class="layui-upload-list" id="demoMax"></div> + </blockquote> + </div> + </div> + </div> + <div class="layui-form-item febs-hide"> + <label class="layui-form-label">图片链接:</label> + <div class="layui-input-block"> + <input type="text" id="coverImage" lay-verify="required" name="coverImage" autocomplete="off" class="layui-input" readonly> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">活动描述:</label> + <div class="layui-input-block"> + <div style="border: 1px solid #ccc;"> + <div id="toolbar-container" class="toolbar"></div> + <div id="text-container" class="text" style="height: 450px;"></div> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="activity-discount-update-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } +</style> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delSku">删除</button> + </div> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + laydate = layui.laydate, + eleTree = layui.eleTree, + $view = $('#activity-discount-update'), + layedit = layui.layedit, + activity = [[${activity}]], + upload = layui.upload, + validate = layui.validate, + element = layui.element; + + + const E = window.wangEditor; + const editor = new E('#toolbar-container', '#text-container'); // 传入两个元素 + editor.config.showLinkImg = false; + editor.config.uploadFileName = 'file'; + editor.config.customUploadImg = function (files, insertImgFn) { + // files 是 input 中选中的文件列表 + // insertImgFn 是获取图片 url 后,插入到编辑器的方法 + // 上传图片,返回结果,将图片插入到编辑器中 + for (let i = 0; i < files.length; i++){ + var form = new FormData(); + form.append("file", files[0]); + $.ajax({ + url:'/admin/goods/uploadFileBaseEsc', + type: "post", + processData: false, + contentType: false, + data: form, + dataType: 'json', + success(res) { + // 上传代码返回结果之后,将图片插入到编辑器中 + insertImgFn(res.data.src, res.data.title, '') + } + }) + } + }; + editor.create(); + + laydate.render({ + elem: '#febs-form-group-date-start', + type: 'datetime', // 选择器类型为日期时间 + format: 'yyyy-MM-dd HH:mm:ss' // 自定义格式 + }); + + laydate.render({ + elem: '#febs-form-group-date-end', + type: 'datetime', // 选择器类型为日期时间 + format: 'yyyy-MM-dd HH:mm:ss' // 自定义格式 + }); + + formSelects.render(); + + let activityGroup = xmSelect.render({ + el: '#activity-group', + language: 'zn', + prop : { + value : 'id', + children : 'child' + }, + iconfont: { + parent: 'hidden', + }, + tips: '请选择', + filterable: true, + radio: true, + clickClose: true, + tree: { + show: true, + //非严格模式 + strict: false, + }, + data: [] + }) + + febs.get(ctx + 'admin/votesActivity/allGroup', null, function(res) { + activityGroup.update({ + data : res.data, + autoRow: true, + }); + + initActivityValue(); + }) + + //图片上传 + upload.render({ + elem: '#testMax' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,multiple: true + ,before: function(obj){ + //预读本地文件示例,不支持ie8 + obj.preview(function(index, file, result){ + $('#demoMax').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">') + }); + } + ,done: function(res){ + $("#coverImage").val(res.data.src); + } + }); + + + function initActivityValue() { + if (!activity) { + console.warn("activity 数据为空,无法初始化表单!"); + return; + } + + form.val("activity-discount-update-form", { + "id": activity.id || '', + "name": activity.name || '', + "coverImage": activity.coverImage || '', + "activityType": activity.activityType || '1', // 默认选中文字 + "votesType": activity.votesType || '1', // 默认一天一次 + "isMultiple": activity.isMultiple || '2', // 默认否 + "introduce": activity.introduce || '', + "startTime": activity.startTime || '', + "endTime": activity.endTime || '', + "totalVotes": activity.totalVotes || '', + "totalParticipants": activity.totalParticipants || '', + }); + $('#demoMax').append('<img src="' + activity.coverImage + '" alt="" class="layui-upload-img single-image" style="width: 130px">') + $("#coverImage").val(activity.coverImage); + + + var arr = []; + arr.push(activity.groupId) + activityGroup.setValue(arr); + + editor.txt.html(activity.introduce); + + } + + + + form.on('submit(activity-discount-update-form-submit)', function (data) { + data.field.groupId = activityGroup.getValue('valueStr'); + data.field.introduce = editor.txt.html(); + $.ajax({ + 'url':ctx + 'admin/votesActivity/activityUpdate', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity').find('#reset').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + }); +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html b/src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html new file mode 100644 index 0000000..1e884a6 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html @@ -0,0 +1,88 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-group-add" lay-title="活动分类新增"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="group-add"> + <form class="layui-form" action="" lay-filter="group-add-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">名称:</label> + <div class="layui-input-block"> + <input type="text" name="name" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + </div> + + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="group-add-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } + .layui-upload-list { + margin: 0 !important; + } + .multi-images { + margin: 0 5px !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'validate'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + form = layui.form, + $view = $('#group-add'), + validate = layui.validate; + + form.render(); + + + form.on('submit(group-add-form-submit)', function (data) { + $.ajax({ + 'url':ctx + 'admin/votesActivity/addGroup', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity-group').find('#query').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html b/src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html new file mode 100644 index 0000000..a96a7f3 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html @@ -0,0 +1,107 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-group-info" lay-title="活动分类编辑"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="group-info"> + <form class="layui-form" action="" lay-filter="group-info-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + </ul> + <div class="layui-tab-content"> + <input type="text" name="id" + placeholder="" autoComplete="off" class="layui-input febs-hide"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">名称:</label> + <div class="layui-input-block"> + <input type="text" name="name" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + </div> + + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="group-info-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } + .layui-upload-list { + margin: 0 !important; + } + .multi-images { + margin: 0 5px !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + form = layui.form, + $view = $('#group-info'), + groupInfo = [[${groupInfo}]], + layedit = layui.layedit, + upload = layui.upload, + layarea = layui.layarea, + validate = layui.validate; + + form.render(); + initGroupInfo(); + + formSelects.render(); + + function initGroupInfo() { + console.log("groupInfo:", groupInfo); // 调试信息 + form.val("group-info-form", { + "id": groupInfo.id, + "name": groupInfo.name, + }); + + } + + form.on('submit(group-info-form-submit)', function (data) { + $.ajax({ + 'url':ctx + 'admin/votesActivity/groupUpdate', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity-group').find('#query').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/groupList.html b/src/main/resources/templates/febs/views/modules/votesActivity/groupList.html new file mode 100644 index 0000000..16ab05b --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/groupList.html @@ -0,0 +1,198 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity-group" lay-title="活动分类列表"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="activity-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">名称</label> + <div class="layui-input-inline"> + <input type="text" placeholder="名称" name="name" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">审核状态</label> + <div class="layui-input-inline"> + <select name="status"> + <option value="">请选择</option> + <option value="0">未开启</option> + <option value="1">开启</option> + </select> + </div> + </div> + </div> + + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="groupTable" lay-data="{id: 'groupTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="list:view,add:add,votesActivityUpdate:update"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="votesActivityUpdate:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<script type="text/html" id="groupStatusSwitch"> + {{# if(d.status === 1) { }} + <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="groupStatusSwitch"> + {{# } else { }} + <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="groupStatusSwitch"> + {{# } }} +</script> +<script type="text/html" id="groupToolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="groupAdd:add" lay-event="addGroup">新增分类</button> + </div> +</script> + +<script type="text/html" id="groupOption"> + <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="groupInfo:view" lay-event="groupInfo">编辑</button> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" shiro:hasPermission="groupDelete:delete" lay-event="groupDelete">删除</button> +</script> + +<style> + .layui-form-onswitch { + background-color: #5FB878 !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-activity-group'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initGroupTable(); + // 初始化表格操作栏各个按钮功能 + table.on('tool(groupTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'groupDelete') { + febs.modal.confirm('删除', '确认删除?', function () { + groupDelete(data.id); + }); + } + if (layEvent === 'groupInfo') { + febs.modal.open('审核编辑','modules/votesActivity/groupInfo/' + data.id, { + btn: ['提交', '取消'], + area: ['100%', '100%'], + yes: function (index, layero) { + $('#febs-group-info').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + function groupDelete(id) { + febs.get(ctx + 'admin/votesActivity/groupDelete/' + id, null, function (data) { + febs.alert.success(data.message); + $query.click(); + }); + } + + // 初始化表格操作栏各个按钮功能 + table.on('toolbar(groupTable)', function (obj) { + let data = obj.data, + layEvent = obj.event; + console.log("触发事件:", obj.event); // 调试信息 + if(layEvent === 'addGroup'){ + febs.modal.open('新增','modules/votesActivity/groupAdd/', { + btn: ['提交', '取消'], + area: ['100%', '100%'], + yes: function (index, layero) { + $('#febs-group-add').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + + + function initGroupTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'groupTable', + url: ctx + 'admin/votesActivity/groupList', + toolbar:"#groupToolbar", + defaultToolbar:[], + cols: [[ + {type: 'numbers', title: '序号', width: 80}, + {title: '操作', toolbar: '#groupOption', minWidth: 200, align: 'center'}, + {field: 'name', title: '名称', minWidth: 100,align:'center'}, + {title: '审核状态', templet: '#groupStatusSwitch', minWidth: 100,align:'center'}, + {field: 'createdTime', title: '创建时间', minWidth: 150,align:'left'} + ]] + }); + } + + form.on('switch(groupStatusSwitch)', function (data) { + if (data.elem.checked) { + groupState(data.value,1); + } else { + groupState(data.value,0); + } + }) + function groupState(id,state) { + febs.get(ctx + 'admin/votesActivity/groupState/' + id+'/' + state, null, function (data) { + febs.alert.success(data.message); + $query.click(); + }); + } + + + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + // 获取查询参数 + function getQueryParams() { + return { + name: $searchForm.find('input[name="name"]').val().trim(), + status: $searchForm.find("select[name='status']").val(), + }; + } + + }) +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/list.html b/src/main/resources/templates/febs/views/modules/votesActivity/list.html new file mode 100644 index 0000000..233af1f --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/list.html @@ -0,0 +1,281 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity" lay-title="活动列表"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="activity-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">活动名称</label> + <div class="layui-input-inline"> + <input type="text" placeholder="活动名称" name="name" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">分类</label> + <div class="layui-input-inline"> + <select name="groupId" class="group-type"> + <option value="">请选择</option> + </select> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">状态</label> + <div class="layui-input-inline"> + <select name="status"> + <option value="">请选择</option> + <option value="0">未开启</option> + <option value="1">已开启</option> + </select> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="activityTable" lay-data="{id: 'activityTable'}"></table> +<!-- <style type="text/css">--> +<!-- ::-webkit-scrollbar {--> +<!-- height: 20px !important;--> +<!-- background-color: #f4f4f4;--> +<!-- }--> +<!-- </style>--> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="list:view,add:add,votesActivityUpdate:update"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="votesActivityUpdate:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<script type="text/html" id="activityStateSwitch"> + {{# if(d.status === 1) { }} + <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="activityStateSwitch"> + {{# } else if(d.status === 2) { }} + <input type="checkbox" value={{d.id}} lay-text="进行中|关闭" checked lay-skin="switch" lay-filter="activityStateSwitch"> + {{# } else { }} + <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="activityStateSwitch"> + {{# } }} +</script> + +<script type="text/html" id="activityToolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="add:add" lay-event="activityAdd">新增活动</button> + </div> +</script> + +<script type="text/html" id="activityOption"> + <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="activityUpdateEvent">编辑</button> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="activityDeleteEvent">删除</button> +</script> + +<style> + .layui-form-onswitch { + background-color: #5FB878 !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-activity'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + //(下拉框) + $.get(ctx + 'admin/votesActivity/allGroup', function (res) { + var data = res.data; + for (let k in data) + { + $(".group-type").append("<option value='" + data[k].id + "'>" + data[k].name + "</option>"); + } + layui.use('form', function () { + var form = layui.form; + form.render(); + }); + }); + + // 表格初始化 + initActivityTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(activityTable)', function (obj) { + console.log("触发事件:", obj.event); // 调试信息 + var data = obj.data, + layEvent = obj.event; + + if (layEvent === 'activityDeleteEvent') { + febs.modal.confirm('删除', '确认删除该活动?', function () { + delAct(data.id); + }); + } + if (layEvent === 'seeImgThumb') { + var t = $view.find('#seeImgThumb'+data.id+''); + //页面层 + layer.open({ + type: 1, + title: "图片", + skin: 'layui-layer-rim', //加上边框 + area: ['100%', '100%'], //宽高 + shadeClose: true, //开启遮罩关闭 + end: function (index, layero) { + return false; + }, + content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>' + }); + } + if (layEvent === 'activityUpdateEvent') { + febs.modal.open('编辑','modules/votesActivity/votesActivityUpdate/' + data.id, { + btn: ['提交', '取消'], + area: ['100%', '100%'], + yes: function (index, layero) { + $('#febs-activity-discount').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + + function changeState(id,state) { + febs.get(ctx + 'admin/votesActivity/changeState/' + id+'/' + state, null, function (data) { + febs.alert.success(data.message); + $query.click(); + }); + } + function delAct(id) { + febs.get(ctx + 'admin/votesActivity/delActivity/' + id, null, function (data) { + febs.alert.success(data.message); + $query.click(); + }); + } + + // 初始化表格操作栏各个按钮功能 + table.on('toolbar(activityTable)', function (obj) { + let data = obj.data, + layEvent = obj.event; + console.log("触发事件:", obj.event); // 调试信息 + if(layEvent === 'activityAdd'){ + febs.modal.open('新增活动', 'modules/votesActivity/add/', { + btn: ['提交', '取消'], + area:['100%','100%'], + yes: function (index, layero) { + $('#febs-activity-add').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + + function initActivityTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'activityTable', + url: ctx + 'admin/votesActivity/list', + toolbar:"#activityToolbar", + defaultToolbar:[], + cols: [[ + + {type: 'numbers', title: '序号', width: 80}, + {title: '操作', toolbar: '#activityOption', minWidth: 200, align: 'center'}, + {field: 'name', title: '名称', minWidth: 150,align:'left'}, + {field: 'groupby', title: '分类', minWidth: 150,align:'left'}, + { + field: 'coverImage', + title: '图片', + templet: function (d) { + return '<a lay-event="seeImgThumb">' + + '<img id="seeImgThumb' + d.id + '" src="' + d.coverImage + + '" alt="图片" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' + + '</a>'; + }, + minWidth: 150, + align: 'center' + }, + {field: 'activityType', title: '类型', minWidth: 90,align:'left',templet: function(d){ + if (d.activityType === '1') { + return '文字'; + } else if (d.activityType === '2') { + return `图片`; + } else if (d.activityType === '3') { + return `视频`; + } else { + return '二维码'; + } + } + }, + {field: 'isMultiple', title: '是否多选', minWidth: 90,align:'left',templet: function(d){ + if (d.activityType === '1') { + return '是'; + }else { + return '否'; + } + } + }, + {field: 'totalVotes', title: '总投票数', minWidth: 90,align:'left'}, + {field: 'startTime', title: '开始时间', minWidth: 200,align:'left'}, + {field: 'endTime', title: '结束时间', minWidth: 200,align:'left'}, + {field: 'status', title: '状态', templet: '#activityStateSwitch', minWidth: 130,align:'center'} + ]] + }); + } + + + form.on('switch(activityStateSwitch)', function (data) { + if (data.elem.checked) { + changeState(data.value,1); + } else { + changeState(data.value,0); + } + }) + + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + // 获取查询参数 + function getQueryParams() { + return { + name: $searchForm.find('input[name="name"]').val().trim(), + status: $searchForm.find("select[name='status']").val(), + groupId: $searchForm.find("select[name='groupId']").val(), + }; + } + + }) +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd-bak.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd-bak.html new file mode 100644 index 0000000..cc8ca1d --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd-bak.html @@ -0,0 +1,293 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-option-add" lay-title="活动选项新增"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="option-add"> + <form class="layui-form" action="" lay-filter="option-add-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> +<!-- <li>详情设置</li>--> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">所属活动:</label> + <div class="layui-input-block"> + <div id="activity-option"></div> + </div> + </div> + + <div class="layui-col-lg6"> + <label class="layui-form-label">序号:</label> + <div class="layui-input-block"> + <input type="number" name="number" placeholder="" autocomplete="off" class="layui-input" disabled> + </div> + </div> + </div> + <div class="layui-form-item"> +<!-- <div class="layui-col-lg6">--> +<!-- <label class="layui-form-label febs-form-item-require">报名名称:</label>--> +<!-- <div class="layui-input-block">--> +<!-- <input type="text" name="registeredName" lay-verify="required" autocomplete="off" class="layui-input" >--> +<!-- </div>--> +<!-- </div>--> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">姓名:</label> + <div class="layui-input-block"> + <input type="text" name="beautyName" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">手机:</label> + <div class="layui-input-block"> + <input type="text" name="mobilePhone" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label">性别:</label> + <div class="layui-input-block"> + <input type="radio" name="sex" value="1" title="男" /> + <input type="radio" name="sex" value="2" title="女" /> + <input type="radio" name="sex" value="2" title="保密" checked /> + </div> + </div> + + + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + + <div class="layui-col-lg6"> + <div class="layui-form-item" id="area-picker"> + <div class="layui-form-label">选择省/市</div> + <div class="layui-input-inline" style="width: 200px;"> + <select name="province" class="province-selector" data-value="上海市"> + <option value="">--选择省--</option> + </select> + </div> + <div class="layui-input-inline" style="width: 200px;" > + <select name="city" class="city-selector" data-value="上海市"> + <option value="">--选择市--</option> + </select> + </div> + <!-- <div class="layui-input-inline" style="width: 200px;" >--> + <!-- <select name="area" class="county-selector" data-value="浦东新区">--> + <!-- <option value="">--选择区--</option>--> + <!-- </select>--> + <!-- </div>--> + </div> + + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">详细地址:</label> + <div class="layui-input-block"> + <input type="text" name="address" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require" style="white-space: nowrap;">是否签约MCN:</label> + <div class="layui-input-block"> + <select name="ismcn" lay-verify="required" class="layui-input"> + <option value="0">否</option> + <option value="1">是</option> + </select> + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">选项图片:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test2">上传</button> + <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> + <div class="layui-upload-list" id="demo2"></div> + </blockquote> + </div> + </div> + <div class="layui-form-item febs-hide"> + <label class="layui-form-label">图片链接:</label> + <div class="layui-input-block"> + <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly> + </div> + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <label class="layui-form-label">爱好:</label> + <div class="layui-input-block"> + <label> + <textarea name="hobby" rows="5" autocomplete="off" class="layui-textarea" ></textarea> + </label> + </div> + </div> + </div> + +<!-- <div class="layui-tab-item">--> +<!-- <div class="layui-form-item">--> +<!-- <label class="layui-form-label febs-form-item-require">选项视频:</label>--> +<!-- <div class="layui-input-block">--> +<!-- <div class="layui-upload">--> +<!-- <button type="button" class="layui-btn upload" id="upload" style="background-color: #009688; margin-bottom: 2px">上传文件</button>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="layui-form-item">--> +<!-- <label class="layui-form-label">视频链接:</label>--> +<!-- <div class="layui-input-block">--> +<!-- <input type="text" id="videoUrl" lay-verify="required" name="videoUrl" autocomplete="off" class="layui-input" readonly>--> +<!-- </div>--> +<!-- </div>--> + +<!-- <div class="layui-form-item">--> +<!-- <label class="layui-form-label febs-form-item-require">选项描述:</label>--> +<!-- <div class="layui-input-block">--> +<!-- <div style="border: 1px solid #ccc;">--> +<!-- <div id="toolbar-container" class="toolbar"></div>--> +<!-- <div id="text-container" class="text" style="height: 450px;"></div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="option-add-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } + .layui-upload-list { + margin: 0 !important; + } + .multi-images { + margin: 0 5px !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + form = layui.form, + $view = $('#option-add'), + layedit = layui.layedit, + upload = layui.upload, + layarea = layui.layarea, + validate = layui.validate; + + form.render(); + + formSelects.render(); + + let obj1 = layarea.render({ + elem: '#area-picker', + change: function (res) { + //选择结果 + console.log(res); + } + }); + layarea.render({ + elem: '#area-picker', + data: { + province: "上海", + city: "上海", + county: "浦东新区", + }, + change: function (res) { + //选择结果 + console.log(res); + } + }); + + let activityOptions = xmSelect.render({ + el: '#activity-option', + language: 'zn', + prop : { + value : 'id', + children : 'child' + }, + iconfont: { + parent: 'hidden', + }, + tips: '请选择', + filterable: true, + radio: true, + clickClose: true, + tree: { + show: true, + //非严格模式 + strict: false, + }, + data: [] + }) + + febs.get(ctx + 'admin/votesActivity/allActivities', null, function(res) { + activityOptions.update({ + data : res.data, + autoRow: true, + }); + }) + + //图片上传 + upload.render({ + elem: '#test2' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,accept: 'file' //普通文件 + ,size: 10240 //限制文件大小,单位 KB + ,before: function(obj){ + //预读本地文件示例,不支持ie8 + obj.preview(function(index, file, result){ + $('#demo2').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">') + }); + } + ,done: function(res){ + $("#image").val(res.data.src); + } + }); + form.on('submit(option-add-form-submit)', function (data) { + data.field.activityId = activityOptions.getValue('valueStr'); + $.ajax({ + 'url':ctx + 'admin/votesActivity/addOption', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity-option').find('#query').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + + }); +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html new file mode 100644 index 0000000..f814f0e --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html @@ -0,0 +1,369 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-option-add" lay-title="活动选项新增"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="option-add"> + <form class="layui-form" action="" lay-filter="option-add-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + <li>详情设置</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">所属活动:</label> + <div class="layui-input-block"> + <div id="activity-option"></div> + </div> + </div> + + <div class="layui-col-lg6"> + <label class="layui-form-label">序号:</label> + <div class="layui-input-block"> + <input type="number" name="number" placeholder="" autocomplete="off" class="layui-input" disabled> + </div> + </div> + </div> + <div class="layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">报名名称:</label> + <div class="layui-input-block"> + <input type="text" name="registeredName" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">选项名称:</label> + <div class="layui-input-block"> + <input type="text" name="beautyName" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label">性别:</label> + <div class="layui-input-block"> + <input type="radio" name="sex" value="1" title="男" /> + <input type="radio" name="sex" value="2" title="女" /> + <input type="radio" name="sex" value="2" title="保密" checked /> + </div> + </div> + <div class="layui-form-item" id="area-picker"> + <div class="layui-form-label">选择省/市</div> + <div class="layui-input-inline" style="width: 200px;"> + <select name="province" class="province-selector" data-value="上海市"> + <option value="">--选择省--</option> + </select> + </div> + <div class="layui-input-inline" style="width: 200px;" > + <select name="city" class="city-selector" data-value="上海市"> + <option value="">--选择市--</option> + </select> + </div> + <!-- <div class="layui-input-inline" style="width: 200px;" >--> + <!-- <select name="area" class="county-selector" data-value="浦东新区">--> + <!-- <option value="">--选择区--</option>--> + <!-- </select>--> + <!-- </div>--> + </div> + + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">详细地址:</label> + <div class="layui-input-block"> + <input type="text" name="address" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">手机:</label> + <div class="layui-input-block"> + <input type="text" name="mobilePhone" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label">邮箱:</label> + <div class="layui-input-block"> + <input type="text" name="email" autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require" style="white-space: nowrap;">是否签约MCN:</label> + <div class="layui-input-block"> + <select name="ismcn" lay-verify="required" class="layui-input"> + <option value="0">否</option> + <option value="1">是</option> + </select> + </div> + </div> + </div> + + <!-- <div class="layui-row layui-col-space10 layui-form-item">--> + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">排名:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="number" name="rank" lay-verify="required" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">票数差:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="number" name="diffPrevious" lay-verify="required" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + <!-- </div>--> + + <div class="layui-form-item"> + <label class="layui-form-label">爱好:</label> + <div class="layui-input-block"> + <label> + <textarea name="hobby" rows="5" autocomplete="off" class="layui-textarea" ></textarea> + </label> + </div> + </div> + </div> + + <div class="layui-tab-item"> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">选项图片:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test2">上传</button> + <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> + <div class="layui-upload-list" id="demo2"></div> + </blockquote> + </div> + </div> + </div> + <div class="layui-form-item febs-hide"> + <label class="layui-form-label">图片链接:</label> + <div class="layui-input-block"> + <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">选项视频:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn upload" id="upload" style="background-color: #009688; margin-bottom: 2px">上传文件</button> + </div> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">视频链接:</label> + <div class="layui-input-block"> + <input type="text" id="videoUrl" lay-verify="required" name="videoUrl" autocomplete="off" class="layui-input" readonly> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">选项描述:</label> + <div class="layui-input-block"> + <div style="border: 1px solid #ccc;"> + <div id="toolbar-container" class="toolbar"></div> + <div id="text-container" class="text" style="height: 450px;"></div> + </div> + </div> + </div> + </div> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="option-add-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } + .layui-upload-list { + margin: 0 !important; + } + .multi-images { + margin: 0 5px !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + form = layui.form, + $view = $('#option-add'), + layedit = layui.layedit, + upload = layui.upload, + layarea = layui.layarea, + validate = layui.validate; + + form.render(); + const E = window.wangEditor; + const editor = new E('#toolbar-container', '#text-container'); // 传入两个元素 + editor.config.showLinkImg = false; + editor.config.uploadFileName = 'file'; + editor.config.customUploadImg = function (files, insertImgFn) { + // files 是 input 中选中的文件列表 + // insertImgFn 是获取图片 url 后,插入到编辑器的方法 + // 上传图片,返回结果,将图片插入到编辑器中 + for (let i = 0; i < files.length; i++){ + var form = new FormData(); + form.append("file", files[0]); + $.ajax({ + url:'/admin/goods/uploadFileBaseEsc', + type: "post", + processData: false, + contentType: false, + data: form, + dataType: 'json', + success(res) { + // 上传代码返回结果之后,将图片插入到编辑器中 + insertImgFn(res.data.src, res.data.title, '') + } + }) + } + }; + editor.create(); + + formSelects.render(); + + let obj1 = layarea.render({ + elem: '#area-picker', + change: function (res) { + //选择结果 + console.log(res); + } + }); + layarea.render({ + elem: '#area-picker', + data: { + province: "上海", + city: "上海", + county: "浦东新区", + }, + change: function (res) { + //选择结果 + console.log(res); + } + }); + + let activityOptions = xmSelect.render({ + el: '#activity-option', + language: 'zn', + prop : { + value : 'id', + children : 'child' + }, + iconfont: { + parent: 'hidden', + }, + tips: '请选择', + filterable: true, + radio: true, + clickClose: true, + tree: { + show: true, + //非严格模式 + strict: false, + }, + data: [] + }) + + febs.get(ctx + 'admin/votesActivity/allActivities', null, function(res) { + activityOptions.update({ + data : res.data, + autoRow: true, + }); + }) + + bindUpload(); + function bindUpload() { + upload.render({ + elem: '.upload' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,accept: 'file' + ,before: function(obj){ + layer.msg('上传中', {icon: 16, time: 0}); + } + ,done: function(res){ + var item = this.item; + //如果上传失败 + if(res.code !== 0){ + return layer.msg('上传失败'); + } + + $("#videoUrl").val(res.data.src); + layer.msg('上传完毕', {icon: 1}); + } + ,error: function(err){ + return layer.msg('上传失败'); + } + }); + } + + //图片上传 + upload.render({ + elem: '#test2' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,accept: 'file' //普通文件 + ,size: 10240 //限制文件大小,单位 KB + ,before: function(obj){ + //预读本地文件示例,不支持ie8 + obj.preview(function(index, file, result){ + if ($("#image").val()) { + $('#demo2').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">') + } else { + $('#demo2').append('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">') + } + + }); + } + ,done: function(res){ + $("#image").val(res.data.src); + } + }); + form.on('submit(option-add-form-submit)', function (data) { + data.field.activityId = activityOptions.getValue('valueStr'); + data.field.description = editor.txt.html(); + console.log(data.field); + $.ajax({ + 'url':ctx + 'admin/votesActivity/addOption', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity-option').find('#query').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + + }); +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo-bak.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo-bak.html new file mode 100644 index 0000000..36a3542 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo-bak.html @@ -0,0 +1,373 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-option-info" lay-title="活动选项编辑"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="option-info"> + <form class="layui-form" action="" lay-filter="option-info-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + </ul> + <div class="layui-tab-content"> + <input type="text" name="id" + placeholder="" autoComplete="off" class="layui-input febs-hide"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">审核</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">审核:</label> + <div class="layui-input-block"> + <input type="radio" name="audit" value="1" title="待审核" checked /> + <input type="radio" name="audit" value="2" title="同意" /> + <input type="radio" name="audit" value="3" title="拒绝" /> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">选项图片:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMaxOption">上传</button> + <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> + <div class="layui-upload-list" id="demoMaxOption"></div> + </blockquote> + </div> + </div> + </div> + <div class="layui-col-lg6"> + <div class="layui-input-block"> + <input type="text" lay-verify="required" id="image" name="image" autocomplete="off" class="layui-input" readonly> + </div> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openImg">图片审核</button> + </div> + </div> + + +<!-- <div class="layui-row layui-col-space10 layui-form-item">--> +<!-- <div class="layui-col-lg6">--> +<!-- <label class="layui-form-label febs-form-item-require">选项视频:</label>--> +<!-- <div class="layui-input-block">--> +<!-- <input type="text" lay-verify="required" name="videoUrl" autocomplete="off" class="layui-input" readonly>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="layui-col-lg6">--> +<!-- <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openVideo">视频审核</button>--> +<!-- </div>--> +<!-- </div>--> + </div> + <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">所属活动:</label> + <div class="layui-input-block"> + <div id="activity-option"></div> + </div> + </div> + + <div class="layui-col-lg6"> + <label class="layui-form-label">序号:</label> + <div class="layui-input-block"> + <!-- <input type="number" name="number" lay-verify="required" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}">--> + <input type="number" name="number" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}" disabled> + </div> + </div> + </div> + <div class="layui-form-item"> +<!-- <div class="layui-col-lg6">--> +<!-- <label class="layui-form-label">报名名称:</label>--> +<!-- <div class="layui-input-block">--> +<!-- <input type="text" name="registeredName" lay-verify="required" autocomplete="off" class="layui-input" >--> +<!-- </div>--> +<!-- </div>--> + <div class="layui-col-lg6"> + <label class="layui-form-label">姓名:</label> + <div class="layui-input-block"> + <input type="text" name="beautyName" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">票数统计:</label> + <div class="layui-input-block"> + <input type="number" name="voteCount" autocomplete="off" class="layui-input" > + </div> + </div> + </div> + + </div> + <!-- <div class="layui-row layui-col-space10 layui-form-item">--> + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">省:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="text" name="province" lay-verify="required" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">市:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="text" name="city" lay-verify="required" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + <!-- </div>--> + <div class="layui-row layui-col-space10 layui-form-item"> + + <div class="layui-col-lg3"> + <label class="layui-form-label febs-form-item-require">省:</label> + <div class="layui-input-block"> + <input type="text" name="city" autocomplete="off" class="layui-input" > + </div> + </div> + + <div class="layui-col-lg3"> + <label class="layui-form-label febs-form-item-require">市:</label> + <div class="layui-input-block"> + <input type="text" name="city" autocomplete="off" class="layui-input" > + </div> + </div> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">详细地址:</label> + <div class="layui-input-block"> + <input type="text" name="address" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">手机:</label> + <div class="layui-input-block"> + <input type="text" name="mobilePhone" autocomplete="off" class="layui-input" > + </div> + </div> + + <div class="layui-col-lg6"> + <label class="layui-form-label">性别:</label> + <div class="layui-input-block"> + <input type="radio" name="sex" value="1" title="男" /> + <input type="radio" name="sex" value="2" title="女" /> + <input type="radio" name="sex" value="3" title="保密" checked /> + </div> + </div> + + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require" style="white-space: nowrap;">是否签约MCN:</label> + <div class="layui-input-block"> + <select name="ismcn" lay-verify="required" class="layui-input"> + <option value="0">否</option> + <option value="1">是</option> + </select> + </div> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label">爱好:</label> + <div class="layui-input-block"> + <label> + <textarea name="hobby" rows="5" autocomplete="off" class="layui-textarea" ></textarea> + </label> + </div> + </div> + </div> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="option-info-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } + .layui-upload-list { + margin: 0 !important; + } + .multi-images { + margin: 0 5px !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + form = layui.form, + $view = $('#option-info'), + voteOption = [[${voteOption}]], + layedit = layui.layedit, + upload = layui.upload, + layarea = layui.layarea, + validate = layui.validate; + + form.render(); + + formSelects.render(); + + let activityOptions = xmSelect.render({ + el: '#activity-option', + language: 'zn', + prop : { + value : 'id', + children : 'child' + }, + iconfont: { + parent: 'hidden', + }, + tips: '请选择', + filterable: true, + radio: true, + clickClose: true, + tree: { + show: true, + //非严格模式 + strict: false, + }, + data: [] + }) + + febs.get(ctx + 'admin/votesActivity/allActivities', null, function(res) { + activityOptions.update({ + data : res.data, + autoRow: true, + }); + initOptionInfo(); + }) + //图片上传 + upload.render({ + elem: '#testMaxOption' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,multiple: true + ,before: function(obj){ + //预读本地文件示例,不支持ie8 + obj.preview(function(index, file, result){ + $('#demoMaxOption').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">') + }); + } + ,done: function(res){ + $("#image").val(res.data.src); + } + }); + // let obj1 = layarea.render({ + // elem: '#area-picker', + // change: function (res) { + // //选择结果 + // console.log(res); + // } + // }); + // layarea.render({ + // elem: '#area-picker', + // data: { + // province: "上海", + // city: "上海", + // county: "浦东新区", + // }, + // change: function (res) { + // //选择结果 + // console.log(res); + // } + // }); + + function initOptionInfo() { + console.log("voteOption:", voteOption); // 调试信息 + form.val("option-info-form", { + "id": voteOption.id, + "activityId": voteOption.activityId, + "beautyName": voteOption.beautyName, + "registeredName": voteOption.registeredName, + "description": voteOption.description, + "voteCount": voteOption.voteCount, + "rank": voteOption.rank, + "diffPrevious": voteOption.diffPrevious, + "number": voteOption.number, + "mobilePhone": voteOption.mobilePhone, + "sex": voteOption.sex, + "hobby": voteOption.hobby, + "ismcn": voteOption.ismcn, + "address": voteOption.address, + "province": voteOption.province, + "city": voteOption.city, + "videoUrl": voteOption.videoUrl, + "audit": voteOption.audit, + "image": voteOption.image, + "email": voteOption.email + }); + + var arr = []; + arr.push(voteOption.activityId) + activityOptions.setValue(arr); + + $('#demoMaxOption').append('<img src="' + voteOption.image + '" alt="" class="layui-upload-img single-image" style="width: 130px">') + $("#image").val(voteOption.image); + + // setTimeout(() => { + // obj1.reload({ + // data: { + // province: voteOption.province, + // city: voteOption.city, + // } + // }); + // }, 200); + } + + + + form.on('submit(option-info-form-submit)', function (data) { + data.field.activityId = activityOptions.getValue('valueStr'); + console.log(data.field); + $.ajax({ + 'url':ctx + 'admin/votesActivity/optionUpdate', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity-option').find('#query').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + + // 添加点击事件监听器 + $('#openImg').on('click', function() { + let imageUrl = $("#image").val(); + //页面层 + layer.open({ + type: 1, + title: "图片", + skin: 'layui-layer-rim', //加上边框 + area: ['100%', '100%'], //宽高 + shadeClose: true, //开启遮罩关闭 + end: function (index, layero) { + return false; + }, + content: '<div style="text-align:center"><img src="' + imageUrl + '" /></div>' + }); + }); + + }); +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html new file mode 100644 index 0000000..c9f1d6e --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html @@ -0,0 +1,456 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-option-info" lay-title="活动选项编辑"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="option-info"> + <form class="layui-form" action="" lay-filter="option-info-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + </ul> + <div class="layui-tab-content"> + <input type="text" name="id" + placeholder="" autoComplete="off" class="layui-input febs-hide"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">审核</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">审核:</label> + <div class="layui-input-block"> + <input type="radio" name="audit" value="1" title="待审核" checked /> + <input type="radio" name="audit" value="2" title="同意" /> + <input type="radio" name="audit" value="3" title="拒绝" /> + </div> + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">选项图片:</label> + <div class="layui-input-block"> + <input type="text" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-col-lg6"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openImg">图片审核</button> + </div> + </div> + + + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">选项视频:</label> + <div class="layui-input-block"> + <input type="text" lay-verify="required" name="videoUrl" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-col-lg6"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openVideo">视频审核</button> + </div> + </div> + </div> + <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">所属活动:</label> + <div class="layui-input-block"> + <div id="activity-option"></div> + </div> + </div> + + <div class="layui-col-lg6"> + <label class="layui-form-label">序号:</label> + <div class="layui-input-block"> + <!-- <input type="number" name="number" lay-verify="required" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}">--> + <input type="number" name="number" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}" disabled> + </div> + </div> + </div> + <div class="layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">报名名称:</label> + <div class="layui-input-block"> + <input type="text" name="registeredName" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">选项名称:</label> + <div class="layui-input-block"> + <input type="text" name="beautyName" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + + </div> + <!-- <div class="layui-row layui-col-space10 layui-form-item">--> + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">省:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="text" name="province" lay-verify="required" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">市:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="text" name="city" lay-verify="required" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + <!-- </div>--> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label">性别:</label> + <div class="layui-input-block"> + <input type="radio" name="sex" value="1" title="男" /> + <input type="radio" name="sex" value="2" title="女" /> + <input type="radio" name="sex" value="3" title="保密" checked /> + </div> + </div> + <div class="layui-form-item" id="area-picker"> + <div class="layui-form-label">选择省/市</div> + <div class="layui-input-inline" style="width: 200px;"> + <select name="province" class="province-selector" > + <option value="">--选择省--</option> + </select> + </div> + <div class="layui-input-inline" style="width: 200px;" > + <select name="city" class="city-selector"> + <option value="">--选择市--</option> + </select> + </div> + <!-- <div class="layui-input-inline" style="width: 200px;" >--> + <!-- <select name="area" class="county-selector" data-value="浦东新区">--> + <!-- <option value="">--选择区--</option>--> + <!-- </select>--> + <!-- </div>--> + </div> + + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">详细地址:</label> + <div class="layui-input-block"> + <input type="text" name="address" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">手机:</label> + <div class="layui-input-block"> + <input type="text" name="mobilePhone" autocomplete="off" class="layui-input" > + </div> + </div> + + </div> + <div class="layui-row layui-col-space10 layui-form-item"> + + <div class="layui-col-lg6"> + <label class="layui-form-label">邮箱:</label> + <div class="layui-input-block"> + <input type="text" name="email" autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require" style="white-space: nowrap;">是否签约MCN:</label> + <div class="layui-input-block"> + <select name="ismcn" lay-verify="required" class="layui-input"> + <option value="0">否</option> + <option value="1">是</option> + </select> + </div> + </div> + </div> + + <!-- <div class="layui-row layui-col-space10 layui-form-item">--> + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">排名:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="number" name="rank" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + + <!-- <div class="layui-col-lg6">--> + <!-- <label class="layui-form-label febs-form-item-require">票数差:</label>--> + <!-- <div class="layui-input-block">--> + <!-- <input type="number" name="diffPrevious" autocomplete="off" class="layui-input" >--> + <!-- </div>--> + <!-- </div>--> + <!-- </div>--> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">票数统计:</label> + <div class="layui-input-block"> + <input type="number" name="voteCount" autocomplete="off" class="layui-input" > + </div> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label">爱好:</label> + <div class="layui-input-block"> + <label> + <textarea name="hobby" rows="5" autocomplete="off" class="layui-textarea" ></textarea> + </label> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">选项描述:</label> + <div class="layui-input-block"> + <div style="border: 1px solid #ccc;"> + <div id="toolbar-container" class="toolbar"></div> + <div id="text-container" class="text" style="height: 450px;"></div> + </div> + </div> + </div> + </div> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="option-info-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } + .layui-upload-list { + margin: 0 !important; + } + .multi-images { + margin: 0 5px !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + form = layui.form, + $view = $('#option-info'), + voteOption = [[${voteOption}]], + layedit = layui.layedit, + upload = layui.upload, + layarea = layui.layarea, + validate = layui.validate; + + form.render(); + const E = window.wangEditor; + const editor = new E('#toolbar-container', '#text-container'); // 传入两个元素 + editor.config.showLinkImg = false; + editor.config.uploadFileName = 'file'; + editor.config.customUploadImg = function (files, insertImgFn) { + // files 是 input 中选中的文件列表 + // insertImgFn 是获取图片 url 后,插入到编辑器的方法 + // 上传图片,返回结果,将图片插入到编辑器中 + for (let i = 0; i < files.length; i++){ + var form = new FormData(); + form.append("file", files[0]); + $.ajax({ + url:'/admin/goods/uploadFileBaseEsc', + type: "post", + processData: false, + contentType: false, + data: form, + dataType: 'json', + success(res) { + // 上传代码返回结果之后,将图片插入到编辑器中 + insertImgFn(res.data.src, res.data.title, '') + } + }) + } + }; + editor.create(); + + formSelects.render(); + + let activityOptions = xmSelect.render({ + el: '#activity-option', + language: 'zn', + prop : { + value : 'id', + children : 'child' + }, + iconfont: { + parent: 'hidden', + }, + tips: '请选择', + filterable: true, + radio: true, + clickClose: true, + tree: { + show: true, + //非严格模式 + strict: false, + }, + data: [] + }) + + febs.get(ctx + 'admin/votesActivity/allActivities', null, function(res) { + activityOptions.update({ + data : res.data, + autoRow: true, + }); + initOptionInfo(); + }) + let obj1 = layarea.render({ + elem: '#area-picker', + change: function (res) { + //选择结果 + console.log(res); + } + }); + layarea.render({ + elem: '#area-picker', + data: { + province: "上海", + city: "上海", + county: "浦东新区", + }, + change: function (res) { + //选择结果 + console.log(res); + } + }); + + function initOptionInfo() { + console.log("voteOption:", voteOption); // 调试信息 + form.val("option-info-form", { + "id": voteOption.id, + "activityId": voteOption.activityId, + "beautyName": voteOption.beautyName, + "registeredName": voteOption.registeredName, + "description": voteOption.description, + "voteCount": voteOption.voteCount, + "rank": voteOption.rank, + "diffPrevious": voteOption.diffPrevious, + "number": voteOption.number, + "mobilePhone": voteOption.mobilePhone, + "sex": voteOption.sex, + "hobby": voteOption.hobby, + "ismcn": voteOption.ismcn, + "address": voteOption.address, + "province": voteOption.province, + "city": voteOption.city, + "videoUrl": voteOption.videoUrl, + "audit": voteOption.audit, + "image": voteOption.image, + "email": voteOption.email + }); + + var arr = []; + arr.push(voteOption.activityId) + activityOptions.setValue(arr); + + editor.txt.html(voteOption.description); + + setTimeout(() => { + obj1.reload({ + data: { + province: voteOption.province, + city: voteOption.city, + } + }); + }, 200); + } + + + + form.on('submit(option-info-form-submit)', function (data) { + data.field.activityId = activityOptions.getValue('valueStr'); + data.field.description = editor.txt.html(); + console.log(data.field); + $.ajax({ + 'url':ctx + 'admin/votesActivity/optionUpdate', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-activity-option').find('#query').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + + // 添加点击事件监听器 + $('#openImg').on('click', function() { + let imageUrl = voteOption.image; + //页面层 + layer.open({ + type: 1, + title: "图片", + skin: 'layui-layer-rim', //加上边框 + area: ['100%', '100%'], //宽高 + shadeClose: true, //开启遮罩关闭 + end: function (index, layero) { + return false; + }, + content: '<div style="text-align:center"><img src="' + imageUrl + '" /></div>' + }); + }); + + // 添加点击事件监听器 + $('#openVideo').on('click', function() { + let videoUrl = voteOption.videoUrl; + + // 校验视频URL是否有效 + if (!videoUrl || !isVideoUrlValid(videoUrl)) { + alert('视频地址无效,请检查!'); + return; + } + + // 使用更安全的方式生成HTML内容 + let videoContent = $('<div>').append( + $('<video>', { + controls: true, + autoplay: true, + name: 'media', + style: "width: 30%;height: 30%;" + }).append( + $('<source>', { + src: videoUrl, + type: 'video/mp4' + }) + ) + ).prop('outerHTML'); + + // 页面层 + layer.open({ + type: 1, + title: "视频", + skin: 'layui-layer-rim', // 加上边框 + area: ['100%', '100%'], + shadeClose: true, // 开启遮罩关闭 + content: `<div style="text-align:center">${videoContent}</div>` + }); + }); + + // 视频URL校验函数 + function isVideoUrlValid(url) { + try { + const urlObj = new URL(url); + return urlObj.protocol === 'http:' || urlObj.protocol === 'https:'; + } catch (e) { + return false; + } + } + + }); +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html new file mode 100644 index 0000000..109ee31 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html @@ -0,0 +1,256 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity-option" lay-title="活动选手列表"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="activity-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">选项名称</label> + <div class="layui-input-inline"> + <input type="text" placeholder="选项名称" name="beautyName" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">活动</label> + <div class="layui-input-inline"> + <select name="activityId" class="activity-type"> + <option value="">请选择</option> + </select> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">审核状态</label> + <div class="layui-input-inline"> + <select name="audit"> + <option value="">请选择</option> + <option value="1">待审核</option> + <option value="2">同意</option> + <option value="3">拒绝</option> + </select> + </div> + </div> + </div> + + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="export" title="导出"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="optionTable" lay-data="{id: 'optionTable'}"></table> +<!-- <style type="text/css">--> +<!-- ::-webkit-scrollbar {--> +<!-- height: 20px !important;--> +<!-- background-color: #f4f4f4;--> +<!-- }--> +<!-- </style>--> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="list:view,add:add,votesActivityUpdate:update"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="votesActivityUpdate:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<script type="text/html" id="auditType"> + {{# + var audit = { + 0: {title: '待审核', color: 'blue'}, + 1: {title: '待审核', color: 'blue'}, + 2: {title: '同意', color: 'green'}, + 3: {title: '拒绝', color: 'red'}, + 4: {title: '进行中', color: 'purple'}, + 5: {title: '已完成', color: 'gray'} + }[d.audit]; + }} + <span class="layui-badge febs-bg-{{audit.color}}">{{ audit.title }}</span> +</script> +<script type="text/html" id="optionToolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="optionAdd:add" lay-event="addOption">新增活动选项</button> + </div> +</script> + +<script type="text/html" id="optionOption"> + <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="optionInfo:view" lay-event="optionInfo">审核</button> + <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="voteRecord:view" lay-event="voteRecord">得票记录</button> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" shiro:hasPermission="optionDelete:delete" lay-event="optionDelete">删除</button> +</script> + +<style> + .layui-form-onswitch { + background-color: #5FB878 !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-activity-option'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + $export= $view.find('#export'), + tableIns; + + form.render(); + //(下拉框) + $.get(ctx + 'admin/votesActivity/allActivities', function (res) { + var data = res.data; + for (let k in data) + { + $(".activity-type").append("<option value='" + data[k].id + "'>" + data[k].name + "</option>"); + } + layui.use('form', function () { + var form = layui.form; + form.render(); + }); + }); + + // 表格初始化 + initOptionTable(); + // 初始化表格操作栏各个按钮功能 + table.on('tool(optionTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'optionDelete') { + febs.modal.confirm('删除', '确认删除该选项?', function () { + optionDelete(data.id); + }); + } + + if (layEvent === 'voteRecord') { + febs.modal.open( '得票记录', 'modules/votesActivity/voteRecord/' + data.id, { + maxmin: true, + }); + } + if (layEvent === 'optionInfo') { + febs.modal.open('审核编辑','modules/votesActivity/optionInfo/' + data.id, { + btn: ['提交', '取消'], + area: ['100%', '100%'], + yes: function (index, layero) { + $('#febs-option-info').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + function optionDelete(id) { + febs.get(ctx + 'admin/votesActivity/optionDelete/' + id, null, function (data) { + febs.alert.success(data.message); + $query.click(); + }); + } + + // 初始化表格操作栏各个按钮功能 + table.on('toolbar(optionTable)', function (obj) { + let data = obj.data, + layEvent = obj.event; + console.log("触发事件:", obj.event); // 调试信息 + if(layEvent === 'addOption'){ + febs.modal.open('新增','modules/votesActivity/optionAdd/', { + btn: ['提交', '取消'], + area: ['100%', '100%'], + yes: function (index, layero) { + $('#febs-option-add').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + + function changeState(id,state) { + febs.get(ctx + 'admin/votesActivity/changeState/' + id+'/' + state, null, function (data) { + febs.alert.success(data.message); + $query.click(); + }); + } + + + function initOptionTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'optionTable', + url: ctx + 'admin/votesActivity/optionList', + toolbar:"#optionToolbar", + defaultToolbar:[], + cols: [[ + {type: 'numbers', title: '序号', width: 80}, + {title: '操作', toolbar: '#optionOption', minWidth: 200, align: 'center'}, + {field: 'number', title: '编号', minWidth: 100,align:'center'}, + {field: 'beautyName', title: '选项名称', minWidth: 200,align:'center'}, + // {field: 'rank', title: '排名', minWidth: 150,align:'center'}, + {field: 'voteCount', title: '总票数', minWidth: 100,align:'center'}, + // {field: 'diffPrevious', title: '票数差', minWidth: 150,align:'center'}, + // {field: 'description', title: '选项描述', minWidth: 100,align:'center'}, + {title: '审核状态', templet: '#auditType', minWidth: 100,align:'center'}, + {field: 'createdTime', title: '创建时间', minWidth: 150,align:'left'} + ]] + }); + } + + form.on('switch(optionAuditSwitch)', function (data) { + if (data.elem.checked) { + changeState(data.value,1); + } else { + changeState(data.value,0); + } + }) + + + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 导出功能 + $export.on('click', function () { + var params = getQueryParams(); + var queryString = Object.keys(params).map(key => `${key}=${encodeURIComponent(params[key])}`).join('&'); + + window.location.href = ctx + 'admin/votesOption/exportOptionList?' + queryString; + }); + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + // 获取查询参数 + function getQueryParams() { + return { + beautyName: $searchForm.find('input[name="beautyName"]').val().trim(), + activityId: $searchForm.find("select[name='activityId']").val(), + audit: $searchForm.find("select[name='audit']").val(), + }; + } + + }) +</script> diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html b/src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html new file mode 100644 index 0000000..81de6bc --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html @@ -0,0 +1,55 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-vote-record" lay-title="得票记录"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <table lay-filter="voteRecordTable" lay-data="{id: 'voteRecordTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<script data-th-inline="none" type="text/javascript"> + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect' ,'eleTree'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + treeSelect = layui.treeSelect, + dropdown = layui.dropdown, + $view = $('#febs-vote-record'), + $query = $view.find('#queryChild'), + $searchForm = $view.find('formChild'), + sortObject = {field: 'createTime', type: null}, + tableIns, + createTimeFrom, + createTimeTo; + + form.render(); + + initVoteRecordTable(); + + laydate.render({ + elem: '#user-createTime', + range: true, + trigger: 'click' + }); + + + function initVoteRecordTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'voteRecordTable', + url: ctx + 'admin/votesActivity/voteRecord?parentId=1', + cols: [[ + {field: 'memberName', title: '昵称', minWidth: 150,align:'center'}, + {field: 'activityName', title: '活动', minWidth: 150,align:'center'}, + {field: 'optionName', title: '选项', minWidth: 150,align:'center'}, + {field: 'voteTime', title: '投票时间', minWidth: 150,align:'center'} + ]] + }); + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/voteoptionDetail.html b/src/main/resources/templates/febs/views/modules/votesActivity/voteoptionDetail.html new file mode 100644 index 0000000..cc69183 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/votesActivity/voteoptionDetail.html @@ -0,0 +1,177 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity-detail" lay-title="活动详情" + xmlns="http://www.w3.org/1999/html"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="activity-detail-view"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">详情信息</li> + </ul> + <div class="layui-tab-content"> + + <div class="layui-form-item"> + <label class="layui-form-label">选手姓名:</label> + <div class="layui-input-block"> + <label class="layui-form-mid" id="beautyName" th:text="${votesOption.beautyName}"></label> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label">个人照片:</label> + <div class="layui-input-block"> + <img class="layui-upload-img" id="image" style="width: 100px" th:src="${votesOption.image}" alt="选手照片"/> + </div> + </div> + + + <div class="layui-form-item"> + <label class="layui-form-label">视频链接:</label> + <div class="layui-input-block"> + <video id="videoUrl" style="width: 300px; height: 200px; object-fit: cover; border-radius: 8px;" controls> + <source th:src="${votesOption.videoUrl}" type="video/mp4"/> + 您的浏览器不支持视频播放。 + </video> + </div> + </div> + + + <div class="layui-form-item"> + <label class="layui-form-label">是否审核:</label> + <div class="layui-input-block"> + <label class="layui-form-mid" id="audit"> + <span th:switch="${votesOption.audit}"> + <span th:case="1">未审核</span> + <span th:case="2">已审核</span> + <span th:case="3">已拒绝</span> + <span th:case="*">未知状态</span> + </span> + </label> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">手机:</label> + <div class="layui-input-block"> + <label class="layui-form-mid" id="mobilePhone" th:text="${votesOption.mobilePhone}"></label> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">地址:</label> + <div class="layui-input-block"> + <label class="layui-form-mid" id="address" th:text="${votesOption.address}"></label> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">性别:</label> + <div class="layui-input-block"> + <label class="layui-form-mid" id="sex" th:text="${votesOption.sex}"></label> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">兴趣爱好:</label> + <div class="layui-input-block"> + <label class="layui-form-mid" id="hobby" th:text="${votesOption.hobby}"></label> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">是否签约mcn机构:</label> + <div class="layui-input-block"> + <label class="layui-form-mid" id="ismcn"> + <span th:switch="${votesOption.ismcn}"> + <span th:case="0">否</span> + <span th:case="1">是</span> + </span> + </label> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">选手说明:</label> + <div class="layui-input-block"> + <pre class="layui-form-mid" id="description" th:text="${votesOption.description}" style="white-space: pre-wrap;"></pre> + </div> + </div> + + </div> + </div> + </div> + </div> + </div> +</div> + +<script> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree', 'dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + laydate = layui.laydate, + eleTree = layui.eleTree, + layedit = layui.layedit, + upload = layui.upload, + validate = layui.validate, + element = layui.element, + // votesOption = [[${votesOption}]], + element = layui.element; + + $(document).ready(function() { + initValue(); + }); + + function initValue() { + // if (!votesOption) { + // console.warn("votesOption 数据为空,无法初始化详情页!"); + // return; + // } + // $("#beautyName").text(votesOption.beautyName || '无'); + // $("#image").attr("src", votesOption.image || ''); + // $("#videoUrl").attr("src", votesOption.videoUrl || ''); + // $("#audit").text(getVotesAuditText(votesOption.audit)); + // $("#mobilePhone").text(votesOption.mobilePhone || '无'); + // $("#address").text(votesOption.province + votesOption.city + (votesOption.address || '无')); + // $("#sex").text(getSexText(votesOption.sex)); + // $("#hobby").text(votesOption.hobby || '无'); + // $("#ismcn").text(getVotesmcnText(votesOption.ismcn)); + // $("#description").text(votesOption.description || '无'); + } + + function getVotesAuditText(type) { + switch (type) { + case 0: + return '未审核'; + case 1: + return '已审核'; + case 2: + return '已拒绝'; + default: + return '未知状态'; + } + } + + function getVotesmcnText(type) { + switch (type) { + case 0: + return '未签约'; + case 1: + return '已签约'; + default: + return '未知状态'; + } + } + + function getSexText(sex) { + if (sex === '0' || sex === 0) { + return '女'; + } else if (sex === '1' || sex === 1) { + return '男'; + } else { + return '未知'; + } + } + + initValue(); + }); + + +</script> -- Gitblit v1.9.1