| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="60%" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | > |
| | | <p class="tip-warn" style="margin: 30px;"><i class="el-icon-warning"></i>æä½è¯´æï¼å®ååæ¾ä¸ååæ¾æ»æ°éå¶ï¼å®å忾伿 å¸ä¸è®¡å
¥ä¼æ å¸å·²åæ¾ç»è®¡</p> |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="ï¼" inline> |
| | | <el-form-item label="åæ¾å¯¹è±¡" prop="addType" > |
| | | <el-radio-group v-model="form.addType" @change="changeType"> |
| | | <el-radio :label="0">æå®ä¼å</el-radio> |
| | | <el-radio :label="1">æå®ææºå·</el-radio> |
| | | <el-radio :label="2">å
¨é¨ä¼å</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <div v-if="form.addType===0" id="bbb"> |
| | | <el-form-item label="éæ©ç¨æ·" prop="addMemberIds" > |
| | | <el-select v-model="form.addMemberIds" placeholder="请è¾å
¥ä¼åæµç§°/ææºå·ï¼åéæ©" clearable filterable remote reserve-keyword :remote-method="remoteMethod" |
| | | :loading="searchLoading" |
| | | style="width: 400px;" |
| | | > |
| | | <el-option |
| | | v-for="item in users" |
| | | :key="item.id" |
| | | :label="item.nickname+' '+(item.phone||'')" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <div v-if="form.addType===1" id="aaaa"> |
| | | <el-form-item label="æ æº å·" prop="addMemberPhones" > |
| | | <el-input style="width: 400px;" type="textarea" v-model="form.addMemberPhones" placeholder="请è¾å
¥ææºå·" v-trim/> |
| | | <p class="tip-warn" style="margin-bottom: 2px;"><i class="el-icon-warning"></i>æéï¼å¤ä¸ªææºå·ï¼è¯·æ¢è¡è¾å
¥</p> |
| | | </el-form-item> |
| | | </div> |
| | | <el-form-item label="åæ¾å
容" prop="addCouponList" style="margin-top: 20px" > |
| | | <div style="border: 1px solid #f2f2f2"> |
| | | <el-table style="width: 600px;" :data="form.addCouponList"> |
| | | <el-table-column prop="name" label="伿 å¸" min-width="300px" align="center"> |
| | | <template slot-scope="{row}" > |
| | | <el-select v-model="row.id" style="width: 200px;margin: 0px 20px" clearable filterable placeholder="è¯·éæ©ä¼æ å¸" > |
| | | <el-option v-for="item in couponList" :label="item.name" :value="item.id"> </el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="num" label="æ°é" min-width="200px" align="center"> |
| | | <template slot-scope="{row}" > |
| | | <el-input style="width: 150px;margin: 0px 20px" type="number" v-model="row.num" placeholder="请è¾å
¥æ°é" v-trim/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="100px" align="center"> |
| | | <template slot-scope="scope" > |
| | | <el-button style="color: red;border: none;" @click="delCoupon( scope.$index)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-button s type="primary" icon="el-icon-plus" @click="addCoupon()" style="height: 30px;margin: 10px;">æ·»å </el-button> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { allList } from '@/api/business/coupon' |
| | | import { findAll as memberlist } from '@/api/business/member' |
| | | export default { |
| | | name: 'OperaCouponWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | const couponRules = (rule, value, callback) => { |
| | | if (!this.form.addCouponList || !this.form.addCouponList.length) { |
| | | callback(new Error('è¯·éæ©ä¼æ å¸ä¿¡æ¯')) |
| | | } else { |
| | | var r = true |
| | | this.form.addCouponList.forEach(item => { |
| | | if (!item.id || !item.num) { |
| | | r = false |
| | | } |
| | | }) |
| | | if (!r) { |
| | | callback(new Error('请å®å伿 å¸ä¿¡æ¯')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | } |
| | | return { |
| | | searchLoading: false, |
| | | couponList: [], |
| | | users: [], |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | | addType: 0, |
| | | addMemberIds: null, |
| | | addMemberPhones: null, |
| | | addCouponList: [{ id: null, num: null }] |
| | | }, |
| | | shops: [], |
| | | categorys: [], |
| | | // éªè¯è§å |
| | | rules: { |
| | | addType: [ |
| | | { required: true, message: 'è¯·éæ©åæ¾å¯¹è±¡' } |
| | | ], |
| | | addMemberIds: [ |
| | | { required: true, message: '请éä¸äººåä¿¡æ¯' } |
| | | ], |
| | | addMemberPhones: [ |
| | | { required: true, message: '请æå®äººåææºå·' } |
| | | ], |
| | | addCouponList: [ |
| | | { required: true, validator: couponRules, tigger: 'blur' } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | api: '/business/memberCoupon', |
| | | 'field.id': 'id' |
| | | }) |
| | | }, |
| | | methods: { |
| | | changeType(t){ |
| | | this.$refs.form.validate() |
| | | }, |
| | | remoteMethod (query) { |
| | | if (query !== '') { |
| | | this.searchLoading = true |
| | | memberlist({ |
| | | capacity: 999, |
| | | model: { |
| | | nickname: query, |
| | | status: 0 |
| | | } |
| | | }) |
| | | .then(res => { |
| | | this.users = res |
| | | }) |
| | | .finally(() => { |
| | | this.searchLoading = false |
| | | }) |
| | | } |
| | | }, |
| | | getCouponList () { |
| | | allList({ status: 0 }) |
| | | .then(res => { |
| | | if (res) { |
| | | this.couponList = res || [] |
| | | } |
| | | }) |
| | | }, |
| | | delCoupon (index) { |
| | | this.form.addCouponList.splice(index, 1) |
| | | }, |
| | | addCoupon (type) { |
| | | this.form.addCouponList.push({ id: null, num: null }) |
| | | }, |
| | | open (title, target, type) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.form.addMemberIds = null |
| | | this.form.addMemberPhones = null |
| | | this.form.addType = 0 |
| | | this.form.addCouponList = [{ id: null, num: null }] |
| | | this.getCouponList() |
| | | } |
| | | } |
| | | } |
| | | </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> |