You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
540 lines
15 KiB
540 lines
15 KiB
<template>
|
|
<view class="page1">
|
|
<view class="list-box">
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
门头图
|
|
</view>
|
|
<view class="list-right" @tap="pictureAdd('mentou')">
|
|
<view class="upload-img" v-if="shop.shopIcon ==''"
|
|
style="background: #eee;text-align: center;line-height: 100rpx;">
|
|
<uni-icons type="camera" size="28" color="#777"></uni-icons>
|
|
</view>
|
|
<image :src="shop.shopIcon" v-if="shop.shopIcon !=''" mode="" class="upload-img"></image>
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
店铺名称
|
|
</view>
|
|
<view class="list-right">
|
|
{{shop.shopName}}
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
副标题
|
|
</view>
|
|
<view class="list-right">
|
|
<input type="text" placeholder="请输入副标题" v-model="shop.subtitle"
|
|
style="height: 100rpx;line-height: 100rpx;" />
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
店铺地址
|
|
</view>
|
|
<view class="list-right">
|
|
{{shop.shopAddress}}
|
|
</view>
|
|
</view>
|
|
<!-- <view class="list-1">
|
|
<view class="list-name">
|
|
店铺环境
|
|
</view>
|
|
<view class="list-right">
|
|
<image :src="huanjing" mode=""></image>
|
|
</view>
|
|
</view> -->
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
身份证
|
|
</view>
|
|
<view class="list-right">
|
|
<image :src="shopImages[0]" mode="" class="upload-img"></image>
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
营业执照
|
|
</view>
|
|
<view class="list-right">
|
|
<image :src="shopImages[2]" mode="" class="upload-img"></image>
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
补充证照
|
|
</view>
|
|
<view class="list-right">
|
|
<image :src="huanjing" mode="" class="upload-img"></image>
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
支付宝账号
|
|
</view>
|
|
<view class="list-right">
|
|
<input type="text" placeholder="请输入支付宝账号" v-model="shop.aliAccount"
|
|
style="height: 100rpx;line-height: 100rpx;" />
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">
|
|
支付宝实名
|
|
</view>
|
|
<view class="list-right">
|
|
<input type="text" placeholder="请输入支付宝账号" v-model="shop.aliName"
|
|
style="height: 100rpx;line-height: 100rpx;" />
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="list-box">
|
|
<view class="section-title">商家自配送</view>
|
|
<view class="list-1">
|
|
<view class="list-name">支持自配送</view>
|
|
<view class="list-right">
|
|
<label class="radio" style="padding-right: 20rpx;" @tap="setSelfDelivery(1)">
|
|
<radio :checked="shop.supportShopDelivery == 1" /><text>是</text>
|
|
</label>
|
|
<label class="radio" @tap="setSelfDelivery(0)">
|
|
<radio :checked="shop.supportShopDelivery == 0" /><text>否</text>
|
|
</label>
|
|
</view>
|
|
</view>
|
|
<block v-if="shop.supportShopDelivery == 1">
|
|
<view class="list-1">
|
|
<view class="list-name">配送费</view>
|
|
<view class="list-right">
|
|
<input type="digit" v-model="shop.orderBkge" placeholder="默认0,最多1位小数" @blur="formatOrderBkge" />
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">送达位置</view>
|
|
<view class="list-right">
|
|
<picker :range="deliveryLocationList" range-key="text" @change="deliveryLocationChange">
|
|
<view>{{deliveryLocationText || '请选择'}}</view>
|
|
</picker>
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">配送时长</view>
|
|
<view class="list-right">
|
|
<input type="number" v-model="shop.shopDeliveryDuration" placeholder="分钟" />
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">配送员电话</view>
|
|
<view class="list-right worker-query">
|
|
<input type="number" v-model="workerMobile" placeholder="输入手机号" />
|
|
<view class="query-btn" @tap="findWorker">查询</view>
|
|
</view>
|
|
</view>
|
|
<view class="list-1" v-if="shop.workerId">
|
|
<view class="list-name">已绑定</view>
|
|
<view class="list-right">{{shop.workerName}} {{shop.workerPhone}}</view>
|
|
</view>
|
|
</block>
|
|
</view>
|
|
<view class="list-box">
|
|
<view class="section-title">中转配送</view>
|
|
<view class="list-1">
|
|
<view class="list-name">支持中转配送</view>
|
|
<view class="list-right">
|
|
<label class="radio" style="padding-right: 20rpx;" @tap="setTransferDelivery(1)">
|
|
<radio :checked="shop.supportTransferDelivery == 1" /><text>是</text>
|
|
</label>
|
|
<label class="radio" @tap="setTransferDelivery(0)">
|
|
<radio :checked="shop.supportTransferDelivery == 0" /><text>否</text>
|
|
</label>
|
|
</view>
|
|
</view>
|
|
<block v-if="shop.supportTransferDelivery == 1">
|
|
<view class="list-1">
|
|
<view class="list-name">中转时长</view>
|
|
<view class="list-right">
|
|
<input type="number" v-model="shop.transferDeliveryDuration" placeholder="分钟" />
|
|
</view>
|
|
</view>
|
|
<view class="list-1">
|
|
<view class="list-name">中转地点</view>
|
|
<view class="list-right">
|
|
<picker :range="addressList" range-key="text" @change="transferAddressChange">
|
|
<view>{{shop.transferAddressName || '请选择'}}</view>
|
|
</picker>
|
|
</view>
|
|
</view>
|
|
</block>
|
|
</view>
|
|
<view class="list-box">
|
|
<view class="list-2" @click="submit">
|
|
保存
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
shop: {},
|
|
shopImages: [],
|
|
huanjing: '',
|
|
workerMobile: '',
|
|
addressList: [],
|
|
deliveryLocationList: [{
|
|
value: 1,
|
|
text: '送到宿舍'
|
|
}, {
|
|
value: 2,
|
|
text: '送到楼下'
|
|
}]
|
|
}
|
|
},
|
|
computed: {
|
|
deliveryLocationText() {
|
|
let item = this.deliveryLocationList.find(item => item.value == this.shop.shopDeliveryLocation)
|
|
return item ? item.text : ''
|
|
}
|
|
},
|
|
onLoad() {
|
|
this.shop = JSON.parse(uni.getStorageSync('area')).shop;
|
|
|
|
this.shopImages = this.shop.shopImages.split('@@')
|
|
this.huanjing = JSON.parse(this.shopImages[3])[0]
|
|
|
|
for (let key in this.shop) {
|
|
if (this.shop[key] === null) {
|
|
delete this.shop[key];
|
|
}
|
|
}
|
|
if (this.shop.supportShopDelivery == null) this.shop.supportShopDelivery = 0
|
|
if (this.shop.orderBkge == null) this.shop.orderBkge = 0
|
|
if (this.shop.supportTransferDelivery == null) this.shop.supportTransferDelivery = 0
|
|
this.workerMobile = this.shop.workerPhone || ''
|
|
this.getRegionList()
|
|
},
|
|
methods: {
|
|
navigatorTo(e) {
|
|
let url = ""
|
|
if (e == 'addgoods') {
|
|
url = '/package1/myCenter/addGoods'
|
|
} else if (e == 'merchant') {
|
|
url = '/package1/myCenter/myMerchant'
|
|
} else if (e == 'xiugaixinxi') {
|
|
url = '/pages/myCenter/shopDetail'
|
|
}
|
|
uni.navigateTo({
|
|
url: url
|
|
})
|
|
},
|
|
pictureAdd(type) {
|
|
let that = this
|
|
uni.chooseMedia({
|
|
count: type == 'qita' ? 9 : 1,
|
|
mediaType: ['image'],
|
|
sourceType: ['album', 'camera'],
|
|
success(res) {
|
|
uni.showLoading({
|
|
title: '加载中...',
|
|
mask: true
|
|
})
|
|
for (let i = 0; i < res.tempFiles.length; i++) {
|
|
that.upLoadFile(res.tempFiles[i].tempFilePath, type)
|
|
}
|
|
|
|
}
|
|
})
|
|
},
|
|
async upLoadFile(path, type) {
|
|
let that = this;
|
|
let hiver_token = uni.getStorageSync("hiver_token")
|
|
await uni.uploadFile({
|
|
url: getApp().globalData.mainurl + '/upload/file',
|
|
filePath: path,
|
|
name: 'file',
|
|
header: {
|
|
"content-type": "multipart/form-data",
|
|
'accessToken': hiver_token
|
|
},
|
|
formData: {},
|
|
success: (uploadFileRes) => {
|
|
let pathData = JSON.parse(uploadFileRes.data)
|
|
that.shop.shopIcon = pathData.result
|
|
|
|
that.$forceUpdate()
|
|
},
|
|
fail: (err) => {
|
|
uni.hideLoading();
|
|
uni.showToast({
|
|
title: JSON.stringify(err),
|
|
icon: 'none'
|
|
})
|
|
}
|
|
});
|
|
await setTimeout(res => {
|
|
uni.hideLoading();
|
|
}, 1000)
|
|
},
|
|
setSelfDelivery(type) {
|
|
this.shop.supportShopDelivery = type
|
|
if (type != 1) {
|
|
this.shop.orderBkge = 0
|
|
this.shop.shopDeliveryLocation = ''
|
|
this.shop.shopDeliveryDuration = ''
|
|
this.shop.workerId = ''
|
|
this.shop.workerName = ''
|
|
this.shop.workerPhone = ''
|
|
this.workerMobile = ''
|
|
}
|
|
},
|
|
setTransferDelivery(type) {
|
|
this.shop.supportTransferDelivery = type
|
|
if (type != 1) {
|
|
this.shop.transferDeliveryDuration = ''
|
|
this.shop.transferAddressId = ''
|
|
this.shop.transferAddressName = ''
|
|
}
|
|
},
|
|
getRegionList() {
|
|
this.NB.sendRequest('/app/shopArea/getByParentId/0', {}, false, 'get', 'application/x-www-form-urlencoded')
|
|
.then(res => {
|
|
|
|
if (res.code == 200) {
|
|
this.addressList = (Array.isArray(res.result) ? res.result : []).map(item => {
|
|
return {
|
|
value: item.id,
|
|
text: item.title || item.name || item.regionName || item.areaName ||
|
|
'未命名区域'
|
|
}
|
|
})
|
|
} else {
|
|
uni.showToast(res.message)
|
|
}
|
|
})
|
|
},
|
|
transferAddressChange(e) {
|
|
const item = this.addressList[e.detail.value]
|
|
if (item) {
|
|
this.shop.transferAddressId = item.value
|
|
this.shop.transferAddressName = item.text
|
|
}
|
|
},
|
|
formatOrderBkge() {
|
|
let value = parseFloat(this.shop.orderBkge || 0)
|
|
if (isNaN(value) || value < 0) value = 0
|
|
this.shop.orderBkge = Number(value.toFixed(1))
|
|
},
|
|
deliveryLocationChange(e) {
|
|
const item = this.deliveryLocationList[e.detail.value]
|
|
if (item) {
|
|
this.shop.shopDeliveryLocation = item.value
|
|
}
|
|
},
|
|
findWorker() {
|
|
if (!this.workerMobile) {
|
|
uni.showToast('请输入配送员手机号')
|
|
return
|
|
}
|
|
this.NB.sendRequest('/app/shop/findWorkerByMobile', {
|
|
mobile: this.workerMobile
|
|
}, false, 'get', 'application/x-www-form-urlencoded').then(res => {
|
|
|
|
if (res.code == 200) {
|
|
this.shop.workerId = res.result.workerId
|
|
this.shop.workerName = res.result.workerName
|
|
this.shop.workerPhone = res.result.workerPhone || res.result.mobile
|
|
uni.showToast('绑定成功')
|
|
} else {
|
|
uni.showToast(res.message)
|
|
}
|
|
})
|
|
},
|
|
normalizeSelfDelivery() {
|
|
if (this.shop.supportShopDelivery != 1) {
|
|
this.setSelfDelivery(0)
|
|
return true
|
|
}
|
|
this.formatOrderBkge()
|
|
if (!this.shop.shopDeliveryLocation) {
|
|
this.tui.toast('请选择送达位置')
|
|
return false
|
|
}
|
|
if (!this.shop.shopDeliveryDuration) {
|
|
this.tui.toast('请输入配送时长')
|
|
return false
|
|
}
|
|
if (!this.shop.workerId) {
|
|
this.tui.toast('请绑定配送员')
|
|
return false
|
|
}
|
|
return true
|
|
},
|
|
normalizeTransferDelivery() {
|
|
if (this.shop.supportTransferDelivery != 1) {
|
|
this.setTransferDelivery(0)
|
|
return true
|
|
}
|
|
if (!this.shop.transferDeliveryDuration) {
|
|
this.tui.toast('请输入中转配送时长')
|
|
return false
|
|
}
|
|
if (!this.shop.transferAddressId) {
|
|
this.tui.toast('请选择中转地点')
|
|
return false
|
|
}
|
|
this.shop.transferDeliveryDuration = parseInt(this.shop.transferDeliveryDuration || 0)
|
|
return true
|
|
},
|
|
updateLocalShopCache() {
|
|
let shopList = uni.getStorageSync('schoolShop') || []
|
|
if (Array.isArray(shopList)) {
|
|
shopList = shopList.map(item => item.id == this.shop.id ? Object.assign({}, item, this.shop) : item)
|
|
uni.setStorageSync('schoolShop', shopList)
|
|
}
|
|
uni.setStorageSync('shop', this.shop)
|
|
},
|
|
submit() {
|
|
if (!this.normalizeSelfDelivery()) return
|
|
if (!this.normalizeTransferDelivery()) return
|
|
this.NB.sendRequest('/app/shop/updateSelfDelivery', {
|
|
id: this.shop.id,
|
|
supportShopDelivery: this.shop.supportShopDelivery,
|
|
orderBkge: this.shop.orderBkge,
|
|
shopDeliveryLocation: this.shop.shopDeliveryLocation,
|
|
shopDeliveryDuration: this.shop.shopDeliveryDuration,
|
|
workerId: this.shop.workerId,
|
|
workerName: this.shop.workerName,
|
|
workerPhone: this.shop.workerPhone
|
|
},
|
|
false, // 是否显示loading(根据业务需要)
|
|
'post', // 请求方法
|
|
'application/x-www-form-urlencoded' // 内容类型
|
|
).then(deliveryRes => {
|
|
if (deliveryRes.code !== 200) {
|
|
this.tui.toast(deliveryRes.message);
|
|
return Promise.reject(deliveryRes);
|
|
}
|
|
// 第二个接口:更新转单配送
|
|
return this.NB.sendRequest(
|
|
'/app/shop/updateTransferDelivery', {
|
|
id: this.shop.id,
|
|
supportTransferDelivery: this.shop.supportTransferDelivery,
|
|
transferDeliveryDuration: this.shop.transferDeliveryDuration,
|
|
transferAddressId: this.shop.transferAddressId,
|
|
transferAddressName: this.shop.transferAddressName
|
|
},
|
|
false,
|
|
'post',
|
|
'application/x-www-form-urlencoded'
|
|
);
|
|
}).then(transferRes => {
|
|
if (transferRes.code !== 200) {
|
|
this.tui.toast(transferRes.message);
|
|
return Promise.reject(transferRes);
|
|
}
|
|
// 第三个接口:编辑店铺信息(PUT)
|
|
return this.NB.sendRequest(
|
|
'/app/shop/edit',
|
|
this.shop, // 直接传入完整对象
|
|
false,
|
|
'put', // 注意方法名改为小写,与后端约定一致
|
|
'application/x-www-form-urlencoded'
|
|
);
|
|
}).then(res => {
|
|
if (res.code === 200) {
|
|
this.updateLocalShopCache();
|
|
uni.showModal({
|
|
title: '提示',
|
|
content: '更新信息成功',
|
|
showCancel: false,
|
|
success: (modalRes) => {
|
|
if (modalRes.confirm) {
|
|
uni.navigateBack();
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
this.tui.toast(res.message);
|
|
}
|
|
uni.hideLoading();
|
|
})
|
|
.catch(err => {
|
|
// 捕获任意环节的 reject(包括接口失败或toast后的中断)
|
|
uni.hideLoading(); // 确保加载提示被关闭
|
|
// 若需要额外处理可在此添加,原代码为空
|
|
});
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
page,
|
|
.page1 {
|
|
width: 100%;
|
|
height: 100%;
|
|
font-size: 28rpx;
|
|
background: #eee;
|
|
}
|
|
|
|
.list-box {
|
|
width: 100%;
|
|
height: auto;
|
|
background: #fff;
|
|
margin-top: 20rpx;
|
|
|
|
}
|
|
|
|
.list-1 {
|
|
display: flex;
|
|
width: 100%;
|
|
height: 100rpx;
|
|
line-height: 100rpx;
|
|
border-bottom: 1px solid #eee;
|
|
|
|
}
|
|
|
|
.list-2 {
|
|
width: 100%;
|
|
height: 100rpx;
|
|
line-height: 100rpx;
|
|
text-align: center;
|
|
border-bottom: 1px solid #eee;
|
|
}
|
|
|
|
.list-icon {
|
|
width: 100rpx;
|
|
height: 100rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.list-name {
|
|
flex: 1;
|
|
padding-left: 20rpx;
|
|
}
|
|
|
|
.list-right {
|
|
flex: 1;
|
|
height: 100rpx;
|
|
text-align: right;
|
|
padding-right: 20rpx;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.upload-img {
|
|
width: 60rpx;
|
|
height: 60rpx;
|
|
background-size: 100%;
|
|
margin-top: 20rpx;
|
|
}
|
|
|
|
.list-2 {
|
|
width: 100%;
|
|
height: 100rpx;
|
|
line-height: 100rpx;
|
|
text-align: center;
|
|
border-bottom: 1px solid #eee;
|
|
}
|
|
</style>
|