973 lines
29 KiB
Vue
973 lines
29 KiB
Vue
<template>
|
||
<view class="container">
|
||
<view class="v12-pa-2 reason-box" v-if="form.reviewStatus === 2">
|
||
驳回原因: {{ form.reviewMsg }}
|
||
</view>
|
||
<view class="v12-pa-2 reason-box" v-if="form.isDraft === 0 && form.reviewStatus !== 1 &&form.reviewStatus === 0">
|
||
审核中
|
||
</view>
|
||
<view class="form-item">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
名称:
|
||
</view>
|
||
<view class="input">
|
||
<u-textarea
|
||
border="none"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
placeholder="请输入名称"
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
v-model="form.name"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<view class="form-item v12-mt-2">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
营业执照名称:
|
||
</view>
|
||
<view class="input">
|
||
<u-textarea
|
||
border="none"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
placeholder="请输入营业执照名称"
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
v-model="form.businessLicense"
|
||
autoHeight
|
||
/>
|
||
</view>
|
||
</view>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start">
|
||
<view>
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
主图:
|
||
</view>
|
||
<view class="input">
|
||
<u-upload
|
||
:fileList="coverImg.filter(item => item.url)"
|
||
:disabled="form.isDraft === 0 && (coverImg.length > 0 || form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
:deletable="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
:maxCount="1"
|
||
count="1"
|
||
name="coverImg"
|
||
multiple
|
||
@afterRead="afterRead($event, 'coverImg')"
|
||
@delete="deletePic($event, 'coverImg')"
|
||
></u-upload>
|
||
</view>
|
||
</view>
|
||
<view class="v12-ml-2">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
头像:
|
||
</view>
|
||
<view class="input">
|
||
<u-upload
|
||
:fileList="avatarImg.filter(item => item.url)"
|
||
:disabled="form.isDraft === 0 && (avatarImg.length > 0 || form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
:deletable="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
:maxCount="1"
|
||
count="1"
|
||
name="avatarImg"
|
||
multiple
|
||
@afterRead="afterRead($event, 'avatarImg')"
|
||
@delete="deletePic($event, 'avatarImg')"
|
||
></u-upload>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="form-item v12-mt-2">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
轮播图:
|
||
</view>
|
||
<view class="input">
|
||
<u-upload
|
||
:fileList="bannerImg"
|
||
:disabled="form.isDraft === 0 && (bannerImg.length > 8 || form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
:deletable="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
:maxCount="9"
|
||
count="9"
|
||
name="bannerImg"
|
||
multiple
|
||
@afterRead="afterRead($event, 'bannerImg')"
|
||
@delete="deletePic($event, 'bannerImg')"
|
||
></u-upload>
|
||
</view>
|
||
</view>
|
||
<view class="form-item v12-mt-2">
|
||
<view class="title">
|
||
视频:
|
||
</view>
|
||
<view class="input">
|
||
<u-upload
|
||
v-if="videos.length === 0"
|
||
accept="video"
|
||
multiple
|
||
:max-count="1"
|
||
:fileList="videos"
|
||
:disabled="form.isDraft === 0 && (videos.length > 0 || form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
:deletable="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
:maxCount="1"
|
||
count="9"
|
||
name="bannerImg"
|
||
:previewFullImage="true"
|
||
@afterRead="afterRead($event, 'videos', 'video')"
|
||
@delete="deletePic($event, 'videos')"
|
||
></u-upload>
|
||
<view v-else class="video-wrapper">
|
||
<video
|
||
:src="videos[0].url"
|
||
:poster="videos[0].url + '?vframe/jpg/offset/1'"
|
||
:controls="false"
|
||
play-btn-position="center"
|
||
class="video-item"
|
||
/>
|
||
<view
|
||
v-if="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
class="delete-badge"
|
||
@click.stop="deleteVideo(0)"
|
||
>
|
||
x
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
公司名称
|
||
</view>
|
||
<view class="v12-ml-2" style="flex: 1;">
|
||
<input
|
||
type="text"
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
placeholder="请输入公司名称"
|
||
v-model="form.companyName"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
简介
|
||
</view>
|
||
<view class="v12-ml-2" style="flex: 1;">
|
||
<input
|
||
type="text"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
placeholder="请输入公司简介"
|
||
v-model="form.intro"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view @click="showTimePicker" class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
营业时间
|
||
</view>
|
||
<view class="v12-ml-2">
|
||
<view color="#999999" :text="`${form.serviceTime || '起始时间'} - ${form.serviceEndTime || '结束时间'}`">
|
||
<text :style="{'color': form.serviceTime? '#333' : '#999999'}">{{form.serviceTime || '起始时间'}}</text> - <text :style="{'color': form.serviceEndTime? '#333' : '#999999'}">{{form.serviceEndTime || '结束时间'}}</text>
|
||
</view>
|
||
<tpf-time-range
|
||
startTime="00:00"
|
||
endTime="23:59"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
:startDefaultTime="form.serviceTime"
|
||
:endDefaultTime="form.serviceEndTime"
|
||
ref="TimePickerPopupRef"
|
||
@timeRange="timeRange"
|
||
>
|
||
</tpf-time-range>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
省市区
|
||
</view>
|
||
<view class="v12-ml-2 one-t" style="flex: 1;">
|
||
<CitySelect
|
||
ref="cityselect"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
:defaultValue="form.area || '请选择'"
|
||
:items="district"
|
||
@callback="resultCity"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
详细地址
|
||
</view>
|
||
<view class="v12-ml-2" style="flex: 1;">
|
||
<input
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
type="text"
|
||
placeholder="请输入详细地址"
|
||
v-model="form.address"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view @click="chooLocation" class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
地理定位
|
||
</view>
|
||
<view class="v12-ml-2" style="flex: 1;">
|
||
<u--text v-if="form.position" :text="form.position"></u--text>
|
||
<u--text v-else text="请选择" color="#c0c4cc"></u--text>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
商家电话
|
||
</view>
|
||
<view class="v12-ml-2" style="flex: 1;">
|
||
<u-input
|
||
type="text"
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
placeholder="请输入商家电话"
|
||
v-model="form.phone"
|
||
maxlength="11"
|
||
border="none"
|
||
>
|
||
<template slot="suffix" >
|
||
<u-code
|
||
v-if="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
ref="uCode"
|
||
@change="codeChange"
|
||
seconds="30"
|
||
changeText="X秒重新获取"
|
||
></u-code>
|
||
<u-button
|
||
v-if="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
@tap="getCode"
|
||
:text="tips"
|
||
type="success"
|
||
color="#4A97FC"
|
||
></u-button>
|
||
</template>
|
||
</u-input>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
填写验证码
|
||
</view>
|
||
<view class="v12-ml-2" style="flex: 1;">
|
||
<input
|
||
type="text"
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
placeholder="请输入验证码"
|
||
v-model="form.captcha"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view class="form-item v12-mt-2 v12-d-flex v12-justify-start v12-align-center">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
商家微信
|
||
</view>
|
||
<view class="v12-ml-2" style="flex: 1;">
|
||
<input
|
||
type="text"
|
||
:placeholder-style="inputPlaceholderStyle"
|
||
placeholder="请输入微信号"
|
||
v-model="form.wechat"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1)"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<u-divider></u-divider>
|
||
<view class="form-item v12-mt-2">
|
||
<view class="title">
|
||
文化:
|
||
</view>
|
||
<view class="input">
|
||
<u-upload
|
||
:fileList="cultureImg"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1) || cultureImg.length > 98"
|
||
:deletable="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
:maxCount="99"
|
||
count="99"
|
||
name="cultureImg"
|
||
multiple
|
||
@afterRead="afterRead($event, 'cultureImg')"
|
||
@delete="deletePic($event, 'cultureImg')"
|
||
></u-upload>
|
||
</view>
|
||
</view>
|
||
<view class="form-item v12-mt-2">
|
||
<view class="title">
|
||
<text class="required">* </text>
|
||
资质:
|
||
</view>
|
||
<view class="input">
|
||
<u-upload
|
||
:fileList="qualificationImg"
|
||
:disabled="form.isDraft === 0 && (form.reviewStatus === 0 || form.reviewStatus === 1) || qualificationImg.length > 98"
|
||
:deletable="form.isDraft === 1 || (form.reviewStatus !== 0 && form.reviewStatus !== 1)"
|
||
:maxCount="99"
|
||
count="99"
|
||
name="qualificationImg"
|
||
multiple
|
||
@afterRead="afterRead($event, 'qualificationImg')"
|
||
@delete="deletePic($event, 'qualificationImg')"
|
||
></u-upload>
|
||
</view>
|
||
</view>
|
||
<view v-if="form.isDraft === 0 && form.reviewStatus !== 1">
|
||
<view class="v12-primary v12-white-text submit-btn" @click="submitForm" :style="{'background': form.reviewStatus === 0 ? '#FA979F !important' : '#4A97FC'}">
|
||
{{ form.reviewStatus === 0 ? '撤销申请' : form.reviewStatus === 2 ? '重新提交' : '提交审核' }}
|
||
</view>
|
||
</view>
|
||
<view v-if="form.isDraft === 1">
|
||
<view class="v12-primary v12-white-text submit-btn" @click="submitForm">
|
||
{{ '提交审核' }}
|
||
</view>
|
||
</view>
|
||
<u-popup :show="show" mode="center" round="10" @close="handlePopupClose"
|
||
>
|
||
<view class="popup-body">
|
||
<view class="tc bold">入驻申请须知</view>
|
||
<view class="content">
|
||
<rich-text :nodes="notice" />
|
||
</view>
|
||
<view class="agree-box v12-mb-2">
|
||
<checkbox-group @change="changeAgree">
|
||
<label>
|
||
<checkbox value="yes" style="transform:scale(0.8)"/>
|
||
</label>
|
||
<text>我已仔细阅读并同意</text>
|
||
</checkbox-group>
|
||
</view>
|
||
<u-button
|
||
type="error"
|
||
text="确定"
|
||
@click="save"
|
||
/>
|
||
</view>
|
||
</u-popup>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import CitySelect from '@/components/CitySelect'
|
||
import {getCity, registerVerify} from '@/api/user'
|
||
import {
|
||
chooseImage,
|
||
uploadVideo,
|
||
uploadImage,
|
||
formatRichText
|
||
} from '@/utils'
|
||
import {
|
||
getShopData,
|
||
getTravelInfo,
|
||
saveTravel,
|
||
saveTravelDraft,
|
||
revokeTravel
|
||
} from '@/api/join'
|
||
export default {
|
||
components: {
|
||
CitySelect
|
||
},
|
||
data() {
|
||
return {
|
||
isAgree: false,
|
||
show: false,
|
||
notice: '',
|
||
tips: '获取验证码',
|
||
inputPlaceholderStyle: {
|
||
fontSize: '32rpx'
|
||
},
|
||
coverImg: [],
|
||
avatarImg: [],
|
||
// 轮播图
|
||
bannerImg: [],
|
||
videos: [],
|
||
district: [],
|
||
// 文化图片
|
||
cultureImg: [],
|
||
// 资质图片
|
||
qualificationImg: [],
|
||
partnerId: '',
|
||
promoterUid: '',
|
||
captcha: '',
|
||
form: {
|
||
/**
|
||
*
|
||
travelInfo object 旅居管家基本信息
|
||
|- name string 名称
|
||
|- cover string 主图
|
||
|- avatar string 头像
|
||
|- companyName string 公司名称
|
||
|- video string 视频
|
||
|- banner string 轮播图(逗号分隔字符串)
|
||
|- serviceTime string 营业开始时间
|
||
|- serviceEndTime string 营业结束时间
|
||
|- provinceId int 省份ID
|
||
|- provinceName string 省份名称
|
||
|- cityId int 城市ID
|
||
|- cityName string 城市名称
|
||
|- areaId int 区域ID
|
||
|- areaName string 区域名称
|
||
|- address string 详细地址
|
||
|- longitude number 经度
|
||
|- latitude number 纬度
|
||
|- contact string 联系人
|
||
|- phone string 联系方式
|
||
|- wechat string 联系微信
|
||
|- culture string 文化(逗号分隔字符串)
|
||
|- qualification string 资质(逗号分隔字符串)
|
||
*
|
||
*/
|
||
captcha: '',
|
||
name: '',
|
||
cover: '',
|
||
avatar: '',
|
||
companyName: '',
|
||
video: '',
|
||
banner: '',
|
||
serviceTime: '00:00',
|
||
serviceEndTime: '23:59',
|
||
provinceId: 0,
|
||
provinceName: '',
|
||
cityId: 0,
|
||
cityName: '',
|
||
areaId: 0,
|
||
areaName: '',
|
||
address: '',
|
||
longitude: 0,
|
||
latitude: 0,
|
||
contact: '',
|
||
phone: '',
|
||
wechat: '',
|
||
culture: '',
|
||
qualification: '',
|
||
reviewMsg: ''
|
||
}
|
||
}
|
||
},
|
||
onLoad(opts) {
|
||
this.partnerId = opts.partnerId || ''
|
||
this.promoterUid = opts.promoterUid || ''
|
||
uni.showLoading({ title: '加载中...', mask: true })
|
||
this.queryCity()
|
||
getShopData({partnerId: this.partnerId, promoterUid: this.promoterUid}).then(({data}) => {
|
||
this.notice = formatRichText(data.merchantApplyNotice)
|
||
this.initInfo()
|
||
}).catch(() => {
|
||
uni.hideLoading()
|
||
})
|
||
},
|
||
// onShow() {
|
||
// },
|
||
onUnload() {
|
||
this.saveDraft()
|
||
},
|
||
onHide() {
|
||
// if (this.form.isDraft === 0 && (this.form.reviewStatus === 0 || this.form.reviewStatus === 1)) {
|
||
// return
|
||
// }
|
||
this.saveDraft()
|
||
|
||
},
|
||
methods: {
|
||
changeAgree(e) {
|
||
this.isAgree = e.detail.value.includes('yes')
|
||
},
|
||
save() {
|
||
if (!this.isAgree) {
|
||
uni.showToast({
|
||
title: '请先阅读并同意入驻申请须知',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.show = false
|
||
},
|
||
handlePopupClose() {
|
||
if (!this.isAgree) {
|
||
uni.showToast({
|
||
title: '请先阅读并同意入驻申请须知',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.show = false
|
||
},
|
||
/**
|
||
* 字符串转换为数组
|
||
* @param {string} str 字符串
|
||
* @param {string} split 分隔符
|
||
* @returns {array} 数组
|
||
*/
|
||
stringToMapArr(str, split = ',') {
|
||
return str.split(split).map(item => ({url: item}))
|
||
},
|
||
/**
|
||
* 保存草稿
|
||
*/
|
||
saveDraft() {
|
||
this.form.cover = this.coverImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.avatar = this.avatarImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.banner = this.bannerImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.video = this.videos.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.culture = this.cultureImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.qualification = this.qualificationImg.filter(item => item.url).map(item => item.url).join(',')
|
||
const params = {
|
||
travelInfo: {...this.form},
|
||
partnerId: this.partnerId,
|
||
captcha: this.form.captcha
|
||
}
|
||
saveTravelDraft(params).then(res => {
|
||
if (res.status === 200) {
|
||
// uni.$u.toast('草稿保存成功')
|
||
}
|
||
}).catch(err => {
|
||
uni.$u.toast(err.msg)
|
||
})
|
||
},
|
||
/**
|
||
* 初始化信息
|
||
*/
|
||
initInfo() {
|
||
getTravelInfo().then(res => {
|
||
if(res.data.isDraft === null || res.data.isDraft === 1) {
|
||
this.show = true
|
||
}
|
||
const {travelInfo} = res.data || {}
|
||
if (res.status === 200) {
|
||
this.form = {...this.form, ...travelInfo}
|
||
this.coverImg = travelInfo.cover ? this.stringToMapArr(travelInfo.cover) : []
|
||
this.avatarImg = travelInfo.avatar ? this.stringToMapArr(travelInfo.avatar) : []
|
||
this.bannerImg = travelInfo.banner ? this.stringToMapArr(travelInfo.banner) : []
|
||
this.videos = travelInfo.video ? this.stringToMapArr(travelInfo.video) : []
|
||
this.cultureImg = travelInfo.culture ? this.stringToMapArr(travelInfo.culture) : []
|
||
this.qualificationImg = travelInfo.qualification ? this.stringToMapArr(travelInfo.qualification) : []
|
||
this.form.reviewStatus = res.data.reviewStatus
|
||
this.form.reviewMsg = res.data.reviewMsg
|
||
this.form.isDraft = res.data.isDraft
|
||
this.form.latitude = travelInfo.latitude || 0
|
||
this.form.longitude = travelInfo.longitude || 0
|
||
this.form.position = this.$forceToDecimal(travelInfo.longitude, 6) + ',' + this.$forceToDecimal(travelInfo.latitude, 6)
|
||
this.form.area = `${this.form.provinceName || ''} ${this.form.cityName || ''} ${this.form.areaName || ''}`.trim()
|
||
this.captcha = travelInfo.captcha
|
||
}
|
||
}).catch(err => {
|
||
// uni.$u.toast(err.msg)
|
||
}).finally(() => {
|
||
uni.hideLoading()
|
||
})
|
||
},
|
||
/**
|
||
* 撤销申请
|
||
*/
|
||
revokeTravel() {
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '确定撤销申请吗?',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
revokeTravel().then(res => {
|
||
if (res.status === 200) {
|
||
uni.$u.toast('撤销申请成功')
|
||
this.initInfo()
|
||
}
|
||
}).catch(err => {
|
||
uni.$u.toast(err.msg)
|
||
})
|
||
}
|
||
}
|
||
})
|
||
},
|
||
/**
|
||
* 提交表单
|
||
*/
|
||
submitForm() {
|
||
if(this.form.reviewStatus === 0 && this.form.isDraft === 0 && this.form.reviewStatus !== 1) {
|
||
this.revokeTravel()
|
||
return
|
||
}
|
||
if(this.form.isDraft === 0 && (this.form.reviewStatus === 0 || this.form.reviewStatus === 1)) return
|
||
this.form.cover = this.coverImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.avatar = this.avatarImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.banner = this.bannerImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.video = this.videos.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.culture = this.cultureImg.filter(item => item.url).map(item => item.url).join(',')
|
||
this.form.qualification = this.qualificationImg.filter(item => item.url).map(item => item.url).join(',')
|
||
|
||
if (!this.form.name) {
|
||
uni.$u.toast('请输入名称')
|
||
return
|
||
}
|
||
if (!this.form.businessLicense) {
|
||
uni.$u.toast('请输入营业执照名称')
|
||
return
|
||
}
|
||
if (!this.form.cover) {
|
||
uni.$u.toast('请上传主图')
|
||
return
|
||
}
|
||
if (!this.form.avatar) {
|
||
uni.$u.toast('请上传头像')
|
||
return
|
||
}
|
||
if (!this.form.companyName) {
|
||
uni.$u.toast('请输入公司名称')
|
||
return
|
||
}
|
||
if (!this.form.intro) {
|
||
uni.$u.toast('请输入公司简介')
|
||
return
|
||
}
|
||
if (!this.form.banner) {
|
||
uni.$u.toast('请上传轮播图')
|
||
return
|
||
}
|
||
// 请选择营业时间
|
||
if (!this.form.serviceTime) {
|
||
uni.$u.toast('请选择营业开始时间')
|
||
return
|
||
}
|
||
if (!this.form.serviceEndTime) {
|
||
uni.$u.toast('请选择营业结束时间')
|
||
return
|
||
}
|
||
// 请选择省市区
|
||
if (!this.form.provinceId) {
|
||
uni.$u.toast('请选择省份')
|
||
return
|
||
}
|
||
if (!this.form.cityId) {
|
||
uni.$u.toast('请选择城市')
|
||
return
|
||
}
|
||
if (!this.form.areaId) {
|
||
uni.$u.toast('请选择区域')
|
||
return
|
||
}
|
||
if (!this.form.address) {
|
||
uni.$u.toast('请输入详细地址')
|
||
return
|
||
}
|
||
// 请选择物理位置
|
||
if (!this.form.longitude) {
|
||
uni.$u.toast('请选择地理定位')
|
||
return
|
||
}
|
||
if (!this.form.latitude) {
|
||
uni.$u.toast('请选择地理定位')
|
||
return
|
||
}
|
||
if (!this.form.qualification) {
|
||
uni.$u.toast('请上传资质')
|
||
return
|
||
}
|
||
if (!this.form.phone) {
|
||
uni.$u.toast('请输入手机号')
|
||
return
|
||
}
|
||
if (!this.form.wechat) {
|
||
uni.$u.toast('请输入联系微信')
|
||
return
|
||
}
|
||
const params = {
|
||
travelInfo: {...this.form},
|
||
partnerId: this.partnerId,
|
||
captcha: this.form.captcha
|
||
}
|
||
saveTravel(params).then(res => {
|
||
if (res.status === 200) {
|
||
uni.showToast({
|
||
title: '您的入驻申请已提交成功,请耐心等待审核',
|
||
icon: 'none',
|
||
success: () => {
|
||
this.initInfo();
|
||
this.show = false;
|
||
}
|
||
})
|
||
}
|
||
}).catch(err => {
|
||
uni.$u.toast(err.msg)
|
||
})
|
||
},
|
||
/**
|
||
* 获取验证码
|
||
*/
|
||
getCode() {
|
||
// if (this.reviewing) return
|
||
if (!this.form.phone) {
|
||
uni.$u.toast('请输入手机号')
|
||
return
|
||
}
|
||
if (this.form.phone.length !== 11) {
|
||
uni.$u.toast('请输入11位手机号')
|
||
return
|
||
}
|
||
if (this.$refs.uCode.canGetCode) {
|
||
uni.showLoading({
|
||
title: '正在获取验证码'
|
||
})
|
||
registerVerify({
|
||
phone: this.form.phone,
|
||
type: 'merchantTravelApply'
|
||
}).then(() => {
|
||
uni.hideLoading()
|
||
// 这里此提示会被this.start()方法中的提示覆盖
|
||
uni.$u.toast('验证码已发送')
|
||
// 通知验证码组件内部开始倒计时
|
||
this.$refs.uCode.start()
|
||
}).catch(err => {
|
||
uni.hideLoading()
|
||
uni.$u.toast(err.msg)
|
||
})
|
||
} else {
|
||
uni.$u.toast('倒计时结束后再发送')
|
||
}
|
||
},
|
||
/**
|
||
* 验证码按钮回调
|
||
*/
|
||
codeChange(text) {
|
||
this.tips = text
|
||
},
|
||
/**
|
||
* 选择位置
|
||
*/
|
||
chooLocation() {
|
||
if(this.form.isDraft === 0 && (this.form.reviewStatus === 0 || this.form.reviewStatus === 1)) return
|
||
uni.chooseLocation({
|
||
success: (res) => {
|
||
console.log(res)
|
||
this.form.address = res.address
|
||
this.form.longitude = this.$forceToDecimal(res.longitude, 6)
|
||
this.form.latitude = this.$forceToDecimal(res.latitude, 6)
|
||
this.form.position = this.$forceToDecimal(res.longitude, 6) + ',' + this.$forceToDecimal(res.latitude, 6)
|
||
}
|
||
})
|
||
},
|
||
/**
|
||
* 选择城市回调
|
||
* @param {object} e - 事件对象
|
||
*/
|
||
resultCity(values) {
|
||
const address = {
|
||
province: values.province.name || '',
|
||
city: values.city.name || '',
|
||
district: values.district.name || '',
|
||
provinceId: values.province.id,
|
||
cityId: values.city.id,
|
||
areaId: values.district.id
|
||
}
|
||
this.form.area = `${address.province || ''} ${address.city || ''} ${address.district || ''}`
|
||
this.form.areaName = address.district || ''
|
||
this.form.provinceName = address.province || ''
|
||
this.form.cityName = address.city || ''
|
||
this.form.provinceId = address.provinceId
|
||
this.form.cityId = address.cityId
|
||
this.form.areaId = address.areaId
|
||
},
|
||
/**
|
||
* 选择城市
|
||
*/
|
||
queryCity() {
|
||
getCity().then(({data}) => {
|
||
this.district = data
|
||
})
|
||
},
|
||
/**
|
||
* 显示时间选择器
|
||
*/
|
||
showTimePicker() {
|
||
if(this.form.isDraft === 0 && (this.form.reviewStatus === 0 || this.form.reviewStatus === 1)) {
|
||
return
|
||
}
|
||
this.$refs.TimePickerPopupRef.open()
|
||
},
|
||
/**
|
||
* 选择时间范围
|
||
* @param {array} e - 时间范围数组,包含开始时间和结束时间
|
||
*/
|
||
timeRange(e) {
|
||
this.form.serviceTime = e[0]
|
||
this.form.serviceEndTime = e[1]
|
||
this.$forceUpdate()
|
||
},
|
||
/**
|
||
* 选择图片
|
||
* @param {string} imgField - 图片字段名
|
||
*/
|
||
chooseImage(imgField) {
|
||
chooseImage(img => {
|
||
this.form[imgField] = img;
|
||
})
|
||
},
|
||
/**
|
||
* 上传图片或视频
|
||
* @param {object} e - 事件对象
|
||
* @param {string} imgField - 图片字段名
|
||
* @param {string} type - 类型('video'或'image')
|
||
*/
|
||
afterRead(e, imgField, type) {
|
||
const uploadFunc = type == 'video' ? uploadVideo : uploadImage;
|
||
if(e.file.length > 0) {
|
||
e.file.forEach(item => {
|
||
if(!item.url) return
|
||
uploadFunc(item.url, img => {
|
||
if(!img) return
|
||
this[imgField].push({url: img});
|
||
console.log(this[imgField], imgField);
|
||
|
||
})
|
||
})
|
||
}
|
||
},
|
||
/**
|
||
* 删除视频(右上角角标)
|
||
* @param {number} index - 视频索引
|
||
*/
|
||
deleteVideo(index) {
|
||
if(this.form.isDraft === 0 && (this.form.reviewStatus === 0 || this.form.reviewStatus === 1)) return
|
||
uni.showModal({
|
||
title: '确认删除',
|
||
content: '确定删除该视频?',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
this.deletePic({ index }, 'videos')
|
||
}
|
||
}
|
||
})
|
||
},
|
||
/**
|
||
* 删除图片或视频
|
||
* @param {object} e - 事件对象
|
||
* @param {string} imgField - 图片字段名
|
||
*/
|
||
deletePic(e, imgField) {
|
||
this[imgField].splice(e.index, 1);
|
||
console.log(this[imgField]);
|
||
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped lang="scss">
|
||
.popup-body {
|
||
width: 80vw;
|
||
height: 80vh;
|
||
padding: 30rpx;
|
||
overflow: hidden;
|
||
}
|
||
.popup-body .content {
|
||
height: 52vh;
|
||
overflow-y: auto;
|
||
margin: 30rpx 0;
|
||
|
||
// 小程序rich-text内块级标签无默认段间距,补充与后台富文本编辑器一致的段落格式
|
||
::v-deep rich-text {
|
||
display: block;
|
||
width: 100%;
|
||
|
||
p, div, ul, ol {
|
||
display: block;
|
||
margin: 0 0 16rpx;
|
||
|
||
&:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
}
|
||
|
||
li {
|
||
margin: 0 0 8rpx;
|
||
}
|
||
}
|
||
}
|
||
.popup-body .agree-box {
|
||
margin: 60rpx 0;
|
||
font-size: 28rpx;
|
||
color: #666;
|
||
}
|
||
.popup-body {
|
||
.title {
|
||
line-height: 80rpx;
|
||
text-align: center;
|
||
}
|
||
}
|
||
.container {
|
||
padding: 20rpx;
|
||
background: #fff;
|
||
}
|
||
.title {
|
||
font-size: 32rpx;
|
||
font-weight: 500;
|
||
color: #333;
|
||
}
|
||
.required {
|
||
color: #C52733;
|
||
}
|
||
.input{
|
||
margin-top: 20rpx;
|
||
}
|
||
.submit-btn{
|
||
width: 100%;
|
||
height: 100rpx;
|
||
text-align: center;
|
||
line-height: 100rpx;
|
||
}
|
||
.reason-box{
|
||
background: rgba(255,160,167,0.39);
|
||
border-radius: 8rpx;
|
||
color: #C52733;
|
||
font-size: 30rpx;
|
||
margin-bottom: 20rpx;
|
||
}
|
||
.title{
|
||
white-space: nowrap;
|
||
}
|
||
.video-item{
|
||
width: 160rpx;
|
||
height: 160rpx;
|
||
}
|
||
.video-wrapper{
|
||
position: relative;
|
||
display: inline-block;
|
||
}
|
||
.delete-badge{
|
||
position: absolute;
|
||
top: 0rpx;
|
||
right: 0rpx;
|
||
background: #000;
|
||
color: #fff;
|
||
padding: 2rpx 8rpx;
|
||
border-radius: 0 0 0rpx 200rpx;
|
||
font-size: 22rpx;
|
||
z-index: 10;
|
||
text-align: center;
|
||
}
|
||
</style>
|
||
<style>
|
||
.input .u-textarea{
|
||
background-color: #F3F3F3 !important;
|
||
}
|
||
</style>
|