From d8689abdb2378bdd1c97317ca881173eca26283c Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 14 一月 2026 17:13:52 +0800
Subject: [PATCH] 经销商管理
---
admin/src/components/business/OperaCouponWindow.vue | 267 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 172 insertions(+), 95 deletions(-)
diff --git a/admin/src/components/business/OperaCouponWindow.vue b/admin/src/components/business/OperaCouponWindow.vue
index 8e6eb3d..68002b6 100644
--- a/admin/src/components/business/OperaCouponWindow.vue
+++ b/admin/src/components/business/OperaCouponWindow.vue
@@ -1,116 +1,121 @@
<template>
- <GlobalAlertWindow
- :title="title"
- :visible.sync="visible"
- :confirm-working="isWorking"
- @confirm="confirm"
+ <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="info">
- <el-input v-model="form.info" placeholder="璇疯緭鍏ヤ紭鎯犲埜璇存槑" :maxlength="30" v-trim/>
+ <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">
+ <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')"
+ <el-input v-model="form.limitPrice" placeholder="璇疯緭鍏�" @input="inputAction(form, 'limitPrice')"
>
<template slot="append">鍏�</template>
</el-input>
- <div class="discrep">鍑�</div>
- <el-input
- v-model="form.price"
- placeholder="璇疯緭鍏�"
- @input="inputAction(form, 'price')"
- >
- <template slot="append">鍏�</template>
+ <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="num">
- <div class="num-style">
- <el-input-number step-strictly v-model="form.num" :controls="false" :min="1" :max="99999" placeholder="璇疯緭鍏ュ彂鏀炬�婚噺(1~99999)" v-trim></el-input-number>
- </div>
+ <el-form-item label="浼樻儬鍒歌鏄�" prop="info">
+ <el-input type="textarea" v-model="form.info" placeholder="璇疯緭鍏ヤ紭鎯犲埜璇存槑" v-trim/>
</el-form-item>
- <el-form-item v-if="form.type==1" label="鍏戞崲鏉′欢" prop="integral">
- <el-input-number step-strictly v-model="form.integral" :controls="false" :min="1" :max="99999" placeholder="璇疯緭鍏�" v-trim/> 鍜栬眴鍏戞崲涓�寮犱紭鎯犲埜
+ <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">
+ <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"
+ 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">
- <!-- <el-input v-model="form.validDays" placeholder="璇疯緭鍏ラ鍙栧悗鏈夋晥澶╂暟" v-trim/> -->
+ <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')"
+ v-model="form.validDays"
+ placeholder="璇疯緭鍏�"
+ @input="inputAction(form, 'validDays')"
>
<template slot="append">澶�</template>
</el-input>
- <div class="discrep">鍐呮湁鏁堬紝棰嗗彇鍚庣珛鍗崇敓鏁�</div>
+ <div class="discrep">鏈夋晥</div>
</div>
</el-form-item>
- <el-form-item v-if="form.type==0" label="鍏宠仈搴楅摵" prop="shopId">
- <el-select
- v-model="form.shopId"
- placeholder="璇疯緭鍏ュ簵閾哄悕绉帮紝鍐嶉�夋嫨"
- filterable
- remote
- reserve-keyword
- :remote-method="remoteMethod"
- :loading="searchLoading"
-
- >
- <el-option
- v-for="item in shops"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- </el-option>
+ <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>
- </GlobalAlertWindow>
+ <OperaCouponGoodsWindow ref="OperaCouponGoodsWindow" @success="doSelect"/>
+ </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
-import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
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: { GlobalAlertWindow },
+ components: { GlobalWindow,OperaCouponGoodsWindow },
data () {
- let couponRules = (rule, value, callback) => {
+ const couponRules = (rule, value, callback) => {
if (!this.form.limitPrice) {
callback(new Error('璇疯緭鍏ユ弧棰�'))
} else if (!this.form.price) {
- callback(new Error('璇疯緭鍏ヤ紭鎯犻噾棰�'))
+ callback(new Error('璇峰畬鍠勪紭鎯犺鍒�'))
} else {
callback()
}
}
- let getDateRules = (rule, value, callback) => {
+ const getDateRules = (rule, value, callback) => {
if (!this.form.startDate) {
callback(new Error('璇烽�夋嫨寮�濮嬫椂闂�'))
} else if (!this.form.endDate) {
@@ -119,7 +124,7 @@
callback()
}
}
- let numRule = (rule, value, callBack) => {
+ const numRule = (rule, value, callBack) => {
if (value < 0) {
callBack(new Error())
} else {
@@ -129,16 +134,24 @@
return {
searchLoading: false,
getDate: [],
+ applyDataList:[],
+ showGoods:false,
// 琛ㄥ崟鏁版嵁
form: {
id: null,
name: '',
+ couponType: 0,
+ applyType: 0,
+ useType: 0,
shopId: '',
- type: '',
+ applyIdList: [],
+ applyCateIdList: [],
+ type: 0,
limitPrice: '',
price: '',
startDate: '',
endDate: '',
+ applyIds: '',
validDays: '',
getMethod: '',
integral: '',
@@ -147,29 +160,39 @@
info: ''
},
shops: [],
+ categorys: [],
// 楠岃瘉瑙勫垯
rules: {
name: [
{ required: true, message: '璇疯緭鍏ヤ紭鎯犲埜鍚嶇О', tigger: 'blur' }
],
couponRule: [
- { required: true, validator: couponRules, tigger: 'blur'}
+ { 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'}
+ { 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'}
- ],
+ /*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' }
+ // ]
}
}
},
@@ -180,21 +203,62 @@
})
},
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);
+ console.log(this.form)
this.form[this.configData['field.id']] = null
})
-
return
}
// 缂栬緫
@@ -203,29 +267,42 @@
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) {
+ selectDate (value) {
this.form.startDate = value[0]
this.form.endDate = value[1]
},
- inputAction(item, key) {
- if(item[key]<0) {
+ 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, '')
+ .replace(/\.{2,}/g, '.')
+ .replace('.', '$#$')
+ .replace(/\./g, '')
+ .replace('$#$', '.')
+ .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
+ .replace(/^\./g, '')
}
},
- remoteMethod(query) {
+ remoteMethod (query) {
if (query !== '') {
this.searchLoading = true
- let action = this.form.type==2 ? activityList : shopList
+ const action = this.form.type == 2 ? activityList : shopList
action({
capacity: 999,
model: {
@@ -239,8 +316,8 @@
this.searchLoading = false
})
}
- },
- },
+ }
+ }
}
</script>
--
Gitblit v1.9.3