325 lines
9.3 KiB
Vue
325 lines
9.3 KiB
Vue
<template>
|
||
<view class="container">
|
||
<view class="freight_template">
|
||
<view class="freight_template_name">
|
||
<view class="freight_template_name_con">
|
||
<view class="freight_template_name_con_label">运费模板名称</view>
|
||
<view class="freight_template_name_con_value">
|
||
<input type="text" v-model="billingData.name" placeholder="填写模板名称" placeholder-class="inputClass_template_name" />
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="freight_description">
|
||
<view class="freight_description_title">运费说明</view>
|
||
<view class="freight_description_textarea"><textarea v-model="billingData.info" placeholder="填写运费说明" placeholder-class="textarea_class" /></view>
|
||
</view>
|
||
</view>
|
||
<view class="billing_method">
|
||
<view class="billing_method_title">计费方式</view>
|
||
<view class="billing_method_radio">
|
||
<radio-group @change="changeType" v-model="billingData.type" class="radioContainer">
|
||
<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in billing.list" :key="item.value">
|
||
<radio :value="item.value" :checked="item.value == billingData.type" />
|
||
<view>{{ item.label }}</view>
|
||
</label>
|
||
</radio-group>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="regional_freight" @click="goDistributionArea">
|
||
<view class="regional_freight_label">配送区域及运费</view>
|
||
<view class="regional_freight_value">
|
||
<span>去编辑</span>
|
||
<span class="iconfont"></span>
|
||
</view>
|
||
</view>
|
||
|
||
<tip message="默认全国,开启时指定区域不配送时无效"></tip>
|
||
|
||
<view class="free_shipping">
|
||
<view class="free_shipping_item">
|
||
<view class="free_shipping_item_label">指定包邮</view>
|
||
<view class="free_shipping_item_value"><switch @change="switchChange" :checked="billingData.appoint == 1" color="#E93323" style="transform:scale(0.7)" /></view>
|
||
</view>
|
||
|
||
<view class="free_shipping_item" @click="goarcelArea" v-if="billingData.appoint == 1">
|
||
<view class="free_shipping_item_label">包邮区域</view>
|
||
<view class="free_shipping_item_value">
|
||
<span>去编辑</span>
|
||
<span class="iconfont"></span>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="free_shipping mt30">
|
||
<view class="billing_method width100">
|
||
<view class="billing_method_title">指定区域不配送</view>
|
||
|
||
<view class="billing_method_radio">
|
||
<radio-group @change="changeArea" v-model="billingData.undelivery" class="radioContainer">
|
||
<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in billing.specifiedArea" :key="item.value">
|
||
<view><radio :value="item.value" :checked="item.value == billingData.undelivery" /></view>
|
||
<view>{{ item.label }}</view>
|
||
</label>
|
||
</radio-group>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="free_shipping_item" v-if="billingData.undelivery == '1'" @click="selectArea">
|
||
<view class="free_shipping_item_label">自定义</view>
|
||
<view class="free_shipping_item_value">
|
||
<span>{{allReadySelect.length ? allReadySelect.map(val=> val.name).join(',') : '请选择不配送区域'}}</span>
|
||
<span class="iconfont"></span>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<tip message="开启时,仅支持以上添加的配送区域"></tip>
|
||
<view class="handle"><view class="handle_button" @click="save">保存</view></view>
|
||
<uni-popup ref="area_popup" type="bottom"><areas @handleGetSelectArea="handleGetSelectArea" :allReadySelect="allReadySelect" @close="close"></areas></uni-popup>
|
||
<distribution-area ref="distributionArea" :freightData="billingData.region" :popup="popup" @changeClose="closeDistribution" @getData="getData"></distribution-area>
|
||
<parcel-area ref="parcelArea" :parcelData="billingData.free" :popup="popup" @changeClose="closeParcel" @getData="getFreeData"></parcel-area>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import tip from '../components/tip.vue';
|
||
import areas from '../components/areas.vue';
|
||
import distributionArea from '../components/distributionArea.vue';
|
||
import parcelArea from '../components/parcelArea.vue';
|
||
import { navigateTo, getStorage, Toast } from '../../../libs/uniApi.js';
|
||
import { templateCreate, templateDetail, templateUpdate } from 'api/product.js';
|
||
export default {
|
||
components: {
|
||
tip,
|
||
areas,
|
||
distributionArea,
|
||
parcelArea
|
||
},
|
||
data() {
|
||
return {
|
||
mer_id: '',
|
||
shipping_id: '',
|
||
billingData: {
|
||
name: '', // 运费模板名称
|
||
type: 0, // 计费方式 0数量 1重量 2体积
|
||
appoint: 0, // 开启指定包邮,0关闭 1开启
|
||
undelivery: 0, // 开启指定区域不配送 0关闭 1开启
|
||
info: '', // 运费说明
|
||
sort: '', // 排序
|
||
region: [], //配送区域信息
|
||
undelives: {city_id: []}, // 不配送区域
|
||
free: []
|
||
},
|
||
popup: {
|
||
show: false,
|
||
showParael: false
|
||
},
|
||
|
||
allReadySelect: [], // 已选地址信息
|
||
billing: {
|
||
list: [
|
||
{
|
||
value: '0',
|
||
label: '按件数'
|
||
},
|
||
{
|
||
value: '1',
|
||
label: '按重量'
|
||
},
|
||
{
|
||
value: '2',
|
||
label: '按体积'
|
||
}
|
||
],
|
||
specifiedArea: [
|
||
{
|
||
value: '1',
|
||
label: '自定义'
|
||
},
|
||
{
|
||
value: '2',
|
||
label: '开启'
|
||
},
|
||
{
|
||
value: '0',
|
||
label: '关闭'
|
||
}
|
||
]
|
||
}
|
||
|
||
};
|
||
},
|
||
watch: {
|
||
billingData: {
|
||
handler(val) {
|
||
// console.log(val);
|
||
},
|
||
deep: true
|
||
}
|
||
},
|
||
onLoad(opt) {
|
||
this.mer_id = opt.mer_id;
|
||
this.shipping_id = opt.shipping_id;
|
||
if(this.shipping_id) this.getShippingData();
|
||
},
|
||
methods: {
|
||
//获取运费模板详情
|
||
getShippingData(){
|
||
let that = this
|
||
uni.showLoading({
|
||
title: '加载中'
|
||
});
|
||
templateDetail(that.mer_id,that.shipping_id)
|
||
.then(res => {
|
||
uni.hideLoading();
|
||
let data = res.data
|
||
that.billingData = data;
|
||
that.getCityList(that.billingData.region);
|
||
that.getCityList(that.billingData.free);
|
||
if(that.billingData.undelives && that.billingData.undelives.city_name.length > 0){
|
||
that.allReadySelect = that.billingData.undelives.city_name
|
||
that.billingData.undelives['city_id'] = that.billingData.undelives.city_name.map(val => val.id);
|
||
}else{
|
||
that.billingData.undelives['city_id'] = [0]
|
||
}
|
||
})
|
||
.catch(res => {
|
||
that.$util.Tips({
|
||
title: res
|
||
});
|
||
});
|
||
},
|
||
//获取city_id
|
||
getCityList(arr){
|
||
if(arr.length > 0){
|
||
arr.forEach((value,i)=>{
|
||
if(!Array.isArray(value['city_id'])){
|
||
value['city_id'] = []
|
||
value['city_name'].forEach((v,j)=>{
|
||
if(v.length == 0){
|
||
value['city_id'] = [0]
|
||
}else{
|
||
value['city_id'].push(v.id)
|
||
}
|
||
})
|
||
}
|
||
})
|
||
return arr;
|
||
}
|
||
},
|
||
changeType(e) {
|
||
this.billingData.type = e.detail.value;
|
||
},
|
||
changeArea(e) {
|
||
this.billingData.undelivery = e.detail.value;
|
||
},
|
||
// 打开选择地址的弹框
|
||
selectArea() {
|
||
this.$refs.area_popup.open();
|
||
},
|
||
// 关闭选择地址弹框
|
||
close() {
|
||
this.$refs.area_popup.close();
|
||
},
|
||
// 获取选择的地址数据
|
||
handleGetSelectArea(item) {
|
||
if(!this.billingData.undelives)this.billingData.undelives = {}
|
||
this.billingData.undelives['city_id'] = item.map(val => val.id);
|
||
this.allReadySelect = item;
|
||
// console.log(this.billingData.undelives)
|
||
this.$refs.area_popup.close();
|
||
},
|
||
// 指定包邮开关
|
||
switchChange(e) {
|
||
if(e.target.value) {
|
||
this.billingData.appoint = 1
|
||
} else {
|
||
this.billingData.appoint = 0
|
||
}
|
||
},
|
||
getData(data){
|
||
this.$set(this.billingData, 'region', data);
|
||
this.$set(this.popup, 'show', false);
|
||
},
|
||
getFreeData(data){
|
||
this.$set(this.billingData, 'free', data);
|
||
this.$set(this.popup, 'showParael', false);
|
||
},
|
||
// 保存
|
||
save() {
|
||
let that = this;
|
||
let postData = {
|
||
...this.billingData
|
||
};
|
||
if (!postData.name) return that.$util.Tips({
|
||
title: '请输入模板名称'
|
||
});
|
||
if (!postData.info) return that.$util.Tips({
|
||
title: '请输入运费说明'
|
||
});
|
||
if (postData.region.length == 0) return that.$util.Tips({
|
||
title: '请编辑配送区域及运费'
|
||
});
|
||
if (postData.appoint == 1 && postData.free.length== 0) return that.$util.Tips({
|
||
title: '请编辑包邮区域'
|
||
});
|
||
if (postData.undelivery == 1 && !postData.undelives) return that.$util.Tips({
|
||
title: '请编辑不包邮区域'
|
||
});
|
||
that.shipping_id ?
|
||
templateUpdate(that.mer_id, that.shipping_id, postData).then(res => {
|
||
that.$util.Tips({
|
||
title: res.message,
|
||
icon: 'success'
|
||
});
|
||
setTimeout(()=>{
|
||
uni.redirectTo({
|
||
url: `/pages/product/addGoods/freightTemplate?mer_id=${that.mer_id}`
|
||
})
|
||
},1000)
|
||
|
||
}).catch(rej => {
|
||
Toast(rej);
|
||
}) :
|
||
templateCreate(this.mer_id, postData).then(res => {
|
||
that.$util.Tips({
|
||
title: res.message,
|
||
icon: 'success'
|
||
});
|
||
uni.redirectTo({
|
||
url: `/pages/product/addGoods/freightTemplate?mer_id=${that.mer_id}`
|
||
})
|
||
|
||
}).catch(rej => {
|
||
Toast(rej);
|
||
})
|
||
|
||
},
|
||
// 打开配送区域及运费
|
||
goDistributionArea() {
|
||
// console.log(this.billingData.region)
|
||
this.$set(this.popup, 'show', true);
|
||
this.$refs.distributionArea.initListData();
|
||
},
|
||
//关闭弹窗
|
||
closeDistribution(){
|
||
this.$set(this.popup, 'show', false);
|
||
},
|
||
// 打开指定包邮
|
||
goarcelArea() {
|
||
this.$set(this.popup, 'showParael', true);
|
||
this.$refs.parcelArea.initParcelData();
|
||
},
|
||
//关闭弹窗
|
||
closeParcel(){
|
||
this.$set(this.popup, 'showParael', false);
|
||
},
|
||
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
@import './scss/freightTemplate.scss';
|
||
</style>
|