843f28df by lttnew

个人会员中心+注册+bug

1 parent 8b3e35cc
...@@ -1714,6 +1714,14 @@ export function unbindUser() { ...@@ -1714,6 +1714,14 @@ export function unbindUser() {
1714 }) 1714 })
1715 } 1715 }
1716 1716
1717 // 电子会员证下载
1718 export function downStuCertSingle(pId) {
1719 return request({
1720 url: `/person/info/downStuCertSingle/${pId}`,
1721 method: 'post'
1722 })
1723 }
1724
1717 /** 1725 /**
1718 * 订单列表 1726 * 订单列表
1719 * @param params 1727 * @param params
...@@ -2028,3 +2036,45 @@ export function memBerAuditList(params) { ...@@ -2028,3 +2036,45 @@ export function memBerAuditList(params) {
2028 params: params 2036 params: params
2029 }) 2037 })
2030 } 2038 }
2039
2040 /**
2041 * 结算审核列表
2042 * @param params
2043 * @returns {*}
2044 */
2045 export function settlementList(params) {
2046 return request({
2047 url: '/exam/paymentSubmit/list',
2048 method: 'get',
2049 params: params
2050 })
2051 }
2052
2053 /**
2054 * 结算审核(通过/拒绝)
2055 * @param data { ids, type, reason }
2056 * @returns {*}
2057 */
2058 export function settlementAudit(data) {
2059 return request({
2060 url: `/exam/paymentSubmit/audit/${data.ids}`,
2061 method: 'post',
2062 params: {
2063 type: data.type,
2064 reason: data.reason
2065 }
2066 })
2067 }
2068
2069 /**
2070 * 结算详情列表(根据结算单ID获取关联的缴费单)
2071 * @param params { payIds, pageNum, pageSize }
2072 * @returns {*}
2073 */
2074 export function settlementDetailList(params) {
2075 return request({
2076 url: '/exam/payment/list',
2077 method: 'get',
2078 params: params
2079 })
2080 }
......
...@@ -120,7 +120,8 @@ function requestPaymentCredential(encodedData) { ...@@ -120,7 +120,8 @@ function requestPaymentCredential(encodedData) {
120 header: { 120 header: {
121 'Content-Type': 'application/x-www-form-urlencoded' 121 'Content-Type': 'application/x-www-form-urlencoded'
122 }, 122 },
123 data: encodedData 123 data: encodedData,
124 timeout: 60000 // 60秒超时,与业务请求保持一致
124 }) 125 })
125 } 126 }
126 127
......
...@@ -60,10 +60,13 @@ function handleTokenExpire() { ...@@ -60,10 +60,13 @@ function handleTokenExpire() {
60 60
61 // 显示错误提示 61 // 显示错误提示
62 function showError(msg) { 62 function showError(msg) {
63 console.log('showError called:', msg)
64 // 先隐藏可能存在的 loading,确保 Toast 能显示
65 uni.hideLoading()
63 uni.showToast({ 66 uni.showToast({
64 title: msg || '请求失败', 67 title: msg || '请求失败',
65 icon: 'none', 68 icon: 'none',
66 duration: 2000 69 duration: 3000
67 }) 70 })
68 } 71 }
69 72
...@@ -119,9 +122,16 @@ const request = function (req) { ...@@ -119,9 +122,16 @@ const request = function (req) {
119 return 122 return
120 } 123 }
121 124
122 // 其他业务错误 125 // 业务错误(code != 200 且非 Token 过期)- 统一显示错误提示
123 showError(data.msg || '请求失败') 126 const errorMsg = data.msg || '操作失败'
124 reject(new Error(data.msg || '请求失败')) 127 showError(errorMsg)
128
129 // code == 500 时仅显示提示,不抛出异常,避免页面 catch 覆盖错误信息
130 if (data.code == 500) {
131 return
132 }
133
134 reject(new Error(errorMsg))
125 135
126 }).catch(error => { 136 }).catch(error => {
127 console.error('请求失败:', error) 137 console.error('请求失败:', error)
...@@ -139,9 +149,12 @@ const request = function (req) { ...@@ -139,9 +149,12 @@ const request = function (req) {
139 149
140 reject(error) 150 reject(error)
141 }).finally(() => { 151 }).finally(() => {
152 // 延迟隐藏 loading,确保错误提示能显示
153 setTimeout(() => {
142 if (req.showLoading != false) { 154 if (req.showLoading != false) {
143 hideLoading() 155 hideLoading()
144 } 156 }
157 }, 100)
145 }) 158 })
146 }) 159 })
147 } 160 }
......
...@@ -13,15 +13,15 @@ ...@@ -13,15 +13,15 @@
13 <view class="vipData mt30" style="flex-wrap: wrap;padding: 20rpx;"> 13 <view class="vipData mt30" style="flex-wrap: wrap;padding: 20rpx;">
14 <view class="w50"> 14 <view class="w50">
15 年限合计: 15 年限合计:
16 <text>{{ form?.renewYear }}</text> 16 <text>{{ form?.renewYear }}</text>
17 </view> 17 </view>
18 <view class="w50"> 18 <view class="w50">
19 费用合计: 19 费用合计:
20 <text>{{ form?.allPrice }}</text> 20 <text>{{ form?.allPrice }}</text>
21 </view> 21 </view>
22 <view class="w50"> 22 <view class="w50">
23 政策优惠: 23 政策优惠:
24 <text>{{ form?.discount }}</text> 24 <text>{{ form?.discount }}</text>
25 </view> 25 </view>
26 <view class="w50"> 26 <view class="w50">
27 付款费用: 27 付款费用:
......
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
117 </view> 117 </view>
118 <view class="level-item"> 118 <view class="level-item">
119 <text class="level-label">考试级别</text> 119 <text class="level-label">考试级别</text>
120 <view class="select-wrapper" @click="changeLevelfather(n)"> 120 <view class="select-wrapper exam-level-select" @click="changeLevelfather(n)">
121 <uni-data-select v-model="n.levelNew" :clear="false" :localdata="levelArr" @change="changeLevel"/> 121 <uni-data-select v-model="n.levelNew" :clear="false" :localdata="levelArr" @change="changeLevel"/>
122 </view> 122 </view>
123 </view> 123 </view>
...@@ -427,7 +427,10 @@ function getChosedStudentList() { ...@@ -427,7 +427,10 @@ function getChosedStudentList() {
427 d.levelRecommend = '9' 427 d.levelRecommend = '9'
428 } 428 }
429 429
430 if (!d.levelNew) { 430 // 原级别是一级时,levelNew 默认为空,不使用推荐值
431 if (d.levelOld === '1') {
432 d.levelNew = ''
433 } else if (!d.levelNew) {
431 d.levelNew = d.levelRecommend 434 d.levelNew = d.levelRecommend
432 } 435 }
433 436
...@@ -475,10 +478,21 @@ function szToHz(num) { ...@@ -475,10 +478,21 @@ function szToHz(num) {
475 478
476 let nowRow 479 let nowRow
477 480
478 function changeLevelfather(row) { 481 function changeLevelfather(row, flag = 0) {
479 nowRow = row 482 const data = _.map(infoList.value, (d) => {
480 api.jiDropDownBox({ 483 return {
481 perId: row.perId 484 id: d.id,
485 levelNew: d.levelNew,
486 // score: d.score,
487 isPass: d.isPass
488 }
489 })
490 api.editLevel({
491 examId: form.value.examId,
492 personInfo: JSON.stringify(data),
493 transcript: form.value.transcript,
494 // perId: row.perId,
495 status: flag
482 }).then(res => { 496 }).then(res => {
483 levelArr.value = res.data 497 levelArr.value = res.data
484 for (let l of levelArr.value) { 498 for (let l of levelArr.value) {
...@@ -489,36 +503,43 @@ function changeLevelfather(row) { ...@@ -489,36 +503,43 @@ function changeLevelfather(row) {
489 } 503 }
490 504
491 function changeLevel(e) { 505 function changeLevel(e) {
492 if (e == nowRow.levelOld) { 506 // 切换考试级别时弹出确认框
493 uni.showToast({title: '考试级别重复,请重新选择!', icon: 'none'})
494 nowRow.levelNew = nowRow.levelRecommend
495 return
496 }
497 if (e !== nowRow.levelRecommend) {
498 uni.showModal({ 507 uni.showModal({
499 title: '提示', 508 title: '提示',
500 content: `建议考试级别为 "${szToHz(nowRow.levelRecommend)}级" ,确定要修改为${szToHz(e)}级吗?`, 509 content: '请仔细核实本次等级申报是否正确!',
501 success: function (res) { 510 success: function (res) {
502 if (res.confirm) { 511 if (res.confirm) {
512 // 保存当前行数据
513 const data = _.map(infoList.value, (d) => {
514 return {
515 id: d.id,
516 levelNew: d.levelNew,
517 isPass: d.isPass
518 }
519 })
520 api.editLevel({
521 examId: form.value.examId,
522 personInfo: JSON.stringify(data),
523 transcript: form.value.transcript,
524 status: 0
525 }).then(() => {
526 // 保存成功后更新统计
503 getTablePersonInfo() 527 getTablePersonInfo()
528 })
504 } else { 529 } else {
505 nowRow.levelNew = nowRow.levelRecommend 530 // 取消时恢复为推荐级别
531 nowRow.levelNew = nowRow.levelRecommend != 0 ? nowRow.levelRecommend : ''
506 } 532 }
507 }, 533 },
508 fail: function (res) { 534 fail: function (res) {
509 nowRow.levelNew = nowRow.levelRecommend 535 nowRow.levelNew = nowRow.levelRecommend != 0 ? nowRow.levelRecommend : ''
510 } 536 }
511 }) 537 })
512 }
513 } 538 }
514 539
515 function submitForm2(flag) { 540 function submitForm2(flag) {
516 // 循环校验考试级别 541 // 循环校验考试级别是否选择(考试级别重复可以提交)
517 for (let item of infoList.value) { 542 for (let item of infoList.value) {
518 if (item.levelNew == item.levelOld) {
519 uni.showToast({title: `${item.realName}考试级别重复,请重新选择!`, icon: 'none'})
520 return
521 }
522 if (!item.levelNew) { 543 if (!item.levelNew) {
523 uni.showToast({title: `${item.realName}请选择考试级别!`, icon: 'none'}) 544 uni.showToast({title: `${item.realName}请选择考试级别!`, icon: 'none'})
524 return 545 return
...@@ -536,16 +557,11 @@ function submitForm2(flag) { ...@@ -536,16 +557,11 @@ function submitForm2(flag) {
536 content: `请确认人员照片是否已更新?`, 557 content: `请确认人员照片是否已更新?`,
537 success: function (res) { 558 success: function (res) {
538 if (res.confirm) { 559 if (res.confirm) {
539 // saveStep2(flag).then(() => { 560 saveStep2(flag).then(() => {
540 // uni.showToast({title: '提交成功', icon: 'none'})
541 // uni.navigateTo({
542 // url: `/level/paymentDetail?examId=${form.value.examId}`
543 // })
544 // })
545
546 uni.navigateTo({ 561 uni.navigateTo({
547 url: `/level/paymentDetail?examId=${form.value.examId}` 562 url: `/level/paymentDetail?examId=${form.value.examId}`
548 }) 563 })
564 })
549 } 565 }
550 } 566 }
551 }) 567 })
...@@ -866,7 +882,15 @@ function handleDelete(row) { ...@@ -866,7 +882,15 @@ function handleDelete(row) {
866 } 882 }
867 883
868 .select-wrapper { 884 .select-wrapper {
869 width: 120rpx; 885 width: 160rpx;
886 position: relative;
887 z-index: 99;
888 }
889
890 .exam-level-select {
891 position: relative;
892 z-index: 999;
893 margin-bottom: 300rpx;
870 } 894 }
871 } 895 }
872 } 896 }
......
...@@ -23,9 +23,10 @@ ...@@ -23,9 +23,10 @@
23 <view class="date">注册地:{{n.memName||'-'}}</view> 23 <view class="date">注册地:{{n.memName||'-'}}</view>
24 </view> 24 </view>
25 <view class="status"> 25 <view class="status">
26 <text v-if="isChosen(n)" class="text-gray">已选</text> 26 <text v-if="isChosen(n)" class="text-chosen">已选</text>
27 <!-- <text v-else-if="n.canChoose != 1" class="text-gray">不可选</text> --> 27 <!-- <text v-else-if="n.canChoose != 1" class="text-gray">不可选</text> -->
28 <text v-if="n.canChoose == 1" class="text-primary" @click="handleChoose(n)">选择</text> 28 <text v-else-if="n.canChoose == 1" class="text-primary" @click="handleChoose(n)">选择</text>
29 <text v-else class="text-gray">不可选</text>
29 </view> 30 </view>
30 </view> 31 </view>
31 </view> 32 </view>
...@@ -146,6 +147,15 @@ ...@@ -146,6 +147,15 @@
146 } 147 }
147 148
148 function handleChoose(row) { 149 function handleChoose(row) {
150 // 校验是否已被其他位置选中
151 if (isChosen(row)) {
152 uni.showToast({
153 title: '该考官已被选中,不能重复选择',
154 icon: 'none'
155 })
156 return
157 }
158
149 if (row.canChoose != 1) { 159 if (row.canChoose != 1) {
150 uni.showToast({ 160 uni.showToast({
151 title: '该考官资质已过期!', 161 title: '该考官资质已过期!',
...@@ -215,7 +225,7 @@ ...@@ -215,7 +225,7 @@
215 success: (res) => { 225 success: (res) => {
216 if (res.confirm) { 226 if (res.confirm) {
217 uni.showLoading({ title: '添加中' }) 227 uni.showLoading({ title: '添加中' })
218 api.selfAdd(app.globalData.memberInfo.memId, row.perId).then(() => { 228 api.selfAdd(row.perId).then(() => {
219 uni.hideLoading() 229 uni.hideLoading()
220 uni.showToast({ title: '添加成功', icon: 'success' }) 230 uni.showToast({ title: '添加成功', icon: 'success' })
221 addPopup.value.close() 231 addPopup.value.close()
...@@ -317,6 +327,11 @@ ...@@ -317,6 +327,11 @@
317 color: #999; 327 color: #999;
318 } 328 }
319 329
330 .text-chosen {
331 color: #AD181F;
332 font-weight: bold;
333 }
334
320 .text-danger { 335 .text-danger {
321 color: #dd524d; 336 color: #dd524d;
322 } 337 }
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
63 <button class="btn-red" @click="login">登录</button> 63 <button class="btn-red" @click="login">登录</button>
64 </view> 64 </view>
65 <view class="center-item"> 65 <view class="center-item">
66 <text class="text-red" @click="goRegister">没有账号,去注册</text> 66 <button class="btn-red btn-register" @click="goRegister">没有账号,去注册</button>
67 </view> 67 </view>
68 </view> 68 </view>
69 <view class="wNumber"> 69 <view class="wNumber">
...@@ -84,6 +84,25 @@ ...@@ -84,6 +84,25 @@
84 <image v-else src="@/static/login/xz2@2x.png"></image> 84 <image v-else src="@/static/login/xz2@2x.png"></image>
85 <view>登录即代表您同意<text>《用户协议》</text><text>《隐私策略》</text></view> --> 85 <view>登录即代表您同意<text>《用户协议》</text><text>《隐私策略》</text></view> -->
86 </view> 86 </view>
87
88 <!-- 注册提示弹框 -->
89 <uni-popup ref="registerPopup" type="center" :mask-click="false">
90 <view class="register-popup">
91 <view class="popup-title">注册提示</view>
92 <view class="popup-content">
93 <view class="popup-text">请准备以下材料,以便顺利完成注册</view>
94 <view class="popup-list">
95 <text>1. 单位营业执照(清晰照片)</text>
96 <text>2. 法人身份证正反面照片(清晰照片)</text>
97 <text>3. 单位营业执照(清晰照片)</text>
98 </view>
99 </view>
100 <view class="popup-btns">
101 <view class="popup-btn cancel" @click="closeRegisterPopup">取消</view>
102 <view class="popup-btn confirm" @click="confirmRegister">确定</view>
103 </view>
104 </view>
105 </uni-popup>
87 </view> 106 </view>
88 </template> 107 </template>
89 108
...@@ -107,6 +126,7 @@ const agree = ref(false) ...@@ -107,6 +126,7 @@ const agree = ref(false)
107 const isRember = ref(true) 126 const isRember = ref(true)
108 const loading = ref(false) 127 const loading = ref(false)
109 const codeUrl = ref(null) 128 const codeUrl = ref(null)
129 const registerPopup = ref(null)
110 const inputstyle = ref({ 130 const inputstyle = ref({
111 borderColor: 'transparent', 131 borderColor: 'transparent',
112 fontSize: '30rpx' 132 fontSize: '30rpx'
...@@ -226,9 +246,17 @@ function login() { ...@@ -226,9 +246,17 @@ function login() {
226 } 246 }
227 247
228 function goRegister() { 248 function goRegister() {
229 const path = '/login/register' 249 registerPopup.value.open()
250 }
251
252 function closeRegisterPopup() {
253 registerPopup.value.close()
254 }
255
256 function confirmRegister() {
257 registerPopup.value.close()
230 uni.navigateTo({ 258 uni.navigateTo({
231 url: path 259 url: '/login/register'
232 }) 260 })
233 } 261 }
234 262
...@@ -517,4 +545,78 @@ function call(num) { ...@@ -517,4 +545,78 @@ function call(num) {
517 margin-right: 20rpx; 545 margin-right: 20rpx;
518 } 546 }
519 } 547 }
548
549 /* 注册按钮 */
550 .btn-register {
551 border-radius: 40rpx;
552 width: 600rpx;
553 line-height: 80rpx;
554 font-size: 36rpx;
555 background: #fff;
556 color: #AD181F;
557 border: 1rpx solid #AD181F;
558 margin: 0;
559 }
560
561 /* 注册提示弹框 */
562 .register-popup {
563 width: 600rpx;
564 background: #ffffff;
565 border-radius: 24rpx;
566 overflow: hidden;
567 }
568
569 .popup-title {
570 font-size: 32rpx;
571 font-weight: 500;
572 color: #333;
573 text-align: center;
574 padding: 40rpx 30rpx 20rpx;
575 }
576
577 .popup-content {
578 padding: 20rpx 30rpx 40rpx;
579 }
580
581 .popup-text {
582 font-size: 28rpx;
583 color: #333;
584 margin-bottom: 20rpx;
585 }
586
587 .popup-list {
588 display: flex;
589 flex-direction: column;
590 gap: 16rpx;
591 padding-left: 10rpx;
592 }
593
594 .popup-list text {
595 font-size: 26rpx;
596 color: #666;
597 line-height: 1.5;
598 }
599
600 .popup-btns {
601 display: flex;
602 border-top: 1rpx solid #eee;
603 }
604
605 .popup-btn {
606 flex: 1;
607 height: 100rpx;
608 line-height: 100rpx;
609 text-align: center;
610 font-size: 30rpx;
611 }
612
613 .popup-btn.cancel {
614 color: #666;
615 border-right: 1rpx solid #eee;
616 }
617
618 .popup-btn.confirm {
619 color: #AD181F;
620 font-weight: 500;
621 }
520 </style> 622 </style>
......
...@@ -12,19 +12,19 @@ ...@@ -12,19 +12,19 @@
12 <form> 12 <form>
13 <view class="round-input-item"> 13 <view class="round-input-item">
14 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag01@2x.png'"></image> 14 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag01@2x.png'"></image>
15 <uni-easyinput :styles="inputstyle" v-model="registerForm.telNo" placeholder="请输入手机号" /> 15 <uni-easyinput :styles="inputstyle" v-model="registerForm.telNo" placeholder="请输入手机号" @blur="validateTelNo" />
16 </view> 16 </view>
17 <view class="round-input-item"> 17 <view class="round-input-item">
18 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag02@2x.png'"></image> 18 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag02@2x.png'"></image>
19 <uni-easyinput :styles="inputstyle" v-model="registerForm.password" placeholder="密码" type="password"/> 19 <uni-easyinput :styles="inputstyle" v-model="registerForm.password" placeholder="密码" type="password" @blur="validatePassword" />
20 </view> 20 </view>
21 <view class="round-input-item"> 21 <view class="round-input-item">
22 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag03@2x.png'"></image> 22 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag03@2x.png'"></image>
23 <uni-easyinput :styles="inputstyle" v-model="registerForm.password2" placeholder="确认密码" type="password"/> 23 <uni-easyinput :styles="inputstyle" v-model="registerForm.password2" placeholder="确认密码" type="password" @blur="validatePassword2" />
24 </view> 24 </view>
25 <view class="round-input-item"> 25 <view class="round-input-item">
26 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag03@2x.png'"></image> 26 <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag03@2x.png'"></image>
27 <uni-easyinput :styles="inputstyle" placeholder="图形验证码" v-model="registerForm.captcha" /> 27 <uni-easyinput :styles="inputstyle" placeholder="图形验证码" v-model="registerForm.captcha" @blur="validateCaptcha" />
28 <image :src="codeUrl" @click="getCode" /> 28 <image :src="codeUrl" @click="getCode" />
29 </view> 29 </view>
30 <view class="round-input-item"> 30 <view class="round-input-item">
...@@ -138,12 +138,20 @@ function register() { ...@@ -138,12 +138,20 @@ function register() {
138 138
139 groupMemberRegister(registerForm.value) 139 groupMemberRegister(registerForm.value)
140 .then((res) => { 140 .then((res) => {
141 uni.showToast({ 141 uni.showModal({
142 title: `恭喜你,您的账号 ${registerForm.value.telNo} 注册成功!`, 142 title: '提示',
143 icon: 'none' 143 content: `恭喜你,您的账号 ${registerForm.value.telNo} 注册成功!`,
144 }) 144 confirmText: '去登录',
145 cancelText: '取消',
146 success: (res) => {
147 if (res.confirm) {
145 registerForm.value = {} 148 registerForm.value = {}
146 setTimeout(goLogin, 2000) 149 goLogin()
150 } else {
151 // 取消,保持当前页面
152 }
153 }
154 })
147 }) 155 })
148 } 156 }
149 157
...@@ -160,6 +168,58 @@ function validPassword(pwd) { ...@@ -160,6 +168,58 @@ function validPassword(pwd) {
160 return (lowerRegex.test(pwd) && upperRegex.test(pwd) && digitRegex.test(pwd) && symbolRegex.test(pwd) && specific.test(pwd)) 168 return (lowerRegex.test(pwd) && upperRegex.test(pwd) && digitRegex.test(pwd) && symbolRegex.test(pwd) && specific.test(pwd))
161 } 169 }
162 170
171 // 手机号校验
172 function validateTelNo() {
173 const telNo = registerForm.value.telNo
174 if (!telNo) {
175 uni.showToast({ title: '手机号不能为空', icon: 'none' })
176 return false
177 }
178 if (!/^1[3-9]\d{9}$/.test(telNo)) {
179 uni.showToast({ title: '手机号格式不正确', icon: 'none' })
180 return false
181 }
182 return true
183 }
184
185 // 密码校验
186 function validatePassword() {
187 const password = registerForm.value.password
188 if (!password) {
189 uni.showToast({ title: '密码不能为空', icon: 'none' })
190 return false
191 }
192 if (!validPassword(password)) {
193 uni.showToast({ title: '密码必须为8~18位大小写字母、数字和特殊符号组合', icon: 'none', duration: 3000 })
194 return false
195 }
196 return true
197 }
198
199 // 确认密码校验
200 function validatePassword2() {
201 const password2 = registerForm.value.password2
202 if (!password2) {
203 uni.showToast({ title: '确认密码不能为空', icon: 'none' })
204 return false
205 }
206 if (registerForm.value.password && password2 !== registerForm.value.password) {
207 uni.showToast({ title: '两次密码不一致', icon: 'none' })
208 return false
209 }
210 return true
211 }
212
213 // 图形验证码校验
214 function validateCaptcha() {
215 const captcha = registerForm.value.captcha
216 if (!captcha) {
217 uni.showToast({ title: '图形验证码不能为空', icon: 'none' })
218 return false
219 }
220 return true
221 }
222
163 function goLogin() { 223 function goLogin() {
164 let path = '/login/loginC'; 224 let path = '/login/loginC';
165 uni.navigateTo({ 225 uni.navigateTo({
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
51 </uni-list-item> 51 </uni-list-item>
52 <uni-list-item v-if="form.menCode" :rightText="form.menCode" title="会员编号"/> 52 <uni-list-item v-if="form.menCode" :rightText="form.menCode" title="会员编号"/>
53 <uni-list-item :rightText="form.name" title="机构名称"/> 53 <uni-list-item :rightText="form.name" title="机构名称"/>
54 <uni-list-item title="所属省份"> 54 <!-- <uni-list-item title="所属省份">
55 <template v-slot:footer> 55 <template v-slot:footer>
56 <view class="frrr"> 56 <view class="frrr">
57 <uni-data-picker v-model="form.belongProvinceId" :clear-icon="false" :localdata="options" 57 <uni-data-picker v-model="form.belongProvinceId" :clear-icon="false" :localdata="options"
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
59 </uni-data-picker> 59 </uni-data-picker>
60 </view> 60 </view>
61 </template> 61 </template>
62 </uni-list-item> 62 </uni-list-item> -->
63 <uni-list-item 63 <uni-list-item
64 v-if="authenticationStatusa != 1&&authenticationStatusa != 0&&authenticationStatusa != 3&&newResult||form.associateId&&form.associateId>0||activeStatus==1" 64 v-if="authenticationStatusa != 1&&authenticationStatusa != 0&&authenticationStatusa != 3&&newResult||form.associateId&&form.associateId>0||activeStatus==1"
65 :rightText="form.creditCode" 65 :rightText="form.creditCode"
...@@ -96,7 +96,8 @@ ...@@ -96,7 +96,8 @@
96 </view> 96 </view>
97 </template> 97 </template>
98 </uni-list-item> 98 </uni-list-item>
99 99 <uni-list-item :rightText="form.companyName||'--'" title="营业执照名称"/>
100 <uni-list-item :rightText="form.creditCode||'--'" title="社会信用代码"/>
100 <uni-list-item clickable title="营业执照"> 101 <uni-list-item clickable title="营业执照">
101 <template v-slot:footer> 102 <template v-slot:footer>
102 <view v-if="form.businessLicenseArr&&form.businessLicenseArr?.length>0" class="frrr" 103 <view v-if="form.businessLicenseArr&&form.businessLicenseArr?.length>0" class="frrr"
......
...@@ -96,13 +96,21 @@ async function getList() { ...@@ -96,13 +96,21 @@ async function getList() {
96 return uni.showToast({title: '请输入考官编号', icon: 'none'}) 96 return uni.showToast({title: '请输入考官编号', icon: 'none'})
97 97
98 loading.value = true 98 loading.value = true
99 try {
99 const res = await api.getCoachList(queryParams.value) 100 const res = await api.getCoachList(queryParams.value)
100 infoList.value = res.rows 101 infoList.value = res.rows || []
101 total.value = res.total 102 total.value = res.total || 0
103 } catch (err) {
104 console.error('获取考官列表失败:', err)
105 infoList.value = []
106 total.value = 0
107 } finally {
102 loading.value = false 108 loading.value = false
109 }
103 110
111 // 空数组提示
104 if (infoList.value.length === 0) { 112 if (infoList.value.length === 0) {
105 uni.showToast({title: '请核实考官编号、有效期及归属地!', icon: 'none'}) 113 uni.showToast({title: '请核实考官编号、有效期及归属地', icon: 'none', duration: 2000})
106 } 114 }
107 } 115 }
108 116
...@@ -163,7 +171,8 @@ async function confirmAddExpireExaminer() { ...@@ -163,7 +171,8 @@ async function confirmAddExpireExaminer() {
163 uni.navigateBack({delta: 1}) 171 uni.navigateBack({delta: 1})
164 } catch (err) { 172 } catch (err) {
165 console.log(err) 173 console.log(err)
166 uni.showToast({title: '添加失败', icon: 'none'}) 174 const errMsg = err?.data?.msg || err?.msg || '添加失败'
175 uni.showToast({title: errMsg, icon: 'none', duration: 3000})
167 } finally { 176 } finally {
168 expirePopup.value.close() 177 expirePopup.value.close()
169 currentExpireItem.value = null 178 currentExpireItem.value = null
......
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
18 <uni-forms-item label="机构名称" required> 18 <uni-forms-item label="机构名称" required>
19 <uni-easyinput v-model="form.name" :disabled="type" placeholder="机构名称" /></uni-forms-item> 19 <uni-easyinput v-model="form.name" :disabled="type" placeholder="机构名称" /></uni-forms-item>
20 20
21 <uni-forms-item label="所属省份" required> 21 <!-- <uni-forms-item label="所属省份" required>
22 <uni-data-select :clear="false" :disabled="type&&(belongProvinceId||belongProvinceId==0)" 22 <uni-data-select :clear="false" :disabled="type&&(belongProvinceId||belongProvinceId==0)"
23 v-model="form.belongProvinceId" :localdata="regionsList"></uni-data-select> 23 v-model="form.belongProvinceId" :localdata="regionsList"></uni-data-select>
24 </uni-forms-item> 24 </uni-forms-item> -->
25 <uni-forms-item label="社会信用代码" required> 25 <uni-forms-item label="社会信用代码" required>
26 <uni-easyinput v-model="form.creditCode" :disabled="type&&!!creditCode&&newResult" /> 26 <uni-easyinput v-model="form.creditCode" :disabled="type&&!!creditCode&&newResult" />
27 </uni-forms-item> 27 </uni-forms-item>
...@@ -43,13 +43,11 @@ ...@@ -43,13 +43,11 @@
43 <uni-forms-item label="法人证件号" required> 43 <uni-forms-item label="法人证件号" required>
44 <uni-easyinput v-model="form.legalIdcCode" /> 44 <uni-easyinput v-model="form.legalIdcCode" />
45 </uni-forms-item> 45 </uni-forms-item>
46 <uni-forms-item label="营业执照名称" required>
47 <uni-easyinput v-model="form.companyName" />
48 </uni-forms-item>
49 46
50 <uni-forms-item v-if="form.deptType==6&&activeStatus!= 0" label="是否申请考点" required> 47
48 <!-- <uni-forms-item v-if="form.deptType==6&&activeStatus!= 0" label="是否申请考点" required>
51 <uni-data-checkbox v-model="form.applyPoints" :localdata="yesno" /> 49 <uni-data-checkbox v-model="form.applyPoints" :localdata="yesno" />
52 </uni-forms-item> 50 </uni-forms-item> -->
53 51
54 <uni-forms-item label="法人身份证" required> 52 <uni-forms-item label="法人身份证" required>
55 <view class="imgArea"> 53 <view class="imgArea">
...@@ -63,11 +61,17 @@ ...@@ -63,11 +61,17 @@
63 </uni-file-picker> 61 </uni-file-picker>
64 </view> 62 </view>
65 </uni-forms-item> 63 </uni-forms-item>
64 <uni-forms-item label="营业执照名称" required>
65 <uni-easyinput v-model="form.companyName" />
66 </uni-forms-item>
66 <uni-forms-item label="营业执照" required> 67 <uni-forms-item label="营业执照" required>
67 <uni-file-picker limit="1" v-model="businessLicenseArr" file-extname="png,jpg,jpeg,pdf" 68 <uni-file-picker limit="1" v-model="businessLicenseArr" file-extname="png,jpg,jpeg,pdf"
68 file-mediatype="all" @select="selectFile" @delete="delSupplementFile"></uni-file-picker> 69 file-mediatype="all" @select="selectFile" @delete="delSupplementFile"></uni-file-picker>
69
70 </uni-forms-item> 70 </uni-forms-item>
71 <!-- <uni-forms-item label="社会信用代码" required>
72 <uni-file-picker limit="1" v-model="businessLicenseArr" file-extname="png,jpg,jpeg,pdf"
73 file-mediatype="all" @select="selectFile" @delete="delSupplementFile"></uni-file-picker>
74 </uni-forms-item> -->
71 <uni-forms-item label="机构照片" required> 75 <uni-forms-item label="机构照片" required>
72 <uni-file-picker v-model="picArrR" limit="3" mode="grid" file-mediatype="image" 76 <uni-file-picker v-model="picArrR" limit="3" mode="grid" file-mediatype="image"
73 @select="upPicArr" @delete="delpicArr"> 77 @select="upPicArr" @delete="delpicArr">
......
...@@ -240,6 +240,13 @@ ...@@ -240,6 +240,13 @@
240 "navigationBarTitleText": "我的订单", 240 "navigationBarTitleText": "我的订单",
241 "enablePullDownRefresh": false 241 "enablePullDownRefresh": false
242 } 242 }
243 },
244 {
245 "path": "certPreview",
246 "style": {
247 "navigationBarTitleText": "电子会员证",
248 "enablePullDownRefresh": false
249 }
243 } 250 }
244 ] 251 ]
245 }, 252 },
...@@ -876,6 +883,20 @@ ...@@ -876,6 +883,20 @@
876 "navigationBarTitleText": "考生信息", 883 "navigationBarTitleText": "考生信息",
877 "enablePullDownRefresh": false 884 "enablePullDownRefresh": false
878 } 885 }
886 },
887 {
888 "path": "settlementAudit",
889 "style": {
890 "navigationBarTitleText": "结算审核",
891 "enablePullDownRefresh": false
892 }
893 },
894 {
895 "path": "settlementView",
896 "style": {
897 "navigationBarTitleText": "结算详情",
898 "enablePullDownRefresh": false
899 }
879 } 900 }
880 ] 901 ]
881 }, { 902 }, {
......
...@@ -239,18 +239,23 @@ ...@@ -239,18 +239,23 @@
239 <image :src="config.baseUrl_api+'/fs/static/icon/2.png'"/> 239 <image :src="config.baseUrl_api+'/fs/static/icon/2.png'"/>
240 考试审核 240 考试审核
241 </view> 241 </view>
242 <view @click="goPath('/level/ztx/cert?type=1')">
243 <image :src="config.baseUrl_api+'/fs/static/icon/18.png'"/>
244 证书发布
245 </view>
246 <view @click="goPath('/level/ztx/mail')"> 242 <view @click="goPath('/level/ztx/mail')">
247 <image :src="config.baseUrl_api+'/fs/static/icon/3.png'"/> 243 <image :src="config.baseUrl_api+'/fs/static/icon/3.png'"/>
248 证书邮寄 244 证书邮寄
249 </view> 245 </view>
246 <view @click="goPath('/level/ztx/cert?type=1')">
247 <image :src="config.baseUrl_api+'/fs/static/icon/18.png'"/>
248 证书发布
249 </view>
250 <view @click="goPath('/personalVip/changeLevelAudit')"> 250 <view @click="goPath('/personalVip/changeLevelAudit')">
251 <image :src="config.baseUrl_api+'/fs/static/icon/26.png'"/> 251 <image :src="config.baseUrl_api+'/fs/static/icon/26.png'"/>
252 变更审核 252 变更审核
253 </view> 253 </view>
254 <view @click="goPath('/level/settlementAudit')">
255 <image :src="config.baseUrl_api+'/fs/static/icon/10.png'"/>
256 结算审核
257 </view>
258
254 <view @click="goPath('/personalVip/order?type=2')"> 259 <view @click="goPath('/personalVip/order?type=2')">
255 <image :src="config.baseUrl_api+'/fs/static/icon/6.png'"/> 260 <image :src="config.baseUrl_api+'/fs/static/icon/6.png'"/>
256 订单列表 261 订单列表
......
...@@ -284,7 +284,7 @@ ...@@ -284,7 +284,7 @@
284 getDetail() 284 getDetail()
285 getRegionsList() 285 getRegionsList()
286 286
287 getMyMemberCertUnitFeeApi() 287 // getMyMemberCertUnitFeeApi()
288 canUseDiscountApi() 288 canUseDiscountApi()
289 getZtxDiscountPolicyApi() 289 getZtxDiscountPolicyApi()
290 getMyStatusAPI() 290 getMyStatusAPI()
......
...@@ -176,7 +176,7 @@ ...@@ -176,7 +176,7 @@
176 // 审核 176 // 审核
177 function goApproval(item) { 177 function goApproval(item) {
178 uni.navigateTo({ 178 uni.navigateTo({
179 url: `/pages/rank/scoreAudit?ids=${item.examId}&pageType=2` 179 url: `/pages/rank/scoreAudit?ids=${item.examId}&pageType=1`
180 }) 180 })
181 } 181 }
182 </script> 182 </script>
......
...@@ -87,12 +87,16 @@ ...@@ -87,12 +87,16 @@
87 delete params.reason 87 delete params.reason
88 } 88 }
89 89
90
90 try { 91 try {
91 // 根据 pageType 自动切换接口 92 // 根据 pageType 1 审核考试 2 审核成绩 3 结算审核
92 if (pageType.value == '1') { 93 if (pageType.value == '1') {
93 await api.auditDuanExam(params); 94 await api.auditDuanExam(params);
94 } else if (pageType.value == '2') { 95 } else if (pageType.value == '2') {
95 await api.auditDuanScore(params); 96 await api.auditDuanScore(params);
97 } else if (pageType.value == '3') {
98 params.type = '1' // 结算审核固定 type = 1
99 await api.settlementAudit(params);
96 } else { 100 } else {
97 uni.showToast({ title: '页面类型错误', icon: 'none' }); 101 uni.showToast({ title: '页面类型错误', icon: 'none' });
98 submitting.value = false; 102 submitting.value = false;
......
...@@ -51,6 +51,14 @@ ...@@ -51,6 +51,14 @@
51 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle" 51 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle"
52 v-model="baseFormData.phone" placeholder="请输入联系方式" /> 52 v-model="baseFormData.phone" placeholder="请输入联系方式" />
53 </uni-forms-item> 53 </uni-forms-item>
54 <uni-forms-item label="会员编号" name="perCode" v-if="baseFormData.perCode">
55 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle"
56 v-model="baseFormData.perCode" placeholder="请输入会员编号" />
57 </uni-forms-item>
58 <uni-forms-item label="会员有效期" name="validityDate" v-if="baseFormData.validityDate">
59 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle"
60 v-model="baseFormData.validityDate" placeholder="请输入会员有效期" />
61 </uni-forms-item>
54 62
55 63
56 <!-- <uni-forms-item label="所在地区"> 64 <!-- <uni-forms-item label="所在地区">
...@@ -148,6 +156,8 @@ ...@@ -148,6 +156,8 @@
148 sex: '', 156 sex: '',
149 idcType: '0', 157 idcType: '0',
150 perType: '1', // (1:个人会员;2:教练;3:考官;4:裁判;5:临时会员;) 158 perType: '1', // (1:个人会员;2:教练;3:考官;4:裁判;5:临时会员;)
159 perCode:'',
160 validityDate:''
151 }) 161 })
152 const items = ref(['身份证添加', '证件照录入']) 162 const items = ref(['身份证添加', '证件照录入'])
153 const idcTypeList = ref([{ 163 const idcTypeList = ref([{
...@@ -199,7 +209,7 @@ ...@@ -199,7 +209,7 @@
199 height: '316rpx' 209 height: '316rpx'
200 }); 210 });
201 211
202 onLoad((option) => { 212 onLoad(async (option) => {
203 if (option.tab == '1') { 213 if (option.tab == '1') {
204 current.value = 1 214 current.value = 1
205 baseFormData.value.sourceFlag = 1 215 baseFormData.value.sourceFlag = 1
...@@ -210,8 +220,11 @@ ...@@ -210,8 +220,11 @@
210 disabledName.value = true 220 disabledName.value = true
211 } 221 }
212 } 222 }
213 // console.log(current.value,option.tab) 223 // 如果传入了 perId,预填会员信息
214 // getRegionsList() 224 if (option.perId) {
225 perId.value = option.perId
226 await fetchMemberInfo(option.perId)
227 }
215 }) 228 })
216 229
217 onMounted(() => { 230 onMounted(() => {
...@@ -227,6 +240,40 @@ ...@@ -227,6 +240,40 @@
227 }) 240 })
228 } 241 }
229 242
243 // 根据 perId 获取会员信息预填表单
244 async function fetchMemberInfo(id) {
245 if (!id) return
246 uni.showLoading({ title: '加载中...' })
247 try {
248 const res = await api.getInfo(id)
249 const data = res.data || {}
250 baseFormData.value.name = data.name || ''
251 baseFormData.value.idcCode = data.idcCode || ''
252 baseFormData.value.idcType = data.idcType || '0'
253 baseFormData.value.sex = data.sex || ''
254 baseFormData.value.birth = data.birth || ''
255 baseFormData.value.phone = data.phone || ''
256 baseFormData.value.perCode = data.perCode || ''
257 baseFormData.value.validityDate = data.validityDate ? data.validityDate.slice(0, 10) : ''
258 // 照片处理
259 if (data.photo2) {
260 const photoUrl = data.photo2.indexOf('http') === -1 ? config.baseUrl_api + data.photo2 : data.photo2
261 photoArr.value = {
262 url: photoUrl,
263 name: '头像',
264 extname: 'jpg'
265 }
266 baseFormData.value.photo = data.photo
267 baseFormData.value.photo2 = data.photo2
268 }
269 disabledName.value = true
270 } catch (e) {
271 console.error('获取会员信息失败', e)
272 } finally {
273 uni.hideLoading()
274 }
275 }
276
230 function onClickItem(e) { 277 function onClickItem(e) {
231 if (current.value != e.currentIndex) { 278 if (current.value != e.currentIndex) {
232 current.value = e.currentIndex 279 current.value = e.currentIndex
...@@ -277,6 +324,8 @@ ...@@ -277,6 +324,8 @@
277 baseFormData.value.idcCode = res.data.code 324 baseFormData.value.idcCode = res.data.code
278 baseFormData.value.name = res.data.name 325 baseFormData.value.name = res.data.name
279 baseFormData.value.uuid = res.data.uuid 326 baseFormData.value.uuid = res.data.uuid
327 baseFormData.value.perCode = res.data.perCode ||''
328 baseFormData.value.validityDate = res.data.validityDate?.slice(0,10) //去掉时分秒
280 // baseFormData.value.cityId = res.data.cityId 329 // baseFormData.value.cityId = res.data.cityId
281 // baseFormData.value.address = res.data.address 330 // baseFormData.value.address = res.data.address
282 } else { 331 } else {
...@@ -363,6 +412,8 @@ ...@@ -363,6 +412,8 @@
363 baseFormData.value.birth = res.data.birth 412 baseFormData.value.birth = res.data.birth
364 baseFormData.value.name = res.data.name 413 baseFormData.value.name = res.data.name
365 baseFormData.value.phone = res.data.phone 414 baseFormData.value.phone = res.data.phone
415 baseFormData.value.perCode = res.data.perCode ||''
416 baseFormData.value.validityDate = res.data.validityDate?.slice(0,10) //去掉时分秒
366 // baseFormData.value.cityId = res.data.cityId 417 // baseFormData.value.cityId = res.data.cityId
367 // baseFormData.value.address = res.data.address 418 // baseFormData.value.address = res.data.address
368 if (res.data.photo) { 419 if (res.data.photo) {
......
1 <template>
2 <view class="preview-container">
3 <view class="loading-tip" v-if="loading">加载中...</view>
4 <view class="error-tip" v-else-if="showError">{{ errorMsg }}</view>
5
6 <view class="download-btn" @click="openDocument">
7 <text>查看会员证</text>
8 </view>
9 </view>
10 </template>
11
12 <script setup>
13 import { ref } from "vue";
14 import { onLoad } from "@dcloudio/uni-app";
15 import config from "@/config.js";
16
17 const pdfUrl = ref("");
18 const loading = ref(true);
19 const showError = ref(false);
20 const errorMsg = ref("");
21 const tempFilePath = ref("");
22
23 onLoad(async (option) => {
24 if (option.url) {
25 pdfUrl.value = config.baseUrl_api + decodeURIComponent(option.url);
26 await downloadPdf();
27 }
28 });
29
30 const downloadPdf = () => {
31 return new Promise((resolve) => {
32 uni.showLoading({ title: "加载中..." });
33 uni.downloadFile({
34 url: pdfUrl.value,
35 success: (res) => {
36 uni.hideLoading();
37 if (res.statusCode === 200) {
38 tempFilePath.value = res.tempFilePath;
39 loading.value = false;
40 // 自动打开文档
41 openDocument();
42 } else {
43 showError.value = true;
44 errorMsg.value = "下载失败";
45 }
46 resolve();
47 },
48 fail: () => {
49 uni.hideLoading();
50 showError.value = true;
51 errorMsg.value = "下载失败";
52 resolve();
53 }
54 });
55 });
56 };
57
58 const openDocument = () => {
59 if (!tempFilePath.value) {
60 uni.showToast({ title: "文件未准备好", icon: "none" });
61 return;
62 }
63 uni.openDocument({
64 filePath: tempFilePath.value,
65 fileType: "pdf",
66 showMenu: true,
67 success: () => {
68 console.log("打开文档成功");
69 },
70 fail: () => {
71 uni.showToast({ title: "打开失败,请在右上角菜单中下载", icon: "none" });
72 }
73 });
74 };
75 </script>
76
77 <style lang="scss" scoped>
78 .preview-container {
79 min-height: 100vh;
80 background: #f5f5f5;
81 position: relative;
82 }
83
84 .loading-tip {
85 position: absolute;
86 top: 50%;
87 left: 50%;
88 transform: translate(-50%, -50%);
89 font-size: 28rpx;
90 color: #666;
91 }
92
93 .error-tip {
94 position: absolute;
95 top: 50%;
96 left: 50%;
97 transform: translate(-50%, -50%);
98 font-size: 28rpx;
99 color: #C40F18;
100 }
101
102 .download-btn {
103 position: fixed;
104 bottom: 50rpx;
105 left: 50%;
106 transform: translateX(-50%);
107 background: #C40F18;
108 color: #fff;
109 padding: 24rpx 60rpx;
110 border-radius: 40rpx;
111 font-size: 28rpx;
112 z-index: 100;
113 }
114 </style>
...@@ -76,6 +76,8 @@ ...@@ -76,6 +76,8 @@
76 76
77 <script setup> 77 <script setup>
78 import { ref, onMounted } from 'vue'; 78 import { ref, onMounted } from 'vue';
79 import { onLoad } from '@dcloudio/uni-app';
80
79 import { useUserStore } from '../store/modules/user'; 81 import { useUserStore } from '../store/modules/user';
80 import { getAssoPers } from '@/common/api.js'; 82 import { getAssoPers } from '@/common/api.js';
81 import { getPersonTecDetails } from '@/common/api.js'; 83 import { getPersonTecDetails } from '@/common/api.js';
...@@ -90,12 +92,22 @@ ...@@ -90,12 +92,22 @@
90 // 变更记录相关 92 // 变更记录相关
91 const changeRecordPopup = ref(null); 93 const changeRecordPopup = ref(null);
92 const currentChangeRecord = ref(null); 94 const currentChangeRecord = ref(null);
95 const pageType = ref('');
93 96
94 // 返回上一页 97 // 返回上一页
95 const goBack = () => { 98 const goBack = () => {
96 uni.navigateBack(); 99 uni.navigateBack();
97 }; 100 };
98 101 onLoad((option) => {
102 if (option.type) {
103 pageType.value = option.type;
104 if (pageType.value == '0') {
105 uni.setNavigationBarTitle({ title: '级位记录' })
106 } else if (pageType.value == '1') {
107 uni.setNavigationBarTitle({ title: '段位记录' })
108 }
109 }
110 });
99 // 显示变更记录 111 // 显示变更记录
100 const showChangeRecord = (item) => { 112 const showChangeRecord = (item) => {
101 // remark已经在getLevelRecords中解析过了,直接使用 113 // remark已经在getLevelRecords中解析过了,直接使用
...@@ -116,7 +128,7 @@ ...@@ -116,7 +128,7 @@
116 const getLevelRecords = async () => { 128 const getLevelRecords = async () => {
117 loading.value = true; 129 loading.value = true;
118 try { 130 try {
119 const res = await getPersonTecDetails(0, perId.value); // 0表示级位 131 const res = await getPersonTecDetails(pageType.value, perId.value); // 0表示级位
120 levelRecords.value = res.data || []; 132 levelRecords.value = res.data || [];
121 // 处理数据 133 // 处理数据
122 levelRecords.value.forEach(item => { 134 levelRecords.value.forEach(item => {
......
...@@ -51,6 +51,14 @@ ...@@ -51,6 +51,14 @@
51 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle" 51 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle"
52 v-model="baseFormData.phone" placeholder="请输入联系方式" /> 52 v-model="baseFormData.phone" placeholder="请输入联系方式" />
53 </uni-forms-item> 53 </uni-forms-item>
54 <uni-forms-item label="会员编号" name="perCode" v-if="baseFormData.perCode">
55 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle"
56 v-model="baseFormData.perCode" placeholder="请输入会员编号" />
57 </uni-forms-item>
58 <uni-forms-item label="会员有效期" name="validityDate" v-if="baseFormData.validityDate">
59 <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle"
60 v-model="baseFormData.validityDate" placeholder="请输入会员有效期" />
61 </uni-forms-item>
54 62
55 63
56 <uni-forms-item label="所在地区"> 64 <uni-forms-item label="所在地区">
...@@ -142,6 +150,8 @@ ...@@ -142,6 +150,8 @@
142 sex: '', 150 sex: '',
143 idcType: '0', 151 idcType: '0',
144 perType: '1', // (1:个人会员;2:教练;3:考官;4:裁判;5:临时会员;) 152 perType: '1', // (1:个人会员;2:教练;3:考官;4:裁判;5:临时会员;)
153 perCode:'',
154 validityDate:''
145 }) 155 })
146 const items = ref(['身份证添加', '证件照录入']) 156 const items = ref(['身份证添加', '证件照录入'])
147 const idcTypeList = ref([{ 157 const idcTypeList = ref([{
...@@ -356,6 +366,8 @@ ...@@ -356,6 +366,8 @@
356 baseFormData.value.phone = res.data.phone 366 baseFormData.value.phone = res.data.phone
357 baseFormData.value.cityId = res.data.cityId 367 baseFormData.value.cityId = res.data.cityId
358 baseFormData.value.address = res.data.address 368 baseFormData.value.address = res.data.address
369 baseFormData.value.perCode = res.data.perCode ||''
370 baseFormData.value.validityDate = res.data.validityDate?.slice(0,10) //去掉时分秒
359 if (res.data.photo) { 371 if (res.data.photo) {
360 console.log(res.data.photo) 372 console.log(res.data.photo)
361 if (res.data.photo.indexOf('http') == -1) { 373 if (res.data.photo.indexOf('http') == -1) {
......
...@@ -51,15 +51,15 @@ ...@@ -51,15 +51,15 @@
51 <view class="stats-row"> 51 <view class="stats-row">
52 <view class="stat-item"> 52 <view class="stat-item">
53 <text class="stat-label">人数合计</text> 53 <text class="stat-label">人数合计</text>
54 <text class="stat-value">{{ item.allCount || 0 }}</text> 54 <text class="stat-value">{{ item.allCount || '/' }}</text>
55 </view> 55 </view>
56 <view class="stat-item"> 56 <view class="stat-item">
57 <text class="stat-label">新会员合计</text> 57 <text class="stat-label">新会员合计</text>
58 <text class="stat-value">{{ item.newCount || 0 }}</text> 58 <text class="stat-value">{{ item.newCount || '/' }}</text>
59 </view> 59 </view>
60 <view class="stat-item"> 60 <view class="stat-item">
61 <text class="stat-label">年限合计</text> 61 <text class="stat-label">年限合计</text>
62 <text class="stat-value">{{ item.yearCount || 0 }}</text> 62 <text class="stat-value">{{ item.yearCount || '/' }}</text>
63 </view> 63 </view>
64 </view> 64 </view>
65 65
...@@ -493,7 +493,7 @@ onUnmounted(() => { ...@@ -493,7 +493,7 @@ onUnmounted(() => {
493 } 493 }
494 .stat-value { 494 .stat-value {
495 font-size:32rpx; 495 font-size:32rpx;
496 font-weight:700; 496 // font-weight:700;
497 color:#333; 497 color:#333;
498 } 498 }
499 } 499 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!