23436998 by lttnew

道馆

1 parent 843f28df
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
2 "permissions": { 2 "permissions": {
3 "allow": [ 3 "allow": [
4 "Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)", 4 "Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)",
5 "WebFetch(domain:minimax-algeng-chat-tts.oss-cn-wulanchabu.aliyuncs.com)" 5 "WebFetch(domain:minimax-algeng-chat-tts.oss-cn-wulanchabu.aliyuncs.com)",
6 "Bash(node -c pages/index/perfect.vue)"
6 ] 7 ]
7 } 8 }
8 } 9 }
......
...@@ -1537,6 +1537,16 @@ export function checkBusinessLicense(data) { ...@@ -1537,6 +1537,16 @@ export function checkBusinessLicense(data) {
1537 }) 1537 })
1538 } 1538 }
1539 1539
1540 // 校验社会信用代码是否已存在
1541 export function creditCodeExist(code) {
1542 return request({
1543 url: `/member/info/creditCodeExist`,
1544 params: {
1545 creditCode: code
1546 }
1547 })
1548 }
1549
1540 // 生成单位订单renewYear 1550 // 生成单位订单renewYear
1541 export function certifiedNew(renewYear) { 1551 export function certifiedNew(renewYear) {
1542 return request({ 1552 return request({
...@@ -1689,6 +1699,15 @@ export function getMyRecentExam() { ...@@ -1689,6 +1699,15 @@ export function getMyRecentExam() {
1689 }) 1699 })
1690 } 1700 }
1691 1701
1702 // 考点申请列表
1703 export function examPointApplyList(params) {
1704 return request({
1705 url: '/member/examPointApply/list',
1706 method: 'get',
1707 params
1708 })
1709 }
1710
1692 1711
1693 // 获取订单详情 1712 // 获取订单详情
1694 export function getOrderInfo(orderId) { 1713 export function getOrderInfo(orderId) {
...@@ -2078,3 +2097,12 @@ export function settlementDetailList(params) { ...@@ -2078,3 +2097,12 @@ export function settlementDetailList(params) {
2078 params: params 2097 params: params
2079 }) 2098 })
2080 } 2099 }
2100
2101 // 会员审核记录列表
2102 export function memberAuditList(params) {
2103 return request({
2104 url: '/system/input/list',
2105 method: 'get',
2106 params: params
2107 })
2108 }
......
1 <template>
2 <view class="custom-modal" v-if="show">
3 <view class="modal-mask" @click="onMaskClick"></view>
4 <view class="modal-content">
5 <view class="modal-header" v-if="title">
6 <text class="modal-title">{{ title }}</text>
7 </view>
8 <view class="modal-body">
9 <rich-text v-if="isHtml" :nodes="content"></rich-text>
10 <text v-else class="modal-text">{{ content }}</text>
11 </view>
12 <view class="modal-footer">
13 <button class="btn-cancel" @click="onCancel" v-if="showCancel">{{ cancelText }}</button>
14 <button class="btn-confirm" @click="onConfirm" v-if="showConfirm">{{ confirmText }}</button>
15 </view>
16 </view>
17 </view>
18 </template>
19
20 <script setup>
21 import { ref } from 'vue'
22
23 const props = defineProps({
24 title: {
25 type: String,
26 default: ''
27 },
28 content: {
29 type: String,
30 default: ''
31 },
32 isHtml: {
33 type: Boolean,
34 default: false
35 },
36 showCancel: {
37 type: Boolean,
38 default: true
39 },
40 showConfirm: {
41 type: Boolean,
42 default: true
43 },
44 cancelText: {
45 type: String,
46 default: '取消'
47 },
48 confirmText: {
49 type: String,
50 default: '确定'
51 },
52 maskCloseable: {
53 type: Boolean,
54 default: true
55 }
56 })
57
58 const emit = defineEmits(['cancel', 'confirm'])
59
60 const show = ref(false)
61
62 function onCancel() {
63 show.value = false
64 emit('cancel')
65 }
66
67 function onConfirm() {
68 show.value = false
69 emit('confirm')
70 }
71
72 function onMaskClick() {
73 if (props.maskCloseable) {
74 show.value = false
75 }
76 }
77
78 // 对外暴露的方法
79 function open() {
80 show.value = true
81 }
82
83 function close() {
84 show.value = false
85 }
86
87 defineExpose({ open, close })
88 </script>
89
90 <style lang="scss" scoped>
91 .custom-modal {
92 position: fixed;
93 top: 0;
94 left: 0;
95 right: 0;
96 bottom: 0;
97 z-index: 9999;
98 display: flex;
99 align-items: center;
100 justify-content: center;
101 }
102
103 .modal-mask {
104 position: absolute;
105 top: 0;
106 left: 0;
107 right: 0;
108 bottom: 0;
109 background: rgba(0, 0, 0, 0.5);
110 }
111
112 .modal-content {
113 position: relative;
114 width: 600rpx;
115 max-width: 85%;
116 background: #fff;
117 border-radius: 24rpx;
118 overflow: hidden;
119 animation: modalIn 0.2s ease;
120 }
121
122 @keyframes modalIn {
123 from {
124 opacity: 0;
125 transform: scale(0.9);
126 }
127 to {
128 opacity: 1;
129 transform: scale(1);
130 }
131 }
132
133 .modal-header {
134 padding: 32rpx 30rpx 0;
135 text-align: center;
136 }
137
138 .modal-title {
139 font-size: 32rpx;
140 font-weight: 600;
141 color: #333;
142 }
143
144 .modal-body {
145 padding: 30rpx;
146 max-height: 60vh;
147 overflow-y: auto;
148 }
149
150 .modal-text {
151 font-size: 28rpx;
152 color: #666;
153 line-height: 1.6;
154 text-align: center;
155 white-space: pre-wrap;
156 word-break: break-word;
157 }
158
159 .modal-footer {
160 display: flex;
161 padding: 0 30rpx 30rpx;
162 gap: 24rpx;
163 justify-content: center;
164 }
165
166 .btn-cancel,
167 .btn-confirm {
168 flex: 1;
169 height: 80rpx;
170 line-height: 80rpx;
171 font-size: 30rpx;
172 border-radius: 40rpx;
173 margin: 0;
174 padding: 0;
175 border: none;
176 }
177
178 .btn-cancel {
179 background: #fff;
180 color: #AD181F;
181 border: 2rpx solid #AD181F;
182 }
183
184 .btn-confirm {
185 background: #AD181F;
186 color: #fff;
187 }
188 </style>
1 <template> 1 <template>
2 <view> 2 <view>
3 <!-- 自定义弹窗 -->
4 <custom-modal ref="customModalRef" :title="modalConfig.title" :content="modalConfig.content" :showCancel="modalConfig.showCancel" :cancelText="modalConfig.cancelText" :confirmText="modalConfig.confirmText" @confirm="onModalConfirm" />
5
3 <!-- 顶部添加考官按钮 --> 6 <!-- 顶部添加考官按钮 -->
4 <view class="add-btn-box"> 7 <view class="add-btn-box">
5 <button class="btn-red-kx mini" @click="openAddExaminer"> 8 <button class="btn-red-kx mini" @click="openAddExaminer">
...@@ -13,20 +16,22 @@ ...@@ -13,20 +16,22 @@
13 <view class="item" v-for="(n,index) in list" :key="index"> 16 <view class="item" v-for="(n,index) in list" :key="index">
14 <view class="item-content"> 17 <view class="item-content">
15 <view class="name-row"> 18 <view class="name-row">
16 <view class="name">{{n.perName}}</view> 19 <view class="name">{{n.perName}} <text class="expired-text" v-if="n.canChoose != 1">已过期</text></view>
17 <view class="expired-tag" v-if="n.canChoose != 1"> 20 <!-- <view class="expired-tag" v-if="n.canChoose != 1">
18 <text class="expired-text">已过期</text> 21 <text class="text">已过期</text>
19 </view> 22 </view> -->
20 </view> 23 </view>
21 <view class="date">会员号:{{n.perCode||'-'}}</view> 24 <view class="date">会员号:{{n.perCode||'-'}}</view>
22 <view class="date">有效日期:{{ formatDate(n.roleInfo && n.roleInfo.validTime ? n.roleInfo.validTime : '-') }}</view> 25 <view class="date">有效日期:{{ formatDate(n.roleInfo && n.roleInfo.validTime ? n.roleInfo.validTime : '-') }}</view>
23 <view class="date">注册地:{{n.memName||'-'}}</view> 26 <view class="date">注册地:{{n.memName||'-'}}</view>
24 </view> 27 </view>
25 <view class="status"> 28 <view class="status">
29 <text v-if="pageType == 1" class="text-danger" @click="handleDelete(n)">删除</text>
30 <template v-else>
26 <text v-if="isChosen(n)" class="text-chosen">已选</text> 31 <text v-if="isChosen(n)" class="text-chosen">已选</text>
27 <!-- <text v-else-if="n.canChoose != 1" class="text-gray">不可选</text> -->
28 <text v-else-if="n.canChoose == 1" class="text-primary" @click="handleChoose(n)">选择</text> 32 <text v-else-if="n.canChoose == 1" class="text-primary" @click="handleChoose(n)">选择</text>
29 <text v-else class="text-gray">不可选</text> 33 <text v-else class="text-gray">不可选</text>
34 </template>
30 </view> 35 </view>
31 </view> 36 </view>
32 </view> 37 </view>
...@@ -79,12 +84,10 @@ ...@@ -79,12 +84,10 @@
79 <script setup> 84 <script setup>
80 import * as api from '@/common/api.js' 85 import * as api from '@/common/api.js'
81 import config from '@/config.js' 86 import config from '@/config.js'
82 import { 87 import { ref } from 'vue'
83 ref 88 import { onLoad } from '@dcloudio/uni-app'
84 } from 'vue' 89 import customModal from '@/components/custom-modal.vue'
85 import { 90
86 onLoad
87 } from '@dcloudio/uni-app'
88 const app = getApp(); 91 const app = getApp();
89 const list = ref([]) 92 const list = ref([])
90 const loading = ref(false) 93 const loading = ref(false)
...@@ -92,6 +95,8 @@ ...@@ -92,6 +95,8 @@
92 let ec = null 95 let ec = null
93 96
94 const addPopup = ref(null) 97 const addPopup = ref(null)
98 const customModalRef = ref(null)
99 const modalConfig = ref({})
95 const addForm = ref({ 100 const addForm = ref({
96 type: 1, 101 type: 1,
97 name: '', 102 name: '',
...@@ -99,10 +104,16 @@ ...@@ -99,10 +104,16 @@
99 }) 104 })
100 const searchResult = ref(null) 105 const searchResult = ref(null)
101 const searchNoData = ref(false) 106 const searchNoData = ref(false)
102 107 const pageType = ref('')
103 onLoad((option) => { 108 onLoad((option) => {
109 if(option.pageType ){
110 pageType.value = option.pageType || ''
111 }else{
104 chosen = JSON.parse(decodeURIComponent(option.chosen || '[]')) 112 chosen = JSON.parse(decodeURIComponent(option.chosen || '[]'))
105 ec = option.ec 113 ec = option.ec
114 }
115
116 console.log('pageType.value',pageType.value)
106 getList() 117 getList()
107 }) 118 })
108 119
...@@ -176,6 +187,52 @@ ...@@ -176,6 +187,52 @@
176 uni.navigateBack({ delta: 1 }) 187 uni.navigateBack({ delta: 1 })
177 } 188 }
178 189
190 // 删除考官
191 let pendingDeleteRow = null
192 let modalAction = '' // 'delete' or 'add'
193
194 function handleDelete(row) {
195 pendingDeleteRow = row
196 modalAction = 'delete'
197 modalConfig.value = {
198 title: '提示',
199 content: `确定删除 "${row.perName}" 吗?`,
200 showCancel: true,
201 cancelText: '取消',
202 confirmText: '确定'
203 }
204 customModalRef.value.open()
205 }
206
207 function onModalConfirm() {
208 if (modalAction === 'delete' && pendingDeleteRow) {
209 uni.showLoading({ title: '删除中' })
210 api.examinerDel(pendingDeleteRow.id).then(() => {
211 uni.hideLoading()
212 uni.showToast({ title: '删除成功', icon: 'success' })
213 getList()
214 }).catch(() => {
215 uni.hideLoading()
216 uni.showToast({ title: '删除失败', icon: 'error' })
217 })
218 pendingDeleteRow = null
219 modalAction = ''
220 } else if (modalAction === 'add' && pendingAddRow) {
221 uni.showLoading({ title: '添加中' })
222 api.selfAdd(pendingAddRow.perId).then(() => {
223 uni.hideLoading()
224 uni.showToast({ title: '添加成功', icon: 'success' })
225 addPopup.value.close()
226 getList()
227 }).catch(() => {
228 uni.hideLoading()
229 uni.showToast({ title: '添加失败', icon: 'error' })
230 })
231 pendingAddRow = null
232 modalAction = ''
233 }
234 }
235
179 // 打开添加考官弹窗 236 // 打开添加考官弹窗
180 function openAddExaminer() { 237 function openAddExaminer() {
181 addForm.value.name = '' 238 addForm.value.name = ''
...@@ -218,26 +275,18 @@ ...@@ -218,26 +275,18 @@
218 } 275 }
219 276
220 // 执行添加考官 277 // 执行添加考官
278 let pendingAddRow = null
221 function doAddExaminer(row) { 279 function doAddExaminer(row) {
222 uni.showModal({ 280 pendingAddRow = row
281 modalAction = 'add'
282 modalConfig.value = {
223 title: '提示', 283 title: '提示',
224 content: `确定添加 "${row.name}" 为考官吗?`, 284 content: `确定添加 "${row.perName}" 为考官吗?`,
225 success: (res) => { 285 showCancel: true,
226 if (res.confirm) { 286 cancelText: '取消',
227 uni.showLoading({ title: '添加中' }) 287 confirmText: '确定'
228 api.selfAdd(row.perId).then(() => {
229 uni.hideLoading()
230 uni.showToast({ title: '添加成功', icon: 'success' })
231 addPopup.value.close()
232 // 刷新列表
233 getList()
234 }).catch(() => {
235 uni.hideLoading()
236 uni.showToast({ title: '添加失败', icon: 'error' })
237 })
238 }
239 } 288 }
240 }) 289 customModalRef.value.open()
241 } 290 }
242 </script> 291 </script>
243 292
...@@ -333,7 +382,11 @@ ...@@ -333,7 +382,11 @@
333 } 382 }
334 383
335 .text-danger { 384 .text-danger {
336 color: #dd524d; 385 border-radius: 30rpx;
386 background: linear-gradient(135deg, #fff1f0, #ffe5e5);
387 color: #e8341d;
388 font-size: 22rpx;
389 border: 1rpx solid rgba(232, 52, 29, 0.3);
337 } 390 }
338 391
339 .popBody { 392 .popBody {
......
...@@ -88,14 +88,18 @@ ...@@ -88,14 +88,18 @@
88 <!-- 注册提示弹框 --> 88 <!-- 注册提示弹框 -->
89 <uni-popup ref="registerPopup" type="center" :mask-click="false"> 89 <uni-popup ref="registerPopup" type="center" :mask-click="false">
90 <view class="register-popup"> 90 <view class="register-popup">
91 <view class="popup-title">注册提示</view> 91 <view class="popup-title">系统提示</view>
92 <view class="popup-content"> 92 <view class="popup-content">
93 <view class="popup-text">请准备以下材料,以便顺利完成注册</view> 93 <view class="popup-text">尊敬的用户,您好!</view>
94 <view class="popup-list"> 94 <view class="popup-text">在开始注册团体会员前,请您提前准备好以下材料,以便顺利完成申请:</view>
95 <text>1. 单位营业执照(清晰照片)</text> 95 <view class="popup-item">1. 单位营业执照</view>
96 <text>2. 法人身份证正反面照片(清晰照片)</text> 96 <view class="popup-desc">请提供清晰的营业执照原件照片或扫描件(加盖公章更佳)</view>
97 <text>3. 单位营业执照(清晰照片)</text> 97 <view class="popup-item">2. 法人身份证正反面照片</view>
98 </view> 98 <view class="popup-desc">请分别上传身份证正面及反面清晰照片</view>
99 <view class="popup-desc">确保信息完整、无遮挡、无模糊</view>
100 <view class="popup-item">3. 机构照片</view>
101 <view class="popup-desc">请提供体现单位实际经营或办公环境的照片1-2张</view>
102 <view class="popup-desc">如门头、办公场所、活动场地等(能展示机构真实存在即可)</view>
99 </view> 103 </view>
100 <view class="popup-btns"> 104 <view class="popup-btns">
101 <view class="popup-btn cancel" @click="closeRegisterPopup">取消</view> 105 <view class="popup-btn cancel" @click="closeRegisterPopup">取消</view>
...@@ -108,10 +112,12 @@ ...@@ -108,10 +112,12 @@
108 112
109 <script setup> 113 <script setup>
110 import { 114 import {
111 onLoad 115 onLoad,
116 onReady
112 } from '@dcloudio/uni-app'; 117 } from '@dcloudio/uni-app';
113 import { 118 import {
114 ref 119 ref,
120 nextTick
115 } from 'vue' 121 } from 'vue'
116 import config from '@/config.js' 122 import config from '@/config.js'
117 import { 123 import {
...@@ -161,6 +167,10 @@ onLoad(() => { ...@@ -161,6 +167,10 @@ onLoad(() => {
161 } 167 }
162 }) 168 })
163 169
170 onReady(() => {
171 console.log('registerPopup ready:', registerPopup.value)
172 })
173
164 function goBack() { 174 function goBack() {
165 uni.navigateBack() 175 uni.navigateBack()
166 } 176 }
...@@ -246,7 +256,11 @@ function login() { ...@@ -246,7 +256,11 @@ function login() {
246 } 256 }
247 257
248 function goRegister() { 258 function goRegister() {
259 nextTick(() => {
260 if (registerPopup.value) {
249 registerPopup.value.open() 261 registerPopup.value.open()
262 }
263 })
250 } 264 }
251 265
252 function closeRegisterPopup() { 266 function closeRegisterPopup() {
...@@ -560,28 +574,47 @@ function call(num) { ...@@ -560,28 +574,47 @@ function call(num) {
560 574
561 /* 注册提示弹框 */ 575 /* 注册提示弹框 */
562 .register-popup { 576 .register-popup {
563 width: 600rpx; 577 width: 700rpx;
564 background: #ffffff; 578 background: #ffffff;
565 border-radius: 24rpx; 579 border-radius: 24rpx;
566 overflow: hidden; 580 overflow: hidden;
567 } 581 }
568 582
569 .popup-title { 583 .popup-title {
570 font-size: 32rpx; 584 // display: inline-block;
571 font-weight: 500; 585 // background: #AD181F;
572 color: #333; 586 color: #333;
587 font-size: 28rpx;
588 font-weight: 600;
589 margin: 30rpx auto 20rpx;
573 text-align: center; 590 text-align: center;
574 padding: 40rpx 30rpx 20rpx;
575 } 591 }
576 592
577 .popup-content { 593 .popup-content {
578 padding: 20rpx 30rpx 40rpx; 594 padding: 0 30rpx 30rpx;
579 } 595 }
580 596
581 .popup-text { 597 .popup-text {
598 font-size: 26rpx;
599 color: #666;
600 margin-bottom: 16rpx;
601 line-height: 1.6;
602 }
603
604 .popup-item {
582 font-size: 28rpx; 605 font-size: 28rpx;
583 color: #333; 606 color: #333;
584 margin-bottom: 20rpx; 607 font-weight: 600;
608 margin-top: 24rpx;
609 margin-bottom: 10rpx;
610 }
611
612 .popup-desc {
613 font-size: 24rpx;
614 color: #888;
615 padding-left: 16rpx;
616 line-height: 1.5;
617 margin-bottom: 8rpx;
585 } 618 }
586 619
587 .popup-list { 620 .popup-list {
...@@ -599,24 +632,27 @@ function call(num) { ...@@ -599,24 +632,27 @@ function call(num) {
599 632
600 .popup-btns { 633 .popup-btns {
601 display: flex; 634 display: flex;
602 border-top: 1rpx solid #eee; 635 padding: 0 30rpx 30rpx;
636 gap: 24rpx;
603 } 637 }
604 638
605 .popup-btn { 639 .popup-btn {
606 flex: 1; 640 flex: 1;
607 height: 100rpx; 641 height: 80rpx;
608 line-height: 100rpx; 642 line-height: 80rpx;
609 text-align: center; 643 text-align: center;
610 font-size: 30rpx; 644 font-size: 30rpx;
645 border-radius: 40rpx;
611 } 646 }
612 647
613 .popup-btn.cancel { 648 .popup-btn.cancel {
614 color: #666; 649 background: #fff;
615 border-right: 1rpx solid #eee; 650 color: #AD181F;
651 border: 2rpx solid #AD181F;
616 } 652 }
617 653
618 .popup-btn.confirm { 654 .popup-btn.confirm {
619 color: #AD181F; 655 background: #AD181F;
620 font-weight: 500; 656 color: #fff;
621 } 657 }
622 </style> 658 </style>
......
...@@ -59,6 +59,20 @@ ...@@ -59,6 +59,20 @@
59 </view> 59 </view>
60 </view> 60 </view>
61 </view> 61 </view>
62
63 <!-- 自定义弹框 -->
64 <customModal
65 ref="customModalRef"
66 :title="modalConfig.title"
67 :content="modalConfig.content"
68 :isHtml="modalConfig.isHtml"
69 :showCancel="modalConfig.showCancel"
70 :showConfirm="modalConfig.showConfirm"
71 :cancelText="modalConfig.cancelText"
72 :confirmText="modalConfig.confirmText"
73 @confirm="onModalConfirm"
74 @cancel="onModalCancel"
75 ></customModal>
62 </template> 76 </template>
63 77
64 <script setup> 78 <script setup>
...@@ -72,6 +86,7 @@ import { ...@@ -72,6 +86,7 @@ import {
72 groupMemberRegister 86 groupMemberRegister
73 } from '@/common/login.js' 87 } from '@/common/login.js'
74 import config from '@/config.js' 88 import config from '@/config.js'
89 import customModal from '@/components/custom-modal.vue'
75 const agree = ref(false) 90 const agree = ref(false)
76 const codeUrl = ref(null) 91 const codeUrl = ref(null)
77 const registerForm = ref({ 92 const registerForm = ref({
...@@ -86,6 +101,46 @@ const countDown = ref({ ...@@ -86,6 +101,46 @@ const countDown = ref({
86 start: false, 101 start: false,
87 second: 60 102 second: 60
88 }) 103 })
104
105 // 自定义弹框
106 const customModalRef = ref(null)
107 const modalConfig = ref({
108 title: '',
109 content: '',
110 isHtml: false,
111 showCancel: true,
112 showConfirm: true,
113 cancelText: '取消',
114 confirmText: '确定'
115 })
116
117 function onModalConfirm() {
118 if (modalConfig.value.onConfirm) {
119 modalConfig.value.onConfirm()
120 }
121 }
122
123 function onModalCancel() {
124 if (modalConfig.value.onCancel) {
125 modalConfig.value.onCancel()
126 }
127 }
128
129 function showModal(options) {
130 modalConfig.value = {
131 title: options.title || '',
132 content: options.content || '',
133 isHtml: options.isHtml || false,
134 showCancel: options.showCancel !== false,
135 showConfirm: options.showConfirm !== false,
136 cancelText: options.cancelText || '取消',
137 confirmText: options.confirmText || '确定',
138 onConfirm: options.onConfirm,
139 onCancel: options.onCancel
140 }
141 customModalRef.value?.open()
142 }
143
89 const inputstyle = ref({ 144 const inputstyle = ref({
90 borderColor: 'transparent', 145 borderColor: 'transparent',
91 fontSize: '30rpx' 146 fontSize: '30rpx'
...@@ -138,18 +193,14 @@ function register() { ...@@ -138,18 +193,14 @@ function register() {
138 193
139 groupMemberRegister(registerForm.value) 194 groupMemberRegister(registerForm.value)
140 .then((res) => { 195 .then((res) => {
141 uni.showModal({ 196 showModal({
142 title: '提示', 197 title: '提示',
143 content: `恭喜你,您的账号 ${registerForm.value.telNo} 注册成功!`, 198 content: `恭喜你,您的账号 ${registerForm.value.telNo} 注册成功!`,
144 confirmText: '去登录',
145 cancelText: '取消', 199 cancelText: '取消',
146 success: (res) => { 200 confirmText: '去登录',
147 if (res.confirm) { 201 onConfirm: () => {
148 registerForm.value = {} 202 registerForm.value = {}
149 goLogin() 203 goLogin()
150 } else {
151 // 取消,保持当前页面
152 }
153 } 204 }
154 }) 205 })
155 }) 206 })
......
...@@ -23,18 +23,19 @@ ...@@ -23,18 +23,19 @@
23 style="margin: 0 20rpx 0 0;" @click="payTheFees">激活 23 style="margin: 0 20rpx 0 0;" @click="payTheFees">激活
24 </button> 24 </button>
25 <view v-else> 25 <view v-else>
26 <button v-if="form.deptType==6" 26 <!-- :disabled="auditStatus==1||auditStatus==2||form.isPoints==0" class="btn-red" -->
27 :disabled="auditStatus==1||auditStatus==2||form.isPoints==0" class="btn-red" 27 <!-- <button v-if="form.deptType==6"
28
28 size="mini" 29 size="mini"
29 style="margin: 0 20rpx 0 0;" 30 style="margin: 0 20rpx 0 0;"
30 @click="showApplyDialog">考点申请 31 @click="showApplyDialog">考点申请
31 </button> 32 </button> -->
32 <button v-if="form.deptType==6" 33 <!-- <button v-if="form.deptType==6"
33 class="btn-red-kx" 34 class="btn-red-kx"
34 size="mini" 35 size="mini"
35 style="margin: 0 20rpx 0 0;" 36 style="margin: 0 20rpx 0 0;"
36 @click="auditEditFN(2)">考点详情 37 @click="auditEditFN(2)">考点详情
37 </button> 38 </button> -->
38 <button :disabled="btn" class="btn-red" size="mini" style="margin: 0 20rpx 0 0;" 39 <button :disabled="btn" class="btn-red" size="mini" style="margin: 0 20rpx 0 0;"
39 @click="payTheFees">去缴费 40 @click="payTheFees">去缴费
40 </button> 41 </button>
......
1 <template> 1 <template>
2 <view class="container"> 2 <view class="container">
3 <!-- 自定义弹窗 -->
4 <custom-modal ref="customModalRef" :title="modalConfig.title" :content="modalConfig.content" :showCancel="modalConfig.showCancel" :cancelText="modalConfig.cancelText" :confirmText="modalConfig.confirmText" @confirm="onModalConfirm" />
5
3 <!-- 考官选择类型 --> 6 <!-- 考官选择类型 -->
4 <view class="radio-section"> 7 <view class="radio-section">
5 <radio-group class="radio-group" @change="onSelfSelectChange"> 8 <radio-group class="radio-group" @change="onSelfSelectChange">
...@@ -13,20 +16,24 @@ ...@@ -13,20 +16,24 @@
13 </label> 16 </label>
14 </radio-group> 17 </radio-group>
15 </view> 18 </view>
16 <view class="section"> 19
17 <!-- 自行录入考官区域 --> 20 <!-- 温馨提示 -->
18 <view v-if="form.selfSelect==0" class="section examiner-section"> 21 <view v-if="form.selfSelect == '1'" class="tip-box">
19 <view class="modal-title">温馨提示</view> 22 <text class="tip-text">温馨提示: 您可以自行录入考官信息,如果暂时没有合适的考官,也可以选择由省跆协指派(支持多选)进行考点申报,同时请尽快完成考点考官的认证。</text>
20 <view class="modal-content"> 关于考官指派,请联系{{ shenForm.baseName }},联系电话:{{ shenForm.phone }}
21 </view> 23 </view>
24
25 <!-- 省跆协指派提示 -->
26 <view v-if="form.selfSelect == '0'" class="tip-box">
27 <text class="tip-text">温馨提示:关于考官指派,请联系{{ shenForm.baseName || '' }},联系电话:{{ shenForm.phone || '' }}</text>
22 </view> 28 </view>
23 29
24 <!-- 温馨提示 --> 30 <view class="section">
25 <view v-if="showExamine" class="section examiner-section"> 31 <!-- 自行录入考官区域 -->
32 <view v-if="form.selfSelect == '1'" class="section examiner-section">
26 <button class="add-btn" @click="handelAddExamine">+ 添加考官</button> 33 <button class="add-btn" @click="handelAddExamine">+ 添加考官</button>
27 </view> 34 </view>
28 35
29 <view v-if="showExamine" class="examiner-list"> 36 <view v-if="form.selfSelect == '1'" class="examiner-list">
30 <view v-for="(item, index) in list" :key="item.id" class="examiner-item"> 37 <view v-for="(item, index) in list" :key="item.id" class="examiner-item">
31 <view class="info"> 38 <view class="info">
32 <text class="name">{{ item.perName }} {{ item.perCode }}</text> 39 <text class="name">{{ item.perName }} {{ item.perCode }}</text>
...@@ -41,62 +48,15 @@ ...@@ -41,62 +48,15 @@
41 <view class="submit-area"> 48 <view class="submit-area">
42 <button class="submit-btn" @click="handelSubmit">确定提交</button> 49 <button class="submit-btn" @click="handelSubmit">确定提交</button>
43 </view> 50 </view>
44
45 <!-- 自定义考点申请弹窗(替换原uni.showModal) -->
46 <uni-popup ref="applyPopup" background-color="rgba(0,0,0,0.5)" type="center">
47 <view class="custom-modal">
48 <view class="modal-title">考点申请</view>
49 <view class="modal-btns">
50 <button class="btn-cancel" @click="closeApplyPopup()">暂不申请</button>
51 <button class="btn-confirm" @click="confirmApply()">立即申请</button>
52 </view>
53 <view class="modal-tip">友情提示:非考点无法申请级位考试</view>
54 </view>
55 </uni-popup>
56
57 <!-- 自定义删除确认弹窗 -->
58 <uni-popup ref="delPopup" background-color="rgba(0,0,0,0.5)" type="center">
59 <view class="custom-modal">
60 <view class="modal-title">提示</view>
61 <view class="modal-content">确定删除该考官吗?</view>
62 <view class="modal-btns">
63 <button class="btn-cancel" @click="closeDelPopup()">取消</button>
64 <button class="btn-confirm" @click="confirmDel()">确定</button>
65 </view>
66 </view>
67 </uni-popup>
68
69 <!-- 自定义省跆协指派提示弹窗 -->
70 <uni-popup ref="assignPopup" background-color="rgba(0,0,0,0.5)" type="center">
71 <view class="custom-modal">
72 <view class="modal-title">温馨提示</view>
73 <view class="modal-content"> 关于考官指派,请联系{{ shenForm.baseName }},联系电话:{{ shenForm.phone }}
74 </view>
75 <view class="modal-btns">
76 <button class="btn-confirm single-btn" @click="closeAssignPopup()">我知道了</button>
77 </view>
78 </view>
79 </uni-popup>
80
81 <!-- 自定义提交成功弹窗 -->
82 <uni-popup ref="successPopup" background-color="rgba(0,0,0,0.5)" type="center">
83 <view class="custom-modal">
84 <view class="modal-title">成功</view>
85 <view class="modal-content">提交成功,请等待审核</view>
86 <view class="modal-btns">
87 <button class="btn-confirm single-btn" @click="confirmSuccess()">确定</button>
88 </view>
89 </view>
90 </uni-popup>
91 </view> 51 </view>
92 </template> 52 </template>
93 53
94 <script setup> 54 <script setup>
95 import {ref,} from 'vue' 55 import {ref} from 'vue'
96 import {onLoad, onShow} from '@dcloudio/uni-app' 56 import {onLoad, onShow} from '@dcloudio/uni-app'
97 import * as api from '@/common/api.js' 57 import * as api from '@/common/api.js'
98 import {getShenMemberInfo} from "@/common/api.js"; 58 import customModal from '@/components/custom-modal.vue'
99 59 const app = getApp();
100 const form = ref({ 60 const form = ref({
101 selfSelect: '1' // 1:自行录入 0:省跆协指派 61 selfSelect: '1' // 1:自行录入 0:省跆协指派
102 }) 62 })
...@@ -106,28 +66,33 @@ const list = ref([]) ...@@ -106,28 +66,33 @@ const list = ref([])
106 const memId = ref(null) 66 const memId = ref(null)
107 const shenForm = ref({}) 67 const shenForm = ref({})
108 68
109 // 弹窗引用 69 // 自定义弹窗
110 const applyPopup = ref(null) 70 const customModalRef = ref(null)
111 const delPopup = ref(null) 71 const modalConfig = ref({
112 const assignPopup = ref(null) 72 title: '',
113 const successPopup = ref(null) 73 content: '',
114 let currentDelItem = ref(null) 74 showCancel: true,
75 cancelText: '取消',
76 confirmText: '确定'
77 })
78 let modalAction = '' // 'del', 'success', 'assign', 'apply'
79 let pendingDelItem = null
115 80
116 onLoad((option) => { 81 onLoad((option) => {
117 memId.value = option.memId 82 // memId.value = app.globalData.memberInfo.memId
118 getExaminer() 83 getExaminer()
119 }) 84 })
120 85
121 onShow(() => { 86 onShow(() => {
122 if (memId.value) { 87 // if (memId.value) {
123 getExaminer() 88 getExaminer()
124 } 89 // }
125 getShenMemberInfoFn() 90 getShenMemberInfoFn()
126 }) 91 })
127 92
128 async function getExaminer() { 93 async function getExaminer() {
129 loading.value = true 94 loading.value = true
130 const res = await api.listApi({memId: memId.value}) 95 const res = await api.listApi({memId: app.globalData.memberInfo.memId})
131 list.value = res.rows 96 list.value = res.rows
132 loading.value = false 97 loading.value = false
133 } 98 }
...@@ -139,20 +104,16 @@ async function getShenMemberInfoFn() { ...@@ -139,20 +104,16 @@ async function getShenMemberInfoFn() {
139 104
140 // 删除考官:打开自定义弹窗 105 // 删除考官:打开自定义弹窗
141 function handleDel(row) { 106 function handleDel(row) {
142 currentDelItem.value = row 107 pendingDelItem = row
143 delPopup.value.open() 108 modalAction = 'del'
144 } 109 modalConfig.value = {
145 110 title: '提示',
146 // 确认删除 111 content: '确定删除该考官吗?',
147 async function confirmDel() { 112 showCancel: true,
148 await api.examinerDel(currentDelItem.value.id) 113 cancelText: '取消',
149 uni.showToast({title: '删除成功', icon: 'success'}) 114 confirmText: '确定'
150 await getExaminer() 115 }
151 closeDelPopup() 116 customModalRef.value.open()
152 }
153
154 function closeDelPopup() {
155 delPopup.value.close()
156 } 117 }
157 118
158 // 切换考官类型:打开自定义提示弹窗 119 // 切换考官类型:打开自定义提示弹窗
...@@ -160,12 +121,15 @@ function onSelfSelectChange(e) { ...@@ -160,12 +121,15 @@ function onSelfSelectChange(e) {
160 form.value.selfSelect = e.detail.value 121 form.value.selfSelect = e.detail.value
161 showExamine.value = e.detail.value == '1' 122 showExamine.value = e.detail.value == '1'
162 if (e.detail.value == '0') { 123 if (e.detail.value == '0') {
163 assignPopup.value.open() 124 modalAction = 'assign'
125 modalConfig.value = {
126 title: '温馨提示',
127 content: `关于考官指派,请联系${shenForm.value.baseName || ''},联系电话:${shenForm.value.phone || ''}`,
128 showCancel: false,
129 confirmText: '我知道了'
130 }
131 customModalRef.value.open()
164 } 132 }
165 }
166
167 function closeAssignPopup() {
168 assignPopup.value.close()
169 } 133 }
170 134
171 function handelAddExamine() { 135 function handelAddExamine() {
...@@ -175,7 +139,7 @@ function handelAddExamine() { ...@@ -175,7 +139,7 @@ function handelAddExamine() {
175 }) 139 })
176 } 140 }
177 141
178 // 提交申请:打开自定义成功弹窗 142 // 提交申请
179 async function handelSubmit() { 143 async function handelSubmit() {
180 if (!form.value.selfSelect) { 144 if (!form.value.selfSelect) {
181 return uni.showToast({title: '请选择考官类型', icon: 'none'}) 145 return uni.showToast({title: '请选择考官类型', icon: 'none'})
...@@ -184,26 +148,46 @@ async function handelSubmit() { ...@@ -184,26 +148,46 @@ async function handelSubmit() {
184 return uni.showToast({title: '请添加考官', icon: 'none'}) 148 return uni.showToast({title: '请添加考官', icon: 'none'})
185 } 149 }
186 150
151 modalAction = 'success'
152 modalConfig.value = {
153 title: '提示',
154 content: '友情提示:非考点无法申请级位考试,是否确认提交申请?',
155 showCancel: true,
156 cancelText: '暂不申请',
157 confirmText: '确认提交'
158 }
159 customModalRef.value.open()
160 }
161
162 // 弹窗确认回调
163 async function onModalConfirm() {
164 if (modalAction === 'del' && pendingDelItem) {
165 try {
166 await api.examinerDel(pendingDelItem.id)
167 uni.showToast({title: '删除成功', icon: 'success'})
168 await getExaminer()
169 } catch (e) {
170 uni.showToast({title: '删除失败', icon: 'error'})
171 }
172 pendingDelItem = null
173 } else if (modalAction === 'success') {
187 try { 174 try {
188 await api.commitExamPointApply(form.value) 175 await api.commitExamPointApply(form.value)
189 successPopup.value.open() 176 modalAction = 'submitSuccess'
177 modalConfig.value = {
178 title: '成功',
179 content: '提交成功,请等待审核',
180 showCancel: false,
181 confirmText: '确定'
182 }
183 customModalRef.value.open()
190 } catch (err) { 184 } catch (err) {
191 uni.showToast({title: err.data.msg, icon: 'none'}) 185 uni.showToast({title: err.data?.msg || '提交失败', icon: 'none'})
192 } 186 }
193 } 187 } else if (modalAction === 'submitSuccess') {
194
195 function confirmSuccess() {
196 successPopup.value.close()
197 uni.navigateBack() 188 uni.navigateBack()
198 } 189 }
199 190 modalAction = ''
200 // 考点申请弹窗(如需调用可在合适位置打开)
201 function openApplyPopup() {
202 applyPopup.value.open()
203 }
204
205 function closeApplyPopup() {
206 applyPopup.value.close()
207 } 191 }
208 192
209 function confirmApply() { 193 function confirmApply() {
...@@ -231,6 +215,19 @@ function confirmApply() { ...@@ -231,6 +215,19 @@ function confirmApply() {
231 border-radius: 0; 215 border-radius: 0;
232 } 216 }
233 217
218 /* 提示框 */
219 .tip-box {
220 background: #fff7e6;
221 padding: 20rpx 30rpx;
222 margin-bottom: 10rpx;
223 }
224
225 .tip-text {
226 font-size: 24rpx;
227 color: #fa8c16;
228 line-height: 1.6;
229 }
230
234 .radio-group { 231 .radio-group {
235 display: flex; 232 display: flex;
236 align-items: center; 233 align-items: center;
......
1 <template>
2 <view class="exam-point-list">
3 <!-- 顶部申请按钮 -->
4 <view class="apply-btn-box">
5 <button class="apply-btn" :disabled="memberInfo.isPoints==0||memberInfo.auditStatus==2" @click="goApply">申请考点</button>
6 </view>
7
8 <!-- 列表 -->
9 <view class="list-content">
10 <view v-if="list.length === 0 && !loading" class="empty-tip">
11 <text>暂无申请记录</text>
12 </view>
13
14 <view
15 v-for="(item, index) in list"
16 :key="index"
17 class="list-item"
18 :class="{ 'success-row': item.shenAuditStatus == 2 }"
19 >
20 <view class="item-row">
21 <text class="item-label">审核协会</text>
22 <text class="item-value">{{ item.auditDeptName || '-' }}</text>
23 </view>
24 <view class="item-row">
25 <text class="item-label">审核日期</text>
26 <text class="item-value">{{ formatDate(item.auditTime) }}</text>
27 </view>
28 <view class="item-row">
29 <text class="item-label">审核状态</text>
30 <text class="item-status" :class="getStatusClass(item.auditResult)">
31 {{ item.auditResult == 0 ? '审核未通过' : '审核通过' }}
32 </text>
33 </view>
34 <view class="item-row">
35 <text class="item-label">理由</text>
36 <text class="item-value">{{ item.auditMsg ? item.auditMsg : '/' }}</text>
37 </view>
38 </view>
39
40 <view v-if="loading" class="loading-tip">
41 <text>加载中...</text>
42 </view>
43
44 <view v-if="noMore && list.length > 0" class="no-more-tip">
45 <text>没有更多了</text>
46 </view>
47 </view>
48 </view>
49 </template>
50
51 <script setup>
52 import { ref } from 'vue'
53 import { onLoad, onReachBottom } from '@dcloudio/uni-app'
54 import { getMyRecent } from '@/common/api'
55 const app = getApp()
56 const list = ref([])
57 const loading = ref(false)
58 const noMore = ref(false)
59 const pageNum = ref(1)
60 const pageSize = ref(10)
61 const memberInfo = app.globalData.memberInfo
62 onLoad(() => {
63 loadData()
64 })
65
66 function loadData() {
67 if (loading.value) return
68 loading.value = true
69
70 getMyRecent().then(res => {
71 if (res.data && res.data.auditLogs) {
72 try {
73 list.value = JSON.parse(res.data.auditLogs)
74 } catch (e) {
75 list.value = []
76 }
77 } else {
78 list.value = []
79 }
80 }).finally(() => {
81 loading.value = false
82 })
83 }
84
85 onReachBottom(() => {
86 if (!noMore.value) {
87 pageNum.value++
88 loadData()
89 }
90 })
91
92 function goApply() {
93 uni.navigateTo({
94 url: '/pages/index/notice-examPointApply'
95 })
96 }
97
98
99 function getStatusClass(status) {
100 return {
101 'status-1': status == 0,
102 'status-2': status == 1,
103 'status-3': status == 3
104 }
105 }
106
107 function formatDate(dateStr) {
108 if (!dateStr) return '-'
109 const date = new Date(dateStr)
110 const year = date.getFullYear()
111 const month = String(date.getMonth() + 1).padStart(2, '0')
112 const day = String(date.getDate()).padStart(2, '0')
113 return `${year}-${month}-${day}`
114 }
115 </script>
116
117 <style lang="scss" scoped>
118 .exam-point-list {
119 min-height: 100vh;
120 background: #f5f5f5;
121 }
122
123 .apply-btn-box {
124 padding: 20rpx 30rpx;
125 }
126
127 .apply-btn {
128 width: 100%;
129 height: 80rpx;
130 line-height: 80rpx;
131 background: #C4121B;
132 color: #fff;
133 font-size: 28rpx;
134 border-radius: 44rpx;
135 border: none;
136
137 &::after {
138 border: none;
139 }
140
141 &[disabled] {
142 background: #f3d4d5 !important;
143 color: #b7b5b5 !important;
144 border: 2rpx solid #e0e0e0 !important;
145 opacity: 1;
146 }
147 }
148 .list-content {
149 padding: 0 20rpx 20rpx;
150 }
151
152 .empty-tip,
153 .loading-tip,
154 .no-more-tip {
155 text-align: center;
156 padding: 60rpx 0;
157 color: #999;
158 font-size: 26rpx;
159 }
160
161 .list-item {
162 background: #fff;
163 border-radius: 16rpx;
164 padding: 24rpx;
165 margin-bottom: 20rpx;
166 }
167
168 .list-item.success-row {
169 border-left: 6rpx solid #19be6b;
170 }
171
172 .item-row {
173 display: flex;
174 margin-bottom: 16rpx;
175
176 &:last-child {
177 margin-bottom: 0;
178 }
179 }
180
181 .item-label {
182 width: 140rpx;
183 font-size: 26rpx;
184 color: #999;
185 }
186
187 .item-value {
188 flex: 1;
189 font-size: 26rpx;
190 color: #333;
191 }
192
193 .item-status {
194 font-size: 26rpx;
195 padding: 4rpx 16rpx;
196 border-radius: 20rpx;
197 }
198
199 .status-1 {
200 background: #fff7e6;
201 color: #fa8c16;
202 }
203
204 .status-2 {
205 background: #e6fff7;
206 color: #52c41a;
207 }
208
209 .status-3 {
210 background: #fff1f0;
211 color: #ff4d4f;
212 }
213 </style>
...@@ -237,16 +237,13 @@ const cancelModalContent = ref(''); ...@@ -237,16 +237,13 @@ const cancelModalContent = ref('');
237 const currentOrder = ref(null); 237 const currentOrder = ref(null);
238 238
239 // 页面挂载初始化 239 // 页面挂载初始化
240 onMounted(() => { 240 onLoad((option) => {
241 // 获取app实例和deptType 241 // 获取app实例和deptType
242 const app = getApp(); 242 const app = getApp();
243 console.log('onMounted - app:', app);
244 console.log('onMounted - app.globalData:', app.globalData);
245 deptType.value = Number(app.globalData?.deptType || 0); 243 deptType.value = Number(app.globalData?.deptType || 0);
246 console.log('onMounted - deptType.value:', deptType.value, typeof deptType.value);
247 const firstType = tabs.value[0]?.type ?? '0'; 244 const firstType = tabs.value[0]?.type ?? '0';
248 currentTab.value = firstType; 245 currentTab.value = option.type || firstType;
249 queryParams.type = firstType; 246 queryParams.type = option.type ||firstType;
250 initData(); 247 initData();
251 }); 248 });
252 249
...@@ -290,7 +287,7 @@ const getStatusText = (status) => { ...@@ -290,7 +287,7 @@ const getStatusText = (status) => {
290 1: '缴费成功', 287 1: '缴费成功',
291 2: '订单取消' 288 2: '订单取消'
292 }; 289 };
293 return map[status] || '未知状态'; 290 return map[status] || '';
294 }; 291 };
295 292
296 // 审核状态文本映射 293 // 审核状态文本映射
...@@ -301,7 +298,7 @@ const getAuditStatusText = (status) => { ...@@ -301,7 +298,7 @@ const getAuditStatusText = (status) => {
301 2: '审核通过', 298 2: '审核通过',
302 3: '审核拒绝' 299 3: '审核拒绝'
303 }; 300 };
304 return map[status] || '未知状态'; 301 return map[status] || '';
305 }; 302 };
306 303
307 // 数据请求核心方法 304 // 数据请求核心方法
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
6 <uni-forms-item label="所属协会" required> 6 <uni-forms-item label="所属协会" required>
7 <view style="width: 60vw;overflow:auto;"> 7 <view style="width: 60vw;overflow:auto;">
8 <uni-data-picker v-model="form.parentId" :localdata="tree" 8 <uni-data-picker v-model="form.parentId" :localdata="tree"
9 :readonly="type&&parentId!=-1&&parentId!=0" :clear-icon="false" 9 :readonly="type&&parentId!=-1&&parentId!=0" :clear-icon="false" placeholder="请选择协会"
10 :map="{text:'label',value:'id'}" popup-title="请选择" @change="changCase"> 10 :map="{text:'label',value:'id'}" popup-title="" @change="changCase">
11 </uni-data-picker> 11 </uni-data-picker>
12 </view> 12 </view>
13 </uni-forms-item> 13 </uni-forms-item>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
32 <uni-easyinput v-model="form.siteTel" /> 32 <uni-easyinput v-model="form.siteTel" />
33 </uni-forms-item> 33 </uni-forms-item>
34 <uni-forms-item label="认证地址" required> 34 <uni-forms-item label="认证地址" required>
35 <uni-data-picker v-model="form.coordinates1" @change="changeCoordinates1" 35 <uni-data-picker v-model="form.coordinates1" @change="changeCoordinates1" placeholder="请选择认证地址"
36 :localdata="regionsList"></uni-data-picker> 36 :localdata="regionsList"></uni-data-picker>
37 </uni-forms-item> 37 </uni-forms-item>
38 <uni-forms-item label="详细地址" required> 38 <uni-forms-item label="详细地址" required>
...@@ -792,7 +792,7 @@ ...@@ -792,7 +792,7 @@
792 } 792 }
793 793
794 :deep(.input-value) { 794 :deep(.input-value) {
795 padding: 0 5px; 795 padding: 0 5rpx;
796 } 796 }
797 797
798 .picker-view { 798 .picker-view {
......
...@@ -45,21 +45,29 @@ const recordList = ref([]) ...@@ -45,21 +45,29 @@ const recordList = ref([])
45 45
46 onLoad(async (option) => { 46 onLoad(async (option) => {
47 console.log(option) 47 console.log(option)
48 if (option.type == 1) await getMyRecentFN() 48 if (!option.type || option.type == 1) await getMyRecentFN()
49 if (option.type == 2) await getMyRecentExamFn() 49 if (option.type == 2) await getMyRecentExamFn()
50 }) 50 })
51 51
52 async function getMyRecentFN() { 52 async function getMyRecentFN() {
53 const [err, res] = await to(api.getMyRecent()) 53 const [err, res] = await to(api.getMyRecent())
54 if (!err && res.data && res.data.auditLogs) { 54 if (!err && res.data && res.data.auditLogs) {
55 recordList.value = JSON.parse(res.data.auditLogs) 55 try {
56 recordList.value = JSON.parse(res.data.auditLogs) || []
57 } catch (e) {
58 recordList.value = []
59 }
56 } 60 }
57 } 61 }
58 62
59 async function getMyRecentExamFn() { 63 async function getMyRecentExamFn() {
60 const [err, res] = await to(api.getMyRecentExam()) 64 const [err, res] = await to(api.getMyRecentExam())
61 if (!err && res.data && res.data.auditLogs) { 65 if (!err && res.data && res.data.auditLogs) {
62 recordList.value = JSON.parse(res.data.auditLogs) 66 try {
67 recordList.value = JSON.parse(res.data.auditLogs) || []
68 } catch (e) {
69 recordList.value = []
70 }
63 } 71 }
64 } 72 }
65 </script> 73 </script>
......
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
5 "^uni-(.*)": "uni_modules/uni-$1/components/uni-$1/uni-$1.vue" 5 "^uni-(.*)": "uni_modules/uni-$1/components/uni-$1/uni-$1.vue"
6 } 6 }
7 }, 7 },
8 "pages": [{ 8 "pages": [
9 {
9 "path": "pages/index/index" 10 "path": "pages/index/index"
10 }, 11 },
11 { 12 {
...@@ -38,104 +39,133 @@ ...@@ -38,104 +39,133 @@
38 "navigationBarTitleText": "开具发票", 39 "navigationBarTitleText": "开具发票",
39 "enablePullDownRefresh": false 40 "enablePullDownRefresh": false
40 } 41 }
41 }, { 42 },
43 {
42 "path": "pages/rank/approval", 44 "path": "pages/rank/approval",
43 "style": { 45 "style": {
44 "navigationBarTitleText": "段位考试审批", 46 "navigationBarTitleText": "段位考试审批",
45 "enablePullDownRefresh": false 47 "enablePullDownRefresh": false
46 } 48 }
47 49 },
48 }, { 50 {
49 "path": "pages/rank/apply", 51 "path": "pages/rank/apply",
50 "style": { 52 "style": {
51 "navigationBarTitleText": "段位考试申请", 53 "navigationBarTitleText": "段位考试申请",
52 "enablePullDownRefresh": false 54 "enablePullDownRefresh": false
53 } 55 }
54 56 },
55 }, { 57 {
56 "path": "pages/rank/applyDetail", 58 "path": "pages/rank/applyDetail",
57 "style": { 59 "style": {
58 "navigationBarTitleText": "考试详情", 60 "navigationBarTitleText": "考试详情",
59 "enablePullDownRefresh": false 61 "enablePullDownRefresh": false
60 } 62 }
61 63 },
62 }, { 64 {
63 "path": "pages/index/perfect", 65 "path": "pages/index/perfect",
64 "style": { 66 "style": {
65 "navigationBarTitleText": "注册引导", 67 "navigationBarTitleText": "注册引导",
66 "enablePullDownRefresh": false 68 "enablePullDownRefresh": false
67 } 69 }
68 70 },
69 }, { 71 {
72 "path": "pages/index/notice-registration",
73 "style": {
74 "navigationBarTitleText": "注册须知",
75 "enablePullDownRefresh": false
76 }
77 },
78 {
79 "path": "pages/index/notice-membership",
80 "style": {
81 "navigationBarTitleText": "入会须知",
82 "enablePullDownRefresh": false
83 }
84 },
85 {
86 "path": "pages/index/notice-disclaimer",
87 "style": {
88 "navigationBarTitleText": "免责声明",
89 "enablePullDownRefresh": false
90 }
91 },
92 {
93 "path": "pages/index/notice-examPointApply",
94 "style": {
95 "navigationBarTitleText": "考点申请须知",
96 "enablePullDownRefresh": false
97 }
98 },
99 {
70 "path": "pages/index/orderList", 100 "path": "pages/index/orderList",
71 "style": { 101 "style": {
72 "navigationBarTitleText": "订单列表", 102 "navigationBarTitleText": "订单列表",
73 "enablePullDownRefresh": false, 103 "enablePullDownRefresh": false,
74 "navigationStyle": "custom" 104 "navigationStyle": "custom"
75 } 105 }
76 106 },
77 }, { 107 {
78 "path": "pages/rank/scoreApproval", 108 "path": "pages/rank/scoreApproval",
79 "style": { 109 "style": {
80 "navigationBarTitleText": "段位考试成绩审核", 110 "navigationBarTitleText": "段位考试成绩审核",
81 "enablePullDownRefresh": false 111 "enablePullDownRefresh": false
82 } 112 }
83 113 },
84 }, { 114 {
85 "path": "pages/rank/scoreDetail", 115 "path": "pages/rank/scoreDetail",
86 "style": { 116 "style": {
87 "navigationBarTitleText": "成绩详情", 117 "navigationBarTitleText": "成绩详情",
88 "enablePullDownRefresh": false 118 "enablePullDownRefresh": false
89 } 119 }
90 120 },
91 }, { 121 {
92 "path": "pages/rank/scoreAudit", 122 "path": "pages/rank/scoreAudit",
93 "style": { 123 "style": {
94 "navigationBarTitleText": "审核", 124 "navigationBarTitleText": "审核",
95 "enablePullDownRefresh": false 125 "enablePullDownRefresh": false
96 } 126 }
97 127 },
98 }, { 128 {
99 "path": "pages/rank/cert", 129 "path": "pages/rank/cert",
100 "style": { 130 "style": {
101 "navigationBarTitleText": "证书发布", 131 "navigationBarTitleText": "证书发布",
102 "enablePullDownRefresh": false 132 "enablePullDownRefresh": false
103 } 133 }
104 }, { 134 },
135 {
105 "path": "pages/exam/payment", 136 "path": "pages/exam/payment",
106 "style": { 137 "style": {
107 "navigationBarTitleText": "考试缴费单", 138 "navigationBarTitleText": "考试缴费单",
108 "enablePullDownRefresh": false 139 "enablePullDownRefresh": false
109 } 140 }
110 141 },
111 }, { 142 {
112 "path": "pages/exam/paymentDetail", 143 "path": "pages/exam/paymentDetail",
113 "style": { 144 "style": {
114 "navigationBarTitleText": "缴费单详情", 145 "navigationBarTitleText": "缴费单详情",
115 "enablePullDownRefresh": false 146 "enablePullDownRefresh": false
116 } 147 }
117 148 },
118 }, { 149 {
119 "path": "pages/exam/score", 150 "path": "pages/exam/score",
120 "style": { 151 "style": {
121 "navigationBarTitleText": "成绩录入", 152 "navigationBarTitleText": "成绩录入",
122 "enablePullDownRefresh": false 153 "enablePullDownRefresh": false
123 } 154 }
124 155 },
125 }, { 156 {
126 "path": "pages/exam/scoreModify", 157 "path": "pages/exam/scoreModify",
127 "style": { 158 "style": {
128 "navigationBarTitleText": "成绩维护", 159 "navigationBarTitleText": "成绩维护",
129 "enablePullDownRefresh": false 160 "enablePullDownRefresh": false
130 } 161 }
131 162 },
132 }, { 163 {
133 "path": "pages/index/more", 164 "path": "pages/index/more",
134 "style": { 165 "style": {
135 "navigationBarTitleText": "菜单", 166 "navigationBarTitleText": "菜单",
136 "enablePullDownRefresh": false 167 "enablePullDownRefresh": false
137 } 168 }
138
139 }, 169 },
140 { 170 {
141 "path": "pages/index/newsDetail", 171 "path": "pages/index/newsDetail",
...@@ -151,34 +181,40 @@ ...@@ -151,34 +181,40 @@
151 "navigationBarBackgroundColor": "#ffffff", 181 "navigationBarBackgroundColor": "#ffffff",
152 "navigationBarTitleText": "中跆协-工作台" 182 "navigationBarTitleText": "中跆协-工作台"
153 }, 183 },
154 "subPackages": [{ 184 "subPackages": [
185 {
155 "root": "login", 186 "root": "login",
156 "pages": [{ 187 "pages": [
188 {
157 "path": "login", 189 "path": "login",
158 "style": { 190 "style": {
159 "navigationBarTitleText": "登录", 191 "navigationBarTitleText": "登录",
160 "enablePullDownRefresh": false, 192 "enablePullDownRefresh": false,
161 "navigationStyle": "custom" 193 "navigationStyle": "custom"
162 } 194 }
163 }, { 195 },
196 {
164 "path": "loginC", 197 "path": "loginC",
165 "style": { 198 "style": {
166 "navigationBarTitleText": "", 199 "navigationBarTitleText": "",
167 "enablePullDownRefresh": false, 200 "enablePullDownRefresh": false,
168 "navigationStyle": "custom" 201 "navigationStyle": "custom"
169 } 202 }
170 }, { 203 },
204 {
171 "path": "register", 205 "path": "register",
172 "style": { 206 "style": {
173 "navigationBarTitleText": "注册", 207 "navigationBarTitleText": "注册",
174 "enablePullDownRefresh": false, 208 "enablePullDownRefresh": false,
175 "navigationStyle": "custom" 209 "navigationStyle": "custom"
176 } 210 }
177 }] 211 }
212 ]
178 }, 213 },
179 { 214 {
180 "root": "personal", 215 "root": "personal",
181 "pages": [{ 216 "pages": [
217 {
182 "path": "addVip_per", 218 "path": "addVip_per",
183 "style": { 219 "style": {
184 "navigationBarTitleText": "个人会员申请", 220 "navigationBarTitleText": "个人会员申请",
...@@ -247,12 +283,20 @@ ...@@ -247,12 +283,20 @@
247 "navigationBarTitleText": "电子会员证", 283 "navigationBarTitleText": "电子会员证",
248 "enablePullDownRefresh": false 284 "enablePullDownRefresh": false
249 } 285 }
286 },
287 {
288 "path": "memberAuditRecord",
289 "style": {
290 "navigationBarTitleText": "会员审核记录",
291 "enablePullDownRefresh": false
292 }
250 } 293 }
251 ] 294 ]
252 }, 295 },
253 { 296 {
254 "root": "personalVip", 297 "root": "personalVip",
255 "pages": [{ 298 "pages": [
299 {
256 "path": "addVip", 300 "path": "addVip",
257 "style": { 301 "style": {
258 "navigationBarTitleText": "添加会员", 302 "navigationBarTitleText": "添加会员",
...@@ -265,114 +309,134 @@ ...@@ -265,114 +309,134 @@
265 "navigationBarTitleText": "会员缴费", 309 "navigationBarTitleText": "会员缴费",
266 "enablePullDownRefresh": false 310 "enablePullDownRefresh": false
267 } 311 }
268 }, { 312 },
313 {
269 "path": "vipList", 314 "path": "vipList",
270 "style": { 315 "style": {
271 "navigationBarTitleText": "会员列表", 316 "navigationBarTitleText": "会员列表",
272 "enablePullDownRefresh": false 317 "enablePullDownRefresh": false
273 } 318 }
274 }, { 319 },
320 {
275 "path": "list", 321 "path": "list",
276 "style": { 322 "style": {
277 "navigationBarTitleText": "会员查询", 323 "navigationBarTitleText": "会员查询",
278 "enablePullDownRefresh": false 324 "enablePullDownRefresh": false
279 } 325 }
280 }, { 326 },
327 {
281 "path": "detail", 328 "path": "detail",
282 "style": { 329 "style": {
283 "navigationBarTitleText": "会员信息", 330 "navigationBarTitleText": "会员信息",
284 "enablePullDownRefresh": false 331 "enablePullDownRefresh": false
285 } 332 }
286 }, { 333 },
334 {
287 "path": "editVip", 335 "path": "editVip",
288 "style": { 336 "style": {
289 "navigationBarTitleText": "编辑会员", 337 "navigationBarTitleText": "编辑会员",
290 "enablePullDownRefresh": false 338 "enablePullDownRefresh": false
291 } 339 }
292 }, { 340 },
341 {
293 "path": "audit", 342 "path": "audit",
294 "style": { 343 "style": {
295 "navigationBarTitleText": "缴费审批", 344 "navigationBarTitleText": "缴费审批",
296 "enablePullDownRefresh": false 345 "enablePullDownRefresh": false
297 } 346 }
298 }, { 347 },
348 {
299 "path": "payment", 349 "path": "payment",
300 "style": { 350 "style": {
301 "navigationBarTitleText": "会员缴费", 351 "navigationBarTitleText": "会员缴费",
302 "enablePullDownRefresh": false 352 "enablePullDownRefresh": false
303 } 353 }
304 }, { 354 },
355 {
305 "path": "paymentDetail", 356 "path": "paymentDetail",
306 "style": { 357 "style": {
307 "navigationBarTitleText": "缴费详情", 358 "navigationBarTitleText": "缴费详情",
308 "enablePullDownRefresh": false 359 "enablePullDownRefresh": false
309 } 360 }
310 }, { 361 },
362 {
311 "path": "auditDetail", 363 "path": "auditDetail",
312 "style": { 364 "style": {
313 "navigationBarTitleText": "会员缴费详情", 365 "navigationBarTitleText": "会员缴费详情",
314 "enablePullDownRefresh": false 366 "enablePullDownRefresh": false
315 } 367 }
316 }, { 368 },
369 {
317 "path": "feeBill", 370 "path": "feeBill",
318 "style": { 371 "style": {
319 "navigationBarTitleText": "会员缴费单", 372 "navigationBarTitleText": "会员缴费单",
320 "enablePullDownRefresh": false 373 "enablePullDownRefresh": false
321 } 374 }
322 }, { 375 },
376 {
323 "path": "feeBillDetail", 377 "path": "feeBillDetail",
324 "style": { 378 "style": {
325 "navigationBarTitleText": "缴费单详情", 379 "navigationBarTitleText": "缴费单详情",
326 "enablePullDownRefresh": false 380 "enablePullDownRefresh": false
327 } 381 }
328 }, { 382 },
383 {
329 "path": "mobilize", 384 "path": "mobilize",
330 "style": { 385 "style": {
331 "navigationBarTitleText": "会员调动", 386 "navigationBarTitleText": "会员调动",
332 "enablePullDownRefresh": false 387 "enablePullDownRefresh": false
333 } 388 }
334 }, {"path": "order", 389 },
390 {
391 "path": "order",
335 "style": { 392 "style": {
336 "navigationBarTitleText": "订单列表", 393 "navigationBarTitleText": "订单列表",
337 "enablePullDownRefresh": false 394 "enablePullDownRefresh": false
338 } 395 }
339 }, { 396 },
397 {
340 "path": "orderDetail", 398 "path": "orderDetail",
341 "style": { 399 "style": {
342 "navigationBarTitleText": "订单详情", 400 "navigationBarTitleText": "订单详情",
343 "enablePullDownRefresh": false 401 "enablePullDownRefresh": false
344 } 402 }
345 }, { 403 },
404 {
346 "path": "mobilizeDetail", 405 "path": "mobilizeDetail",
347 "style": { 406 "style": {
348 "navigationBarTitleText": "会员调动详情", 407 "navigationBarTitleText": "会员调动详情",
349 "enablePullDownRefresh": false 408 "enablePullDownRefresh": false
350 } 409 }
351 }, { 410 },
411 {
352 "path": "addMobilize", 412 "path": "addMobilize",
353 "style": { 413 "style": {
354 "navigationBarTitleText": "新建调动", 414 "navigationBarTitleText": "新建调动",
355 "enablePullDownRefresh": false 415 "enablePullDownRefresh": false
356 } 416 }
357 }, { 417 },
418 {
358 "path": "sheng/merge", 419 "path": "sheng/merge",
359 "style": { 420 "style": {
360 "navigationBarTitleText": "合并", 421 "navigationBarTitleText": "合并",
361 "enablePullDownRefresh": false 422 "enablePullDownRefresh": false
362 } 423 }
363 }, { 424 },
425 {
364 "path": "sheng/mergeUp", 426 "path": "sheng/mergeUp",
365 "style": { 427 "style": {
366 "navigationBarTitleText": "提交", 428 "navigationBarTitleText": "提交",
367 "enablePullDownRefresh": false 429 "enablePullDownRefresh": false
368 } 430 }
369 }, { 431 },
432 {
370 "path": "sheng/mergeUpDetail", 433 "path": "sheng/mergeUpDetail",
371 "style": { 434 "style": {
372 "navigationBarTitleText": "提交详情", 435 "navigationBarTitleText": "提交详情",
373 "enablePullDownRefresh": false 436 "enablePullDownRefresh": false
374 } 437 }
375 }, { 438 },
439 {
376 "path": "payPersonList", 440 "path": "payPersonList",
377 "style": { 441 "style": {
378 "navigationBarTitleText": "会员缴费人员列表", 442 "navigationBarTitleText": "会员缴费人员列表",
...@@ -499,110 +563,116 @@ ...@@ -499,110 +563,116 @@
499 } 563 }
500 } 564 }
501 ] 565 ]
502 }, { 566 },
567 {
503 "root": "group", 568 "root": "group",
504 "pages": [{ 569 "pages": [
570 {
505 "path": "auditRecord1", 571 "path": "auditRecord1",
506 "style": { 572 "style": {
507 "navigationBarTitleText": "审核记录", 573 "navigationBarTitleText": "审核记录",
508 "enablePullDownRefresh": false 574 "enablePullDownRefresh": false
509 } 575 }
510 }, { 576 },
577 {
511 "path": "groupOrderDetail", 578 "path": "groupOrderDetail",
512 "style": { 579 "style": {
513 "navigationBarTitleText": "订单详情", 580 "navigationBarTitleText": "订单详情",
514 "enablePullDownRefresh": false 581 "enablePullDownRefresh": false
515 } 582 }
516 583 },
517 }, { 584 {
518 "path": "addGroupMemberPay", 585 "path": "addGroupMemberPay",
519 "style": { 586 "style": {
520 "navigationBarTitleText": "添加缴费", 587 "navigationBarTitleText": "添加缴费",
521 "enablePullDownRefresh": false 588 "enablePullDownRefresh": false
522 } 589 }
523 590 },
524 }, { 591 {
525 "path": "apply/mergeUpDetail", 592 "path": "apply/mergeUpDetail",
526 "style": { 593 "style": {
527 "navigationBarTitleText": "缴费详情", 594 "navigationBarTitleText": "缴费详情",
528 "enablePullDownRefresh": false 595 "enablePullDownRefresh": false
529 } 596 }
530 597 },
531 }, { 598 {
532 "path": "pay", 599 "path": "pay",
533 "style": { 600 "style": {
534 "navigationBarTitleText": "团队会员认证", 601 "navigationBarTitleText": "团队会员认证",
535 "enablePullDownRefresh": false 602 "enablePullDownRefresh": false
536 } 603 }
537 }, { 604 },
605 {
538 "path": "payDetail", 606 "path": "payDetail",
539 "style": { 607 "style": {
540 "navigationBarTitleText": "认证详情", 608 "navigationBarTitleText": "认证详情",
541 "enablePullDownRefresh": false 609 "enablePullDownRefresh": false
542 } 610 }
543 }, { 611 },
612 {
544 "path": "apply/merge", 613 "path": "apply/merge",
545 "style": { 614 "style": {
546 "navigationBarTitleText": "合并", 615 "navigationBarTitleText": "合并",
547 "enablePullDownRefresh": false 616 "enablePullDownRefresh": false
548 } 617 }
549 618 },
550 }, { 619 {
551 "path": "apply/mergeUp", 620 "path": "apply/mergeUp",
552 "style": { 621 "style": {
553 "navigationBarTitleText": "提交", 622 "navigationBarTitleText": "提交",
554 "enablePullDownRefresh": false 623 "enablePullDownRefresh": false
555 } 624 }
556 625 },
557 }, { 626 {
558 "path": "apply/applyDetail", 627 "path": "apply/applyDetail",
559 "style": { 628 "style": {
560 "navigationBarTitleText": "单位会员审核详情", 629 "navigationBarTitleText": "单位会员审核详情",
561 "enablePullDownRefresh": false 630 "enablePullDownRefresh": false
562 } 631 }
563 632 },
564 }, { 633 {
565 "path": "apply/record", 634 "path": "apply/record",
566 "style": { 635 "style": {
567 "navigationBarTitleText": "审核记录", 636 "navigationBarTitleText": "审核记录",
568 "enablePullDownRefresh": false 637 "enablePullDownRefresh": false
569 } 638 }
570 639 },
571 }, { 640 {
572 "path": "list", 641 "path": "list",
573 "style": { 642 "style": {
574 "navigationBarTitleText": "单位会员", 643 "navigationBarTitleText": "单位会员",
575 "enablePullDownRefresh": false 644 "enablePullDownRefresh": false
576 } 645 }
577 646 },
578 }, { 647 {
579 "path": "detail", 648 "path": "detail",
580 "style": { 649 "style": {
581 "navigationBarTitleText": "机构会员", 650 "navigationBarTitleText": "机构会员",
582 "enablePullDownRefresh": false 651 "enablePullDownRefresh": false
583 } 652 }
584 653 },
585 }, { 654 {
586 "path": "feeBill", 655 "path": "feeBill",
587 "style": { 656 "style": {
588 "navigationBarTitleText": "单位会员缴费单", 657 "navigationBarTitleText": "单位会员缴费单",
589 "enablePullDownRefresh": false 658 "enablePullDownRefresh": false
590 } 659 }
591 }, { 660 },
661 {
592 "path": "feeBillDetail", 662 "path": "feeBillDetail",
593 "style": { 663 "style": {
594 "navigationBarTitleText": "缴费单详情", 664 "navigationBarTitleText": "缴费单详情",
595 "enablePullDownRefresh": false 665 "enablePullDownRefresh": false
596 } 666 }
597 667 },
598 }, { 668 {
599 "path": "apply/applyList", 669 "path": "apply/applyList",
600 "style": { 670 "style": {
601 "navigationBarTitleText": "单位会员审核", 671 "navigationBarTitleText": "单位会员审核",
602 "enablePullDownRefresh": false 672 "enablePullDownRefresh": false
603 } 673 }
604 674 },
605 }, { 675 {
606 "path": "vipList", 676 "path": "vipList",
607 "style": { 677 "style": {
608 "navigationBarTitleText": "会员列表", 678 "navigationBarTitleText": "会员列表",
...@@ -652,61 +722,65 @@ ...@@ -652,61 +722,65 @@
652 } 722 }
653 } 723 }
654 ] 724 ]
655 }, { 725 },
726 {
656 "root": "level", 727 "root": "level",
657 "pages": [{ 728 "pages": [
729 {
658 "path": "auditRecord2", 730 "path": "auditRecord2",
659 "style": { 731 "style": {
660 "navigationBarTitleText": "审核记录", 732 "navigationBarTitleText": "审核记录",
661 "enablePullDownRefresh": false 733 "enablePullDownRefresh": false
662 } 734 }
663 }, { 735 },
736 {
664 "path": "paymentDetail", 737 "path": "paymentDetail",
665 "style": { 738 "style": {
666 "navigationBarTitleText": "付款详情", 739 "navigationBarTitleText": "付款详情",
667 "enablePullDownRefresh": false 740 "enablePullDownRefresh": false
668 } 741 }
669 }, { 742 },
743 {
670 "path": "addressManage", 744 "path": "addressManage",
671 "style": { 745 "style": {
672 "navigationBarTitleText": "地址管理", 746 "navigationBarTitleText": "地址管理",
673 "enablePullDownRefresh": false 747 "enablePullDownRefresh": false
674 } 748 }
675 }, { 749 },
750 {
676 "path": "ztx/examList", 751 "path": "ztx/examList",
677 "style": { 752 "style": {
678 "navigationBarTitleText": "级位考试详情", 753 "navigationBarTitleText": "级位考试详情",
679 "enablePullDownRefresh": false 754 "enablePullDownRefresh": false
680 } 755 }
681 756 },
682 }, { 757 {
683 "path": "ztx/studentList", 758 "path": "ztx/studentList",
684 "style": { 759 "style": {
685 "navigationBarTitleText": "考生列表", 760 "navigationBarTitleText": "考生列表",
686 "enablePullDownRefresh": false 761 "enablePullDownRefresh": false
687 } 762 }
688 763 },
689 }, { 764 {
690 "path": "payment", 765 "path": "payment",
691 "style": { 766 "style": {
692 "navigationBarTitleText": "级位考试缴费单", 767 "navigationBarTitleText": "级位考试缴费单",
693 "enablePullDownRefresh": false 768 "enablePullDownRefresh": false
694 } 769 }
695 770 },
696 }, { 771 {
697 "path": "apply", 772 "path": "apply",
698 "style": { 773 "style": {
699 "navigationBarTitleText": "级位考试申请", 774 "navigationBarTitleText": "级位考试申请",
700 "enablePullDownRefresh": false 775 "enablePullDownRefresh": false
701 } 776 }
702 777 },
703 }, { 778 {
704 "path": "applyDetail", 779 "path": "applyDetail",
705 "style": { 780 "style": {
706 "navigationBarTitleText": "级位考试详情", 781 "navigationBarTitleText": "级位考试详情",
707 "enablePullDownRefresh": false 782 "enablePullDownRefresh": false
708 } 783 }
709
710 }, 784 },
711 { 785 {
712 "path": "chooseStudent", 786 "path": "chooseStudent",
...@@ -714,7 +788,6 @@ ...@@ -714,7 +788,6 @@
714 "navigationBarTitleText": "添加考生", 788 "navigationBarTitleText": "添加考生",
715 "enablePullDownRefresh": false 789 "enablePullDownRefresh": false
716 } 790 }
717
718 }, 791 },
719 { 792 {
720 "path": "addApply", 793 "path": "addApply",
...@@ -722,56 +795,55 @@ ...@@ -722,56 +795,55 @@
722 "navigationBarTitleText": "编辑级位考试", 795 "navigationBarTitleText": "编辑级位考试",
723 "enablePullDownRefresh": false 796 "enablePullDownRefresh": false
724 } 797 }
725 798 },
726 }, { 799 {
727 "path": "chooseExaminer", 800 "path": "chooseExaminer",
728 "style": { 801 "style": {
729 "navigationBarTitleText": "选择考官", 802 "navigationBarTitleText": "选择考官",
730 "enablePullDownRefresh": false 803 "enablePullDownRefresh": false
731 } 804 }
732 805 },
733 }, { 806 {
734 "path": "merge", 807 "path": "merge",
735 "style": { 808 "style": {
736 "navigationBarTitleText": "合并", 809 "navigationBarTitleText": "合并",
737 "enablePullDownRefresh": false 810 "enablePullDownRefresh": false
738 } 811 }
739 812 },
740 }, { 813 {
741 "path": "mergeUp", 814 "path": "mergeUp",
742 "style": { 815 "style": {
743 "navigationBarTitleText": "提交", 816 "navigationBarTitleText": "提交",
744 "enablePullDownRefresh": false 817 "enablePullDownRefresh": false
745 } 818 }
746 819 },
747 }, { 820 {
748 "path": "mergeUpDetail", 821 "path": "mergeUpDetail",
749 "style": { 822 "style": {
750 "navigationBarTitleText": "考试详情", 823 "navigationBarTitleText": "考试详情",
751 "enablePullDownRefresh": false 824 "enablePullDownRefresh": false
752 } 825 }
753 826 },
754 }, { 827 {
755 "path": "approval", 828 "path": "approval",
756 "style": { 829 "style": {
757 "navigationBarTitleText": "级位考试审批", 830 "navigationBarTitleText": "级位考试审批",
758 "enablePullDownRefresh": false 831 "enablePullDownRefresh": false
759 } 832 }
760 833 },
761 }, { 834 {
762 "path": "ztx/approval", 835 "path": "ztx/approval",
763 "style": { 836 "style": {
764 "navigationBarTitleText": "级位考试审批", 837 "navigationBarTitleText": "级位考试审批",
765 "enablePullDownRefresh": false 838 "enablePullDownRefresh": false
766 } 839 }
767 840 },
768 }, { 841 {
769 "path": "ztx/cert", 842 "path": "ztx/cert",
770 "style": { 843 "style": {
771 "navigationBarTitleText": "证书发布", 844 "navigationBarTitleText": "证书发布",
772 "enablePullDownRefresh": false 845 "enablePullDownRefresh": false
773 } 846 }
774
775 }, 847 },
776 { 848 {
777 "path": "ztx/mail", 849 "path": "ztx/mail",
...@@ -779,7 +851,6 @@ ...@@ -779,7 +851,6 @@
779 "navigationBarTitleText": "证书邮寄", 851 "navigationBarTitleText": "证书邮寄",
780 "enablePullDownRefresh": false 852 "enablePullDownRefresh": false
781 } 853 }
782
783 }, 854 },
784 { 855 {
785 "path": "ztx/certDetail", 856 "path": "ztx/certDetail",
...@@ -787,7 +858,6 @@ ...@@ -787,7 +858,6 @@
787 "navigationBarTitleText": "考试详情", 858 "navigationBarTitleText": "考试详情",
788 "enablePullDownRefresh": false 859 "enablePullDownRefresh": false
789 } 860 }
790
791 }, 861 },
792 { 862 {
793 "path": "ztx/certLogistics", 863 "path": "ztx/certLogistics",
...@@ -795,7 +865,6 @@ ...@@ -795,7 +865,6 @@
795 "navigationBarTitleText": "物流跟踪", 865 "navigationBarTitleText": "物流跟踪",
796 "enablePullDownRefresh": false 866 "enablePullDownRefresh": false
797 } 867 }
798
799 }, 868 },
800 { 869 {
801 "path": "ztx/examinationVerification", 870 "path": "ztx/examinationVerification",
...@@ -803,7 +872,6 @@ ...@@ -803,7 +872,6 @@
803 "navigationBarTitleText": "考点审核", 872 "navigationBarTitleText": "考点审核",
804 "enablePullDownRefresh": false 873 "enablePullDownRefresh": false
805 } 874 }
806
807 }, 875 },
808 { 876 {
809 "path": "ztx/examinationDetail", 877 "path": "ztx/examinationDetail",
...@@ -811,7 +879,6 @@ ...@@ -811,7 +879,6 @@
811 "navigationBarTitleText": "查看详情", 879 "navigationBarTitleText": "查看详情",
812 "enablePullDownRefresh": false 880 "enablePullDownRefresh": false
813 } 881 }
814
815 }, 882 },
816 { 883 {
817 "path": "ztx/examinationAudit", 884 "path": "ztx/examinationAudit",
...@@ -819,7 +886,6 @@ ...@@ -819,7 +886,6 @@
819 "navigationBarTitleText": "单位会员认证审核", 886 "navigationBarTitleText": "单位会员认证审核",
820 "enablePullDownRefresh": false 887 "enablePullDownRefresh": false
821 } 888 }
822
823 }, 889 },
824 { 890 {
825 "path": "ztx/institutionInfo", 891 "path": "ztx/institutionInfo",
...@@ -827,7 +893,6 @@ ...@@ -827,7 +893,6 @@
827 "navigationBarTitleText": "机构资料", 893 "navigationBarTitleText": "机构资料",
828 "enablePullDownRefresh": false 894 "enablePullDownRefresh": false
829 } 895 }
830
831 }, 896 },
832 { 897 {
833 "path": "ztx/memberAudit", 898 "path": "ztx/memberAudit",
...@@ -835,7 +900,6 @@ ...@@ -835,7 +900,6 @@
835 "navigationBarTitleText": "会员审核", 900 "navigationBarTitleText": "会员审核",
836 "enablePullDownRefresh": false 901 "enablePullDownRefresh": false
837 } 902 }
838
839 }, 903 },
840 { 904 {
841 "path": "ztx/memberAuditPage", 905 "path": "ztx/memberAuditPage",
...@@ -843,7 +907,6 @@ ...@@ -843,7 +907,6 @@
843 "navigationBarTitleText": "审核", 907 "navigationBarTitleText": "审核",
844 "enablePullDownRefresh": false 908 "enablePullDownRefresh": false
845 } 909 }
846
847 }, 910 },
848 { 911 {
849 "path": "ztx/costSettlement", 912 "path": "ztx/costSettlement",
...@@ -851,7 +914,6 @@ ...@@ -851,7 +914,6 @@
851 "navigationBarTitleText": "费用结算", 914 "navigationBarTitleText": "费用结算",
852 "enablePullDownRefresh": false 915 "enablePullDownRefresh": false
853 } 916 }
854
855 }, 917 },
856 { 918 {
857 "path": "ztx/costSettlementDetail", 919 "path": "ztx/costSettlementDetail",
...@@ -859,7 +921,6 @@ ...@@ -859,7 +921,6 @@
859 "navigationBarTitleText": "结算详情", 921 "navigationBarTitleText": "结算详情",
860 "enablePullDownRefresh": false 922 "enablePullDownRefresh": false
861 } 923 }
862
863 }, 924 },
864 { 925 {
865 "path": "ztx/costSettlementAdd", 926 "path": "ztx/costSettlementAdd",
...@@ -867,7 +928,6 @@ ...@@ -867,7 +928,6 @@
867 "navigationBarTitleText": "新建结算申请", 928 "navigationBarTitleText": "新建结算申请",
868 "enablePullDownRefresh": false 929 "enablePullDownRefresh": false
869 } 930 }
870
871 }, 931 },
872 { 932 {
873 "path": "ztx/costSettlementConfirm", 933 "path": "ztx/costSettlementConfirm",
...@@ -875,7 +935,6 @@ ...@@ -875,7 +935,6 @@
875 "navigationBarTitleText": "结算申请确认", 935 "navigationBarTitleText": "结算申请确认",
876 "enablePullDownRefresh": false 936 "enablePullDownRefresh": false
877 } 937 }
878
879 }, 938 },
880 { 939 {
881 "path": "examStudentList", 940 "path": "examStudentList",
...@@ -899,9 +958,11 @@ ...@@ -899,9 +958,11 @@
899 } 958 }
900 } 959 }
901 ] 960 ]
902 }, { 961 },
962 {
903 "root": "myCenter", 963 "root": "myCenter",
904 "pages": [{ 964 "pages": [
965 {
905 "path": "index", 966 "path": "index",
906 "style": { 967 "style": {
907 "navigationBarTitleText": "个人中心", 968 "navigationBarTitleText": "个人中心",
...@@ -972,6 +1033,13 @@ ...@@ -972,6 +1033,13 @@
972 } 1033 }
973 }, 1034 },
974 { 1035 {
1036 "path": "examPointApplyList",
1037 "style": {
1038 "navigationBarTitleText": "考点申请",
1039 "enablePullDownRefresh": false
1040 }
1041 },
1042 {
975 "path": "chooseExaminer", 1043 "path": "chooseExaminer",
976 "style": { 1044 "style": {
977 "navigationBarTitleText": "选择考官", 1045 "navigationBarTitleText": "选择考官",
...@@ -998,7 +1066,14 @@ ...@@ -998,7 +1066,14 @@
998 "preloadRule": { 1066 "preloadRule": {
999 "pages/index/index": { 1067 "pages/index/index": {
1000 "network": "all", 1068 "network": "all",
1001 "packages": ["login", "personalVip", "group", "level", "myCenter", "personal"] 1069 "packages": [
1070 "login",
1071 "personalVip",
1072 "group",
1073 "level",
1074 "myCenter",
1075 "personal"
1076 ]
1002 } 1077 }
1003 } 1078 }
1004 } 1079 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
47 47
48 </view> 48 </view>
49 49
50 <!-- 道馆 -->
50 <view v-if="userType=='4'" class="girdBox"> 51 <view v-if="userType=='4'" class="girdBox">
51 <view @click="goPath('/personalVip/mobilize')"> 52 <view @click="goPath('/personalVip/mobilize')">
52 <uni-badge :text="numData.personTransferCount" class="potag"/> 53 <uni-badge :text="numData.personTransferCount" class="potag"/>
...@@ -63,6 +64,87 @@ ...@@ -63,6 +64,87 @@
63 级位变更 64 级位变更
64 </view> 65 </view>
65 </view> 66 </view>
67 <view v-if="userType=='4'" class="girdFather">
68 <view class="ttt">个人会员</view>
69 <view class="girdBox">
70 <view @click="goPath('/personalVip/addVip')">
71 <uni-badge :text="numData.personTransferCount" class="potag"/>
72 <image :src="config.baseUrl_api+'/fs/static/icon/2.png'"/>
73 添加会员
74 </view>
75 <view @click="goPath('/personalVip/list')">
76 <image :src="config.baseUrl_api+'/fs/static/icon/25.png'"/>
77 会员列表
78 </view>
79 <view @click="goPath('/personalVip/mobilize')">
80 <image :src="config.baseUrl_api+'/fs/static/icon/28.png'"/>
81 会员调动
82 </view>
83 <view @click="goPath('/personalVip/payment')">
84 <image :src="config.baseUrl_api+'/fs/static/icon/28.png'"/>
85 会员缴费
86 </view>
87 <view @click="goPath('/personal/memberAuditRecord')">
88 <image :src="config.baseUrl_api+'/fs/static/icon/28.png'"/>
89 会员审核记录
90 </view>
91 <view @click="goPath('/myCenter/order?type=0')">
92 <image :src="config.baseUrl_api+'/fs/static/icon/28.png'"/>
93 订单列表
94 </view>
95 </view>
96 <view class="ttt">单位会员</view>
97 <view class="girdBox">
98 <view @click="goPath('/myCenter/auth')">
99 <uni-badge :text="numData.memberJiaofeiCount" class="potag"/>
100 <image :src="config.baseUrl_api+'/fs/static/icon/4.png'"/>
101 会员认证
102 </view>
103
104 <view @click="goPath('/myCenter/reviewList')">
105 <image :src="config.baseUrl_api+'/fs/static/icon/27.png'"/>
106 认证详情
107 </view>
108 <view @click="goPath('/myCenter/examPointApplyList')">
109 <image :src="config.baseUrl_api+'/fs/static/icon/17.png'"/>
110 考点申请
111 </view>
112 <view @click="goPath('/myCenter/order?type=1')">
113 <image :src="config.baseUrl_api+'/fs/static/icon/9.png'"/>
114 订单列表
115 </view>
116 </view>
117 <view class="ttt">级位管理</view>
118 <view class="girdBox">
119
120 <view @click="goPath('/level/apply')">
121 <image :src="config.baseUrl_api+'/fs/static/icon/3.png'"/>
122 考试申请
123 </view>
124
125 <view @click="goPath('/level/ztx/mail')">
126 <image :src="config.baseUrl_api+'/fs/static/icon/25.png'"/>
127 证书邮寄
128 </view>
129 <view @click="goPath('/level/ztx/costSettlement')">
130 <image :src="config.baseUrl_api+'/fs/static/icon/10.png'"/>
131 证书下载
132 </view>
133 <view @click="goPath('/personalVip/changeLevel')">
134 <image :src="config.baseUrl_api+'/fs/static/icon/26.png'"/>
135 级位变更
136 </view>
137 <view @click="goPath('/level/chooseExaminer?pageType=1')">
138 <image :src="config.baseUrl_api+'/fs/static/icon/10.png'"/>
139 考官库
140 </view>
141 <view @click="goPath('/myCenter/order?type=2')">
142 <image :src="config.baseUrl_api+'/fs/static/icon/10.png'"/>
143 订单列表
144 </view>
145 </view>
146
147 </view>
66 <view v-if="userType=='3'" class="girdBox"> 148 <view v-if="userType=='3'" class="girdBox">
67 <view @click="goPath('/group/apply/applyList')"> 149 <view @click="goPath('/group/apply/applyList')">
68 <uni-badge :text="numData.memberJiaofeiCount" class="potag"/> 150 <uni-badge :text="numData.memberJiaofeiCount" class="potag"/>
......
1 <template>
2 <view class="notice-page">
3 <view class="notice-content">
4
5 <view class="notice-body">
6 <view class="section">中国跆拳道协会团体会员入会申请免责声明</view>
7 <view class="section ">
8 <view class="section-text">尊敬的申请单位:</view>
9 <view class="section-text mt20">为确保中国跆拳道协会(以下简称"中国跆协")会员管理工作的规范性与严肃性,保障贵单位合法权益,请在提交入会申请材料并缴纳会费前,仔细阅读本声明。贵单位一旦勾选"同意",即视为已理解并自愿接受以下条款的约束。</view>
10 </view>
11
12 <view class="section">
13 <view class="section-title">一、信息真实性承诺</view>
14 <view class="section-item">1. 贵单位保证在入会申请过程中提交的全部材料(包括但不限于营业执照、法人身份证明、场所证明及从业人员资质证明等)均真实、准确、完整、有效。</view>
15 <view class="section-item">2. 若贵单位提交虚假、伪造、变造或失效的材料,由此产生的一切法律责任及后果由贵单位自行承担;中国跆协有权无条件取消会员资格,且已缴纳会费不予退还。</view>
16 </view>
17
18 <view class="section">
19 <view class="section-title">二、主体合法性承诺</view>
20 <view class="section-item">1. 贵单位保证系依法登记注册并合法存续的法人或非法人组织,具备申请成为中国跆协团体会员的法定资格。</view>
21 <view class="section-item">2. 贵单位的经营活动及业务范围符合国家法律法规及跆拳道行业管理规范,不存在被吊销、注销、列入经营异常名录或严重违法失信名单等情形。</view>
22 </view>
23
24 <view class="section">
25 <view class="section-title">三、授权与程序合规性承诺</view>
26 <view class="section-item">1. 贵单位确认本次入会申请已经通过内部合法决策程序(如股东会、理事会决议或法定代表人决定),系单位真实意愿。</view>
27 <view class="section-item">2. 贵单位指定办理入会手续的人员已获得充分授权,其在线勾选同意本声明的行为具有法律效力。</view>
28 </view>
29
30 <view class="section">
31 <view class="section-title">四、遵守协会规章承诺</view>
32 <view class="section-item">1. 贵单位承诺入会后严格遵守《中国跆拳道协会章程》《中国跆拳道协会会员管理办法》及中国跆协发布的其他规章制度。</view>
33 <view class="section-item">2. 贵单位知晓并接受:违反上述规章的,中国跆协有权依据规定给予警告、限期整改、暂停会员资格直至取消会员资格的处罚。</view>
34 </view>
35
36 <view class="section">
37 <view class="section-title">五、信息变更告知义务</view>
38 <view class="section-item">1. 贵单位承诺在会员资格存续期间,如单位名称、法定代表人、联系方式、经营状态等信息发生变更,将在变更之日起15个工作日内通过会员系统更新信息或书面告知中国跆协。</view>
39 <view class="section-item">2. 因未及时告知导致无法接收协会通知、证书发放错误或其他损失的,由贵单位自行承担责任。</view>
40 </view>
41
42 <view class="section">
43 <view class="section-title">六、免责条款</view>
44 <view class="section-item">1. 因贵单位提供信息不实、不完整或未及时更新信息,导致中国跆协或第三方遭受损失的,贵单位应承担全部赔偿责任。</view>
45 <view class="section-item">2. 因不可抗力(包括但不限于自然灾害、政府行为、政策法律法规变更、网络攻击或系统故障)导致贵单位申请信息丢失、泄露或申请流程中断的,中国跆协不承担责任,但应在条件允许时提供必要协助。</view>
46 </view>
47 </view>
48 </view>
49 </view>
50 </template>
51
52 <script setup>
53 function goBack() {
54 uni.navigateBack()
55 }
56 </script>
57
58 <style lang="scss" scoped>
59 .notice-page {
60 min-height: 100vh;
61 background: #f5f5f5;
62 display: flex;
63 flex-direction: column;
64 }
65
66 .notice-content {
67 flex: 1;
68 padding: 30rpx;
69 overflow-y: auto;
70 }
71
72 .notice-header {
73 padding: 40rpx 0;
74 text-align: center;
75 }
76
77 .notice-title {
78 font-size: 36rpx;
79 font-weight: 600;
80 color: #333;
81 }
82
83 .notice-body {
84 background: #fff;
85 border-radius: 16rpx;
86 padding: 40rpx;
87 }
88
89 .section {
90 margin-bottom: 40rpx;
91
92 &:last-child {
93 margin-bottom: 0;
94 }
95
96
97 }
98
99 .section-title {
100 font-size: 30rpx;
101 font-weight: 600;
102 color: #333;
103 margin-bottom: 20rpx;
104 line-height: 1.5;
105 }
106
107 .section-text {
108 font-size: 28rpx;
109 color: #666;
110 line-height: 1.8;
111 text-align: justify;
112
113 &.mt20 {
114 margin-top: 20rpx;
115 }
116 }
117
118 .section-item {
119 font-size: 28rpx;
120 color: #666;
121 line-height: 1.8;
122 margin-bottom: 12rpx;
123 text-align: justify;
124
125 &:last-child {
126 margin-bottom: 0;
127 }
128 }
129
130 .notice-footer {
131 padding: 30rpx;
132 background: #fff;
133 box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
134 }
135
136
137 </style>
1 <template>
2 <view class="notice-page">
3 <view class="notice-content">
4 <view class="notice-body">
5 <!-- <view class="title">考点申请须知</view> -->
6 <view class="subtitle">中国跆拳道协会考点申请须知</view>
7
8 <view class="paragraph">
9 欢迎贵单位申请成为中国跆拳道协会(以下简称中国跆协)考点。请确保本次申请系自愿行为,且已充分了解并愿意遵守本须知的全部内容。
10 </view>
11
12 <view class="section">
13 <view class="section-title">一、基本要求</view>
14 <view class="section-item">1. 申请单位须为中国跆协有效团体会员。</view>
15 <view class="section-item">2. 具体申请条件(人员资质、场地设施等)请以中国跆协官网公布的最新要求为准。</view>
16 </view>
17
18 <view class="section">
19 <view class="section-title">二、考点主要职责</view>
20 <view class="section-item">1. 按规定组织考试,接受协会统一安排。</view>
21 <view class="section-item">2. 严格执行收费标准,不得违规收费。</view>
22 <view class="section-item">3. 按时完成成绩上传及证书办理。</view>
23 </view>
24
25 <view class="section">
26 <view class="section-title">三、禁止事项</view>
27 <view class="section-item">- 严禁跨区域组织考试</view>
28 <view class="section-item">- 严禁为非会员单位办理证书</view>
29 <view class="section-item">- 严禁买卖或伪造证书</view>
30 <view class="section-item">- 严禁擅自颁发证书</view>
31 </view>
32
33 <view class="section">
34 <view class="section-title">四、违规处理</view>
35 <view class="section-item">视情节给予警告、暂停考点资格、取消考点资格、取消会员资格等处理;情节严重者列入行业黑名单。</view>
36 </view>
37
38 <view class="section">
39 <view class="section-title">五、其他</view>
40 <view class="section-item">本须知依据中国跆协相关规定制定,解释权归中国跆拳道协会所有。具体申请条件及材料清单,请登录中国跆拳道协会官网查询。</view>
41 </view>
42 </view>
43 </view>
44
45 <view class="notice-footer">
46 <button class="back-btn" @click="goBack">上一步</button>
47 <button class="agree-btn" @click="goApply">下一步</button>
48 </view>
49 </view>
50 </template>
51
52 <script setup>
53 function goApply() {
54 uni.navigateTo({
55 url: '/myCenter/examPointApply'
56 })
57 }
58 function goBack() {
59 uni.navigateBack({
60 delta: 1
61 })
62 }
63 </script>
64
65 <style lang="scss" scoped>
66 .notice-page {
67 min-height: 100vh;
68 background: #f5f5f5;
69 display: flex;
70 flex-direction: column;
71 }
72
73 .notice-content {
74 flex: 1;
75 padding: 30rpx;
76 overflow-y: auto;
77 }
78
79 .notice-body {
80 background: #fff;
81 border-radius: 16rpx;
82 padding: 40rpx;
83 }
84
85 .title {
86 font-size: 36rpx;
87 font-weight: 600;
88 color: #333;
89 text-align: center;
90 margin-bottom: 30rpx;
91 }
92
93 .subtitle {
94 font-size: 28rpx;
95 color: #666;
96 margin-bottom: 30rpx;
97 }
98
99 .paragraph {
100 font-size: 28rpx;
101 color: #666;
102 line-height: 1.8;
103 margin-bottom: 30rpx;
104 }
105
106 .section {
107 margin-bottom: 30rpx;
108 }
109
110 .section-title {
111 font-size: 30rpx;
112 font-weight: 600;
113 color: #333;
114 margin-bottom: 16rpx;
115 }
116
117 .section-item {
118 font-size: 26rpx;
119 color: #666;
120 line-height: 1.8;
121 margin-bottom: 8rpx;
122 text-align: justify;
123 }
124
125 .notice-footer {
126 padding: 30rpx;
127 background: #fff;
128 box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
129 display: flex;
130 justify-content: space-between;
131 }
132 .back-btn{
133 width: 48%;
134 height: 88rpx;
135 line-height: 88rpx;
136 background: #fff;
137 color: #C4121B;
138 font-size: 32rpx;
139 border-radius: 44rpx;
140 border: 1rpx solid #C4121B;
141 }
142 .agree-btn {
143 width: 48%;
144 height: 88rpx;
145 line-height: 88rpx;
146 background: #C4121B;
147 color: #fff;
148 font-size: 32rpx;
149 border-radius: 44rpx;
150 border: none;
151
152 &::after {
153 border: none;
154 }
155 }
156 </style>
1 <template>
2 <view class="notice-page">
3 <view class="notice-content">
4 <view class="notice-body">
5 <view class="section">中国跆拳道协会团体会员入会须知</view>
6 <view class="section ">
7 <view class="section-text">欢迎您申请成为中国跆拳道协会(以下简称中国跆协)团体会员。贵单位的入会申请应经过内部决策程序(如理事会决议或法定代表人决定),确认为自愿行为。请您在提交申请前,务必仔细阅读本入会须知,并确保申请材料真实、完整。</view>
8 </view>
9
10 <view class="section">
11 <view class="section-title">一、团体会员分类</view>
12 <view class="section-text">根据中国跆协相关规定,团体会员共分三类:区域性一级团体会员、区域性二级团体会员、专业性团体会员。</view>
13 </view>
14
15 <view class="section">
16 <view class="section-title">二、入会条件</view>
17 <view class="section-text">申请成为中国跆协团体会员,须具备以下条件:</view>
18 <view class="section-item">1. 承认章程:承认并拥护《中国跆拳道协会章程》及协会各项规章制度、决议。</view>
19 <view class="section-item">2. 合法资质:必须是经当地工商、民政或教育/体育行政部门登记注册,具有独立法人资格或能够独立承担民事责任的合法机构。</view>
20 <view class="section-item">3. 组织健全:具有比较完善的章程、组织管理机构、固定的活动场所及相应的从业人员。</view>
21 <view class="section-item">4. 运营规范:在区域内具有一定影响力,能够行使会员权利,履行会员义务,支持中国跆拳道事业的发展。</view>
22 </view>
23
24 <view class="section">
25 <view class="section-title">三、入会程序</view>
26 <view class="section-text">团体会员入会实行"逐级审批、属地管理"原则:</view>
27 <view class="section-item">1. 提交申请:向所属行政区域的上一级中国跆协团体会员提交入会申请书及相关资质材料。</view>
28 <view class="section-item sub">专业性团体会员(如道馆、俱乐部):通常向所在地的"区域性二级团体会员"(市级协会)提交申请。</view>
29 <view class="section-item sub">区域性二级团体会员:向所在地的"区域性一级团体会员"(省级协会)提交申请。</view>
30 <view class="section-item sub">无上级协会的:如当地暂无相应级别团体会员,可直接向中国跆拳道协会或上一级协会提交申请。</view>
31 <view class="section-item">2. 审核批准:由受理申请的团体会员进行资格审查和实地考察,并报中国跆协备案。</view>
32 <view class="section-item">3. 缴纳会费:审核通过后,按年度标准缴纳会费。</view>
33 <view class="section-item">4. 颁发证书:由中国跆协或授权的团体会员颁发统一制作的"团体会员证书"。</view>
34 </view>
35
36 <view class="section">
37 <view class="section-title">四、会费标准</view>
38 <view class="section-text">团体会员须按年度缴纳会费。具体标准依据《中国跆拳道协会会员会费标准》执行(注:具体金额请以中国跆协官方最新文件为准)。</view>
39 </view>
40
41 <view class="section">
42 <view class="section-title">五、会员权利</view>
43 <view class="section-text">团体会员享有《中国跆拳道协会会员管理办法》规定的以下主要权利:</view>
44 <view class="section-item">1. 本团体的选举权、被选举权和表决权。</view>
45 <view class="section-item">2. 组织辖区内跆拳道活动的管理权(仅限区域性团体会员)。</view>
46 <view class="section-item">3. 参加中国跆协举办的赛事、培训、交流活动的优先权。</view>
47 <view class="section-item">4. 获得中国跆协在业务指导、教练员裁判员委派、级段位考试等方面的服务优先权。</view>
48 <view class="section-item">5. 对协会工作的批评建议权和监督权。</view>
49 </view>
50
51 <view class="section">
52 <view class="section-title">六、会员义务</view>
53 <view class="section-text">团体会员应履行以下主要义务:</view>
54 <view class="section-item">1. 遵守章程,执行协会决议,维护协会合法权益。</view>
55 <view class="section-item">2. 完成协会交办的工作,如组织参赛、数据统计、行业调研等。</view>
56 <view class="section-item">3. 按时足额缴纳会费。</view>
57 <view class="section-item">4. 定期向上级协会上报年度工作计划和总结。</view>
58 <view class="section-item">5. 积极宣传和推广跆拳道运动。</view>
59 </view>
60
61 <view class="section">
62 <view class="section-title">七、退会与违规处理</view>
63 <view class="section-item">1. 自动退会:团体会员如果一年不交纳会费或不参加本团体活动的,视为自动退会。退会后须交回会员证书。</view>
64 <view class="section-item">2. 违规处罚:会员行为若违反《会员管理办法》,如出现严重违规经营、损害协会声誉、拖欠应缴款项等行为,协会视情节轻重给予警告、限期整改、暂停会员资格直至取消会员资格的处罚。</view>
65 </view>
66
67 <view class="section">
68 <view class="section-title">八、其他</view>
69 <view class="section-item">1. 本须知内容依据《中国跆拳道协会章程》及《中国跆拳道协会会员管理办法(暂行)》制定。</view>
70 <view class="section-item">2. 团体会员在开展活动时,须严格遵守国家安全生产法律法规,落实赛事活动安全责任。</view>
71 <view class="section-item">3. 如有疑问,请咨询所在地的中国跆协区域性团体会员(省/市跆拳道协会)或登录中国跆拳道协会官网查询。</view>
72 </view>
73 </view>
74 </view>
75 </view>
76 </template>
77
78 <script setup>
79 function goBack() {
80 uni.navigateBack()
81 }
82 </script>
83
84 <style lang="scss" scoped>
85 .notice-page {
86 min-height: 100vh;
87 background: #f5f5f5;
88 display: flex;
89 flex-direction: column;
90 }
91
92 .notice-content {
93 flex: 1;
94 padding: 30rpx;
95 overflow-y: auto;
96 }
97
98 .notice-header {
99 padding: 40rpx 0;
100 text-align: center;
101 }
102
103 .notice-title {
104 font-size: 36rpx;
105 font-weight: 600;
106 color: #333;
107 }
108
109 .notice-body {
110 background: #fff;
111 border-radius: 16rpx;
112 padding: 40rpx;
113 }
114
115 .section {
116 margin-bottom: 40rpx;
117
118 &:last-child {
119 margin-bottom: 0;
120 }
121
122 }
123
124 .section-title {
125 font-size: 30rpx;
126 font-weight: 600;
127 color: #333;
128 margin-bottom: 20rpx;
129 line-height: 1.5;
130 }
131
132 .section-text {
133 font-size: 28rpx;
134 color: #666;
135 line-height: 1.8;
136 text-align: justify;
137 margin-bottom: 16rpx;
138 }
139
140 .section-item {
141 font-size: 28rpx;
142 color: #666;
143 line-height: 1.8;
144 margin-bottom: 12rpx;
145 text-align: justify;
146 padding-left: 0;
147
148 &.sub {
149 padding-left: 40rpx;
150 color: #888;
151 font-size: 26rpx;
152 }
153
154 &:last-child {
155 margin-bottom: 0;
156 }
157 }
158
159 .notice-footer {
160 padding: 30rpx;
161 background: #fff;
162 box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
163 }
164
165
166 </style>
1 <template>
2 <view class="notice-page">
3 <view class="notice-content">
4 <view class="notice-body">
5 <view class="section">
6 <view class="section-title">尊敬的用户:</view>
7 <view class="section-text">欢迎您注册中国跆拳道协会会员管理系统。</view>
8 </view>
9
10 <view class="section">
11 <view class="section-title">一、注册信息</view>
12 <view class="section-text">根据系统要求及提示,在网上填写必要的个人用户或单位用户相关有效信息即可注册成功。</view>
13 </view>
14
15 <view class="section">
16 <view class="section-title">二、用户权限</view>
17 <view class="section-item">1)信息注册成功仅代表您同意将本人或本单位信息纳入到本系统内,并非中国跆拳道协会会员。</view>
18 <view class="section-item">2)注册用户如需办理相关业务需向所属单位或向上级协会提交缴费及入会申请,会员信息在有效期内方可使用相关功能。</view>
19 </view>
20
21 <view class="section">
22 <view class="section-title">三、责任</view>
23 <view class="section-item">1)用户须遵守国家法律法规。</view>
24 <view class="section-item">2)用户须按要求填写准确的个人及单位资料,如用户提供的资料包含有不正确的信息,本系统保留结束用户使用相关服务的权利。</view>
25 <view class="section-item">3)中国跆拳道协会承诺保守用户信息等秘密。</view>
26 </view>
27
28 <view class="section">
29 <view class="section-title">四、解释权说明</view>
30 <view class="section-text">以上内容最终解释权归中国跆拳道协会所有。</view>
31 </view>
32 </view>
33 </view>
34 </view>
35 </template>
36
37 <script setup>
38 function goBack() {
39 uni.navigateBack()
40 }
41 </script>
42
43 <style lang="scss" scoped>
44 .notice-page {
45 min-height: 100vh;
46 background: #f5f5f5;
47 display: flex;
48 flex-direction: column;
49 }
50
51 .notice-content {
52 flex: 1;
53 padding: 30rpx;
54 overflow-y: auto;
55 }
56
57 .notice-header {
58 padding: 40rpx 0;
59 text-align: center;
60 }
61
62 .notice-title {
63 font-size: 36rpx;
64 font-weight: 600;
65 color: #333;
66 }
67
68 .notice-body {
69 background: #fff;
70 border-radius: 16rpx;
71 padding: 40rpx;
72 }
73
74 .section {
75 margin-bottom: 40rpx;
76
77 &:last-child {
78 margin-bottom: 0;
79 }
80 }
81
82 .section-title {
83 font-size: 30rpx;
84 font-weight: 600;
85 color: #333;
86 margin-bottom: 20rpx;
87 line-height: 1.5;
88 }
89
90 .section-text {
91 font-size: 28rpx;
92 color: #666;
93 line-height: 1.8;
94 text-align: justify;
95 }
96
97 .section-item {
98 font-size: 28rpx;
99 color: #666;
100 line-height: 1.8;
101 margin-bottom: 12rpx;
102 text-align: justify;
103 padding-left: 0;
104
105 &:last-child {
106 margin-bottom: 0;
107 }
108 }
109
110 .notice-footer {
111 padding: 30rpx;
112 background: #fff;
113 box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
114 }
115
116 </style>
...@@ -2,21 +2,40 @@ ...@@ -2,21 +2,40 @@
2 <view class="perfect-page"> 2 <view class="perfect-page">
3 <!-- 顶部步骤条 --> 3 <!-- 顶部步骤条 -->
4 <view class="steps-bar"> 4 <view class="steps-bar">
5 <view class="step-item" :class="{ active: active >= 0, current: active == 0 }"> 5 <view class="step-item" :class="{ active: activeStep >= 1, current: activeStep == 1 }" @click="switchStep(1)">
6 <view class="step-circle">1 </view> 6 <view class="step-circle">1</view>
7 <view class="step-text">完善信息</view> 7 <view class="step-text">完善信息</view>
8 </view> 8 </view>
9 <view class="step-line" :class="{ active: active >= 1 }"></view> 9 <view class="step-line" :class="{ active: activeStep >= 2 }"></view>
10 <view class="step-item" :class="{ active: active >= 1, current: active == 1 }"> 10 <view class="step-item" :class="{ active: activeStep >= 2, current: activeStep == 2 }" @click="switchStep(2)">
11 <view class="step-circle">2</view> 11 <view class="step-circle">2</view>
12 <view class="step-text">会员认证</view> 12 <view class="step-text">会员认证</view>
13 </view> 13 </view>
14 <view class="step-line" :class="{ active: activeStep >= 3 }"></view>
15 <view class="step-item" :class="{ active: activeStep >= 3, current: activeStep == 3 }" @click="switchStep(3)">
16 <view class="step-circle">3</view>
17 <view class="step-text">审核详情</view>
18 </view>
19 </view>
20 <view class="tips-box">
21 <view class="tips-title">注意</view>
22 <view class="tips-content">
23 <view class="tips-line">尊敬的用户,您好!</view>
24 <view class="tips-line">在开始注册团体会员前,请您提前准备好以下材料,以便顺利完成申请:</view>
25 <view class="tips-item">1. 单位营业执照</view>
26 <view class="tips-desc">请提供清晰的营业执照原件照片或扫描件(加盖公章更佳)</view>
27 <view class="tips-item">2. 法人身份证正反面照片</view>
28 <view class="tips-desc">请分别上传身份证正面及反面清晰照片</view>
29 <view class="tips-desc">确保信息完整、无遮挡、无模糊</view>
30 <view class="tips-item">3. 机构照片</view>
31 <view class="tips-desc">请提供体现单位实际经营或办公环境的照片1-2张</view>
32 <view class="tips-desc">如门头、办公场所、活动场地等(能展示机构真实存在即可)</view>
33 </view>
14 </view> 34 </view>
15 <view style="color:#EB6100;text-align: center;font-size: 24rpx;margin-top:10rpx">请完善以下信息,填写完点击提交按钮进行会员认证!</view>
16 35
17 <view class="page-content" style="padding: 0rpx 30rpx 30rpx;"> 36 <view class="page-content" style="padding: 0rpx 30rpx 30rpx;">
18 <!-- 步骤1:完善信息 --> 37 <!-- 步骤1:完善信息 -->
19 <view class="wBox" v-if="active == 0"> 38 <view class="wBox" v-if="activeStep == 1">
20 <uni-forms ref="baseForm" :modelValue="form" label-width="70"> 39 <uni-forms ref="baseForm" :modelValue="form" label-width="70">
21 <uni-forms-item label="单位名称" required> 40 <uni-forms-item label="单位名称" required>
22 <uni-easyinput class="input-with-border" v-model="form.baseName" :disabled="!editIng" placeholder="单位名称" /> 41 <uni-easyinput class="input-with-border" v-model="form.baseName" :disabled="!editIng" placeholder="单位名称" />
...@@ -42,16 +61,16 @@ ...@@ -42,16 +61,16 @@
42 </view> 61 </view>
43 62
44 <!-- 步骤2:会员认证 --> 63 <!-- 步骤2:会员认证 -->
45 <view class="wBox" v-if="active == 1"> 64 <view class="wBox" v-if="activeStep == 2">
46 <view class="status-box"> 65 <view class="status-box">
47 <view class="status-row"> 66 <view class="status-row">
48 <text class="status-label">认证状态:</text> 67 <text class="status-label">认证状态:</text>
49 <text v-if="authenticationStatusa == 0 || !authenticationStatusa" class="text-danger">未认证</text> 68 <text v-if="authenticationStatus == 0 || !authenticationStatus" class="text-danger">未认证</text>
50 <text v-if="authenticationStatusa == 1" class="text-warning">认证中</text> 69 <text v-if="authenticationStatus == 1" class="text-warning">认证中</text>
51 <text v-if="authenticationStatusa == 2" class="text-success">已认证</text> 70 <text v-if="authenticationStatus == 2" class="text-success">已认证</text>
52 <text v-if="authenticationStatusa == 3" class="text-danger">认证未通过</text> 71 <text v-if="authenticationStatus == 3" class="text-danger">认证未通过</text>
53 <text v-if="authenticationStatusa == 4" class="text-warning">即将过期</text> 72 <text v-if="authenticationStatus == 4" class="text-warning">即将过期</text>
54 <text v-if="authenticationStatusa == 5" class="text-danger">已过期</text> 73 <text v-if="authenticationStatus == 5" class="text-danger">已过期</text>
55 </view> 74 </view>
56 <!-- <view class="btn-row"> 75 <!-- <view class="btn-row">
57 <button type="primary" :disabled="btn" @click="goPay">去缴费</button> 76 <button type="primary" :disabled="btn" @click="goPay">去缴费</button>
...@@ -111,7 +130,7 @@ ...@@ -111,7 +130,7 @@
111 <uni-easyinput class="input-with-border" v-model="form.companyName" :disabled="!editIng" placeholder="请输入营业执照名称" /> 130 <uni-easyinput class="input-with-border" v-model="form.companyName" :disabled="!editIng" placeholder="请输入营业执照名称" />
112 </uni-forms-item> 131 </uni-forms-item>
113 <uni-forms-item label="社会信用代码" required> 132 <uni-forms-item label="社会信用代码" required>
114 <uni-easyinput class="input-with-border" v-model="form.creditCode" :disabled="!editIng" placeholder="请输入社会信用代码" /> 133 <uni-easyinput class="input-with-border" v-model="form.creditCode" :disabled="!editIng" placeholder="请输入社会信用代码" @blur="onCreditCodeBlur" />
115 </uni-forms-item> 134 </uni-forms-item>
116 <uni-forms-item label="法人身份证" required> 135 <uni-forms-item label="法人身份证" required>
117 <view class="idcard-box"> 136 <view class="idcard-box">
...@@ -154,22 +173,85 @@ ...@@ -154,22 +173,85 @@
154 </view> 173 </view>
155 </view> 174 </view>
156 </uni-forms-item> 175 </uni-forms-item>
176 <!-- <uni-forms-item label=""> -->
177 <view class="notice-box">
178 <checkbox-group @change="onNoticeChange">
179 <label class="notice-label">
180 <checkbox :checked="form.notice" value="1" color="#e64329" />
181 <text class="notice-text">我已阅读并同意</text>
182 <text class="notice-link" @click.stop="showNotice(1)">《注册须知》</text>
183 <text class="notice-link" @click.stop="showNotice(2)">《入会须知》</text>
184 <text class="notice-link" @click.stop="showNotice(3)">《免责声明》</text>
185 </label>
186 </checkbox-group>
187 </view>
188 <!-- </uni-forms-item> -->
157 </uni-forms> 189 </uni-forms>
158 190
159 <view class="fixedBottom"> 191 <view class="fixedBottom">
160 <button class="btn-gray" @click="active = 0">上一步</button> 192 <button class="btn-gray" @click="activeStep = 1">上一步</button>
161 <button class="btn-red" :disabled="btn" @click="submitStep2()">提 交</button> 193 <button class="btn-red" :disabled="btn" @click="submitStep2()">下一步</button>
194 </view>
195 </view>
196
197 <!-- 步骤3:审核详情(只展示,无提交按钮) -->
198 <view class="wBox" v-if="activeStep == 3">
199 <view class="audit-detail">
200 <view class="audit-title">审核详情</view>
201 <view v-if="auditLoading" class="loading-box">
202 <text>加载中...</text>
203 </view>
204 <view v-else-if="auditList.length === 0" class="empty-box">
205 <text>暂无审核记录</text>
206 </view>
207 <view class="audit-list" v-else>
208 <view class="audit-item" v-for="(item, index) in auditList" :key="index">
209 <view class="audit-item-header">
210 <text class="audit-dept">{{ item.auditDeptName || '待审核' }}</text>
211 <text class="audit-status" :class="getAuditStatusClass(item.auditResult)">{{ getAuditStatusText(item.auditResult) }}</text>
162 </view> 212 </view>
213 <view class="audit-item-body">
214 <view class="audit-row" >
215 <text class="audit-label">审核日期:</text>
216 <text class="audit-value">{{ formatDate(item.auditTime) }}</text>
217 </view>
218 <view class="audit-row">
219 <text class="audit-label">理由:</text>
220 <text class="audit-value">{{ item.auditMsg || '/' }}</text>
221 </view>
222 </view>
223 </view>
224 </view>
225 </view>
226
227 <!-- <view class="fixedBottom">
228 <button class="btn-gray" @click="activeStep = 2">上一步</button>
229 </view> -->
163 </view> 230 </view>
164 </view> 231 </view>
165 </view> 232 </view>
233
234 <!-- 自定义弹框 -->
235 <custom-modal
236 ref="customModalRef"
237 :title="modalConfig.title"
238 :content="modalConfig.content"
239 :isHtml="modalConfig.isHtml"
240 :showCancel="modalConfig.showCancel"
241 :showConfirm="modalConfig.showConfirm"
242 :cancelText="modalConfig.cancelText"
243 :confirmText="modalConfig.confirmText"
244 @confirm="onModalConfirm"
245 @cancel="onModalCancel"
246 ></custom-modal>
166 </template> 247 </template>
167 248
168 <script setup> 249 <script setup>
169 import { 250 import {
170 ref, 251 ref,
171 reactive, 252 reactive,
172 computed 253 computed,
254 watch
173 } from 'vue'; 255 } from 'vue';
174 import * as api from '@/common/api.js'; 256 import * as api from '@/common/api.js';
175 import { 257 import {
...@@ -177,11 +259,57 @@ ...@@ -177,11 +259,57 @@
177 onShow 259 onShow
178 } from '@dcloudio/uni-app'; 260 } from '@dcloudio/uni-app';
179 import config from '@/config.js' 261 import config from '@/config.js'
262 import customModal from '@/components/custom-modal.vue'
180 // import uniDataSelect from '@/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue' 263 // import uniDataSelect from '@/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue'
181 const app = getApp(); 264 const app = getApp();
182 265
266 // 自定义弹框 ref
267 const customModalRef = ref(null)
268
269 // 弹框配置
270 const modalConfig = ref({
271 title: '',
272 content: '',
273 isHtml: false,
274 showCancel: true,
275 showConfirm: true,
276 cancelText: '取消',
277 confirmText: '确定'
278 })
279
280 // 弹框确认回调
281 function onModalConfirm() {
282 if (modalConfig.value.onConfirm) {
283 modalConfig.value.onConfirm()
284 }
285 }
286
287 // 弹框取消回调
288 function onModalCancel() {
289 if (modalConfig.value.onCancel) {
290 modalConfig.value.onCancel()
291 }
292 }
293
294 // 显示自定义弹框方法
295 function showModal(options) {
296 modalConfig.value = {
297 title: options.title || '',
298 content: options.content || '',
299 isHtml: options.isHtml || false,
300 showCancel: options.showCancel !== false,
301 showConfirm: options.showConfirm !== false,
302 cancelText: options.cancelText || '取消',
303 confirmText: options.confirmText || '确定',
304 onConfirm: options.onConfirm,
305 onCancel: options.onCancel
306 }
307 customModalRef.value?.open()
308 }
309
183 const form = ref({ 310 const form = ref({
184 type: '1' 311 type: '1',
312 notice: false
185 }); 313 });
186 314
187 // 类型列表 315 // 类型列表
...@@ -219,7 +347,7 @@ ...@@ -219,7 +347,7 @@
219 const assoFullName = ref('') // 协会完整路径名称 347 const assoFullName = ref('') // 协会完整路径名称
220 348
221 // 步骤相关 349 // 步骤相关
222 const active = ref(0) 350 const activeStep = ref(1)
223 const list1 = ref([{ 351 const list1 = ref([{
224 title: '完善信息' 352 title: '完善信息'
225 }, { 353 }, {
...@@ -230,7 +358,7 @@ ...@@ -230,7 +358,7 @@
230 const editIng = ref(true); 358 const editIng = ref(true);
231 359
232 // 认证状态 360 // 认证状态
233 const authenticationStatusa = ref() 361 const authenticationStatus = ref()
234 const result = ref(false) 362 const result = ref(false)
235 363
236 // 地址级联 364 // 地址级联
...@@ -247,6 +375,113 @@ ...@@ -247,6 +375,113 @@
247 // 考点审核状态 375 // 考点审核状态
248 const auditStatus = ref('0') 376 const auditStatus = ref('0')
249 377
378 // 审核详情
379 const auditList = ref([])
380 const auditLoading = ref(false)
381
382 // 社会信用代码校验状态(true=校验通过,false=校验失败/已存在)
383 const creditCodeValid = ref(true)
384
385 // 须知勾选
386 function onNoticeChange(e) {
387 const values = e.detail.value
388 form.value.notice = values.includes('1')
389 }
390
391 // 社会信用代码失焦校验
392 function onCreditCodeBlur() {
393 const creditCode = form.value.creditCode
394 if (!creditCode) return
395 api.creditCodeExist(creditCode).then(res => {
396 if (res.data) {
397 creditCodeValid.value = false
398 uni.showToast({ title: '社会信用代码已存在,请联系中跆协修改', icon: 'none', duration: 3000 })
399 } else {
400 creditCodeValid.value = true
401 }
402 }).catch(() => {
403 creditCodeValid.value = true
404 })
405 }
406
407 // 查看须知 - 跳转到须知页面
408 function showNotice(type) {
409 const pageMap = {
410 1: '/pages/index/notice-registration',
411 2: '/pages/index/notice-membership',
412 3: '/pages/index/notice-disclaimer'
413 }
414 const url = pageMap[type]
415 if (url) {
416 uni.navigateTo({ url })
417 }
418 }
419
420 // 切换步骤(参考PC端handelActive逻辑)
421 function switchStep(step) {
422 // 如果没有认证状态,不允许切换
423 if (!authenticationStatus.value) return
424 // 根据认证状态判断可以切换到哪些步骤
425 const status = authenticationStatus.value
426 // 已认证(2)或认证中(1)可以到步骤3,其他只能到步骤2
427 if (status == 1 || status == 2) {
428 // 可以切换到任意步骤
429 activeStep.value = step
430 } else {
431 // 未认证(0)、认证未通过(3)只能切换到步骤1或2
432 if (step <= 2) {
433 activeStep.value = step
434 }
435 }
436 }
437
438 // 获取审核详情
439 function getMyCertStageFN() {
440 auditLoading.value = true
441 api.getMyRecent().then(res => {
442 auditLoading.value = false
443 if (res.data && res.data.auditLogs) {
444 try {
445 auditList.value = JSON.parse(res.data.auditLogs)
446 } catch (e) {
447 auditList.value = []
448 }
449 } else {
450 auditList.value = []
451 }
452 }).catch(() => {
453 auditLoading.value = false
454 auditList.value = []
455 })
456 }
457
458 // 审核状态文字
459 function getAuditStatusText(status) {
460 const map = {
461 0: '待审核',
462 1: '审核通过',
463 2: '审核拒绝'
464 }
465 return map[status] || '待审核'
466 }
467
468 // 审核状态样式
469 function getAuditStatusClass(status) {
470 if (status === 1) return 'status-pass'
471 if (status === 2) return 'status-reject'
472 return 'status-pending'
473 }
474
475 // 日期格式化
476 function formatDate(time) {
477 if (!time) return ''
478 const date = new Date(time)
479 const year = date.getFullYear()
480 const month = String(date.getMonth() + 1).padStart(2, '0')
481 const day = String(date.getDate()).padStart(2, '0')
482 return `${year}-${month}-${day}`
483 }
484
250 // 图片URL处理:如果不是http开头,拼接baseUrl_api 485 // 图片URL处理:如果不是http开头,拼接baseUrl_api
251 function getImageUrl(url) { 486 function getImageUrl(url) {
252 if (!url) return '' 487 if (!url) return ''
...@@ -278,6 +513,10 @@ ...@@ -278,6 +513,10 @@
278 init() 513 init()
279 }; 514 };
280 } 515 }
516 // 如果初始就是步骤3,需要立即调用
517 if (activeStep.value === 3) {
518 getMyCertStageFN()
519 }
281 }); 520 });
282 521
283 function init() { 522 function init() {
...@@ -300,7 +539,24 @@ ...@@ -300,7 +539,24 @@
300 if (form.value.type) { 539 if (form.value.type) {
301 form.value.type = String(form.value.type) 540 form.value.type = String(form.value.type)
302 } 541 }
303 authenticationStatusa.value = res.data.authenticationStatus 542 authenticationStatus.value = res.data.authenticationStatus
543 switch (res.data.authenticationStatus) {
544 case '0' :
545 activeStep.value = 2
546 break
547 case '1':
548 activeStep.value = 3
549 break
550 case '2':
551 activeStep.value = 3
552 break
553 case '3':
554 activeStep.value = 2
555 break
556 default:
557 activeStep.value = 1
558 break
559 }
304 result.value = res.data.result 560 result.value = res.data.result
305 561
306 // 处理地址 - 需要用对象数组格式 562 // 处理地址 - 需要用对象数组格式
...@@ -343,14 +599,22 @@ ...@@ -343,14 +599,22 @@
343 } 599 }
344 600
345 // 设置认证状态对应的按钮状态 601 // 设置认证状态对应的按钮状态
346 if (authenticationStatusa.value == 0) { 602 if (authenticationStatus.value == 0) {
347 btn.value = false 603 btn.value = false
348 } else if (authenticationStatusa.value == 1) { 604 } else if (authenticationStatus.value == 1) {
349 btn.value = true 605 btn.value = true
350 } else { 606 } else {
351 btn.value = !result.value 607 btn.value = !result.value
352 } 608 }
353 609
610 // 参考PC端:根据认证状态设置字段是否可编辑
611 // 认证中(1)、已认证(2)、已过期(5)时,字段不可编辑
612 if (authenticationStatus.value == 1 || authenticationStatus.value == 2 || authenticationStatus.value == 5) {
613 editIng.value = false
614 } else {
615 editIng.value = true
616 }
617
354 // creditCode.value = form.value.creditCode 618 // creditCode.value = form.value.creditCode
355 // legal.value = form.value.legal 619 // legal.value = form.value.legal
356 // legalIdcCode.value = form.value.legalIdcCode 620 // legalIdcCode.value = form.value.legalIdcCode
...@@ -532,7 +796,7 @@ ...@@ -532,7 +796,7 @@
532 } 796 }
533 uni.showToast({ title: '操作成功', duration: 1500, icon: 'success' }) 797 uni.showToast({ title: '操作成功', duration: 1500, icon: 'success' })
534 setTimeout(() => { 798 setTimeout(() => {
535 active.value = 1 799 activeStep.value = 2
536 getDetail() 800 getDetail()
537 }, 1500) 801 }, 1500)
538 } else { 802 } else {
...@@ -580,6 +844,10 @@ ...@@ -580,6 +844,10 @@
580 uni.showToast({ title: '请输入社会信用代码', duration: 2000, icon: 'none' }) 844 uni.showToast({ title: '请输入社会信用代码', duration: 2000, icon: 'none' })
581 return 845 return
582 } 846 }
847 if (!creditCodeValid.value) {
848 uni.showToast({ title: '社会信用代码已存在,请联系中跆协修改', icon: 'none', duration: 3000 })
849 return
850 }
583 if (!form.value.legalIdcPhoto1 || !form.value.legalIdcPhoto2) { 851 if (!form.value.legalIdcPhoto1 || !form.value.legalIdcPhoto2) {
584 uni.showToast({ title: '请上传身份证正反面', duration: 2000, icon: 'none' }) 852 uni.showToast({ title: '请上传身份证正反面', duration: 2000, icon: 'none' })
585 return 853 return
...@@ -596,6 +864,10 @@ ...@@ -596,6 +864,10 @@
596 uni.showToast({ title: '请上传机构照片', duration: 2000, icon: 'none' }) 864 uni.showToast({ title: '请上传机构照片', duration: 2000, icon: 'none' })
597 return 865 return
598 } 866 }
867 if (!form.value.notice) {
868 uni.showToast({ title: '请阅读并同意注册须知、入会须知、免责声明', duration: 2000, icon: 'none' })
869 return
870 }
599 871
600 // 验证营业执照和法人信息 872 // 验证营业执照和法人信息
601 uni.showLoading({ title: '验证中...' }) 873 uni.showLoading({ title: '验证中...' })
...@@ -607,34 +879,25 @@ ...@@ -607,34 +879,25 @@
607 }).then(checkRes => { 879 }).then(checkRes => {
608 uni.hideLoading() 880 uni.hideLoading()
609 if (checkRes.code !== 200) { 881 if (checkRes.code !== 200) {
610 uni.showModal({ 882 showModal({
611 title: '系统提示', 883 title: '系统提示',
612 content: checkRes.msg || '企业信息异常请检查相关资料信息,确认无误后再次提交!', 884 content: checkRes.msg || '企业信息异常请检查相关资料信息,确认无误后再次提交!',
613 showCancel: true,
614 confirmText: '确认无误',
615 cancelText: '返回修改', 885 cancelText: '返回修改',
616 success: (res) => { 886 confirmText: '确认无误',
617 if (res.confirm) { 887 onConfirm: () => submitCertification()
618 submitCertification()
619 }
620 }
621 }) 888 })
622 } else { 889 } else {
890 // 校验通过,提交认证(PC端逻辑)
623 submitCertification() 891 submitCertification()
624 } 892 }
625 }).catch(() => { 893 }).catch(() => {
626 uni.hideLoading() 894 uni.hideLoading()
627 uni.showModal({ 895 showModal({
628 title: '系统提示', 896 title: '系统提示',
629 content: '企业信息异常请检查相关资料信息,确认无误后再次提交!', 897 content: '企业信息异常请检查相关资料信息,确认无误后再次提交!',
630 showCancel: true,
631 confirmText: '确认无误',
632 cancelText: '返回修改', 898 cancelText: '返回修改',
633 success: (res) => { 899 confirmText: '确认无误',
634 if (res.confirm) { 900 onConfirm: () => submitCertification()
635 submitCertification()
636 }
637 }
638 }) 901 })
639 }) 902 })
640 } 903 }
...@@ -935,6 +1198,14 @@ ...@@ -935,6 +1198,14 @@
935 url: '/myCenter/certAuditDetail' 1198 url: '/myCenter/certAuditDetail'
936 }) 1199 })
937 } 1200 }
1201
1202 // 监听步骤变化,加载审核详情
1203 watch(activeStep, (newVal) => {
1204 console.log('activeStep changed:', newVal)
1205 if (newVal === 3) {
1206 getMyCertStageFN()
1207 }
1208 })
938 </script> 1209 </script>
939 1210
940 <style lang="scss" scoped> 1211 <style lang="scss" scoped>
...@@ -949,71 +1220,132 @@ ...@@ -949,71 +1220,132 @@
949 display: flex; 1220 display: flex;
950 align-items: center; 1221 align-items: center;
951 justify-content: center; 1222 justify-content: center;
952 padding: 15rpx 60rpx; 1223 padding: 30rpx 40rpx;
953 background: #fff; 1224 background: linear-gradient(135deg, #fff9f9 0%, #ffffff 100%);
954 margin-top: 20rpx; 1225 margin-top: 20rpx;
1226 position: relative;
1227 }
955 1228
956 .step-item { 1229 .step-item {
957 display: flex; 1230 display: flex;
1231 flex-direction: column;
958 align-items: center; 1232 align-items: center;
1233 position: relative;
1234 z-index: 2;
959 1235
960 .step-circle { 1236 .step-circle {
961 width: 48rpx; 1237 width: 56rpx;
962 height: 48rpx; 1238 height: 56rpx;
963 border-radius: 50%; 1239 border-radius: 50%;
964 background: #fff; 1240 background: #fff;
965 border: 2rpx solid #999; 1241 border: 4rpx solid #ddd;
966 color: #999; 1242 color: #999;
967 font-size: 24rpx; 1243 font-size: 26rpx;
1244 font-weight: 600;
968 display: flex; 1245 display: flex;
969 align-items: center; 1246 align-items: center;
970 justify-content: center; 1247 justify-content: center;
971 margin-right: 10rpx; 1248 transition: all 0.4s ease;
972 transition: all 0.3s; 1249 box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
973 } 1250 }
974 1251
975 .step-text { 1252 .step-text {
976 font-size: 24rpx; 1253 font-size: 24rpx;
977 color: #999; 1254 color: #999;
1255 margin-top: 12rpx;
978 transition: all 0.3s; 1256 transition: all 0.3s;
1257 white-space: nowrap;
979 } 1258 }
980 1259
981 &.active .step-circle { 1260 &.active {
982 background: #fff; 1261 .step-circle {
983 color: #AD181F;
984 border-color: #AD181F; 1262 border-color: #AD181F;
1263 color: #AD181F;
1264 background: #fff;
985 } 1265 }
986 1266
987 &.active .step-text { 1267 .step-text {
988 color: #AD181F; 1268 color: #AD181F;
989 font-weight: 600; 1269 font-weight: 600;
990 } 1270 }
1271 }
991 1272
992 &.current .step-circle { 1273 &.current {
993 background: #AD181F; 1274 .step-circle {
1275 background: linear-gradient(135deg, #AD181F 0%, #c42030 100%);
1276 border-color: #AD181F;
994 color: #fff; 1277 color: #fff;
995 box-shadow: 0 4rpx 12rpx rgba(173, 24, 31, 0.3); 1278 box-shadow: 0 4rpx 16rpx rgba(173, 24, 31, 0.35);
1279 transform: scale(1.1);
996 } 1280 }
997 1281
998 &.current .step-text { 1282 .step-text {
999 color: #AD181F; 1283 color: #AD181F;
1000 font-weight: 600; 1284 font-weight: 700;
1001 } 1285 }
1002 } 1286 }
1287 }
1003 1288
1004 .step-line { 1289 .step-line {
1005 width: 120rpx; 1290 flex: 1;
1006 height: 4rpx; 1291 height: 6rpx;
1007 background: #e0e0e0; 1292 background: #e8e8e8;
1008 margin: 0 20rpx; 1293 margin: 0 10rpx;
1009 transition: all 0.3s; 1294 margin-bottom: 30rpx;
1295 border-radius: 3rpx;
1296 transition: all 0.4s ease;
1297 position: relative;
1298 z-index: 1;
1010 1299
1011 &.active { 1300 &.active {
1012 background: #AD181F; 1301 background: linear-gradient(90deg, #AD181F 0%, #e84040 100%);
1013 }
1014 } 1302 }
1015 } 1303 }
1016 1304
1305 /* 提示框样式 */
1306 .tips-box {
1307 margin: 20rpx 30rpx 0;
1308 padding: 24rpx;
1309 background: linear-gradient(135deg, #fff9f0 0%, #fff5e6 100%);
1310 border-radius: 12rpx;
1311 border: 1rpx solid #f0d5b8;
1312 }
1313
1314 .tips-title {
1315 display: inline-block;
1316 background: #e64329;
1317 color: #fff;
1318 font-size: 22rpx;
1319 padding: 4rpx 16rpx;
1320 border-radius: 20rpx;
1321 margin-bottom: 16rpx;
1322 font-weight: 600;
1323 }
1324
1325 .tips-content {
1326 font-size: 26rpx;
1327 color: #666;
1328 line-height: 1.7;
1329 }
1330
1331 .tips-line {
1332 margin-bottom: 12rpx;
1333 }
1334
1335 .tips-item {
1336 color: #333;
1337 font-weight: 600;
1338 margin-top: 16rpx;
1339 margin-bottom: 8rpx;
1340 }
1341
1342 .tips-desc {
1343 color: #888;
1344 font-size: 24rpx;
1345 padding-left: 20rpx;
1346 line-height: 1.6;
1347 }
1348
1017 .wBox { 1349 .wBox {
1018 width: 700rpx; 1350 width: 700rpx;
1019 padding: 30rpx; 1351 padding: 30rpx;
...@@ -1034,10 +1366,11 @@ ...@@ -1034,10 +1366,11 @@
1034 .status-row { 1366 .status-row {
1035 display: flex; 1367 display: flex;
1036 align-items: center; 1368 align-items: center;
1369 font-size: 24rpx;
1037 } 1370 }
1038 1371
1039 .status-label { 1372 .status-label {
1040 font-size: 28rpx; 1373 font-size: 24rpx;
1041 color: #333; 1374 color: #333;
1042 margin-right: 10rpx; 1375 margin-right: 10rpx;
1043 width: 100px; 1376 width: 100px;
...@@ -1235,15 +1568,82 @@ ...@@ -1235,15 +1568,82 @@
1235 border-radius: 8rpx; 1568 border-radius: 8rpx;
1236 padding: 0 20rpx; 1569 padding: 0 20rpx;
1237 width: 100%; 1570 width: 100%;
1571 max-width: 100%;
1238 box-sizing: border-box; 1572 box-sizing: border-box;
1573 overflow: hidden;
1239 1574
1240 :deep(.uni-easyinput__input) { 1575 :deep(.uni-easyinput__input) {
1241 white-space: nowrap; 1576 white-space: nowrap;
1242 overflow: hidden; 1577 overflow: hidden;
1243 text-overflow: ellipsis; 1578 text-overflow: ellipsis;
1579 width: 100%;
1580 }
1581
1582 :deep(.uni-easyinput__wrapper) {
1583 width: 100%;
1584 overflow: hidden;
1585 }
1586
1587 :deep(.uni-input-wrapper) {
1588 width: 100%;
1244 } 1589 }
1245 } 1590 }
1246 1591
1592 /* 限制 uni-easyinput 组件宽度 */
1593 :deep(.uni-easyinput) {
1594 width: 100%;
1595 max-width: 100%;
1596 overflow: hidden;
1597 }
1598
1599 :deep(.uni-easyinput__container) {
1600 width: 100%;
1601 max-width: 100%;
1602 overflow: hidden;
1603 }
1604
1605 /* 限制 uni-forms-item 内容区域 */
1606 :deep(.uni-forms-item__content) {
1607 width: 100% !important;
1608 max-width: 100% !important;
1609 overflow: hidden;
1610 box-sizing: border-box;
1611 }
1612
1613 :deep(.uni-forms-item) {
1614 width: 100%;
1615 max-width: 100%;
1616 overflow: hidden;
1617 }
1618
1619 :deep(.uni-forms) {
1620 width: 100%;
1621 max-width: 100%;
1622 }
1623
1624 /* uni-data-picker input-value padding 调整 */
1625 :deep(.input-value) {
1626 padding: 0 5rpx !important;
1627 }
1628
1629 /* 强制限制所有输入框宽度 */
1630 :deep(input) {
1631 max-width: 100% !important;
1632 width: 100% !important;
1633 }
1634
1635 /* 限制 uni-data-select 下拉框 */
1636 :deep(.uni-data-select) {
1637 max-width: 100% !important;
1638 width: 100% !important;
1639 overflow: hidden;
1640 }
1641
1642 :deep(.uni-data-select .uni-select) {
1643 max-width: 100% !important;
1644 width: 100% !important;
1645 }
1646
1247 /* picker 样式 */ 1647 /* picker 样式 */
1248 .picker-view { 1648 .picker-view {
1249 height: 70rpx; 1649 height: 70rpx;
...@@ -1277,6 +1677,7 @@ ...@@ -1277,6 +1677,7 @@
1277 border: 1rpx solid #e0e0e0; 1677 border: 1rpx solid #e0e0e0;
1278 border-radius: 8rpx; 1678 border-radius: 8rpx;
1279 width: 100%; 1679 width: 100%;
1680 max-width: 100%;
1280 box-sizing: border-box; 1681 box-sizing: border-box;
1281 overflow: hidden; 1682 overflow: hidden;
1282 } 1683 }
...@@ -1285,14 +1686,17 @@ ...@@ -1285,14 +1686,17 @@
1285 :deep(.uni-data-picker) { 1686 :deep(.uni-data-picker) {
1286 width: 100%; 1687 width: 100%;
1287 display: block; 1688 display: block;
1689 overflow: hidden;
1288 } 1690 }
1289 :deep(.uni-data-picker .selected-area) { 1691 :deep(.uni-data-picker .selected-area) {
1290 width: 100%; 1692 width: 100%;
1693 max-width: 100%;
1291 padding: 0 20rpx; 1694 padding: 0 20rpx;
1292 box-sizing: border-box; 1695 box-sizing: border-box;
1293 display: flex; 1696 display: flex;
1294 justify-content: flex-start; 1697 justify-content: flex-start;
1295 text-align: left; 1698 text-align: left;
1699 overflow: hidden;
1296 } 1700 }
1297 :deep(.uni-data-picker .selected-text) { 1701 :deep(.uni-data-picker .selected-text) {
1298 font-size: 28rpx; 1702 font-size: 28rpx;
...@@ -1301,15 +1705,29 @@ ...@@ -1301,15 +1705,29 @@
1301 white-space: nowrap; 1705 white-space: nowrap;
1302 overflow: hidden; 1706 overflow: hidden;
1303 text-overflow: ellipsis; 1707 text-overflow: ellipsis;
1708 max-width: 100%;
1709 flex: 1;
1304 } 1710 }
1305 :deep(.uni-data-picker .uni-data-picker__input) { 1711 :deep(.uni-data-picker .uni-data-picker__input) {
1306 text-align: left !important; 1712 text-align: left !important;
1307 white-space: nowrap; 1713 white-space: nowrap;
1308 overflow: hidden; 1714 overflow: hidden;
1309 text-overflow: ellipsis; 1715 text-overflow: ellipsis;
1716 width: 100%;
1310 } 1717 }
1311 :deep(.selected-list) { 1718 :deep(.selected-list) {
1312 justify-content: start; 1719 justify-content: start;
1720 overflow: hidden;
1721 max-width: 100%;
1722 }
1723 :deep(.selected-item) {
1724 max-width: 200rpx;
1725 overflow: hidden;
1726 }
1727 :deep(.uni-data-picker__view) {
1728 overflow: hidden;
1729 text-overflow: ellipsis;
1730 white-space: nowrap;
1313 } 1731 }
1314 1732
1315 /* 修复高度统一 */ 1733 /* 修复高度统一 */
...@@ -1353,4 +1771,130 @@ ...@@ -1353,4 +1771,130 @@
1353 box-sizing: border-box; 1771 box-sizing: border-box;
1354 overflow: hidden; 1772 overflow: hidden;
1355 } 1773 }
1774
1775 /* 须知勾选样式 */
1776 .notice-box {
1777 padding: 20rpx 0;
1778 }
1779
1780 .notice-label {
1781 display: flex;
1782 align-items: center;
1783 flex-wrap: wrap;
1784 font-size: 24rpx;
1785 }
1786
1787 .notice-text {
1788 margin-left: 10rpx;
1789 color: #666;
1790 }
1791
1792 .notice-link {
1793 color: #007AFF;
1794 // margin-left: 3rpx;
1795 }
1796
1797 /* 审核详情样式 */
1798 .audit-detail {
1799 padding: 20rpx 0;
1800 }
1801
1802 .audit-title {
1803 font-size: 32rpx;
1804 font-weight: 600;
1805 color: #333;
1806 margin-bottom: 30rpx;
1807 text-align: center;
1808 }
1809
1810 .loading-box,
1811 .empty-box {
1812 text-align: center;
1813 padding: 60rpx 0;
1814 color: #999;
1815 font-size: 28rpx;
1816 }
1817
1818 .audit-list {
1819 padding: 0;
1820 }
1821
1822 .audit-item {
1823 background: linear-gradient(135deg, #ffffff 0%, #fafafa 100%);
1824 border-radius: 16rpx;
1825 padding: 30rpx;
1826 margin-bottom: 24rpx;
1827 box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
1828 border: 1rpx solid #f0f0f0;
1829 }
1830
1831 .audit-item-header {
1832 display: flex;
1833 justify-content: space-between;
1834 align-items: center;
1835 margin-bottom: 20rpx;
1836 padding-bottom: 20rpx;
1837 border-bottom: 1rpx dashed #e8e8e8;
1838 }
1839
1840 .audit-dept {
1841 font-size: 30rpx;
1842 color: #333;
1843 font-weight: 600;
1844 }
1845
1846 .audit-status {
1847 font-size: 24rpx;
1848 padding: 6rpx 20rpx;
1849 border-radius: 24rpx;
1850 font-weight: 500;
1851 }
1852
1853 .status-pass {
1854 background: linear-gradient(135deg, #e8f8f0 0%, #d4f5e9 100%);
1855 color: #07c07e;
1856 }
1857
1858 .status-reject {
1859 background: linear-gradient(135deg, #fef0f0 0%, #fde8e8 100%);
1860 color: #e64329;
1861 }
1862
1863 .status-pending {
1864 background: linear-gradient(135deg, #fff7e6 0%, #fff3d9 100%);
1865 color: #ff9800;
1866 }
1867
1868 .audit-item-body {
1869 padding: 0;
1870 }
1871
1872 .audit-row {
1873 display: flex;
1874 font-size: 28rpx;
1875 line-height: 1.8;
1876 margin-bottom: 12rpx;
1877 justify-content: space-between;
1878 align-items: flex-start;
1879 }
1880
1881 .audit-row:last-child {
1882 margin-bottom: 0;
1883 }
1884
1885 .audit-label {
1886 color: #888;
1887 min-width: 140rpx;
1888 font-size: 28rpx;
1889 }
1890
1891 .audit-value {
1892 color: #555;
1893 flex: 1;
1894 text-align: right;
1895 font-size: 28rpx;
1896 }
1897 radio-group label, checkbox-group label{
1898 padding-right:0rpx;
1899 }
1356 </style> 1900 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template>
2 <view class="member-audit-record">
3 <!-- Tab切换 -->
4 <view class="tab-bar">
5 <view
6 v-for="tab in tabs"
7 :key="tab.value"
8 class="tab-item"
9 :class="{ active: currentTab === tab.value }"
10 @click="onTabChange(tab.value)"
11 >
12 {{ tab.label }}
13 </view>
14 </view>
15
16 <!-- 列表 -->
17 <view class="list-content">
18 <view v-if="list.length === 0 && !loading" class="empty-tip">
19 <text>暂无数据</text>
20 </view>
21
22 <view
23 v-for="(item, index) in list"
24 :key="index"
25 class="list-item"
26 :class="{ 'success-row': item.approveStatus == 2 }"
27 >
28 <view class="item-header">
29 <text class="item-name">{{ item.name }}</text>
30 <text class="item-status" :class="getStatusClass(item.approveStatus)">
31 {{ getStatusText(item.approveStatus) }}
32 </text>
33 </view>
34
35 <view class="item-row">
36 <text class="item-label">证件类型</text>
37 <text class="item-value">{{ getIdcTypeText(item.idcType) }}</text>
38 </view>
39
40 <view class="item-row">
41 <text class="item-label">证件号</text>
42 <text class="item-value">{{ item.idcCode || '-' }}</text>
43 </view>
44
45 <view class="item-row">
46 <text class="item-label">提交单位</text>
47 <text class="item-value">{{ item.memName || '-' }}</text>
48 </view>
49
50 <view class="item-row">
51 <text class="item-label">提交时间</text>
52 <text class="item-value">{{ formatDate(item.commitTime) }}</text>
53 </view>
54
55 <view class="item-row">
56 <text class="item-label">审核时间</text>
57 <text class="item-value">{{ formatDate(item.approveTime) }}</text>
58 </view>
59
60 <view v-if="item.msg" class="item-row">
61 <text class="item-label">备注</text>
62 <text class="item-value">{{ item.msg }}</text>
63 </view>
64
65 <view v-if="item.fileUrl" class="item-row">
66 <text class="item-label">附件</text>
67 <image
68 class="item-image"
69 :src="fillImgUrl(item.fileUrl)"
70 mode="aspectFill"
71 @click="previewImage(item.fileUrl)"
72 ></image>
73 </view>
74 </view>
75
76 <view v-if="loading" class="loading-tip">
77 <text>加载中...</text>
78 </view>
79
80 <view v-if="noMore && list.length > 0" class="no-more-tip">
81 <text>没有更多了</text>
82 </view>
83 </view>
84 </view>
85 </template>
86
87 <script setup>
88 import { ref } from 'vue'
89 import { onLoad, onReachBottom } from '@dcloudio/uni-app'
90 import { memberAuditList } from '@/common/api'
91 import config from '@/config'
92
93 const tabs = [
94 { label: '全部', value: '' },
95 { label: '审核中', value: '1' },
96 { label: '审核通过', value: '2' },
97 { label: '审核拒绝', value: '3' }
98 ]
99
100 const currentTab = ref('')
101 const list = ref([])
102 const loading = ref(false)
103 const noMore = ref(false)
104 const pageNum = ref(1)
105 const pageSize = ref(10)
106
107 function onTabChange(value) {
108 currentTab.value = value
109 list.value = []
110 pageNum.value = 1
111 noMore.value = false
112 loadData()
113 }
114
115 function loadData() {
116 if (loading.value) return
117 loading.value = true
118
119 memberAuditList({
120 pageNum: pageNum.value,
121 pageSize: pageSize.value,
122 approveStatus: currentTab.value
123 }).then(res => {
124 if (res.rows) {
125 if (pageNum.value === 1) {
126 list.value = res.rows
127 } else {
128 list.value = [...list.value, ...res.rows]
129 }
130
131 if (res.rows.length < pageSize.value) {
132 noMore.value = true
133 }
134 } else {
135 if (pageNum.value === 1) {
136 list.value = []
137 }
138 noMore.value = true
139 }
140 }).finally(() => {
141 loading.value = false
142 })
143 }
144
145 // 上划加载
146 onReachBottom(() => {
147 if (!noMore.value) {
148 pageNum.value++
149 loadData()
150 }
151 })
152
153 onLoad(() => {
154 loadData()
155 })
156
157 function getStatusText(status) {
158 const map = { 1: '审核中', 2: '审核通过', 3: '审核拒绝' }
159 return map[status] || '-'
160 }
161
162 function getStatusClass(status) {
163 return {
164 'status-1': status == 1,
165 'status-2': status == 2,
166 'status-3': status == 3
167 }
168 }
169
170 function getIdcTypeText(type) {
171 const map = {
172 1: '身份证',
173 2: '护照',
174 3: '军官证',
175 4: '港澳通行证',
176 5: '台湾通行证'
177 }
178 return map[type] || '-'
179 }
180
181 function formatDate(dateStr) {
182 if (!dateStr) return '-'
183 const date = new Date(dateStr)
184 const year = date.getFullYear()
185 const month = String(date.getMonth() + 1).padStart(2, '0')
186 const day = String(date.getDate()).padStart(2, '0')
187 return `${year}-${month}-${day}`
188 }
189
190 function fillImgUrl(url) {
191 if (!url) return ''
192 if (url.startsWith('http')) return url
193 return config.baseUrl + url
194 }
195
196 function previewImage(url) {
197 uni.previewImage({
198 urls: [fillImgUrl(url)],
199 current: fillImgUrl(url)
200 })
201 }
202 </script>
203
204 <style lang="scss" scoped>
205 .member-audit-record {
206 min-height: 100vh;
207 background: #f5f5f5;
208 }
209
210 .tab-bar {
211 display: flex;
212 background: #fff;
213 padding: 0 20rpx;
214 border-bottom: 1rpx solid #eee;
215 }
216
217 .tab-item {
218 flex: 1;
219 height: 88rpx;
220 line-height: 88rpx;
221 text-align: center;
222 font-size: 28rpx;
223 color: #666;
224 position: relative;
225 }
226
227 .tab-item.active {
228 color: #e64329;
229 font-weight: 600;
230 }
231
232 .tab-item.active::after {
233 content: '';
234 position: absolute;
235 bottom: 0;
236 left: 50%;
237 transform: translateX(-50%);
238 width: 48rpx;
239 height: 4rpx;
240 background: #e64329;
241 border-radius: 2rpx;
242 }
243
244 .list-content {
245 padding: 20rpx;
246 }
247
248 .empty-tip,
249 .loading-tip,
250 .no-more-tip {
251 text-align: center;
252 padding: 60rpx 0;
253 color: #999;
254 font-size: 26rpx;
255 }
256
257 .list-item {
258 background: #fff;
259 border-radius: 16rpx;
260 padding: 24rpx;
261 margin-bottom: 20rpx;
262 }
263
264 .list-item.success-row {
265 border-left: 6rpx solid #19be6b;
266 }
267
268 .item-header {
269 display: flex;
270 justify-content: space-between;
271 align-items: center;
272 margin-bottom: 20rpx;
273 padding-bottom: 20rpx;
274 border-bottom: 1rpx solid #f0f0f0;
275 }
276
277 .item-name {
278 font-size: 32rpx;
279 font-weight: 600;
280 color: #333;
281 }
282
283 .item-status {
284 font-size: 26rpx;
285 padding: 4rpx 16rpx;
286 border-radius: 20rpx;
287 }
288
289 .status-1 {
290 background: #fff7e6;
291 color: #fa8c16;
292 }
293
294 .status-2 {
295 background: #e6fff7;
296 color: #52c41a;
297 }
298
299 .status-3 {
300 background: #fff1f0;
301 color: #ff4d4f;
302 }
303
304 .item-row {
305 display: flex;
306 margin-bottom: 16rpx;
307 }
308
309 .item-label {
310 width: 140rpx;
311 font-size: 26rpx;
312 color: #999;
313 }
314
315 .item-value {
316 flex: 1;
317 font-size: 26rpx;
318 color: #333;
319 word-break: break-all;
320 }
321
322 .item-image {
323 width: 120rpx;
324 height: 120rpx;
325 border-radius: 8rpx;
326 margin-top: 8rpx;
327 }
328 </style>
...@@ -186,7 +186,7 @@ const getStatusText = (status) => { ...@@ -186,7 +186,7 @@ const getStatusText = (status) => {
186 1: '缴费成功', 186 1: '缴费成功',
187 2: '订单取消' 187 2: '订单取消'
188 }; 188 };
189 return map[status] || '未知状态'; 189 return map[status] || '';
190 }; 190 };
191 191
192 // 数据请求核心方法 192 // 数据请求核心方法
......
...@@ -291,7 +291,7 @@ function getStatusText(status) { ...@@ -291,7 +291,7 @@ function getStatusText(status) {
291 3: '审核拒绝', 291 3: '审核拒绝',
292 9: '缴费中' 292 9: '缴费中'
293 } 293 }
294 return statusMap[status] || '未知状态' 294 return statusMap[status] || ''
295 } 295 }
296 296
297 function getStatusClass(status) { 297 function getStatusClass(status) {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!