332 lines
8.9 KiB
Vue
332 lines
8.9 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="main">
|
|||
|
|
<view class="flex flex-between cell" @click="selectImg('logoImage')">
|
|||
|
|
<text class="name">店铺LOGO</text>
|
|||
|
|
<image :src="logoImage" mode="" class="img"></image>
|
|||
|
|
</view>
|
|||
|
|
<view class="list">
|
|||
|
|
<view class="list-item">
|
|||
|
|
<text class="label">店铺名称:</text>
|
|||
|
|
<input type="text" :maxlength="30" placeholder="请输入店铺名称" v-model="infor.name" class="input"/>
|
|||
|
|
</view>
|
|||
|
|
<view class="list-item">
|
|||
|
|
<text class="label">联系电话:</text>
|
|||
|
|
<input type="number" :maxlength="11" class="input" v-model="infor.mobile" placeholder="请输入店铺联系电话" />
|
|||
|
|
</view>
|
|||
|
|
<view class="list-item" @click="visible = true">
|
|||
|
|
<text class="color-purple flex-grow label">{{pickerText||'选择省/市/区'}}</text>
|
|||
|
|
<text class="iconfont icon"></text>
|
|||
|
|
</view>
|
|||
|
|
<view class="list-item" v-if="infor.addressDetails" @click="selectDetail">
|
|||
|
|
<text class="color-purple flex-grow label">{{infor.addressDetails}}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="list-item bor-no">
|
|||
|
|
<input type="text" :maxlength="50" class="input" v-model="infor.addressSupplement" placeholder="补充具体地址" />
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="flex flex-column textarea">
|
|||
|
|
<text class="name">店铺简介:</text>
|
|||
|
|
<textarea :maxlength="80" placeholder="请输入您的店铺简介(80字以内)" v-model="infor.introduce" class="areaTxt" @keydown.enter="keydown" />
|
|||
|
|
<!-- <input type="text" placeholder="请输入您的店铺简介(80字以内)" :maxlength="80" v-model="infor.introduce" class="flex-grow font36"/> -->
|
|||
|
|
</view>
|
|||
|
|
<view class="flex flex-column textarea">
|
|||
|
|
<text class="name">店铺公告:</text>
|
|||
|
|
<textarea :maxlength="180" placeholder="请输入您的店铺公告(180字以内)" v-model="infor.notice" class="areaTxt" @keydown.enter="keydown" />
|
|||
|
|
<!-- <input type="text" placeholder="请输入您的店铺简介(80字以内)" :maxlength="80" v-model="infor.introduce" class="flex-grow font36"/> -->
|
|||
|
|
</view>
|
|||
|
|
<view class="grid flex flex-between">
|
|||
|
|
<text>店铺背景图:</text>
|
|||
|
|
<view class="flex flex-center box" @click="uplodingImg('backgroundImage')">
|
|||
|
|
<text class="iconfont font60 color-b9" v-if="!backgroundImage"></text>
|
|||
|
|
<image :src="backgroundImage" mode="" class="image" v-else></image>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<button type="primary" class="bg-base btn" :loading="loading" :disabled="loading" @click="commit()">修改</button>
|
|||
|
|
<w-picker
|
|||
|
|
:visible.sync="visible"
|
|||
|
|
:value="positionValue"
|
|||
|
|
ref="mpvueCityPicker"
|
|||
|
|
mode="region"
|
|||
|
|
@confirm="onConfirm"
|
|||
|
|
themeColor="#3a2397"
|
|||
|
|
></w-picker>
|
|||
|
|
|
|||
|
|
<avatar @upload="myUpload" ref="avatar"></avatar>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import url from '@/common/http/url.js';
|
|||
|
|
import publics from "@/common/utils/public.js"
|
|||
|
|
import upload from "@/common/http/upload.js"
|
|||
|
|
import wPicker from "@/components/w-picker/w-picker.vue"
|
|||
|
|
import avatar from "@/components/yq-avatar/yq-avatar.vue";
|
|||
|
|
|
|||
|
|
export default{
|
|||
|
|
components: {
|
|||
|
|
wPicker, avatar
|
|||
|
|
},
|
|||
|
|
data(){
|
|||
|
|
return {
|
|||
|
|
loading: false,
|
|||
|
|
visible: false,
|
|||
|
|
pickerText: '',
|
|||
|
|
positionValue: [],
|
|||
|
|
infor: {},
|
|||
|
|
callbackList: [],
|
|||
|
|
logoImage: "",
|
|||
|
|
backgroundImage: "",
|
|||
|
|
addressInfo: {}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onLoad(){
|
|||
|
|
this.$http("GET", url.store.getStoreInfo).then(res=>{
|
|||
|
|
this.infor = res.data
|
|||
|
|
delete this.infor.createTime
|
|||
|
|
this.logoImage = res.data.logoImage
|
|||
|
|
this.backgroundImage = res.data.backgroundImage
|
|||
|
|
if (res.data.notice === 'null') {
|
|||
|
|
this.infor.notice = ""
|
|||
|
|
}
|
|||
|
|
let addrObj = publics.getLngAndLatByCode(res.data.threeAdcode)
|
|||
|
|
if (addrObj){
|
|||
|
|
this.pickerText = ""
|
|||
|
|
addrObj.map(v=>{
|
|||
|
|
this.pickerText = this.pickerText + v.name
|
|||
|
|
this.positionValue.push(v.name)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
methods:{
|
|||
|
|
async commit(){
|
|||
|
|
if (!this.infor.name){
|
|||
|
|
return this.$msg("请输入店铺名称")
|
|||
|
|
} else if (!this.infor.mobile){
|
|||
|
|
return this.$msg("请输入店铺联系电话")
|
|||
|
|
} else if (!this.infor.introduce){
|
|||
|
|
return this.$msg("请输入店铺简介")
|
|||
|
|
}
|
|||
|
|
this.loading = true
|
|||
|
|
let callbackList = this.callbackList
|
|||
|
|
for(let i = 0; i<callbackList.length; i++){
|
|||
|
|
let v = callbackList[i]
|
|||
|
|
let data = await upload.getOssSignature(v.path, 10, 1)
|
|||
|
|
let list = await upload.uploadImageOss(data)
|
|||
|
|
this.infor[v.name] = JSON.stringify({
|
|||
|
|
resourceTemporaryUUID: list[0].resourceTemporaryUUID,
|
|||
|
|
ossWidth: v.ossWidth,
|
|||
|
|
ossHeight: v.ossHeight,
|
|||
|
|
size: v.size
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
this.httpReq()
|
|||
|
|
},
|
|||
|
|
httpReq(){
|
|||
|
|
this.$http("POST", url.store.editStoreInfo, this.infor).then(res =>{
|
|||
|
|
this.$msg(res.data)
|
|||
|
|
this.$navigateBack(1, 500)
|
|||
|
|
}).catch(()=>{
|
|||
|
|
this.loading = false
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
onConfirm(e) {
|
|||
|
|
let _this = this
|
|||
|
|
this.pickerText = e.result
|
|||
|
|
this.infor.oneAdcode = e.obj.province.value
|
|||
|
|
this.infor.twoAdcode = e.obj.city.value
|
|||
|
|
this.infor.threeAdcode = e.obj.area.value
|
|||
|
|
let addressInfo = e.obj.area
|
|||
|
|
this.addressInfo = addressInfo
|
|||
|
|
uni.chooseLocation({
|
|||
|
|
longitude: addressInfo.centerLng.toString(),
|
|||
|
|
latitude: addressInfo.centerLat.toString(),
|
|||
|
|
success(res) {
|
|||
|
|
if (res.address.startsWith(e.result)){
|
|||
|
|
_this.infor.addressDetails = res.address.split(e.result)[1]
|
|||
|
|
} else if (res.name === '地图位置' || res.name === res.address){
|
|||
|
|
_this.infor.addressDetails = res.address
|
|||
|
|
} else {
|
|||
|
|
_this.infor.addressDetails = res.name + res.address
|
|||
|
|
}
|
|||
|
|
_this.infor.lng = res.longitude
|
|||
|
|
_this.infor.lat = res.latitude
|
|||
|
|
_this.$forceUpdate()
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
selectDetail(){
|
|||
|
|
let _this = this
|
|||
|
|
uni.chooseLocation({
|
|||
|
|
longitude: _this.addressInfo.centerLng.toString(),
|
|||
|
|
latitude: _this.addressInfo.centerLat.toString(),
|
|||
|
|
success(res) {
|
|||
|
|
if (res.address.startsWith(_this.pickerText)){
|
|||
|
|
_this.infor.addressDetails = res.address.split(_this.pickerText)[1]
|
|||
|
|
} else if (res.name === '地图位置' || res.name === res.address){
|
|||
|
|
_this.infor.addressDetails = res.address
|
|||
|
|
} else {
|
|||
|
|
_this.infor.addressDetails = res.name + res.address
|
|||
|
|
}
|
|||
|
|
_this.infor.lng = res.longitude
|
|||
|
|
_this.infor.lat = res.latitude
|
|||
|
|
_this.$forceUpdate()
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
selectImg(){
|
|||
|
|
upload.showAvatarModal(this, 500, 500)
|
|||
|
|
},
|
|||
|
|
myUpload(rsp){
|
|||
|
|
let _this = this
|
|||
|
|
this.callbackList.forEach((v, i)=>{
|
|||
|
|
if (v.name === "logoImage") {
|
|||
|
|
this.callbackList.splice(i, 1)
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
this.logoImage = rsp.path
|
|||
|
|
uni.getImageInfo({
|
|||
|
|
src: rsp.path,
|
|||
|
|
success: function (image) {
|
|||
|
|
_this.callbackList.push({
|
|||
|
|
name: "logoImage",
|
|||
|
|
path: rsp.path,
|
|||
|
|
ossWidth: image.width,
|
|||
|
|
ossHeight: image.height
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
uplodingImg(name){
|
|||
|
|
let _this = this
|
|||
|
|
this.callbackList.forEach((v, i)=>{
|
|||
|
|
if (v.name === name) {
|
|||
|
|
this.callbackList.splice(i, 1)
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
uni.chooseImage({
|
|||
|
|
count: 1,
|
|||
|
|
success: (res) => {
|
|||
|
|
let tempFilePath = res.tempFilePaths[0]
|
|||
|
|
_this[name] = tempFilePath
|
|||
|
|
uni.getImageInfo({
|
|||
|
|
src: tempFilePath,
|
|||
|
|
success: function (image) {
|
|||
|
|
_this.callbackList.push({
|
|||
|
|
name: name,
|
|||
|
|
path: tempFilePath,
|
|||
|
|
ossWidth: image.width,
|
|||
|
|
ossHeight: image.height,
|
|||
|
|
size: res.tempFiles[0].size
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
keydown(){
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.main{
|
|||
|
|
padding: 20rpx;
|
|||
|
|
.textarea{
|
|||
|
|
padding: 30rpx;
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
background-color: white;
|
|||
|
|
.areaTxt{
|
|||
|
|
margin-top: 10rpx;
|
|||
|
|
width: 100%;
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.name{
|
|||
|
|
color: #555;
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
}
|
|||
|
|
.cell{
|
|||
|
|
padding: 0 30rpx;
|
|||
|
|
height: 130rpx;
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
background-color: white;
|
|||
|
|
.img{
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
width: 110rpx;
|
|||
|
|
height: 110rpx;
|
|||
|
|
background-color: #928add;
|
|||
|
|
overflow: hidden;
|
|||
|
|
.icon{
|
|||
|
|
font-size: 60rpx;
|
|||
|
|
color: white;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.list{
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
background-color: white;
|
|||
|
|
padding: 0 30rpx;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
&-item{
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
height: 120rpx;
|
|||
|
|
border-bottom: 2rpx solid #f5f3f7;
|
|||
|
|
color: #555;
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
.input{
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
}
|
|||
|
|
.icon{
|
|||
|
|
font-size: 44rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.cell{
|
|||
|
|
height: auto;
|
|||
|
|
flex-direction: column;
|
|||
|
|
align-items: flex-start;
|
|||
|
|
padding: 30rpx 0;
|
|||
|
|
.textarea{
|
|||
|
|
height: 200rpx;
|
|||
|
|
width: 100%;
|
|||
|
|
margin-top: 20rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.grid{
|
|||
|
|
padding: 20rpx 30rpx;
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
color: #555;
|
|||
|
|
background-color: white;
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
.box{
|
|||
|
|
width: 350rpx;
|
|||
|
|
height: 250rpx;
|
|||
|
|
border: 2rpx solid #EEEEEE;
|
|||
|
|
border-radius: 14rpx;
|
|||
|
|
.img{
|
|||
|
|
width: 187rpx;
|
|||
|
|
height: 111rpx;
|
|||
|
|
}
|
|||
|
|
.image{
|
|||
|
|
width: 100%;
|
|||
|
|
height: 100%;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
.btn{
|
|||
|
|
margin: 50rpx 0;
|
|||
|
|
border-radius: 50rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|