Files
orico-association/pages/member/information.vue
2026-03-25 15:53:37 +08:00

1224 lines
37 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.

<!-- +----------------------------------------------------------------------
| 麦沃德科技赋能开发者助力商协会发展
+----------------------------------------------------------------------
| Copyright (c) 20172024 www.wdsxh.cn All rights reserved.
+----------------------------------------------------------------------
| 沃德商协会系统并不是自由软件不加密并不代表开源未经许可不可自由转售和商用
+----------------------------------------------------------------------
| Author: MY WORLD Team <bd@maiwd.cn> www.maiwd.cn
+----------------------------------------------------------------------
| 编辑资料 开发者: 麦沃德科技-半夏
+---------------------------------------------------------------------- -->
<template>
<page-meta :page-style="'overflow:' + (pageShow ? 'hidden' : 'visible')"></page-meta>
<view class="container" :style="{'--theme-color': themeColor}">
<!-- 标题栏 -->
<title-bar :showBack="true" title="编辑资料"></title-bar>
<!-- 内容区 -->
<view class="container-main" v-if="loadEnd">
<!-- 顶部信息 -->
<view class="main-header" :style="{top: titleBarHeight + 'px'}">
<view class="header-screen" v-if="memberType != 1">
<view class="screen" :class="{active: selectScreen == 1}" v-if="memberType == 2 || memberType == 3" @click="changeScreen(1)">个人资料</view>
<view class="screen" :class="{active: selectScreen == 2}" v-if="memberType == 2" @click="changeScreen(2)">企业资料</view>
<view class="screen" :class="{active: selectScreen == 2}" v-else-if="memberType == 3" @click="changeScreen(2)">团体资料</view>
<view class="screen" :class="{active: selectScreen == 3}" v-if="memberType == 2 || memberType == 3" @click="changeScreen(3)">产品维护</view>
</view>
<view class="header-box" v-if="selectScreen != 3">
<view class="box-image" :style="{'background-image': 'url('+ iconSheet +')'}" v-if="iconSheet"></view>
<view class="box-title">
<text v-if="memberType == 1 || (memberType == 2 && selectScreen == 1) || (memberType == 3 && selectScreen == 1)">完善个人信息</text>
<text v-else-if="memberType == 2 && selectScreen == 2">完善企业信息</text>
<text v-else-if="memberType == 3 && selectScreen == 2">完善团体信息</text>
</view>
<view class="box-subtitle">完善信息后可在会员详情显示</view>
</view>
</view>
<!-- 产品维护 -->
<view class="main-form" style="padding: 32rpx;" v-if="selectScreen == 3">
<member-product ref="memberProduct"></member-product>
</view>
<!-- 会员资料 -->
<view class="main-form" v-else>
<!-- 个人会员 -->
<block v-if="memberType == 1">
<view class="form-group">
<view class="group-title">
<text class="text">个人轮播图</text>
<text class="tips">图片建议尺寸686*320</text>
</view>
<view class="group-upload">
<view class="upload-image" v-for="(item, index) in personCarousel" :key="index" @click="previewImage(index)">
<image class="image-select" :src="item" mode="aspectFill"></image>
<image class="image-delete" src="/static/delete.png" mode="aspectFit" @click.stop="deleteImage(index)"></image>
</view>
<view class="upload-image" v-if="personCarousel.length < 9" @click="chooseImage()">
<view class="image-background"></view>
<view class="image-choose">
<view class="icon">
<image src="/static/camera.png" mode="aspectFit"></image>
</view>
<view class="text">上传图片</view>
</view>
</view>
</view>
</view>
<member-apply ref="memberPerson" :show-type="1" :show-data="personInfo" :mobile-auth="mobileAuth" @changeMobileAuth="changeMobileAuth" @onChange="pageChange"></member-apply>
</block>
<!-- 企业会员 -->
<block v-else-if="memberType == 2">
<view v-show="selectScreen == 1">
<view class="form-group">
<view class="group-title">
<text class="text">个人轮播图</text>
<text class="tips">图片建议尺寸686*320</text>
</view>
<view class="group-upload">
<view class="upload-image" v-for="(item, index) in personCarousel" :key="index" @click="previewImage(index)">
<image class="image-select" :src="item" mode="aspectFill"></image>
<image class="image-delete" src="/static/delete.png" mode="aspectFit" @click.stop="deleteImage(index)"></image>
</view>
<view class="upload-image" v-if="personCarousel.length < 9" @click="chooseImage()">
<view class="image-background"></view>
<view class="image-choose">
<view class="icon">
<image src="/static/camera.png" mode="aspectFit"></image>
</view>
<view class="text">上传图片</view>
</view>
</view>
</view>
</view>
<member-apply ref="memberPerson" :show-type="1" :show-data="groupInfo.person" :mobile-auth="mobileAuth" @changeMobileAuth="changeMobileAuth" @onChange="pageChange"></member-apply>
</view>
<view v-show="selectScreen == 2">
<view class="form-group">
<view class="group-title">
<text class="text">公司环境轮播图</text>
<text class="tips">图片建议尺寸686*320</text>
</view>
<view class="group-upload">
<view class="upload-image" v-for="(item, index) in groupCarousel" :key="index" @click="previewImage(index)">
<image class="image-select" :src="item" mode="aspectFill"></image>
<image class="image-delete" src="/static/delete.png" mode="aspectFit" @click.stop="deleteImage(index)"></image>
</view>
<view class="upload-image" v-if="groupCarousel.length < 9" @click="chooseImage()">
<view class="image-background"></view>
<view class="image-choose">
<view class="icon">
<image src="/static/camera.png" mode="aspectFit"></image>
</view>
<view class="text">上传图片</view>
</view>
</view>
</view>
</view>
<view class="form-group">
<view class="group-title">
<text class="text">公司电话</text>
</view>
<view class="group-input">
<input class="input" type="number" :maxlength="11" v-model="groupMobile" placeholder="请输入公司电话" placeholder-class="placeholder" />
</view>
</view>
<view class="form-group">
<view class="group-title">
<text class="text">公司地址</text>
</view>
<view class="group-input" @click="chooseLocation()">
<view class="input text-ellipsis" v-if="groupAddress.address">{{groupAddress.address}}</view>
<view class="input placeholder text-ellipsis" v-else>请选择公司地址</view>
<image class="icon" src="/static/del.png" mode="aspectFit" @click.stop="clearLocation()" v-if="groupAddress.address"></image>
<image class="icon" src="/static/right.png" mode="aspectFit" v-else></image>
</view>
</view>
<member-apply ref="memberGroup" :show-type="2" :show-data="groupInfo.company" @onChange="pageChange"></member-apply>
</view>
</block>
<!-- 团体会员 -->
<block v-else-if="memberType == 3">
<view v-show="selectScreen == 1">
<view class="form-group">
<view class="group-title">
<text class="text">个人轮播图</text>
<text class="tips">图片建议尺寸686*320</text>
</view>
<view class="group-upload">
<view class="upload-image" v-for="(item, index) in personCarousel" :key="index" @click="previewImage(index)">
<image class="image-select" :src="item" mode="aspectFill"></image>
<image class="image-delete" src="/static/delete.png" mode="aspectFit" @click.stop="deleteImage(index)"></image>
</view>
<view class="upload-image" v-if="personCarousel.length < 9" @click="chooseImage()">
<view class="image-background"></view>
<view class="image-choose">
<view class="icon">
<image src="/static/camera.png" mode="aspectFit"></image>
</view>
<view class="text">上传图片</view>
</view>
</view>
</view>
</view>
<member-apply ref="memberPerson" :show-type="1" :show-data="groupInfo.person" :mobile-auth="mobileAuth" @changeMobileAuth="changeMobileAuth" @onChange="pageChange"></member-apply>
</view>
<view v-show="selectScreen == 2">
<view class="form-group">
<view class="group-title">
<text class="text">团体环境轮播图</text>
<text class="tips">图片建议尺寸686*320</text>
</view>
<view class="group-upload">
<view class="upload-image" v-for="(item, index) in groupCarousel" :key="index" @click="previewImage(index)">
<image class="image-select" :src="item" mode="aspectFill"></image>
<image class="image-delete" src="/static/delete.png" mode="aspectFit" @click.stop="deleteImage(index)"></image>
</view>
<view class="upload-image" v-if="groupCarousel.length < 9" @click="chooseImage()">
<view class="image-background"></view>
<view class="image-choose">
<view class="icon">
<image src="/static/camera.png" mode="aspectFit"></image>
</view>
<view class="text">上传图片</view>
</view>
</view>
</view>
</view>
<view class="form-group">
<view class="group-title">
<text class="text">团体电话</text>
</view>
<view class="group-input">
<input class="input" type="number" :maxlength="11" v-model="groupMobile" placeholder="请输入团体电话" placeholder-class="placeholder" />
</view>
</view>
<view class="form-group">
<view class="group-title">
<text class="text">团体地址</text>
</view>
<view class="group-input" @click="chooseLocation()">
<view class="input text-ellipsis" v-if="groupAddress.address">{{groupAddress.address}}</view>
<view class="input placeholder text-ellipsis" v-else>请选择团体地址</view>
<image class="icon" src="/static/right.png" mode="aspectFit"></image>
</view>
</view>
<member-apply ref="memberGroup" :show-type="3" :show-data="groupInfo.organize" @onChange="pageChange"></member-apply>
</view>
</block>
</view>
<!-- 底部按钮 -->
<view class="main-footer">
<view class="footer-btn" @click="handleAddProduct()" v-if="selectScreen == 3">添加产品</view>
<view class="footer-btn" @click="heandleSubmit()" v-else>保存信息</view>
<view class="safe-padding"></view>
</view>
</view>
</view>
</template>
<script>
import { mapState } from "vuex"
import memberApply from "@/pages/component/member/apply.vue"
import memberProduct from "@/pages/component/member/product.vue"
export default {
components: {
memberApply,
memberProduct,
},
data() {
return {
// 加载完成
loadEnd: false,
// 标题栏高度
titleBarHeight: 0,
// 入会类型
memberType: 1,
// 已选筛选 1.个人2.企业/团体
selectScreen: 1,
// 个人详情
personInfo: {},
// 企业/团体详情
groupInfo: {},
// 已上传图片列表
uploadedList: [],
// 手机号对外权限
mobileAuth: 1,
// 个人轮播图
personCarousel: [],
// 企业/团体轮播图
groupCarousel: [],
// 已上传个人轮播图
personUploaded: [],
// 已上传企业/团体轮播图
groupUploaded: [],
// 企业/团体电话
groupMobile: "",
// 企业/团体地址
groupAddress: {
latitude: "",
longitude: "",
name: "",
address: "",
},
// 返回计时器
backTimer: null,
}
},
computed: {
...mapState({
themeColor: state => state.app.themeColor,
})
},
mounted() {
// #ifdef MP-WEIXIN
let statusBarHeight = uni.getSystemInfoSync().statusBarHeight
let menuButtonInfo = uni.getMenuButtonBoundingClientRect()
this.titleBarHeight = statusBarHeight + (menuButtonInfo.top - statusBarHeight) * 2 + menuButtonInfo.height
// #endif
},
onLoad() {
uni.showLoading({
title: "加载中"
})
this.getMemberState(() => {
this.loadEnd = true
uni.hideLoading()
})
},
onUnload() {
if (this.backTimer) clearTimeout(this.backTimer)
},
onShow() {
let pages = getCurrentPages();
if (pages[pages.length - 1].$vm.editorContent) {
const result = pages[pages.length - 1].$vm.editorContent
if (this.memberType == 1 || this.selectScreen == 1) this.$refs.memberPerson.setEditorData(result)
else if (this.selectScreen == 2) this.$refs.memberGroup.setEditorData(result)
delete pages[pages.length - 1].$vm.editorContent;
}
if (this.selectScreen == 3) {
this.$refs.memberProduct.getProductList()
}
},
methods: {
// 改变页面滚动状态
pageChange(state) {
this.pageShow = state
},
// 获取会员状态
getMemberState(fn) {
this.$util.request("member.state").then(res => {
if (res.code == 1) {
this.memberState = res.data.state
if (this.memberState.state == 6) {
this.getMemberInfo(fn)
} else if (this.memberState.state == -1) {
uni.hideLoading()
uni.showModal({
title: "系统提示",
content: "您还没有入会,请入会后操作",
cancelText: "返回",
confirmText: "去申请",
success: (res) => {
if (res.confirm) {
this.$util.toPage({
mode: 2,
path: "/pages/member/apply/index"
})
} else {
if (getCurrentPages().length == 1) {
uni.switchTab({
url: "/pages/mine/index"
})
} else {
uni.navigateBack()
}
}
}
})
} else if (this.memberState.state == 7) {
uni.hideLoading()
uni.showModal({
title: "系统提示",
content: "您的会员已过期,请缴纳会费后操作",
cancelText: "返回",
confirmText: "去缴纳",
success: (res) => {
if (res.confirm) {
this.$util.toPage({
mode: 2,
path: "/pages/member/fees/index"
})
} else {
if (getCurrentPages().length == 1) {
uni.switchTab({
url: "/pages/mine/index"
})
} else {
uni.navigateBack()
}
}
}
})
} else {
uni.hideLoading()
uni.showModal({
title: "系统提示",
content: "您已提交入会申请,请通过后操作",
cancelText: "返回",
confirmText: "前往查看",
success: (res) => {
if (res.confirm) {
uni.switchTab({
url: "/pages/mine/index"
})
} else {
if (getCurrentPages().length == 1) {
uni.switchTab({
url: "/pages/index/index"
})
} else {
uni.navigateBack()
}
}
}
})
}
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
}).catch(error => {
console.error('获取会员状态 ', error)
})
},
// 获取会员信息
getMemberInfo(fn) {
this.$util.request("member.information").then(res => {
if (fn) fn()
if (res.code == 1) {
this.mobileAuth = res.data.mobile_auth || 1
this.uploadedList = []
if (res.data.personal_carousel_images) {
this.personCarousel = this.personUploaded = this.splitImages(res.data.personal_carousel_images)
} else this.personCarousel = this.personUploaded = []
if (res.data.company_carousel_images) {
this.groupCarousel = this.groupUploaded = this.splitImages(res.data.company_carousel_images)
} else this.groupCarousel = this.groupUploaded = []
if (res.data.company) {
this.memberType = 2
this.groupInfo = {
person: this.setMemberField(res.data.person, 1),
company: this.setMemberField(res.data.company, 2)
}
this.groupMobile = res.data.company_office_number
this.groupAddress = JSON.parse(res.data.address_json)
} else if (res.data.organize) {
this.memberType = 3
this.groupInfo = {
person: this.setMemberField(res.data.person, 1),
organize: this.setMemberField(res.data.organize, 3)
}
this.groupMobile = res.data.company_office_number
this.groupAddress = JSON.parse(res.data.address_json)
} else {
this.memberType = 1
this.personInfo = this.setMemberField(res.data.person, 1)
}
if (fn) fn()
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
}).catch(error => {
console.error('获取会员信息 ', error)
})
},
// 设置会员字段
setMemberField(data, type) {
let list = JSON.parse(JSON.stringify(data))
if (type == 1) {
list.forEach((item) => {
if (item.type == "checkbox") {
if (item.value) item.value = item.value.split(",")
else item.value = []
} else if (item.type == "text" && item.field == "address") {
if (!item.value) {
item.value = {
latitude: "",
longitude: "",
name: "",
address: ""
}
}
} else if (item.type == "image") {
if (item.field == "avatar") {
if (item.value) {
this.uploadedList.push(item.value)
} else {
item.value = ""
}
} else {
if (item.value) {
if (typeof(item.value) == "string") {
item.value = item.value.split(",")
}
this.uploadedList = [...this.uploadedList, ...item.value]
} else {
item.value = []
}
}
} else if (item.type == "cert") {
if (!item.value) {
item.value = {
name: "",
number: "",
image: "",
}
} else if (item.value.image) {
this.uploadedList.push(item.value.image)
}
} else if (item.type == "video") {
this.uploadedList.push(item.value)
}
if (item.field == "name" || item.field == "mobile" || item.field == "member_level_id") {
item.disabled = true
}
});
} else {
list.forEach((item) => {
if (item.type == "checkbox") {
if (item.value) item.value = item.value.split(",")
else item.value = []
} else if (item.type == "image") {
if ((this.memberType == 2 && item.field == 'company_logo') || (this.memberType == 3 && item.field == 'organize_logo')) {
if (item.value) {
this.uploadedList.push(item.value)
} else {
item.value = ""
}
} else {
if (item.value) {
if (typeof(item.value) == "string") {
item.value = item.value.split(",")
}
this.uploadedList = [...this.uploadedList, ...item.value]
} else {
item.value = []
}
}
} else if (item.type == "cert") {
if (!item.value) {
item.value = {
name: "",
number: "",
image: "",
}
} else if (item.value.image) {
this.uploadedList.push(item.value.image)
}
} else if (item.type == "video") {
this.uploadedList.push(item.value)
}
});
}
return list
},
// 字符串转数组格式图片
splitImages(images) {
try {
if (images) return images.split(',');
else return []
} catch (error) {
return [];
}
},
// 改变筛选
changeScreen(id) {
if (this.selectScreen == id) return
uni.pageScrollTo({
scrollTop: 0,
duration: 0
});
this.selectScreen = id
},
// 改变手机号对外状态
changeMobileAuth(value) {
this.mobileAuth = value
},
// 选择图片
chooseImage() {
// #ifdef MP-WEIXIN
uni.chooseMedia({
count: 9 - this.personCarousel.length,
mediaType: ['image'],
sourceType: ['album', 'camera'],
sizeType: ['compressed'],
success: (res) => {
let list = res.tempFiles.map(item => item.tempFilePath)
if (this.selectScreen == 1) {
this.personCarousel = [...this.personCarousel, ...list]
} else {
this.groupCarousel = [...this.groupCarousel, ...list]
}
}
})
// #endif
// #ifndef MP-WEIXIN
uni.chooseImage({
count: 9 - this.personCarousel.length,
mediaType: ['image'],
sourceType: ['album', 'camera'],
sizeType: ['compressed'],
success: (res) => {
let list = res.tempFilePaths
if (this.selectScreen == 1) {
this.personCarousel = [...this.personCarousel, ...list]
} else {
this.groupCarousel = [...this.groupCarousel, ...list]
}
}
});
// #endif
},
// 删除图片
deleteImage(index) {
if (this.selectScreen == 1) {
this.$delete(this.personCarousel, index)
} else {
this.$delete(this.groupCarousel, index)
}
},
// 预览图片
previewImage(index) {
if (this.selectScreen == 1) {
uni.previewImage({
urls: this.personCarousel,
current: index
});
} else {
uni.previewImage({
urls: this.groupCarousel,
current: index
});
}
},
// 地址选址
chooseLocation() {
uni.chooseLocation({
success: (res) => {
this.groupAddress = {
latitude: res.latitude,
longitude: res.longitude,
name: res.name,
address: res.address
}
}
})
},
// 清除地址
clearLocation() {
this.groupAddress = {
latitude: "",
longitude: "",
name: "",
address: "",
}
},
// 提交申请
heandleSubmit() {
uni.showLoading({
title: "加载中",
mask: true
})
this.$refs.memberPerson.getApplyField((data) => {
// fileList.type => 1.个人资料内图片2.企业资料内图片3.个人轮播图4.企业/团体轮播图
let fileList = []
let personImages = JSON.parse(JSON.stringify(this.personCarousel || []))
let groupImages = JSON.parse(JSON.stringify(this.groupCarousel || []))
for (let i in data) {
// 判断必填项是否为空
if (data[i].required == 1) {
let isEmpty = false
if (data[i].type == "text" && data[i].field == "address") {
if (!data[i].value.address) isEmpty = true
} else if (data[i].type == "checkbox") {
if (!data[i].value.length) isEmpty = true
} else if (data[i].type == "image") {
if (data[i].field == "avatar") {
if (!data[i].value) isEmpty = true
} else {
if (!data[i].value.length) isEmpty = true
}
} else if (data[i].type == "cert") {
if (!data[i].value.name || !data[i].value.number || !data[i].value.image) isEmpty = true
} else {
if (!data[i].value && data[i].value !== 0) isEmpty = true
}
if (isEmpty) {
uni.hideLoading()
uni.showToast({
icon: "none",
title: `${this.memberType == 1 ? "" : "个人资料的"}${data[i].label}不能为空`,
duration: 2000
})
return
}
}
// 判断手机号是否合规
if (data[i].type == "number" && data[i].field == "mobile") {
if (!this.$util.validation("phone", data[i].value)) {
uni.hideLoading()
uni.showToast({
icon: "none",
title: "请输入正确的手机号"
})
return
}
}
// 判断证书是否合规
if (data[i].type == "cert") {
if (data[i].value.name || data[i].value.number || data[i].value.image) {
if (!data[i].value.name || !data[i].value.number || !data[i].value.image) {
uni.hideLoading()
uni.showToast({
icon: "none",
title: data[i].label + "存在未填项"
})
return
}
}
}
// 设置字段值格式
if (data[i].type == "number") {
data[i].value = (data[i].value || data[i].value === 0) ? Number(data[i].value) : data[i].value
} else if (data[i].type == "checkbox") {
data[i].value = data[i].value.join()
} else if (data[i].type == "image") {
if (data[i].field == "avatar") {
if (data[i].value && !this.uploadedList.includes(data[i].value)) {
fileList.push({
type: 1,
index: i,
value: data[i].value
})
}
} else if (data[i].value.length) {
for (let j in data[i].value) {
if (data[i].value[j] && !this.uploadedList.includes(data[i].value[j])) {
fileList.push({
type: 1,
index: i,
number: j,
value: data[i].value[j]
})
}
}
}
} else if (data[i].type == "video") {
if (data[i].value && !this.uploadedList.includes(data[i].value)) {
fileList.push({
type: 1,
index: i,
value: data[i].value
})
}
} else if (data[i].type == "cert") {
if (data[i].value.image && !this.uploadedList.includes(data[i].value.image)) {
fileList.push({
type: 1,
index: i,
value: data[i].value.image
})
}
}
}
if (personImages.length) {
for (let index in personImages) {
if (personImages[index] && !this.personUploaded.includes(personImages[index])) {
fileList.push({
type: 3,
index: index,
value: personImages[index]
})
}
}
}
if (this.memberType == 1) {
if (fileList.length) {
this.uploadFiles(fileList, (files) => {
for (let i in fileList) {
if (fileList[i].type == 3) {
personImages[fileList[i].index] = files[i]
} else {
if (data[fileList[i].index].type == "image") {
if (data[fileList[i].index].field == "avatar") {
data[fileList[i].index].value = files[i]
} else {
data[fileList[i].index].value[fileList[i].number] = files[i]
}
} else if (data[fileList[i].index].type == "video") {
data[fileList[i].index].value = files[i]
} else if (data[fileList[i].index].type == "cert") {
data[fileList[i].index].value.image = files[i]
}
}
}
this.submitEvent({
person: data,
personImages,
})
})
} else {
this.submitEvent({
person: data,
personImages,
})
}
} else {
if (groupImages.length) {
for (var index in groupImages) {
if (groupImages[index] && !this.groupUploaded.includes(groupImages[index])) {
fileList.push({
type: 4,
index: index,
value: groupImages[index]
})
}
}
}
this.$refs.memberGroup.getApplyField((form) => {
for (let j in form) {
// 判断必填项是否为空
if (form[j].required == 1) {
let isEmpty = false
if (form[j].type == "checkbox") {
if (!form[j].value.length) isEmpty = true
} else if (form[j].type == "image") {
if ((this.memberType == 2 && form[j].field == "company_logo") || (this.memberType == 3 && form[j].field == "organize_logo")) {
if (!form[j].value) isEmpty = true
} else {
if (!form[j].value.length) isEmpty = true
}
} else if (form[j].type == "cert") {
if (!form[j].value.name || !form[j].value.number || !form[j].value.image) isEmpty = true
} else {
if (!form[j].value) isEmpty = true
}
if (isEmpty) {
uni.hideLoading()
uni.showToast({
icon: "none",
title: `${this.memberType == 2 ? "企业资料" : "团体资料"}${form[j].label}不能为空`,
duration: 2000
})
return
}
}
// 判断证书是否合规
if (form[j].type == "cert") {
if (form[j].value.name || form[j].value.number || form[j].value.image) {
if (!form[j].value.name || !form[j].value.number || !form[j].value.image) {
uni.hideLoading()
uni.showToast({
icon: "none",
title: form[j].label + "存在未填项"
})
return
}
}
}
// 设置字段值格式
if (form[j].type == "number") {
form[j].value = (form[j].value || form[j].value === 0) ? Number(form[j].value) : form[j].value
} else if (form[j].type == "checkbox") {
form[j].value = form[j].value.join()
} else if (form[j].type == "image") {
if ((this.memberType == 2 && form[j].field == "company_logo") || (this.memberType == 3 && form[j].field == "organize_logo")) {
if (form[j].value && !this.uploadedList.includes(form[j].value)) {
fileList.push({
type: 2,
index: j,
value: form[j].value
})
}
} else if (form[j].value.length) {
for (let z in form[j].value) {
if (!this.uploadedList.includes(form[j].value[z])) {
fileList.push({
type: 2,
index: j,
number: z,
value: form[j].value[z]
})
}
}
}
} else if (form[j].type == "video") {
if (form[j].value && !this.uploadedList.includes(form[j].value)) {
fileList.push({
type: 2,
index: j,
value: form[j].value
})
}
} else if (form[j].type == "cert") {
if (form[j].value.image && !this.uploadedList.includes(form[j].value.image)) {
fileList.push({
type: 2,
index: j,
value: form[j].value.image
})
}
}
}
if (fileList.length) {
this.uploadFiles(fileList, (files) => {
for (let i in fileList) {
if (fileList[i].type == 1) {
if (data[fileList[i].index].type == "image") {
if (data[fileList[i].index].field == "avatar") {
data[fileList[i].index].value = files[i]
} else {
data[fileList[i].index].value[fileList[i].number] = files[i]
}
} else if (data[fileList[i].index].type == "video") {
data[fileList[i].index].value = files[i]
} else if (data[fileList[i].index].type == "cert") {
data[fileList[i].index].value.image = files[i]
}
} else if (fileList[i].type == 3) {
personImages[fileList[i].index] = files[i]
} else if (fileList[i].type == 4) {
groupImages[fileList[i].index] = files[i]
} else {
if (form[fileList[i].index].type == "image") {
if ((this.memberType == 2 && form[fileList[i].index].field == "company_logo") || (this.memberType == 3 && form[fileList[i].index].field == "organize_logo")) {
form[fileList[i].index].value = files[i]
} else {
form[fileList[i].index].value[fileList[i].number] = files[i]
}
} else if (form[fileList[i].index].type == "video") {
form[fileList[i].index].value = files[i]
} else if (form[fileList[i].index].type == "cert") {
form[fileList[i].index].value.image = files[i]
}
}
}
this.submitEvent({
person: data,
group: form,
personImages,
groupImages,
})
})
} else {
this.submitEvent({
person: data,
group: form,
personImages,
groupImages,
})
}
})
}
})
},
// 上传文件
uploadFiles(list, fn) {
this.$util.uploadFileMultiple(list.map(item => item.value)).then(result => {
fn(result)
}).catch(error => {
console.error('上传文件 ', error)
})
},
// 提交事件
submitEvent(data) {
for (let i in data.person) {
if (data.person[i].type == "image" && typeof(data.person[i].value) == "object") {
data.person[i].value = data.person[i].value.join()
}
}
for (let i in data.group) {
if (data.group[i].type == "image" && typeof(data.group[i].value) == "object") {
data.group[i].value = data.group[i].value.join()
}
}
if (data.personImages?.length) {
data.personImages = data.personImages.join()
}
if (data.groupImages?.length) {
data.groupImages = data.groupImages.join()
}
var formData = {}
if (this.memberType == 1) {
formData = data.person
} else if (this.memberType == 2) {
formData.person = data.person
formData.company = data.group
} else if (this.memberType == 3) {
formData.person = data.person
formData.organize = data.group
}
this.$util.request("member.editInformation", {
data: JSON.stringify(formData),
mobile_auth: this.mobileAuth,
personal_carousel_images: data.personImages || "",
...this.memberType != 1 ? {
company_carousel_images: data.groupImages || "",
company_office_number: this.groupMobile || "",
address_json: JSON.stringify(this.groupAddress)
} : {},
}).then(res => {
if (res.code == 1) {
uni.showToast({
mask: true,
title: "保存成功",
icon: "success",
duration: 1500
})
if (this.backTimer) clearTimeout(this.backTimer)
this.backTimer = setTimeout(() => {
this.goBack()
}, 1500);
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
}).catch(error => {
uni.hideLoading()
console.error('编辑资料 ', error)
})
},
// 返回上一页面
goBack() {
if (getCurrentPages().length == 1) {
uni.switchTab({
url: "/pages/mine/index"
})
} else {
uni.navigateBack()
}
},
// 添加产品
handleAddProduct() {
this.$util.toPage({
mode: 1,
path: "/pages/member/product/edit"
})
},
}
}
</script>
<style lang="scss">
.container {
.container-main {
padding-bottom: 112rpx;
.main-header {
position: sticky;
top: 0;
z-index: 96;
.header-screen {
display: flex;
background: #ffffff;
.screen {
width: 50%;
color: #8D929C;
font-size: 28rpx;
line-height: 40rpx;
text-align: center;
padding: 32rpx 24rpx;
&.active {
color: var(--theme-color)
}
}
}
.header-box {
position: relative;
background: linear-gradient(0deg, #F6F7FB, var(--theme-color) 316.667%);
padding: 40rpx 48rpx;
.box-image {
position: absolute;
top: 64rpx;
right: 48rpx;
width: 218rpx;
height: 198rpx;
background-size: 218rpx 198rpx;
}
.box-title {
color: var(--theme-color);
font-size: 48rpx;
font-weight: 600;
line-height: 68rpx;
position: relative;
z-index: 1;
}
.box-subtitle {
margin-top: 32rpx;
color: #999999;
font-size: 28rpx;
line-height: 40rpx;
position: relative;
z-index: 1;
}
}
}
.main-form {
padding: 22rpx 48rpx 32rpx;
.form-group {
margin-bottom: 32rpx;
.group-title {
color: #5A5B6E;
font-size: 32rpx;
font-weight: 600;
line-height: 44rpx;
.tips {
font-size: 28rpx;
font-weight: 400;
color: #666666;
}
}
.group-upload {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-top: 32rpx;
row-gap: 24rpx;
.upload-image {
position: relative;
width: 48%;
height: 0;
padding-top: 24%;
.image-select {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 10rpx;
}
.image-delete {
position: absolute;
top: 8rpx;
right: 8rpx;
width: 32rpx;
height: 32rpx;
}
.image-choose {
position: absolute;
top: 20rpx;
left: 20rpx;
right: 20rpx;
bottom: 20rpx;
z-index: 6;
display: flex;
justify-content: center;
align-items: center;
background: #FFF;
border-radius: 10rpx;
.icon {
width: 48rpx;
height: 48rpx;
padding: 12rpx;
background: var(--theme-color);
border-radius: 50%;
}
.text {
margin-left: 16rpx;
color: var(--theme-color);
font-size: 28rpx;
line-height: 40rpx;
}
}
.image-background {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
background: var(--theme-color);
opacity: 0.08;
}
}
}
.group-input {
margin-top: 32rpx;
display: flex;
align-items: center;
border-radius: 16rpx;
background: #FFF;
.input {
color: #5A5B6E;
font-size: 28rpx;
height: 104rpx;
line-height: 104rpx;
flex: 1;
padding: 0 32rpx;
}
.placeholder {
color: #ACADB7;
}
.icon {
width: 32rpx;
height: 32rpx;
padding-right: 32rpx;
}
}
}
}
.main-footer {
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 96;
background: #ffffff;
border-top: 1rpx solid #F6F7FB;
padding: 12rpx 24rpx;
.footer-btn {
color: #ffffff;
font-size: 32rpx;
line-height: 44rpx;
padding: 22rpx 24rpx;
border-radius: 16rpx;
background: var(--theme-color);
text-align: center;
}
}
}
}
</style>