134cad71 by 张猛

会员认证

1 parent d71abcc3
......@@ -35,29 +35,29 @@
</template>
<script setup>
import {
import {
ref
} from 'vue'
import {
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
import to from 'await-to-js'
import * as api from '@/common/api.js'
} from '@dcloudio/uni-app'
import to from 'await-to-js'
import * as api from '@/common/api.js'
const orderInfo = ref({
const orderInfo = ref({
orderId: '',
tradeNo: '',
merchantName: '中国跆拳道协会',
price: ''
})
})
const goBack = () => {
const goBack = () => {
uni.reLaunch({
url: '/myCenter/auth'
url: '/pages/index/home'
})
}
}
onLoad(async (option) => {
onLoad(async (option) => {
// if (option.orderId) {
// const [err, res] = await to(api.getOrderInfo(option.orderId))
// if (!err && res.data) {
......@@ -66,12 +66,12 @@
// orderInfo.value.orderId = option.orderId
// }
// }
})
})
</script>
<style scoped>
/* 全局容器 */
.success-container {
/* 全局容器 */
.success-container {
display: flex;
flex-direction: column;
align-items: center;
......@@ -79,16 +79,16 @@
min-height: 100vh;
background-color: #f8f9fa;
box-sizing: border-box;
}
}
/* 成功图标容器 */
.success-icon {
/* 成功图标容器 */
.success-icon {
margin-bottom: 40rpx;
animation: fadeIn 0.6s ease-out;
}
}
/* 渐变圆形背景 */
.icon-circle {
/* 渐变圆形背景 */
.icon-circle {
width: 180rpx;
height: 180rpx;
border-radius: 50%;
......@@ -100,34 +100,34 @@
box-shadow: 0 8rpx 30rpx rgba(6, 193, 174, 0.3);
/* 轻微上浮动效 */
animation: scaleIn 0.8s ease-out;
}
}
/* 对勾图标 */
.check-icon {
/* 对勾图标 */
.check-icon {
font-size: 90rpx;
color: #ffffff;
font-weight: bold;
}
}
/* 支付成功标题 */
.success-title {
/* 支付成功标题 */
.success-title {
font-size: 48rpx;
font-weight: 700;
color: #333333;
margin-bottom: 12rpx;
animation: slideUp 0.6s ease-out;
}
}
/* 副标题 */
.success-subtitle {
/* 副标题 */
.success-subtitle {
font-size: 28rpx;
color: #666666;
margin-bottom: 60rpx;
animation: slideUp 0.8s ease-out;
}
}
/* 订单信息卡片 */
.info-card {
/* 订单信息卡片 */
.info-card {
width: 100%;
background: #ffffff;
border-radius: 20rpx;
......@@ -135,55 +135,55 @@
box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.05);
margin-bottom: 80rpx;
animation: fadeIn 1s ease-out;
}
}
/* 单个信息项 */
.info-item {
/* 单个信息项 */
.info-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 24rpx 0;
border-bottom: 1rpx solid #f5f5f5;
}
}
/* 最后一项去掉下划线 */
.info-item:last-child {
/* 最后一项去掉下划线 */
.info-item:last-child {
border-bottom: none;
}
}
/* 标签样式 */
.label {
/* 标签样式 */
.label {
font-size: 32rpx;
color: #666666;
white-space: nowrap;
margin-right: 20rpx;
flex-shrink: 0;
}
}
/* 值样式 */
.value {
/* 值样式 */
.value {
font-size: 32rpx;
color: #333333;
text-align: right;
word-break: break-all;
word-wrap: break-word;
}
}
/* 金额特殊样式 */
.amount {
/* 金额特殊样式 */
.amount {
color: #cd1e27;
font-weight: 600;
}
}
/* 确定按钮区域 */
.confirm-btn-area {
/* 确定按钮区域 */
.confirm-btn-area {
width: 100%;
padding: 0 20rpx;
box-sizing: border-box;
}
}
/* 确定按钮(渐变+动效) */
.confirm-btn {
/* 确定按钮(渐变+动效) */
.confirm-btn {
width: 100%;
height: 90rpx;
line-height: 90rpx;
......@@ -198,20 +198,20 @@
/* 禁止默认样式 */
position: relative;
overflow: hidden;
}
}
/* 按钮点击反馈 */
.confirm-btn::after {
/* 按钮点击反馈 */
.confirm-btn::after {
border: none;
}
}
.confirm-btn:active {
.confirm-btn:active {
transform: scale(0.98);
box-shadow: 0 4rpx 10rpx rgba(6, 193, 174, 0.2);
}
}
/* 动画定义 */
@keyframes fadeIn {
/* 动画定义 */
@keyframes fadeIn {
0% {
opacity: 0;
}
......@@ -219,9 +219,9 @@
100% {
opacity: 1;
}
}
}
@keyframes scaleIn {
@keyframes scaleIn {
0% {
transform: scale(0);
}
......@@ -233,9 +233,9 @@
100% {
transform: scale(1);
}
}
}
@keyframes slideUp {
@keyframes slideUp {
0% {
opacity: 0;
transform: translateY(30rpx);
......@@ -245,5 +245,5 @@
opacity: 1;
transform: translateY(0);
}
}
}
</style>
......
......@@ -22,16 +22,20 @@
</view>
<view class="unit-member-box">
<view class="unit-btn" @click="goPath('/myCenter/auth')">
<image :src="config.loginImage_api + '/fs/static/dg/icon02@3x.png'" class="btn-icon"></image><text>基本信息</text>
<image :src="config.loginImage_api + '/fs/static/dg/icon02@3x.png'" class="btn-icon"></image>
<text>基本信息</text>
</view>
<view class="unit-btn" @click="goPath('/myCenter/perfect')">
<image :src="config.loginImage_api + '/fs/static/dg/icon03@3x.png'" class="btn-icon"></image><text>认证缴费</text>
<image :src="config.loginImage_api + '/fs/static/dg/icon03@3x.png'" class="btn-icon"></image>
<text>认证缴费</text>
</view>
<view class="unit-btn" @click="goPath('/myCenter/reviewList')">
<image :src="config.loginImage_api + '/fs/static/dg/icon04@3x.png'" class="btn-icon"></image><text>认证详情</text>
<image :src="config.loginImage_api + '/fs/static/dg/icon04@3x.png'" class="btn-icon"></image>
<text>认证详情</text>
</view>
<view class="unit-btn " @click="goPath('/myCenter/examPointApplyList')">
<image :src="config.loginImage_api + '/fs/static/dg/icon05@3x.png'" class="btn-icon"></image><text>考点申请</text>
<image :src="config.loginImage_api + '/fs/static/dg/icon05@3x.png'" class="btn-icon"></image>
<text>考点申请</text>
</view>
<!-- <view class="unit-btn mt-20" @click="goPath('/myCenter/examPointApplyList')">
<image :src="config.loginImage_api + '/fs/static/dg/icon06@3x.png'" class="btn-icon"></image><text>考点详情</text>
......@@ -42,38 +46,54 @@
</view>
</view>
<view class="section personal-section">
<view class="flex f-a-c"><text class="title-border"></text>
<text class="section-title">个人会员</text></view>
<view class="flex f-a-c">
<text class="title-border"></text>
<text class="section-title">个人会员</text>
</view>
<view class="personal-member-box">
<view class="personal-btn" @click="goPath('/personalVip/addVip')">
<image :src="config.loginImage_api + '/fs/static/dg/home_btn01@3x.png'" class="circle-icon"></image><text>添加会员</text>
<image :src="config.loginImage_api + '/fs/static/dg/home_btn01@3x.png'" class="circle-icon"></image>
<text>添加会员</text>
</view>
<view class="personal-btn" @click="goPath('/personalVip/payment')">
<image :src="config.loginImage_api + '/fs/static/dg/home_btn02@3x.png'" class="circle-icon"></image><text>会员缴费</text>
<image :src="config.loginImage_api + '/fs/static/dg/home_btn02@3x.png'" class="circle-icon"></image>
<text>会员缴费</text>
</view>
<view class="personal-btn" @click="goPath('/personalVip/list')">
<image :src="config.loginImage_api + '/fs/static/dg/home_btn03@3x.png'" class="circle-icon"></image><text>会员查询</text>
<image :src="config.loginImage_api + '/fs/static/dg/home_btn03@3x.png'" class="circle-icon"></image>
<text>会员查询</text>
</view>
<view class="personal-btn" @click="goPath('/personalVip/mobilize')">
<image :src="config.loginImage_api + '/fs/static/dg/btn04@3x.png'" class="circle-icon"></image><text>会员调动</text>
<image :src="config.loginImage_api + '/fs/static/dg/btn04@3x.png'" class="circle-icon"></image>
<text>会员调动</text>
</view>
</view>
</view>
<view class="section level-section">
<view class="flex f-a-c"><text class="title-border"></text>
<text class="section-title">级位管理</text></view>
<view class="flex f-a-c">
<text class="title-border"></text>
<text class="section-title">级位管理</text>
</view>
<view class="level-list">
<view class="level-item" @click="goPath('/level/apply')">
<image :src="config.loginImage_api + '/fs/static/dg/icon07@3x.png'" class="level-icon"></image><text>级位考试</text><view class="arrow"></view>
<image :src="config.loginImage_api + '/fs/static/dg/icon07@3x.png'" class="level-icon"></image>
<text>级位考试</text>
<view class="arrow"></view>
</view>
<view class="level-item" @click="goPath('/personalVip/changeLevel')">
<image :src="config.loginImage_api + '/fs/static/dg/icon08@3x.png'" class="level-icon"></image><text>级位变更</text><view class="arrow"></view>
<image :src="config.loginImage_api + '/fs/static/dg/icon08@3x.png'" class="level-icon"></image>
<text>级位变更</text>
<view class="arrow"></view>
</view>
<view class="level-item" @click="goPath('/pages/index/msgList')">
<image :src="config.loginImage_api + '/fs/static/dg/icon09@3x.png'" class="level-icon"></image><text>通知公告</text><view class="arrow"></view>
<image :src="config.loginImage_api + '/fs/static/dg/icon09@3x.png'" class="level-icon"></image>
<text>通知公告</text>
<view class="arrow"></view>
</view>
<view class="level-item" @click="goPath('/myCenter/order?type=2')">
<image :src="config.loginImage_api + '/fs/static/dg/icon10@3x.png'" class="level-icon"></image><text>我的订单</text><view class="arrow"></view>
<image :src="config.loginImage_api + '/fs/static/dg/icon10@3x.png'" class="level-icon"></image>
<text>我的订单</text>
<view class="arrow"></view>
</view>
</view>
</view>
......@@ -490,24 +510,27 @@
</view>
<!-- 绑定手机号弹框 -->
<uni-popup ref="bindingPhonePopup" type="center" :mask-click="false">
<uni-popup ref="bindingPhonePopup" :mask-click="false" type="center">
<view class="dialog-wrapper">
<view class="dialog-close" @click="closeBindingPhoneDialog"></view>
<view class="dialog-icon">
<uni-icons type="phone" size="48" color="#AD181F"></uni-icons>
<uni-icons color="#AD181F" size="48" type="phone"></uni-icons>
</view>
<view class="dialog-title">绑定手机号</view>
<view class="dialog-content">
<view class="form-item">
<input class="form-input" v-model="bindingForm.phone" placeholder="请输入手机号" maxlength="11" type="number" />
<input v-model="bindingForm.phone" class="form-input" maxlength="11" placeholder="请输入手机号"
type="number"/>
</view>
<view class="form-item captcha-row">
<input class="form-input captcha-input" v-model="bindingForm.captcha" placeholder="图形验证码" maxlength="4" />
<image class="captcha-img" :src="captchaUrl" @click="refreshCaptcha" mode="aspectFit"></image>
<input v-model="bindingForm.captcha" class="form-input captcha-input" maxlength="4"
placeholder="图形验证码"/>
<image :src="captchaUrl" class="captcha-img" mode="aspectFit" @click="refreshCaptcha"></image>
</view>
<view class="form-item captcha-row">
<input class="form-input sms-input" v-model="bindingForm.code" placeholder="短信验证码" maxlength="6" type="number" />
<button class="sms-btn" :disabled="smsCountdown > 0" @click="sendSmsCode">
<input v-model="bindingForm.code" class="form-input sms-input" maxlength="6" placeholder="短信验证码"
type="number"/>
<button :disabled="smsCountdown > 0" class="sms-btn" @click="sendSmsCode">
{{ smsCountdown > 0 ? smsCountdown + 's' : '获取验证码' }}
</button>
</view>
......@@ -520,11 +543,11 @@
</uni-popup>
<!-- 申请成为考点弹框 -->
<uni-popup ref="examPointPopup" type="center" :mask-click="false">
<uni-popup ref="examPointPopup" :mask-click="false" type="center">
<view class="dialog-wrapper exam-dialog">
<view class="dialog-close" @click="closeExamPointDialog"></view>
<view class="dialog-icon success-icon">
<uni-icons type="checkmark" size="48" color="#29c490"></uni-icons>
<uni-icons color="#29c490" size="48" type="checkmark"></uni-icons>
</view>
<view class="dialog-title">申请成为考点</view>
<view class="dialog-message">
......@@ -547,6 +570,7 @@
import * as api from '@/common/api.js';
import * as loginServer from '@/common/login.js';
import config from '@/config.js'
import {getInfo} from '@/common/login'
import {
onLoad,
onShow,
......@@ -830,15 +854,15 @@ function sendSmsCode() {
const phone = bindingForm.value.phone
const strTemp = /^1[2|3|4|5|6|7|8|9][0-9]{9}$/
if (!phone) {
uni.showToast({ title: '请输入手机号', icon: 'none' })
uni.showToast({title: '请输入手机号', icon: 'none'})
return
}
if (!strTemp.test(phone)) {
uni.showToast({ title: '请输入正确的手机号', icon: 'none' })
uni.showToast({title: '请输入正确的手机号', icon: 'none'})
return
}
if (!bindingForm.value.captcha) {
uni.showToast({ title: '请输入图形验证码', icon: 'none' })
uni.showToast({title: '请输入图形验证码', icon: 'none'})
return
}
api.getSmsCode({
......@@ -846,7 +870,7 @@ function sendSmsCode() {
telNo: phone,
captcha: bindingForm.value.captcha
}).then(res => {
uni.showToast({ title: '发送成功', icon: 'success' })
uni.showToast({title: '发送成功', icon: 'success'})
smsCountdown.value = 60
smsTimer = setInterval(() => {
smsCountdown.value--
......@@ -865,25 +889,25 @@ function closeBindingPhoneDialog() {
}
async function submitBindingPhone() {
const { phone, captcha, code, uuid } = bindingForm.value
const {phone, captcha, code, uuid} = bindingForm.value
if (!phone) {
uni.showToast({ title: '请输入手机号', icon: 'none' })
uni.showToast({title: '请输入手机号', icon: 'none'})
return
}
if (!captcha) {
uni.showToast({ title: '请输入图形验证码', icon: 'none' })
uni.showToast({title: '请输入图形验证码', icon: 'none'})
return
}
if (!code) {
uni.showToast({ title: '请输入短信验证码', icon: 'none' })
uni.showToast({title: '请输入短信验证码', icon: 'none'})
return
}
try {
await api.editPhone({ phone, captcha, code, uuid })
uni.showToast({ title: '修改成功', icon: 'success' })
await api.editPhone({phone, captcha, code, uuid})
uni.showToast({title: '修改成功', icon: 'success'})
closeBindingPhoneDialog()
setTimeout(() => {
uni.reLaunch({ url: '/pages/index/home' })
uni.reLaunch({url: '/pages/index/home'})
}, 1500)
} catch (e) {
// 错误已由 request.js 处理
......@@ -897,11 +921,12 @@ function closeExamPointDialog() {
function goExamPointApply() {
closeExamPointDialog()
uni.navigateTo({ url: '/myCenter/examPointApplyList' })
uni.navigateTo({url: '/myCenter/examPointApplyList'})
}
async function handleNoDisplay() {
await api.noDisplay()
await getInfo()
closeExamPointDialog()
}
......@@ -934,9 +959,11 @@ function checkDialogs() {
:deep(.uni-section) {
background-color: transparent !important;
}
.mt-20{
.mt-20 {
margin-top: -20rpx;
}
.page {
width: 100vw;
overflow: hidden;
......@@ -954,7 +981,7 @@ function checkDialogs() {
}
.welcome {
padding: 30rpx ;
padding: 30rpx;
line-height: 48rpx;
font-size: 32rpx;
......@@ -1136,12 +1163,14 @@ function checkDialogs() {
}
.section-title {
.section-title {
font-size: 32rpx;
font-weight: bold;
color: #fff;
margin-bottom: 20rpx;
}
}
.personal-section {
.personal-member-box {
display: flex;
......@@ -1281,6 +1310,7 @@ function checkDialogs() {
border-radius: 16rpx;
padding: 0;
margin: 0;
&::after {
border: none;
}
......@@ -1306,6 +1336,7 @@ function checkDialogs() {
font-weight: 500;
padding: 0;
margin: 0;
&::after {
border: none;
}
......
......@@ -2,17 +2,17 @@
<view class="perfect-page">
<!-- 顶部步骤条 -->
<view class="steps-bar">
<view class="step-item" :class="{ active: activeStep >= 1, current: activeStep == 1 }" @click="switchStep(1)">
<view :class="{ active: activeStep >= 1, current: activeStep == 1 }" class="step-item" @click="switchStep(1)">
<view class="step-circle">1</view>
<view class="step-text">完善信息</view>
</view>
<view class="step-line" :class="{ active: activeStep >= 2 }"></view>
<view class="step-item" :class="{ active: activeStep >= 2, current: activeStep == 2 }" @click="switchStep(2)">
<view :class="{ active: activeStep >= 2 }" class="step-line"></view>
<view :class="{ active: activeStep >= 2, current: activeStep == 2 }" class="step-item" @click="switchStep(2)">
<view class="step-circle">2</view>
<view class="step-text">会员认证</view>
</view>
<view class="step-line" :class="{ active: activeStep >= 3 }"></view>
<view class="step-item" :class="{ active: activeStep >= 3, current: activeStep == 3 }" @click="switchStep(3)">
<view :class="{ active: activeStep >= 3 }" class="step-line"></view>
<view :class="{ active: activeStep >= 3, current: activeStep == 3 }" class="step-item" @click="switchStep(3)">
<view class="step-circle">3</view>
<view class="step-text">审核详情</view>
</view>
......@@ -40,10 +40,11 @@
<!-- <text class="logout-text">退出账号</text> -->
</view>
<!-- 步骤1:完善信息 -->
<view class="wBox" v-if="activeStep == 1">
<view v-if="activeStep == 1" class="wBox">
<uni-forms ref="baseForm" :modelValue="form" label-width="70">
<uni-forms-item label="单位名称" required>
<uni-easyinput class="input-with-border" v-model="form.baseName" :disabled="!editIng" placeholder="单位名称" />
<uni-easyinput v-model="form.baseName" :disabled="!editIng" class="input-with-border"
placeholder="单位名称"/>
</uni-forms-item>
<uni-forms-item label="单位类型" required>
<view style="width: 100%;">
......@@ -51,13 +52,16 @@
</view>
</uni-forms-item>
<uni-forms-item label="联系人" required>
<uni-easyinput class="input-with-border" v-model="form.contact" :disabled="!editIng" placeholder="请输入联系人姓名" />
<uni-easyinput v-model="form.contact" :disabled="!editIng" class="input-with-border"
placeholder="请输入联系人姓名"/>
</uni-forms-item>
<uni-forms-item label="联系方式" required>
<uni-easyinput class="input-with-border" v-model="form.phone" :disabled="!editIng" placeholder="请输入联系方式" />
<uni-easyinput v-model="form.phone" :disabled="!editIng" class="input-with-border"
placeholder="请输入联系方式"/>
</uni-forms-item>
<uni-forms-item label="机构介绍" required>
<uni-easyinput class="input-with-border" v-model="form.introduce" placeholder="请输入机构介绍" :disabled="!editIng" type='textarea' />
<uni-easyinput v-model="form.introduce" :disabled="!editIng" class="input-with-border"
placeholder="请输入机构介绍" type='textarea'/>
</uni-forms-item>
</uni-forms>
<view class="fixedBottom">
......@@ -66,7 +70,7 @@
</view>
<!-- 步骤2:会员认证 -->
<view class="wBox" v-if="activeStep == 2">
<view v-if="activeStep == 2" class="wBox">
<view class="status-box">
<view class="status-row">
<text class="status-label">认证状态:</text>
......@@ -87,38 +91,42 @@
<uni-forms-item label="选择所属协会" required>
<view class="picker-wrapper">
<uni-data-picker
class="custom-picker"
:disabled="!editIng"
v-model="form.parentId"
:localdata="assoList"
:disabled="!editIng"
:level="3"
:localdata="assoList"
class="custom-picker"
popup-title="请选择所属协会"
@change="changCase"
></uni-data-picker>
</view>
</uni-forms-item>
<uni-forms-item label="机构名称" required>
<uni-easyinput class="input-with-border" v-model="form.name" :disabled="!editIng" placeholder="请输入机构名称" />
<uni-easyinput v-model="form.name" :disabled="!editIng" class="input-with-border"
placeholder="请输入机构名称"/>
</uni-forms-item>
<uni-forms-item label="认证地址" required>
<view class="picker-wrapper">
<uni-data-picker
class="custom-picker"
v-model="coordinates1"
:localdata="regionOptions"
class="custom-picker"
popup-title="请选择所在地区"
@change="changeAddress"
></uni-data-picker>
</view>
</uni-forms-item>
<uni-forms-item label="认证详细地址" required>
<uni-easyinput class="input-with-border" v-model="form.adress" :disabled="!editIng" placeholder="请输入详细地址" />
<uni-easyinput v-model="form.adress" :disabled="!editIng" class="input-with-border"
placeholder="请输入详细地址"/>
</uni-forms-item>
<uni-forms-item label="联系人" required>
<uni-easyinput class="input-with-border" v-model="form.siteContact" :disabled="!editIng" placeholder="请输入联系人" />
<uni-easyinput v-model="form.siteContact" :disabled="!editIng" class="input-with-border"
placeholder="请输入联系人"/>
</uni-forms-item>
<uni-forms-item label="联系方式" required>
<uni-easyinput class="input-with-border" v-model="form.siteTel" :disabled="!editIng" placeholder="请输入联系方式" />
<uni-easyinput v-model="form.siteTel" :disabled="!editIng" class="input-with-border"
placeholder="请输入联系方式"/>
</uni-forms-item>
<uni-forms-item label="营业执照" required>
<view class="upload-box">
......@@ -126,16 +134,25 @@
<image :src="config.baseUrl_api + '/fs/static/yyzz@2x.png'" class="placeholder-img"/>
</view>
<view v-else class="license-preview">
<image :src="getImageUrl(getBusinessLicenseUrl())" class="license-img" @click="previewImage(getImageUrl(getBusinessLicenseUrl()))"></image>
<view class="delete-btn" v-if="editIng" @click="removeBusinessLicense">×</view>
<image :src="getImageUrl(getBusinessLicenseUrl())" class="license-img"
@click="previewImage(getImageUrl(getBusinessLicenseUrl()))"></image>
<view v-if="editIng" class="delete-btn" @click="removeBusinessLicense">×</view>
</view>
</view>
</uni-forms-item>
<uni-forms-item label="营业执照名称" required>
<uni-easyinput class="input-with-border" v-model="form.companyName" :disabled="!editIng" placeholder="请输入营业执照名称" />
<uni-easyinput v-model="form.companyName" :disabled="!editIng" class="input-with-border"
placeholder="请输入营业执照名称"/>
</uni-forms-item>
<uni-forms-item label="社会信用代码" required>
<uni-easyinput class="input-with-border" v-model="form.creditCode" :disabled="!editIng" placeholder="请输入社会信用代码" @blur="onCreditCodeBlur" />
<uni-easyinput
v-model="form.creditCode"
:disabled="!editIng"
class="input-with-border"
placeholder="请输入社会信用代码"
@blur="onCreditCodeBlur"
@change="onCreditCodeBlur"
/>
</uni-forms-item>
<uni-forms-item label="法人身份证" required>
<view class="idcard-box">
......@@ -144,8 +161,9 @@
<image :src="config.baseUrl_api + '/fs/static/sfz_zm@2x.png'" class="placeholder-img"/>
</view>
<view v-else class="idcard-preview">
<image :src="getImageUrl(form.legalIdcPhoto1)" class="idcard-img" @click="previewImage(getImageUrl(form.legalIdcPhoto1))"></image>
<view class="delete-btn" v-if="editIng" @click="removeIdCardFront">×</view>
<image :src="getImageUrl(form.legalIdcPhoto1)" class="idcard-img"
@click="previewImage(getImageUrl(form.legalIdcPhoto1))"></image>
<view v-if="editIng" class="delete-btn" @click="removeIdCardFront">×</view>
</view>
</view>
</view>
......@@ -155,17 +173,20 @@
<image :src="config.baseUrl_api + '/fs/static/sfz_fm@2x.png'" class="placeholder-img"/>
</view>
<view v-else class="idcard-preview">
<image :src="getImageUrl(form.legalIdcPhoto2)" class="idcard-img" @click="previewImage(getImageUrl(form.legalIdcPhoto2))"></image>
<view class="delete-btn" v-if="editIng" @click="removeIdCardBack">×</view>
<image :src="getImageUrl(form.legalIdcPhoto2)" class="idcard-img"
@click="previewImage(getImageUrl(form.legalIdcPhoto2))"></image>
<view v-if="editIng" class="delete-btn" @click="removeIdCardBack">×</view>
</view>
</view>
</view>
</uni-forms-item>
<uni-forms-item label="法人姓名" required>
<uni-easyinput class="input-with-border" v-model="form.legal" :disabled="!editIng" placeholder="请输入法人姓名" />
<uni-easyinput v-model="form.legal" :disabled="!editIng" class="input-with-border"
placeholder="请输入法人姓名"/>
</uni-forms-item>
<uni-forms-item label="法人证件号" required>
<uni-easyinput class="input-with-border" v-model="form.legalIdcCode" :disabled="!editIng" placeholder="请输入法人证件号" />
<uni-easyinput v-model="form.legalIdcCode" :disabled="!editIng" class="input-with-border"
placeholder="请输入法人证件号"/>
</uni-forms-item>
<uni-forms-item label="上传机构照片" required>
<view class="pictures-box">
......@@ -173,8 +194,9 @@
<image :src="config.baseUrl_api + '/fs/static/jgzp@2x.png'" class="placeholder-img"/>
</view>
<view v-else class="pictures-preview">
<image :src="getImageUrl(form.pictures.split(',')[0])" class="picture-img" @click="previewImage(form.pictures.split(',').map(url => getImageUrl(url)))"></image>
<view class="delete-btn" v-if="editIng" @click="removePictures">×</view>
<image :src="getImageUrl(form.pictures.split(',')[0])" class="picture-img"
@click="previewImage(form.pictures.split(',').map(url => getImageUrl(url)))"></image>
<view v-if="editIng" class="delete-btn" @click="removePictures">×</view>
</view>
</view>
</uni-forms-item>
......@@ -182,7 +204,7 @@
<view class="notice-box">
<checkbox-group @change="onNoticeChange">
<label class="notice-label">
<checkbox :checked="form.notice" value="1" color="#e64329" />
<checkbox :checked="form.notice" color="#e64329" value="1"/>
<text class="notice-text">我已阅读并同意</text>
<text class="notice-link" @click.stop="showNotice(1)">《注册须知》</text>
<text class="notice-link" @click.stop="showNotice(2)">《入会须知》</text>
......@@ -195,12 +217,12 @@
<view class="fixedBottom">
<button class="btn-gray" @click="activeStep = 1">上一步</button>
<button class="btn-red" :disabled="btn" @click="submitStep2()">下一步</button>
<button :disabled="btn" class="btn-red" @click="submitStep2()">下一步</button>
</view>
</view>
<!-- 步骤3:审核详情(只展示,无提交按钮) -->
<view class="wBox" v-if="activeStep == 3">
<view v-if="activeStep == 3" class="wBox">
<view class="audit-detail">
<view class="audit-title">审核详情</view>
<view v-if="auditLoading" class="loading-box">
......@@ -209,14 +231,16 @@
<view v-else-if="auditList.length === 0" class="empty-box">
<text>暂无审核记录</text>
</view>
<view class="audit-list" v-else>
<view class="audit-item" v-for="(item, index) in auditList" :key="index">
<view v-else class="audit-list">
<view v-for="(item, index) in auditList" :key="index" class="audit-item">
<view class="audit-item-header">
<text class="audit-dept">{{ item.auditDeptName || '待审核' }}</text>
<text class="audit-status" :class="getAuditStatusClass(item.auditResult)">{{ getAuditStatusText(item.auditResult) }}</text>
<text :class="getAuditStatusClass(item.auditResult)" class="audit-status">
{{ getAuditStatusText(item.auditResult) }}
</text>
</view>
<view class="audit-item-body">
<view class="audit-row" >
<view class="audit-row">
<text class="audit-label">审核日期:</text>
<text class="audit-value">{{ formatDate(item.auditTime) }}</text>
</view>
......@@ -239,40 +263,40 @@
<!-- 自定义弹框 -->
<custom-modal
ref="customModalRef"
:title="modalConfig.title"
:cancelText="modalConfig.cancelText"
:confirmText="modalConfig.confirmText"
:content="modalConfig.content"
:isHtml="modalConfig.isHtml"
:showCancel="modalConfig.showCancel"
:showConfirm="modalConfig.showConfirm"
:cancelText="modalConfig.cancelText"
:confirmText="modalConfig.confirmText"
@confirm="onModalConfirm"
:title="modalConfig.title"
@cancel="onModalCancel"
@confirm="onModalConfirm"
></custom-modal>
</template>
<script setup>
import {
import {
ref,
reactive,
computed,
watch
} from 'vue';
import * as api from '@/common/api.js';
import {
} from 'vue';
import * as api from '@/common/api.js';
import {
onLoad,
onShow
} from '@dcloudio/uni-app';
import config from '@/config.js'
import customModal from '@/components/custom-modal.vue'
// import uniDataSelect from '@/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue'
const app = getApp();
} from '@dcloudio/uni-app';
import config from '@/config.js'
import customModal from '@/components/custom-modal.vue'
// import uniDataSelect from '@/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue'
const app = getApp();
// 自定义弹框 ref
const customModalRef = ref(null)
// 自定义弹框 ref
const customModalRef = ref(null)
// 弹框配置
const modalConfig = ref({
// 弹框配置
const modalConfig = ref({
title: '',
content: '',
isHtml: false,
......@@ -280,24 +304,24 @@
showConfirm: true,
cancelText: '取消',
confirmText: '确定'
})
})
// 弹框确认回调
function onModalConfirm() {
// 弹框确认回调
function onModalConfirm() {
if (modalConfig.value.onConfirm) {
modalConfig.value.onConfirm()
}
}
}
// 弹框取消回调
function onModalCancel() {
// 弹框取消回调
function onModalCancel() {
if (modalConfig.value.onCancel) {
modalConfig.value.onCancel()
}
}
}
// 显示自定义弹框方法
function showModal(options) {
// 显示自定义弹框方法
function showModal(options) {
modalConfig.value = {
title: options.title || '',
content: options.content || '',
......@@ -310,107 +334,112 @@
onCancel: options.onCancel
}
customModalRef.value?.open()
}
}
const form = ref({
const form = ref({
type: '1',
notice: false
});
});
// 类型列表
const typeList = ref([{
// 类型列表
const typeList = ref([{
value: '1',
text: '企业'
}, {
}, {
value: '2',
text: '国家组织'
}, {
}, {
value: '3',
text: '社会组织'
}, {
}, {
value: '4',
text: '其他'
}])
}])
// 类型索引
const typeIndex = computed(() => {
// 类型索引
const typeIndex = computed(() => {
return typeList.value.findIndex(item => String(item.value) === String(form.value.type))
})
})
// 类型选择
function typeChange(e) {
// 类型选择
function typeChange(e) {
const index = e.detail.value
form.value.type = typeList.value[index].value
}
}
// 地址选项
const options = ref([])
const regionOptions = ref([])
// 地址选项
const options = ref([])
const regionOptions = ref([])
// 协会树
const assoList = ref([])
const assoFullName = ref('') // 协会完整路径名称
// 协会树
const assoList = ref([])
const assoFullName = ref('') // 协会完整路径名称
// 步骤相关
const activeStep = ref(1)
const list1 = ref([{
// 步骤相关
const activeStep = ref(1)
const list1 = ref([{
title: '完善信息'
}, {
}, {
title: '会员认证'
}])
const creditCode = ref('')
// 编辑状态
const editIng = ref(true);
}])
const creditCode = ref('')
// 编辑状态
const editIng = ref(true);
// 认证状态
const authenticationStatus = ref()
const result = ref(false)
// 认证状态
const authenticationStatus = ref()
const result = ref(false)
// 地址级联
const coordinates1 = ref([])
// 地址级联
const coordinates1 = ref([])
// 按钮状态
const btn = ref(false)
// 按钮状态
const btn = ref(false)
// 费用相关
const memberFee = ref('')
const preferentialPolicy = ref(false)
const preferentialData = ref({})
// 费用相关
const memberFee = ref('')
const preferentialPolicy = ref(false)
const preferentialData = ref({})
// 考点审核状态
const auditStatus = ref('0')
// 考点审核状态
const auditStatus = ref('0')
// 审核详情
const auditList = ref([])
const auditLoading = ref(false)
// 审核详情
const auditList = ref([])
const auditLoading = ref(false)
// 社会信用代码校验状态(true=校验通过,false=校验失败/已存在)
const creditCodeValid = ref(true)
// 社会信用代码校验状态(true=校验通过,false=校验失败/已存在)
const creditCodeValid = ref(true)
// 须知勾选
function onNoticeChange(e) {
// 须知勾选
function onNoticeChange(e) {
const values = e.detail.value
form.value.notice = values.includes('1')
}
}
// 社会信用代码失焦校验
function onCreditCodeBlur() {
// 社会信用代码失焦校验
function onCreditCodeBlur() {
return new Promise((resolve, reject) => {
const creditCode = form.value.creditCode
if (!creditCode) return
api.creditCodeExist(creditCode).then(res => {
if (res.data) {
creditCodeValid.value = false
uni.showToast({ title: '社会信用代码已存在,请联系中跆协修改', icon: 'none', duration: 3000 })
uni.showToast({title: '社会信用代码已存在,请联系中跆协修改', icon: 'none', duration: 3000})
return reject()
} else {
creditCodeValid.value = true
return resolve()
}
}).catch(() => {
creditCodeValid.value = true
return reject()
})
}
})
}
// 查看须知 - 跳转到须知页面
function showNotice(type) {
// 查看须知 - 跳转到须知页面
function showNotice(type) {
const pageMap = {
1: '/pages/index/notice-registration',
2: '/pages/index/notice-membership',
......@@ -418,12 +447,12 @@
}
const url = pageMap[type]
if (url) {
uni.navigateTo({ url })
}
uni.navigateTo({url})
}
}
// 切换步骤(参考PC端handelActive逻辑)
function switchStep(step) {
// 切换步骤(参考PC端handelActive逻辑)
function switchStep(step) {
// 如果没有认证状态,不允许切换
if (!authenticationStatus.value) return
// 根据认证状态判断可以切换到哪些步骤
......@@ -438,10 +467,10 @@
activeStep.value = step
}
}
}
}
// 获取审核详情
function getMyCertStageFN() {
// 获取审核详情
function getMyCertStageFN() {
auditLoading.value = true
api.getMyRecent().then(res => {
auditLoading.value = false
......@@ -458,44 +487,44 @@
auditLoading.value = false
auditList.value = []
})
}
}
// 审核状态文字
function getAuditStatusText(status) {
// 审核状态文字
function getAuditStatusText(status) {
const map = {
0: '待审核',
1: '审核通过',
2: '审核拒绝'
}
return map[status] || '待审核'
}
}
// 审核状态样式
function getAuditStatusClass(status) {
// 审核状态样式
function getAuditStatusClass(status) {
if (status == 1) return 'status-pass'
if (status == 2) return 'status-reject'
return 'status-pending'
}
}
// 日期格式化
function formatDate(time) {
// 日期格式化
function formatDate(time) {
if (!time) return ''
const date = new Date(time)
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
return `${year}-${month}-${day}`
}
}
// 图片URL处理:如果不是http开头,拼接baseUrl_api
function getImageUrl(url) {
// 图片URL处理:如果不是http开头,拼接baseUrl_api
function getImageUrl(url) {
if (!url) return ''
if (url.indexOf('http') === 0) return url
return config.baseUrl_api + url
}
}
// 解析营业执照URL
function getBusinessLicenseUrl() {
// 解析营业执照URL
function getBusinessLicenseUrl() {
if (!form.value.businessLicense) return ''
try {
const arr = JSON.parse(form.value.businessLicense)
......@@ -507,9 +536,9 @@
return form.value.businessLicense
}
return ''
}
}
onLoad(option => {
onLoad(option => {
getTree()
if (app.globalData.isLogin) {
init()
......@@ -522,9 +551,9 @@
if (activeStep.value === 3) {
getMyCertStageFN()
}
});
});
function init() {
function init() {
getDetail()
getRegionsList()
......@@ -532,15 +561,16 @@
canUseDiscountApi()
getZtxDiscountPolicyApi()
getMyStatusAPI()
}
}
// 获取详情
function getDetail() {
// 获取详情
function getDetail() {
api.getMyOwnMemberInfo().then(res => {
// if (res.data.memberInfo) {
// Object.assign(form.value, res.data.memberInfo)
// }
form.value = { ...res.data.dept, ...res.data.memberInfo }
form.value = {...res.data.dept, ...res.data.memberInfo}
form.value.deptType = res.data.memberInfo.deptType || res.data.dept.deptType
if (form.value.type) {
form.value.type = String(form.value.type)
}
......@@ -575,13 +605,13 @@
// 尝试从协会树中查找完整路径
const result = findAssoNodeWithPath(assoList.value, form.value.parentId, [])
if (result) {
assoFullName.value = getAssoFullName(result.path.map(id => ({ value: id })))
assoFullName.value = getAssoFullName(result.path.map(id => ({value: id})))
} else {
// 如果树还没加载完,延迟设置
setTimeout(() => {
const res = findAssoNodeWithPath(assoList.value, form.value.parentId, [])
if (res) {
assoFullName.value = getAssoFullName(res.path.map(id => ({ value: id })))
assoFullName.value = getAssoFullName(res.path.map(id => ({value: id})))
}
}, 500)
}
......@@ -600,7 +630,8 @@
const license = JSON.parse(form.value.businessLicense)
form.value.businessLicense = license.url || license
form.value.businessLicenseName = license.name
} catch (e) {}
} catch (e) {
}
}
// 设置认证状态对应的按钮状态
......@@ -627,10 +658,10 @@
// adress.value = form.value.adress
form.value.name = form.value.baseName
})
}
}
// 格式化地区树(修复:对齐PC端接口返回的id/name结构)
function formatRegionTree(node) {
// 格式化地区树(修复:对齐PC端接口返回的id/name结构)
function formatRegionTree(node) {
const result = {
value: node.id,
text: node.name
......@@ -639,20 +670,20 @@
result.children = node.children.map(child => formatRegionTree(child))
}
return result
}
}
// 获取地区列表
function getRegionsList() {
// 获取地区列表
function getRegionsList() {
api.regionsList().then(res => {
options.value = res.data
// 转换为级联选择器格式
regionOptions.value = res.data
// map(item => formatRegionTree(item))
});
}
}
// 获取协会树
function getTree() {
// 获取协会树
function getTree() {
console.log('获取协会树')
api.certifiedDeptTreeRegister({
selfDeptId: -1, // 修复:传数字类型,避免后端类型转换错误
......@@ -668,10 +699,10 @@
}, 100)
}
})
}
}
// 格式化协会树
function formatTree(node) {
// 格式化协会树
function formatTree(node) {
const result = {
value: node.id,
text: node.label || node.text
......@@ -680,10 +711,10 @@
result.children = node.children.map(child => formatTree(child))
}
return result
}
}
// 恢复协会完整路径名称
function restoreAssoFullName() {
// 恢复协会完整路径名称
function restoreAssoFullName() {
if (!form.value.parentId || !assoList.value || assoList.value.length === 0) {
return
}
......@@ -691,16 +722,16 @@
const result = findAssoNodeWithPath(assoList.value, form.value.parentId, [])
if (result) {
// 使用路径数组重建完整名称
assoFullName.value = getAssoFullName(result.path.map(id => ({ value: id })))
}
assoFullName.value = getAssoFullName(result.path.map(id => ({value: id})))
}
}
// 查找协会节点及其父路径
function findAssoNodeWithPath(list, targetId, currentPath) {
// 查找协会节点及其父路径
function findAssoNodeWithPath(list, targetId, currentPath) {
for (const item of list) {
const newPath = [...currentPath, item.value]
if (item.value === targetId) {
return { node: item, path: newPath }
return {node: item, path: newPath}
}
if (item.children && item.children.length > 0) {
const found = findAssoNodeWithPath(item.children, targetId, newPath)
......@@ -708,10 +739,10 @@
}
}
return null
}
}
// 协会选择(修复:100%对齐PC端el-cascader emitPath: false逻辑,只取最后一级ID)
function changCase(e) {
// 协会选择(修复:100%对齐PC端el-cascader emitPath: false逻辑,只取最后一级ID)
function changCase(e) {
const valueArr = e.detail?.value || e;
// 取最后一级的value(纯ID)
const lastNode = valueArr[valueArr.length - 1];
......@@ -719,11 +750,11 @@
console.log('最终提交的parentId:', form.value.parentId);
assoFullName.value = getAssoFullName(valueArr)
console.log('协会完整路径:', assoFullName.value);
}
}
// 地址选择(核心修复:从对象中提取纯value,对齐PC端格式)
// 地址选择(核心修复:从对象中提取纯value,对齐PC端格式)
// 地址选择(还原成你之前能用的版本:纯ID数组赋值)
function changeAddress(e) {
function changeAddress(e) {
const selectedValue = e.detail?.value ?? e;
console.log("选择的地址:", selectedValue);
......@@ -736,31 +767,31 @@
coordinates1.value = selectedValue;
console.log('最终地址ID:', form.value.provinceId, form.value.cityId, form.value.regionId);
}
}
// 获取会员认证费用
function getMyMemberCertUnitFeeApi() {
// 获取会员认证费用
function getMyMemberCertUnitFeeApi() {
api.getMyMemberCertUnitFee().then(res => {
memberFee.value = res.data
})
}
}
// 检查是否可用优惠政策
function canUseDiscountApi() {
// 检查是否可用优惠政策
function canUseDiscountApi() {
api.canUseDiscount().then(res => {
preferentialPolicy.value = res.data
})
}
}
// 获取优惠政策详情
function getZtxDiscountPolicyApi() {
// 获取优惠政策详情
function getZtxDiscountPolicyApi() {
api.getZtxDiscountPolicy().then(res => {
preferentialData.value = res.data
})
}
}
// 获取考点申请状态
function getMyStatusAPI() {
// 获取考点申请状态
function getMyStatusAPI() {
api.getMyStatus().then(res => {
if (res.data && res.data.auditStatus) {
auditStatus.value = res.data.auditStatus
......@@ -768,29 +799,29 @@
auditStatus.value = '0'
}
})
}
}
// 步骤1提交
function submitStep1() {
// 步骤1提交
function submitStep1() {
// 验证必填项
if (!form.value.baseName) {
uni.showToast({ title: '请填写单位名称', duration: 2000, icon: 'none' })
uni.showToast({title: '请填写单位名称', duration: 2000, icon: 'none'})
return
}
if (!form.value.type) {
uni.showToast({ title: '请选择单位类型', duration: 2000, icon: 'none' })
uni.showToast({title: '请选择单位类型', duration: 2000, icon: 'none'})
return
}
if (!form.value.contact) {
uni.showToast({ title: '请填写联系人', duration: 2000, icon: 'none' })
uni.showToast({title: '请填写联系人', duration: 2000, icon: 'none'})
return
}
if (!form.value.phone) {
uni.showToast({ title: '请填写联系电话', duration: 2000, icon: 'none' })
uni.showToast({title: '请填写联系电话', duration: 2000, icon: 'none'})
return
}
if (!form.value.introduce) {
uni.showToast({ title: '请填写机构介绍', duration: 2000, icon: 'none' })
uni.showToast({title: '请填写机构介绍', duration: 2000, icon: 'none'})
return
}
......@@ -799,94 +830,94 @@
if (res.data.token) {
uni.setStorageSync('token', 'Bearer ' + res.data.token)
}
uni.showToast({ title: '操作成功', duration: 1500, icon: 'success' })
uni.showToast({title: '操作成功', duration: 1500, icon: 'success'})
setTimeout(() => {
activeStep.value = 2
getDetail()
}, 1500)
} else {
uni.showToast({ title: res.msg || '操作失败', duration: 2000, icon: 'none' })
uni.showToast({title: res.msg || '操作失败', duration: 2000, icon: 'none'})
}
})
}
}
// 步骤2提交
function submitStep2() {
// 步骤2提交
async function submitStep2() {
// 验证必填项
if (!form.value.parentId || form.value.parentId == 0 || form.value.parentId == -1) {
uni.showToast({ title: '请选择所属协会', duration: 2000, icon: 'none' })
uni.showToast({title: '请选择所属协会', duration: 2000, icon: 'none'})
return
}
if (!form.value.name) {
uni.showToast({ title: '请输入机构名称', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入机构名称', duration: 2000, icon: 'none'})
return
}
if (coordinates1.value.length === 0) {
uni.showToast({ title: '请选择认证地址', duration: 2000, icon: 'none' })
uni.showToast({title: '请选择认证地址', duration: 2000, icon: 'none'})
return
}
if (!form.value.adress) {
uni.showToast({ title: '请输入认证详细地址', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入认证详细地址', duration: 2000, icon: 'none'})
return
}
if (!form.value.siteContact) {
uni.showToast({ title: '请输入联系人', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入联系人', duration: 2000, icon: 'none'})
return
}
if (!form.value.siteTel) {
uni.showToast({ title: '请输入联系方式', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入联系方式', duration: 2000, icon: 'none'})
return
}
if (!form.value.businessLicense) {
uni.showToast({ title: '请上传营业执照', duration: 2000, icon: 'none' })
uni.showToast({title: '请上传营业执照', duration: 2000, icon: 'none'})
return
}
if (!form.value.companyName) {
uni.showToast({ title: '请输入营业执照名称', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入营业执照名称', duration: 2000, icon: 'none'})
return
}
if (!form.value.creditCode) {
uni.showToast({ title: '请输入社会信用代码', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入社会信用代码', duration: 2000, icon: 'none'})
return
}
if (!creditCodeValid.value) {
uni.showToast({ title: '社会信用代码已存在,请联系中跆协修改', icon: 'none', duration: 3000 })
uni.showToast({title: '社会信用代码已存在,请联系中跆协修改', icon: 'none', duration: 3000})
return
}
if (!form.value.legalIdcPhoto1 || !form.value.legalIdcPhoto2) {
uni.showToast({ title: '请上传身份证正反面', duration: 2000, icon: 'none' })
uni.showToast({title: '请上传身份证正反面', duration: 2000, icon: 'none'})
return
}
if (!form.value.legal) {
uni.showToast({ title: '请输入法人姓名', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入法人姓名', duration: 2000, icon: 'none'})
return
}
if (!form.value.legalIdcCode) {
uni.showToast({ title: '请输入法人证件号', duration: 2000, icon: 'none' })
uni.showToast({title: '请输入法人证件号', duration: 2000, icon: 'none'})
return
}
if (!form.value.pictures) {
uni.showToast({ title: '请上传机构照片', duration: 2000, icon: 'none' })
uni.showToast({title: '请上传机构照片', duration: 2000, icon: 'none'})
return
}
if (!form.value.notice) {
uni.showToast({ title: '请阅读并同意注册须知、入会须知、免责声明', duration: 2000, icon: 'none' })
uni.showToast({title: '请阅读并同意注册须知、入会须知、免责声明', duration: 2000, icon: 'none'})
return
}
// 验证营业执照和法人信息
uni.showLoading({ title: '验证中...' })
api.checkBusinessLicense({
await onCreditCodeBlur()
uni.showLoading({title: '验证中...'})
await api.checkBusinessLicense({
creditCode: form.value.creditCode,
companyName: form.value.companyName,
legalIdcCode: form.value.legalIdcCode,
legal: form.value.legal
}).then(checkRes => {
uni.hideLoading()
if (checkRes.code !== 200) {
if (checkRes.code != 200 || !checkRes.data.passFlag) {
showModal({
title: '系统提示',
content: checkRes.msg || '企业信息异常请检查相关资料信息,确认无误后再次提交!',
content: '企业信息异常请检查相关资料信息,确认无误后再次提交!',
cancelText: '返回修改',
confirmText: '确认无误',
onConfirm: () => submitCertification()
......@@ -905,24 +936,25 @@
onConfirm: () => submitCertification()
})
})
}
// 提交认证信息(100%对齐PC端入参格式)
function submitCertification() {
}
// 提交认证信息(100%对齐PC端入参格式)
function submitCertification() {
let params = {
parentId: form.value.parentId,
creditCode: form.value.creditCode,
legal: form.value.legal,
businessLicense: form.value.businessLicense,
businessLicense: JSON.stringify(form.value.businessLicense),
pictures: form.value.pictures,
memId: form.value.memId,
id: form.value.deptId,
name: form.value.name,
regionId: form.value.regionId?.value,
cityId: form.value.cityId.value.toString(),
provinceId: form.value.provinceId.value.toString(),
regionId: form.value.regionId,
cityId: form.value.cityId,
provinceId: form.value.provinceId,
adress: form.value.adress,
deptType: app.globalData.deptType,
deptType: form.value.deptType,
legalIdcPhoto: [form.value.legalIdcPhoto1, form.value.legalIdcPhoto2].join(','),
applyPoints: '0',
siteContact: form.value.siteContact,
......@@ -930,39 +962,39 @@
companyName: form.value.companyName,
legalIdcCode: form.value.legalIdcCode
}
console.log(666,params)
console.log(666, params)
// return
uni.showLoading({ title: '提交中...' })
uni.showLoading({title: '提交中...'})
api.editMyMemberCertifiedInfo(params).then(res => {
uni.hideLoading()
if (res.code === 200) {
uni.showToast({ title: '提交成功', duration: 1500, icon: 'success' })
uni.showToast({title: '提交成功', duration: 1500, icon: 'success'})
// 跳转缴费页面
setTimeout(() => {
const assoName = assoFullName.value
console.log(888,assoName)
console.log(888, assoName)
// 跳转到缴费页面
uni.navigateTo({
url: `/myCenter/goPay?payName=${encodeURIComponent(form.value.name || '')}&assoName=${encodeURIComponent(assoName)}`
})
}, 1500)
} else {
uni.showToast({ title: res.msg || '提交失败', duration: 2000, icon: 'none' })
uni.showToast({title: res.msg || '提交失败', duration: 2000, icon: 'none'})
}
}).catch(() => {
uni.hideLoading()
})
}
}
// 营业执照上传
function onBusinessLicenseSelect() {
// 营业执照上传
function onBusinessLicenseSelect() {
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
if (res.tempFilePaths && res.tempFilePaths.length > 0) {
uni.showLoading({ title: '上传中...' })
uni.showLoading({title: '上传中...'})
// 先上传文件
api.uploadFile(res).then(uploadRes => {
if (uploadRes.code !== 200) {
......@@ -978,9 +1010,9 @@
'Authorization': uni.getStorageSync('token')
}
}).then(ocrRes => {
return { url, ocrRes }
return {url, ocrRes}
})
}).then(({ url, ocrRes }) => {
}).then(({url, ocrRes}) => {
uni.hideLoading()
const data = JSON.parse(ocrRes.data)
let name = '营业执照'
......@@ -996,37 +1028,37 @@
}])
}).catch(() => {
uni.hideLoading()
uni.showToast({ title: '上传失败', icon: 'none' })
uni.showToast({title: '上传失败', icon: 'none'})
})
}
}
})
}
}
function removeBusinessLicense() {
function removeBusinessLicense() {
form.value.businessLicense = ''
form.value.businessLicenseName = ''
}
}
// 删除身份证正面
function removeIdCardFront() {
// 删除身份证正面
function removeIdCardFront() {
form.value.legalIdcPhoto1 = ''
}
}
// 删除身份证反面
function removeIdCardBack() {
// 删除身份证反面
function removeIdCardBack() {
form.value.legalIdcPhoto2 = ''
}
}
// 身份证上传
function onIdCardFrontSelect() {
// 身份证上传
function onIdCardFrontSelect() {
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
if (res.tempFilePaths && res.tempFilePaths.length > 0) {
uni.showLoading({ title: '上传中...' })
uni.showLoading({title: '上传中...'})
api.uploadImg(res).then(data => {
if (data.code === 200) {
form.value.legalIdcPhoto1 = data.msg
......@@ -1034,14 +1066,14 @@
uni.hideLoading()
}).catch(() => {
uni.hideLoading()
uni.showToast({ title: '上传失败', icon: 'none' })
uni.showToast({title: '上传失败', icon: 'none'})
})
}
}
})
}
}
function onIdCardBackSelect() {
function onIdCardBackSelect() {
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
......@@ -1049,7 +1081,7 @@
success: (res) => {
if (res.tempFilePaths && res.tempFilePaths.length > 0) {
const tempPath = res.tempFilePaths[0]
uni.showLoading({ title: '上传中...' })
uni.showLoading({title: '上传中...'})
api.uploadImg(res).then(data => {
if (data.code === 200) {
form.value.legalIdcPhoto2 = data.msg
......@@ -1059,15 +1091,15 @@
uni.hideLoading()
}).catch(() => {
uni.hideLoading()
uni.showToast({ title: '上传失败', icon: 'none' })
uni.showToast({title: '上传失败', icon: 'none'})
})
}
}
})
}
}
// 提取身份证信息
function extractIdCardInfo(tempPath) {
// 提取身份证信息
function extractIdCardInfo(tempPath) {
if (tempPath) {
uni.uploadFile({
url: config.baseUrl_api + '/person/info/getPersonInfoFromCert/0',
......@@ -1085,20 +1117,20 @@
}
})
}
}
}
// 机构照片上传
function onPicturesSelect() {
// 机构照片上传
function onPicturesSelect() {
uni.chooseImage({
count: 3,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
if (res.tempFilePaths && res.tempFilePaths.length > 0) {
uni.showLoading({ title: '上传中...' })
uni.showLoading({title: '上传中...'})
// 循环上传多张图片
const promises = res.tempFilePaths.map(path => {
return api.uploadImg({ tempFilePaths: [path] })
return api.uploadImg({tempFilePaths: [path]})
})
Promise.all(promises).then(results => {
uni.hideLoading()
......@@ -1106,15 +1138,15 @@
form.value.pictures = urls.join(',')
}).catch(() => {
uni.hideLoading()
uni.showToast({ title: '上传失败', icon: 'none' })
uni.showToast({title: '上传失败', icon: 'none'})
})
}
}
})
}
}
// 预览图片
function previewImage(url) {
// 预览图片
function previewImage(url) {
if (Array.isArray(url)) {
uni.previewImage({
urls: url
......@@ -1124,15 +1156,15 @@
urls: [url]
})
}
}
}
// 删除机构照片
function removePictures() {
// 删除机构照片
function removePictures() {
form.value.pictures = ''
}
}
// 去缴费 - 参考PC payTheFees逻辑,先校验基础信息
function goPay() {
// 去缴费 - 参考PC payTheFees逻辑,先校验基础信息
function goPay() {
// 检查基础信息是否完善
if (!form.value.siteContact) {
uni.showToast({
......@@ -1147,13 +1179,14 @@
uni.navigateTo({
url: `/myCenter/goPay?payName=${encodeURIComponent(form.value.name || '')}&assoName=${encodeURIComponent(assoName)}`
})
}
}
// 根据协会ID获取协会名称(只获取最后一级)
function getAssoName(parentId) {
// 根据协会ID获取协会名称(只获取最后一级)
function getAssoName(parentId) {
if (!parentId || !assoList.value || assoList.value.length === 0) {
return ''
}
// 递归查找协会名称
function findInTree(list) {
for (const item of list) {
......@@ -1167,11 +1200,12 @@
}
return null
}
return findInTree(assoList.value) || ''
}
}
// 根据选择的值数组获取完整的协会路径名称
function getAssoFullName(valueArr) {
// 根据选择的值数组获取完整的协会路径名称
function getAssoFullName(valueArr) {
if (!valueArr || valueArr.length === 0 || !assoList.value || assoList.value.length === 0) {
return ''
}
......@@ -1190,22 +1224,22 @@
}
}
return pathNames.join('/')
}
}
// 去认证 - 提交认证信息
function doCertification() {
// 去认证 - 提交认证信息
function doCertification() {
submitStep2()
}
}
// 审核详情 - 跳转到审核详情页面
function goAuditDetail() {
// 审核详情 - 跳转到审核详情页面
function goAuditDetail() {
uni.navigateTo({
url: '/myCenter/certAuditDetail'
})
}
}
// 退出登录
function handleLogout() {
// 退出登录
function handleLogout() {
uni.showModal({
title: '提示',
content: '确定要退出当前账号吗?',
......@@ -1220,15 +1254,15 @@
}
}
});
}
}
// 监听步骤变化,加载审核详情
watch(activeStep, (newVal) => {
// 监听步骤变化,加载审核详情
watch(activeStep, (newVal) => {
console.log('activeStep changed:', newVal)
if (newVal === 3) {
getMyCertStageFN()
}
})
})
</script>
<style lang="scss" scoped>
......@@ -1410,15 +1444,15 @@
}
}
.logout-icon {
.logout-icon {
font-size: 28rpx;
color: #e64329;
}
}
.logout-text {
.logout-text {
font-size: 24rpx;
color: #e64329;
}
}
.status-box {
......@@ -1773,6 +1807,7 @@
display: block;
// overflow: hidden;
}
:deep(.uni-data-picker .selected-area) {
width: 100%;
padding: 0 20rpx;
......@@ -1781,6 +1816,7 @@
justify-content: flex-start;
align-items: center;
}
:deep(.uni-data-picker .selected-text) {
font-size: 28rpx;
color: #333;
......@@ -1791,6 +1827,7 @@
max-width: 100%;
flex: 1;
}
:deep(.uni-data-picker .uni-data-picker__input) {
text-align: left !important;
white-space: nowrap;
......@@ -1798,15 +1835,18 @@
text-overflow: ellipsis;
width: 100%;
}
:deep(.selected-list) {
justify-content: start;
overflow: hidden;
max-width: 100%;
}
:deep(.selected-item) {
max-width: 200rpx;
overflow: hidden;
}
:deep(.uni-data-picker__view) {
overflow: hidden;
text-overflow: ellipsis;
......@@ -1824,15 +1864,16 @@
font-size: 32rpx !important;
padding: 24rpx 30rpx !important;
}
:deep(.item-text) {
font-size: 32rpx !important;
}
:deep(.selected-item-text) {
font-size: 32rpx !important;
}
/* 修复选择器容器宽度问题 */
.picker-wrapper {
width: 100%;
......@@ -1962,7 +2003,8 @@
text-align: right;
font-size: 28rpx;
}
radio-group label, checkbox-group label{
padding-right:0rpx;
radio-group label, checkbox-group label {
padding-right: 0rpx;
}
</style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!