20912bef by 华明祺

feat(personal): 实现个人中心页面及绑定/解绑学员功能

- 新增个人中心页面,包含会员卡展示、用户信息、功能入口
- 实现绑定学员弹框,支持输入姓名和证件号进行绑定
- 添加绑定状态判断,已绑定时按钮切换为解绑
- 实现解绑功能,调用unbindUser接口
- 新增退出登录按钮
- 添加bindUser和unbindUser API接口
1 parent dc453c5f
1 <script> 1 <script>
2 import config from '@/config.js';
2 import { 3 import {
3 getInfo 4 getInfo,
5 getWebInfo
4 } from '@/common/login.js'; 6 } from '@/common/login.js';
5 import * as api from '@/common/api.js';
6 import config from '@/config.js';
7 7
8 let loginUrl = ['login/login', 'login/register', 'personal/addVip_per']
9 let firstload = false
10 export default { 8 export default {
11 globalData: { 9 globalData: {
12 isLogin: false, 10 isLogin: false,
13 baseUrl_api: '', 11 baseUrl_api: '',
14 user: null, 12 user: null
15 userType: '',
16 userInfo: null,
17 deptType: '',
18 genFlag: '',
19 authenticationStatus: '',
20 memberInfo: null,
21 isExam: false
22 }, 13 },
23 onLaunch: function(options) { 14 onLaunch: function(options) {
24 console.log('App Launch', options); 15 console.log('App Launch', options);
25
26 this.globalData.baseUrl_api = config.baseUrl_api; 16 this.globalData.baseUrl_api = config.baseUrl_api;
27 if (loginUrl.indexOf(options.path) == -1) { 17
28 let userName = uni.getStorageSync('userName') 18 let userName = uni.getStorageSync('userName')
29 if (userName) { 19 if (userName) {
30 getInfo().then(() => { 20 getInfo().then(() => {
31 this.globalData.isLogin = true; 21 this.globalData.isLogin = true
32 firstload = true 22 uni.reLaunch({
33 let firstLoadCallback = getApp().firstLoadCallback; 23 url: '/pages/index/home'
34 if (firstLoadCallback) { 24 })
35 firstLoadCallback(); 25 }).catch(() => {
36 } 26 uni.reLaunch({
37 }).catch(() => { 27 url: '/login/login'
38 firstload = true
39 uni.redirectTo({
40 url: '/login/login'
41 })
42 }) 28 })
43 } else { 29 })
44 this.globalData.isLogin = false; 30 return
45 firstload = true 31 }
46 uni.redirectTo({ 32
33 let webUserName = uni.getStorageSync('webUserName')
34 if (webUserName) {
35 getWebInfo().then(() => {
36 uni.reLaunch({
37 url: '/personal/home'
38 })
39 }).catch(() => {
40 uni.reLaunch({
47 url: '/login/login' 41 url: '/login/login'
48 }) 42 })
49 } 43 })
44 return
50 } 45 }
46
47 this.globalData.isLogin = false
48 uni.reLaunch({
49 url: '/login/login'
50 })
51 }, 51 },
52 onShow: function() { 52 onShow: function() {
53 console.log('App Show', firstload, this.globalData.isLogin); 53 console.log('App Show');
54 // if (firstload && !this.globalData.isLogin) {
55 // uni.redirectTo({
56 // url: '/login/login'
57 // })
58 // }
59 }, 54 },
60 onHide: function() { 55 onHide: function() {
61 console.log('App Hide'); 56 console.log('App Hide');
......
1 import request from './request.js' 1 import request from './request.js'
2 import config from '@/config.js' 2 import config from '@/config.js'
3 import * as loginServer from '@/common/login.js';
4 3
5 // 激活 4 // 激活
6 export function active(data) { 5 export function active(data) {
...@@ -1415,10 +1414,34 @@ export function createMemberPayRange(data) { ...@@ -1415,10 +1414,34 @@ export function createMemberPayRange(data) {
1415 }) 1414 })
1416 } 1415 }
1417 1416
1417 // 获取最近认证记录
1418 export function getMyRecent() {
1419 return request({
1420 url: '/system/certifiedNew/getMyRecent',
1421 method: 'get'
1422 })
1423 }
1424
1418 // 获取订单详情 1425 // 获取订单详情
1419 export function getOrderInfo(orderId) { 1426 export function getOrderInfo(orderId) {
1420 return request({ 1427 return request({
1421 url: `/common/order/${orderId}`, 1428 url: `/common/order/${orderId}`,
1422 method: 'get' 1429 method: 'get'
1423 }) 1430 })
1431 }
1432
1433 // 绑定学员
1434 export function bindUser(data) {
1435 return request({
1436 url: `/person/info/bindUser`,
1437 method: 'post',
1438 params: data
1439 })
1440 }
1441
1442 export function unbindUser() {
1443 return request({
1444 url: `/person/info/unbindUser`,
1445 method: 'post'
1446 })
1424 } 1447 }
...\ No newline at end of file ...\ No newline at end of file
......
1 import {
2 useUserStore
3 } from '../store/modules/user'
1 import request from './request' 4 import request from './request'
2 import * as api from '@/common/api.js'
3 5
4 function pcLogin(data) { 6 function pcLogin(data) {
5 return request({ 7 return request({
6 url: '/login', 8 url: '/login',
7 method: 'post', 9 method: 'post',
8 params: data 10 params: data
9 }).then((res) => { 11 }).then((res) => {
10 uni.setStorageSync('token', 'Bearer ' + res.data.token) 12 uni.setStorageSync('token', 'Bearer ' + res.data.token)
11 }).then(getInfo) 13 }).then(getInfo)
12 } 14 }
13 15
14 function h5Login(userName) { 16 function h5Login(userName) {
15 return request({ 17 return request({
16 url: `/h5Login`, 18 url: `/h5Login`,
17 method: 'post', 19 method: 'post',
18 params: { 20 params: {
19 username: userName 21 username: userName
20 } 22 }
21 }).then((res) => { 23 }).then((res) => {
22 uni.setStorageSync('token', 'Bearer ' + res.data.token) 24 uni.setStorageSync('token', 'Bearer ' + res.data.token)
23 }).then(getInfo) 25 }).then(getInfo)
24 } 26 }
25 27
26 function h5LoginAuto() { 28 function h5LoginAuto() {
27 const userName = uni.getStorageSync('userName') 29 const userName = uni.getStorageSync('userName')
28 if (userName) { 30 if (userName) {
29 return h5Login(userName) 31 return h5Login(userName)
30 } else { 32 } else {
31 uni.redirectTo({ 33 uni.redirectTo({
32 url: '/login/login' 34 url: '/login/login'
33 }) 35 })
34 } 36 }
35 } 37 }
36 38
37 function logout() { 39 function logout() {
38 return request({ 40 return request({
39 url: '/logout', 41 url: '/logout',
40 method: 'post' 42 method: 'post'
41 }).then(() => { 43 }).then(() => {
42 uni.removeStorageSync('token') 44 const userStore = useUserStore()
43 uni.removeStorageSync('userName') 45 const app = getApp()
44 }) 46
47 uni.removeStorageSync('token')
48 uni.removeStorageSync('userName')
49 uni.removeStorageSync('webUserName')
50
51 userStore.setUser(null)
52 app.globalData.isLogin = false
53 })
45 } 54 }
46 55
47 function getCodeImg() { 56 function getCodeImg() {
48 return request({ 57 return request({
49 url: '/captchaImage', 58 url: '/captchaImage',
50 method: 'get' 59 method: 'get'
51 }) 60 })
52 } 61 }
53 62
54 // 代退图形认证的获取手机验证码 63 // 代退图形认证的获取手机验证码
55 function getSmsCode(data) { 64 function getSmsCode(data) {
56 return request({ 65 return request({
57 // url: '/captchaSmsWithCaptchaImage', 66 // url: '/captchaSmsWithCaptchaImage',
58 url: '/captchaSmsWithCaptchaImageForMiniApp', 67 url: '/captchaSmsWithCaptchaImageForMiniApp',
59 method: 'post', 68 method: 'post',
60 params: data 69 params: data
61 }) 70 })
62 } 71 }
63 72
64 function loginByPhone(phonenumber, code) { 73 function loginByPhone(phonenumber, code) {
65 const data = { 74 const data = {
66 phonenumber, 75 phonenumber,
67 code 76 code
68 } 77 }
69 return request({ 78 return request({
70 url: '/userLoginByPhone', 79 url: '/userLoginByPhone',
71 method: 'post', 80 method: 'post',
72 params: data 81 params: data
73 }).then((res) => { 82 }).then((res) => {
74 uni.showToast({ 83 uni.showToast({
75 title: res.msg, 84 title: res.msg,
76 icon: 'none' 85 icon: 'none'
77 }) 86 })
78 uni.setStorageSync('token', 'Bearer ' + res.data.token) 87 uni.setStorageSync('token', 'Bearer ' + res.data.token)
79 }).then(getInfo) 88 }).then(getInfo)
80 } 89 }
81 90
82 // 获取用户详细信息 91 // 获取用户详细信息
83 function getInfo() { 92 function getInfo() {
84 return request({ 93 return request({
85 url: '/getInfo', 94 url: '/getInfo',
86 method: 'get' 95 method: 'get'
87 }).then(res => { 96 }).then(res => {
88 const app = getApp() 97 const userStore = useUserStore()
89 const user = res.data.user 98 const app = getApp()
90 // const personInfo = res.data.personInfo 99 const user = res.data.user
91 uni.setStorageSync('userName', user.userName) 100
92 // uni.setStorageSync('perId', personInfo.perId||-1) 101 uni.setStorageSync('userName', user.userName)
93 app.globalData.user = res.data.user 102 uni.removeStorageSync('webUserName')
94 app.globalData.deptType = user.dept.deptType 103 userStore.setUser(user)
95 app.globalData.genFlag = user.dept.genFlag 104
96 // user.dept.deptType = '3' 105 app.globalData.deptType = user.dept.deptType
97 switch (user.dept.deptType) { 106 app.globalData.genFlag = user.dept.genFlag
98 case '1': // 中跆协 107 app.globalData.changePassFlag = user.changePassFlag
99 app.globalData.userType = '1' 108 switch (user.dept.deptType) {
100 break 109 case '1': // 中跆协
101 case '2': // 省 110 app.globalData.userType = '1'
102 case '3': 111 break
103 app.globalData.userType = '2' 112 case '2': // 省
104 break 113 case '3':
105 case '6': // 道馆 114 app.globalData.userType = '2'
106 app.globalData.userType = '4' 115 break
107 break 116 case '6': // 道馆
108 default: // 市、区 117 app.globalData.userType = '4'
109 app.globalData.userType = '3' 118 break
110 break 119 default: // 市、区
111 } 120 app.globalData.userType = '3'
112 121 break
113 app.globalData.userInfo = user 122 }
114 }) 123 })
124 }
125
126 function getWebInfo() {
127 return request({
128 url: '/person/info/getInfo',
129 method: 'get'
130 }).then(res => {
131 const userStore = useUserStore()
132 const user = res.data.user
133
134 delete res.data.user
135 const perInfo = res.data
136
137 uni.setStorageSync('webUserName', user.userName)
138 uni.removeStorageSync('userName')
139 userStore.setUser(user)
140 userStore.setPerInfo(perInfo)
141 })
115 } 142 }
116 143
117 // 团队会员用户注册接口 144 // 团队会员用户注册接口
118 function groupMemberRegister(data) { 145 function groupMemberRegister(data) {
119 return request({ 146 return request({
120 url: '/groupMemberRegister', 147 url: '/groupMemberRegister',
121 method: 'post', 148 method: 'post',
122 params: data 149 params: data
123 }) 150 })
124 } 151 }
125 // 获取道馆信息 152 // 获取道馆信息
126 function getMyOwnMemberInfo() { 153 function getMyOwnMemberInfo() {
127 return request({ 154 return request({
128 url: '/member/info/getMyOwnMemberInfo', 155 url: '/member/info/getMyOwnMemberInfo',
129 method: 'get' 156 method: 'get'
130 }).then(res => { 157 }).then(res => {
131 const app = getApp() 158 const app = getApp()
132 app.globalData.authenticationStatus = res.data.authenticationStatus 159 app.globalData.authenticationStatus = res.data.authenticationStatus
133 app.globalData.memberInfo = res.data.memberInfo 160 app.globalData.memberInfo = res.data.memberInfo
134 app.globalData.isExam = res.data?.memberInfo?.isPoints 161 app.globalData.isExam = res.data?.memberInfo?.isPoints
135 }) 162 })
163 }
164
165
166 function wxLogin() {
167 return new Promise((resolve, reject) => {
168 uni.login({
169 provider: 'weixin',
170 success: (res) => {
171 resolve(res)
172 },
173 fail: (res) => {
174 uni.showToast({
175 title: '获取用户信息失败',
176 icon: 'none',
177 duration: 2000
178 })
179 reject(res)
180 }
181 })
182 }).then(res => {
183 return pcLoginByCode(res.code)
184 })
136 } 185 }
186
187 function pcLoginByCode(code) {
188 return request({
189 url: `/loginByJsCode?jsCode=${code}`,
190 method: "POST"
191 }).then((res) => {
192 uni.setStorageSync('token', 'Bearer ' + res.data);
193 }).then(getWebInfo)
194 }
195
137 export { 196 export {
138 pcLogin, 197 pcLogin,
139 getCodeImg, 198 getCodeImg,
140 getSmsCode, 199 getSmsCode,
141 h5Login, 200 h5Login,
142 h5LoginAuto, 201 h5LoginAuto,
143 loginByPhone, 202 loginByPhone,
144 groupMemberRegister, 203 groupMemberRegister,
145 getMyOwnMemberInfo, 204 getMyOwnMemberInfo,
146 logout, 205 logout,
147 getInfo 206 getInfo,
148 } 207 getWebInfo,
208 wxLogin
209 }
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="wBox"> 3 <view class="wBox">
4 <view class="tt">基本信息</view> 4 <view class="tt">基本信息</view>
5 <view class="ddd"> 5 <view class="ddd">
6 <text class="lab">结算编号:</text>{{ form.flowCode }} 6 <text class="lab">结算编号:</text>{{ form.flowCode }}
7 </view> 7 </view>
8 <view class="ddd"> 8 <view class="ddd">
9 <text class="lab">{{ type=='1'?'考级名称':'考段名称' }}</text>{{form.mergeName}} 9 <text class="lab">{{ type=='1'?'考级名称':'考段名称' }}</text>{{form.mergeName}}
10 </view> 10 </view>
11 <view class="ddd"> 11 <view class="ddd">
12 <text class="lab">申请单位:</text>{{ form.memName }} 12 <text class="lab">申请单位:</text>{{ form.memName }}
13 </view> 13 </view>
14 <view class="ddd" v-if="form.mergeTime"> 14 <view class="ddd" v-if="form.mergeTime">
15 <text class="lab">申请日期:</text>{{form.mergeTime?.slice(0,10)}} 15 <text class="lab">申请日期:</text>{{form.mergeTime?.slice(0,10)}}
16 </view> 16 </view>
17 <view class="ddd"> 17 <view class="ddd">
18 <text class="lab">{{ type=='1'?'考级人数':'考段人数' }}</text>{{form.totalNum}} 18 <text class="lab">{{ type=='1'?'考级人数':'考段人数' }}</text>{{form.totalNum}}
19 </view> 19 </view>
20 <view class="ddd"> 20 <view class="ddd">
21 <text class="lab">总金额:</text>¥{{ (form.totalAmount*1).toFixed(2) }} 21 <text class="lab">总金额:</text>¥{{ (form.totalAmount*1).toFixed(2) }}
22 </view> 22 </view>
23 </view> 23 </view>
24 <view class="wBox"> 24 <view class="wBox">
25 <view class="tt"> 25 <view class="tt">
26 考试信息 26 考试信息
27 </view> 27 </view>
28 <view class="userlist"> 28 <view class="userlist">
29 <view class="item" v-for="(n,index) in infoList" :key="index" @click="goDetail(n)" style="background-color: #fffafa;"> 29 <view class="item" v-for="(n,index) in infoList" :key="index" @click="goDetail(n)"
30 <view class="w100"> 30 style="background-color: #fffafa;">
31 <view class="text-primary">{{n.examCode}}</view> 31 <view class="w100">
32 <view class="name">{{n.name}}</view> 32 <view class="text-primary">{{n.examCode}}</view>
33 <!-- <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view> --> 33 <view class="name">{{n.name}}</view>
34 <view class="flexbox"> 34 <!-- <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view> -->
35 <view> 35 <view class="flexbox">
36 上报单位 36 <view>
37 <text>{{n.memberName}}</text> 37 上报单位
38 </view> 38 <text>{{n.memberName}}</text>
39 <view> 39 </view>
40 {{type=='1'?'考级考生数':'考段考生数'}} 40 <view>
41 <text> 41 {{type=='1'?'考级考生数':'考段考生数'}}
42 {{n.totalNum}} 42 <text>
43 </text> 43 {{n.totalNum}}
44 </view> 44 </text>
45 45 </view>
46 <view> 46
47 金额 47 <view>
48 <text class="text-danger">¥{{ (n.totalAmount*1).toFixed(2) }}</text> 48 金额
49 </view> 49 <text class="text-danger">¥{{ (n.totalAmount*1).toFixed(2) }}</text>
50 </view> 50 </view>
51 </view> 51 </view>
52 52 </view>
53 </view> 53
54 </view> 54 </view>
55 55 </view>
56 </view> 56
57 </view> 57 </view>
58 </template> 58 </view>
59 59 </template>
60 <script setup> 60
61 import * as api from '@/common/api.js' 61 <script setup>
62 import config from '@/config.js' 62 import * as api from '@/common/api.js'
63 import _ from 'underscore' 63 import config from '@/config.js'
64 import { 64 import _ from 'underscore'
65 onMounted, 65 import {
66 ref 66 onMounted,
67 } from 'vue' 67 ref
68 import { 68 } from 'vue'
69 onLoad 69 import {
70 } from '@dcloudio/uni-app' 70 onLoad
71 const app = getApp(); 71 } from '@dcloudio/uni-app'
72 const queryParams = ref({ 72 const app = getApp();
73 recordId: '' 73 const queryParams = ref({
74 }) 74 recordId: ''
75 75 })
76 const form = ref({}) 76
77 const list = ref([]) 77 const form = ref({})
78 const infoList = ref([]) 78 const list = ref([])
79 const deptType = ref() 79 const infoList = ref([])
80 const type = ref(null) 80 const deptType = ref()
81 let rangeId = '' 81 const type = ref(null)
82 onLoad((option) => { 82 let rangeId = ''
83 if ('form' in option) { 83 onLoad((option) => {
84 form.value = JSON.parse(decodeURIComponent(option.form)) 84 if ('form' in option) {
85 console.log(111,form.value) 85 form.value = JSON.parse(decodeURIComponent(option.form))
86 } 86 }
87 type.value = option.type 87 type.value = option.type
88 // console.log(222,form.value) 88 // console.log(222,form.value)
89 if (app.globalData.isLogin) { 89 if (app.globalData.isLogin) {
90 init() 90 init()
91 } else { 91 } else {
92 app.firstLoadCallback = () => { 92 app.firstLoadCallback = () => {
93 init() 93 init()
94 }; 94 };
95 } 95 }
96 96
97 }) 97 })
98 98
99 function init() { 99 function init() {
100 deptType.value = app.globalData.deptType 100 deptType.value = app.globalData.deptType
101 getForm() 101 getForm()
102 } 102 }
103 103
104 function getForm() { 104 function getForm() {
105 uni.showLoading({ 105 uni.showLoading({
106 title: '加载中' 106 title: '加载中'
107 }) 107 })
108 api.getMergePaymentInfo(form.value.recordId).then(res => { 108 api.getMergePaymentInfo(form.value.recordId).then(res => {
109 _.each(res.rows, (r) => { 109 _.each(res.rows, (r) => {
110 const item = JSON.parse(r.content) 110 const item = JSON.parse(r.content)
111 item.recordId = r.recordId 111 item.recordId = r.recordId
112 infoList.value.push(item) 112 infoList.value.push(item)
113 }) 113 })
114 console.log(infoList.value) 114 console.log(infoList.value)
115 form.value.totalNum = Math.floor(_.sumBy(infoList.value, (o) => parseFloat(o.totalNum || 0))) 115 form.value.totalNum = Math.floor(_.sumBy(infoList.value, (o) => parseFloat(o.totalNum || 0)))
116 form.value.totalAmount = Math.floor(_.sumBy(infoList.value, (o) => parseFloat(o.totalAmount || 0))) 116 form.value.totalAmount = Math.floor(_.sumBy(infoList.value, (o) => parseFloat(o.totalAmount || 0)))
117 117
118 uni.hideLoading() 118 uni.hideLoading()
119 119
120 }) 120 })
121 } 121 }
122 122
123 function goDetail(item){ 123 function goDetail(item) {
124 const form = encodeURIComponent(JSON.stringify(item)) 124 const form = encodeURIComponent(JSON.stringify(item))
125 let path = `/level/applyDetail?examId=${item.examId}&form=${form}` 125 let path = `/level/applyDetail?examId=${item.examId}&form=${form}`
126 uni.navigateTo({ 126 uni.navigateTo({
127 url: path 127 url: path
128 }); 128 });
129 } 129 }
130 </script> 130 </script>
131 131
132 <style scoped lang="scss"> 132 <style scoped lang="scss">
133 .wBox { 133 .wBox {
134 width: 700rpx; 134 width: 700rpx;
135 padding: 30rpx; 135 padding: 30rpx;
136 margin: 20rpx auto; 136 margin: 20rpx auto;
137 background: #FFFFFF; 137 background: #FFFFFF;
138 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); 138 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
139 border-radius: 15rpx; 139 border-radius: 15rpx;
140 140
141 .tt { 141 .tt {
142 color: #0A1629;margin: 0 0 30rpx; 142 color: #0A1629;
143 font-size: 30rpx; 143 margin: 0 0 30rpx;
144 } 144 font-size: 30rpx;
145 145 }
146 .ddd{font-size: 28rpx;color: #333; margin: 0 0 10rpx; 146
147 .lab{color: #999;display: inline-block;text-align: justify; 147 .ddd {
148 text{word-break: break-all;} 148 font-size: 28rpx;
149 } 149 color: #333;
150 } 150 margin: 0 0 10rpx;
151 } 151
152 152 .lab {
153 color: #999;
154 display: inline-block;
155 text-align: justify;
156
157 text {
158 word-break: break-all;
159 }
160 }
161 }
162 }
153 </style> 163 </style>
...\ No newline at end of file ...\ No newline at end of file
......
This diff could not be displayed because it is too large.
1 import App from './App' 1 import App from './App'
2 // #ifndef VUE3 2 import store from './store'
3 import Vue from 'vue' 3
4 Vue.config.productionTip = false 4 // #ifndef VUE3
5 App.mpType = 'app' 5 import Vue from 'vue'
6 const app = new Vue({ 6 Vue.config.productionTip = false
7 ...App 7 App.mpType = 'app'
8 }) 8 const app = new Vue({
9 app.$mount() 9 ...App
10 // #endif 10 })
11 11 app.use(store)
12 // #ifdef VUE3 12 app.$mount()
13 import { 13 // #endif
14 createSSRApp 14
15 } from 'vue' 15 // #ifdef VUE3
16 export function createApp() { 16 import {
17 const app = createSSRApp(App) 17 createSSRApp
18 return { 18 } from 'vue'
19 app 19 export function createApp() {
20 } 20 const app = createSSRApp(App)
21 } 21 app.use(store)
22 // #endif 22 return {
23 app
24 }
25 }
26 // #endif
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -129,10 +129,10 @@ ...@@ -129,10 +129,10 @@
129 if (orderErr) { 129 if (orderErr) {
130 uni.hideLoading() 130 uni.hideLoading()
131 isPaying.value = false 131 isPaying.value = false
132 uni.showToast({ 132 // uni.showToast({
133 title: '创建订单失败', 133 // title: '创建订单失败',
134 icon: 'none' 134 // icon: 'none'
135 }) 135 // })
136 return 136 return
137 } 137 }
138 138
...@@ -141,7 +141,7 @@ ...@@ -141,7 +141,7 @@
141 if (data.payFlag == 0) { 141 if (data.payFlag == 0) {
142 uni.hideLoading() 142 uni.hideLoading()
143 isPaying.value = false 143 isPaying.value = false
144 uni.navigateTo({ 144 uni.redirectTo({
145 url: `/myCenter/sucPay?orderId=${data.orderId}` 145 url: `/myCenter/sucPay?orderId=${data.orderId}`
146 }) 146 })
147 return 147 return
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
153 uni.hideLoading() 153 uni.hideLoading()
154 isPaying.value = false 154 isPaying.value = false
155 155
156 uni.navigateTo({ 156 uni.redirectTo({
157 url: `/myCenter/sucPay?orderId=${data.orderId}` 157 url: `/myCenter/sucPay?orderId=${data.orderId}`
158 }) 158 })
159 } 159 }
......
1 <template> 1 <template>
2 <view class="pay-order-container"> 2 <view class="pay-order-container">
3 <!-- 页面头部 --> 3 <!-- 页面头部 -->
4 <view class="page-header"> 4 <view class="page-header">
5 <text class="title">确认并支付</text> 5 <text class="title">确认并支付</text>
6 </view> 6 </view>
7 7
8 <!-- 订单核心信息 --> 8 <!-- 订单核心信息 -->
9 <view class="order-info"> 9 <view class="order-info">
10 <view class="info-item"> 10 <view class="info-item">
11 <text class="label">人数合计:</text> 11 <text class="label">人数合计:</text>
12 <text class="value red">{{ formData.all ?? 0 }}</text> 12 <text class="value red">{{ formData.all ?? 0 }}</text>
13 </view> 13 </view>
14 <view class="info-item"> 14 <view class="info-item">
15 <text class="label">新会员合计:</text> 15 <text class="label">新会员合计:</text>
16 <text class="value red">{{ formData.new ?? 0 }}</text> 16 <text class="value red">{{ formData.new ?? 0 }}</text>
17 </view> 17 </view>
18 <view class="info-item"> 18 <view class="info-item">
19 <text class="label">续费会员合计:</text> 19 <text class="label">续费会员合计:</text>
20 <text class="value red">{{ formData.old ?? 0 }}</text> 20 <text class="value red">{{ formData.old ?? 0 }}</text>
21 </view> 21 </view>
22 <view class="info-item total-price"> 22 <view class="info-item total-price">
23 <text class="label">支付总费用:</text> 23 <text class="label">支付总费用:</text>
24 <text class="value red">{{ formData.price ?? 0 }}</text> 24 <text class="value red">{{ formData.price ?? 0 }}</text>
25 </view> 25 </view>
26 </view> 26 </view>
27 27
28 <!-- 支付方式选择(修复v-model报错 + 默认勾选) --> 28 <!-- 支付方式选择(修复v-model报错 + 默认勾选) -->
29 <view class="pay-type-section"> 29 <view class="pay-type-section">
30 <text class="section-title">选择支付方式</text> 30 <text class="section-title">选择支付方式</text>
31 <!-- uni-app小程序原生radio-group写法 --> 31 <!-- uni-app小程序原生radio-group写法 -->
32 <radio-group :value="payType" @change="handlePayTypeChange"> 32 <radio-group :value="payType" @change="handlePayTypeChange">
33 <label class="radio-item"> 33 <label class="radio-item">
34 <!-- checked属性实现默认勾选 --> 34 <!-- checked属性实现默认勾选 -->
35 <radio value="0" color="#E60012" :checked="payType === '0'" /> 35 <radio value="0" color="#E60012" :checked="payType === '0'" />
36 <view class="pay-method"> 36 <view class="pay-method">
37 <image class="icon" src="/static/min.png" mode="widthFix"></image> 37 <image class="icon" src="/static/min.png" mode="widthFix"></image>
38 <text class="pay-name">民生付</text> 38 <text class="pay-name">民生付</text>
39 </view> 39 </view>
40 </label> 40 </label>
41 </radio-group> 41 </radio-group>
42 </view> 42 </view>
43 43
44 <!-- 底部支付按钮 --> 44 <!-- 底部支付按钮 -->
45 <view class="fixed-bottom"> 45 <view class="fixed-bottom">
46 <button class="pay-btn red-bg" :loading="payLoading" @click="handlePay">立即支付</button> 46 <button class="pay-btn red-bg" :loading="payLoading" @click="handlePay">立即支付</button>
47 </view> 47 </view>
48 </view> 48 </view>
49 </template> 49 </template>
50 50
51 <script setup> 51 <script setup>
52 import { ref } from 'vue' 52 import {
53 import { onLoad } from '@dcloudio/uni-app'; 53 ref
54 import * as api from '@/common/api.js' 54 } from 'vue'
55 55 import {
56 // 核心数据 56 onLoad
57 const formData = ref({}) // 订单统计数据 57 } from '@dcloudio/uni-app';
58 const rangeId = ref('') // 核心业务ID 58 import * as api from '@/common/api.js'
59 const payType = ref('0') // 支付方式(默认0=民生付) 59
60 const payLoading = ref(false) // 支付按钮加载状态 60 // 核心数据
61 61 const formData = ref({}) // 订单统计数据
62 // 页面加载接收参数 62 const rangeId = ref('') // 核心业务ID
63 onLoad(async (options) => { 63 const payType = ref('0') // 支付方式(默认0=民生付)
64 console.log('订单ID:', options.rangeId) 64 const payLoading = ref(false) // 支付按钮加载状态
65 if (options.rangeId) { 65
66 rangeId.value = options.rangeId 66 // 页面加载接收参数
67 await getCount() 67 onLoad(async (options) => {
68 } 68 console.log('订单ID:', options.rangeId)
69 }) 69 if (options.rangeId) {
70 70 rangeId.value = options.rangeId
71 async function getCount() { 71 await getCount()
72 try { 72 }
73 const res = await api.getNewCountByRangeId(rangeId.value) 73 })
74 formData.value = res.data || { all: 0, new: 0, old: 0 } 74
75 } catch (e) { 75 async function getCount() {
76 formData.value = { all: 0, new: 0, old: 0 } 76 try {
77 } 77 const res = await api.getNewCountByRangeId(rangeId.value)
78 } 78 formData.value = res.data || {
79 79 all: 0,
80 // 支付方式切换 80 new: 0,
81 function handlePayTypeChange(e) { 81 old: 0
82 payType.value = e.detail.value 82 }
83 } 83 } catch (e) {
84 84 formData.value = {
85 // 立即支付核心逻辑 85 all: 0,
86 async function handlePay() { 86 new: 0,
87 // 基础校验 87 old: 0
88 if (!rangeId.value || rangeId.value === '-1') { 88 }
89 return uni.showToast({ title: '订单ID异常', icon: 'none' }) 89 }
90 } 90 }
91 91
92 try { 92 // 支付方式切换
93 payLoading.value = true 93 function handlePayTypeChange(e) {
94 const res = await api.goPay(rangeId.value) 94 payType.value = e.detail.value
95 95 }
96 if (res.data?.orderId) { 96
97 api.pcallBack2(res.data.orderId) 97 // 立即支付核心逻辑
98 uni.navigateTo({ 98 async function handlePay() {
99 url: `/myCenter/sucPay?rangeId=${rangeId.value}from=payOrder` 99 // 基础校验
100 }) 100 if (!rangeId.value || rangeId.value === '-1') {
101 } 101 return uni.showToast({
102 102 title: '订单ID异常',
103 // 跳转到支付成功页 103 icon: 'none'
104 104 })
105 } catch (err) { 105 }
106 const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试' 106
107 uni.showToast({ title: errMsg, icon: 'none' }) 107 try {
108 } finally { 108 payLoading.value = true
109 payLoading.value = false 109 const res = await api.goPay(rangeId.value)
110 } 110
111 } 111 if (res.data?.orderId) {
112 </script> 112 api.pcallBack2(res.data.orderId)
113 113 uni.redirectTo({
114 <style scoped lang="scss"> 114 url: `/myCenter/sucPay?rangeId=${rangeId.value}from=payOrder`
115 .pay-order-container { 115 })
116 padding: 30rpx; 116 }
117 background-color: #fff; 117
118 min-height: 100vh; 118 // 跳转到支付成功页
119 box-sizing: border-box; 119
120 } 120 } catch (err) {
121 .icon{ 121 const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试'
122 width:30px; 122 uni.showToast({
123 } 123 title: errMsg,
124 // 页面头部 124 icon: 'none'
125 .page-header { 125 })
126 text-align: center; 126 } finally {
127 padding: 20rpx 0; 127 payLoading.value = false
128 border-bottom: 1px solid #eee; 128 }
129 margin-bottom: 40rpx; 129 }
130 130 </script>
131 .title { 131
132 font-size: 36rpx; 132 <style scoped lang="scss">
133 font-weight: 600; 133 .pay-order-container {
134 color: #333; 134 padding: 30rpx;
135 } 135 background-color: #fff;
136 } 136 min-height: 100vh;
137 137 box-sizing: border-box;
138 // 订单信息区域 138 }
139 .order-info { 139
140 margin-bottom: 60rpx; 140 .icon {
141 141 width: 30px;
142 .info-item { 142 }
143 display: flex; 143
144 justify-content: space-between; 144 // 页面头部
145 align-items: center; 145 .page-header {
146 padding: 25rpx 0; 146 text-align: center;
147 border-bottom: 1px solid #f5f5f5; 147 padding: 20rpx 0;
148 font-size: 32rpx; 148 border-bottom: 1px solid #eee;
149 149 margin-bottom: 40rpx;
150 .label { 150
151 color: #666; 151 .title {
152 } 152 font-size: 36rpx;
153 153 font-weight: 600;
154 .value { 154 color: #333;
155 font-weight: 600; 155 }
156 font-size: 34rpx; 156 }
157 } 157
158 158 // 订单信息区域
159 .red { 159 .order-info {
160 color: #E60012; 160 margin-bottom: 60rpx;
161 } 161
162 } 162 .info-item {
163 163 display: flex;
164 .total-price { 164 justify-content: space-between;
165 border-bottom: none; 165 align-items: center;
166 margin-top: 10rpx; 166 padding: 25rpx 0;
167 167 border-bottom: 1px solid #f5f5f5;
168 .label { 168 font-size: 32rpx;
169 font-size: 34rpx; 169
170 color: #333; 170 .label {
171 } 171 color: #666;
172 172 }
173 .value { 173
174 font-size: 38rpx; 174 .value {
175 } 175 font-weight: 600;
176 } 176 font-size: 34rpx;
177 } 177 }
178 178
179 // 支付方式区域 179 .red {
180 .pay-type-section { 180 color: #E60012;
181 margin-bottom: 80rpx; 181 }
182 182 }
183 .section-title { 183
184 font-size: 32rpx; 184 .total-price {
185 color: #333; 185 border-bottom: none;
186 margin-bottom: 20rpx; 186 margin-top: 10rpx;
187 display: block; 187
188 } 188 .label {
189 189 font-size: 34rpx;
190 .radio-item { 190 color: #333;
191 display: flex; 191 }
192 align-items: center; 192
193 font-size: 32rpx; 193 .value {
194 padding: 10rpx 0; 194 font-size: 38rpx;
195 195 }
196 .pay-method { 196 }
197 display: flex; 197 }
198 align-items: center; 198
199 margin-left: 10rpx; 199 // 支付方式区域
200 200 .pay-type-section {
201 .pay-name { 201 margin-bottom: 80rpx;
202 font-size: 32rpx; 202
203 margin-left: 20rpx; 203 .section-title {
204 color: #333; 204 font-size: 32rpx;
205 } 205 color: #333;
206 } 206 margin-bottom: 20rpx;
207 } 207 display: block;
208 } 208 }
209 209
210 // 底部支付按钮 210 .radio-item {
211 .fixed-bottom { 211 display: flex;
212 position: fixed; 212 align-items: center;
213 bottom: 0; 213 font-size: 32rpx;
214 left: 0; 214 padding: 10rpx 0;
215 right: 0; 215
216 padding: 20rpx 30rpx 30rpx; 216 .pay-method {
217 background-color: #fff; 217 display: flex;
218 border-top: 1px solid #eee; 218 align-items: center;
219 219 margin-left: 10rpx;
220 .pay-btn { 220
221 width: 100%; 221 .pay-name {
222 height: 88rpx; 222 font-size: 32rpx;
223 line-height: 88rpx; 223 margin-left: 20rpx;
224 border-radius: 44rpx; 224 color: #333;
225 font-size: 34rpx; 225 }
226 font-weight: 600; 226 }
227 } 227 }
228 228 }
229 .red-bg { 229
230 background-color: #E60012; 230 // 底部支付按钮
231 color: #fff; 231 .fixed-bottom {
232 } 232 position: fixed;
233 } 233 bottom: 0;
234 left: 0;
235 right: 0;
236 padding: 20rpx 30rpx 30rpx;
237 background-color: #fff;
238 border-top: 1px solid #eee;
239
240 .pay-btn {
241 width: 100%;
242 height: 88rpx;
243 line-height: 88rpx;
244 border-radius: 44rpx;
245 font-size: 34rpx;
246 font-weight: 600;
247 }
248
249 .red-bg {
250 background-color: #E60012;
251 color: #fff;
252 }
253 }
234 </style> 254 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="pd30" style="padding: 30rpx 30rpx 180rpx;"> 3 <view class="pd30" style="padding: 30rpx 30rpx 180rpx;">
4 <view class="wBox"> 4 <view class="wBox">
5 <uni-forms ref="baseForm" label-width="100"> 5 <uni-forms ref="baseForm" label-width="100">
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"
10 :map="{text:'label',value:'id'}" popup-title="请选择"> 10 :map="{text:'label',value:'id'}" popup-title="请选择">
11 </uni-data-picker> 11 </uni-data-picker>
12 </view> 12 </view>
13 </uni-forms-item> 13 </uni-forms-item>
14 <uni-forms-item v-if="form.memCode" label="会员编号" required> 14 <uni-forms-item v-if="form.memCode" label="会员编号" required>
15 <uni-easyinput v-model="form.memCode" disabled /> 15 <uni-easyinput v-model="form.memCode" disabled />
16 </uni-forms-item> 16 </uni-forms-item>
17 17
18 <uni-forms-item label="机构名称" required> 18 <uni-forms-item label="机构名称" required>
19 <uni-easyinput v-model="form.name" :disabled="type" placeholder="机构名称" /></uni-forms-item> 19 <uni-easyinput v-model="form.name" :disabled="type" placeholder="机构名称" /></uni-forms-item>
20 20
21 <uni-forms-item label="所属省份" required> 21 <uni-forms-item label="所属省份" required>
22 <uni-data-select :clear="false" :disabled="type&&(belongProvinceId||belongProvinceId==0)" 22 <uni-data-select :clear="false" :disabled="type&&(belongProvinceId||belongProvinceId==0)"
23 v-model="form.belongProvinceId" :localdata="regionsList"></uni-data-select> 23 v-model="form.belongProvinceId" :localdata="regionsList"></uni-data-select>
24 </uni-forms-item> 24 </uni-forms-item>
25 <uni-forms-item label="社会信用代码" required> 25 <uni-forms-item label="社会信用代码" required>
26 <uni-easyinput v-model="form.creditCode" :disabled="type&&!!creditCode&&newResult" /> 26 <uni-easyinput v-model="form.creditCode" :disabled="type&&!!creditCode&&newResult" />
27 </uni-forms-item> 27 </uni-forms-item>
28 <uni-forms-item label="联系人" required> 28 <uni-forms-item label="联系人" required>
29 <uni-easyinput v-model="form.siteContact" /> 29 <uni-easyinput v-model="form.siteContact" />
30 </uni-forms-item> 30 </uni-forms-item>
31 <uni-forms-item label="联系方式" required> 31 <uni-forms-item label="联系方式" required>
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" :localdata="regionsList"></uni-data-picker> 35 <uni-data-picker v-model="form.coordinates1" @change="changeCoordinates1"
36 </uni-forms-item> 36 :localdata="regionsList"></uni-data-picker>
37 <uni-forms-item label="详细地址" required> 37 </uni-forms-item>
38 <uni-easyinput v-model="form.adress" placeholder="请输入详细地址" type='textarea' /></uni-forms-item> 38 <uni-forms-item label="详细地址" required>
39 <uni-forms-item label="法人姓名" required> 39 <uni-easyinput v-model="form.adress" placeholder="请输入详细地址" type='textarea' /></uni-forms-item>
40 <uni-easyinput v-model="form.legal" /> 40 <uni-forms-item label="法人姓名" required>
41 </uni-forms-item> 41 <uni-easyinput v-model="form.legal" />
42 42 </uni-forms-item>
43 <uni-forms-item v-if="form.deptType==6&&activeStatus!= 0" label="是否申请考点" required> 43
44 <uni-data-checkbox v-model="form.applyPoints" :localdata="yesno" /> 44 <uni-forms-item v-if="form.deptType==6&&activeStatus!= 0" label="是否申请考点" required>
45 </uni-forms-item> 45 <uni-data-checkbox v-model="form.applyPoints" :localdata="yesno" />
46 46 </uni-forms-item>
47 <uni-forms-item label="法人身份证" required> 47
48 <view class="imgArea"> 48 <uni-forms-item label="法人身份证" required>
49 <uni-file-picker v-model="imgfront" @delete="delimgFont" return-type="object" limit="1" 49 <view class="imgArea">
50 @select="upIdCardImgFront" :image-styles="imageStylesZJ"> 50 <uni-file-picker v-model="imgfront" @delete="delimgFont" return-type="object" limit="1"
51 <view>国徽面</view> 51 @select="upIdCardImgFront" :image-styles="imageStylesZJ">
52 </uni-file-picker> 52 <view>国徽面</view>
53 <uni-file-picker style="margin-top: 30px;" v-model="imgBack" @delete="delimgBack" 53 </uni-file-picker>
54 return-type="object" limit="1" @select="upIdCardImgBack" :image-styles="imageStylesZJ"> 54 <uni-file-picker style="margin-top: 30px;" v-model="imgBack" @delete="delimgBack"
55 <view>头像面</view> 55 return-type="object" limit="1" @select="upIdCardImgBack" :image-styles="imageStylesZJ">
56 </uni-file-picker> 56 <view>头像面</view>
57 </view> 57 </uni-file-picker>
58 </uni-forms-item> 58 </view>
59 <uni-forms-item label="营业执照" required> 59 </uni-forms-item>
60 <uni-file-picker limit="1" v-model="businessLicenseArr" file-extname="png,jpg,jpeg,pdf" 60 <uni-forms-item label="营业执照" required>
61 file-mediatype="all" @select="selectFile" @delete="delSupplementFile"></uni-file-picker> 61 <uni-file-picker limit="1" v-model="businessLicenseArr" file-extname="png,jpg,jpeg,pdf"
62 62 file-mediatype="all" @select="selectFile" @delete="delSupplementFile"></uni-file-picker>
63 </uni-forms-item> 63
64 <uni-forms-item label="机构照片" required> 64 </uni-forms-item>
65 <uni-file-picker v-model="picArrR" limit="3" mode="grid" file-mediatype="image" 65 <uni-forms-item label="机构照片" required>
66 @select="upPicArr" @delete="delpicArr"> 66 <uni-file-picker v-model="picArrR" limit="3" mode="grid" file-mediatype="image"
67 </uni-file-picker> 67 @select="upPicArr" @delete="delpicArr">
68 </uni-forms-item> 68 </uni-file-picker>
69 </uni-forms> 69 </uni-forms-item>
70 <view class="fixedBottom"> 70 </uni-forms>
71 <button class="btn-red" @click="submit()">确定</button> 71 <view class="fixedBottom">
72 </view> 72 <button class="btn-red" @click="submit()">确定</button>
73 </view> 73 </view>
74 </view> 74 </view>
75 75 </view>
76 <uni-popup ref="verifyPopup" type="center" background-color="rgba(0,0,0,0.5)"> 76
77 <view class="custom-modal"> 77 <uni-popup ref="verifyPopup" type="center" background-color="rgba(0,0,0,0.5)">
78 <view class="modal-title">提示</view> 78 <view class="custom-modal">
79 <view class="modal-content"> 79 <view class="modal-title">提示</view>
80 暂未查询到相关企业信息 80 <view class="modal-content">
81 </view> 81 暂未查询到相关企业信息
82 <view class=" modal-content" style="color:red">企业信息异常请检查相关资料信息,确认无误后再次提交!</view> 82 </view>
83 <view class="modal-btns mt20"> 83 <view class=" modal-content" style="color:red">企业信息异常请检查相关资料信息,确认无误后再次提交!</view>
84 <button class="btn-cancel" @click="closeVerifyPopup()">返回修改</button> 84 <view class="modal-btns mt20">
85 <button class="btn-confirm" @click="confirmSubmit()">确认无误</button> 85 <button class="btn-cancel" @click="closeVerifyPopup()">返回修改</button>
86 </view> 86 <button class="btn-confirm" @click="confirmSubmit()">确认无误</button>
87 </view> 87 </view>
88 </uni-popup> 88 </view>
89 89 </uni-popup>
90 <uni-popup ref="applyPopup" type="center" background-color="rgba(0,0,0,0.5)"> 90
91 <view class="custom-modal apply-modal"> 91 <uni-popup ref="applyPopup" type="center" background-color="rgba(0,0,0,0.5)">
92 <view class="modal-title">考点申请</view> 92 <view class="custom-modal apply-modal">
93 <view class="modal-btns apply-btns"> 93 <view class="modal-title">考点申请</view>
94 <button class="btn-cancel" @click="closeApplyPopup()">暂不申请</button> 94 <view class="modal-btns apply-btns">
95 <button class="btn-confirm" @click="confirmApply()">立即申请</button> 95 <button class="btn-cancel" @click="closeApplyPopup()">暂不申请</button>
96 </view> 96 <button class="btn-confirm" @click="confirmApply()">立即申请</button>
97 <view class="modal-tip">友情提示:非考点无法申请级位考试</view> 97 </view>
98 </view> 98 <view class="modal-tip">友情提示:非考点无法申请级位考试</view>
99 </uni-popup> 99 </view>
100 </view> 100 </uni-popup>
101 </template> 101 </view>
102 102 </template>
103 <script setup> 103
104 import { ref, reactive, computed } from 'vue'; 104 <script setup>
105 import * as api from '@/common/api.js'; 105 import {
106 import _ from 'underscore' 106 ref,
107 import { onLoad, onShow } from '@dcloudio/uni-app'; 107 reactive,
108 import config from '@/config.js' 108 computed
109 const app = getApp(); 109 } from 'vue';
110 110 import * as api from '@/common/api.js';
111 const verifyPopup = ref(null) 111 import _ from 'underscore'
112 const applyPopup = ref(null) 112 import {
113 const verifyResult = ref({}) 113 onLoad,
114 114 onShow
115 const form = ref({ 115 } from '@dcloudio/uni-app';
116 type: '1', 116 import config from '@/config.js'
117 applyPoints: '0', 117 const app = getApp();
118 renewYear: 1, 118
119 legalIdcCode: '' 119 const verifyPopup = ref(null)
120 }); 120 const applyPopup = ref(null)
121 const years = ref(['1', '2', '3', '4', '5']) 121 const verifyResult = ref({})
122 const yesno = ref([{ value: '0', text: '否' }, { value: '1', text: '是' }]) 122
123 const memberFee = ref('') 123 const form = ref({
124 const preferentialPolicy = ref(false) 124 type: '1',
125 const preferentialData = ref({}) 125 applyPoints: '0',
126 const typeList = ref([ 126 renewYear: 1,
127 { value: '1', text: '企业' }, 127 legalIdcCode: ''
128 { value: '2', text: '国家组织' }, 128 });
129 { value: '3', text: '社会组织' }, 129 const years = ref(['1', '2', '3', '4', '5'])
130 { value: '4', text: '其他' } 130 const yesno = ref([{
131 ]) 131 value: '0',
132 const regionArr = ref(); 132 text: '否'
133 const regionsList = ref([]); 133 }, {
134 const tree = ref([]); 134 value: '1',
135 const showDirectly = ref(true) 135 text: '是'
136 const directUnderFlag = ref(0) 136 }])
137 const current = ref(0); 137 const memberFee = ref('')
138 const groupId = ref(0); 138 const preferentialPolicy = ref(false)
139 const currIndex = ref(null); 139 const preferentialData = ref({})
140 const signType = ref(); 140 const typeList = ref([{
141 const editIng = ref(true); 141 value: '1',
142 const isSign = ref(false); 142 text: '企业'
143 const type = ref(false) 143 },
144 const flag = ref(false) 144 {
145 const result = ref(false) 145 value: '2',
146 const query = ref({ type: 0 }); 146 text: '国家组织'
147 const activeStatus = ref(0) 147 },
148 const active = ref(0) 148 {
149 const memberInfo = ref({}) 149 value: '3',
150 const authenticationStatus = ref() 150 text: '社会组织'
151 const authenticationStatusa = ref() 151 },
152 const newResult = ref(false) 152 {
153 const belongProvinceId = ref() 153 value: '4',
154 const picArr = ref([]) 154 text: '其他'
155 const picArrR = ref([]) 155 }
156 const businessLicenseArr = ref([]) 156 ])
157 const list1 = ref([{ title: '完善信息' }, { title: '会员认证' }]) 157 const regionArr = ref();
158 const imageStylesZJ = ref({ width: '400rpx', height: '253rpx' }); 158 const regionsList = ref([]);
159 const indicatorStyle = ref(`height: 50px;`) 159 const tree = ref([]);
160 const imgfront = ref({}) 160 const showDirectly = ref(true)
161 const imgBack = ref({}) 161 const directUnderFlag = ref(0)
162 const creditCode = ref() 162 const current = ref(0);
163 const parentId = ref() 163 const groupId = ref(0);
164 const legalIdcPhoto1 = ref('') 164 const currIndex = ref(null);
165 const legalIdcPhoto2 = ref('') 165 const signType = ref();
166 const companyName = ref('') 166 const editIng = ref(true);
167 167 const isSign = ref(false);
168 onLoad(option => { 168 const type = ref(false)
169 if (app.globalData.isLogin) { 169 const flag = ref(false)
170 init() 170 const result = ref(false)
171 } else { 171 const query = ref({
172 app.firstLoadCallback = () => { 172 type: 0
173 init() 173 });
174 }; 174 const activeStatus = ref(0)
175 } 175 const active = ref(0)
176 }); 176 const memberInfo = ref({})
177 177 const authenticationStatus = ref()
178 async function init() { 178 const authenticationStatusa = ref()
179 getRegionsList() 179 const newResult = ref(false)
180 await getForm() 180 const belongProvinceId = ref()
181 await canUseDiscountApi() 181 const picArr = ref([])
182 await getZtxDiscountPolicyApi() 182 const picArrR = ref([])
183 } 183 const businessLicenseArr = ref([])
184 184 const list1 = ref([{
185 async function getMyMemberCertUnitFeeApi() { 185 title: '完善信息'
186 const res = await api.getMyMemberCertUnitFee() 186 }, {
187 memberFee.value = res.data 187 title: '会员认证'
188 } 188 }])
189 189 const imageStylesZJ = ref({
190 async function canUseDiscountApi() { 190 width: '400rpx',
191 const res = await api.canUseDiscount() 191 height: '253rpx'
192 preferentialPolicy.value = res.data 192 });
193 } 193 const indicatorStyle = ref(`height: 50px;`)
194 194 const imgfront = ref({})
195 async function getZtxDiscountPolicyApi() { 195 const imgBack = ref({})
196 const res = await api.getZtxDiscountPolicy() 196 const creditCode = ref()
197 preferentialData.value = res.data 197 const parentId = ref()
198 } 198 const legalIdcPhoto1 = ref('')
199 199 const legalIdcPhoto2 = ref('')
200 async function getForm() { 200 const companyName = ref('')
201 const res = await api.getMyOwnMemberInfo() 201
202 newResult.value = res.data.newResult 202 onLoad(option => {
203 result.value = res.data.result 203 if (app.globalData.isLogin) {
204 authenticationStatusa.value = res.data.authenticationStatus 204 init()
205 showDirectly.value = !res.data.memberInfo.associateId 205 } else {
206 activeStatus.value = res.data.memberInfo.activeStatus 206 app.firstLoadCallback = () => {
207 directUnderFlag.value = res.data.memberInfo.directUnderFlag 207 init()
208 208 };
209 if (authenticationStatusa.value == 0 || authenticationStatusa.value == 3) { 209 }
210 type.value = false 210 });
211 } else { 211
212 type.value = true 212 async function init() {
213 } 213 getRegionsList()
214 214 await getForm()
215 if (authenticationStatusa.value != 0) { 215 await canUseDiscountApi()
216 flag.value = newResult.value 216 await getZtxDiscountPolicyApi()
217 } 217 }
218 218
219 form.value = { ...res.data.dept, ...res.data.memberInfo } 219 async function getMyMemberCertUnitFeeApi() {
220 getTree() 220 const res = await api.getMyMemberCertUnitFee()
221 form.value.deptType = res.data.dept.deptType 221 memberFee.value = res.data
222 form.value.parentId = form.value.parentId.toString() 222 }
223 creditCode.value = form.value.creditCode 223
224 companyName.value = form.value.companyName 224 async function canUseDiscountApi() {
225 belongProvinceId.value = form.value.belongProvinceId 225 const res = await api.canUseDiscount()
226 parentId.value = form.value.parentId 226 preferentialPolicy.value = res.data
227 227 }
228 if (form.value.regionId) { 228
229 form.value.coordinates1 = form.value.regionId 229 async function getZtxDiscountPolicyApi() {
230 } else if (form.value.cityId) { 230 const res = await api.getZtxDiscountPolicy()
231 form.value.coordinates1 = form.value.cityId 231 preferentialData.value = res.data
232 } else if (form.value.provinceId) { 232 }
233 form.value.coordinates1 = form.value.provinceId 233
234 } else { 234 async function getForm() {
235 form.value.coordinates1 = '' 235 const res = await api.getMyOwnMemberInfo()
236 } 236 newResult.value = res.data.newResult
237 237 result.value = res.data.result
238 if (form.value.businessLicense) { 238 authenticationStatusa.value = res.data.authenticationStatus
239 try { 239 showDirectly.value = !res.data.memberInfo.associateId
240 businessLicenseArr.value = JSON.parse(form.value.businessLicense) || [] 240 activeStatus.value = res.data.memberInfo.activeStatus
241 } catch (e) { 241 directUnderFlag.value = res.data.memberInfo.directUnderFlag
242 businessLicenseArr.value = [{ url: form.value.businessLicense, name: '营业执照' }] 242
243 } 243 if (authenticationStatusa.value == 0 || authenticationStatusa.value == 3) {
244 } 244 type.value = false
245 245 } else {
246 if (form.value.legalIdcPhoto) { 246 type.value = true
247 legalIdcPhoto1.value = form.value.legalIdcPhoto.split(',')?.[0] || '' 247 }
248 legalIdcPhoto2.value = form.value.legalIdcPhoto.split(',')?.[1] || '' 248
249 if (legalIdcPhoto1.value.indexOf('http') == -1) { 249 if (authenticationStatusa.value != 0) {
250 legalIdcPhoto1.value = config.baseUrl_api + legalIdcPhoto1.value 250 flag.value = newResult.value
251 } 251 }
252 if (legalIdcPhoto2.value.indexOf('http') == -1) { 252
253 legalIdcPhoto2.value = config.baseUrl_api + legalIdcPhoto2.value 253 form.value = {
254 } 254 ...res.data.dept,
255 imgfront.value = { url: legalIdcPhoto1.value, name: '身份证正面', extname: 'png' } 255 ...res.data.memberInfo
256 imgBack.value = { url: legalIdcPhoto2.value, name: '身份证反面', extname: 'png' } 256 }
257 } 257 getTree()
258 258 form.value.deptType = res.data.dept.deptType
259 if (form.value.pictures) { 259 form.value.parentId = form.value.parentId.toString()
260 picArrR.value = [] 260 creditCode.value = form.value.creditCode
261 picArr.value = [] 261 companyName.value = form.value.companyName
262 var arr = form.value.pictures.split(',') || [] 262 belongProvinceId.value = form.value.belongProvinceId
263 if (arr.length > 0) { 263 parentId.value = form.value.parentId
264 _.map(arr, (p) => { 264
265 if (p.indexOf('http') == -1) { 265 if (form.value.regionId) {
266 p = config.baseUrl_api + p 266 form.value.coordinates1 = form.value.regionId
267 } 267 } else if (form.value.cityId) {
268 var obj = { url: p, name: '图片', extname: 'png' } 268 form.value.coordinates1 = form.value.cityId
269 picArrR.value.push(obj) 269 } else if (form.value.provinceId) {
270 picArr.value.push(p) 270 form.value.coordinates1 = form.value.provinceId
271 }) 271 } else {
272 } 272 form.value.coordinates1 = ''
273 } 273 }
274 274
275 if (!form.value.applyPoints || form.value.applyPoints == '') { 275 if (form.value.businessLicense) {
276 form.value.applyPoints = '0' 276 try {
277 } 277 businessLicenseArr.value = JSON.parse(form.value.businessLicense) || []
278 } 278 } catch (e) {
279 279 businessLicenseArr.value = [{
280 function getTree() { 280 url: form.value.businessLicense,
281 if (authenticationStatusa.value == 0 || authenticationStatusa.value == 3 || authenticationStatusa.value == 1) { 281 name: '营业执照'
282 var obj = { selfDeptId: '-1', webSiteShow: 1, showDisabled: 1 } 282 }]
283 api.certifiedDeptTree(obj).then(res => { 283 }
284 tree.value = res.data 284 }
285 }) 285
286 } else { 286 if (form.value.legalIdcPhoto) {
287 var obj = { 287 legalIdcPhoto1.value = form.value.legalIdcPhoto.split(',')?.[0] || ''
288 selfDeptId: '-1', 288 legalIdcPhoto2.value = form.value.legalIdcPhoto.split(',')?.[1] || ''
289 showDisabled: 1, 289 if (legalIdcPhoto1.value.indexOf('http') == -1) {
290 showDirect: authenticationStatusa.value == 2 || authenticationStatusa.value == 5 || authenticationStatusa.value == 4 ? 1 : null 290 legalIdcPhoto1.value = config.baseUrl_api + legalIdcPhoto1.value
291 } 291 }
292 api.deptTreeSelect(obj).then(res => { 292 if (legalIdcPhoto2.value.indexOf('http') == -1) {
293 tree.value = res.data 293 legalIdcPhoto2.value = config.baseUrl_api + legalIdcPhoto2.value
294 }) 294 }
295 } 295 imgfront.value = {
296 } 296 url: legalIdcPhoto1.value,
297 297 name: '身份证正面',
298 function getRegionsList() { 298 extname: 'png'
299 api.regionsList().then(res => { 299 }
300 regionsList.value = res.data; 300 imgBack.value = {
301 }); 301 url: legalIdcPhoto2.value,
302 } 302 name: '身份证反面',
303 303 extname: 'png'
304 // 核心:修改submit方法,改用自定义弹窗 304 }
305 async function submit() { 305 }
306 // 基础表单验证 306
307 if (form.value.name == '') { 307 if (form.value.pictures) {
308 uni.showToast({ title: '请填写机构名称', icon: 'none' }) 308 picArrR.value = []
309 return 309 picArr.value = []
310 } 310 var arr = form.value.pictures.split(',') || []
311 if (form.value.creditCode == '') { 311 if (arr.length > 0) {
312 uni.showToast({ title: '请填写社会信用代码', icon: 'none' }) 312 _.map(arr, (p) => {
313 return 313 if (p.indexOf('http') == -1) {
314 } 314 p = config.baseUrl_api + p
315 if (form.value.companyName == '') { 315 }
316 uni.showToast({ title: '请填写营业执照名称', icon: 'none' }) 316 var obj = {
317 return 317 url: p,
318 } 318 name: '图片',
319 if (form.value.legalIdcCode == '') { 319 extname: 'png'
320 uni.showToast({ title: '请填写法人证件号', icon: 'none' }) 320 }
321 return 321 picArrR.value.push(obj)
322 } 322 picArr.value.push(p)
323 if (form.value.siteContact == '') { 323 })
324 uni.showToast({ title: '请填写联系人', icon: 'none' }) 324 }
325 return 325 }
326 } 326
327 if (form.value.siteTel == '') { 327 if (!form.value.applyPoints || form.value.applyPoints == '') {
328 uni.showToast({ title: '请填写联系方式', icon: 'none' }) 328 form.value.applyPoints = '0'
329 return 329 }
330 } 330 }
331 if (form.value.coordinates1 == '') { 331
332 uni.showToast({ title: '请选择认证地址', icon: 'none' }) 332 function getTree() {
333 return 333 if (authenticationStatusa.value == 0 || authenticationStatusa.value == 3 || authenticationStatusa.value == 1) {
334 } 334 var obj = {
335 if (form.value.adress == '') { 335 selfDeptId: '-1',
336 uni.showToast({ title: '请填写详细地址', icon: 'none' }) 336 webSiteShow: 1,
337 return 337 showDisabled: 1
338 } 338 }
339 if (form.value.legal == '') { 339 api.certifiedDeptTree(obj).then(res => {
340 uni.showToast({ title: '请填写法人姓名', icon: 'none' }) 340 tree.value = res.data
341 return 341 })
342 } 342 } else {
343 if (legalIdcPhoto1.value == '' || legalIdcPhoto2.value == '') { 343 var obj = {
344 uni.showToast({ title: '请上传法人身份证', icon: 'none' }) 344 selfDeptId: '-1',
345 return 345 showDisabled: 1,
346 } 346 showDirect: authenticationStatusa.value == 2 || authenticationStatusa.value == 5 ||
347 if (!form.value.businessLicense) { 347 authenticationStatusa.value == 4 ? 1 : null
348 uni.showToast({ title: '请上传营业执照', icon: 'none' }) 348 }
349 return 349 api.deptTreeSelect(obj).then(res => {
350 } 350 tree.value = res.data
351 if (picArr.value.length == 0) { 351 })
352 uni.showToast({ title: '请上传机构照片', icon: 'none' }) 352 }
353 return 353 }
354 } 354
355 if (form.value.parentId == -1 || form.value.parentId == 0) { 355 function getRegionsList() {
356 uni.showToast({ title: '请选择所属协会', icon: 'none' }) 356 api.regionsList().then(res => {
357 return 357 regionsList.value = res.data;
358 } 358 });
359 359 }
360 try { 360
361 const res = await handelVerify() 361 // 核心:修改submit方法,改用自定义弹窗
362 verifyResult.value = res 362 async function submit() {
363 363 // 基础表单验证
364 if (!res.passFlag) { 364 if (form.value.name == '') {
365 // 打开自定义弹窗(替代原有showModal) 365 uni.showToast({
366 verifyPopup.value.open() 366 title: '请填写机构名称',
367 return 367 icon: 'none'
368 } 368 })
369 369 return
370 submitData() 370 }
371 371 if (form.value.creditCode == '') {
372 } catch (error) { 372 uni.showToast({
373 uni.showToast({ title: error.message || '验证失败,请重试', icon: 'none' }) 373 title: '请填写社会信用代码',
374 } 374 icon: 'none'
375 } 375 })
376 376 return
377 // 新增:关闭验证弹窗 377 }
378 function closeVerifyPopup() { 378 if (form.value.companyName == '') {
379 verifyPopup.value.close() 379 uni.showToast({
380 } 380 title: '请填写营业执照名称',
381 381 icon: 'none'
382 // 新增:确认无误提交 382 })
383 function confirmSubmit() { 383 return
384 verifyPopup.value.close() 384 }
385 submitData() 385 if (form.value.legalIdcCode == '') {
386 } 386 uni.showToast({
387 387 title: '请填写法人证件号',
388 // 新增:打开考点申请弹窗(备用,如需调用可加触发逻辑) 388 icon: 'none'
389 function openApplyPopup() { 389 })
390 applyPopup.value.open() 390 return
391 } 391 }
392 392 if (form.value.siteContact == '') {
393 // 新增:关闭考点申请弹窗 393 uni.showToast({
394 function closeApplyPopup() { 394 title: '请填写联系人',
395 applyPopup.value.close() 395 icon: 'none'
396 } 396 })
397 397 return
398 // 新增:确认考点申请 398 }
399 function confirmApply() { 399 if (form.value.siteTel == '') {
400 applyPopup.value.close() 400 uni.showToast({
401 // 此处添加考点申请逻辑 401 title: '请填写联系方式',
402 } 402 icon: 'none'
403 403 })
404 // 企业信息验证 404 return
405 function handelVerify() { 405 }
406 return new Promise(async(resolve, reject) => { 406 if (form.value.coordinates1 == '') {
407 if (!form.value.legalIdcCode || !form.value.legal) { 407 uni.showToast({
408 return reject(new Error('请重新上传身份证并填写法人证件号')) 408 title: '请选择认证地址',
409 } 409 icon: 'none'
410 if (!form.value.companyName || !form.value.creditCode) { 410 })
411 return reject(new Error('请重新上传营业执照并填写营业执照名称')) 411 return
412 } 412 }
413 413 if (form.value.adress == '') {
414 try { 414 uni.showToast({
415 const res = await api.checkBusinessLicense({ 415 title: '请填写详细地址',
416 creditCode: form.value.creditCode, 416 icon: 'none'
417 companyName: form.value.companyName, 417 })
418 legalIdcCode: form.value.legalIdcCode, 418 return
419 legal: form.value.legal 419 }
420 }) 420 if (form.value.legal == '') {
421 if (res.code == 200) { 421 uni.showToast({
422 resolve(res.data) 422 title: '请填写法人姓名',
423 } else { 423 icon: 'none'
424 reject(new Error(res.msg || '企业信息验证失败')) 424 })
425 } 425 return
426 } catch (e) { 426 }
427 reject(new Error('验证接口调用失败,请检查网络')) 427 if (legalIdcPhoto1.value == '' || legalIdcPhoto2.value == '') {
428 } 428 uni.showToast({
429 }) 429 title: '请上传法人身份证',
430 } 430 icon: 'none'
431 431 })
432 // 数据提交核心逻辑 432 return
433 function submitData() { 433 }
434 const dataInfo = { 434 if (!form.value.businessLicense) {
435 parentId: form.value.parentId, 435 uni.showToast({
436 creditCode: form.value.creditCode, 436 title: '请上传营业执照',
437 legal: form.value.legal, 437 icon: 'none'
438 businessLicense: form.value.businessLicense, 438 })
439 pictures: picArr.value.toString(), 439 return
440 memId: form.value.memId, 440 }
441 id: form.value.deptId, 441 if (picArr.value.length == 0) {
442 name: form.value.name, 442 uni.showToast({
443 regionId: form.value.coordinates1, 443 title: '请上传机构照片',
444 adress: form.value.adress, 444 icon: 'none'
445 belongProvinceId: form.value.belongProvinceId, 445 })
446 deptType: form.value.deptType, 446 return
447 legalIdcPhoto: [legalIdcPhoto1.value, legalIdcPhoto2.value]?.join(','), 447 }
448 legalIdcCode: form.value.legalIdcCode, 448 if (form.value.parentId == -1 || form.value.parentId == 0) {
449 companyName: form.value.companyName, 449 uni.showToast({
450 applyPoints: form.value.applyPoints, 450 title: '请选择所属协会',
451 siteContact: form.value.siteContact, 451 icon: 'none'
452 siteTel: form.value.siteTel 452 })
453 } 453 return
454 454 }
455 if (activeStatus.value == 0) { 455
456 api.active(dataInfo).then(res => { 456 try {
457 uni.showModal({ 457 const res = await handelVerify()
458 content: '激活成功,返回首页', 458 verifyResult.value = res
459 success: function(resp) { 459
460 if (resp.confirm) { 460 if (!res.passFlag) {
461 uni.reLaunch({ url: `/pages/index/index` }) 461 // 打开自定义弹窗(替代原有showModal)
462 } else { 462 verifyPopup.value.open()
463 uni.navigateBack() 463 return
464 } 464 }
465 } 465
466 }) 466 submitData()
467 }).catch(err => { 467
468 uni.showToast({ title: '激活失败,请重试', icon: 'none' }) 468 } catch (error) {
469 }) 469 uni.showToast({
470 } else { 470 title: error.message || '验证失败,请重试',
471 api.editMyMemberCertifiedInfo(dataInfo).then(res => { 471 icon: 'none'
472 uni.navigateTo({ 472 })
473 url: `/myCenter/goPay` 473 }
474 }) 474 }
475 475
476 }).catch(err => { 476 // 新增:关闭验证弹窗
477 uni.showToast({ title: '提交失败,请重试', icon: 'none' }) 477 function closeVerifyPopup() {
478 }) 478 verifyPopup.value.close()
479 } 479 }
480 } 480
481 481 // 新增:确认无误提交
482 function changeCoordinates1(e) { 482 function confirmSubmit() {
483 form.value.provinceId = e?.[0]?.toString() 483 verifyPopup.value.close()
484 form.value.cityId = e?.[1]?.toString() 484 submitData()
485 form.value.regionId = e?.[2]?.toString() 485 }
486 } 486
487 487 // 新增:打开考点申请弹窗(备用,如需调用可加触发逻辑)
488 function upIdCardImgFront(e) { 488 function openApplyPopup() {
489 const tempFilePaths = e.tempFilePaths; 489 applyPopup.value.open()
490 const imgUrl = tempFilePaths[0] 490 }
491 if (!imgUrl) return 491
492 uni.showLoading({ title: '上传中' }) 492 // 新增:关闭考点申请弹窗
493 api.uploadImg(e).then(data => { 493 function closeApplyPopup() {
494 legalIdcPhoto1.value = data.msg 494 applyPopup.value.close()
495 uni.hideLoading() 495 }
496 }).catch(err => { 496
497 uni.hideLoading() 497 // 新增:确认考点申请
498 uni.showToast({ title: '上传失败', icon: 'none' }) 498 function confirmApply() {
499 }) 499 applyPopup.value.close()
500 } 500 // 此处添加考点申请逻辑
501 501 }
502 function upIdCardImgBack(e) { 502
503 const tempFilePaths = e.tempFilePaths; 503 // 企业信息验证
504 const imgUrl = tempFilePaths[0] 504 function handelVerify() {
505 if (!imgUrl) return 505 return new Promise(async (resolve, reject) => {
506 uni.showLoading({ title: '上传中' }) 506 if (!form.value.legalIdcCode || !form.value.legal) {
507 api.uploadImg(e).then(data => { 507 return reject(new Error('请重新上传身份证并填写法人证件号'))
508 legalIdcPhoto2.value = data.msg 508 }
509 uni.hideLoading() 509 if (!form.value.companyName || !form.value.creditCode) {
510 }).catch(err => { 510 return reject(new Error('请重新上传营业执照并填写营业执照名称'))
511 uni.hideLoading() 511 }
512 uni.showToast({ title: '上传失败', icon: 'none' }) 512
513 }) 513 try {
514 } 514 const res = await api.checkBusinessLicense({
515 515 creditCode: form.value.creditCode,
516 function delimgFont() { 516 companyName: form.value.companyName,
517 imgfront.value = {} 517 legalIdcCode: form.value.legalIdcCode,
518 legalIdcPhoto1.value = '' 518 legal: form.value.legal
519 } 519 })
520 520 if (res.code == 200) {
521 function delimgBack() { 521 resolve(res.data)
522 imgBack.value = {} 522 } else {
523 legalIdcPhoto2.value = '' 523 reject(new Error(res.msg || '企业信息验证失败'))
524 } 524 }
525 525 } catch (e) {
526 let selectFileValue = {} 526 reject(new Error('验证接口调用失败,请检查网络'))
527 function selectFile(e) { 527 }
528 let file = e.tempFiles[0] 528 })
529 if (!file) return 529 }
530 uni.showLoading({ title: '上传中' }) 530
531 api.uploadFile(e).then(data => { 531 // 数据提交核心逻辑
532 selectFileValue = { url: data.msg, name: file.name, extname: file.extname } 532 function submitData() {
533 form.value.businessLicense = JSON.stringify([selectFileValue]) 533 const dataInfo = {
534 uni.hideLoading() 534 parentId: form.value.parentId,
535 }).catch(err => { 535 creditCode: form.value.creditCode,
536 uni.hideLoading() 536 legal: form.value.legal,
537 uni.showToast({ title: '上传失败', icon: 'none' }) 537 businessLicense: form.value.businessLicense,
538 }) 538 pictures: picArr.value.toString(),
539 } 539 memId: form.value.memId,
540 540 id: form.value.deptId,
541 function delSupplementFile() { 541 name: form.value.name,
542 selectFileValue = {} 542 regionId: form.value.coordinates1,
543 form.value.businessLicense = '' 543 adress: form.value.adress,
544 } 544 belongProvinceId: form.value.belongProvinceId,
545 545 deptType: form.value.deptType,
546 function upPicArr(e) { 546 legalIdcPhoto: [legalIdcPhoto1.value, legalIdcPhoto2.value]?.join(','),
547 const tempFilePaths = e.tempFilePaths; 547 legalIdcCode: form.value.legalIdcCode,
548 const imgUrl = tempFilePaths[0] 548 companyName: form.value.companyName,
549 if (!imgUrl) return 549 applyPoints: form.value.applyPoints,
550 uni.showLoading({ title: '上传中' }) 550 siteContact: form.value.siteContact,
551 api.uploadImg(e).then(data => { 551 siteTel: form.value.siteTel
552 picArr.value.push(data.msg) 552 }
553 uni.hideLoading() 553
554 }).catch(err => { 554 if (activeStatus.value == 0) {
555 uni.hideLoading() 555 api.active(dataInfo).then(res => {
556 uni.showToast({ title: '上传失败', icon: 'none' }) 556 uni.showModal({
557 }) 557 content: '激活成功,返回首页',
558 } 558 success: function(resp) {
559 559 if (resp.confirm) {
560 function delpicArr(e) { 560 uni.reLaunch({
561 picArr.value.splice(e.index, 1) 561 url: `/pages/index/home`
562 } 562 })
563 </script> 563 } else {
564 564 uni.navigateBack()
565 <style lang="scss" scoped> 565 }
566 :deep(.file-picker__progress){ opacity: 0; } 566 }
567 :deep(.input-value){padding: 0 5px;} 567 })
568 .picker-view { 568 }).catch(err => {
569 width: 750rpx; 569 uni.showToast({
570 height: 600rpx; 570 title: '激活失败,请重试',
571 margin-top: 20rpx; 571 icon: 'none'
572 } 572 })
573 .item { 573 })
574 line-height: 100rpx; 574 } else {
575 text-align: center; 575 api.editMyMemberCertifiedInfo(dataInfo).then(res => {
576 } 576 uni.navigateTo({
577 :deep(.uni-data-tree) { 577 url: `/myCenter/goPay`
578 border: 1px solid #dcdfe6; 578 })
579 border-radius: 4px; 579
580 .selected-list { justify-content: start; } 580 }).catch(err => {
581 } 581 uni.showToast({
582 :deep(.uni-select__input-placeholder) { font-size: 30rpx; } 582 title: '提交失败,请重试',
583 :deep(.uni-easyinput__content-input) { font-size: 30rpx; } 583 icon: 'none'
584 :deep(.uni-easyinput__placeholder-class) { font-size: 30rpx;color: grey; } 584 })
585 .wBox { 585 })
586 width: 700rpx; 586 }
587 padding: 30rpx; 587 }
588 margin: 20rpx auto 0; 588
589 background: #FFFFFF; 589 function changeCoordinates1(e) {
590 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); 590 form.value.provinceId = e?.[0]?.toString()
591 border-radius: 15rpx; 591 form.value.cityId = e?.[1]?.toString()
592 } 592 form.value.regionId = e?.[2]?.toString()
593 .imgArea { 593 }
594 padding: 1px; 594
595 display: flex; 595 function upIdCardImgFront(e) {
596 flex-wrap: wrap; 596 const tempFilePaths = e.tempFilePaths;
597 flex-direction: column; 597 const imgUrl = tempFilePaths[0]
598 } 598 if (!imgUrl) return
599 .btn-red { 599 uni.showLoading({
600 background-color: #F56C6C; 600 title: '上传中'
601 color: #fff; 601 })
602 border-radius: 8rpx; 602 api.uploadImg(e).then(data => {
603 height: 80rpx; 603 legalIdcPhoto1.value = data.msg
604 line-height: 80rpx; 604 uni.hideLoading()
605 font-size: 32rpx; 605 }).catch(err => {
606 width: 100%; 606 uni.hideLoading()
607 } 607 uni.showToast({
608 .fixedBottom { 608 title: '上传失败',
609 position: fixed; 609 icon: 'none'
610 bottom: 0; 610 })
611 left: 0; 611 })
612 right: 0; 612 }
613 padding: 20rpx 30rpx; 613
614 background: #fff; 614 function upIdCardImgBack(e) {
615 z-index: 99; 615 const tempFilePaths = e.tempFilePaths;
616 } 616 const imgUrl = tempFilePaths[0]
617 .text-warning { 617 if (!imgUrl) return
618 font-size: 28rpx; 618 uni.showLoading({
619 margin-top: 20rpx; 619 title: '上传中'
620 } 620 })
621 621 api.uploadImg(e).then(data => {
622 /* 新增:自定义弹窗样式(核心) */ 622 legalIdcPhoto2.value = data.msg
623 .custom-modal { 623 uni.hideLoading()
624 width: 600rpx; 624 }).catch(err => {
625 background: #fff; 625 uni.hideLoading()
626 border-radius: 20rpx; 626 uni.showToast({
627 padding: 40rpx 30rpx; 627 title: '上传失败',
628 box-sizing: border-box; 628 icon: 'none'
629 text-align: center; 629 })
630 } 630 })
631 .modal-title { 631 }
632 font-size: 36rpx; 632
633 font-weight: 600; 633 function delimgFont() {
634 color: #333; 634 imgfront.value = {}
635 margin-bottom: 30rpx; 635 legalIdcPhoto1.value = ''
636 } 636 }
637 .modal-content { 637
638 font-size: 30rpx; 638 function delimgBack() {
639 color: #666; 639 imgBack.value = {}
640 line-height: 1.6; 640 legalIdcPhoto2.value = ''
641 margin-bottom: 20rpx; 641 }
642 text-align: left; 642
643 } 643 let selectFileValue = {}
644 .modal-tip { 644
645 font-size: 26rpx; 645 function selectFile(e) {
646 color: #F56C6C; 646 let file = e.tempFiles[0]
647 margin-top: 10rpx; 647 if (!file) return
648 margin-bottom: 30rpx; 648 uni.showLoading({
649 } 649 title: '上传中'
650 .modal-btns { 650 })
651 display: flex; 651 api.uploadFile(e).then(data => {
652 justify-content: space-between; 652 selectFileValue = {
653 gap: 20rpx; 653 url: data.msg,
654 } 654 name: file.name,
655 .btn-cancel { 655 extname: file.extname
656 flex: 1; 656 }
657 height: 80rpx; 657 form.value.businessLicense = JSON.stringify([selectFileValue])
658 line-height: 80rpx; 658 uni.hideLoading()
659 background: #f5f5f5; 659 }).catch(err => {
660 color: #666; 660 uni.hideLoading()
661 border-radius: 40rpx; 661 uni.showToast({
662 font-size: 32rpx; 662 title: '上传失败',
663 border: none; 663 icon: 'none'
664 } 664 })
665 .btn-confirm { 665 })
666 flex: 1; 666 }
667 height: 80rpx; 667
668 line-height: 80rpx; 668 function delSupplementFile() {
669 background: #C4121B; /* 红色主色调,和图二一致 */ 669 selectFileValue = {}
670 color: #fff; 670 form.value.businessLicense = ''
671 border-radius: 40rpx; 671 }
672 font-size: 32rpx; 672
673 border: none; 673 function upPicArr(e) {
674 } 674 const tempFilePaths = e.tempFilePaths;
675 /* 去掉按钮默认边框 */ 675 const imgUrl = tempFilePaths[0]
676 .btn-cancel::after, .btn-confirm::after { 676 if (!imgUrl) return
677 border: none; 677 uni.showLoading({
678 } 678 title: '上传中'
679 679 })
680 /* 考点申请弹窗专属样式 */ 680 api.uploadImg(e).then(data => {
681 .apply-modal { 681 picArr.value.push(data.msg)
682 padding: 40rpx 30rpx 20rpx; 682 uni.hideLoading()
683 } 683 }).catch(err => {
684 .apply-btns { 684 uni.hideLoading()
685 margin-bottom: 20rpx; 685 uni.showToast({
686 } 686 title: '上传失败',
687 icon: 'none'
688 })
689 })
690 }
691
692 function delpicArr(e) {
693 picArr.value.splice(e.index, 1)
694 }
695 </script>
696
697 <style lang="scss" scoped>
698 :deep(.file-picker__progress) {
699 opacity: 0;
700 }
701
702 :deep(.input-value) {
703 padding: 0 5px;
704 }
705
706 .picker-view {
707 width: 750rpx;
708 height: 600rpx;
709 margin-top: 20rpx;
710 }
711
712 .item {
713 line-height: 100rpx;
714 text-align: center;
715 }
716
717 :deep(.uni-data-tree) {
718 border: 1px solid #dcdfe6;
719 border-radius: 4px;
720
721 .selected-list {
722 justify-content: start;
723 }
724 }
725
726 :deep(.uni-select__input-placeholder) {
727 font-size: 30rpx;
728 }
729
730 :deep(.uni-easyinput__content-input) {
731 font-size: 30rpx;
732 }
733
734 :deep(.uni-easyinput__placeholder-class) {
735 font-size: 30rpx;
736 color: grey;
737 }
738
739 .wBox {
740 width: 700rpx;
741 padding: 30rpx;
742 margin: 20rpx auto 0;
743 background: #FFFFFF;
744 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
745 border-radius: 15rpx;
746 }
747
748 .imgArea {
749 padding: 1px;
750 display: flex;
751 flex-wrap: wrap;
752 flex-direction: column;
753 }
754
755 .btn-red {
756 background-color: #F56C6C;
757 color: #fff;
758 border-radius: 8rpx;
759 height: 80rpx;
760 line-height: 80rpx;
761 font-size: 32rpx;
762 width: 100%;
763 }
764
765 .fixedBottom {
766 position: fixed;
767 bottom: 0;
768 left: 0;
769 right: 0;
770 padding: 20rpx 30rpx;
771 background: #fff;
772 z-index: 99;
773 }
774
775 .text-warning {
776 font-size: 28rpx;
777 margin-top: 20rpx;
778 }
779
780 /* 新增:自定义弹窗样式(核心) */
781 .custom-modal {
782 width: 600rpx;
783 background: #fff;
784 border-radius: 20rpx;
785 padding: 40rpx 30rpx;
786 box-sizing: border-box;
787 text-align: center;
788 }
789
790 .modal-title {
791 font-size: 36rpx;
792 font-weight: 600;
793 color: #333;
794 margin-bottom: 30rpx;
795 }
796
797 .modal-content {
798 font-size: 30rpx;
799 color: #666;
800 line-height: 1.6;
801 margin-bottom: 20rpx;
802 text-align: left;
803 }
804
805 .modal-tip {
806 font-size: 26rpx;
807 color: #F56C6C;
808 margin-top: 10rpx;
809 margin-bottom: 30rpx;
810 }
811
812 .modal-btns {
813 display: flex;
814 justify-content: space-between;
815 gap: 20rpx;
816 }
817
818 .btn-cancel {
819 flex: 1;
820 height: 80rpx;
821 line-height: 80rpx;
822 background: #f5f5f5;
823 color: #666;
824 border-radius: 40rpx;
825 font-size: 32rpx;
826 border: none;
827 }
828
829 .btn-confirm {
830 flex: 1;
831 height: 80rpx;
832 line-height: 80rpx;
833 background: #C4121B;
834 /* 红色主色调,和图二一致 */
835 color: #fff;
836 border-radius: 40rpx;
837 font-size: 32rpx;
838 border: none;
839 }
840
841 /* 去掉按钮默认边框 */
842 .btn-cancel::after,
843 .btn-confirm::after {
844 border: none;
845 }
846
847 /* 考点申请弹窗专属样式 */
848 .apply-modal {
849 padding: 40rpx 30rpx 20rpx;
850 }
851
852 .apply-btns {
853 margin-bottom: 20rpx;
854 }
687 </style> 855 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="wBox"> 3 <view class="wBox">
4 <view class="tt"> 4 <view class="tt">
5 审核信息 5 审核信息
6 </view> 6 </view>
7 <view> 7 <view>
8 <view class="stepItem" v-for="(n,index) in recordList" :key="index"> 8 <view class="stepItem" v-for="(n,index) in recordList" :key="index">
9 <view class="time">{{n.auditTime||'待审批'}}</view> 9 <view class="time">{{n.auditTime||'待审批'}}</view>
10 <view class="content"> 10 <view class="content">
11 <view class="status"> 11 <view class="status">
12 <text v-if="n.auditResult==0"> 审核中</text> 12 <text v-if="n.auditResult==1" class="text-success">审核通过</text>
13 <text v-if="n.auditResult==1" class="text-success">审核通过</text> 13 <text v-if="n.auditResult==0" class="text-danger"> 审核拒绝</text>
14 <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text> 14 </view>
15 <text v-if="n.auditResult==3" class="text-warning"> 已撤回</text> 15 <!-- <view class="name">{{index+1}}</view> -->
16 </view> 16 <view class="deptName">{{n.auditDeptName}}</view>
17 <!-- <view class="name">{{index+1}}</view> --> 17 <view v-if="n.auditResult==0">
18 <view class="deptName">{{n.auditDeptName}}</view> 18 备注:{{n.auditMsg||'/' }}
19 <view v-if="n.auditStatus==2"> 19 </view>
20 备注:{{n.auditMsg||'/' }} 20 </view>
21 </view> 21 </view>
22 </view> 22 </view>
23 </view> 23 </view>
24 </view> 24
25 </view> 25 </view>
26 26 </template>
27 </view> 27
28 </template> 28 <script setup>
29 29 import * as api from '@/common/api.js'
30 <script setup> 30 import config from '@/config.js'
31 import * as api from '@/common/api.js' 31 import _ from 'underscore'
32 import config from '@/config.js' 32 import to from 'await-to-js'
33 import _ from 'underscore' 33 import {
34 import { 34 onMounted,
35 onMounted, 35 ref
36 ref 36 } from 'vue'
37 } from 'vue' 37 import {
38 import { 38 onLoad,
39 onLoad, 39 onShow
40 onShow 40 } from '@dcloudio/uni-app'
41 } from '@dcloudio/uni-app' 41 const app = getApp();
42 const app = getApp(); 42 const userType = ref('')
43 const userType = ref('') 43 const recordList = ref([])
44 const recordList = ref([]) 44 onLoad(async (option) => {
45 onLoad((option) => { 45 await getMyRecentFN()
46 getMyCertStageFN() 46 })
47 }) 47
48 48 async function getMyRecentFN() {
49 function getMyCertStageFN() { 49 const [err, res] = await to(api.getMyRecent())
50 api.getMyCertStage().then(res => { 50 if (!err && res.data && res.data.auditLogs) {
51 recordList.value = res.data 51 recordList.value = JSON.parse(res.data.auditLogs)
52 console.log(res) 52 }
53 }) 53 }
54 54 </script>
55 } 55
56 </script> 56 <style scoped lang="scss">
57 57 .wBox {
58 <style scoped lang="scss"> 58 width: 700rpx;
59 .wBox { 59 padding: 30rpx;
60 width: 700rpx; 60 margin: 20rpx auto;
61 padding: 30rpx; 61 background: #FFFFFF;
62 margin: 20rpx auto; 62 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
63 background: #FFFFFF; 63 border-radius: 15rpx;
64 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); 64
65 border-radius: 15rpx; 65 .tt {
66 66 color: #0A1629;
67 .tt { 67 margin: 0 0 30rpx;
68 color: #0A1629; 68 font-size: 30rpx;
69 margin: 0 0 30rpx; 69 }
70 font-size: 30rpx; 70
71 } 71 .ddd {
72 72 font-size: 28rpx;
73 .ddd { 73 color: #333;
74 font-size: 28rpx; 74 margin: 0 0 10rpx;
75 color: #333; 75
76 margin: 0 0 10rpx; 76 .lab {
77 77 color: #999;
78 .lab { 78 display: inline-block;
79 color: #999; 79 text-align: justify;
80 display: inline-block; 80 }
81 text-align: justify; 81 }
82 } 82 }
83 }
84 }
85 </style> 83 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
4 "crypto-js": "^4.1.1", 4 "crypto-js": "^4.1.1",
5 "dayjs": "^1.11.6", 5 "dayjs": "^1.11.6",
6 "lodash": "^4.17.21", 6 "lodash": "^4.17.21",
7 "pinia": "^3.0.4",
7 "underscore": "^1.13.6" 8 "underscore": "^1.13.6"
8 }, 9 },
9 "devDependencies": { 10 "devDependencies": {
......
1 { 1 {
2 "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages 2 "pages": [{
3 "path": "pages/index/index"
4 },
3 { 5 {
4 "path": "pages/index/index", 6 "path": "pages/index/home",
5 "style": { 7 "style": {
6 "navigationBarTitleText": "工作台", 8 "navigationBarTitleText": "工作台",
7 "backgroundColor": "#ffffff", 9 "backgroundColor": "#ffffff",
...@@ -57,7 +59,7 @@ ...@@ -57,7 +59,7 @@
57 "navigationBarTitleText": "证书发布", 59 "navigationBarTitleText": "证书发布",
58 "enablePullDownRefresh": false 60 "enablePullDownRefresh": false
59 } 61 }
60 }, { 62 }, {
61 "path": "pages/exam/payment", 63 "path": "pages/exam/payment",
62 "style": { 64 "style": {
63 "navigationBarTitleText": "考试缴费单", 65 "navigationBarTitleText": "考试缴费单",
...@@ -94,11 +96,10 @@ ...@@ -94,11 +96,10 @@
94 96
95 }, 97 },
96 { 98 {
97 "path" : "pages/index/newsDetail", 99 "path": "pages/index/newsDetail",
98 "style" : 100 "style": {
99 { 101 "navigationBarTitleText": "通知详情",
100 "navigationBarTitleText" : "通知详情", 102 "enablePullDownRefresh": false
101 "enablePullDownRefresh" : false
102 } 103 }
103 } 104 }
104 ], 105 ],
...@@ -108,674 +109,636 @@ ...@@ -108,674 +109,636 @@
108 "navigationBarBackgroundColor": "#ffffff", 109 "navigationBarBackgroundColor": "#ffffff",
109 "navigationBarTitleText": "中跆协-工作台" 110 "navigationBarTitleText": "中跆协-工作台"
110 }, 111 },
111 "subPackages": [ 112 "subPackages": [{
112 { 113 "root": "login",
113 "root": "login", 114 "pages": [{
114 "pages": [{ 115 "path": "login",
115 "path": "login",
116 "style": {
117 "navigationBarTitleText": "登录",
118 "enablePullDownRefresh": false,
119 "navigationStyle": "custom"
120 }
121 }, {
122 "path": "loginC",
123 "style": {
124 "navigationBarTitleText": "",
125 "enablePullDownRefresh": false,
126 "navigationStyle": "custom"
127 }
128 }, {
129 "path": "register",
130 "style": {
131 "navigationBarTitleText": "注册",
132 "enablePullDownRefresh": false,
133 "navigationStyle": "custom"
134 }
135 }]
136 },
137 {
138 "root": "personal",
139 "pages": [
140 {
141 "path": "addVip_per",
142 "style": {
143 "navigationBarTitleText": "个人会员申请",
144 "enablePullDownRefresh": false
145 }
146 },
147 {
148 "path" : "goPay_per",
149 "style" :
150 {
151 "navigationBarTitleText" : "付款详情",
152 "enablePullDownRefresh" : false
153 }
154 },
155 {
156 "path" : "submitPay",
157 "style" :
158 {
159 "navigationBarTitleText" : "确认支付",
160 "enablePullDownRefresh" : false
161 }
162 },
163 {
164 "path" : "sucPay",
165 "style" :
166 {
167 "navigationBarTitleText" : "支付详情",
168 "enablePullDownRefresh" : false
169 }
170 },
171 {
172 "path" : "home",
173 "style" :
174 {
175 "navigationBarTitleText" : "个人会员中心",
176 "enablePullDownRefresh" : false
177 }
178 }
179 ]
180 },
181 {
182 "root": "personalVip",
183 "pages": [
184 {
185 "path": "addVip",
186 "style": {
187 "navigationBarTitleText": "添加会员",
188 "enablePullDownRefresh": false
189 }
190 },
191 {
192 "path": "renew",
193 "style": {
194 "navigationBarTitleText": "会员缴费",
195 "enablePullDownRefresh": false
196 }
197 }, {
198 "path": "vipList",
199 "style": {
200 "navigationBarTitleText": "会员列表",
201 "enablePullDownRefresh": false
202 }
203 }, {
204 "path": "list",
205 "style": {
206 "navigationBarTitleText": "会员查询",
207 "enablePullDownRefresh": false
208 }
209 }, {
210 "path": "detail",
211 "style": {
212 "navigationBarTitleText": "会员信息",
213 "enablePullDownRefresh": false
214 }
215 }, {
216 "path": "editVip",
217 "style": {
218 "navigationBarTitleText": "编辑会员",
219 "enablePullDownRefresh": false
220 }
221 }, {
222 "path": "audit",
223 "style": {
224 "navigationBarTitleText": "缴费审批",
225 "enablePullDownRefresh": false
226 }
227 }, {
228 "path": "payment",
229 "style": {
230 "navigationBarTitleText": "会员缴费",
231 "enablePullDownRefresh": false
232 }
233 }, {
234 "path": "paymentDetail",
235 "style": {
236 "navigationBarTitleText": "缴费详情",
237 "enablePullDownRefresh": false
238 }
239 }, {
240 "path": "auditDetail",
241 "style": {
242 "navigationBarTitleText": "会员缴费详情",
243 "enablePullDownRefresh": false
244 }
245 }, {
246 "path": "feeBill",
247 "style": {
248 "navigationBarTitleText": "会员缴费单",
249 "enablePullDownRefresh": false
250 }
251 }, {
252 "path": "feeBillDetail",
253 "style": {
254 "navigationBarTitleText": "缴费单详情",
255 "enablePullDownRefresh": false
256 }
257 }, {
258 "path": "mobilize",
259 "style": {
260 "navigationBarTitleText": "会员调动",
261 "enablePullDownRefresh": false
262 }
263 }, {
264 "path": "mobilizeDetail",
265 "style": {
266 "navigationBarTitleText": "会员调动详情",
267 "enablePullDownRefresh": false
268 }
269 }, {
270 "path": "addMobilize",
271 "style": {
272 "navigationBarTitleText": "新建调动",
273 "enablePullDownRefresh": false
274 }
275 }, {
276 "path": "sheng/merge",
277 "style": {
278 "navigationBarTitleText": "合并",
279 "enablePullDownRefresh": false
280 }
281 }, {
282 "path": "sheng/mergeUp",
283 "style": {
284 "navigationBarTitleText": "提交",
285 "enablePullDownRefresh": false
286 }
287 }, {
288 "path": "sheng/mergeUpDetail",
289 "style": {
290 "navigationBarTitleText": "提交详情",
291 "enablePullDownRefresh": false
292 }
293 }, {
294 "path": "payPersonList",
295 "style": {
296 "navigationBarTitleText": "会员缴费人员列表",
297 "enablePullDownRefresh": false
298 }
299 },
300 {
301 "path" : "changeVip",
302 "style" :
303 {
304 "navigationBarTitleText" : "会员信息变更",
305 "enablePullDownRefresh" : false
306 }
307 },
308 {
309 "path" : "addChange",
310 "style" :
311 {
312 "navigationBarTitleText" : "新增变更",
313 "enablePullDownRefresh" : false
314 }
315 },
316 {
317 "path" : "changeVipDetail",
318 "style" :
319 {
320 "navigationBarTitleText" : "详情",
321 "enablePullDownRefresh" : false
322 }
323 },
324 {
325 "path" : "changeVipAudit",
326 "style" :
327 {
328 "navigationBarTitleText" : "会员信息变更审核",
329 "enablePullDownRefresh" : false
330 }
331 },
332 {
333 "path" : "changeLevel",
334 "style" :
335 {
336 "navigationBarTitleText" : "级位变更审核",
337 "enablePullDownRefresh" : false
338 }
339 },
340 {
341 "path" : "addChangeLevel",
342 "style" :
343 {
344 "navigationBarTitleText" : "新建级位变更",
345 "enablePullDownRefresh" : false
346 }
347 },
348 {
349 "path" : "changeLevelDetail",
350 "style" :
351 {
352 "navigationBarTitleText" : "级位变更详情",
353 "enablePullDownRefresh" : false
354 }
355 },
356 {
357 "path" : "changeLevelAudit",
358 "style" :
359 {
360 "navigationBarTitleText" : "级位变更审批",
361 "enablePullDownRefresh" : false
362 }
363 },
364 {
365 "path" : "changeVipChoseList",
366 "style" :
367 {
368 "navigationBarTitleText" : "在线选择",
369 "enablePullDownRefresh" : false
370 }
371 },
372 {
373 "path" : "mergeVip",
374 "style" :
375 {
376 "navigationBarTitleText" : "信息合并",
377 "enablePullDownRefresh" : false
378 }
379 },
380 {
381 "path" : "addMerge",
382 "style" :
383 {
384 "navigationBarTitleText" : "新建信息合并",
385 "enablePullDownRefresh" : false
386 }
387 },
388 {
389 "path" : "mergeVipDetail",
390 "style" :
391 {
392 "navigationBarTitleText" : "合并信息详情",
393 "enablePullDownRefresh" : false
394 }
395 },
396 {
397 "path" : "mergeVipChoseList",
398 "style" :
399 {
400 "navigationBarTitleText" : "在线选择",
401 "enablePullDownRefresh" : false
402 }
403 },
404 {
405 "path" : "mergeVipAudit",
406 "style" :
407 {
408 "navigationBarTitleText" : "合并审核",
409 "enablePullDownRefresh" : false
410 }
411 },
412 {
413 "path" : "monthFee",
414 "style" :
415 {
416 "navigationBarTitleText" : "月结缴费",
417 "enablePullDownRefresh" : false
418 }
419 },
420 {
421 "path" : "webview/webview",
422 "style" :
423 {
424 "navigationBarTitleText" : "下载",
425 "enablePullDownRefresh" : false
426 }
427 },
428 {
429 "path" : "monthFeeDetail",
430 "style" :
431 {
432 "navigationBarTitleText" : "月结详情",
433 "enablePullDownRefresh" : false
434 }
435 }]
436 }, {
437 "root": "group",
438 "pages": [{
439 "path": "addGroupMemberPay",
440 "style": {
441 "navigationBarTitleText": "添加缴费",
442 "enablePullDownRefresh": false
443 }
444
445 }, {
446 "path": "apply/mergeUpDetail",
447 "style": {
448 "navigationBarTitleText": "缴费详情",
449 "enablePullDownRefresh": false
450 }
451
452 }, {
453 "path": "pay",
454 "style": { 116 "style": {
455 "navigationBarTitleText": "团队会员认证", 117 "navigationBarTitleText": "登录",
456 "enablePullDownRefresh": false 118 "enablePullDownRefresh": false,
119 "navigationStyle": "custom"
457 } 120 }
458 }, { 121 }, {
459 "path": "payDetail", 122 "path": "loginC",
460 "style": { 123 "style": {
461 "navigationBarTitleText": "认证详情", 124 "navigationBarTitleText": "",
462 "enablePullDownRefresh": false 125 "enablePullDownRefresh": false,
126 "navigationStyle": "custom"
463 } 127 }
464 }, { 128 }, {
465 "path": "apply/merge", 129 "path": "register",
466 "style": {
467 "navigationBarTitleText": "合并",
468 "enablePullDownRefresh": false
469 }
470
471 }, {
472 "path": "apply/mergeUp",
473 "style": {
474 "navigationBarTitleText": "提交",
475 "enablePullDownRefresh": false
476 }
477
478 }, {
479 "path": "apply/applyDetail",
480 "style": {
481 "navigationBarTitleText": "团体会员审核详情",
482 "enablePullDownRefresh": false
483 }
484
485 }, {
486 "path": "apply/record",
487 "style": {
488 "navigationBarTitleText": "审核记录",
489 "enablePullDownRefresh": false
490 }
491
492 },{
493 "path": "list",
494 "style": { 130 "style": {
495 "navigationBarTitleText": "团体会员", 131 "navigationBarTitleText": "注册",
496 "enablePullDownRefresh": false 132 "enablePullDownRefresh": false,
133 "navigationStyle": "custom"
497 } 134 }
498 135 }]
499 }, {
500 "path": "detail",
501 "style": {
502 "navigationBarTitleText": "机构会员",
503 "enablePullDownRefresh": false
504 }
505
506 }, {
507 "path": "feeBill",
508 "style": {
509 "navigationBarTitleText": "团体会员缴费单",
510 "enablePullDownRefresh": false
511 }
512 }, {
513 "path": "feeBillDetail",
514 "style": {
515 "navigationBarTitleText": "缴费单详情",
516 "enablePullDownRefresh": false
517 }
518
519 }, {
520 "path": "apply/applyList",
521 "style": {
522 "navigationBarTitleText": "团体会员审核",
523 "enablePullDownRefresh": false
524 }
525
526 },{
527 "path": "vipList",
528 "style": {
529 "navigationBarTitleText": "会员列表",
530 "enablePullDownRefresh": false
531 }
532 },
533 {
534 "path" : "changeGroupInfo",
535 "style" :
536 {
537 "navigationBarTitleText" : "团体会员信息修改",
538 "enablePullDownRefresh" : false
539 }
540 },
541 {
542 "path" : "changeGroupAudit",
543 "style" :
544 {
545 "navigationBarTitleText" : "团体信息变更审核",
546 "enablePullDownRefresh" : false
547 }
548 },
549 {
550 "path" : "changeGroupDetail",
551 "style" :
552 {
553 "navigationBarTitleText" : "团体信息变更详情",
554 "enablePullDownRefresh" : false
555 }
556 },
557 {
558 "path" : "newChange",
559 "style" :
560 {
561 "navigationBarTitleText" : "新建团体信息变更",
562 "enablePullDownRefresh" : false
563 }
564 }, 136 },
565 { 137 {
566 "path" : "groupInfo", 138 "root": "personal",
567 "style" : 139 "pages": [{
568 { 140 "path": "addVip_per",
569 "navigationBarTitleText" : "机构资料", 141 "style": {
570 "enablePullDownRefresh" : false 142 "navigationBarTitleText": "个人会员申请",
571 } 143 "enablePullDownRefresh": false
572 }, 144 }
573 { 145 },
574 "path" : "changeGroupChoseList", 146 {
575 "style" : 147 "path": "goPay_per",
576 { 148 "style": {
577 "navigationBarTitleText" : "在线选择", 149 "navigationBarTitleText": "付款详情",
578 "enablePullDownRefresh" : false 150 "enablePullDownRefresh": false
579 } 151 }
580 }] 152 },
581 },{ 153 {
582 "root": "level", 154 "path": "submitPay",
583 "pages":[{ 155 "style": {
584 "path": "ztx/examList", 156 "navigationBarTitleText": "确认支付",
585 "style": { 157 "enablePullDownRefresh": false
586 "navigationBarTitleText": "级位考试详情", 158 }
587 "enablePullDownRefresh": false 159 },
588 } 160 {
589 161 "path": "sucPay",
590 }, { 162 "style": {
591 "path": "ztx/studentList", 163 "navigationBarTitleText": "支付详情",
592 "style": { 164 "enablePullDownRefresh": false
593 "navigationBarTitleText": "考生列表", 165 }
594 "enablePullDownRefresh": false 166 },
595 } 167 {
596 168 "path": "home",
597 }, { 169 "style": {
598 "path": "payment", 170 "navigationBarTitleText": "个人会员中心",
599 "style": { 171 "enablePullDownRefresh": false
600 "navigationBarTitleText": "级位考试缴费单", 172 }
601 "enablePullDownRefresh": false 173 }
602 } 174 ]
603
604 },{
605 "path": "apply",
606 "style": {
607 "navigationBarTitleText": "级位考试申请",
608 "enablePullDownRefresh": false
609 }
610
611 }, {
612 "path": "applyDetail",
613 "style": {
614 "navigationBarTitleText": "级位考试详情",
615 "enablePullDownRefresh": false
616 }
617
618 }, {
619 "path": "addApply",
620 "style": {
621 "navigationBarTitleText": "编辑级位考试",
622 "enablePullDownRefresh": false
623 }
624
625 }, {
626 "path": "chooseExaminer",
627 "style": {
628 "navigationBarTitleText": "选择考官",
629 "enablePullDownRefresh": false
630 }
631
632 }, {
633 "path": "merge",
634 "style": {
635 "navigationBarTitleText": "合并",
636 "enablePullDownRefresh": false
637 }
638
639 }, {
640 "path": "mergeUp",
641 "style": {
642 "navigationBarTitleText": "提交",
643 "enablePullDownRefresh": false
644 }
645
646 }, {
647 "path": "mergeUpDetail",
648 "style": {
649 "navigationBarTitleText": "考试详情",
650 "enablePullDownRefresh": false
651 }
652
653 }, {
654 "path": "approval",
655 "style": {
656 "navigationBarTitleText": "级位考试审批",
657 "enablePullDownRefresh": false
658 }
659
660 }, {
661 "path": "ztx/approval",
662 "style": {
663 "navigationBarTitleText": "级位考试审批",
664 "enablePullDownRefresh": false
665 }
666
667 }, {
668 "path": "ztx/cert",
669 "style": {
670 "navigationBarTitleText": "证书发布",
671 "enablePullDownRefresh": false
672 }
673
674 }, 175 },
675 { 176 {
676 "path": "examStudentList", 177 "root": "personalVip",
677 "style": { 178 "pages": [{
678 "navigationBarTitleText": "考生信息", 179 "path": "addVip",
679 "enablePullDownRefresh": false 180 "style": {
680 } 181 "navigationBarTitleText": "添加会员",
681 }] 182 "enablePullDownRefresh": false
682 },{ 183 }
683 "root": "myCenter", 184 },
684 "pages": [
685 {
686 "path" : "index",
687 "style" :
688 {
689 "navigationBarTitleText" : "个人中心",
690 "enablePullDownRefresh" : false
691 }
692 },
693 {
694 "path" : "teamInfo",
695 "style" :
696 { 185 {
697 "navigationBarTitleText" : "团体信息", 186 "path": "renew",
698 "enablePullDownRefresh" : false 187 "style": {
699 } 188 "navigationBarTitleText": "会员缴费",
700 }, 189 "enablePullDownRefresh": false
701 { 190 }
702 "path" : "auth", 191 }, {
703 "style" : 192 "path": "vipList",
193 "style": {
194 "navigationBarTitleText": "会员列表",
195 "enablePullDownRefresh": false
196 }
197 }, {
198 "path": "list",
199 "style": {
200 "navigationBarTitleText": "会员查询",
201 "enablePullDownRefresh": false
202 }
203 }, {
204 "path": "detail",
205 "style": {
206 "navigationBarTitleText": "会员信息",
207 "enablePullDownRefresh": false
208 }
209 }, {
210 "path": "editVip",
211 "style": {
212 "navigationBarTitleText": "编辑会员",
213 "enablePullDownRefresh": false
214 }
215 }, {
216 "path": "audit",
217 "style": {
218 "navigationBarTitleText": "缴费审批",
219 "enablePullDownRefresh": false
220 }
221 }, {
222 "path": "payment",
223 "style": {
224 "navigationBarTitleText": "会员缴费",
225 "enablePullDownRefresh": false
226 }
227 }, {
228 "path": "paymentDetail",
229 "style": {
230 "navigationBarTitleText": "缴费详情",
231 "enablePullDownRefresh": false
232 }
233 }, {
234 "path": "auditDetail",
235 "style": {
236 "navigationBarTitleText": "会员缴费详情",
237 "enablePullDownRefresh": false
238 }
239 }, {
240 "path": "feeBill",
241 "style": {
242 "navigationBarTitleText": "会员缴费单",
243 "enablePullDownRefresh": false
244 }
245 }, {
246 "path": "feeBillDetail",
247 "style": {
248 "navigationBarTitleText": "缴费单详情",
249 "enablePullDownRefresh": false
250 }
251 }, {
252 "path": "mobilize",
253 "style": {
254 "navigationBarTitleText": "会员调动",
255 "enablePullDownRefresh": false
256 }
257 }, {
258 "path": "mobilizeDetail",
259 "style": {
260 "navigationBarTitleText": "会员调动详情",
261 "enablePullDownRefresh": false
262 }
263 }, {
264 "path": "addMobilize",
265 "style": {
266 "navigationBarTitleText": "新建调动",
267 "enablePullDownRefresh": false
268 }
269 }, {
270 "path": "sheng/merge",
271 "style": {
272 "navigationBarTitleText": "合并",
273 "enablePullDownRefresh": false
274 }
275 }, {
276 "path": "sheng/mergeUp",
277 "style": {
278 "navigationBarTitleText": "提交",
279 "enablePullDownRefresh": false
280 }
281 }, {
282 "path": "sheng/mergeUpDetail",
283 "style": {
284 "navigationBarTitleText": "提交详情",
285 "enablePullDownRefresh": false
286 }
287 }, {
288 "path": "payPersonList",
289 "style": {
290 "navigationBarTitleText": "会员缴费人员列表",
291 "enablePullDownRefresh": false
292 }
293 },
704 { 294 {
705 "navigationBarTitleText" : "会员认证", 295 "path": "changeVip",
706 "enablePullDownRefresh" : false 296 "style": {
707 } 297 "navigationBarTitleText": "会员信息变更",
708 }, 298 "enablePullDownRefresh": false
709 { 299 }
710 "path" : "safe", 300 },
711 "style" :
712 { 301 {
713 "navigationBarTitleText" : "账号与安全", 302 "path": "addChange",
714 "enablePullDownRefresh" : false 303 "style": {
715 } 304 "navigationBarTitleText": "新增变更",
716 }, 305 "enablePullDownRefresh": false
717 { 306 }
718 "path" : "reviewList", 307 },
719 "style" :
720 { 308 {
721 "navigationBarTitleText" : "审核详情", 309 "path": "changeVipDetail",
722 "enablePullDownRefresh" : false 310 "style": {
723 } 311 "navigationBarTitleText": "详情",
724 }, 312 "enablePullDownRefresh": false
725 { 313 }
726 "path" : "perfect", 314 },
727 "style" :
728 { 315 {
729 "navigationBarTitleText" : "团体会员缴费", 316 "path": "changeVipAudit",
730 "enablePullDownRefresh" : false 317 "style": {
731 } 318 "navigationBarTitleText": "会员信息变更审核",
732 }, 319 "enablePullDownRefresh": false
733 { 320 }
734 "path" : "goPay", 321 },
735 "style" :
736 { 322 {
737 "navigationBarTitleText" : "付款详情", 323 "path": "changeLevel",
738 "enablePullDownRefresh" : false 324 "style": {
739 } 325 "navigationBarTitleText": "级位变更审核",
740 }, 326 "enablePullDownRefresh": false
741 { 327 }
742 "path" : "examPointApply", 328 },
743 "style" : 329 {
330 "path": "addChangeLevel",
331 "style": {
332 "navigationBarTitleText": "新建级位变更",
333 "enablePullDownRefresh": false
334 }
335 },
336 {
337 "path": "changeLevelDetail",
338 "style": {
339 "navigationBarTitleText": "级位变更详情",
340 "enablePullDownRefresh": false
341 }
342 },
343 {
344 "path": "changeLevelAudit",
345 "style": {
346 "navigationBarTitleText": "级位变更审批",
347 "enablePullDownRefresh": false
348 }
349 },
350 {
351 "path": "changeVipChoseList",
352 "style": {
353 "navigationBarTitleText": "在线选择",
354 "enablePullDownRefresh": false
355 }
356 },
357 {
358 "path": "mergeVip",
359 "style": {
360 "navigationBarTitleText": "信息合并",
361 "enablePullDownRefresh": false
362 }
363 },
364 {
365 "path": "addMerge",
366 "style": {
367 "navigationBarTitleText": "新建信息合并",
368 "enablePullDownRefresh": false
369 }
370 },
371 {
372 "path": "mergeVipDetail",
373 "style": {
374 "navigationBarTitleText": "合并信息详情",
375 "enablePullDownRefresh": false
376 }
377 },
378 {
379 "path": "mergeVipChoseList",
380 "style": {
381 "navigationBarTitleText": "在线选择",
382 "enablePullDownRefresh": false
383 }
384 },
744 { 385 {
745 "navigationBarTitleText" : "申请考点", 386 "path": "mergeVipAudit",
746 "enablePullDownRefresh" : false 387 "style": {
388 "navigationBarTitleText": "合并审核",
389 "enablePullDownRefresh": false
390 }
391 },
392 {
393 "path": "monthFee",
394 "style": {
395 "navigationBarTitleText": "月结缴费",
396 "enablePullDownRefresh": false
397 }
398 },
399 {
400 "path": "webview/webview",
401 "style": {
402 "navigationBarTitleText": "下载",
403 "enablePullDownRefresh": false
404 }
405 },
406 {
407 "path": "monthFeeDetail",
408 "style": {
409 "navigationBarTitleText": "月结详情",
410 "enablePullDownRefresh": false
411 }
747 } 412 }
748 }, 413 ]
749 { 414 }, {
750 "path" : "chooseExaminer", 415 "root": "group",
751 "style" : 416 "pages": [{
417 "path": "addGroupMemberPay",
418 "style": {
419 "navigationBarTitleText": "添加缴费",
420 "enablePullDownRefresh": false
421 }
422
423 }, {
424 "path": "apply/mergeUpDetail",
425 "style": {
426 "navigationBarTitleText": "缴费详情",
427 "enablePullDownRefresh": false
428 }
429
430 }, {
431 "path": "pay",
432 "style": {
433 "navigationBarTitleText": "团队会员认证",
434 "enablePullDownRefresh": false
435 }
436 }, {
437 "path": "payDetail",
438 "style": {
439 "navigationBarTitleText": "认证详情",
440 "enablePullDownRefresh": false
441 }
442 }, {
443 "path": "apply/merge",
444 "style": {
445 "navigationBarTitleText": "合并",
446 "enablePullDownRefresh": false
447 }
448
449 }, {
450 "path": "apply/mergeUp",
451 "style": {
452 "navigationBarTitleText": "提交",
453 "enablePullDownRefresh": false
454 }
455
456 }, {
457 "path": "apply/applyDetail",
458 "style": {
459 "navigationBarTitleText": "团体会员审核详情",
460 "enablePullDownRefresh": false
461 }
462
463 }, {
464 "path": "apply/record",
465 "style": {
466 "navigationBarTitleText": "审核记录",
467 "enablePullDownRefresh": false
468 }
469
470 }, {
471 "path": "list",
472 "style": {
473 "navigationBarTitleText": "团体会员",
474 "enablePullDownRefresh": false
475 }
476
477 }, {
478 "path": "detail",
479 "style": {
480 "navigationBarTitleText": "机构会员",
481 "enablePullDownRefresh": false
482 }
483
484 }, {
485 "path": "feeBill",
486 "style": {
487 "navigationBarTitleText": "团体会员缴费单",
488 "enablePullDownRefresh": false
489 }
490 }, {
491 "path": "feeBillDetail",
492 "style": {
493 "navigationBarTitleText": "缴费单详情",
494 "enablePullDownRefresh": false
495 }
496
497 }, {
498 "path": "apply/applyList",
499 "style": {
500 "navigationBarTitleText": "团体会员审核",
501 "enablePullDownRefresh": false
502 }
503
504 }, {
505 "path": "vipList",
506 "style": {
507 "navigationBarTitleText": "会员列表",
508 "enablePullDownRefresh": false
509 }
510 },
511 {
512 "path": "changeGroupInfo",
513 "style": {
514 "navigationBarTitleText": "团体会员信息修改",
515 "enablePullDownRefresh": false
516 }
517 },
518 {
519 "path": "changeGroupAudit",
520 "style": {
521 "navigationBarTitleText": "团体信息变更审核",
522 "enablePullDownRefresh": false
523 }
524 },
752 { 525 {
753 "navigationBarTitleText" : "选择考官", 526 "path": "changeGroupDetail",
754 "enablePullDownRefresh" : false 527 "style": {
528 "navigationBarTitleText": "团体信息变更详情",
529 "enablePullDownRefresh": false
530 }
531 },
532 {
533 "path": "newChange",
534 "style": {
535 "navigationBarTitleText": "新建团体信息变更",
536 "enablePullDownRefresh": false
537 }
538 },
539 {
540 "path": "groupInfo",
541 "style": {
542 "navigationBarTitleText": "机构资料",
543 "enablePullDownRefresh": false
544 }
545 },
546 {
547 "path": "changeGroupChoseList",
548 "style": {
549 "navigationBarTitleText": "在线选择",
550 "enablePullDownRefresh": false
551 }
755 } 552 }
756 }, 553 ]
757 { 554 }, {
758 "path" : "sucPay", 555 "root": "level",
759 "style" : 556 "pages": [{
557 "path": "ztx/examList",
558 "style": {
559 "navigationBarTitleText": "级位考试详情",
560 "enablePullDownRefresh": false
561 }
562
563 }, {
564 "path": "ztx/studentList",
565 "style": {
566 "navigationBarTitleText": "考生列表",
567 "enablePullDownRefresh": false
568 }
569
570 }, {
571 "path": "payment",
572 "style": {
573 "navigationBarTitleText": "级位考试缴费单",
574 "enablePullDownRefresh": false
575 }
576
577 }, {
578 "path": "apply",
579 "style": {
580 "navigationBarTitleText": "级位考试申请",
581 "enablePullDownRefresh": false
582 }
583
584 }, {
585 "path": "applyDetail",
586 "style": {
587 "navigationBarTitleText": "级位考试详情",
588 "enablePullDownRefresh": false
589 }
590
591 }, {
592 "path": "addApply",
593 "style": {
594 "navigationBarTitleText": "编辑级位考试",
595 "enablePullDownRefresh": false
596 }
597
598 }, {
599 "path": "chooseExaminer",
600 "style": {
601 "navigationBarTitleText": "选择考官",
602 "enablePullDownRefresh": false
603 }
604
605 }, {
606 "path": "merge",
607 "style": {
608 "navigationBarTitleText": "合并",
609 "enablePullDownRefresh": false
610 }
611
612 }, {
613 "path": "mergeUp",
614 "style": {
615 "navigationBarTitleText": "提交",
616 "enablePullDownRefresh": false
617 }
618
619 }, {
620 "path": "mergeUpDetail",
621 "style": {
622 "navigationBarTitleText": "考试详情",
623 "enablePullDownRefresh": false
624 }
625
626 }, {
627 "path": "approval",
628 "style": {
629 "navigationBarTitleText": "级位考试审批",
630 "enablePullDownRefresh": false
631 }
632
633 }, {
634 "path": "ztx/approval",
635 "style": {
636 "navigationBarTitleText": "级位考试审批",
637 "enablePullDownRefresh": false
638 }
639
640 }, {
641 "path": "ztx/cert",
642 "style": {
643 "navigationBarTitleText": "证书发布",
644 "enablePullDownRefresh": false
645 }
646
647 },
760 { 648 {
761 "navigationBarTitleText" : "支付成功", 649 "path": "examStudentList",
762 "enablePullDownRefresh" : false 650 "style": {
651 "navigationBarTitleText": "考生信息",
652 "enablePullDownRefresh": false
653 }
763 } 654 }
764 }, 655 ]
765 { 656 }, {
766 "path" : "payOrder", 657 "root": "myCenter",
767 "style" : 658 "pages": [{
659 "path": "index",
660 "style": {
661 "navigationBarTitleText": "个人中心",
662 "enablePullDownRefresh": false
663 }
664 },
665 {
666 "path": "teamInfo",
667 "style": {
668 "navigationBarTitleText": "团体信息",
669 "enablePullDownRefresh": false
670 }
671 },
672 {
673 "path": "auth",
674 "style": {
675 "navigationBarTitleText": "会员认证",
676 "enablePullDownRefresh": false
677 }
678 },
768 { 679 {
769 "navigationBarTitleText" : "支付详情", 680 "path": "safe",
770 "enablePullDownRefresh" : false 681 "style": {
682 "navigationBarTitleText": "账号与安全",
683 "enablePullDownRefresh": false
684 }
685 },
686 {
687 "path": "reviewList",
688 "style": {
689 "navigationBarTitleText": "审核详情",
690 "enablePullDownRefresh": false
691 }
692 },
693 {
694 "path": "perfect",
695 "style": {
696 "navigationBarTitleText": "团体会员缴费",
697 "enablePullDownRefresh": false
698 }
699 },
700 {
701 "path": "goPay",
702 "style": {
703 "navigationBarTitleText": "付款详情",
704 "enablePullDownRefresh": false
705 }
706 },
707 {
708 "path": "examPointApply",
709 "style": {
710 "navigationBarTitleText": "申请考点",
711 "enablePullDownRefresh": false
712 }
713 },
714 {
715 "path": "chooseExaminer",
716 "style": {
717 "navigationBarTitleText": "选择考官",
718 "enablePullDownRefresh": false
719 }
720 },
721 {
722 "path": "sucPay",
723 "style": {
724 "navigationBarTitleText": "支付成功",
725 "enablePullDownRefresh": false
726 }
727 },
728 {
729 "path": "payOrder",
730 "style": {
731 "navigationBarTitleText": "支付详情",
732 "enablePullDownRefresh": false
733 }
771 } 734 }
772 } 735 ]
773 ] 736 }
774 }], 737 ],
775 "preloadRule": { 738 "preloadRule": {
776 "pages/index/index": { 739 "pages/index/index": {
777 "network": "all", 740 "network": "all",
778 "packages": ["login","personalVip", "group","level","myCenter","personal"] 741 "packages": ["login", "personalVip", "group", "level", "myCenter", "personal"]
779 } 742 }
780 } 743 }
781 } 744 }
...\ No newline at end of file ...\ No newline at end of file
......
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 <template> 1 <template>
2 <view class="mainbox"> 2 <view class="mainbox">
3 <view class="title">{{form.name}}</view> 3 <view class="title">{{form.name}}</view>
4 <view class="infos"> 4 <view class="infos">
5 <text>{{ form.source }}</text> 5 <text>{{ form.source }}</text>
6 <text>{{ form.belongTime }}</text> 6 <text>{{ form.belongTime }}</text>
7 </view> 7 </view>
8 <view class="content"> 8 <view class="content">
9 9
10 <view v-html="form.content"></view> 10 <view v-html="form.content"></view>
11 11
12 <view v-if="attachmentMp4.length>0"> 12 <view v-if="attachmentMp4.length>0">
13 <video v-for="(f,index) in attachmentMp4" :key="index" controls :src="config.baseUrl_api + f.url"></video> 13 <video v-for="(f,index) in attachmentMp4" :key="index" controls
14 </view> 14 :src="config.baseUrl_api + f.url"></video>
15 <view v-if="attachmentFile.length>0" class="mt20"> 15 </view>
16 <!-- 附件--> 16 <view v-if="attachmentFile.length>0" class="mt20">
17 <view class="fwb mt20">附件下载:</view> 17 <!-- 附件-->
18 <view v-for="(f,index) in attachmentFile" :key="index" class="text-primary underLine" 18 <view class="fwb mt20">附件下载:</view>
19 @click="downLoad(f.url)"> 19 <view v-for="(f,index) in attachmentFile" :key="index" class="text-primary underLine"
20 {{ index + 1 }}{{ f.name }} 20 @click="downLoad(f.url)">
21 </view> 21 {{ index + 1 }}{{ f.name }}
22 22 </view>
23 </view> 23
24 <view> 24 </view>
25 <text v-if=" form.author">发布人:{{ form.author }}</text> 25 <view>
26 </view> 26 <text v-if=" form.author">发布人:{{ form.author }}</text>
27 </view> 27 </view>
28 </view> 28 </view>
29 </template> 29 </view>
30 30 </template>
31 <script setup> 31
32 import { 32 <script setup>
33 ref 33 import {
34 } from 'vue' 34 ref
35 import * as api from '@/common/api.js'; 35 } from 'vue'
36 import { 36 import * as api from '@/common/api.js';
37 onLoad 37 import {
38 } from '@dcloudio/uni-app'; 38 onLoad
39 import _ from 'underscore' 39 } from '@dcloudio/uni-app';
40 import config from '@/config.js' 40 import _ from 'underscore'
41 const form = ref({}) 41 import config from '@/config.js'
42 const attachmentFile = ref([]) 42 const form = ref({})
43 const attachmentMp4 = ref([]) 43 const attachmentFile = ref([])
44 44 const attachmentMp4 = ref([])
45 onLoad((option) => { 45
46 getData(option.noteId) 46 onLoad((option) => {
47 }) 47 getData(option.noteId)
48 48 })
49 function getData(noteId) { 49
50 api.getNewsById(noteId).then(res => { 50 function getData(noteId) {
51 form.value = res.data 51 api.getNewsById(noteId).then(res => {
52 var html = res.data.content.replace(/<img([\s\w"-=\/\.:;]+)((?:(height="[^"]+")))/ig, '<img$1') 52 form.value = res.data
53 .replace(/<img([\s\w"-=\/\.:;]+)((?:(width="[^"]+")))/ig, '<img$1') 53 var html = res.data.content.replace(/<img([\s\w"-=\/\.:;]+)((?:(height="[^"]+")))/ig, '<img$1')
54 .replace(/<img([\s\w"-=\/\.:;]+)((?:(style="[^"]+")))/ig, '<img$1') 54 .replace(/<img([\s\w"-=\/\.:;]+)((?:(width="[^"]+")))/ig, '<img$1')
55 .replace(/<img([\s\w"-=\/\.:;]+)((?:(alt="[^"]+")))/ig, '<img$1') 55 .replace(/<img([\s\w"-=\/\.:;]+)((?:(style="[^"]+")))/ig, '<img$1')
56 .replace(/<img([\s\w"-=\/\.:;]+)/ig, '<img style="width: 100%;" $1'); 56 .replace(/<img([\s\w"-=\/\.:;]+)((?:(alt="[^"]+")))/ig, '<img$1')
57 57 .replace(/<img([\s\w"-=\/\.:;]+)/ig, '<img style="width: 100%;" $1');
58 58
59 if (form.value.attacthJson) { 59
60 const attachment = JSON.parse(form.value.attacthJson) 60 if (form.value.attacthJson) {
61 attachmentFile.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') === -1) || [] 61 const attachment = JSON.parse(form.value.attacthJson)
62 attachmentMp4.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') !== -1) || [] 62 attachmentFile.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') === -1) ||
63 } 63 []
64 }) 64 attachmentMp4.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') !== -1) || []
65 } 65 }
66 function downLoad(url){ 66 })
67 console.log(url) 67 }
68 var str = config.baseUrl_api + url 68
69 if (url.indexOf('png') > -1 ||url.indexOf('jpg') > -1 ||url.indexOf('jpeg') > -1) { 69 function downLoad(url) {
70 uni.previewImage({ 70 console.log(url)
71 urls: [str], 71 var str = config.baseUrl_api + url
72 success: function(res) { 72 if (url.indexOf('png') > -1 || url.indexOf('jpg') > -1 || url.indexOf('jpeg') > -1) {
73 console.log('success', res) 73 uni.previewImage({
74 }, 74 urls: [str],
75 fail: function(res) { 75 success: function(res) {
76 console.log('fail', res) 76 console.log('success', res)
77 }, 77 },
78 complete: function(res) { 78 fail: function(res) {
79 console.log('complete', res) 79 console.log('fail', res)
80 } 80 },
81 }) 81 complete: function(res) {
82 } else { 82 console.log('complete', res)
83 goWebView(str) 83 }
84 } 84 })
85 } 85 } else {
86 function goWebView(url) { 86 goWebView(str)
87 url = url.replace("http://", "https://") 87 }
88 uni.showLoading({ 88 }
89 title: '下载中' 89
90 }); 90 function goWebView(url) {
91 uni.downloadFile({ 91 url = url.replace("http://", "https://")
92 url: url, 92 uni.showLoading({
93 success: function(res) { 93 title: '下载中'
94 console.log('111') 94 });
95 uni.hideLoading(); 95 uni.downloadFile({
96 var filePath = res.tempFilePath; 96 url: url,
97 uni.showLoading({ 97 success: function(res) {
98 title: '正在打开' 98 uni.hideLoading();
99 }); 99 var filePath = res.tempFilePath;
100 uni.openDocument({ 100 uni.showLoading({
101 filePath: filePath, 101 title: '正在打开'
102 showMenu: true, 102 });
103 success: function(res) { 103 uni.openDocument({
104 console.log('222') 104 filePath: filePath,
105 uni.hideLoading(); 105 showMenu: true,
106 }, 106 success: function(res) {
107 fail: function(err) { 107 uni.hideLoading();
108 console.log(err.errMsg) 108 },
109 uni.hideLoading(); 109 fail: function(err) {
110 let msg 110 console.log(err.errMsg)
111 if(err.errMsg.indexOf('not supported')>-1){ 111 uni.hideLoading();
112 msg = '不支持该文件类型' 112 let msg
113 } else { 113 if (err.errMsg.indexOf('not supported') > -1) {
114 msg = err.errMsg 114 msg = '不支持该文件类型'
115 } 115 } else {
116 uni.showToast({ 116 msg = err.errMsg
117 title: msg, 117 }
118 icon: 'none', 118 uni.showToast({
119 duration: 2000 119 title: msg,
120 }); 120 icon: 'none',
121 } 121 duration: 2000
122 }); 122 });
123 }, 123 }
124 fail: function(error) { 124 });
125 uni.hideLoading(); 125 },
126 uni.showToast({ 126 fail: function(error) {
127 title: `下载失败`, 127 uni.hideLoading();
128 icon: 'none', 128 uni.showToast({
129 duration: 2000 129 title: `下载失败`,
130 }); 130 icon: 'none',
131 } 131 duration: 2000
132 }); 132 });
133 } 133 }
134 </script> 134 });
135 135 }
136 <style scoped lang="scss"> 136 </script>
137 .mainbox { 137
138 box-sizing: border-box; 138 <style scoped lang="scss">
139 padding: 50rpx 25rpx 160rpx; 139 .mainbox {
140 background: #fff; 140 box-sizing: border-box;
141 min-height: 100vh; 141 padding: 50rpx 25rpx 160rpx;
142 } 142 background: #fff;
143 .title { 143 min-height: 100vh;
144 font-size: 36rpx; 144 }
145 font-weight: 500; 145
146 color: #29343C; 146 .title {
147 margin-bottom: 34rpx; 147 font-size: 36rpx;
148 } 148 font-weight: 500;
149 149 color: #29343C;
150 .infos { 150 margin-bottom: 34rpx;
151 border-bottom: 1px solid #DCDCDC; 151 }
152 padding-bottom: 40rpx; 152
153 overflow: hidden; 153 .infos {
154 } 154 border-bottom: 1px solid #DCDCDC;
155 155 padding-bottom: 40rpx;
156 .infos>text { 156 overflow: hidden;
157 margin-right: 18rpx; 157 }
158 color: #7B7F83; 158
159 font-size: 22rpx; 159 .infos>text {
160 } 160 margin-right: 18rpx;
161 .content { 161 color: #7B7F83;
162 line-height: 1.6; 162 font-size: 22rpx;
163 color: #4C5359; 163 }
164 font-size: 30rpx; 164
165 padding-top: 40rpx; 165 .content {
166 width: 100%; 166 line-height: 1.6;
167 word-wrap: break-word !important; 167 color: #4C5359;
168 white-space: normal !important; 168 font-size: 30rpx;
169 } 169 padding-top: 40rpx;
170 170 width: 100%;
171 .content rich-text { 171 word-wrap: break-word !important;
172 word-wrap: break-word !important; 172 white-space: normal !important;
173 white-space: normal !important; 173 }
174 } 174
175 175 .content rich-text {
176 .content span, 176 word-wrap: break-word !important;
177 .content p { 177 white-space: normal !important;
178 word-wrap: break-word !important; 178 }
179 white-space: normal !important; 179
180 } 180 .content span,
181 .content rich-text img{max-width: 100%;} 181 .content p {
182 182 word-wrap: break-word !important;
183 image { 183 white-space: normal !important;
184 max-width: 100%; 184 }
185 } 185
186 186 .content rich-text img {
187 audio { 187 max-width: 100%;
188 width: 100%; 188 }
189 } 189
190 190 image {
191 video { 191 max-width: 100%;
192 width: 100%; 192 }
193 } 193
194 audio {
195 width: 100%;
196 }
197
198 video {
199 width: 100%;
200 }
194 </style> 201 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -138,10 +138,10 @@ ...@@ -138,10 +138,10 @@
138 if (orderErr) { 138 if (orderErr) {
139 uni.hideLoading() 139 uni.hideLoading()
140 isPaying.value = false 140 isPaying.value = false
141 uni.showToast({ 141 // uni.showToast({
142 title: '创建订单失败', 142 // title: '创建订单失败',
143 icon: 'none' 143 // icon: 'none'
144 }) 144 // })
145 return 145 return
146 } 146 }
147 147
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
161 isPaying.value = false 161 isPaying.value = false
162 162
163 // 支付成功,跳转页面 163 // 支付成功,跳转页面
164 uni.navigateTo({ 164 uni.redirectTo({
165 url: `/personal/sucPay?orderId=${orderRes.data.orderId}` 165 url: `/personal/sucPay?orderId=${orderRes.data.orderId}`
166 }) 166 })
167 } 167 }
......
1 <template> 1 <template>
2 <view class="page-container"> 2 <view class="page-container">
3 <view class="top-section"> 3 <!-- 会员卡区域 -->
4 <!-- 用户信息 --> 4 <view class="member-card">
5 <view class="user-info"> 5 <image class="card-bg" :src="config.baseUrl_api + '/fs/static/slices/user_01@2x.png'" mode="aspectFill">
6 <view class="avatar"> 6 </image>
7 <view class="avatar-placeholder">📄</view> 7
8 </view> 8 <!-- 绑定/解绑学员 -->
9 <view class="user-desc">注册会员8709745760778985472</view> 9 <view v-if="!isBound" class="bind-student" @click="handleBindAction">
10 </view> 10 <text>{{ isBound ? '解绑' : '绑定学员' }}</text>
11 11 <image class="arrow-icon" :src="config.baseUrl_api + '/fs/static/slices/bd@2x.png'" mode="aspectFit">
12 <!-- 会员卡片 --> 12 </image>
13 <view class="member-card"> 13 </view>
14 <view class="card-header"> 14
15 <view class="card-name">江行知</view> 15 <!-- 用户信息 -->
16 <view class="bind-btn">绑定学员 ⇄</view> 16 <view class="user-section">
17 </view> 17 <view class="user-top">
18 <view class="card-id">证件号:360681201804040811</view> 18 <view class="avatar-wrap">
19 19 <image class="avatar" :src="config.baseUrl_api + '/fs/static/slices/tx@2x.png'"
20 <view class="card-func"> 20 mode="aspectFill">
21 <view class="func-item" @click="goToInfo"> 21 </image>
22 <view class="func-icon"></view> 22 </view>
23 <view class="func-text">人员信息</view> 23 <view class="member-id">{{ userInfo.userName }}</view>
24 </view> 24 </view>
25 <view class="func-item"> 25 <view class="user-bottom">
26 <view class="func-icon"></view> 26 <view class="user-name">{{ perInfo?.perName }}</view>
27 <view class="func-text">参赛能力认证</view> 27 <view class="card-info">
28 </view> 28 <view class="info-row">会员卡号:{{ perInfo?.perCode }}</view>
29 <view class="func-item"> 29 <view class="info-row">会员有效期:{{ perInfo?.perValidDate }}</view>
30 <view class="func-icon">🏆</view> 30 </view>
31 <view class="func-text">成绩查询</view> 31 </view>
32 </view> 32 </view>
33 <view class="func-item"> 33
34 <view class="func-icon"></view> 34 <!-- 已过期印章 -->
35 <view class="func-text">参赛记录</view> 35 <image v-if="perInfo?.perValidDateFlag && perInfo?.perValidDateFlag!='1'" class="expired-stamp"
36 </view> 36 :src="config.baseUrl_api + '/fs/static/slices/end@2x.png'" mode="aspectFit">
37 </view> 37 </image>
38 </view> 38 </view>
39 </view> 39
40 40 <!-- 功能按钮卡片 -->
41 <view class="bottom-section"> 41 <view class="func-card">
42 <view class="info-title"> 42 <view class="func-list">
43 <view class="title-line"></view> 43 <view class="func-item" @click="goToAuth">
44 <text>人员信息</text> 44 <image class="func-icon" :src="config.baseUrl_api + '/fs/static/slices/btn01@2x.png'"
45 </view> 45 mode="aspectFit">
46 46 </image>
47 <view class="info-list"> 47 <text class="func-text">参赛能力认证</text>
48 <view class="info-item"> 48 </view>
49 <view class="item-label">姓名</view> 49 <view class="func-item" @click="goToScore">
50 <view class="item-value">江行知</view> 50 <image class="func-icon" :src="config.baseUrl_api + '/fs/static/slices/btn02@2x.png'"
51 </view> 51 mode="aspectFit">
52 <view class="info-item"> 52 </image>
53 <view class="item-label">国籍</view> 53 <text class="func-text">成绩查询</text>
54 <view class="item-value">中国</view> 54 </view>
55 </view> 55 <view class="func-item" @click="goToRecord">
56 <view class="info-item"> 56 <image class="func-icon" :src="config.baseUrl_api + '/fs/static/slices/btn03@2x.png'"
57 <view class="item-label">证件类型</view> 57 mode="aspectFit">
58 <view class="item-value">身份证</view> 58 </image>
59 </view> 59 <text class="func-text">参赛记录</text>
60 <view class="info-item"> 60 </view>
61 <view class="item-label">身份证号</view> 61 </view>
62 <view class="item-value">360681201804040811</view> 62 </view>
63 </view> 63
64 <view class="info-item"> 64 <!-- 人员信息区域 -->
65 <view class="item-label">生日</view> 65 <view class="info-section">
66 <view class="item-value">2018-04-04</view> 66 <view class="section-title">
67 </view> 67 <view class="title-bar"></view>
68 </view> 68 <text class="title-text">人员信息</text>
69 </view> 69 </view>
70 </view> 70 <view class="info-card">
71 </template> 71 <view class="info-item">
72 72 <text class="item-label">姓名</text>
73 <script setup> 73 <text class="item-value">{{ perInfo?.perName }}</text>
74 import { ref } from 'vue' 74 </view>
75 75 <view class="info-item">
76 const userInfo = ref({ 76 <text class="item-label">证件类型</text>
77 memberNo: '8709745760778985472', 77 <text class="item-value">{{ perInfo?.idcTypeStr }}</text>
78 name: '江行知', 78 </view>
79 idCard: '360681201804040811', 79 <view class="info-item">
80 nationality: '中国', 80 <text class="item-label">身份证号</text>
81 idType: '身份证', 81 <text class="item-value">{{ perInfo?.perIdcCode }}</text>
82 birthday: '2018-04-04' 82 </view>
83 }) 83 <view class="info-item">
84 84 <text class="item-label">生日</text>
85 const goToInfo = () => { 85 <text class="item-value">{{ perInfo?.birth }}</text>
86 console.log('跳转到人员信息页') 86 </view>
87 } 87 </view>
88 </script> 88 </view>
89 89
90 <style lang="scss" scoped> 90 <!-- 退出登录按钮 -->
91 .page-container { 91 <view class="logout-section">
92 min-height: 100vh; 92 <view class="logout-btn" @click="handleLogout">退出登录</view>
93 background: linear-gradient(180deg, #FFF9E8 0%, #FFFFFF 100%); 93 </view>
94 padding: 0 30rpx; 94
95 box-sizing: border-box; 95 <!-- 绑定学员弹框 -->
96 } 96 <uni-popup ref="bindPopup" type="center" :mask-click="false">
97 97 <view class="bind-popup">
98 .top-section { 98 <view class="popup-title">绑定学员</view>
99 padding-top: 40rpx; 99 <view class="popup-content">
100 } 100 <view class="form-item">
101 101 <view class="form-label">姓名</view>
102 .header { 102 <view class="form-input">
103 display: flex; 103 <input v-model="bindForm.name" placeholder="请输入姓名" placeholder-class="placeholder-class" />
104 justify-content: space-between; 104 </view>
105 align-items: center; 105 </view>
106 margin-bottom: 40rpx; 106 <view class="form-item">
107 } 107 <view class="form-label">证件号</view>
108 108 <view class="form-input">
109 .title { 109 <input v-model="bindForm.idcCode" placeholder="请输入证件号"
110 font-size: 36rpx; 110 placeholder-class="placeholder-class" />
111 font-weight: 500; 111 </view>
112 color: #333; 112 </view>
113 margin: 0 auto; 113 </view>
114 position: absolute; 114 <view class="popup-btns">
115 left: 50%; 115 <view class="popup-btn cancel" @click="closeBindPopup">取消</view>
116 transform: translateX(-50%); 116 <view class="popup-btn confirm" @click="confirmBind">确定</view>
117 } 117 </view>
118 118 </view>
119 .more-btn { 119 </uni-popup>
120 display: flex; 120 </view>
121 align-items: center; 121 </template>
122 gap: 20rpx; 122
123 margin-left: auto; 123 <script setup>
124 background: #FFFFFF; 124 import {
125 padding: 10rpx 20rpx; 125 computed,
126 border-radius: 40rpx; 126 onMounted,
127 } 127 ref,
128 128 watch,
129 .dots { 129 nextTick
130 font-size: 32rpx; 130 } from "vue";
131 color: #666; 131 import config from "/config.js";
132 line-height: 1; 132 import {
133 } 133 wxLogin,
134 134 logout,
135 .circle { 135 getWebInfo
136 width: 40rpx; 136 } from '@/common/login.js';
137 height: 40rpx; 137 import {
138 border-radius: 50%; 138 useUserStore
139 border: 2rpx solid #666; 139 } from "../store/modules/user";
140 position: relative; 140 import to from 'await-to-js'
141 &::after { 141 import {
142 content: ''; 142 bindUser,
143 position: absolute; 143 unbindUser
144 top: 50%; 144 } from '@/common/api.js'
145 left: 50%; 145
146 transform: translate(-50%, -50%); 146 const userStore = useUserStore()
147 width: 16rpx; 147 const userInfo = computed(() => userStore.user)
148 height: 16rpx; 148 const perInfo = computed(() => userStore.perInfo)
149 border-radius: 50%; 149
150 background: #666; 150 // 是否已绑定学员
151 } 151 const isBound = computed(() => {
152 } 152 const perId = userInfo.value?.perId
153 153 return perId !== undefined && perId !== null && perId !== 0
154 .user-info { 154 })
155 display: flex; 155
156 align-items: center; 156 const bindPopup = ref(null)
157 gap: 30rpx; 157 const bindForm = ref({
158 margin-bottom: 40rpx; 158 name: '',
159 } 159 idcCode: ''
160 160 })
161 .avatar { 161
162 width: 120rpx; 162 onMounted(() => {
163 height: 120rpx; 163 let webUserName = uni.getStorageSync('webUserName')
164 border-radius: 50%; 164 if (!webUserName) {
165 background: #F5F5F5; 165 wxLogin()
166 display: flex; 166 }
167 align-items: center; 167 })
168 justify-content: center; 168
169 font-size: 48rpx; 169 watch(() => userInfo.value.perId, (val) => {
170 border: 4rpx solid #E8E8E8; 170 if (val !== undefined && val == 0) {
171 } 171 nextTick(() => {
172 172 openBindPopup()
173 .avatar-placeholder { 173 })
174 color: #999; 174 }
175 } 175 }, {
176 176 immediate: true
177 .user-desc { 177 })
178 font-size: 36rpx; 178
179 color: #333; 179 // 打开绑定弹框
180 font-weight: 500; 180 const openBindPopup = () => {
181 } 181 if (bindPopup.value) {
182 182 bindForm.value = {
183 /* 会员卡片 */ 183 name: '',
184 .member-card { 184 idcCode: ''
185 background: linear-gradient(135deg, #F7E090 0%, #E6C560 100%); 185 }
186 border-radius: 24rpx; 186 bindPopup.value.open()
187 padding: 40rpx; 187 } else {
188 position: relative; 188 nextTick(() => {
189 overflow: hidden; 189 openBindPopup()
190 margin-bottom: 30rpx; 190 })
191 191 }
192 &::before { 192 }
193 content: ''; 193
194 position: absolute; 194 // 关闭绑定弹框
195 top: 0; 195 const closeBindPopup = () => {
196 left: 0; 196 bindPopup.value?.close()
197 right: 0; 197 }
198 bottom: 0; 198
199 background-image: url('data:image/svg+xml,%3Csvg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M0,50 Q250,20 500,50 T1000,50" fill="none" stroke="%23E6C560" stroke-width="2" opacity="0.3"/%3E%3C/svg%3E'); 199 // 处理绑定/解绑操作
200 background-size: cover; 200 const handleBindAction = () => {
201 z-index: 0; 201 if (isBound.value) {
202 } 202 // 已绑定,执行解绑
203 } 203 uni.showModal({
204 204 content: '确认解绑吗?',
205 .card-header { 205 success: async (res) => {
206 display: flex; 206 if (res.confirm) {
207 justify-content: space-between; 207 uni.showLoading({
208 align-items: center; 208 title: '解绑中...',
209 margin-bottom: 20rpx; 209 mask: true
210 position: relative; 210 })
211 z-index: 1; 211 const [err] = await to(unbindUser())
212 } 212 uni.hideLoading()
213 213 if (err) return
214 .card-name { 214 uni.showToast({
215 font-size: 40rpx; 215 title: '解绑成功',
216 font-weight: bold; 216 icon: 'success'
217 color: #222; 217 })
218 } 218 // 刷新用户信息
219 219 getWebInfo()
220 .bind-btn { 220 }
221 font-size: 28rpx; 221 }
222 color: #666; 222 })
223 } 223 } else {
224 224 // 未绑定,打开绑定弹框
225 .card-id { 225 openBindPopup()
226 font-size: 28rpx; 226 }
227 color: #555; 227 }
228 margin-bottom: 40rpx; 228
229 position: relative; 229 // 确认绑定
230 z-index: 1; 230 const confirmBind = async () => {
231 } 231 if (!bindForm.value.name) {
232 232 uni.showToast({
233 /* 功能入口 */ 233 title: '请输入姓名',
234 .card-func { 234 icon: 'none'
235 display: flex; 235 })
236 justify-content: space-between; 236 return
237 position: relative; 237 }
238 z-index: 1; 238 if (!bindForm.value.idcCode) {
239 } 239 uni.showToast({
240 240 title: '请输入证件号',
241 .func-item { 241 icon: 'none'
242 display: flex; 242 })
243 flex-direction: column; 243 return
244 align-items: center; 244 }
245 gap: 10rpx; 245
246 cursor: pointer; 246 uni.showLoading({
247 } 247 title: '绑定中...',
248 248 mask: true
249 .func-icon { 249 })
250 width: 60rpx; 250
251 height: 60rpx; 251 const [err, res] = await to(bindUser({
252 border-radius: 12rpx; 252 name: bindForm.value.name,
253 display: flex; 253 idcCode: bindForm.value.idcCode
254 align-items: center; 254 }))
255 justify-content: center; 255 uni.hideLoading()
256 font-size: 32rpx; 256
257 color: #333; 257 if (err) {
258 } 258 // uni.showToast({
259 259 // title: '绑定失败',
260 .func-text { 260 // icon: 'none'
261 font-size: 28rpx; 261 // })
262 color: #333; 262 return
263 font-weight: 500; 263 }
264 } 264
265 265 uni.showToast({
266 /* ========== 下半部分:人员信息 ========== */ 266 title: '绑定成功',
267 .bottom-section { 267 icon: 'success'
268 background: #FFFFFF; 268 })
269 border-radius: 24rpx 24rpx 0 0; 269 closeBindPopup()
270 padding: 30rpx; 270 // 刷新用户信息
271 margin-top: 20rpx; 271 getWebInfo()
272 } 272 }
273 273
274 .info-title { 274 const goToAuth = () => {
275 display: flex; 275 console.log("参赛能力认证");
276 align-items: center; 276 };
277 gap: 16rpx; 277
278 margin-bottom: 30rpx; 278 const goToScore = () => {
279 font-size: 36rpx; 279 console.log("成绩查询");
280 font-weight: 500; 280 };
281 color: #333; 281
282 } 282 const goToRecord = () => {
283 283 console.log("参赛记录");
284 .title-line { 284 };
285 width: 12rpx; 285
286 height: 32rpx; 286 // 退出登录
287 background: #E6C560; 287 const handleLogout = () => {
288 border-radius: 4rpx; 288 uni.showModal({
289 } 289 content: `确认退出吗?`,
290 290 success: function(res) {
291 .info-list { 291 if (res.confirm) {
292 display: flex; 292 logout().then(() => {
293 flex-direction: column; 293 uni.reLaunch({
294 gap: 30rpx; 294 url: '/login/login'
295 } 295 })
296 296 })
297 .info-item { 297 }
298 display: flex; 298 }
299 justify-content: space-between; 299 })
300 align-items: center; 300 }
301 padding-bottom: 30rpx; 301 </script>
302 border-bottom: 1rpx solid #F0F0F0; 302
303 303 <style lang="scss" scoped>
304 &:last-child { 304 .page-container {
305 border-bottom: none; 305 min-height: 100vh;
306 padding-bottom: 0; 306 background: #f5f5f5;
307 } 307 padding-bottom: 40rpx;
308 } 308 }
309 309
310 .item-label { 310 /* 会员卡 */
311 font-size: 32rpx; 311 .member-card {
312 color: #333; 312 position: relative;
313 font-weight: 500; 313 height: 450rpx;
314 } 314 border-radius: 0;
315 315 overflow: hidden;
316 .item-value { 316 }
317 font-size: 32rpx; 317
318 color: #999; 318 .card-bg {
319 } 319 position: absolute;
320 320 top: 0;
321 /* 底部固定按钮(可选) */ 321 left: 0;
322 .fixedBottom { 322 width: 100%;
323 position: fixed; 323 height: 100%;
324 bottom: 0; 324 z-index: 0;
325 left: 0; 325 }
326 right: 0; 326
327 padding: 20rpx 30rpx; 327 .bind-student {
328 background: #FFFFFF; 328 position: absolute;
329 border-top: 1rpx solid #F0F0F0; 329 top: 30rpx;
330 } 330 right: 30rpx;
331 331 display: flex;
332 .btn-red { 332 align-items: center;
333 width: 100%; 333 gap: 8rpx;
334 height: 88rpx; 334 z-index: 10;
335 line-height: 88rpx; 335 padding: 10rpx 16rpx;
336 background: #C40F18; 336 background: rgba(255, 255, 255, 0.5);
337 color: #FFFFFF; 337 border-radius: 30rpx;
338 border-radius: 12rpx; 338 }
339 font-size: 32rpx; 339
340 font-weight: 500; 340 .bind-student text {
341 border: none; 341 font-size: 26rpx;
342 } 342 color: #8b7355;
343 }
344
345 .arrow-icon {
346 width: 28rpx;
347 height: 28rpx;
348 }
349
350 .user-section {
351 position: relative;
352 z-index: 1;
353 padding: 50rpx 30rpx 0;
354 }
355
356 .user-top {
357 display: flex;
358 align-items: center;
359 gap: 20rpx;
360 margin-bottom: 20rpx;
361 }
362
363 .avatar-wrap {
364 flex-shrink: 0;
365 }
366
367 .avatar {
368 width: 110rpx;
369 height: 110rpx;
370 border-radius: 50%;
371 border: 3rpx solid rgba(255, 255, 255, 0.6);
372 }
373
374 .member-id {
375 font-size: 26rpx;
376 color: #8b7355;
377 }
378
379 .user-bottom {
380 padding-left: 0;
381 }
382
383 .user-name {
384 font-size: 44rpx;
385 font-weight: bold;
386 color: #5c4b37;
387 margin-bottom: 16rpx;
388 }
389
390 .card-info {
391 display: flex;
392 flex-direction: column;
393 gap: 10rpx;
394 }
395
396 .info-row {
397 font-size: 24rpx;
398 color: #8b7355;
399 }
400
401 /* 已过期印章 */
402 .expired-stamp {
403 position: absolute;
404 right: 30rpx;
405 bottom: 100rpx;
406 width: 150rpx;
407 height: 150rpx;
408 z-index: 1;
409 }
410
411 /* 功能按钮卡片 */
412 .func-card {
413 margin: -70rpx 30rpx 30rpx;
414 background: #ffffff;
415 border-radius: 20rpx;
416 padding: 36rpx 0;
417 box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.06);
418 position: relative;
419 z-index: 2;
420 }
421
422 .func-list {
423 display: flex;
424 justify-content: space-around;
425 padding: 0 20rpx;
426 }
427
428 .func-item {
429 display: flex;
430 flex-direction: column;
431 align-items: center;
432 gap: 12rpx;
433 }
434
435 .func-icon {
436 width: 72rpx;
437 height: 72rpx;
438 }
439
440 .func-text {
441 font-size: 24rpx;
442 color: #333;
443 }
444
445 /* 人员信息区域 */
446 .info-section {
447 margin: 0 30rpx;
448 }
449
450 .section-title {
451 display: flex;
452 align-items: center;
453 gap: 12rpx;
454 margin-bottom: 20rpx;
455 }
456
457 .title-bar {
458 width: 6rpx;
459 height: 32rpx;
460 background: #e6c560;
461 border-radius: 3rpx;
462 }
463
464 .title-text {
465 font-size: 30rpx;
466 font-weight: 500;
467 color: #333;
468 }
469
470 .info-card {
471 background: #ffffff;
472 border-radius: 20rpx;
473 padding: 0 32rpx;
474 }
475
476 .info-item {
477 display: flex;
478 justify-content: space-between;
479 align-items: center;
480 padding: 28rpx 0;
481 border-bottom: 1rpx solid #f5f5f5;
482 }
483
484 .info-item:last-child {
485 border-bottom: none;
486 }
487
488 .item-label {
489 font-size: 28rpx;
490 color: #333;
491 }
492
493 .item-value {
494 font-size: 28rpx;
495 color: #999;
496 }
497
498 /* 绑定学员弹框 */
499 .bind-popup {
500 width: 600rpx;
501 background: #ffffff;
502 border-radius: 24rpx;
503 overflow: hidden;
504 }
505
506 .popup-title {
507 font-size: 32rpx;
508 font-weight: 500;
509 color: #333;
510 text-align: center;
511 padding: 40rpx 30rpx 20rpx;
512 }
513
514 .popup-content {
515 padding: 20rpx 30rpx 40rpx;
516 }
517
518 .form-item {
519 display: flex;
520 align-items: center;
521 margin-bottom: 24rpx;
522 }
523
524 .form-item:last-child {
525 margin-bottom: 0;
526 }
527
528 .form-label {
529 width: 120rpx;
530 font-size: 28rpx;
531 color: #333;
532 flex-shrink: 0;
533 }
534
535 .form-input {
536 flex: 1;
537 background: #f5f5f5;
538 border-radius: 12rpx;
539 padding: 20rpx 24rpx;
540 }
541
542 .form-input input {
543 font-size: 28rpx;
544 color: #333;
545 width: 100%;
546 }
547
548 .placeholder-class {
549 color: #999;
550 }
551
552 .popup-btns {
553 display: flex;
554 border-top: 1rpx solid #eee;
555 }
556
557 .popup-btn {
558 flex: 1;
559 height: 100rpx;
560 line-height: 100rpx;
561 text-align: center;
562 font-size: 30rpx;
563 }
564
565 .popup-btn.cancel {
566 color: #666;
567 border-right: 1rpx solid #eee;
568 }
569
570 .popup-btn.confirm {
571 color: #C40F18;
572 font-weight: 500;
573 }
574
575 /* 退出登录 */
576 .logout-section {
577 margin: 60rpx 30rpx 40rpx;
578 }
579
580 .logout-btn {
581 height: 88rpx;
582 line-height: 88rpx;
583 text-align: center;
584 font-size: 30rpx;
585 color: #999;
586 background: #ffffff;
587 border-radius: 20rpx;
588 }
343 </style> 589 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view class="pay-order-container"> 2 <view class="pay-order-container">
3 3
4 4
5 <view class="order-info"> 5 <view class="order-info">
6 6
7 <view class="info-item total-price"> 7 <view class="info-item total-price">
8 <text class="label">支付总费用:</text> 8 <text class="label">支付总费用:</text>
9 <text class="value red">{{ price ?? 0 }}</text> 9 <text class="value red">{{ price ?? 0 }}</text>
10 </view> 10 </view>
11 </view> 11 </view>
12 12
13 <view class="pay-type-section"> 13 <view class="pay-type-section">
14 <text class="section-title">选择支付方式</text> 14 <text class="section-title">选择支付方式</text>
15 <radio-group :value="payType" @change="handlePayTypeChange"> 15 <radio-group :value="payType" @change="handlePayTypeChange">
16 <label class="radio-item"> 16 <label class="radio-item">
17 <radio value="0" color="#E60012" :checked="payType === '0'" /> 17 <radio value="0" color="#E60012" :checked="payType === '0'" />
18 <view class="pay-method"> 18 <view class="pay-method">
19 <image class="icon" src="/static/min.png" mode="widthFix"></image> 19 <image class="icon" src="/static/min.png" mode="widthFix"></image>
20 <text class="pay-name">民生付</text> 20 <text class="pay-name">民生付</text>
21 </view> 21 </view>
22 </label> 22 </label>
23 </radio-group> 23 </radio-group>
24 </view> 24 </view>
25 25
26 <!-- 底部支付按钮 --> 26 <!-- 底部支付按钮 -->
27 <view class="fixed-bottom"> 27 <view class="fixed-bottom">
28 <button class="pay-btn red-bg" :loading="payLoading" @click="handlePay">立即支付</button> 28 <button class="pay-btn red-bg" :loading="payLoading" @click="handlePay">立即支付</button>
29 </view> 29 </view>
30 </view> 30 </view>
31 </template> 31 </template>
32 32
33 <script setup> 33 <script setup>
34 import { ref } from 'vue' 34 import {
35 import { onLoad } from '@dcloudio/uni-app'; 35 ref
36 import * as api from '@/common/api.js' 36 } from 'vue'
37 37 import {
38 // 核心数据 38 onLoad
39 const formData = ref({}) // 订单统计数据 39 } from '@dcloudio/uni-app';
40 const price = ref('') // 核心业务ID 40 import * as api from '@/common/api.js'
41 const payType = ref('0') // 支付方式(默认0=民生付) 41
42 const payLoading = ref(false) // 支付按钮加载状态 42 // 核心数据
43 43 const formData = ref({}) // 订单统计数据
44 // 页面加载接收参数 44 const price = ref('') // 核心业务ID
45 onLoad(async (options) => { 45 const payType = ref('0') // 支付方式(默认0=民生付)
46 console.log('订单ID:', options.price) 46 const payLoading = ref(false) // 支付按钮加载状态
47 if (options.price) { 47
48 price.value = options.price 48 // 页面加载接收参数
49 } 49 onLoad(async (options) => {
50 }) 50 console.log('订单ID:', options.price)
51 51 if (options.price) {
52 52 price.value = options.price
53 // 支付方式切换 53 }
54 function handlePayTypeChange(e) { 54 })
55 payType.value = e.detail.value 55
56 } 56
57 57 // 支付方式切换
58 // 立即支付核心逻辑 58 function handlePayTypeChange(e) {
59 async function handlePay() { 59 payType.value = e.detail.value
60 60 }
61 61
62 try { 62 // 立即支付核心逻辑
63 payLoading.value = true 63 async function handlePay() {
64 const res = await api.goPay() 64
65 65
66 if (res.data?.orderId) { 66 try {
67 api.pcallBack2(res.data.orderId) 67 payLoading.value = true
68 uni.navigateTo({ 68 const res = await api.goPay()
69 url: `/personal/sucPay` 69
70 }) 70 if (res.data?.orderId) {
71 } 71 api.pcallBack2(res.data.orderId)
72 72 uni.redirectTo({
73 // 跳转到支付成功页 73 url: `/personal/sucPay`
74 74 })
75 } catch (err) { 75 }
76 const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试' 76
77 uni.showToast({ title: errMsg, icon: 'none' }) 77 // 跳转到支付成功页
78 } finally { 78
79 payLoading.value = false 79 } catch (err) {
80 } 80 const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试'
81 } 81 uni.showToast({
82 </script> 82 title: errMsg,
83 83 icon: 'none'
84 <style scoped lang="scss"> 84 })
85 .pay-order-container { 85 } finally {
86 padding: 30rpx; 86 payLoading.value = false
87 background-color: #fff; 87 }
88 min-height: 100vh; 88 }
89 box-sizing: border-box; 89 </script>
90 } 90
91 .icon{ 91 <style scoped lang="scss">
92 width:30px; 92 .pay-order-container {
93 } 93 padding: 30rpx;
94 // 页面头部 94 background-color: #fff;
95 .page-header { 95 min-height: 100vh;
96 text-align: center; 96 box-sizing: border-box;
97 padding: 20rpx 0; 97 }
98 border-bottom: 1px solid #eee; 98
99 margin-bottom: 40rpx; 99 .icon {
100 100 width: 30px;
101 .title { 101 }
102 font-size: 36rpx; 102
103 font-weight: 600; 103 // 页面头部
104 color: #333; 104 .page-header {
105 } 105 text-align: center;
106 } 106 padding: 20rpx 0;
107 107 border-bottom: 1px solid #eee;
108 // 订单信息区域 108 margin-bottom: 40rpx;
109 .order-info { 109
110 margin-bottom: 60rpx; 110 .title {
111 111 font-size: 36rpx;
112 .info-item { 112 font-weight: 600;
113 display: flex; 113 color: #333;
114 justify-content: space-between; 114 }
115 align-items: center; 115 }
116 padding: 25rpx 0; 116
117 border-bottom: 1px solid #f5f5f5; 117 // 订单信息区域
118 font-size: 32rpx; 118 .order-info {
119 119 margin-bottom: 60rpx;
120 .label { 120
121 color: #666; 121 .info-item {
122 } 122 display: flex;
123 123 justify-content: space-between;
124 .value { 124 align-items: center;
125 font-weight: 600; 125 padding: 25rpx 0;
126 font-size: 34rpx; 126 border-bottom: 1px solid #f5f5f5;
127 } 127 font-size: 32rpx;
128 128
129 .red { 129 .label {
130 color: #E60012; 130 color: #666;
131 } 131 }
132 } 132
133 133 .value {
134 .total-price { 134 font-weight: 600;
135 border-bottom: none; 135 font-size: 34rpx;
136 margin-top: 10rpx; 136 }
137 137
138 .label { 138 .red {
139 font-size: 34rpx; 139 color: #E60012;
140 color: #333; 140 }
141 } 141 }
142 142
143 .value { 143 .total-price {
144 font-size: 38rpx; 144 border-bottom: none;
145 } 145 margin-top: 10rpx;
146 } 146
147 } 147 .label {
148 148 font-size: 34rpx;
149 // 支付方式区域 149 color: #333;
150 .pay-type-section { 150 }
151 margin-bottom: 80rpx; 151
152 152 .value {
153 .section-title { 153 font-size: 38rpx;
154 font-size: 32rpx; 154 }
155 color: #333; 155 }
156 margin-bottom: 20rpx; 156 }
157 display: block; 157
158 } 158 // 支付方式区域
159 159 .pay-type-section {
160 .radio-item { 160 margin-bottom: 80rpx;
161 display: flex; 161
162 align-items: center; 162 .section-title {
163 font-size: 32rpx; 163 font-size: 32rpx;
164 padding: 10rpx 0; 164 color: #333;
165 165 margin-bottom: 20rpx;
166 .pay-method { 166 display: block;
167 display: flex; 167 }
168 align-items: center; 168
169 margin-left: 10rpx; 169 .radio-item {
170 170 display: flex;
171 .pay-name { 171 align-items: center;
172 font-size: 32rpx; 172 font-size: 32rpx;
173 margin-left: 20rpx; 173 padding: 10rpx 0;
174 color: #333; 174
175 } 175 .pay-method {
176 } 176 display: flex;
177 } 177 align-items: center;
178 } 178 margin-left: 10rpx;
179 179
180 // 底部支付按钮 180 .pay-name {
181 .fixed-bottom { 181 font-size: 32rpx;
182 position: fixed; 182 margin-left: 20rpx;
183 bottom: 0; 183 color: #333;
184 left: 0; 184 }
185 right: 0; 185 }
186 padding: 20rpx 30rpx 30rpx; 186 }
187 background-color: #fff; 187 }
188 border-top: 1px solid #eee; 188
189 189 // 底部支付按钮
190 .pay-btn { 190 .fixed-bottom {
191 width: 100%; 191 position: fixed;
192 height: 88rpx; 192 bottom: 0;
193 line-height: 88rpx; 193 left: 0;
194 border-radius: 44rpx; 194 right: 0;
195 font-size: 34rpx; 195 padding: 20rpx 30rpx 30rpx;
196 font-weight: 600; 196 background-color: #fff;
197 } 197 border-top: 1px solid #eee;
198 198
199 .red-bg { 199 .pay-btn {
200 background-color: #E60012; 200 width: 100%;
201 color: #fff; 201 height: 88rpx;
202 } 202 line-height: 88rpx;
203 } 203 border-radius: 44rpx;
204 font-size: 34rpx;
205 font-weight: 600;
206 }
207
208 .red-bg {
209 background-color: #E60012;
210 color: #fff;
211 }
212 }
204 </style> 213 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -64,7 +64,8 @@ ...@@ -64,7 +64,8 @@
64 <uni-forms-item label="头像" required> 64 <uni-forms-item label="头像" required>
65 <uni-file-picker v-model="photoArr" @delete="delPhoto" return-type="object" limit="1" 65 <uni-file-picker v-model="photoArr" @delete="delPhoto" return-type="object" limit="1"
66 @select="upPhoto" :del-ico="false" :image-styles="imageStylesTx"></uni-file-picker> 66 @select="upPhoto" :del-ico="false" :image-styles="imageStylesTx"></uni-file-picker>
67 <image mode="aspectFill" v-if="baseFormData.photo2" style="height:200rpx;width:200rpx;" :src="config.baseUrl_api + baseFormData.photo2"/> 67 <image mode="aspectFill" v-if="baseFormData.photo2" style="height:200rpx;width:200rpx;"
68 :src="config.baseUrl_api + baseFormData.photo2" />
68 </uni-forms-item> 69 </uni-forms-item>
69 </view> 70 </view>
70 </uni-forms> 71 </uni-forms>
...@@ -80,7 +81,8 @@ ...@@ -80,7 +81,8 @@
80 <view class="fixedBottom"><button class="btn-red" @click="goSubmit">确 定</button></view> 81 <view class="fixedBottom"><button class="btn-red" @click="goSubmit">确 定</button></view>
81 82
82 <!-- 会员须知 --> 83 <!-- 会员须知 -->
83 <uni-popup ref="popup" type="bottom" background-color="#fff" animation :disable-scroll="true" :mask-click="false"> 84 <uni-popup ref="popup" type="bottom" background-color="#fff" animation :disable-scroll="true"
85 :mask-click="false">
84 <view class="tt">入会须知</view> 86 <view class="tt">入会须知</view>
85 <view class="popBody"> 87 <view class="popBody">
86 _{{baseFormData.name}}_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。 88 _{{baseFormData.name}}_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
...@@ -102,7 +104,7 @@ ...@@ -102,7 +104,7 @@
102 </view> 104 </view>
103 </uni-popup> 105 </uni-popup>
104 106
105 <uni-popup ref="infoConfirm" type="center" :disable-scroll="true" :mask-click="false"> 107 <uni-popup ref="infoConfirm" type="center" :disable-scroll="true" :mask-click="false">
106 <view class="tt">确认信息</view> 108 <view class="tt">确认信息</view>
107 <view class="popBody"> 109 <view class="popBody">
108 <view> 110 <view>
...@@ -125,7 +127,7 @@ ...@@ -125,7 +127,7 @@
125 onLoad 127 onLoad
126 } from '@dcloudio/uni-app' 128 } from '@dcloudio/uni-app'
127 import config from '@/config.js' 129 import config from '@/config.js'
128 import * as aes2 from '@/common/utils.js' 130 import * as aes2 from '@/common/utils.js'
129 const current = ref(0) 131 const current = ref(0)
130 const popup = ref(null) 132 const popup = ref(null)
131 const infoConfirm = ref(null) 133 const infoConfirm = ref(null)
...@@ -297,7 +299,7 @@ ...@@ -297,7 +299,7 @@
297 baseFormData.value.photo = data.data.fang; 299 baseFormData.value.photo = data.data.fang;
298 baseFormData.value.photo2 = data.data.yuan; 300 baseFormData.value.photo2 = data.data.yuan;
299 photoArr.value = { 301 photoArr.value = {
300 url: config.baseUrl_api+baseFormData.value.photo, 302 url: config.baseUrl_api + baseFormData.value.photo,
301 name: '头像', 303 name: '头像',
302 extname: 'jpg' 304 extname: 'jpg'
303 } 305 }
...@@ -414,19 +416,19 @@ ...@@ -414,19 +416,19 @@
414 }) 416 })
415 } 417 }
416 } 418 }
417 // if (baseFormData.value.idcType == 1 || baseFormData.value.idcType == 3) { 419 // if (baseFormData.value.idcType == 1 || baseFormData.value.idcType == 3) {
418 // //转换为大写并判断位数12 420 // //转换为大写并判断位数12
419 // baseFormData.value.idcCode = baseFormData.value.idcCode.toUpperCase() 421 // baseFormData.value.idcCode = baseFormData.value.idcCode.toUpperCase()
420 // // var regex = /^[a-zA-Z]/ 422 // // var regex = /^[a-zA-Z]/
421 // if (baseFormData.value.idcCode.length > 12) { 423 // if (baseFormData.value.idcCode.length > 12) {
422 // uni.showToast({ 424 // uni.showToast({
423 // icon: 'none', 425 // icon: 'none',
424 // title: '请输入正确的证件号', 426 // title: '请输入正确的证件号',
425 // duration: 2000 427 // duration: 2000
426 // }) 428 // })
427 // return 429 // return
428 // } 430 // }
429 // } 431 // }
430 } 432 }
431 433
432 434
...@@ -492,8 +494,8 @@ ...@@ -492,8 +494,8 @@
492 content: '请确认信息正确', 494 content: '请确认信息正确',
493 success: function(res) { 495 success: function(res) {
494 if (res.confirm) { 496 if (res.confirm) {
495 if(baseFormData.value.idcType=='4'){ 497 if (baseFormData.value.idcType == '4') {
496 baseFormData.value.idcType='0' 498 baseFormData.value.idcType = '0'
497 } 499 }
498 delete baseFormData.value.card 500 delete baseFormData.value.card
499 501
...@@ -523,16 +525,16 @@ ...@@ -523,16 +525,16 @@
523 uni.showModal({ 525 uni.showModal({
524 content: '保存成功', 526 content: '保存成功',
525 title: '提示', 527 title: '提示',
526 confirmText:'继续添加', 528 confirmText: '继续添加',
527 cancelColor:'返回首页', 529 cancelColor: '返回首页',
528 success: function(res) { 530 success: function(res) {
529 uni.redirectTo({ 531 uni.redirectTo({
530 url: `/personalVip/addVip?tab=${current.value}&idcType=${baseFormData.value.idcType}` 532 url: `/personalVip/addVip?tab=${current.value}&idcType=${baseFormData.value.idcType}`
531 }); 533 });
532 }, 534 },
533 fail:function(){ 535 fail: function() {
534 uni.reLaunch({ 536 uni.reLaunch({
535 url:`/pages/index/index` 537 url: `/pages/index/home`
536 }) 538 })
537 } 539 }
538 }) 540 })
...@@ -542,6 +544,7 @@ ...@@ -542,6 +544,7 @@
542 } 544 }
543 }); 545 });
544 } 546 }
547
545 function getUserInfo() { 548 function getUserInfo() {
546 api.getInfo(perId.value).then(res => { 549 api.getInfo(perId.value).then(res => {
547 baseFormData.value = res.data 550 baseFormData.value = res.data
...@@ -553,7 +556,6 @@ ...@@ -553,7 +556,6 @@
553 </script> 556 </script>
554 557
555 <style lang="scss"> 558 <style lang="scss">
556
557 /* 字段名左对齐 */ 559 /* 字段名左对齐 */
558 .uni-forms-item .uni-forms-item__label { 560 .uni-forms-item .uni-forms-item__label {
559 text-align: left !important; 561 text-align: left !important;
...@@ -561,16 +563,16 @@ ...@@ -561,16 +563,16 @@
561 padding-left: 0 !important; 563 padding-left: 0 !important;
562 width: auto !important; 564 width: auto !important;
563 } 565 }
564 566
565 /* 内容右对齐 */ 567 /* 内容右对齐 */
566 .uni-forms-item .uni-forms-item__content { 568 .uni-forms-item .uni-forms-item__content {
567 display: flex !important; 569 display: flex !important;
568 align-items: center !important; 570 align-items: center !important;
569 justify-content: flex-end !important; 571 justify-content: flex-end !important;
570 text-align: right !important; 572 text-align: right !important;
571 flex-wrap: nowrap !important; 573 flex-wrap: nowrap !important;
572 } 574 }
573 575
574 /* 输入框内容右对齐 */ 576 /* 输入框内容右对齐 */
575 .uni-forms-item .uni-easyinput .uni-easyinput__content-input, 577 .uni-forms-item .uni-easyinput .uni-easyinput__content-input,
576 .uni-forms-item .uni-easyinput input, 578 .uni-forms-item .uni-easyinput input,
...@@ -579,28 +581,29 @@ ...@@ -579,28 +581,29 @@
579 .uni-forms-item .uni-data-picker .uni-data-picker__input-box { 581 .uni-forms-item .uni-data-picker .uni-data-picker__input-box {
580 text-align: right !important; 582 text-align: right !important;
581 } 583 }
582 584
583 /* 文本内容右对齐 */ 585 /* 文本内容右对齐 */
584 .uni-forms-item .uni-forms-item__content text, 586 .uni-forms-item .uni-forms-item__content text,
585 .uni-forms-item .uni-forms-item__content > text { 587 .uni-forms-item .uni-forms-item__content>text {
586 display: inline-block !important; 588 display: inline-block !important;
587 white-space: nowrap !important; 589 white-space: nowrap !important;
588 } 590 }
589
590 </style> 591 </style>
591 592
592 <style lang="scss" scoped> 593 <style lang="scss" scoped>
593 :deep(.uni-popup__mask) { 594 :deep(.uni-popup__mask) {
594 overflow: hidden !important; 595 overflow: hidden !important;
595 position: fixed !important; 596 position: fixed !important;
596 top: 0; 597 top: 0;
597 left: 0; 598 left: 0;
598 right: 0; 599 right: 0;
599 bottom: 0; 600 bottom: 0;
600 } 601 }
602
601 :deep(.uni-popup) { 603 :deep(.uni-popup) {
602 overflow: hidden !important; 604 overflow: hidden !important;
603 } 605 }
606
604 :deep(.segmented-control) { 607 :deep(.segmented-control) {
605 height: 100rpx; 608 height: 100rpx;
606 } 609 }
...@@ -620,7 +623,7 @@ ...@@ -620,7 +623,7 @@
620 font-size: 28rpx; 623 font-size: 28rpx;
621 line-height: 1.5; 624 line-height: 1.5;
622 height: 70vh; 625 height: 70vh;
623 overflow-y: auto; 626 overflow-y: auto;
624 font-family: 华文仿宋; 627 font-family: 华文仿宋;
625 height: 80vh; 628 height: 80vh;
626 overflow: auto; 629 overflow: auto;
...@@ -636,7 +639,7 @@ ...@@ -636,7 +639,7 @@
636 box-sizing: border-box; 639 box-sizing: border-box;
637 display: flex; 640 display: flex;
638 font-size: 30rpx; 641 font-size: 30rpx;
639 642
640 643
641 text { 644 text {
642 color: #014A9F; 645 color: #014A9F;
...@@ -676,13 +679,14 @@ ...@@ -676,13 +679,14 @@
676 :deep(.item-text-overflow) { 679 :deep(.item-text-overflow) {
677 text-align: left; 680 text-align: left;
678 } 681 }
682
679 :deep(.fixUniFormItemStyle .uni-data-picker__input-box) { 683 :deep(.fixUniFormItemStyle .uni-data-picker__input-box) {
680 justify-content: flex-start !important; 684 justify-content: flex-start !important;
681 text-align: left !important; 685 text-align: left !important;
682 } 686 }
683 687
684 /* 让地区选择器的文本左对齐 */ 688 /* 让地区选择器的文本左对齐 */
685 :deep(.fixUniFormItemStyle .uni-data-picker__text) { 689 :deep(.fixUniFormItemStyle .uni-data-picker__text) {
686 text-align: left !important; 690 text-align: left !important;
687 } 691 }
688 </style> 692 </style>
...\ No newline at end of file ...\ No newline at end of file
......
No preview for this file type
1 import {
2 createPinia
3 } from "pinia";
4
5
6 const store = createPinia()
7
8 export default store
...\ No newline at end of file ...\ No newline at end of file
1 import {
2 defineStore
3 } from "pinia";
4 import {
5 ref
6 } from 'vue'
7
8 export const useUserStore = defineStore('user', () => {
9 const user = ref(null)
10 const perInfo = ref(null)
11
12 const setUser = (value) => {
13 user.value = value
14 }
15
16 const setPerInfo = (value) => {
17 perInfo.value = value
18 }
19
20 return {
21 user,
22 setUser,
23 perInfo,
24 setPerInfo
25 }
26 })
...\ No newline at end of file ...\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!