| | |
| | | trim: true |
| | | }) |
| | | } |
| | | export function exportExcel (data) { |
| | | return request.post('/business/memberCoupon/exportExcel', data, { |
| | | trim: true, |
| | | download: true |
| | | }) |
| | | } |
| | | |
| | | // å建 |
| | | export function create (data) { |
| | | return request.post('/business/memberCoupon/create', data) |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="80%" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="ï¼" inline> |
| | | <p class="tip-header" >åºæ¬å±æ§</p> |
| | | <el-form-item label="伿 å¸åç§°" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请è¾å
¥ä¼æ å¸åç§°" :maxlength="12" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="ç±»å" prop="couponType"> |
| | | <el-radio-group v-model="form.couponType"> |
| | | <el-radio :label="0" >满åå¸</el-radio> |
| | | <el-radio :label="1">ææ£å¸</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="伿 è§å" prop="couponRule" > |
| | | <div class="coupon-rule"> |
| | | <div class="discrep">è®¢åæ»¡</div> |
| | | <el-input v-model="form.limitPrice" placeholder="请è¾å
¥" @input="inputAction(form, 'limitPrice')" |
| | | > |
| | | <template slot="append">å
</template> |
| | | </el-input> |
| | | <div class="discrep" >{{form.couponType === 1?'ï¼äº«':'ï¼å'}}</div> |
| | | <el-input v-model="form.price" placeholder="请è¾å
¥" @input="inputAction(form, 'price')" > |
| | | <template slot="append" >{{form.couponType ===1?'æ':'å
'}}</template> |
| | | </el-input> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="伿 å¸è¯´æ" prop="info"> |
| | | <el-input type="textarea" v-model="form.info" placeholder="请è¾å
¥ä¼æ å¸è¯´æ" v-trim/> |
| | | </el-form-item> |
| | | <p class="tip-header" >使ç¨éå¶</p> |
| | | <el-form-item label="æææ" prop="useType"> |
| | | <el-radio-group v-model="form.useType"> |
| | | <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"> |
| | | <el-date-picker |
| | | v-model="getDate" |
| | | type="datetimerange" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¶é´" |
| | | end-placeholder="ç»ææ¶é´" |
| | | @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="discrep">é¢åµå</div> |
| | | <el-input |
| | | v-model="form.validDays" |
| | | placeholder="请è¾å
¥" |
| | | @input="inputAction(form, 'validDays')" |
| | | > |
| | | <template slot="append">天</template> |
| | | </el-input> |
| | | <div class="discrep">ææ</div> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="éç¨å¯¹è±¡" prop="applyType"> |
| | | <el-radio-group v-model="form.applyType"> |
| | | <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-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> |
| | | </el-form-item> |
| | | <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> |
| | | <p class="tip-header" >åæ¾è§å</p> |
| | | <el-form-item label="åæ¾æ»é" prop="num"> |
| | | <div class="num-style"> |
| | | <el-input-number v-model="form.num" :controls="false" :min="1" :max="99999" placeholder="请è¾å
¥åæ¾æ»é(1~99999)" v-trim></el-input-number> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | <OperaCouponGoodsWindow ref="OperaCouponGoodsWindow" @success="doSelect"/> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import { fetchList as shopList } from '@/api/business/shop' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { findAll as labelList } from '@/api/business/labels' |
| | | import { allList as goodsList} from '@/api/business/goods' |
| | | import OperaCouponGoodsWindow from '@/components/business/OperaCouponGoodsWindow' |
| | | export default { |
| | | name: 'OperaCouponWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow,OperaCouponGoodsWindow }, |
| | | data () { |
| | | const couponRules = (rule, value, callback) => { |
| | | if (!this.form.limitPrice) { |
| | | callback(new Error('请è¾å
¥æ»¡é¢')) |
| | | } else if (!this.form.price) { |
| | | callback(new Error('请å®å伿 è§å')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | const getDateRules = (rule, value, callback) => { |
| | | if (!this.form.startDate) { |
| | | callback(new Error('è¯·éæ©å¼å§æ¶é´')) |
| | | } else if (!this.form.endDate) { |
| | | callback(new Error('请è¾å
¥ç»ææ¶é´')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | const numRule = (rule, value, callBack) => { |
| | | if (value < 0) { |
| | | callBack(new Error()) |
| | | } else { |
| | | callBack() |
| | | } |
| | | } |
| | | return { |
| | | searchLoading: false, |
| | | getDate: [], |
| | | applyDataList:[], |
| | | showGoods:false, |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | | id: null, |
| | | name: '', |
| | | couponType: 0, |
| | | applyType: 0, |
| | | useType: 0, |
| | | shopId: '', |
| | | applyIdList: [], |
| | | applyCateIdList: [], |
| | | type: 0, |
| | | limitPrice: '', |
| | | price: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | applyIds: '', |
| | | validDays: '', |
| | | getMethod: '', |
| | | integral: '', |
| | | status: '', |
| | | num: '', |
| | | info: '' |
| | | }, |
| | | shops: [], |
| | | categorys: [], |
| | | // éªè¯è§å |
| | | rules: { |
| | | name: [ |
| | | { required: true, message: '请è¾å
¥ä¼æ å¸åç§°', tigger: 'blur' } |
| | | ], |
| | | couponRule: [ |
| | | { required: true, validator: couponRules, tigger: 'blur' } |
| | | ], |
| | | useType: [ |
| | | { required: true, message: 'è¯·éæ©ææææ¹å¼' } |
| | | ], |
| | | couponType: [ |
| | | { required: true, message: 'è¯·éæ©ç±»å' } |
| | | ], |
| | | applyType: [ |
| | | { required: true, message: 'è¯·éæ©éç¨å¯¹è±¡ç±»å' } |
| | | ], |
| | | 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' } |
| | | // ], |
| | | // shopId: [ |
| | | // { required: true, validator: numRule, message: 'è¯·éæ©å
³èåºéº', tigger: 'change' } |
| | | // ] |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | api: '/business/coupon', |
| | | 'field.id': 'id' |
| | | }) |
| | | }, |
| | | methods: { |
| | | selectGoods(){ |
| | | this.$refs.OperaCouponGoodsWindow.open('éæ©åå', this.applyDataList) |
| | | }, |
| | | loadLabels(){ |
| | | labelList({ |
| | | type: 0 // åååç±» |
| | | }).then(res => { |
| | | this.categorys = res || [] |
| | | }) |
| | | }, |
| | | loadSelectGoods(){ |
| | | console.log(this.form.applyIdList) |
| | | if(!this.form.applyIdList || !this.form.applyIdList.length){ |
| | | return |
| | | } |
| | | goodsList({ |
| | | idList: this.form.applyIdList // åååç±» |
| | | }).then(res => { |
| | | this.applyDataList = res || [] |
| | | }) |
| | | }, |
| | | doSelect(rows){ |
| | | console.log(rows,this.applyDataList) |
| | | this.applyDataList =[] |
| | | this.form.applyIdList=[] |
| | | if(rows && rows.length){ |
| | | rows.forEach(item => { |
| | | this.applyDataList.push(item) |
| | | this.form.applyIdList.push(item.id) |
| | | }) |
| | | } |
| | | }, |
| | | open (title, target, type) { |
| | | this.showGoods=false |
| | | this.title = title |
| | | this.visible = true |
| | | this.form.type = type |
| | | this.getDate = [] |
| | | this.form.startDate = '' |
| | | this.form.endDate = '' |
| | | this.applyDataList=[] |
| | | this.form.applyIdList=[] |
| | | this.form.applyCateIdList=[] |
| | | this.loadLabels() |
| | | this.form.limitPrice=null |
| | | this.form.price=null |
| | | this.form.startDate=null |
| | | this.form.endDate=null |
| | | this.form.num=1 |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | console.log(this.form) |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | this.getDate = [target.startDate, target.endDate] |
| | | if(this.form.applyType === 1){ |
| | | this.form.applyCateIdList =[] |
| | | var ta = this.form.applyIds.split(',') |
| | | if(ta && ta.length){ |
| | | ta.forEach(tt =>{ |
| | | this.form.applyCateIdList.push(parseInt(tt)) |
| | | }) |
| | | } |
| | | } |
| | | if(this.form.applyType === 2){ |
| | | this.form.applyIdList = this.form.applyIds.split(',') |
| | | this.loadSelectGoods() |
| | | } |
| | | }) |
| | | }, |
| | | selectDate (value) { |
| | | this.form.startDate = value[0] |
| | | this.form.endDate = value[1] |
| | | }, |
| | | inputAction (item, key) { |
| | | if (item[key] < 0) { |
| | | item[key] = '' |
| | | } else { |
| | | item[key] = item[key].replace(/[^\d.]/g, '') |
| | | .replace(/\.{2,}/g, '.') |
| | | .replace('.', '$#$') |
| | | .replace(/\./g, '') |
| | | .replace('$#$', '.') |
| | | .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3') |
| | | .replace(/^\./g, '') |
| | | } |
| | | }, |
| | | remoteMethod (query) { |
| | | if (query !== '') { |
| | | this.searchLoading = true |
| | | const action = this.form.type == 2 ? activityList : shopList |
| | | action({ |
| | | capacity: 999, |
| | | model: { |
| | | name: query |
| | | } |
| | | }) |
| | | .then(res => { |
| | | this.shops = res.records |
| | | }) |
| | | .finally(() => { |
| | | this.searchLoading = false |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/alertstyle.scss'; |
| | | |
| | | .coupon-rule { |
| | | display: flex; |
| | | .discrep { |
| | | padding: 0 10px; |
| | | } |
| | | ::v-deep .el-input { |
| | | width: 160px; |
| | | } |
| | | } |
| | | .num-style { |
| | | ::v-deep .el-input-number { |
| | | width: 60%; |
| | | } |
| | | } |
| | | .date-style { |
| | | ::v-deep input { |
| | | text-align: center !important; |
| | | } |
| | | } |
| | | ::v-deep .el-select { |
| | | width: 100%; |
| | | .el-input__inner { |
| | | width: 100%; |
| | | } |
| | | } |
| | | |
| | | </style> |
| | |
| | | </el-form> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:membercoupon:create', 'business:membercoupon:exportExcel']"> |
| | | <li><el-button type="primary" @click="$refs.OperaMemberCouponWindow.open('æ°å»º', null)" v-permissions="['business:membercoupon:create']">å®ååæ¾</el-button></li> |
| | | <li> <el-button type="primary" :loading="isWorking.export" v-permissions="['business:membercoupon:exportExcel']" @click="exportExcel">导åº</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | |
| | | > |
| | | </pagination> |
| | | </template> |
| | | |
| | | <OperaMemberCouponWindow ref="OperaMemberCouponWindow" @success="handlePageChange"/> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import OperaMemberCouponWindow from '@/components/business/OperaMemberCouponWindow' |
| | | import Pagination from '@/components/common/Pagination' |
| | | export default { |
| | | name: 'MemberCoupon', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination }, |
| | | components: { TableLayout, Pagination ,OperaMemberCouponWindow}, |
| | | data () { |
| | | return { |
| | | // æç´¢ |
| | |
| | | @PostMapping("/exportExcel") |
| | | @RequiresPermissions("business:membercoupon:exportExcel") |
| | | public void exportExcel (@RequestBody PageWrap<MemberCoupon> pageWrap, HttpServletResponse response) { |
| | | ExcelExporter.build(MemberCoupon.class).export(memberCouponService.findPage(pageWrap).getRecords(), "ç¨æ·ä¼æ å¸å
³è表", response); |
| | | ExcelExporter.build(MemberCoupon.class).export(memberCouponService.findPage(pageWrap).getRecords(), "伿 叿ç»", response); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDæ¥è¯¢") |
| | |
| | | public class MemberCoupon { |
| | | |
| | | @ApiModelProperty(value = "主é®", example = "1") |
| | | @ExcelColumn(name="主é®") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | @ApiModelProperty(value = "å建人ç¼ç ", example = "1") |
| | | @ExcelColumn(name="å建人ç¼ç ") |
| | | private Integer creator; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´") |
| | | @ExcelColumn(name="å建æ¶é´") |
| | | |
| | | @ExcelColumn(name="åæ¾æ¶é´" ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10,index = 11) |
| | | private Date createDate; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°äººç¼ç ", example = "1") |
| | | @ExcelColumn(name="æ´æ°äººç¼ç ") |
| | | private Integer editor; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°æ¶é´") |
| | | @ExcelColumn(name="æ´æ°æ¶é´") |
| | | |
| | | private Date editDate; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å é¤0å¦ 1æ¯", example = "1") |
| | | @ExcelColumn(name="æ¯å¦å é¤0å¦ 1æ¯") |
| | | private Integer isdeleted; |
| | | |
| | | @ApiModelProperty(value = "夿³¨") |
| | | @ExcelColumn(name="夿³¨") |
| | | private String remark; |
| | | |
| | | @ApiModelProperty(value = "ç¨æ·ç¼ç ï¼å
³èmember表ï¼", example = "1") |
| | | @ExcelColumn(name="ç¨æ·ç¼ç ï¼å
³èmember表ï¼") |
| | | private Integer memberId; |
| | | |
| | | @ApiModelProperty(value = "åå®¶ç¼ç ï¼å
³èshop表ï¼", example = "1") |
| | | @ExcelColumn(name="åå®¶ç¼ç ï¼å
³èshop表ï¼") |
| | | private Integer shopId; |
| | | |
| | | @ApiModelProperty(value = "ç±»å0å家伿 å¸ 1å¹³å°ä¼æ å¸ ", example = "1") |
| | | @ExcelColumn(name="ç±»å0å家伿 å¸ 1å¹³å°ä¼æ å¸ ") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "满é¢ï¼å
ï¼", example = "1") |
| | | @ExcelColumn(name="满é¢ï¼å
ï¼") |
| | | private BigDecimal limitPrice; |
| | | |
| | | @ApiModelProperty(value = "伿 éé¢ï¼å
ï¼", example = "1") |
| | | @ExcelColumn(name="伿 éé¢ï¼å
ï¼") |
| | | @ExcelColumn(name="伿 éé¢ï¼å
ï¼",width = 10,index = 7) |
| | | private BigDecimal price; |
| | | |
| | | @ApiModelProperty(value = "å¼å§æ¶é´") |
| | | @ExcelColumn(name="å¼å§æ¶é´") |
| | | |
| | | @ExcelColumn(name="å¼å§æ¶é´",width = 10,index = 5,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date startDate; |
| | | |
| | | @ApiModelProperty(value = "ç»ææ¶é´") |
| | | @ExcelColumn(name="ç»ææ¶é´") |
| | | |
| | | @ExcelColumn(name="ç»ææ¶é´",width = 10 ,index = 6,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date endDate; |
| | | |
| | | @ApiModelProperty(value = "é¢åæ¹å¼ 0é¢å 1å
æ¢", example = "1") |
| | | @ExcelColumn(name="é¢åæ¹å¼ 0é¢å 1å
æ¢") |
| | | @ExcelColumn(name="é¢åæ¹å¼",width = 10,index = 4,valueMapping = "0=馿¬¡æ³¨å;1=é请好å;2=å®ååæ¾;") |
| | | private Integer getMethod; |
| | | |
| | | @ApiModelProperty(value = "å
æ¢æéåè±éé¢", example = "1") |
| | | @ExcelColumn(name="å
æ¢æéåè±éé¢") |
| | | private BigDecimal integral; |
| | | |
| | | @ApiModelProperty(value = "ç¶æ 0æªä½¿ç¨ 1已使ç¨", example = "1") |
| | | @ExcelColumn(name="ç¶æ 0æªä½¿ç¨ 1已使ç¨") |
| | | @ExcelColumn(name="ç¶æ",width = 10,index = 8,valueMapping = "0=æªä½¿ç¨;1=已使ç¨;2=å·²è¿æ;") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "说æ") |
| | | @ExcelColumn(name="说æ") |
| | | private String info; |
| | | |
| | | @ApiModelProperty(value = "ä½¿ç¨æ¶é´") |
| | | @ExcelColumn(name="ä½¿ç¨æ¶é´") |
| | | @ExcelColumn(name="ä½¿ç¨æ¶é´",width = 10,index = 9,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date useDate; |
| | | |
| | | @ApiModelProperty(value = "使ç¨ç§¯åå¥å±æ°é", example = "1") |
| | | @ExcelColumn(name="使ç¨ç§¯åå¥å±æ°é") |
| | | private BigDecimal backIntegral; |
| | | |
| | | @ApiModelProperty(value = "伿 å¸åç§°") |
| | | @ExcelColumn(name="伿 å¸åç§°") |
| | | @ExcelColumn(name="伿 å¸åç§°",width = 10,index = 2 ) |
| | | private String name; |
| | | |
| | | @ApiModelProperty(value = "coupon表id") |
| | | @ExcelColumn(name="coupon表id") |
| | | private Integer couponId; |
| | | |
| | | @ApiModelProperty(value = "伿 å¸ç±»åï¼0=满åå¸ï¼1=ææ£å¸ï¼") |
| | | @ExcelColumn(name="伿 å¸ç±»å",width = 10,index = 3,valueMapping = "0=满åå¸;1=ææ£å¸;") |
| | | private Integer couponType; |
| | | |
| | | @ApiModelProperty(value = "éç¨ç±»åï¼0=å
¨åº;1=åç±»ï¼2=æå®åå") |
| | |
| | | |
| | | @ApiModelProperty(value = "æµç§°") |
| | | @TableField(exist = false) |
| | | @ExcelColumn(name="ç¨æ·",width = 10,index = 1) |
| | | private String nikeName; |
| | | @ApiModelProperty(value = "å
³è订åå·å·") |
| | | @ExcelColumn(name="å
³è订åå·",width = 10,index = 10) |
| | | @TableField(exist = false) |
| | | private String orderCode; |
| | | @ApiModelProperty(value = "å建人") |
| | | @TableField(exist = false) |
| | | @ExcelColumn(name="æä½äºº",index = 12,width = 10) |
| | | private String creatorName; |
| | | @ApiModelProperty(value = "å
³è订åå·") |
| | | @ApiModelProperty(value = "å
³è订å") |
| | | private String orderId; |
| | | |
| | | @ApiModelProperty(value = "å®é
éç¨æ¶éé¢") |
| | |
| | | private String mobile; |
| | | |
| | | @ApiModelProperty(value = "头å") |
| | | @NotBlank(message = "头åä¸è½ä¸ºç©º", groups = {OperaType.Create.class, OperaType.Update.class}) |
| | | // @NotBlank(message = "头åä¸è½ä¸ºç©º", groups = {OperaType.Create.class, OperaType.Update.class}) |
| | | private String avatar; |
| | | |
| | | @ApiModelProperty(value = "å¯ç ") |