|
|
|
@ -2,10 +2,12 @@ |
|
|
|
<div class="main-content12 "> |
|
|
|
<div class="flex-common"> |
|
|
|
<el-tabs v-model="curAddTab" class=""> |
|
|
|
<el-tab-pane :label="'新增'+item.name" v-for="(item,index) in numsList" :name="item.type" :key="index"></el-tab-pane> |
|
|
|
<el-tab-pane :label="'新增' + item.name" v-for="(item, index) in numsList" :name="item.type" |
|
|
|
:key="index"></el-tab-pane> |
|
|
|
</el-tabs> |
|
|
|
<div class="beforeNotice" v-if="curTabInfo"> |
|
|
|
<p class="noticeTop flex"><img src="@/assets/site/siteSemInfo_Icon.svg" alt=""> {{curTabInfo.name}}使用说明</p> |
|
|
|
<p class="noticeTop flex"><img src="@/assets/site/siteSemInfo_Icon.svg" alt=""> {{ curTabInfo.name }}使用说明 |
|
|
|
</p> |
|
|
|
<div class="noticeBot column"> |
|
|
|
<p>1. {{ curTabInfo.desc1 }}</p> |
|
|
|
<p>2. {{ curTabInfo.desc2 }}</p> |
|
|
|
@ -13,7 +15,8 @@ |
|
|
|
</div> |
|
|
|
<el-form class="baseRule_wrap"> |
|
|
|
<p class="littleTitle mb24 mt24">基础规则</p> |
|
|
|
<GuipRadio v-model="createType" :options="createTypeList" prop="type" label="选择生成方式" @change="domainTypeChange" /> |
|
|
|
<GuipRadio v-model="createType" :options="createTypeList" prop="type" label="选择生成方式" |
|
|
|
@change="domainTypeChange" /> |
|
|
|
<div class="flex coupon_name mb24 gap12"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">卡券数量</label> |
|
|
|
<GuipInput v-model="link" width="488px" unit="张" placeholder="大于0的整数"></GuipInput> |
|
|
|
@ -21,8 +24,11 @@ |
|
|
|
<div class="flex coupon_name mb24 gap12"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">选择发放途径</label> |
|
|
|
<div v-for="item in walletList" :key="item.type"> |
|
|
|
<div v-if="item.show.includes(curAddTab)" class="wallet-item" :class="walletType == item.type ? 'wallet-item-active' : ''" @click="walletClick(item.type)"> |
|
|
|
<img src="@/assets/site/tem-active.svg" class="tem-active" alt="" v-if="walletType == item.type"> |
|
|
|
<div v-if="item.show.includes(curAddTab)" class="wallet-item" |
|
|
|
:class="walletType == item.type ? 'wallet-item-active' : ''" |
|
|
|
@click="walletClick(item.type)"> |
|
|
|
<img src="@/assets/site/tem-active.svg" class="tem-active" alt="" |
|
|
|
v-if="walletType == item.type"> |
|
|
|
<div class="wallet-name">{{ item.name }}</div> |
|
|
|
<div class="desc">{{ item.desc1 }}</div> |
|
|
|
</div> |
|
|
|
@ -35,11 +41,13 @@ |
|
|
|
</div> |
|
|
|
<div class="flex coupon_name mb24 gap12"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">关键词</label> |
|
|
|
<GuipTextarea v-model="link" width="488px" placeholder="用户获取优惠券在在公众号里回复的词语" height="38px"></GuipTextarea> |
|
|
|
<GuipTextarea v-model="link" width="488px" placeholder="用户获取优惠券在在公众号里回复的词语" maxlength="25" |
|
|
|
height="38px"></GuipTextarea> |
|
|
|
</div> |
|
|
|
<div class="flex coupon_name mb24 gap12"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">回复内容</label> |
|
|
|
<GuipTextarea v-model="link" width="488px" placeholder="自动回复用户关键词时,会把这段话回复给用户" height="56px"></GuipTextarea> |
|
|
|
<GuipTextarea v-model="link" width="488px" placeholder="自动回复用户关键词时,会把这段话回复给用户" maxlength="100" |
|
|
|
height="56px"></GuipTextarea> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
@ -51,63 +59,39 @@ |
|
|
|
<div class="wrap"> |
|
|
|
<div class="flex coupon_name mb24 gap12"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">卡券名称</label> |
|
|
|
<GuipInput v-model="link" width="488px"></GuipInput> |
|
|
|
<GuipInput v-model="link" width="488px" maxlength="25"></GuipInput> |
|
|
|
</div> |
|
|
|
<div class="flex gap12 mb24"> |
|
|
|
<span>适用服务类型</span> |
|
|
|
<!-- :options="allData" |
|
|
|
labelKey="name" |
|
|
|
valueKey="id" --> |
|
|
|
<el-select |
|
|
|
style="width:238px" |
|
|
|
width="238px" |
|
|
|
v-model="firstSelected" |
|
|
|
label="适用服务类型" |
|
|
|
@change="handleFirstChange" |
|
|
|
> |
|
|
|
<el-select style="width:238px" width="238px" v-model="firstSelected" label="适用服务类型" |
|
|
|
@change="handleFirstChange"> |
|
|
|
<div class="fastSearch column"> |
|
|
|
<GuipInput class="mb12" v-model="searchWord" width="206px" height="30px"></GuipInput> |
|
|
|
<div class="flex gap8"> |
|
|
|
<span class="tag-item" v-for="item in fastWords" :key="item.id" @click="checkFastWord(item.name)" |
|
|
|
<span class="tag-item" v-for="item in fastWords" :key="item.id" |
|
|
|
@click="checkFastWord(item.name)" |
|
|
|
:class="searchWord == item.name ? 'tag-item-active' : ''">{{ item.name }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<el-option |
|
|
|
class="flex-between" |
|
|
|
v-for="item in allData" |
|
|
|
:key="item.id" |
|
|
|
:label="item.name" |
|
|
|
<el-option class="flex-between" v-for="item in allData" :key="item.id" :label="item.name" |
|
|
|
:value="item.id"> |
|
|
|
<span style="float: left">{{ item.name }}</span> |
|
|
|
<img v-if="firstSelected == item.id" src="@/assets/site/dropdown_chose_ic.svg" alt=""> |
|
|
|
</el-option> |
|
|
|
</el-select> |
|
|
|
<!-- 二级选择框,只有当有二级数据时才显示 --> |
|
|
|
<el-select |
|
|
|
style="width:238px" |
|
|
|
v-if="showSecondSelect" |
|
|
|
v-model="secondSelected" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
class="flex-between" |
|
|
|
v-for="item in allData" |
|
|
|
:key="item.id" |
|
|
|
:label="item.name" |
|
|
|
<el-select style="width:238px" v-if="showSecondSelect" v-model="secondSelected"> |
|
|
|
<el-option class="flex-between" v-for="item in allData" :key="item.id" :label="item.name" |
|
|
|
:value="item.id"> |
|
|
|
<span style="float: left">{{ item.name }}</span> |
|
|
|
<img v-if="secondSelected == item.id" src="@/assets/site/dropdown_chose_ic.svg" alt=""> |
|
|
|
</el-option> |
|
|
|
</el-select> |
|
|
|
<!-- <el-select |
|
|
|
style="width:238px" |
|
|
|
width="238px" |
|
|
|
v-if="showSecondSelect" |
|
|
|
labelKey="name" |
|
|
|
valueKey="id" |
|
|
|
:options="secondOptions" |
|
|
|
v-model="secondSelected" |
|
|
|
></el-select> --> |
|
|
|
|
|
|
|
</div> |
|
|
|
<div class="flex coupon_name mb24 gap12"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">满减规则</label> |
|
|
|
@ -119,18 +103,29 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<GuipRadio v-if="curAddTab == 1" v-model="domainType" :options="domainTypes" prop="type" label="可用时间范围" @change="domainTypeChange" /> |
|
|
|
<GuipRadio v-if="curAddTab == 1" v-model="domainType" :options="domainTypes" prop="type" |
|
|
|
label="可用时间范围" @change="domainTypeChange" /> |
|
|
|
<div class="flex coupon_name mb24 gap12"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">{{ curAddTab == 1 ?'每日可用次数' :'可用次数' }}</label> |
|
|
|
<GuipInput v-model="link" unit="次"></GuipInput> |
|
|
|
<label for="" style="width: 90px;text-align: right;">{{ curAddTab == 1 ? '每日可用次数' : '可用次数' |
|
|
|
}}</label> |
|
|
|
<GuipInput v-model="link" unit="次" width="488px"></GuipInput> |
|
|
|
</div> |
|
|
|
<div class="flex coupon_name mb24 gap12" v-if="curAddTab != '2'"> |
|
|
|
<label for="" style="width: 90px;text-align: right;">领取起止时间</label> |
|
|
|
<el-date-picker class="mr-32" v-model="searchDate" type="daterange" range-separator="至" |
|
|
|
start-placeholder="开始日期" end-placeholder="结束日期" style="min-width:210px;flex:1" format="yyyy-MM-dd" value-format="yyyy-MM-dd"> |
|
|
|
<el-date-picker |
|
|
|
style="min-width:210px;flex:1" |
|
|
|
v-model="dateRange" |
|
|
|
type="daterange" |
|
|
|
range-separator="-" |
|
|
|
:picker-options="pickerOptions" |
|
|
|
start-placeholder="起始日期" |
|
|
|
end-placeholder="结束日期" |
|
|
|
:default-value="defaultDateRange"> |
|
|
|
</el-date-picker> |
|
|
|
</div> |
|
|
|
<GuipInput v-if="curAddTab != 2" v-model="link" :label="curAddTab == 1 ?'初次使用时间':'使用有效时间'"></GuipInput> |
|
|
|
|
|
|
|
<GuipInput v-if="curAddTab != 2" v-model="link" :label="curAddTab == 1 ? '初次使用时间' : '使用有效时间'" unit="天"> |
|
|
|
</GuipInput> |
|
|
|
</div> |
|
|
|
|
|
|
|
</el-form> |
|
|
|
@ -155,7 +150,29 @@ export default { |
|
|
|
GuipRadio, |
|
|
|
}, |
|
|
|
data() { |
|
|
|
const today = new Date(); |
|
|
|
const fixedStartDate = this.formatDate(today); |
|
|
|
|
|
|
|
// 计算默认结束日期(例如:一周后) |
|
|
|
const defaultEndDate = new Date(today); |
|
|
|
defaultEndDate.setDate(today.getDate() + 7); |
|
|
|
|
|
|
|
return { |
|
|
|
// 日期范围值 - 固定起始日期为今天 |
|
|
|
dateRange: [fixedStartDate, ''], |
|
|
|
defaultDateRange: [new Date(), ''], |
|
|
|
pickerOptions: { |
|
|
|
disabledDate: (time) => { |
|
|
|
// 禁用今天之前的日期 |
|
|
|
const today = new Date(); |
|
|
|
today.setHours(0, 0, 0, 0); |
|
|
|
return time.getTime() < today.getTime(); |
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
// 固定起始日期(不可修改) |
|
|
|
fixedStartDate: fixedStartDate, |
|
|
|
// 是否显示日期信息 |
|
|
|
fastWords: [ |
|
|
|
|
|
|
|
{ |
|
|
|
@ -171,7 +188,8 @@ export default { |
|
|
|
id: 2, |
|
|
|
} |
|
|
|
], |
|
|
|
searchDate:[], |
|
|
|
// 标记是否正在修正日期(防止无限循环) |
|
|
|
// 选择器选项配置 |
|
|
|
curAddTab: this.$route.query.type || '1', |
|
|
|
searchWord: '', |
|
|
|
// curTabInfo:null, |
|
|
|
@ -314,16 +332,22 @@ export default { |
|
|
|
} |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
// this.firstOptions = this.allData.map(item => ({ |
|
|
|
// value: item.id, |
|
|
|
// label: item.name |
|
|
|
// })); |
|
|
|
}, |
|
|
|
created() { |
|
|
|
// 确保初始值正确显示 |
|
|
|
|
|
|
|
}, |
|
|
|
computed: { |
|
|
|
// 计算当前tab的信息 |
|
|
|
curTabInfo() { |
|
|
|
const tab = this.numsList.find(item => item.type == this.curAddTab); |
|
|
|
return tab || this.numsList[0]; // 如果找不到,返回第一个 |
|
|
|
}, |
|
|
|
displayDateRange() { |
|
|
|
if (this.dateRange[1]) { |
|
|
|
return `${this.fixedStartDate} 至 ${this.dateRange[1]}`; |
|
|
|
} |
|
|
|
return this.fixedStartDate; |
|
|
|
} |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
@ -337,11 +361,41 @@ export default { |
|
|
|
console.log('curAddTab变化:', newVal, '类型:', typeof newVal); |
|
|
|
}, |
|
|
|
immediate: true |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
methods: { |
|
|
|
checkFastWord(name){ |
|
|
|
this.searchWord = name |
|
|
|
// 禁用今天之前的日期 |
|
|
|
disabledDate(time) { |
|
|
|
const today = new Date(); |
|
|
|
today.setHours(0, 0, 0, 0); |
|
|
|
return time.getTime() < today.getTime(); |
|
|
|
}, |
|
|
|
// 格式化日期为 YYYY-MM-DD |
|
|
|
formatDate(date) { |
|
|
|
const year = date.getFullYear(); |
|
|
|
const month = String(date.getMonth() + 1).padStart(2, '0'); |
|
|
|
const day = String(date.getDate()).padStart(2, '0'); |
|
|
|
return `${year}-${month}-${day}`; |
|
|
|
}, |
|
|
|
// 处理日期变化 |
|
|
|
handleDateChange(value) { |
|
|
|
console.log('日期范围变化:', value); |
|
|
|
|
|
|
|
// 确保起始日期始终为固定值 |
|
|
|
if (value && value[0] !== this.fixedStartDate) { |
|
|
|
// 如果用户尝试修改起始日期,强制改回固定值 |
|
|
|
setTimeout(() => { |
|
|
|
this.dateRange = [this.fixedStartDate, value[1] || '']; |
|
|
|
}, 0); |
|
|
|
} |
|
|
|
|
|
|
|
// 更新显示信息 |
|
|
|
this.showDateInfo = true; |
|
|
|
}, |
|
|
|
checkFastWord(item) { |
|
|
|
this.searchWord = item.name; |
|
|
|
this.searchWordId = item.id; |
|
|
|
}, |
|
|
|
handleFirstChange(value) { |
|
|
|
// 根据一级选择的值,找到对应的数据项 |
|
|
|
@ -352,11 +406,7 @@ export default { |
|
|
|
this.showSecondSelect = true; |
|
|
|
|
|
|
|
// 动态赋值二级选项 |
|
|
|
this.secondOptions = selectedItem.children |
|
|
|
// .map(child => ({ |
|
|
|
// value: child.id, |
|
|
|
// label: child.name |
|
|
|
// })); |
|
|
|
this.secondOptions = selectedItem.children; |
|
|
|
|
|
|
|
// 设置默认值为"不限服务" |
|
|
|
const hasUnlimited = selectedItem.children.some(child => child.id === '0'); |
|
|
|
@ -373,14 +423,6 @@ export default { |
|
|
|
this.secondSelected = ''; |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
handleClickCopy(){ |
|
|
|
this.$copy(this.form.input1, { |
|
|
|
successMsg: '内容已复制到剪贴板', |
|
|
|
errorMsg: '复制失败,请按Ctrl+C手动复制', |
|
|
|
vm: this |
|
|
|
}); |
|
|
|
}, |
|
|
|
validateSelection() { |
|
|
|
this.departType = this.departType.filter(item => item !== 0); |
|
|
|
}, |
|
|
|
@ -405,11 +447,11 @@ export default { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
</script> |
|
|
|
<style scoped lang="scss"> |
|
|
|
.fastSearch { |
|
|
|
padding: 12px; |
|
|
|
|
|
|
|
.tag-item { |
|
|
|
border-radius: 32px; |
|
|
|
background: #FFFFFF; |
|
|
|
@ -427,11 +469,13 @@ export default { |
|
|
|
color: #626573; |
|
|
|
cursor: pointer; |
|
|
|
} |
|
|
|
|
|
|
|
.tag-item-active { |
|
|
|
color: #006AFF; |
|
|
|
background: #F6F7FA; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.wallet-item { |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
@ -444,6 +488,7 @@ export default { |
|
|
|
background: rgba(255, 255, 255, 0.47); |
|
|
|
box-sizing: border-box; |
|
|
|
border: 1px solid #DFE2E6; |
|
|
|
|
|
|
|
.desc { |
|
|
|
font-size: 12px; |
|
|
|
color: #626573; |
|
|
|
@ -456,6 +501,7 @@ export default { |
|
|
|
font-weight: bold; |
|
|
|
margin-bottom: 12px; |
|
|
|
} |
|
|
|
|
|
|
|
.wallet-num { |
|
|
|
font-size: 12px; |
|
|
|
color: #626573; |
|
|
|
@ -463,6 +509,7 @@ export default { |
|
|
|
display: flex; |
|
|
|
align-items: baseline; |
|
|
|
} |
|
|
|
|
|
|
|
.wallet-price { |
|
|
|
font-size: 22px; |
|
|
|
font-weight: bold; |
|
|
|
@ -474,6 +521,7 @@ export default { |
|
|
|
position: relative; |
|
|
|
background: #F2F7FF; |
|
|
|
border-color: #006AFF; |
|
|
|
|
|
|
|
.tem-active { |
|
|
|
position: absolute; |
|
|
|
right: 0; |
|
|
|
@ -481,15 +529,18 @@ export default { |
|
|
|
width: 30px; |
|
|
|
height: 30px; |
|
|
|
} |
|
|
|
|
|
|
|
.wallet-name { |
|
|
|
color: #006AFF; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.coupon_name { |
|
|
|
.el-form-item { |
|
|
|
margin-bottom: 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.baseRule_wrap { |
|
|
|
.coupon_name { |
|
|
|
// align-items: flex-start; |
|
|
|
@ -515,8 +566,8 @@ export default { |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
.wrap { |
|
|
|
width: 590px; |
|
|
|
} |
|
|
|
|
|
|
|
</style> |