admin/src/components/business/OperaCouponWindow.vue
@@ -38,14 +38,12 @@ <el-input type="textarea" v-model="form.info" placeholder="请输入优惠券说明" maxlength="500" v-trim/> </el-form-item> <p class="tip-header" >使用限制</p> <el-form-item label="有效期" prop="useType"> <el-radio-group v-model="form.useType"> <el-form-item label="有效期" prop="getDate"> <el-radio-group v-model="form.useType" @change="changeApplyType"> <el-radio :label="0">固定时段</el-radio> <el-radio :label="1">固定时长</el-radio> </el-radio-group> </el-form-item> <el-form-item label="使用时段" prop="getDate" v-if="form.useType===0"> <div class="date-style"> <div class="date-style" v-if="form.useType===0"> <el-date-picker v-model="getDate" type="datetimerange" @@ -57,9 +55,7 @@ @change="selectDate" ></el-date-picker> </div> </el-form-item> <el-form-item label="固定时长" prop="validDays" v-if="form.useType===1"> <div class="coupon-rule"> <div class="coupon-rule" v-if="form.useType===1"> <div class="discrep">领劵后</div> <el-input v-model="form.validDays" @@ -72,13 +68,22 @@ </div> </el-form-item> <el-form-item label="适用对象" prop="applyType"> <el-radio-group v-model="form.applyType"> <el-radio-group v-model="form.applyType" @change="changeApplyType"> <el-radio :label="0">全场通用</el-radio> <el-radio :label="1">按品类</el-radio> <el-radio :label="2">指定商品</el-radio> </el-radio-group> </el-form-item> <el-form-item v-if="form.applyType===1" label="选择品类" prop="applyCateIdList" > <el-form-item label="选择品类" prop="applyTypeRule" v-if="form.applyType===1"> <el-select style="margin-left:10px;width: 300px;" v-model="form.applyCateIdList" placeholder="请选择商品分类,支持多选" filterable multiple clearable > <el-option v-for="item in categorys" :key="'optCate'+item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </el-form-item> <el-form-item label="选中商品" prop="applyTypeRule" v-if="form.applyType===2"> <span style="font-size: 12px;color: #216EEE" @click="selectGoods">已指定【 {{applyDataList.length}} 】件商品</span> <el-button style="margin-left:30px;display: inline-block;width: 80px;" type="primary" @click="selectGoods">去选择 </el-button> </el-form-item> <!-- <el-form-item v-if="form.applyType===1" label="选择品类" prop="applyCateIdList" > <el-select v-model="form.applyCateIdList" placeholder="请选择商品分类,支持多选" filterable multiple clearable > <el-option v-for="item in categorys" :key="'optCate'+item.id" :label="item.name" :value="item.id"> </el-option> </el-select> @@ -86,7 +91,7 @@ <el-form-item v-if="form.applyType===2" label="选择商品" prop="applyIdList" style="display: flex"> <span style="font-size: 12px;color: #216EEE" @click="selectGoods">已指定【 {{applyDataList.length}} 】件商品</span> <el-button style="margin-left:30px;display: inline-block;width: 80px;" type="primary" @click="selectGoods">去选择 </el-button> </el-form-item> </el-form-item>--> <p class="tip-header" >发放规则</p> <el-form-item label="发放总量" prop="num"> <div class="num-style"> @@ -123,10 +128,25 @@ } } const getDateRules = (rule, value, callback) => { if (!this.form.startDate) { if (!this.form.useType < 0) { callback(new Error('请选择有效期')) } else if (this.form.useType == 1 && !this.form.validDays) { callback(new Error('请输入固定时长天数')) } else if (this.form.useType == 0 && !this.form.startDate) { callback(new Error('请选择开始时间')) } else if (!this.form.endDate) { } else if (this.form.useType == 0 && !this.form.endDate) { callback(new Error('请输入结束时间')) } else { callback() } } const getApplyTypeRule = (rule, value, callback) => { if (!this.form.applyType < 0) { callback(new Error('请选择适用范围')) } else if (this.form.applyType == 1 && (!this.form.applyCateIdList || !this.form.applyCateIdList.length)) { callback(new Error('请选择使用品类')) } else if (this.form.applyType == 2 && (!this.form.applyIdList || !this.form.applyIdList.length)) { callback(new Error('请选择指定商品')) } else { callback() } @@ -187,16 +207,16 @@ ], num: [ { required: true, validator: numRule, message: '请输入发放总数', tigger: 'blur' } ] ], /* integral: [ { required: true, validator: numRule, message: '请输入兑换条件', tigger: 'blur' } ], */ // validDays: [ // { required: true, message: '请输入可用时间', tigger: 'blur' } // ], // getDate: [ // { required: true, validator: getDateRules, tigger: 'change' } // ], getDate: [ { required: true, validator: getDateRules } ], applyTypeRule: [ { required: true, validator: getApplyTypeRule } ] // shopId: [ // { required: true, validator: numRule, message: '请选择关联店铺', tigger: 'change' } // ] @@ -231,6 +251,9 @@ this.applyDataList = res || [] }) }, changeApplyType(){ this.$refs.form.clearValidate() }, doSelect (rows) { console.log(rows, this.applyDataList) this.applyDataList = [] @@ -241,6 +264,7 @@ this.form.applyIdList.push(item.id) }) } this.$refs.form.clearValidate(); }, open (title, target, type) { this.showGoods = false @@ -273,7 +297,9 @@ for (const key in this.form) { this.form[key] = target[key] } this.getDate = [target.startDate, target.endDate] if (target.startDate && target.endDate) { this.getDate = [target.startDate, target.endDate] } if (this.form.applyType === 1) { this.form.applyCateIdList = [] var ta = this.form.applyIds.split(',') admin/src/components/business/OperaLabelExpressWindow.vue
@@ -1,6 +1,7 @@ <template> <GlobalAlertWindow :title="title" width="500px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" admin/src/components/business/OperaLabelsFeeAreaWindow.vue
@@ -23,18 +23,18 @@ </el-form-item> <div style="display: flex"> <el-form-item label="首重" prop="weight0" style="display: inline-block;flex: 1;"> <el-input v-model="form.weight0" style="width: 150px" placeholder="请输入首重" type="number"> <template slot="append" >kg</template> </el-input> <el-input v-model="form.weight0" style="width: 200px" placeholder="请输入首重" type="number"> <template slot="append" >kg</template> </el-input> </el-form-item> <el-form-item label="首重运费" prop="fee0" style="display: inline-block;flex: 1;"> <el-input v-model="form.fee0" style="width: 150px" placeholder="请输入金额" > <template slot="append" >元</template> </el-input> <el-input v-model="form.fee0" style="width: 200px" placeholder="请输入金额" > <template slot="append" >元</template> </el-input> </el-form-item> </div> <div style="display: flex"> <el-form-item label="续重" prop="weight1" style="display: inline-block;flex:1"> <el-input v-model="form.weight1" style="width: 150px" placeholder="请输入续重" type="number"> <template slot="append" >kg</template> </el-input> <el-input v-model="form.weight1" style="width: 200px" placeholder="请输入续重" type="number"> <template slot="append" >kg</template> </el-input> </el-form-item> <el-form-item label="续重运费增加" prop="fee1" style="display: inline-block;flex: 1;"> <el-input v-model="form.fee1" style="width: 150px" placeholder="请输入金额" > <template slot="append" >元</template> </el-input> <el-input v-model="form.fee1" style="width: 200px" placeholder="请输入金额" > <template slot="append" >元</template> </el-input> </el-form-item> </div> <el-form-item label="排序码" prop="sortnum"> admin/src/components/business/OperaNoticeWindow.vue
@@ -6,7 +6,7 @@ @confirm="confirm" > <el-form :model="form" ref="form" :rules="rules" label-width="100px" label-suffix=":" inline> <el-form-item label="标题" prop="title"> <el-input v-model="form.title" placeholder="请输入标题" v-trim/> </el-form-item> @@ -19,12 +19,12 @@ v-trim /> </el-form-item> <el-form-item label="通知对象" prop="notifyObject"> <!-- <el-form-item label="通知对象" prop="notifyObject"> <el-radio-group v-model="form.notifyObject"> <el-radio label="0">用户</el-radio> <el-radio label="1">商家</el-radio> </el-radio-group> </el-form-item> </el-form-item>--> </el-form> </GlobalAlertWindow> </template> @@ -38,7 +38,6 @@ components: { GlobalAlertWindow }, data () { let rule = (rule, value, callBack) => { debugger console.log(rule, value); callBack() } @@ -46,11 +45,10 @@ // 表单数据 form: { id: null, title: '', content: '', notifyObject: '0', }, // 验证规则 rules: { admin/src/views/business/memberCoupon.vue
@@ -14,11 +14,16 @@ <el-option :key="1" :value="1" label="折扣券"></el-option> </el-select> </el-form-item> <el-form-item label="状态" prop="status"> <el-select v-model="searchForm.status" placeholder="状态" clearable @change="search" > <el-form-item label="状态" prop="status" > <el-select v-model="searchForm.status" placeholder="状态" clearable @change="changeStatus" > <el-option :value="0" label="未使用"></el-option> <el-option :value="1" label="已使用"></el-option> <el-option :value="2" label="已过期"></el-option> </el-select> </el-form-item> <el-form-item label="是否过期" prop="isexpire" v-if="searchForm.status ===0"> <el-select v-model="searchForm.isexpire" placeholder="状态" clearable @change="search" > <el-option :value="0" label="未过期"></el-option> <el-option :value="1" label="已过期"></el-option> </el-select> </el-form-item> <el-form-item label="发放类型" prop="getMethod"> @@ -74,9 +79,12 @@ </el-table-column> <el-table-column prop="status" label="状态" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.status ===0" class="green"> 未使用</span> <div v-if="row.status ===0" > <span class="grey" v-if="row.isexpire ===1" >已过期</span> <span class="green" v-else> 未使用</span> </div> <span v-else-if="row.status ===1" class="blue"> 已使用</span> <span v-else class="grey">已过期</span> </template> </el-table-column> <el-table-column prop="useDate" label="使用时间" min-width="100px"></el-table-column> @@ -112,10 +120,12 @@ nikeName: '', name: '', couponType: '', status: '', status: null, isexpire: '', getMethod: '', orderCode: '' } }, hiddenexpire: false } }, created () { @@ -126,6 +136,12 @@ 'field.main': 'id' }) this.search() }, methods:{ changeStatus(){ this.searchForm.isexpire='' this.search() } } } </script> admin/src/views/business/notice.vue
@@ -26,16 +26,16 @@ <el-table-column type="selection" width="55"></el-table-column> <!-- <el-table-column prop="id" label="主键" align="center" min-width="100px"></el-table-column> --> <el-table-column prop="title" label="标题" align="center" min-width="120px"></el-table-column> <el-table-column prop="content" label="内容" align="center" min-width="180px"></el-table-column> <el-table-column prop="content" label="内容" align="center" min-width="380px"></el-table-column> <!-- <el-table-column prop="objMemberId" label="关联用户编码(关联member表)" min-width="100px"></el-table-column> --> <!-- <el-table-column prop="objMemberImg" label="关联用户头像" min-width="100px"></el-table-column> --> <!-- <el-table-column prop="imgurl" label="列表图" min-width="100px"></el-table-column> <el-table-column prop="objId" label="对象编码" min-width="100px"></el-table-column> --> <el-table-column prop="notifyObject" label="通知对象" align="center" min-width="100px"> <!-- <el-table-column prop="notifyObject" label="通知对象" align="center" min-width="100px"> <template slot-scope="{row}"> {{ row.notifyObject==0 ? '用户' : '商家' }} </template> </el-table-column> </el-table-column>--> <!-- <el-table-column prop="type" label="消息类型 0订单通知 1系统消息 2互动消息 3优惠券提醒 4官方客服 5活动推荐 6我的关注" min-width="100px"></el-table-column> --> <el-table-column prop="createDate" label="创建时间" align="center" min-width="140px"></el-table-column> <el-table-column prop="creatorName" label="创建人" align="center" min-width="100px"></el-table-column> server/dmmall_admin/src/main/java/com/doumee/AdminApplication.java
@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; import org.springframework.scheduling.annotation.EnableAsync; /** * 启动类 @@ -13,6 +14,7 @@ */ @Slf4j @SpringBootApplication @EnableAsync @MapperScan("com.doumee.dao") public class AdminApplication { server/dmmall_admin/src/main/resources/application.yml
@@ -4,8 +4,6 @@ version: 1.0.0 env: development # env: production spring: # application: # name: doumeemes server/dmmall_service/src/main/java/com/doumee/dao/business/model/Coupon.java
@@ -1,12 +1,9 @@ package com.doumee.dao.business.model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.*; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; @@ -72,16 +69,17 @@ @ApiModelProperty(value = "开始时间") @ExcelColumn(name="开始时间") @TableField(fill = FieldFill.UPDATE) private Date startDate; @ApiModelProperty(value = "结束时间") @ExcelColumn(name="结束时间") @TableField(fill = FieldFill.UPDATE) private Date endDate; @ApiModelProperty(value = "领取后有效天数", example = "1") @ExcelColumn(name="领取后有效天数") @TableField(fill = FieldFill.UPDATE) private Integer validDays; @ApiModelProperty(value = "领取方式 0领取 1兑换", example = "1") server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
@@ -146,6 +146,10 @@ @ExcelColumn(name="优惠金额(元)",width = 10,index = 7) @TableField(exist = false) private BigDecimal couponPrice ; @ApiModelProperty(value = "是否过期 0未过期 1已过期", example = "1") @ExcelColumn(name="是否过期",width = 10,index = 14,valueMapping = "0=未过期;1=已过期;") @TableField(exist = false) private Integer isexpire; public static MemberCoupon couponToBean(Coupon coupon, Member member , Date now, Integer getMethod, LoginUserInfo loginUserInfo){ server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
@@ -106,6 +106,12 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "关联的店铺不存在!"); } } if(coupon.getUseType() ==0){ coupon.setValidDays(null); }else{ coupon.setStartDate(null); coupon.setEndDate(null); } coupon.setApplyIds(""); if(Constants.equalsInteger(coupon.getApplyType(),Constants.TWO) && coupon.getApplyIdList()!=null){ coupon.setApplyIds(coupon.getApplyIdList().stream().map(String::valueOf).collect(Collectors.joining(",")));//使用对象编码集合 @@ -148,7 +154,7 @@ isCreateParamValid(coupon); Coupon query= couponMapper.selectById(coupon.getId()); initCouponStatus(query); /* if(!Constants.equalsInteger(query.getCouponStatus(),Constants.ZERO)){ /* if(!Constants.equalsInteger(query.getCouponStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "活动已开始/已结束状态,不支持编辑操作"); }*/ coupon.setEditor(user.getId()); server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -325,16 +325,16 @@ queryWrapper.leftJoin(Goodsorder.class,Goodsorder::getId,MemberCoupon::getOrderId); queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,MemberCoupon::getCreator); queryWrapper.eq(MemberCoupon::getIsdeleted, Constants.ZERO); if(pageWrap.getModel().getStatus()!=null && pageWrap.getModel().getStatus()!=2){ queryWrapper.eq(pageWrap.getModel().getStatus()!=null,MemberCoupon::getStatus, pageWrap.getModel().getStatus()); } else if (pageWrap.getModel().getStatus()!=null && pageWrap.getModel().getStatus()==2) { //查询已过期(未使用,切已过了使用期限) queryWrapper.eq( MemberCoupon::getStatus, Constants.ZERO); queryWrapper.lt( MemberCoupon::getEndDate, new Date()); if(Constants.equalsInteger(pageWrap.getModel().getStatus(),0)&&pageWrap.getModel().getIsexpire()!=null && pageWrap.getModel().getIsexpire()== 0){ queryWrapper.gt( MemberCoupon::getEndDate, new Date()); } else if (Constants.equalsInteger(pageWrap.getModel().getStatus(),0)&&pageWrap.getModel().getIsexpire()!=null && pageWrap.getModel().getIsexpire()== 1) { queryWrapper.le( MemberCoupon::getEndDate, new Date()); } queryWrapper.in(pageWrap.getModel().getMethodList()!=null,MemberCoupon::getGetMethod, pageWrap.getModel().getMethodList()); queryWrapper.eq(pageWrap.getModel().getStatus()!=null,MemberCoupon::getStatus, pageWrap.getModel().getStatus()); queryWrapper.eq(pageWrap.getModel().getCouponType()!=null,MemberCoupon::getCouponType, pageWrap.getModel().getCouponType()); queryWrapper.eq(pageWrap.getModel().getCouponId()!=null,MemberCoupon::getCouponId, pageWrap.getModel().getCouponId()); queryWrapper.like(pageWrap.getModel().getName()!=null,MemberCoupon::getName, pageWrap.getModel().getName()); queryWrapper.eq(pageWrap.getModel().getOrderCode()!=null,Goodsorder::getCode, pageWrap.getModel().getOrderCode()); queryWrapper.eq(pageWrap.getModel().getGetMethod()!=null,MemberCoupon::getGetMethod, pageWrap.getModel().getGetMethod()); queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getNikeName()),ms -> ms.like( Member::getNickname, pageWrap.getModel().getNikeName()). @@ -349,7 +349,9 @@ && model.getEndDate()!=null && model.getEndDate().before(new Date())){ //已过期 model.setStatus(Constants.TWO); model.setIsexpire(Constants.ONE); }else if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)){ model.setIsexpire(Constants.ZERO); } } } server/dmmall_service/src/main/resources/application-dev.yml
@@ -1,4 +1,3 @@ spring: # 数据源配置 datasource: