Files
yunxinwei-uniapp/package/apply/components/index.vue
2023-08-04 13:04:21 +08:00

416 lines
10 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container" :style="appThemeStyle">
<!-- 标题 -->
<view class="page-title">申请入驻</view>
<!-- 合伙人 -->
<Partner v-if=" currentType == 0 " :form="dataType[currentType]"
@handleSubmit="handleSubmit" @chooseImage="chooseImage" @deleteImage="deleteImage" @showLicense="handleShowLicense" />
<!-- 配送员 -->
<Delivery v-if=" currentType == 1 " :form="dataType[currentType]"
@handleSubmit="handleSubmit" @chooseImage="chooseImage" @deleteImage="deleteImage" />
<!-- 团长 -->
<Teamer v-if=" currentType == 2 " :form="dataType[currentType]"
@handleSubmit="handleSubmit" @chooseImage="chooseImage" @deleteImage="deleteImage" />
<!-- 个人商户 -->
<Personal v-if=" currentType == 3 " :form="dataType[currentType]"
@handleSubmit="handleSubmit" @chooseImage="chooseImage" @deleteImage="deleteImage" />
<!-- 入驻协议弹窗 -->
<u-modal v-model="showLicense" title="入驻协议">
<scroll-view class="pops-content" :scroll-y="true">
<text>{{ dataType[currentType].license }}</text>
</scroll-view>
</u-modal>
</view>
</template>
<script>
import * as ApplyApi from '@/api/apply.js'
import * as UploadApi from '@/api/upload'
import SettingModel from '@/common/model/dealer/Setting'
import Partner from './components/partner.vue'
import Delivery from './components/delivery.vue'
import Teamer from './components/teamer.vue'
import Personal from './components/personal.vue'
// 数据类型
const dataType = [
{
name: "商户",
title: '申请成为商户',
label: "partner",
regionText: '所在地区',
licenseTitle: '',
license: '',
submitText: '提交申请',
disabled: false,
longitude: '',
latitude: '',
imageProp: ["sfz1", "sfz2", "yyzz"],
itemLabel: ["身份证(正)", "身份证(反)", "营业执照"],
imageList: [{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},
{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/55faad35f5ee30f3e8791bdfd2f75eb9.png',
size: 0
}],
},
{
name: "配送员",
title: '申请成为配送员',
label: "delivery",
regionText: '意向配送区域',
licenseTitle: '',
license: '',
submitText: '提交申请',
disabled: false,
longitude: '',
latitude: '',
imageProp: ["sfz1", "sfz2", "yyzz"],
itemLabel: ["身份证(正)", "身份证(反)", "营业执照"],
imageList: [{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},
{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/55faad35f5ee30f3e8791bdfd2f75eb9.png',
size: 0
}],
},
{
name: "团长",
title: '申请成为团长',
label: "teamer",
regionText: '所在地区',
licenseTitle: '',
license: '',
submitText: '提交申请',
disabled: false,
longitude: '',
latitude: '',
imageProp: ["sfz1", "sfz2", "yyzz"],
itemLabel: ["身份证(正)", "身份证(反)", "营业执照"],
imageList: [{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},
{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/55faad35f5ee30f3e8791bdfd2f75eb9.png',
size: 0
}],
},
{
name: "个人商户",
title: '申请成为个人商户',
label: "personal",
regionText: '所在地区',
submitText: '提交申请',
licenseTitle: '',
license: '',
disabled: false,
longitude: '',
latitude: '',
imageProp: ["sfz1", "sfz2", "yyzz"],
itemLabel: ["身份证(正)", "身份证(反)", "营业执照"],
imageList: [{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/6b52b67ed9291757163c10ef96be1a54.png',
size: 0
},
{
path: 'http://dev.gxwebsoft.com/hainiu/uploads/10001/20220522/55faad35f5ee30f3e8791bdfd2f75eb9.png',
size: 0
}],
}
]
export default {
components: {
Partner,
Delivery,
Teamer,
Personal
},
data() {
return {
// 数据类型
dataType,
// 当前类型
currentType: 0,
// 文字设置
words: undefined,
// 显示入驻协议弹窗
showLicense: false,
// 入驻协议阅读状态
isRead: false,
// 当前记录
form: {},
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
const app = this
// 切换类型
this.setDataType(options.dataType)
// 获取设置信息
this.getSetting()
// 获取用户坐标及当前入驻申请记录
app.getLocation((res) => {
app.getData(res.longitude, res.latitude)
})
},
methods: {
// 切换类型
setDataType(dataType) {
if (dataType == 'partner') {
this.currentType = 0
}
if (dataType == 'delivery') {
this.currentType = 1
}
if (dataType == 'teamer') {
this.currentType = 2
}
if (dataType == 'personal') {
this.currentType = 3
}
console.log("dataType: ",this.dataType[this.currentType]);
},
// 获取用户坐标
// 参考文档https://uniapp.dcloud.io/api/location/location?id=getlocation
getLocation(callback) {
const app = this
uni.getLocation({
type: 'wgs84',
success: callback,
fail() {
app.$toast('获取定位失败,请点击右下角按钮重新尝试定位')
app.isAuthor = false
}
})
},
// 加载数据
getData(longitude, latitude) {
const app = this
const { currentType, dataType } = this
dataType[currentType].longitude = longitude
dataType[currentType].latitude = latitude
ApplyApi.detail().then(res => {
const detail = res.data.detail
console.log("detail: ",detail);
// 编辑信息
if (detail) {
app.createFormData(detail)
}
})
},
// 生成默认的表单数据
createFormData(detail) {
const {
form
} = this
form.region = this.createRegion(detail)
// 是否可编辑
this.disabled = true
// 状态
console.log("recore.apply_status: ", form.apply_status);
if (form.apply_status == 10) {
this.submitText = '待审核'
}
if (form.apply_status == 20) {
this.submitText = '审核通过'
}
if (form.apply_status == 30) {
this.submitText = '重新提交'
this.disabled = false
}
// 加载图片
this.imageList = detail.images.map(d => {
return {
path: d.image_url,
size: 101
}
})
form.images = detail.images.map(d => {
return d.image_id
})
},
// 地区
createRegion(detail) {
console.log("detail: ", detail);
return [{
label: detail.region.province,
value: detail.province_id
}, {
label: detail.region.city,
value: detail.city_id
}, {
label: detail.region.region,
value: detail.region_id
}]
},
// 获取分销设置
getSetting() {
const app = this
SettingModel.data()
.then(setting => {
app.dataType[app.currentType].licenseTitle = setting.words.apply.words.license.value
// // 赋值属性
app.dataType[app.currentType].license = setting.license.license
// 设置当前页面标题
app.setPageTitle()
})
},
// 设置当前页面标题
setPageTitle() {
uni.setNavigationBarTitle({
title: this.dataType[this.currentType].title
})
},
// 选择图片
chooseImage(imageIndex,tempFiles){
console.log("imageIndex: ",imageIndex);
console.log("tempFiles: ",tempFiles);
const {dataType, currentType} = this
dataType[currentType].imageList.splice(imageIndex,1,tempFiles)
},
// 删除图片
deleteImage(imageIndex) {
const { disabled } = this
if (disabled == true) {
return false
}
this.imageList[imageIndex].path = '/static/not-dealer.png'
},
// 显示入驻协议弹窗
handleShowLicense(e) {
this.showLicense = e
},
// 提交到后台
handleSubmit(form,imageList){
const app = this
if (app.disabled) {
return false
}
app.disabled = true
app.form = form
ApplyApi.checkAvailable(form).then(res => {
if (imageList.length > 0 && imageList[0].size != 100) {
app.uploadFile()
.then(() => app.onSubmit())
.catch(err => {
app.disabled = false
if (err.statusCode !== 0) {
app.$toast(err.errMsg)
}
console.log('err', err)
})
} else {
app.onSubmit()
}
}).catch(err => {
console.log("err: ", err);
if (err.statusCode == 0) {
app.disabled = false
app.$toast(err.errMsg)
return false
}
})
},
// 上传图片
uploadFile() {
const app = this
const {
imageList,
form
} = app
// 批量上传
return new Promise((resolve, reject) => {
if (imageList.length > 0) {
UploadApi.image(imageList)
.then(fileIds => {
form.images = fileIds
resolve(fileIds)
})
.catch(reject)
} else {
resolve()
}
})
},
// 提交到后端
onSubmit() {
const app = this
const {
form
} = this
let req;
if (form.apply_status == 30) {
req = ApplyApi.edit(form.apply_id, form)
} else {
req = ApplyApi.add(form)
}
req.then(result => {
console.log("result: ", result);
app.$toast(result.message)
setTimeout(function() {
uni.navigateBack()
}, 2000)
})
.finally(() => app.disabled = false)
}
}
}
</script>
<style>
page {
background: #f7f8fa;
}
</style>
<style lang="scss" scoped>
.page-title {
width: 94%;
margin: 0 auto;
padding-top: 40rpx;
font-size: 28rpx;
color: rgba(69, 90, 100, 0.6);
}
.pops-content {
padding: 20rpx;
}
</style>