zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java
New file @@ -0,0 +1,113 @@ package com.matrix.system.activity.action; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.StringUtils; import com.matrix.system.activity.dto.ActivitiesListDto; import com.matrix.system.activity.dto.AddSignAwardSetDto; import com.matrix.system.activity.dto.BeCloseDto; import com.matrix.system.activity.dto.BeReadyDto; import com.matrix.system.activity.dto.DelRowDto; import com.matrix.system.activity.service.ActivitySignAwardSetService; import com.matrix.system.activity.vo.ActivitiesListVo; import com.matrix.system.hive.action.util.QueryUtil; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * @description 奖品设置表 * @author yourName * @date 2021-03-31 16:57 */ @RestController @RequestMapping(value = "admin/activitySignAwardSet") public class ActivitySignAwardSetAction { @Autowired private ActivitySignAwardSetService activitySignAwardSetService; /** * 新增签到活动 */ @PostMapping(value = "/addSignAwardSet") public @ResponseBody AjaxResult addSignAwardSet(@RequestBody AddSignAwardSetDto addSignAwardSetDto) { return activitySignAwardSetService.activitySignAwardSetService(addSignAwardSetDto); } /** * 查询活动列表 */ @ApiOperation(value = "查询活动列表") @ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ActivitiesListVo.class) }) @PostMapping(value = "/findActivitiesList") public @ResponseBody AjaxResult findActivitiesList(@RequestBody ActivitiesListDto activitiesListDto) { //设置用户公司ID QueryUtil.setQueryLimitCom(activitiesListDto); //排序 if(StringUtils.isBlank(activitiesListDto.getSort())){ activitiesListDto.setSort("create_time"); activitiesListDto.setOrder("desc"); } Page<ActivitiesListVo> page = new Page(activitiesListDto.getPageNum(), activitiesListDto.getPageSize()); IPage<ActivitiesListVo> rows = activitySignAwardSetService.findActivitiesList(page,activitiesListDto); AjaxResult result = AjaxResult.buildSuccessInstance(rows.getRecords(),rows.getTotal()); return result; } /** *发布 */ @ApiOperation(value = "发布") @PostMapping(value = "/beReady") public @ResponseBody AjaxResult beReady(@RequestBody BeReadyDto beReadyDto) { return activitySignAwardSetService.beReady(beReadyDto); } /** *删除 */ @ApiOperation(value = "删除") @PostMapping(value = "/delRow") public @ResponseBody AjaxResult delRow(@RequestBody DelRowDto delRowDto) { return activitySignAwardSetService.delRow(delRowDto); } /** *关闭 */ @ApiOperation(value = "关闭") @PostMapping(value = "/beClose") public @ResponseBody AjaxResult beClose(@RequestBody BeCloseDto beCloseDto) { return activitySignAwardSetService.beClose(beCloseDto); } } zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignReceiveRecordAction.java
New file @@ -0,0 +1,21 @@ package com.matrix.system.activity.action; import com.matrix.system.activity.service.ActivitySignReceiveRecordService; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.beans.factory.annotation.Autowired; /** * @description 领取记录表 * @author yourName * @date 2021-03-31 16:57 */ @RestController @RequestMapping(value = "admin/activitySignReceiveRecord") public class ActivitySignReceiveRecordAction { @Autowired private ActivitySignReceiveRecordService activitySignReceiveRecordService; } zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignRecordAction.java
New file @@ -0,0 +1,22 @@ package com.matrix.system.activity.action; import com.matrix.system.activity.service.ActivitySignRecordService; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.beans.factory.annotation.Autowired; /** * @description 签到记录表 * @author yourName * @date 2021-03-31 16:57 */ @RestController @RequestMapping(value = "admin/activitySignRecord") public class ActivitySignRecordAction { @Autowired private ActivitySignRecordService activitySignRecordService; } zq-erp/src/main/java/com/matrix/system/activity/constant/ActivitySignConstant.java
New file @@ -0,0 +1,5 @@ package com.matrix.system.activity.constant; public class ActivitySignConstant { } zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignAwardSetDao.java
New file @@ -0,0 +1,14 @@ package com.matrix.system.activity.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.matrix.system.activity.entity.ActivitySignAwardSet; /** * @description 奖品设置表 * @author yourName * @date 2021-03-31 16:57 */ public interface ActivitySignAwardSetDao extends BaseMapper<ActivitySignAwardSet>{ } zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignReceiveRecordDao.java
New file @@ -0,0 +1,14 @@ package com.matrix.system.activity.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.matrix.system.activity.entity.ActivitySignReceiveRecord; /** * @description 领 * @author yourName * @date 2021-03-31 16:57 */ public interface ActivitySignReceiveRecordDao extends BaseMapper<ActivitySignReceiveRecord>{ } zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignRecordDao.java
New file @@ -0,0 +1,14 @@ package com.matrix.system.activity.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.matrix.system.activity.entity.ActivitySignRecord; /** * @description 签到记录表 * @author yourName * @date 2021-03-31 16:57 */ public interface ActivitySignRecordDao extends BaseMapper<ActivitySignRecord>{ } zq-erp/src/main/java/com/matrix/system/activity/dto/ActivitiesListDto.java
New file @@ -0,0 +1,22 @@ package com.matrix.system.activity.dto; import com.matrix.core.pojo.BasePageQueryDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ActivitiesListDto", description = "查询参数") public class ActivitiesListDto extends BasePageQueryDto { @ApiModelProperty(value ="活动名称") private String hdmc; @ApiModelProperty(value ="活动状态") private Integer hdzt; @ApiModelProperty(hidden = true) private Long companyId; } zq-erp/src/main/java/com/matrix/system/activity/dto/AddSignAwardSetDto.java
New file @@ -0,0 +1,28 @@ package com.matrix.system.activity.dto; import com.matrix.system.activity.entity.ActivitySignAwardSet; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.List; @Data @ApiModel(value = "AddSignAwardSetDto", description = "查询参数") public class AddSignAwardSetDto { @ApiModelProperty(value ="活动名称") private String actName; @ApiModelProperty(value ="活动编码") private String actCode; @ApiModelProperty(value ="活动开始时间") private Date beginTime; @ApiModelProperty(value ="活动结束时间") private Date endTime; private SignSetBasicJsonDto signSetBasicJsonDto; private List<ActivitySignAwardSet> activitySignAwardSets; } zq-erp/src/main/java/com/matrix/system/activity/dto/BeCloseDto.java
New file @@ -0,0 +1,17 @@ package com.matrix.system.activity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "BeCloseDto", description = "参数") public class BeCloseDto { @ApiModelProperty(value ="活动主表ID") private Long actId; @ApiModelProperty(hidden = true) private Long companyId; } zq-erp/src/main/java/com/matrix/system/activity/dto/BeReadyDto.java
New file @@ -0,0 +1,17 @@ package com.matrix.system.activity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "BeReadyDto", description = "参数") public class BeReadyDto { @ApiModelProperty(value ="活动主表ID") private Long actId; @ApiModelProperty(hidden = true) private Long companyId; } zq-erp/src/main/java/com/matrix/system/activity/dto/DelRowDto.java
New file @@ -0,0 +1,17 @@ package com.matrix.system.activity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "DelRowDto", description = "参数") public class DelRowDto { @ApiModelProperty(value ="活动主表ID") private Long actId; @ApiModelProperty(hidden = true) private Long companyId; } zq-erp/src/main/java/com/matrix/system/activity/dto/SignSetBasicJsonDto.java
New file @@ -0,0 +1,33 @@ package com.matrix.system.activity.dto; import java.util.Date; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "SignSetBasicJsonDto", description = "查询参数") public class SignSetBasicJsonDto { @ApiModelProperty(value ="标题图片") private String imageUrlTitle; @ApiModelProperty(value ="头部图片") private String imageUrlHead; @ApiModelProperty(value ="按钮图片") private String imageUrlButton; @ApiModelProperty(value ="状态图片") private String imageUrlState; @ApiModelProperty(value ="规则内容") private String ruleExplain; @ApiModelProperty(value ="字体颜色") private String typographyColor; @ApiModelProperty(value ="背景颜色") private String backgroundColor; @ApiModelProperty(value ="字体大小") private Integer typographyNum; @ApiModelProperty(value ="字体透明度") private Integer typographyLight; } zq-erp/src/main/java/com/matrix/system/activity/entity/ActivitySignAwardSet.java
New file @@ -0,0 +1,161 @@ package com.matrix.system.activity.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.matrix.core.anotations.Extend; import com.matrix.system.score.entity.BaseEntity; import lombok.Data; import java.util.Date; /** * @description 奖品设置表 * @author yourName * @date 2021-03-31 16:57 */ @Data @TableName("activity_sign_award_set") public class ActivitySignAwardSet extends BaseEntity{ @Extend private static final long serialVersionUID = 1L; /** * 奖项类型(1:自定义产品2:积分3:优惠券4:店铺商品) */ private Integer awardType; /** * 奖项规则(1:每日奖励(默认)2:累计签到天数) */ private Integer awardRule; /** * 签到累计天数 */ private Integer cumulativeDay; /** * 奖项名称 */ private String awardName; /** * 图片介绍 */ private String introduceImg; /** * 文字介绍 */ private String introduceTip; /** * 奖项库存数量 */ private Integer awardInventoryCnt; /** * 已派发数量 */ private Integer awardDistributeCnt; /** * 兑奖方式(1:线下兑换2:物流配送3:客服兑换) */ private Integer awardWay; /** * 操作提示 */ private String operationTip; /** * 兑奖地址 */ private String prizeAddress; /** * 兑奖期限开始日期 */ private Date prizeStartTime; /** * 兑奖期限结束日期 */ private Date prizeEndTime; /** * 客服微信 */ private String wechatImg; /** * 积分数量 */ private Integer scoreCnt; /** * 优惠券ID */ private String couponId; /** * 商品ID */ private String goodsId; /** * 活动主表ID */ private Long activityId; /** * 公司ID */ private Long companyId; } zq-erp/src/main/java/com/matrix/system/activity/entity/ActivitySignReceiveRecord.java
New file @@ -0,0 +1,87 @@ package com.matrix.system.activity.entity; import com.matrix.core.pojo.EntityDTO; import com.matrix.system.score.entity.BaseEntity; import com.matrix.core.anotations.Extend; import java.util.Date; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * @description 领 * @author yourName * @date 2021-03-31 16:57 */ @Data @TableName("activity_sign_receive_record") public class ActivitySignReceiveRecord extends BaseEntity{ @Extend private static final long serialVersionUID = 1L; /** * openID */ private String openId; /** * 领取时间 */ private Date receiveTime; /** * 备注 */ private String remark; /** * 奖品设置表ID */ private Long awardId; /** * 是否已领取(1:待领取2:已领取) */ private Integer state; /** * 核销码 */ private String writeOffCode; /** * 活动主表ID */ private Long activityId; /** * 公司ID */ private Long companyId; } zq-erp/src/main/java/com/matrix/system/activity/entity/ActivitySignRecord.java
New file @@ -0,0 +1,66 @@ package com.matrix.system.activity.entity; import com.matrix.core.pojo.EntityDTO; import com.matrix.system.score.entity.BaseEntity; import com.matrix.core.anotations.Extend; import java.util.Date; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * @description 签到记录表 * @author yourName * @date 2021-03-31 16:57 */ @Data @TableName("activity_sign_record") public class ActivitySignRecord extends BaseEntity{ @Extend private static final long serialVersionUID = 1L; /** * openID */ private String openId; /** * 签到时间 */ private Date signTime; /** * 累计签到天数 */ private Integer cumulativeDay; /** * 活动主表ID */ private Long activityId; /** * 公司ID */ private Long companyId; } zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java
New file @@ -0,0 +1,151 @@ package com.matrix.system.activity.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.WebUtil; import com.matrix.system.activity.dao.ActivitySignAwardSetDao; import com.matrix.system.activity.dto.ActivitiesListDto; import com.matrix.system.activity.dto.AddSignAwardSetDto; import com.matrix.system.activity.dto.BeCloseDto; import com.matrix.system.activity.dto.BeReadyDto; import com.matrix.system.activity.dto.DelRowDto; import com.matrix.system.activity.dto.SignSetBasicJsonDto; import com.matrix.system.activity.entity.ActivitySignAwardSet; import com.matrix.system.activity.vo.ActivitiesListVo; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.hive.action.util.QueryUtil; import com.matrix.system.shopXcx.bean.ShopActivities; import com.matrix.system.shopXcx.dao.ShopActivitiesDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; /** * @description 奖品设置表 * @author yourName * @date 2021-03-31 16:57 */ @Service public class ActivitySignAwardSetService extends ServiceImpl<ActivitySignAwardSetDao, ActivitySignAwardSet>{ @Autowired private ShopActivitiesDao shopActivitiesDao; @Autowired private ActivitySignAwardSetDao activitySignAwardSetDao; @Transactional public AjaxResult activitySignAwardSetService(AddSignAwardSetDto addSignAwardSetDto) { //获取当前登录人员信息 SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); Long companyId = user.getCompanyId(); //新增活动主表信息 ShopActivities shopActivities = new ShopActivities(); shopActivities.setActName(addSignAwardSetDto.getActName()); shopActivities.setActCode(addSignAwardSetDto.getActCode()); shopActivities.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE); shopActivities.setActType(ShopActivities.ACTIVITIES_TYPE_SIGN); shopActivities.setActStatus(ShopActivities.ACTSTATUS_STATUS_RELEASE); shopActivities.setActBeginTime(addSignAwardSetDto.getBeginTime()); shopActivities.setActEndTime(addSignAwardSetDto.getEndTime()); shopActivities.setCompanyId(companyId); shopActivities.setCreateBy(user.getSuName()); shopActivities.setUpdateBy(user.getSuName()); //将基本信息转换成JSON字符串存储到活动主表的act_content字段 SignSetBasicJsonDto signSetBasicJsonDto = addSignAwardSetDto.getSignSetBasicJsonDto(); String json=JSON.toJSONString(signSetBasicJsonDto); shopActivities.setActContent(json); int insert = shopActivitiesDao.insert(shopActivities); if(insert > 0){ //新增活动奖品信息 List<ActivitySignAwardSet> activitySignAwardSets = addSignAwardSetDto.getActivitySignAwardSets(); if(CollUtil.isNotEmpty(activitySignAwardSets)) { for(ActivitySignAwardSet activitySignAwardSet : activitySignAwardSets) { activitySignAwardSet.setCreateBy(user.getSuName()); activitySignAwardSet.setCreateTime(new Date()); activitySignAwardSet.setUpdateTime(new Date()); activitySignAwardSet.setUpdateBy(user.getSuName()); activitySignAwardSet.setCompanyId(companyId); activitySignAwardSet.setActivityId(shopActivities.getId()); activitySignAwardSetDao.insert(activitySignAwardSet); } } }else{ return new AjaxResult(AjaxResult.STATUS_FAIL, "保存失败"); } return new AjaxResult(AjaxResult.STATUS_SUCCESS, "保存成功"); } public IPage<ActivitiesListVo> findActivitiesList(Page<ActivitiesListVo> page, ActivitiesListDto activitiesListDto) { return shopActivitiesDao.findActivitiesList(page,activitiesListDto); } @Transactional public AjaxResult beReady(BeReadyDto beReadyDto) { //设置用户公司ID QueryUtil.setQueryLimitCom(beReadyDto); Long actId = beReadyDto.getActId(); ShopActivities shopActivity = shopActivitiesDao.selectById(actId); if(ObjectUtil.isEmpty(shopActivity)) { return AjaxResult.buildFailInstance("网络不通畅,请刷新页面"); } /** * 未发布状态即使达到活动时间也不进入进行中状态 */ //未发布状态点击发布,状态变成未开始,且是开启状态 shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_READY); shopActivity.setIsStart(ShopActivities.ACTIVITIES_STATUS_OPEN); shopActivitiesDao.updateByModel(shopActivity); return AjaxResult.buildSuccessInstance("操作成功"); } public AjaxResult delRow(DelRowDto delRowDto) { //设置用户公司ID QueryUtil.setQueryLimitCom(delRowDto); Long actId = delRowDto.getActId(); ShopActivities shopActivity = shopActivitiesDao.selectById(actId); if(ObjectUtil.isEmpty(shopActivity)) { return AjaxResult.buildFailInstance("网络不通畅,请刷新页面"); } /** * 删除状态更新状态为已删除,只能查看活动统计 */ shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_DEL); shopActivity.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE); shopActivitiesDao.updateByModel(shopActivity); return AjaxResult.buildSuccessInstance("操作成功"); } public AjaxResult beClose(BeCloseDto beCloseDto) { //设置用户公司ID QueryUtil.setQueryLimitCom(beCloseDto); Long actId = beCloseDto.getActId(); ShopActivities shopActivity = shopActivitiesDao.selectById(actId); if(ObjectUtil.isEmpty(shopActivity)) { return AjaxResult.buildFailInstance("网络不通畅,请刷新页面"); } /** * 关闭状态 */ shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_END); shopActivity.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE); shopActivitiesDao.updateByModel(shopActivity); return AjaxResult.buildSuccessInstance("操作成功"); } } zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignReceiveRecordService.java
New file @@ -0,0 +1,22 @@ package com.matrix.system.activity.service; import org.springframework.stereotype.Service; import com.matrix.system.activity.dao.ActivitySignReceiveRecordDao; import com.matrix.system.activity.entity.ActivitySignReceiveRecord; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @description 领 * @author yourName * @date 2021-03-31 16:57 */ @Service public class ActivitySignReceiveRecordService extends ServiceImpl<ActivitySignReceiveRecordDao, ActivitySignReceiveRecord>{ } zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignRecordService.java
New file @@ -0,0 +1,22 @@ package com.matrix.system.activity.service; import org.springframework.stereotype.Service; import com.matrix.system.activity.dao.ActivitySignRecordDao; import com.matrix.system.activity.entity.ActivitySignRecord; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @description 签到记录表 * @author yourName * @date 2021-03-31 16:57 */ @Service public class ActivitySignRecordService extends ServiceImpl<ActivitySignRecordDao, ActivitySignRecord>{ } zq-erp/src/main/java/com/matrix/system/activity/vo/ActivitiesListVo.java
New file @@ -0,0 +1,107 @@ package com.matrix.system.activity.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @Data public class ActivitiesListVo { /** * 活动类型 团购 */ public static final int ACTIVITIES_TYPE_GROUP = 1; /** * 活动类型 秒杀 */ public static final int ACTIVITIES_TYPE_SECKILL = 2; /** * 活动类型 沙龙 */ public static final int ACTIVITIES_TYPE_SALON = 3; /** * 活动类型 签到 */ public static final int ACTIVITIES_TYPE_SIGN = 4; /** * 活动状态 开启 */ public static final int ACTIVITIES_STATUS_OPEN = 1; /** * 活动状态 关闭 */ public static final int ACTIVITIES_STATUS_CLOSE = 2; /** * 主键 */ private Long id; /** * 活动名称 */ @ApiModelProperty(value = "活动名称") private String actName; /** * 活动编码 */ @ApiModelProperty(value = "活动编码") private String actCode; /** * 活动类型 */ @ApiModelProperty(value = "活动类型") private Integer actType; /** * 开始时间 */ @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8") private Date actBeginTime; /** * 结束时间 */ @ApiModelProperty(value = "结束时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8") private Date actEndTime; /** * 活动状态 */ @ApiModelProperty(value = "活动状态") private Integer actStatus; //未发布 public static final int ACTSTATUS_STATUS_RELEASE = 1; //未开始 public static final int ACTSTATUS_STATUS_READY = 2; //进行中 public static final int ACTSTATUS_STATUS_ING = 3; //已结束 public static final int ACTSTATUS_STATUS_END = 4; @ApiModelProperty(value = "创建人") private String createBy; /** * 活动说明 */ @ApiModelProperty(value = "活动说明") private String actRemark; /** * 公司ID */ @ApiModelProperty(hidden = true) private Long companyId; } zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopActivities.java
@@ -30,6 +30,10 @@ * 活动类型 沙龙 */ public static final int ACTIVITIES_TYPE_SALON = 3; /** * 活动类型 签到 */ public static final int ACTIVITIES_TYPE_SIGN = 4; /** * 活动状态 开启 @@ -50,6 +54,10 @@ * 活动名称 */ private String actName; /** * 活动编码 */ private String actCode; /** @@ -76,6 +84,17 @@ * 活动状态 */ private Integer actStatus; //未发布 public static final int ACTSTATUS_STATUS_RELEASE = 2; //未开始 public static final int ACTSTATUS_STATUS_READY = 2; //进行中 public static final int ACTSTATUS_STATUS_ING = 3; //已结束 public static final int ACTSTATUS_STATUS_END = 4; //已删除 public static final int ACTSTATUS_STATUS_DEL = 5; /** @@ -285,4 +304,12 @@ public void setSalonRecord(ShopActivitiesSalonRecord salonRecord) { this.salonRecord = salonRecord; } public String getActCode() { return actCode; } public void setActCode(String actCode) { this.actCode = actCode; } } zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopActivitiesDao.java
@@ -1,11 +1,16 @@ package com.matrix.system.shopXcx.dao; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.matrix.core.pojo.PaginationVO; import com.matrix.system.activity.dto.ActivitiesListDto; import com.matrix.system.activity.vo.ActivitiesListVo; import com.matrix.system.shopXcx.api.vo.SalonVO; import com.matrix.system.shopXcx.bean.ShopActivities; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; import com.matrix.core.pojo.PaginationVO; import com.matrix.system.shopXcx.bean.ShopActivities; /** * @description 活动主表 @@ -49,4 +54,6 @@ public ShopActivities selectSalonActivityById(@Param("id") Long id); public List<ShopActivities> selectSalonActivityByUser(@Param("record") SalonVO salonVO); public IPage<ActivitiesListVo> findActivitiesList(Page<ActivitiesListVo> page, @Param("record")ActivitiesListDto activitiesListDto); } zq-erp/src/main/resources/config/db/increment/签到活动.sql
New file @@ -0,0 +1,127 @@ /** * 奖品设置表 * @author yourName * @date 2021-03-31 16:57 */ CREATE TABLE activity_sign_award_set( create_by varchar(100) NOT NULL COMMENT '创建人', create_time datetime NOT NULL COMMENT '创建时间', update_by varchar(100) NOT NULL COMMENT '更新人', update_time datetime NOT NULL COMMENT '更新时间', id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', award_type int(4) COMMENT '奖项类型(1:自定义产品2:积分3:优惠券4:店铺商品)', award_rule int(4) COMMENT '奖项规则(1:每日奖励(默认)2:累计签到天数)', cumulative_day int(4) COMMENT '签到累计天数', award_name varchar(100) COMMENT '奖项名称', introduce_img varchar(500) COMMENT '图片介绍', introduce_tip varchar(500) COMMENT '文字介绍', award_inventory_cnt int(4) COMMENT '奖项库存数量', award_distribute_cnt int(4) COMMENT '已派发数量', award_way int(4) COMMENT '兑奖方式(1:线下兑换2:物流配送3:客服兑换)', operation_tip varchar(500) COMMENT '操作提示', prize_address varchar(500) COMMENT '兑奖地址', prize_start_time datetime COMMENT '兑奖期限开始日期', prize_end_time datetime COMMENT '兑奖期限结束日期', wechat_img varchar(500) COMMENT '客服微信', score_cnt int(4) COMMENT '积分数量', coupon_id varchar(100) COMMENT '优惠券ID', goods_id varchar(100) COMMENT '商品ID', activity_id bigint(20) COMMENT '活动主表ID', company_id bigint(20) COMMENT '公司ID', PRIMARY KEY(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='奖品设置表'; /** * 领 * @author yourName * @date 2021-03-31 16:57 */ CREATE TABLE activity_sign_receive_record( create_by varchar(100) NOT NULL COMMENT '创建人', create_time datetime NOT NULL COMMENT '创建时间', update_by varchar(100) NOT NULL COMMENT '更新人', update_time datetime NOT NULL COMMENT '更新时间', id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', open_id varchar(100) COMMENT 'openID', receive_time datetime COMMENT '领取时间', remark varchar(500) COMMENT '备注', award_id bigint(20) COMMENT '奖品设置表ID', state int(4) COMMENT '是否已领取(1:待领取2:已领取)', write_off_code varchar(100) COMMENT '核销码', activity_id bigint(20) COMMENT '活动主表ID', company_id bigint(20) COMMENT '公司ID', PRIMARY KEY(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='领取记录表'; /** * 签到记录表 * @author yourName * @date 2021-03-31 16:57 */ CREATE TABLE activity_sign_record( create_by varchar(100) NOT NULL COMMENT '创建人', create_time datetime NOT NULL COMMENT '创建时间', update_by varchar(100) NOT NULL COMMENT '更新人', update_time datetime NOT NULL COMMENT '更新时间', id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', open_id varchar(100) COMMENT 'openID', sign_time datetime COMMENT '签到时间', cumulative_day int(4) COMMENT '累计签到天数', activity_id bigint(20) COMMENT '活动主表ID', company_id bigint(20) COMMENT '公司ID', PRIMARY KEY(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='签到记录表'; ALTER TABLE `shop_activities` ADD COLUMN `act_code` varchar(200) NULL COMMENT '活动编码' AFTER `id`; zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignAwardSetDao.xml
New file @@ -0,0 +1,63 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.matrix.system.activity.dao.ActivitySignAwardSetDao"> <!-- 定义ActivitySignAwardSet 的复杂关联map --> <resultMap type="com.matrix.system.activity.entity.ActivitySignAwardSet" id="ActivitySignAwardSetMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="awardType" column="award_type" /> <result property="awardRule" column="award_rule" /> <result property="cumulativeDay" column="cumulative_day" /> <result property="awardName" column="award_name" /> <result property="introduceImg" column="introduce_img" /> <result property="introduceTip" column="introduce_tip" /> <result property="awardInventoryCnt" column="award_inventory_cnt" /> <result property="awardDistributeCnt" column="award_distribute_cnt" /> <result property="awardWay" column="award_way" /> <result property="operationTip" column="operation_tip" /> <result property="prizeAddress" column="prize_address" /> <result property="prizeStartTime" column="prize_start_time" /> <result property="prizeEndTime" column="prize_end_time" /> <result property="wechatImg" column="wechat_img" /> <result property="scoreCnt" column="score_cnt" /> <result property="couponId" column="coupon_id" /> <result property="goodsId" column="goods_id" /> <result property="activityId" column="activity_id" /> <result property="companyId" column="company_id" /> </resultMap> <!-- 定义ActivitySignAwardSet 的简单map ,本map不添加其他的关联属性 --> <resultMap type="com.matrix.system.activity.entity.ActivitySignAwardSet" id="ActivitySignAwardSetSimpleMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="awardType" column="award_type" /> <result property="awardRule" column="award_rule" /> <result property="cumulativeDay" column="cumulative_day" /> <result property="awardName" column="award_name" /> <result property="introduceImg" column="introduce_img" /> <result property="introduceTip" column="introduce_tip" /> <result property="awardInventoryCnt" column="award_inventory_cnt" /> <result property="awardDistributeCnt" column="award_distribute_cnt" /> <result property="awardType" column="award_type" /> <result property="operationTip" column="operation_tip" /> <result property="prizeAddress" column="prize_address" /> <result property="prizeStartTime" column="prize_start_time" /> <result property="prizeEndTime" column="prize_end_time" /> <result property="wechatImg" column="wechat_img" /> <result property="scoreCnt" column="score_cnt" /> <result property="couponId" column="coupon_id" /> <result property="goodsId" column="goods_id" /> <result property="activityId" column="activity_id" /> <result property="companyId" column="company_id" /> </resultMap> </mapper> zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignReceiveRecordDao.xml
New file @@ -0,0 +1,41 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.matrix.system.activity.dao.ActivitySignReceiveRecordDao"> <!-- 定义ActivitySignReceiveRecord 的复杂关联map --> <resultMap type="com.matrix.system.activity.entity.ActivitySignReceiveRecord" id="ActivitySignReceiveRecordMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="openId" column="open_id" /> <result property="receiveTime" column="receive_time" /> <result property="remark" column="remark" /> <result property="awardId" column="award_id" /> <result property="state" column="state" /> <result property="writeOffCode" column="write_off_code" /> <result property="activityId" column="activity_id" /> <result property="companyId" column="company_id" /> </resultMap> <!-- 定义ActivitySignReceiveRecord 的简单map ,本map不添加其他的关联属性 --> <resultMap type="com.matrix.system.activity.entity.ActivitySignReceiveRecord" id="ActivitySignReceiveRecordSimpleMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="openId" column="open_id" /> <result property="receiveTime" column="receive_time" /> <result property="remark" column="remark" /> <result property="awardId" column="award_id" /> <result property="state" column="state" /> <result property="writeOffCode" column="write_off_code" /> <result property="activityId" column="activity_id" /> <result property="companyId" column="company_id" /> </resultMap> </mapper> zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignRecordDao.xml
New file @@ -0,0 +1,35 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.matrix.system.activity.dao.ActivitySignRecordDao"> <!-- 定义ActivitySignRecord 的复杂关联map --> <resultMap type="com.matrix.system.activity.entity.ActivitySignRecord" id="ActivitySignRecordMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="openId" column="open_id" /> <result property="signTime" column="sign_time" /> <result property="cumulativeDay" column="cumulative_day" /> <result property="activityId" column="activity_id" /> <result property="companyId" column="company_id" /> </resultMap> <!-- 定义ActivitySignRecord 的简单map ,本map不添加其他的关联属性 --> <resultMap type="com.matrix.system.activity.entity.ActivitySignRecord" id="ActivitySignRecordSimpleMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="openId" column="open_id" /> <result property="signTime" column="sign_time" /> <result property="cumulativeDay" column="cumulative_day" /> <result property="activityId" column="activity_id" /> <result property="companyId" column="company_id" /> </resultMap> </mapper> zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopActivitiesDao.xml
@@ -7,6 +7,7 @@ <resultMap type="com.matrix.system.shopXcx.bean.ShopActivities" id="ShopActivitiesMap"> <id property="id" column="id" /> <result property="actName" column="act_name" /> <result property="actCode" column="act_code" /> <result property="actType" column="act_type" /> <result property="actBeginTime" column="act_begin_time" /> <result property="actEndTime" column="act_end_time" /> @@ -47,6 +48,7 @@ <resultMap type="com.matrix.system.shopXcx.bean.ShopActivities" id="ShopActivitiesSimpleMap"> <id property="id" column="id" /> <result property="actName" column="act_name" /> <result property="actCode" column="act_code" /> <result property="actType" column="act_type" /> <result property="actBeginTime" column="act_begin_time" /> <result property="actEndTime" column="act_end_time" /> @@ -386,4 +388,24 @@ </if> </if> </select> <select id="findActivitiesList" resultType="com.matrix.system.activity.vo.ActivitiesListVo"> SELECT * FROM shop_activities a <where> a.company_id=#{record.companyId} <if test="record.hdzt != null and record.hdzt != ''"> and a.act_status=#{record.hdzt} </if> <if test="record.hdmc != null and record.hdmc != ''"> and a.act_name like concat('%',#{record.hdmc},'%') </if> </where> <if test="record.sort !=null"> order by a.${record.sort} ${record.order} </if> </select> </mapper> zq-erp/src/main/resources/templates/views/admin/activity/activity-list.html
New file @@ -0,0 +1,386 @@ <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <meta name="renderer" content="webkit|ie-comp|ie-stand"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <meta http-equiv="Cache-Control" content="no-siteapp"/> <!-- 本框架基本脚本和样式 --> <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}"> <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/> <!-- 富文本编辑器 --> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/ueditor.config.js}"></script> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/ueditor.all.js}"> </script> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/lang/zh-cn/zh-cn.js}"></script> <style> .panel-body{ overflow: hidden; } .paginationStyle{ background: #ffffff; padding: 10px 10px; margin: 0px 0px 10px 0px; text-align: right; } .box-card { width: 240px; border-radius: 5px; color: #ffffff; padding: 2px 0px; margin-right: 20px; cursor: pointer; float: left; text-align: center; } .el-card__body { padding: 0px; } </style> </head> <body> <div class="panel-body" id="app" v-cloak> <el-row> <el-row justify="space-between" type="flex"> <el-col> <el-form ref="form" :model="form" inline > <el-form-item prop="hdmc" > <el-input v-model="form.hdmc" placeholder="活动名称"></el-input> </el-form-item> <el-form-item label="活动状态" prop="hdzt"> <el-select v-model="form.hdzt" placeholder="活动状态"> <el-option v-for="item in hdztList" :key="item.value" :label="item.label" :value="item.value" > </el-option> </el-select> </el-form-item> <el-button type="primary" @click="searchFormActivitys" >搜索</el-button> <el-button @click="resetFormActivitys('form')">重置</el-button> </el-form> </el-col> </el-row> <el-row class="table-style" > <el-table ref="multipleTable" :data="activitysList.rows" :height="height" stripe:true @sort-change="sortChange" @selection-change="handleSelectionChange"> <el-table-column type="selection"> </el-table-column> <el-table-column prop="actName" label="活动名称" show-overflow-tooltip> </el-table-column> <el-table-column prop="actCode" label="活动编号" show-overflow-tooltip> </el-table-column> <el-table-column label="活动类型"> <template slot-scope="scope"> <span v-if="scope.row.actType == 1">团购</span> <span v-if="scope.row.actType == 2">秒杀</span> <span v-if="scope.row.actType == 3">沙龙</span> <span v-if="scope.row.actType == 4">每日签到</span> </template> </el-table-column> <el-table-column label="状态"> <template slot-scope="scope"> <span v-if="scope.row.actStatus == 1">未发布</span> <span v-if="scope.row.actStatus == 2">未开始</span> <span v-if="scope.row.actStatus == 3">进行中</span> <span v-if="scope.row.actStatus == 4">已结束</span> <span v-if="scope.row.actStatus == 5">已删除</span> </template> </el-table-column> <el-table-column prop="actBeginTime" label="开始时间" show-overflow-tooltip> </el-table-column> <el-table-column prop="actEndTime" label="结束时间" show-overflow-tooltip> </el-table-column> <el-table-column prop="createBy" label="创建人" show-overflow-tooltip> </el-table-column> <el-table-column prop="actRemark" label="备注" show-overflow-tooltip> </el-table-column> <el-table-column label="操作" width="400"> <template slot-scope="scope"> <el-row style="display:flex;"> <el-button type="primary" v-if="scope.row.actStatus == 1" size="mini" @click="beReady(scope.row)">发布</el-button> <el-button type="primary" v-if="[1,2,3].includes(scope.row.actStatus)" size="mini">修改</el-button> <el-button type="primary" v-if="scope.row.actStatus == 3" size="mini">推广</el-button> <el-button type="primary" v-if="[3,4,5].includes(scope.row.actStatus)" size="mini">活动统计</el-button> <el-button type="primary" v-if="scope.row.actStatus == 3" @click="beClose(scope.row)" size="mini">关闭</el-button> <el-button type="danger" v-if="scope.row.actStatus != 5" size="mini" @click="delRow(scope.row)">删除</el-button> </el-row> </template> </el-table-column> </el-table> </el-row> <el-row class="paginationStyle" > <el-pagination background @size-change="changePageSizeActivitys" @current-change="changeCurrentPageActivitys" :current-page="activitysList.currentPage" :page-sizes="[10, 20, 30, 50]" :page-size="activitysList.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="activitysList.total"> </el-pagination> </el-row> </el-row> </div> </body> <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script> <script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> <script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> <script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script> <script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> <script> var app = new Vue({ el: '#app', data: { height:'calc(100vh - 200px)', // 条件查询 hdztList:[ {value:'',label:'全部'}, {value:1,label:'未发布'}, {value:2,label:'未开始'}, {value:3,label:'进行中'}, {value:4,label:'已结束'}, {value:5,label:'已删除'}, ], form:{ hdmc:'', hdzt:'', order:'', sort:'' }, //活动列表 activitysList:{ rows:[], total:0, pageSize:10, currentPage:1, }, }, created: function () { this.loadInfo(); }, mounted: function () { }, methods: { //加载分类 loadInfo() { let _this = this; _this.loadActivitysList(); }, //发布 beReady(row){ let _this = this; let actState = row.actStatus; if(actState !== 1){ this.$notify({ title: '提示', message: '状态为【未发布】才能发布', type: 'warning' }); } _this.$confirm('确认发布活动吗?', '发布', { distinguishCancelAndClose: true,//设置关闭按钮和不通过按钮的区别 confirmButtonText: '确认', cancelButtonText: '取消', type: 'info' }).then(() => { //通过 let id = row.id; let obj = { actId: id, } AjaxProxy.requst({ app: _this, data:obj, url: basePath + '/admin/activitySignAwardSet/beReady', callback: function (data) { _this.$message.success(data.info); _this.loadActivitysList(); } }); }).catch(action => { //不通过 if(action === 'cancel'){ console.log("cancel"); }else{ //关闭按钮 console.log("close"); } }); }, //关闭 beClose(row){ let _this = this; _this.$confirm('确认关闭活动吗?', '关闭', { distinguishCancelAndClose: true,//设置关闭按钮和不通过按钮的区别 confirmButtonText: '确认', cancelButtonText: '取消', type: 'info' }).then(() => { //通过 let id = row.id; let obj = { actId: id, } AjaxProxy.requst({ app: _this, data:obj, url: basePath + '/admin/activitySignAwardSet/beClose', callback: function (data) { _this.$message.success(data.info); _this.loadActivitysList(); } }); }).catch(action => { //不通过 if(action === 'cancel'){ console.log("cancel"); }else{ //关闭按钮 console.log("close"); } }); }, //删除 delRow(row){ let _this = this; _this.$confirm('确认删除活动吗?', '删除', { distinguishCancelAndClose: true,//设置关闭按钮和不通过按钮的区别 confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => { //通过 let id = row.id; let obj = { actId: id, } AjaxProxy.requst({ app: _this, data:obj, url: basePath + '/admin/activitySignAwardSet/delRow', callback: function (data) { _this.$message.success(data.info); _this.loadActivitysList(); } }); }).catch(action => { //不通过 if(action === 'cancel'){ console.log("cancel"); }else{ //关闭按钮 console.log("close"); } }); }, //--活动列表 loadActivitysList() { let _this = this; let data=_this.getRequestParamActivitys(); data.pageSize=_this.activitysList.pageSize; data.pageNum=_this.activitysList.currentPage; AjaxProxy.requst({ app: _this, data:data, url: basePath + '/admin/activitySignAwardSet/findActivitiesList', callback: function (data) { _this.activitysList.rows = data.rows; _this.activitysList.total = data.total; } }); },//查询参数 getRequestParamActivitys(){ let _this = this; return { hdmc:_this.form.hdmc, hdzt:_this.form.hdzt, order:_this.form.order, sort:_this.form.sort, } }, //查询 searchFormActivitys:function(){ this.activitysList.currentPage=1; this.loadActivitysList(); }, //重置 resetFormActivitys(formName) { this.$refs[formName].resetFields(); }, changePageSizeActivitys(val) { this.activitysList.pageSize = val; this.loadActivitysList(); }, changeCurrentPageActivitys(val) { this.activitysList.currentPage = val; this.loadActivitysList(); }, //排序 sortChange:function (column){ if(column.order){ if(column.order.indexOf("desc")){ this.form.order="desc"; }else{ this.form.order="asc"; } this.form.sort=column.prop; this.loadInfo(); } }, //选择 handleSelectionChange(val) { let _this = this; _this.multipleSelection = val; }, } }) </script> </body> </html> zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html
New file @@ -0,0 +1,104 @@ <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <meta name="renderer" content="webkit|ie-comp|ie-stand"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <meta http-equiv="Cache-Control" content="no-siteapp"/> <!-- 本框架基本脚本和样式 --> <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}"> <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/> <!-- 富文本编辑器 --> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/ueditor.config.js}"></script> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/ueditor.all.js}"> </script> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/lang/zh-cn/zh-cn.js}"></script> <style> .button { padding: 0; float: right; } .image { width: 100%; display: block; } .clearfix:before, .clearfix:after { display: table; content: ""; } .clearfix:after { clear: both } .box-card { padding: 5px 5px; margin-right: 40px; } </style> </head> <body> <div class="panel-body" id="app" v-cloak> <el-row> <el-col :span="6"> <el-card class="box-card" :body-style="{ padding: '10px 10px'}"> <img src="https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png" class="image"> <div style="padding: 5px;"> <span style="padding:5px;font-size: 30px;">每日签到</span> <div class="bottom clearfix"> <el-button type="primary" class="button" @click="createSign()" round>马上创建</el-button> </div> </div> </el-card> </el-col> </el-row> </div> </body> <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script> <script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> <script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> <script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script> <script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> <script> var app = new Vue({ el: '#app', data: {}, created: function () { }, methods: { //跳转到设置签到活动 createSign(){ layer.full(layer.open({ type: 2, title: "签到管理", maxmin: true, area: [MUI.SIZE_L, '500px'], content : [ basePath + '/admin/redirect/activity/activity-sign'] })); }, } }) </script> </body> </html> zq-erp/src/main/resources/templates/views/admin/activity/activity-sign.html
New file @@ -0,0 +1,649 @@ <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <meta name="renderer" content="webkit|ie-comp|ie-stand"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <meta http-equiv="Cache-Control" content="no-siteapp"/> <!-- 本框架基本脚本和样式 --> <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}"> <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/> <!-- 富文本编辑器 --> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/ueditor.config.js}"></script> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/ueditor.all.js}"> </script> <script type="text/javascript" charset="utf-8" th:src="@{/plugin/beditor/lang/zh-cn/zh-cn.js}"></script> <style> .el-aside { background-color: #D3DCE6; color: #333; text-align: center; } .el-main { background-color: #E9EEF3; color: #333; } body > .el-container { margin-bottom: 1000px; } .button { padding: 5px; text-align: center; } .imageOne { display: block; height: 50px; padding: 5px 5px; text-align: center; } .imageTwo { display: block; height: 50px; padding: 5px 5px; text-align: center; } .imageThree { display: block; height: 50px; padding: 5px 5px; text-align: center; } .box-card { padding: 5px 5px; } </style> </head> <body> <div class="panel-body" id="app" v-cloak> <el-form :model="ruleForm" :rules="rules" class="form-horizontal" id="dataform" ref="ruleForm" label-width="120px"> <el-container> <el-aside width="30%"> <el-card class="box-card" :body-style="{ padding: '10px 10px'}"> <div @click="uploadImg()" class="imageOne"> <img v-if="imageUrlTitle" :src="imageUrlTitle" style="width: 100%;"> <el-button type="primary" v-show="imageUrlTitle == ''" round><span style="font-size: 20px;">标题</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> </div> <div @click="uploadImg()" class="imageTwo" > <img v-if="imageUrlHead" :src="imageUrlHead" style="width: 100%;"> <el-button type="primary" v-show="imageUrlHead == ''" round><span style="font-size: 20px;">头部</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> </div> <el-row style="display:flex;"> <el-col> <div style="padding:5px;font-size: 15px;text-align: left;"><span>您已累计签到<span style="color: red;">3</span>天</span></div> </el-col> <el-col> <div style="padding:5px;font-size: 15px;text-align: right;"><span>签到提醒</span></div> </el-col> </el-row> <div @click="uploadImg()"> <el-calendar :range="['2019-03-04', '2019-03-24']"></el-calendar> <img v-if="imageUrlState" :src="imageUrlState" style="width: 100%;"> <el-button type="primary" v-show="imageUrlState == ''" round><span style="font-size: 20px;">日历签到背景</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> </div> <div @click="uploadImg()" class="imageThree" > <el-button type="primary" v-show="imageUrlButton == ''" round><span style="font-size: 20px;">签到按钮</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> <img v-if="imageUrlButton" :src="imageUrlButton" style="width: 100%;"> </div> <div style="text-align: center;padding: 5px;" @click="gzsmSet()"> <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> <span style="padding:5px;font-size: 30px;">-- 规则说明--</span> </div> <div class="el-col-sm-24" style="text-align: center;"> <span style="padding:5px;font-size: 15px;color: red;">(点击,编辑规则内容,背景颜色,字体颜色、大小、透明度)</span> </div> <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> <span style="padding:5px;font-size: 15px;">1、每天参与签到可获得积分</span> </div> <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> <span style="padding:5px;font-size: 15px;">2、连续签到7天将获得赠送大礼包</span> </div> <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> <span style="padding:5px;font-size: 15px;">3、每7天重新开始计算</span> </div> </div> </el-card> </el-aside> <el-main width="70%"> <div> <el-tabs v-model="activeName" > <el-tab-pane label="活动设置" name="first"> <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> <el-form-item label="活动名称" prop="actName"> <el-input v-model="ruleForm.actName" placeholder="请输入活动名称"></el-input> </el-form-item> </div> <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> <el-form-item label="活动编码" prop="actCode"> <el-input v-model.number="ruleForm.actCode" placeholder="请输入最大开团数量"></el-input> </el-form-item> </div> <div class="col-sm-4 col-sm-offset-1" style="padding: 10px"> <el-form-item label="活动时间" prop="actTime"> <div class="block"> <el-date-picker v-model="ruleForm.actTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker> </div> </el-form-item> </div> </el-tab-pane> <el-tab-pane label="奖品设置" name="second"> <el-row style="display:flex;"> <el-col :span="20"> <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab"> <el-tab-pane v-for="(item, index) in editableTabs" :key="item.name" :label="item.title" :name="item.name"> <el-row v-show="editableTabsValue !== '1'"> <el-form-item label="签到累计天数"> <el-input v-model.number="item.content.cumulativeDay" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> </el-form-item> </el-row> <el-row> <el-form-item label="奖项类型"> <el-col> <el-radio-group v-model="item.content.awardType" @change="jxlxChange"> <el-radio :label="'1'">自定义奖品</el-radio> <el-radio :label="'2'">积分</el-radio> <el-radio :label="'3'">优惠券</el-radio> <el-radio :label="'4'">商品</el-radio> </el-radio-group> </el-col> </el-form-item > </el-row> <el-row > <el-col> <el-form-item label="奖项名称"> {{item.content}} <el-input v-model="item.content.awardName" placeholder="奖项名称"></el-input> </el-form-item> </el-col> </el-row> <el-row > <el-col> <el-form-item label="图片介绍"> <el-upload action="/admin/multipleUploadFile/doUpload" :show-file-list="false" :on-success="introduceImgSuccess"> <img v-if="item.content.introduceImg" :src="item.content.introduceImg" style="max-width: 200px;"> </el-upload> </el-form-item> </el-col> </el-row> <div v-show="item.content.awardType !== '2'"> <el-row style="display:flex;"> <el-col> <el-form-item label="奖项库存"> <el-input v-model="item.content.awardInventoryCnt" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> </el-form-item> </el-col> <el-col> <el-form-item label="已派发"> <el-input v-model="item.content.awardDistributeCnt"></el-input> </el-form-item> </el-col> </el-row> </div> <div v-show="item.content.awardType === '1'"> <el-row > <el-col> <el-form-item label="文字介绍"> <el-input type="textarea" v-model="item.content.introduceTip"></el-input> </el-form-item> </el-col> </el-row> <el-row > <el-col> <el-form-item label="兑奖方式"> <el-col> <el-radio-group v-model="item.content.awardWay" @change="awardWayChange"> <el-radio :label="'1'">线下兑换</el-radio> <el-radio :label="'2'">物流配送</el-radio> <el-radio :label="'3'">客服兑换</el-radio> </el-radio-group> </el-col> </el-form-item > </el-col> </el-row> <el-row > <el-col> <el-form-item label="操作提示"> <el-input v-model="item.content.operationTip"></el-input> </el-form-item> </el-col> </el-row> <div v-show="item.content.awardWay === '1'"> <el-row > <el-col> <el-form-item label="兑奖地址"> <el-input v-model="item.content.prizeAddress"></el-input> </el-form-item> </el-col> </el-row> </div> <div v-show="item.content.awardWay === '3'"> <el-row > <el-col> <el-form-item label="客服微信"> <el-upload action="/admin/multipleUploadFile/doUpload" :show-file-list="false" :on-success="wechatImgSuccess"> <img v-if="item.content.wechatImg" :src="item.content.wechatImg" style="max-width: 200px;"> </el-upload> </el-form-item> </el-col> </el-row> </div> <div v-show="item.content.awardWay !== '2'"> <el-row > <el-col> <el-form-item label="兑奖期限"> <div class="block"> <el-date-picker v-model="item.content.prizeTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker> </div> </el-form-item> </el-col> </el-row> </div> </div> <div v-show="item.content.awardType === '2'"> <el-row > <el-col> <el-form-item label="积分数量"> <el-input v-model="item.content.scoreCnt" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> </el-form-item> </el-col> </el-row> </div> <div v-show="item.content.awardType === '3'"> <el-row style="display:flex;"> <el-col> <el-form-item label="优惠券"> <el-input v-model="item.content.couponId"></el-input> </el-form-item> </el-col> <el-col> <el-button type="primary"> 选择优惠券 </el-button> </el-col> </el-row> </div> <div v-show="item.content.awardType === '4'"> <el-row style="display:flex;"> <el-col> <el-form-item label="品项"> <el-input v-model="item.content.goodsId"></el-input> </el-form-item> </el-col> <el-col> <el-button type="primary"> 选择品项 </el-button> </el-col> </el-row> </div> </el-tab-pane> </el-tabs> </el-col> <el-col :span="4"> <el-button type="primary" @click="addTab(editableTabsValue)"> 新增奖品 </el-button> </el-col> </el-row> </el-tab-pane> <el-tab-pane label="背景图片上传" name="third"> <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> <el-form-item label="标题"> <el-upload action="/admin/multipleUploadFile/doUpload" :show-file-list="false" :on-success="imageUrlTitleSuccess"> <img v-if="imageUrlTitle" :src="imageUrlTitle" style="max-width: 300px;"> </el-upload> </el-form-item> </div> <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> <el-form-item label="头部"> <el-upload action="/admin/multipleUploadFile/doUpload" :show-file-list="false" :on-success="imageUrlHeadSuccess"> <img v-if="imageUrlHead" :src="imageUrlHead" style="max-width: 300px;"> </el-upload> </el-form-item> </div> <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> <el-form-item label="日历签到背景"> <el-upload action="/admin/multipleUploadFile/doUpload" :show-file-list="false" :on-success="imageUrlStateSuccess"> <img v-if="imageUrlState" :src="imageUrlState" style="max-width: 300px;"> </el-upload> </el-form-item> </div> <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> <el-form-item label="签到按钮"> <el-upload action="/admin/multipleUploadFile/doUpload" :show-file-list="false" :on-success="imageUrlButtonSuccess"> <img v-if="imageUrlButton" :src="imageUrlButton" style="max-width: 300px;"> <i v-else></i> </el-upload> </el-form-item> </div> </el-tab-pane> <el-tab-pane label="规则说明" name="fourth"> <div class="col-sm-8 col-sm-offset-1"> <el-form-item label="规则内容" prop="ruleExplain" style="padding: 10px"> <el-input type="textarea" v-model="ruleForm.ruleExplain"></el-input> </el-form-item> <el-form-item label="背景颜色" style="padding: 10px"> <el-color-picker v-model="backgroundColor"></el-color-picker> </el-form-item> <el-form-item label="字体颜色" style="padding: 10px"> <el-color-picker v-model="typographyColor"></el-color-picker> </el-form-item> <el-form-item label="字体大小" style="padding: 10px"> <el-input-number v-model="typographyNum" :min="10" :max="20" label="描述文字"></el-input-number> </el-form-item> <el-form-item label="字体透明度" style="padding: 10px"> <el-input-number v-model="typographyLight" :min="1" :max="100" label="描述文字">%</el-input-number> </el-form-item> </div> </el-tab-pane> </el-tabs> </div> <div class="form-group "> <div class="col-sm-12 text-center"> <el-button type="primary" @click="dataSubmit('ruleForm')">保存</el-button> <el-button type="danger" >关闭</el-button> </div> </div> </el-main> </el-container> </el-form> </div> </body> <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script> <script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> <script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> <script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script> <script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> <script> const prize = { //奖品基本信息 cumulativeDay:'', awardType:'1', awardName:'', introduceImg:'', introduceTip:'', awardInventoryCnt:'', awardDistributeCnt:'', awardWay:'1', awardWayoperationTip:'', prizeAddress:'', prizeTime: '', wechatImg:'', scoreCnt:'', couponId:'', goodsId:'', } var app = new Vue({ el: '#app', data: { activeName: 'first', formLabelWidth: '120px', //标题图片 imageUrlTitle: '', imageUrlHead: '', imageUrlButton: '', imageUrlState: '', //字体颜色 typographyColor: '#409EFF', //背景颜色 backgroundColor: '#409EFF', //字体大小 typographyNum: '5', //字体透明度 typographyLight: '50', //奖品设置 prize:JSON.parse(JSON.stringify(prize)), editableTabsValue: '1', editableTabs: [{ title: '签到日常奖励', name: '1', content: JSON.parse(JSON.stringify(prize)) }], tabIndex: 1, ruleForm : { //商品基本信息 actName : '', actCode : '', actTime : '', //规则说明 ruleExplain : '', }, rules : { //商品基本信息 actName : [ { required: true, message: '请输入活动名称', trigger: 'blur' } ], actCode : [ { required: true, message: '请输入活动编码', trigger: 'blur' } ], actTime : [ { required: true, message: '请选择日期', trigger: 'change' } ], ruleExplain : [ { required: true, message: '请输入规则内容', trigger: 'blur' } ] }, }, created: function () { }, methods: { dataSubmit : function(formName) { const _this = this; let flag = false; _this.$refs[formName].validate((valid) => { if (!valid) { _this.$notify({ title: '提示', message: '请完善签到活动信息', type: 'warning' }); flag = true; return; } }); if (flag) { return; } //活动基本信息 let signSetBasicJsonDto = { ruleExplain: _this.ruleForm.ruleExplain, //字体颜色 typographyColor: _this.typographyColor, //背景颜色 backgroundColor: _this.backgroundColor, //字体大小 typographyNum: _this.typographyNum, //字体透明度 typographyLight: _this.typographyNum, //标题图片 imageUrlTitle: _this.imageUrlTitle, imageUrlHead: _this.imageUrlHead, imageUrlButton: _this.imageUrlButton, imageUrlState: _this.imageUrlState, } //奖品信息 let activitySignAwardSets = []; for (let i = 0; i < _this.editableTabs.length; i++) { let prize = _this.editableTabs[i].content; let activitySignAwardSet = { cumulativeDay: prize.cumulativeDay, awardType: prize.awardType, awardName: prize.awardName, introduceImg: prize.introduceImg, introduceTip: prize.introduceTip, awardInventoryCnt: prize.awardInventoryCnt, awardDistributeCnt: prize.awardDistributeCnt, awardWay: prize.awardWay, awardWayoperationTip: prize.awardWayoperationTip, prizeAddress: prize.prizeAddress, wechatImg: prize.wechatImg, scoreCnt: prize.scoreCnt, couponId: prize.couponId, goodsId: prize.goodsId, prizeStartTime: prize.prizeTime[0], prizeEndTime: prize.prizeTime[1], } activitySignAwardSets.push(activitySignAwardSet); } let resultData = { actName: _this.ruleForm.actName, actCode: _this.ruleForm.actCode, beginTime : _this.ruleForm.actTime[0], endTime : _this.ruleForm.actTime[1], signSetBasicJsonDto, activitySignAwardSets, } AjaxProxy.requst({ app: _this, data: resultData, url: basePath + '/admin/activitySignAwardSet/addSignAwardSet', callback: function (data) { _this.$message({ message: data.info, type: 'success', }); } }); }, //奖品设置 addTab(targetName) { let newTabName = ++this.tabIndex + ''; this.editableTabs.push({ title: "商品奖励"+"("+newTabName+")", name: newTabName, content: JSON.parse(JSON.stringify(prize)), }); this.editableTabsValue = newTabName; }, removeTab(targetName) { let tabs = this.editableTabs; let activeName = this.editableTabsValue; if(activeName === '1' || targetName === '1'){ this.$notify({ title: '提示', message: '【签到日常奖励】不能删除', type: 'warning' }); }else{ if (activeName === targetName) { tabs.forEach((tab, index) => { if (tab.name === targetName && tab.title !== "签到日常奖励") { let nextTab = tabs[index + 1] || tabs[index - 1]; if (nextTab) { activeName = nextTab.name; } } }); } this.editableTabsValue = activeName; this.editableTabs = tabs.filter(tab => tab.name !== targetName); this.tabIndex = this.editableTabs.length; } }, //切换奖项类型,显示不同内容 jxlxChange(val){ let _this = this; _this.isShow=val; }, //切换兑奖方式,显示不同内容 awardWayChange(val){ let _this = this; _this.isShow=val; }, //跳转到图片上传 uploadImg(){ this.activeName = 'third'; }, //跳转到规则说明 gzsmSet(){ this.activeName = 'fourth'; }, //标题图片 imageUrlTitleSuccess(res, file) { this.imageUrlTitle = res.path; }, imageUrlHeadSuccess(res, file) { this.imageUrlHead = res.path; }, imageUrlButtonSuccess(res, file) { this.imageUrlButton = res.path; }, imageUrlStateSuccess(res, file) { this.imageUrlState = res.path; }, //奖品设置的图片介绍 introduceImgSuccess(res, file) { this.editableTabs[this.tabIndex-1].content.introduceImg = res.path; // this.prize.introduceImg = URL.createObjectURL(file.raw); }, //奖品设置的客服微信 wechatImgSuccess(res, file) { this.editableTabs[this.tabIndex-1].content.wechatImg = res.path; }, } }) </script> </body> </html>