<template>
|
<div class="inner-bg-style">
|
<el-row>
|
<el-col :span="24" class="order-audit-config">
|
<div>订单发货审核</div>
|
<div class="order-audit-config-form">
|
<el-form size="mini" ref="form" :model="form" :rules="formRules" label-width="180px">
|
<el-form-item label="需审核三方平台订单:" prop="orderSource">
|
<el-select v-model="form.orderSource" multiple clearable @change="changeOrderSource"
|
placeholder="请选择需审核三方平台订单">
|
<el-option v-for="item in orderSourceArr" :key="item.id" :value="item.id"
|
:label="item.name"></el-option>
|
</el-select>
|
<span class="itemTip"> 温馨提示:已配置的三方平台订单不可多次选择配置</span>
|
</el-form-item>
|
<el-form-item label="订单审核是否开启:">
|
<el-radio-group @change="changeOrderReview(1)" v-model="form.orderReview">
|
<el-radio label="1">是(订单需要人工审核)</el-radio>
|
<el-radio label="0">否(订单不需要人工审核,可直接发货)</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<div v-if="form.orderReview === '1'">
|
<el-form-item label="审核类型:">
|
<el-radio-group @change="changeOrderReview(2)"
|
v-model="form.otherOrderControReview">
|
<el-radio label="0">审核所有订单</el-radio>
|
<el-radio label="1">审核符合条件订单</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<div v-show="form.otherOrderControReview === '1'">
|
<el-form-item label="促销单需审核:">
|
<el-checkbox v-model="form.promotionReview"></el-checkbox>
|
</el-form-item>
|
<el-form-item label="发票单需审核:">
|
<el-checkbox v-model="form.invoiceReview"> </el-checkbox>
|
</el-form-item>
|
<el-form-item label="有订单备注需审核:">
|
<el-checkbox v-model="form.memoReview"> </el-checkbox>
|
</el-form-item>
|
<el-form-item label="预售订单需审核">
|
<el-checkbox v-model="form.preOrderReview"> </el-checkbox>
|
</el-form-item>
|
<el-form-item label="需审核订单类型:">
|
<el-select v-model="form.orderTypeReview" multiple clearable
|
placeholder="请选择需审核订单类型">
|
<el-option v-for="item in orderTypeArr" :key="item.id" :value="item.id"
|
:label="item.name"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="指定商品需审核:" prop="productReview">
|
<el-button type="success" size="mini" @click="addProduct">添加商品</el-button>
|
<el-button size="mini" @click="clearTable">清空</el-button>
|
<el-table :data="form.productReview" border>
|
<el-table-column label="商品主编码" width="200px" prop="spuNum"></el-table-column>
|
<el-table-column label="商品图片" prop="imageUrl">
|
<template slot-scope="scope">
|
<product-img :imgUrl="scope.row.imageUrl"></product-img>
|
</template>
|
</el-table-column>
|
<el-table-column label="商品名称" prop="prodName"
|
show-overflow-tooltip></el-table-column>
|
<el-table-column label="商品购买审核数量" width="200px" prop="buyQuantity">
|
<template slot="header">
|
商品购买审核数量
|
<el-tooltip class="item" effect="dark" content="该审核数量将按照用户实际购买数量最小单位进行审核限制"
|
placement="top">
|
<i class="el-icon-info"></i>
|
</el-tooltip>
|
</template>
|
<template slot-scope="scope">
|
<el-form-item :prop="'productReview.'+scope.$index+'.buyQuantity'"
|
:rules="formRules.buyQuantity">
|
<el-input-number :min='0' :max='999'
|
v-model="scope.row.buyQuantity"></el-input-number> 瓶
|
</el-form-item>
|
</template>
|
</el-table-column>
|
<el-table-column width="80px" label="操作">
|
<template slot-scope="scope">
|
<el-form-item>
|
<el-button type="danger" size="mini"
|
@click="deleteItem(scope.row,scope.$index)">删除</el-button>
|
</el-form-item>
|
</template>
|
</el-table-column>
|
</el-table>
|
</el-form-item>
|
<!-- 选择多规格商品 -->
|
<el-form-item prop="productSkuReview">
|
<add-multi-spec-product ref="tableMultiSpecGoods" :isShowSpecUnit="false"
|
:isShowPurchaseQuantity="true"
|
:productData="form.productSkuReview"
|
:formRules="formRules"
|
@hand-selected="handSelectedMultiSpecProduct"
|
@hand-clear="handClearMultiSpecProduct">
|
</add-multi-spec-product>
|
</el-form-item>
|
<el-form-item label="订单金额审核:" prop="payPriceReview">
|
实付订单满
|
<el-input-number size="mini" v-model="form.payPriceReview"
|
:min='0'></el-input-number>
|
元,需审核
|
</el-form-item>
|
</div>
|
</div>
|
<el-form-item v-else label="推送类型:">
|
<el-radio-group v-model="form.pushType" @change="changePushType">
|
<el-radio label="1">实时推送(平台接收订单即推送安吉)</el-radio>
|
<div class="br"></div>
|
<el-radio label="0">定时推送(设定推送时间,达到该时间后即推送安吉)</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item v-if="form.pushType==='0'" prop="delayPushTime" label="设定推送时间:">
|
<el-input-number size="mini" v-model="form.delayPushTime" :min='0'
|
:max="1440"></el-input-number> 分钟
|
<span class="itemTip"> 温馨提示:最大不超过24小时</span>
|
</el-form-item>
|
<div v-if="form.orderSource.includes('WLY')">
|
<div class="config-tip">退款订单配置</div>
|
<el-form-item label="未发货订单自动退款:">
|
<el-checkbox v-model="form.deliveryRefundReview">
|
<span class="itemTip"> 温馨提示:未发货自动退款目前仅支持垂直赋能平台订单</span>
|
</el-checkbox>
|
</el-form-item>
|
</div>
|
</el-form>
|
</div>
|
<el-row class="buttonPosition">
|
<el-button type="primary" size="mini" @click="submit">保存</el-button>
|
<el-button size="mini" @click="cancel">取消</el-button>
|
</el-row>
|
</el-col>
|
</el-row>
|
<product-selected :show.sync="selectedDialog.show" :isSelectable="true"
|
:title="selectedDialog.title"
|
@hand-selected-row-data="handSelectedRowData"></product-selected>
|
</div>
|
</template>
|
|
<script>
|
import orderSource from '@/utils/constant/orderSourceArr'
|
import productSelected from '@/views/product/components/productSelected.vue'
|
import addMultiSpecProduct from '@/views/submenuTactics/components/addMultiSpecProduct.vue'
|
import orderAuditConfigApi from '@/api/orderAuditConfig'
|
import orderTypeArr from '@/utils/constant/orderTypeArr'
|
import productImg from '@/views/product/components/productImg.vue'
|
import { inputNumberValid, inputNonnegativeNumber } from '@/utils/validator'
|
export default {
|
components: { productSelected, addMultiSpecProduct, productImg },
|
data() {
|
const orderPriceAuditValid = (rule, value, callback) => {
|
const reg = /^(?!0+$)(?!0*\.0*$)\d{1,9}(\.\d{1,2})?$/ // 最多输入两位小数
|
if (value === 0) {
|
callback(new Error('请输入大于0的订单金额'))
|
} else if (value > 999999999) {
|
callback(new Error('最大金额不能超过 999999999'))
|
} else if (value && !reg.test(value)) {
|
callback(new Error('最多输入两位小数'))
|
} else {
|
callback()
|
}
|
}
|
return {
|
orderSourceArr: [],
|
orderTypeArr, // 订单类型
|
form: {
|
orderReview: '1',
|
orderSource: [],
|
promotionReview: false,
|
invoiceReview: false,
|
memoReview: false,
|
productReview: [],
|
productSkuReview: [],
|
deliveryRefundReview: false,
|
preOrderReview: false,
|
orderTypeReview: [],
|
payPriceReview: undefined,
|
otherOrderControReview: '0',
|
delayPushTime: null,
|
pushType: '1'
|
},
|
selectedDialog: {
|
show: false,
|
title: '选择商品'
|
},
|
formRules: {
|
buyQuantity: [
|
{ required: true, message: '审核数量不能为空', trigger: 'change' },
|
{ validator: inputNonnegativeNumber }
|
],
|
payPriceReview: [
|
{ validator: orderPriceAuditValid, trigger: 'change' }
|
],
|
delayPushTime: [
|
{ required: true, message: '设定推送时间不能为空', trigger: 'change' },
|
{ validator: inputNumberValid }
|
],
|
orderSource: [{ type: 'array', required: true, message: '需审核三方平台订单不能为空' }],
|
},
|
formKey: ['promotionReview', 'invoiceReview', 'memoReview', 'preOrderReview', 'orderTypeReview', 'productReview', 'productSkuReview', 'payPriceReview']
|
}
|
},
|
created() {
|
this.getAvailableOrderSource()
|
if (this.$route.query.id) {
|
this.configInfo() // 查询配置详情
|
}
|
},
|
methods: {
|
/**
|
* 当订单来源不包含五粮液时则自动退款为否
|
*/
|
changeOrderSource(val) {
|
this.form.deliveryRefundReview = !!val.includes('WLY')
|
},
|
/**
|
* 获取可用的订单来源
|
*/
|
async getAvailableOrderSource() {
|
const id = this.$route.query.id || null
|
this.orderSourceArr = []
|
const res = await orderAuditConfigApi.getAvailableOrderSource(id)
|
if (res.code === '0') {
|
orderSource.forEach(item => {
|
if (res.data[item.id]) {
|
this.orderSourceArr.push(item)
|
}
|
})
|
}
|
},
|
changePushType() {
|
this.form.delayPushTime = null
|
this.$refs.form.clearValidate()
|
},
|
// 当订单免审状态改变时清空数据
|
changeOrderReview(tag) {
|
for (const key in this.form) {
|
if (key === 'promotionReview' || key === 'invoiceReview' || key === 'memoReview' || key === 'preOrderReview') {
|
this.form[key] = false
|
}
|
}
|
if (tag === 1) {
|
this.form.otherOrderControReview = '0'
|
}
|
this.form.productReview = []
|
this.form.productSkuReview = []
|
this.form.orderTypeReview = []
|
this.form.pushType = '1'
|
this.form.delayPushTime = null
|
this.form.payPriceReview = undefined
|
this.$refs.form.clearValidate()
|
},
|
// 处理表单数据
|
handFormData(data) {
|
const param = {}
|
for (const key in data) {
|
if (key === 'promotionReview' || key === 'invoiceReview' || key === 'memoReview' || key === 'preOrderReview') {
|
param[key] = data[key] ? '1' : '0'
|
} else {
|
switch (key) {
|
case 'deliveryRefundReview':
|
param[key] = data[key] ? '0' : '1'
|
break
|
case 'productReview':
|
case 'productSkuReview':
|
param[key] = data[key] ? JSON.stringify(data[key]) : null
|
break
|
case 'orderTypeReview':
|
param[key] = data[key].length ? data[key].join() : null
|
break
|
case 'payPriceReview':
|
param[key] = data[key] ? data[key] : null
|
break
|
default:
|
param[key] = data[key]
|
break
|
}
|
}
|
}
|
|
return param
|
},
|
// 当需要审核符合条件订单时,下面的值至少要填写一项
|
validatorFormKey() {
|
let flag = null
|
for (const key of this.formKey) {
|
if (!this.form[key] || (Array.isArray(this.form[key]) && !this.form[key].length)) {
|
flag = false
|
continue
|
} else {
|
flag = true
|
return flag
|
}
|
}
|
return flag
|
},
|
// 保存
|
submit() {
|
if (this.form.otherOrderControReview === '1' && !this.validatorFormKey()) {
|
this.$message({
|
message: '最少选择一项配置项',
|
type: 'info'
|
})
|
return
|
}
|
this.$refs.form.validate().then((res) => {
|
this.$confirm('此配置保存后将立即生效,是否保存所改配置?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(async () => {
|
try {
|
const param = {
|
configParams: this.handFormData(this.form),
|
id: this.$route.query.id,
|
orderSource: this.form.orderSource.join()
|
}
|
delete param.configParams.orderSource
|
const res = await orderAuditConfigApi.saveInfo(param)
|
if (res.code === '0') {
|
this.$message({
|
message: '配置成功',
|
type: 'success'
|
})
|
this.$router.push({ name: 'orderAuditConfig' })
|
}
|
} catch (error) {
|
}
|
})
|
})
|
},
|
// 取消修改返回到未修改之前
|
async cancel() {
|
this.$router.push({ name: 'orderAuditConfig' })
|
},
|
// 查询配置详情
|
async configInfo() {
|
try {
|
const res = await orderAuditConfigApi.detailsInfo(this.$route.query.id)
|
if (res.code === '0' && res.data) {
|
const configParams = res.data.configParams
|
for (const key in configParams) {
|
if (key === 'promotionReview' || key === 'invoiceReview' || key === 'memoReview' || key === 'preOrderReview') {
|
this.form[key] = configParams[key] === '1'
|
} else {
|
this.form.orderReview = configParams.orderReview
|
this.form.orderSource = res.data.orderSource ? res.data.orderSource.split(',') : []
|
this.form.productReview = configParams.productReview ? JSON.parse(configParams.productReview) : []
|
this.form.productSkuReview = configParams.productSkuReview ? JSON.parse(configParams.productSkuReview) : []
|
this.form.deliveryRefundReview = configParams.deliveryRefundReview !== '1'
|
this.form.orderTypeReview = configParams.orderTypeReview ? configParams.orderTypeReview.split(',') : []
|
this.form.payPriceReview = configParams.payPriceReview ? configParams.payPriceReview : undefined
|
this.form.otherOrderControReview = configParams.otherOrderControReview
|
this.form.delayPushTime = configParams.delayPushTime
|
this.form.pushType = this.form.delayPushTime ? '0' : '1'
|
}
|
}
|
}
|
} catch (error) {
|
}
|
},
|
/**
|
* 清空表格数据
|
*/
|
clearTable() {
|
this.form.productReview = []
|
},
|
/**
|
* 清空多规格商品数据
|
*/
|
handClearMultiSpecProduct() {
|
this.form.productSkuReview = [];
|
},
|
/**
|
* 当选择多规格商品时
|
*/
|
handSelectedMultiSpecProduct() {
|
this.$refs.form.clearValidate('productSkuReview')
|
},
|
/**
|
* 删除表格数据
|
*/
|
deleteItem(row, index) {
|
this.form.productReview.splice(index, 1)
|
},
|
/**
|
* 打开添加商品弹窗
|
*/
|
addProduct() {
|
this.selectedDialog.show = true
|
},
|
/**
|
* 获取商品弹出框返回的数据
|
*/
|
handSelectedRowData(rows) {
|
rows.forEach(rowItem => {
|
if (!this.form.productReview.find(item => {
|
return rowItem.spuId === item.spuId
|
})) {
|
this.form.productReview.push({
|
spuId: rowItem.spuId,
|
spuNum: rowItem.spuNum,
|
prodName: rowItem.spuName,
|
imageUrl: rowItem.imageUrl,
|
buyQuantity: 0,
|
spuUnit: rowItem.spuUnit
|
})
|
}
|
})
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
.order-audit-config {
|
padding: 20px;
|
.order-audit-config-form {
|
padding: 15px;
|
}
|
.el-table {
|
margin-top: 20px;
|
}
|
.config-tip {
|
margin: 15px;
|
}
|
.el-icon-info {
|
cursor: pointer;
|
}
|
.br {
|
margin: 20px 0;
|
}
|
}
|
</style>
|