<template>
|
<div class="params-container" :style="' height: '+contentHeight+'px;'">
|
<div class="section">
|
<h3 class="section-title">司机规则</h3>
|
<div class="form-item">
|
<span class="label">司机每日可取消订单次数为</span>
|
<el-input-number v-model="form.driverDailyCancelLimit" :min="0" controls-position="right"></el-input-number>
|
<span class="label">次,超过次数后,今日不可抢单</span>
|
</div>
|
<div class="form-item">
|
<span class="label">司机最大同时进行中订单数量为</span>
|
<el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
|
<span class="label">个,超过该数量不允许抢单<span class="red">(即订单状态=待取件/配送中)</span></span>
|
</div>
|
<div class="form-item">
|
<span class="label">客户下单后每隔</span>
|
<el-input-number v-model="form.noGrabNotifyTime" :min="0" controls-position="right"></el-input-number>
|
<span class="label">分钟未有司机抢单,系统推送平台管理员</span>
|
<el-select v-model="userIds" multiple clearable placeholder="请选择">
|
<el-option
|
v-for="item in userList"
|
:key="item.id"
|
:label="item.realname"
|
:value="item.id+''" />
|
</el-select>
|
<span class="label">提醒加急派单处理。</span>
|
</div>
|
<div class="form-item">
|
<span class="label">门店默认配送范围</span>
|
<el-input-number v-model="form.defaultDeliveryRange" :min="0" controls-position="right"></el-input-number>
|
<span class="label">(公里)</span>
|
</div>
|
</div>
|
|
<div class="section">
|
<h3 class="section-title">订单规则</h3>
|
<div class="form-item">
|
<span class="label">超时</span>
|
<el-input-number v-model="form.autoCancelTime" :min="0" controls-position="right"></el-input-number>
|
<span class="label">分钟未支付,订单自动取消</span>
|
</div>
|
<div class="form-item">
|
<span class="label">急速达订单计价系数</span>
|
<el-input-number v-model="form.urgentCoefficient" :min="0" :precision="2" controls-position="right"></el-input-number>
|
</div>
|
<div class="form-item">
|
<span class="label">物品保费比例</span>
|
<el-input-number v-model="form.insuranceRate" :min="0" :precision="2" controls-position="right"></el-input-number>
|
<span class="desc">%</span>
|
</div>
|
<div class="form-item">
|
<span class="label">同城寄送模式下,若物品已送达,而客户当天未取件,则后续系统按</span>
|
<el-input-number v-model="form.unpickedDiscount" :min="0" :precision="2" controls-position="right"></el-input-number>
|
<span class="desc">折扣系数计算</span>
|
</div>
|
<div class="form-item">
|
<span class="label">订单送达后默认</span>
|
<el-input-number v-model="form.autoConfirmReceipt" :min="0" controls-position="right"></el-input-number>
|
<span class="label">天后自动确认收货<span class="red">(仅限收件地址不是服务点的情况)</span></span>
|
</div>
|
<div class="form-item">
|
<span class="label">订单完成后</span>
|
<el-input-number v-model="form.settlementDate" :min="0" controls-position="right"></el-input-number>
|
<span class="label">天后系统结算订单,并给与参与角色按比例分成</span>
|
</div>
|
</div>
|
|
<div class="section">
|
<h3 class="section-title">优惠券发放规则</h3>
|
<div class="form-item">
|
<span class="label">下单数量每满</span>
|
<el-input-number v-model="form.orderCouponOrderCount" :min="0" controls-position="right"></el-input-number>
|
<span class="label">单,至多</span>
|
<el-input-number v-model="form.orderCouponGiftCount" :min="0" controls-position="right"></el-input-number>
|
<span class="label">次,平台赠送优惠券 </span>
|
<el-select v-model="form.orderCouponId" multiple style="width: 130px;" placeholder="优惠券">
|
<el-option v-for="item in couponList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
</el-select>
|
<span class="label"><span class="red">(以行李已寄存门店为准,即便退单亦不收回,默认每次发放1张)</span></span>
|
</div>
|
<div class="form-item">
|
<span class="label">会员注册每满</span>
|
<el-input-number v-model="form.registerCouponYears" :min="0" controls-position="right"></el-input-number>
|
<span class="label">年,至多</span>
|
<el-input-number v-model="form.registerCouponGiftCount" :min="0" controls-position="right"></el-input-number>
|
<span class="label">次,平台赠送优惠券 </span>
|
<el-select v-model="form.registerCouponId" multiple style="width: 130px;" placeholder="优惠券">
|
<el-option v-for="item in couponList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
</el-select>
|
<span class="label"><span class="red">(按注册时间,无论会员是否下单;默认每次发放1张)</span></span>
|
</div>
|
<div class="form-item">
|
<span class="label">新注册会员送平台赠送优惠券</span>
|
<el-select v-model="form.registerGiftCouponIds" multiple style="width: 130px;" placeholder="优惠券">
|
<el-option v-for="item in couponList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
</el-select>
|
</div>
|
</div>
|
|
<div class="section">
|
<h3 class="section-title">开票规则</h3>
|
<div class="form-item">
|
<span class="label">超时</span>
|
<el-input-number v-model="form.invoiceMonthLimit" :min="0" controls-position="right"></el-input-number>
|
<span class="label">个月的订单不允许开发票</span>
|
</div>
|
</div>
|
|
<div class="section">
|
<h3 class="section-title">司机奖励规则</h3>
|
<div class="table-container">
|
<el-table :data="driverRewardList" border style="width: 100%">
|
<el-table-column prop="registerRewardAmount" label="注册奖励(元/单)">
|
<template slot-scope="scope">
|
<el-input-number v-model="scope.row.registerRewardAmount" :min="0" controls-position="right"></el-input-number>
|
</template>
|
</el-table-column>
|
<el-table-column prop="registerRewardOrderCount" label="注册奖励单数">
|
<template slot-scope="scope">
|
<el-input-number v-model="scope.row.registerRewardOrderCount" :min="0" controls-position="right"></el-input-number>
|
</template>
|
</el-table-column>
|
<el-table-column prop="platformRewardAmount" label="平台奖励(元/单)">
|
<template slot-scope="scope">
|
<el-input-number v-model="scope.row.platformRewardAmount" :min="0" controls-position="right"></el-input-number>
|
</template>
|
</el-table-column>
|
<el-table-column prop="platformRewardOrderCount" label="平台奖励单数">
|
<template slot-scope="scope">
|
<el-input-number v-model="scope.row.platformRewardOrderCount" :min="0" controls-position="right"></el-input-number>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
</div>
|
|
<div class="footer">
|
<el-button type="primary" @click="handleSave" :loading="isWorking.save">保存</el-button>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import TableLayout from '@/layouts/TableLayout'
|
import { getParams, saveParams } from '@/api/business/sysParams'
|
import { allList } from '@/api/system/user'
|
import { validList } from '@/api/business/coupon'
|
|
export default {
|
name: 'SysParams',
|
components: { TableLayout },
|
data () {
|
return {
|
contentHeight: 600,
|
driverRewardList: [],
|
form: {
|
autoCancelTime: '',
|
autoConfirmReceipt: '',
|
registerRewardAmount: 0,
|
registerRewardOrderCount: 0,
|
platformRewardAmount: 0,
|
platformRewardOrderCount: 0,
|
driverDailyCancelLimit: '',
|
insuranceRate: '',
|
orderAcceptLimit: '',
|
noGrabNotifyUsers: '',
|
noGrabNotifyTime: '',
|
defaultDeliveryRange: '',
|
settlementDate: '',
|
unpickedDiscount: '',
|
urgentCoefficient: '',
|
orderCouponOrderCount: '',
|
orderCouponGiftCount: '',
|
registerCouponYears: '',
|
registerCouponGiftCount: '',
|
orderCouponId: [],
|
registerCouponId: [],
|
registerGiftCouponIds: [],
|
invoiceMonthLimit: ''
|
},
|
couponList: [],
|
userIds: [],
|
userList: [],
|
isWorking: {
|
save: false
|
}
|
}
|
},
|
created () {
|
this.loadData()
|
this.loadUserlist()
|
this.loadCouponList()
|
this.contentHeight = window.innerHeight -110;
|
},
|
methods: {
|
loadCouponList() {
|
validList().then(res => {
|
console.log(res)
|
this.couponList = res || []
|
}).catch(e => {
|
this.$tip.apiFailed(e)
|
})
|
},
|
loadUserlist () {
|
allList().then(res => {
|
this.userList = res || []
|
}).catch(e => {
|
this.$tip.apiFailed(e)
|
})
|
},
|
loadData () {
|
getParams().then(res => {
|
this.form = {
|
autoCancelTime: res.autoCancelTime || '',
|
autoConfirmReceipt: res.autoConfirmReceipt || '',
|
driverDailyCancelLimit: res.driverDailyCancelLimit || '',
|
insuranceRate: res.insuranceRate || '',
|
defaultDeliveryRange: res.defaultDeliveryRange || '',
|
noGrabNotifyTime: res.noGrabNotifyTime || '',
|
orderAcceptLimit: res.orderAcceptLimit || '',
|
noGrabNotifyUsers: res.noGrabNotifyUsers || '',
|
settlementDate: res.settlementDate || '',
|
unpickedDiscount: res.unpickedDiscount || '',
|
urgentCoefficient: res.urgentCoefficient || '',
|
orderCouponOrderCount: res.orderCouponOrderCount || '',
|
orderCouponGiftCount: res.orderCouponGiftCount || '',
|
registerCouponYears: res.registerCouponYears || '',
|
registerCouponGiftCount: res.registerCouponGiftCount || '',
|
orderCouponId: res.orderCouponId ? res.orderCouponId.split(',').map(item => Number(item)) : [],
|
registerCouponId: res.registerCouponId ? res.registerCouponId.split(',').map(item => Number(item)) : [],
|
registerGiftCouponIds: res.registerGiftCouponIds ? res.registerGiftCouponIds.split(',').map(item => Number(item)) : [],
|
registerRewardAmount: res.registerRewardAmount || 0,
|
registerRewardOrderCount: res.registerRewardOrderCount || 0,
|
platformRewardAmount: res.platformRewardAmount || 0,
|
platformRewardOrderCount: res.platformRewardOrderCount || 0,
|
invoiceMonthLimit: res.invoiceMonthLimit || ''
|
}
|
// 初始化司机奖励规则表格数据
|
this.driverRewardList = [{
|
registerRewardAmount: this.form.registerRewardAmount || 0,
|
registerRewardOrderCount: this.form.registerRewardOrderCount || 0,
|
platformRewardAmount: this.form.platformRewardAmount || 0,
|
platformRewardOrderCount: this.form.platformRewardOrderCount || 0
|
}]
|
if (this.form.noGrabNotifyUsers) {
|
this.userIds = this.form.noGrabNotifyUsers.split(',')
|
}
|
}).catch(e => {
|
this.$tip.apiFailed(e)
|
})
|
},
|
handleSave () {
|
this.isWorking.save = true
|
// 深拷贝表单数据
|
const submitForm = JSON.parse(JSON.stringify(this.form))
|
submitForm.noGrabNotifyUsers = ''
|
if (this.userIds) {
|
submitForm.noGrabNotifyUsers = this.userIds.join(',')
|
}
|
// 同步司机奖励表格数据到表单
|
if (this.driverRewardList.length > 0) {
|
const rewardData = this.driverRewardList[0]
|
submitForm.registerRewardAmount = rewardData.registerRewardAmount
|
submitForm.registerRewardOrderCount = rewardData.registerRewardOrderCount
|
submitForm.platformRewardAmount = rewardData.platformRewardAmount
|
submitForm.platformRewardOrderCount = rewardData.platformRewardOrderCount
|
}
|
if (submitForm.orderCouponId && submitForm.orderCouponId.length > 0) {
|
submitForm.orderCouponId = submitForm.orderCouponId.join(',')
|
}
|
if (submitForm.registerCouponId && submitForm.registerCouponId.length > 0) {
|
submitForm.registerCouponId = submitForm.registerCouponId.join(',')
|
}
|
submitForm.registerGiftCouponIds = submitForm.registerGiftCouponIds.join(',')
|
saveParams(submitForm).then(res => {
|
this.$tip.apiSuccess(res || '保存成功')
|
}).catch(e => {
|
this.$tip.apiFailed(e)
|
}).finally(() => {
|
this.isWorking.save = false
|
})
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
.params-container {
|
padding: 20px;
|
overflow: auto;
|
display: block;
|
background-color: #fff;
|
}
|
.section {
|
margin-bottom: 40px;
|
}
|
.section-title {
|
font-size: 16px;
|
font-weight: bold;
|
color: #303133;
|
margin-bottom: 20px;
|
padding-left: 10px;
|
border-left: 4px solid #2E68EC;
|
}
|
.form-item {
|
display: flex;
|
align-items: center;
|
margin-bottom: 20px;
|
flex-wrap: wrap;
|
}
|
.form-item .label {
|
color: #606266;
|
font-size: 14px;
|
white-space: nowrap;
|
}
|
.form-item .desc {
|
color: #909399;
|
font-size: 14px;
|
margin-left: 10px;
|
}
|
.form-item .red {
|
color: #f56c6c;
|
}
|
.form-item /deep/ .el-input-number {
|
margin: 0 10px;
|
}
|
.form-item /deep/ .el-input-number .el-input__inner {
|
text-align: center;
|
}
|
.footer {
|
padding-top: 20px;
|
border-top: 1px solid #eee;
|
}
|
</style>
|