f9c6474d by 杨炀

no message

1 parent 759d9885
...@@ -321,6 +321,56 @@ function addLevelInfo(data) { ...@@ -321,6 +321,56 @@ function addLevelInfo(data) {
321 params: data 321 params: data
322 }) 322 })
323 } 323 }
324 function chooseStudentsList(query) {
325 return request({
326 url: '/person/info/chooseStudentsList',
327 method: 'get',
328 params: query
329 })
330 }
331 function batchChoose(data) {
332 return request({
333 url: '/exam/person/batch/choose',
334 method: 'post',
335 params: data
336 })
337 }
338 function editLevel(data) {
339 return request({
340 url: '/exam/person/editLevel',
341 method: 'put',
342 params: data
343 })
344 }
345 function getVerityList(params) {
346 return request({
347 url: '/exam/info/verityList',
348 method: 'get',
349 params: params
350 })
351 }
352 function getGroupHistoryByRelateId(id) {
353 return request({
354 url: `/member/certified/getHistoryByRelateId/${id}`,
355 method: 'get'
356 })
357 }
358 // 创建自己的团队
359 function createMyMember(data) {
360 return request({
361 url: '/member/info/createMyMember',
362 method: 'post',
363 params:data
364 })
365 }
366 function doVerity(data) {
367 return request({
368 url: `/exam/info/verity`,
369 method: 'put',
370 params: data
371 })
372 }
373
324 374
325 export { 375 export {
326 getMessage, 376 getMessage,
...@@ -357,5 +407,8 @@ export { ...@@ -357,5 +407,8 @@ export {
357 getLevelApplyInfo, 407 getLevelApplyInfo,
358 getStudentList,getApprovalRecord,submitVerity, 408 getStudentList,getApprovalRecord,submitVerity,
359 getCoachList, 409 getCoachList,
360 updateLevelInfo,addLevelInfo 410 updateLevelInfo,addLevelInfo,
411 chooseStudentsList,batchChoose,getVerityList,
412 getGroupHistoryByRelateId,
413 createMyMember,doVerity
361 } 414 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -5,6 +5,7 @@ page { ...@@ -5,6 +5,7 @@ page {
5 } 5 }
6 .esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;} 6 .esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;}
7 .flexbox{display: flex;} 7 .flexbox{display: flex;}
8 .mt30{margin-top: 30rpx;}
8 .mt40{margin-top: 40rpx;} 9 .mt40{margin-top: 40rpx;}
9 .mt50{margin-top: 50rpx;} 10 .mt50{margin-top: 50rpx;}
10 .align-forms-item-placeHolder{color: #999;line-height: 2.6;} 11 .align-forms-item-placeHolder{color: #999;line-height: 2.6;}
...@@ -55,7 +56,11 @@ font-size: 24rpx;} ...@@ -55,7 +56,11 @@ font-size: 24rpx;}
55 } 56 }
56 .btn-red-kx{background-color: #fff; 57 .btn-red-kx{background-color: #fff;
57 border: 1px solid #AD181F; 58 border: 1px solid #AD181F;
58 color: #AD181F;} 59 color: #AD181F;
60 }
61 .btn-red-kx.mini{font-size: 30rpx; line-height: 2;
62 border-radius: 30px;}
63
59 /* 底部固定按钮 */ 64 /* 底部固定按钮 */
60 .fixedBottom {background: #fff;height: 150rpx; 65 .fixedBottom {background: #fff;height: 150rpx;
61 box-shadow: 0px -2rpx 10rpx 0px #e8e8e8; padding: 30rpx 0 0; 66 box-shadow: 0px -2rpx 10rpx 0px #e8e8e8; padding: 30rpx 0 0;
...@@ -325,3 +330,24 @@ color: #7D8592;} ...@@ -325,3 +330,24 @@ color: #7D8592;}
325 display: block; 330 display: block;
326 font-size: 14px; 331 font-size: 14px;
327 } 332 }
333 .bgbg{padding:0 0 60rpx;
334 color: #fff;
335 background: #C40F18;
336 }
337 .girdBox{display: flex;flex-wrap: wrap;padding: 0 0 40rpx;
338 background: #FFFFFF;position: relative;top: -30rpx;
339 border-radius: 20rpx 20rpx 0rpx 0rpx;
340 view{width: 25%;text-align: center;
341 font-size: 24rpx;
342 color: #434343;
343 image{width: 20vw;height: 20vw;display: block;margin: auto;}
344 }
345 }
346
347
348
349
350
351
352
353
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
3 3
4 4
5 // staging 5 // staging
6 const baseUrl_api = "http://192.168.1.96:8787"; 6 const baseUrl_api = "http://192.168.1.97:8787";
7 const fileUrl_api = "http://192.168.1.11:8787"; 7 const fileUrl_api = "http://192.168.1.11:8787";
8 8
9 export default { 9 export default {
......
...@@ -288,7 +288,7 @@ ...@@ -288,7 +288,7 @@
288 288
289 } 289 }
290 ,{ 290 ,{
291 "path" : "pages/group/applyList", 291 "path" : "pages/group/apply/applyList",
292 "style" : 292 "style" :
293 { 293 {
294 "navigationBarTitleText": "团体会员审核", 294 "navigationBarTitleText": "团体会员审核",
...@@ -341,6 +341,24 @@ ...@@ -341,6 +341,24 @@
341 } 341 }
342 342
343 } 343 }
344 ,{
345 "path" : "pages/group/apply/applyDetail",
346 "style" :
347 {
348 "navigationBarTitleText": "团体会员审核详情",
349 "enablePullDownRefresh": false
350 }
351
352 }
353 ,{
354 "path" : "pages/group/apply/record",
355 "style" :
356 {
357 "navigationBarTitleText": "审核记录",
358 "enablePullDownRefresh": false
359 }
360
361 }
344 ], 362 ],
345 "globalStyle": { 363 "globalStyle": {
346 "navigationStyle": "custom", 364 "navigationStyle": "custom",
......
1 <template>
2 <view class="hasfixedbottom">
3 <view class="wBox">
4 <view class="tt">{{form.name}}</view>
5
6 <!-- 成员 -->
7 <view class="userlist">
8 <view class="item" v-for="n in list">
9 <view class="photobox">
10 <view class="colorful">{{n.perName?.slice(0,1)}}</view>
11 </view>
12 <view>
13 <view class="name">{{n.perName}}</view>
14 <view class="date">申请调入一级协会 {{n.sourceShenDeptName||'--'}}</view>
15 <view class="date">申请调入单位 {{n.targetDeptName||'--'}}</view>
16 </view>
17 </view>
18 </view>
19
20 </view>
21
22 <view class="h3-padding">审核流程</view>
23 <view class="wBox">
24 <view class="stepItem" v-for="(n,index) in auditLog">
25 <view class="time">{{n.auditTime||'待审批'}}</view>
26 <view class="content">
27 <view class="status">
28 <text v-if="n.auditResult==1" class="text-success">审核通过</text>
29 <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text>
30 <text v-if="n.auditResult==0" class="text-primary"> 审核中</text>
31 </view>
32 <!-- <view class="name">{{index+1}}</view> -->
33 <view class="deptName">{{n.auditDeptName}}</view>
34 <view v-if="n.auditResult==2">
35 备注:{{n.auditMsg||'/' }}
36 </view>
37 </view>
38 </view>
39 </view>
40
41 <view class="fixedBottom" v-if="(deptType == 1)&&form.ztxRes == 0">
42 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
43 <button class="btn-red" @click="audit(form.id,'1')">同意</button>
44 </view>
45
46 <view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.shenRes == 0">
47 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
48 <button class="btn-red" @click="audit(form.id,'1')">同意</button>
49 </view>
50
51 </view>
52 </template>
53
54 <script setup>
55 import * as api from '@/common/api.js'
56 import config from '@/config.js'
57 import {
58 onMounted,
59 ref
60 } from 'vue'
61 import {
62 onLoad
63 } from '@dcloudio/uni-app'
64 const app = getApp();
65 const queryParams = ref({})
66
67 const form = ref({})
68 const list = ref([])
69 const auditLog = ref([])
70 const feelList = ref([])
71 const total = ref(0)
72 const totalYear = ref(0)
73 const deptType = ref()
74 let rangeId = ''
75 onLoad((option) => {
76 rangeId = option.rangeId
77 if ('auditLog' in option) {
78 auditLog.value = JSON.parse(decodeURIComponent(option.auditLog))
79 }
80 if ('form' in option) {
81 form.value = JSON.parse(decodeURIComponent(option.form))
82 }
83 console.log(form.value)
84 if (app.globalData.isLogin) {
85 init()
86 } else {
87
88 app.firstLoadCallback = () => {
89 init()
90 };
91 }
92
93 })
94
95 function init() {
96 deptType.value = app.globalData.deptType
97 getForm()
98 }
99
100 function getForm() {
101 uni.showLoading({
102 title: '加载中'
103 })
104 api.getTransferList({
105 rangeId: rangeId
106 }).then(res => {
107 uni.hideLoading()
108 list.value = res.rows
109 })
110 }
111
112 function audit(rangeId, flag) {
113 if (flag == '2') {
114 // 拒绝
115 // 弹出框填写理由
116 uni.showModal({
117 title: '请输入拒绝理由',
118 editable: true,
119 success: function(res) {
120 if (res.confirm) {
121 if (!res.content) {
122 uni.showToast({
123 title: '请输入拒绝理由',
124 icon: 'none'
125 })
126 } else {
127 doApproval(rangeId, flag, res.content)
128 }
129 }
130 }
131 })
132 } else if (flag == '1') {
133 // 二次确认
134 uni.showModal({
135 title: '提示',
136 content: `确定审批通过吗`,
137 success: function(res) {
138 if (res.confirm) {
139 doApproval(rangeId, flag)
140 }
141 }
142 })
143 }
144 }
145
146 function doApproval(rangeId, flag, reason) {
147 var obj = {
148 flag: flag,
149 reason: reason || '',
150 rangeIds: rangeIds
151 }
152 console.log(obj)
153 api.mobilizeAudit(obj).then((res) => {
154 uni.showToast({
155 title: '操作成功',
156 icon: 'none'
157 })
158 uni.navigateBack()
159 })
160 }
161 </script>
162
163 <style scoped lang="scss">
164 .wBox {
165 width: 700rpx;
166 padding: 30rpx;
167 margin: 20rpx auto 0;
168 background: #FFFFFF;
169 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
170 border-radius: 15rpx;
171
172 .tt {
173 color: #0A1629;
174 font-size: 30rpx;
175 }
176 }
177
178 .userlist {
179 .item {
180 border-bottom: 1px dashed #e5e5e5;
181 position: relative;
182
183 .date {
184 margin-top: 10rpx;
185 }
186
187 .name {
188 text {
189 margin-left: 1em;
190 color: #4C5359;
191 font-size: 26rpx;
192 }
193 }
194
195 .nian {
196 position: absolute;
197 right: 0;
198 font-size: 30rpx;
199 color: #AD181F;
200 }
201 }
202 }
203
204 .info {
205 display: flex;
206 margin: 30rpx 0 20rpx;
207 font-size: 28rpx;
208
209 view {
210 color: #7D8592;
211 margin-right: 20rpx;
212 }
213 }
214
215 .fixedBottom {
216 justify-content: center;
217
218 button {
219 margin: 0 20rpx;
220 width: 286rpx;
221 }
222
223 .btn-red {
224 width: 286rpx;
225 }
226 }
227 </style>
...\ No newline at end of file ...\ No newline at end of file
...@@ -19,15 +19,19 @@ ...@@ -19,15 +19,19 @@
19 缴费单位 19 缴费单位
20 <view>{{ item.content.memberName }}</view> 20 <view>{{ item.content.memberName }}</view>
21 </view> 21 </view>
22 <view> 22 <view v-if="userType = '3'">
23 会员合计 23 所属省份
24 <view>{{item.content.allCount}}</view> 24 <view>{{item.content.province}}</view>
25 </view> 25 </view>
26 <view> 26 <view>
27 新会员合计 27 年限
28 <view>{{item.content.renewYear}}</view> 28 <view>{{item.content.renewYear}}</view>
29 </view> 29 </view>
30 <view> 30 <view v-if="deptType == 1">
31 团体会员/新会员
32 <view>{{item.content.allCount}}/{{item.content.newCount}}</view>
33 </view>
34 <view v-if="deptType == 1">
31 费用合计 35 费用合计
32 <view> {{ (item?.content?.allFee*1).toFixed(2) }}</view> 36 <view> {{ (item?.content?.allFee*1).toFixed(2) }}</view>
33 </view> 37 </view>
...@@ -71,7 +75,8 @@ ...@@ -71,7 +75,8 @@
71 const current = ref() 75 const current = ref()
72 const list = ref([]) 76 const list = ref([])
73 const total = ref(0) 77 const total = ref(0)
74 const deptType = ref('') 78 const deptType = ref('')
79 const userType = ref('')
75 onLoad(() => { 80 onLoad(() => {
76 if (app.globalData.isLogin) { 81 if (app.globalData.isLogin) {
77 init() 82 init()
...@@ -84,7 +89,8 @@ ...@@ -84,7 +89,8 @@
84 }) 89 })
85 90
86 function init() { 91 function init() {
87 deptType.value = app.globalData.deptType 92 deptType.value = app.globalData.deptType
93 userType.value = app.globalData.userType
88 getList() 94 getList()
89 } 95 }
90 96
...@@ -171,11 +177,22 @@ ...@@ -171,11 +177,22 @@
171 function goDetail(item) { 177 function goDetail(item) {
172 const auditLog = encodeURIComponent(JSON.stringify(item.auditLog)) 178 const auditLog = encodeURIComponent(JSON.stringify(item.auditLog))
173 const form = encodeURIComponent(JSON.stringify(item)) 179 const form = encodeURIComponent(JSON.stringify(item))
174 180
175 let path = `/pages/personalVip/mobilizeDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}` 181 if(userType.value=='1'){
176 uni.navigateTo({ 182 // 查看
177 url: path 183 let path = `/pages/group/apply/applyDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}`
178 }); 184 uni.navigateTo({
185 url: path
186 });
187 } else if(userType.value=='3'){
188 // 审核记录
189 let path = `/pages/group/apply/record?certId=${item.content.certId}`
190 uni.navigateTo({
191 url: path
192 });
193 }
194
195
179 } 196 }
180 </script> 197 </script>
181 198
......
1 <template>
2 <view class="hasfixedbottom">
3 <view class="h3-padding">审核记录</view>
4 <view class="wBox">
5 <view class="stepItem" v-for="(n,index) in list">
6 <view class="time">{{n.handleDate||'待审批'}}</view>
7 <view class="content">
8 <view class="status">
9 <text v-if="n.auditStatus==0" class="text-primary">审核中</text>
10 <text v-if="n.auditStatus==1" class="text-success">审核通过</text>
11 <text v-if="n.auditStatus==2" class="text-danger">审核拒绝</text>
12 <text v-if="n.auditStatus==3" class="text-warning">已撤回</text>
13 <text v-if="n.auditStatus==100" class="text-primary">审核中</text>
14 </view>
15 <!-- <view class="name">{{index+1}}</view> -->
16 <view class="deptName">{{n.handlerDeptName}}</view>
17 <view v-if="n.reason">
18 备注:{{n.reason}}
19 </view>
20 </view>
21 </view>
22 </view>
23
24
25 </view>
26 </template>
27
28 <script setup>
29 import * as api from '@/common/api.js'
30 import config from '@/config.js'
31 import {
32 onMounted,
33 ref
34 } from 'vue'
35 import {
36 onLoad
37 } from '@dcloudio/uni-app'
38 const app = getApp();
39 const list = ref([])
40 const total = ref(0)
41 const deptType = ref()
42 let certId = ''
43 onLoad((option) => {
44 certId = option.certId
45 if (app.globalData.isLogin) {
46 init()
47 } else {
48
49 app.firstLoadCallback = () => {
50 init()
51 };
52 }
53
54 })
55
56 function init() {
57 deptType.value = app.globalData.deptType
58 getList()
59 }
60
61 function getList() {
62 uni.showLoading({
63 title: '加载中'
64 })
65 api.getGroupHistoryByRelateId(certId).then(res => {
66 uni.hideLoading()
67 list.value = res.data
68 })
69 }
70 </script>
71
72 <style scoped lang="scss">
73 .wBox {
74 width: 700rpx;
75 padding: 30rpx;
76 margin: 20rpx auto 0;
77 background: #FFFFFF;
78 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
79 border-radius: 15rpx;
80
81 .tt {
82 color: #0A1629;
83 font-size: 30rpx;
84 }
85 }
86
87 .userlist {
88 .item {
89 border-bottom: 1px dashed #e5e5e5;
90 position: relative;
91
92 .date {
93 margin-top: 10rpx;
94 }
95
96 .name {
97 text {
98 margin-left: 1em;
99 color: #4C5359;
100 font-size: 26rpx;
101 }
102 }
103
104 .nian {
105 position: absolute;
106 right: 0;
107 font-size: 30rpx;
108 color: #AD181F;
109 }
110 }
111 }
112
113 .info {
114 display: flex;
115 margin: 30rpx 0 20rpx;
116 font-size: 28rpx;
117
118 view {
119 color: #7D8592;
120 margin-right: 20rpx;
121 }
122 }
123
124 .fixedBottom {
125 justify-content: center;
126
127 button {
128 margin: 0 20rpx;
129 width: 286rpx;
130 }
131
132 .btn-red {
133 width: 286rpx;
134 }
135 }
136 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template> 1 <template>
2 <view class="page"> 2 <view class="page">
3 <view> 3 <view class="bgbg">
4 <view class="welcome">您好!<br />欢迎使用中跆协会员管理系统</view> 4 <view class="welcome">您好!
5 <!-- {{memberInfo.name}} -->
6 <br />欢迎使用中跆协会员管理系统</view>
5 <view class="flexbox"> 7 <view class="flexbox">
6 <!-- userType 1:中跆协 2:省 3:市区 4:道馆--> 8 <!-- userType 1:中跆协 2:省 3:市区 4:道馆-->
7 <!-- 4 --> 9 <!-- 4 -->
...@@ -9,24 +11,35 @@ ...@@ -9,24 +11,35 @@
9 <view v-if="userType=='4'" @click="goPath('/pages/personalVip/payment')">会员缴费</view> 11 <view v-if="userType=='4'" @click="goPath('/pages/personalVip/payment')">会员缴费</view>
10 <view v-if="userType=='2'" @click="goPath('/pages/personalVip/feeBill')">会员缴费单</view> 12 <view v-if="userType=='2'" @click="goPath('/pages/personalVip/feeBill')">会员缴费单</view>
11 <!-- 3 2 1--> 13 <!-- 3 2 1-->
12 <view v-if="userType!='4'" @click="goPath('/pages/personalVip/audit')">缴费审核</view> 14 <view v-if="userType!='4'" @click="goPath('/pages/personalVip/audit')">缴费审核</view>
13 15
14 <!-- 都有 --> 16 <!-- 都有 -->
15 <view @click="goPath('/pages/personalVip/list')">会员查询</view> 17 <view @click="goPath('/pages/personalVip/list')">会员查询</view>
16 </view> 18 </view>
17 19
18 </view> 20 </view>
19 <view> 21 <view class="girdBox">
20 <view v-if="userType!='3'" @click="goPath('/pages/personalVip/mobilize')"> 22 <view v-if="userType!='3'" @click="goPath('/pages/personalVip/mobilize')">
21 会员调动 23 <image />
22 </view> 24 会员调动
23 <view v-if="userType!='4'" @click="goPath('/pages/group/list')">团体会员查询</view> 25 </view>
24 <view v-if="userType!='4'" @click="goPath('/pages/group/applyList')">团体会员审核</view> 26 <view v-if="userType!='4'" @click="goPath('/pages/group/list')">
25 <view v-if="userType=='2'" @click="goPath('/pages/group/pay')">团体会员认证</view> 27 <image />团体会员查询
26 28 </view>
27 <view v-if="userType=='4'" @click="goPath('/pages/level/apply')">级位考试申请</view> 29 <view v-if="userType!='4'" @click="goPath('/pages/group/apply/applyList')">
28 <view v-if="userType!='4'" @click="goPath('/pages/level/approval')">级位考试审核</view> 30 <image />团体会员审核
29 31 </view>
32 <view v-if="userType=='2'" @click="goPath('/pages/group/pay')">
33 <image />团体会员认证
34 </view>
35
36 <view v-if="userType=='4'" @click="goPath('/pages/level/apply')">
37 <image />级位考试申请
38 </view>
39 <view v-if="userType!='4'" @click="goPath('/pages/level/approval')">
40 <image />级位考试审核
41 </view>
42
30 </view> 43 </view>
31 <uni-section title="待办提醒" padding> 44 <uni-section title="待办提醒" padding>
32 <template v-slot:right> 45 <template v-slot:right>
...@@ -37,10 +50,10 @@ ...@@ -37,10 +50,10 @@
37 <text class="dot" :class="n.readFlag=='1'?'done':''"></text> 50 <text class="dot" :class="n.readFlag=='1'?'done':''"></text>
38 <view class="tt esp">{{n.name}}</view> 51 <view class="tt esp">{{n.name}}</view>
39 <view class="date">{{n.createTime}}</view> 52 <view class="date">{{n.createTime}}</view>
40 </view> 53 </view>
41 <view class="nodata" v-if="messageList.length==0"> 54 <view class="nodata" v-if="messageList.length==0">
42 <image mode="aspectFit" src="/static/nodata.png"></image> 55 <image mode="aspectFit" src="/static/nodata.png"></image>
43 <text>暂无数据</text> 56 <text>暂无数据</text>
44 </view> 57 </view>
45 </view> 58 </view>
46 </uni-section> 59 </uni-section>
...@@ -67,46 +80,27 @@ ...@@ -67,46 +80,27 @@
67 } = getCurrentInstance() 80 } = getCurrentInstance()
68 const app = getApp(); 81 const app = getApp();
69 const userType = ref('1') 82 const userType = ref('1')
83 const memberInfo = ref({})
70 84
71 let proId; 85 let proId;
72 const svId = ref(null); 86 const svId = ref(null);
73 const list = ref([ 87
74 {
75 url: '',
76 text: '段位考试申请'
77 },
78 {
79 url: '',
80 text: '段位考试审核'
81 },
82 {
83 url: '',
84 text: '级位证书发送'
85 },
86 {
87 url: '',
88 text: '段位证书发送'
89 }
90 ]);
91 const messageList = ref([]) 88 const messageList = ref([])
92 onShow(() => { 89 onShow(() => {
93 if (app.globalData.isLogin) { 90 if (app.globalData.isLogin) {
94 init() 91 init()
95 } else { 92 } else {
96
97 app.firstLoadCallback = () => { 93 app.firstLoadCallback = () => {
98 init() 94 init()
99 }; 95 };
100 } 96 }
101 }) 97 })
102 onLoad(option => { 98 onLoad(option => {
103
104 if (option.scene) { 99 if (option.scene) {
105 proId = decodeURIComponent(option.scene); 100 proId = decodeURIComponent(option.scene);
106 } else { 101 } else {
107 proId = option.proId; 102 proId = option.proId;
108 } 103 }
109
110 }); 104 });
111 105
112 function goPath(path) { 106 function goPath(path) {
...@@ -144,78 +138,83 @@ ...@@ -144,78 +138,83 @@
144 }); 138 });
145 } 139 }
146 140
147 function init() { 141 function init() {
148 uni.showLoading({ 142 uni.showLoading({
149 title: '加载中' 143 title: '加载中'
150 }); 144 });
151 loginServer.getMyOwnMemberInfo().then(res=>{ 145 // loginServer.getMyOwnMemberInfo().then(res=>{
152 userType.value = app.globalData.userType 146 userType.value = app.globalData.userType
153 if (userType.value!='1' && app.globalData.authenticationStatus != '2' && app.globalData.authenticationStatus != '4'){ 147 memberInfo.value = app.globalData.memberInfo
154 // 注册引导 148 console.log(userType.value,app.globalData.authenticationStatus)
155 uni.navigateTo({ 149 if (userType.value != '1' && app.globalData.authenticationStatus != '2' && app.globalData.authenticationStatus !=
156 url: '/pages/index/perfect' 150 '4') {
157 }); 151 // 注册引导
158 } else { 152 // uni.navigateTo({
159 getMes() 153 // url: '/pages/index/perfect'
160 } 154 // });
161 uni.hideLoading(); 155 } else {
162 }) 156 getMes()
157 }
158 uni.hideLoading();
159 // })
163 160
164 161
165 } 162 }
166 function getMes(){ 163
167 api.getMessage({ 164 function getMes() {
168 pageNum: 1, 165 api.getMessage({
169 pageSize: 10 166 pageNum: 1,
170 }).then(res => { 167 pageSize: 10
171 if (res.rows && res.rows.length > 0) 168 }).then(res => {
172 for (var d of res.rows) { 169 if (res.rows && res.rows.length > 0)
173 switch (d.type) { 170 for (var d of res.rows) {
174 case 30001: 171 switch (d.type) {
175 d.name = '你有一条会员缴费等待审批,点击去处理!' 172 case 30001:
176 d.path = '/personalVip/audit' 173 d.name = '你有一条会员缴费等待审批,点击去处理!'
177 break 174 d.path = '/pages/personalVip/audit'
178 case 30002: 175 break
179 d.name = '你有一条级位考试等待审批,点击去处理!' 176 case 30002:
180 d.path = '/level/approval' 177 d.name = '你有一条级位考试等待审批,点击去处理!'
181 break 178 d.path = '/pages/level/approval'
182 case 30003: 179 break
183 d.name = '你有一条段位考试等待审批,点击去处理!' 180 case 30003:
184 d.path = '/rank/approval' 181 d.name = '你有一条段位考试等待审批,点击去处理!'
185 break 182 d.path = '/pages/rank/approval'
186 case 30004: 183 break
187 d.name = '你有一条会员调动等待审批,点击去处理!' 184 case 30004:
188 d.path = '/personalVip/mobillize' 185 d.name = '你有一条会员调动等待审批,点击去处理!'
189 break 186 d.path = '/pages/personalVip/mobillize'
190 case 30005: 187 break
191 d.name = '你有一条团体会员认证等待审批,点击去处理!' 188 case 30005:
192 d.path = '/group/authentication' 189 d.name = '你有一条团体会员认证等待审批,点击去处理!'
193 break 190 d.path = '/pages/group/authentication'
194 case 30006: 191 break
195 d.name = '你有一条段位成绩等待审批,点击去处理!' 192 case 30006:
196 d.path = '/rank/scoreApproval' 193 d.name = '你有一条段位成绩等待审批,点击去处理!'
197 break 194 d.path = '/pages/rank/scoreApproval'
198 case 40001: 195 break
199 d.name = '你有一条级位申请待提交,点击去处理!' 196 case 40001:
200 d.path = `/level/apply/modify?id=${d.eventId}` 197 d.name = '你有一条级位申请待提交,点击去处理!'
201 break 198 d.path = `/pages/level/apply/modify?id=${d.eventId}`
202 case 40002: 199 break
203 d.name = '你有一条段位申请待提交,点击去处理!' 200 case 40002:
204 d.path = `/rank/apply/modify?id=${d.eventId}` 201 d.name = '你有一条段位申请待提交,点击去处理!'
205 break 202 d.path = `/pages/rank/apply/modify?id=${d.eventId}`
206 case 40003: 203 break
207 d.name = '你有一条成绩维护的数据待提交,点击去处理!' 204 case 40003:
208 d.path = `/rank/score/modify?id=${d.eventId}` 205 d.name = '你有一条成绩维护的数据待提交,点击去处理!'
209 break 206 d.path = `/pages/rank/score/modify?id=${d.eventId}`
210 case 50001: 207 break
211 d.name = '你有一条新的个人会员申请,点击去处理!' 208 case 50001:
212 d.path = '/personalVip/approvalList' 209 d.name = '你有一条新的个人会员申请,点击去处理!'
213 break 210 d.path = '/pages/personalVip/approvalList'
214 } 211 break
215 } 212 }
216 messageList.value = res.rows 213 }
217 }) 214 messageList.value = res.rows
218 } 215 })
216 }
217
219 function readMessage(item) { 218 function readMessage(item) {
220 uni.navigateTo({ 219 uni.navigateTo({
221 url: item.path 220 url: item.path
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="pd30"> 3 <view class="pd30" style="padding: 30rpx 30rpx 180rpx;">
4 <uni-steps :options="list1" :active="active" /> 4 <uni-steps :options="list1" :active="active" />
5 5
6 <view> 6 <view class="wBox" v-if="active == 0">
7 <uni-forms ref="baseForm" :modelValue="baseFormData" label-width="100"> 7 <uni-forms ref="baseForm" :modelValue="form" label-width="100">
8 <uni-forms-item label="所属协会" required><uni-easyinput v-model="baseFormData.name" 8 <uni-forms-item label="单位名称" required>
9 :disabled="!editIng" placeholder="所属协会" /></uni-forms-item> 9 <uni-easyinput v-model="form.baseName" :disabled="!editIng"
10 <uni-forms-item label="机构名称" required><uni-easyinput v-model="baseFormData.name" 10 placeholder="单位名称" /></uni-forms-item>
11 :disabled="!editIng" placeholder="机构名称" /></uni-forms-item> 11 <uni-forms-item label="单位类型" required>
12 <uni-forms-item label="单位类型" required> 12 <uni-data-select :disabled="!editIng" v-model="form.type"
13 <uni-data-select :disabled="!editIng" v-model="baseFormData.type" 13 :localdata="typeList"></uni-data-select>
14 :localdata="typeList"></uni-data-select> 14 </uni-forms-item>
15 </uni-forms-item> 15 <uni-forms-item label="联系人" required>
16 <uni-forms-item label="联系人" required> 16 <uni-easyinput v-model="form.contact" :disabled="!editIng" placeholder="请输入联系人姓名" />
17 <uni-easyinput v-model="baseFormData.contactPerson" :disabled="!editIng" 17 </uni-forms-item>
18 placeholder="请输入联系人姓名" /> 18 <uni-forms-item label="联系方式" required>
19 </uni-forms-item> 19 <uni-easyinput v-model="form.phone" :disabled="!editIng" placeholder="请输入联系方式" />
20 <uni-forms-item label="联系方式" required> 20 </uni-forms-item>
21 <uni-easyinput v-model="baseFormData.contactTelno" :disabled="!editIng" placeholder="请输入联系方式" /> 21 <uni-forms-item label="所属省份" required>
22 <uni-data-select v-if="editIng" v-model="form.belongProvinceId"
23 :localdata="options"></uni-data-select>
24 </uni-forms-item>
25 <uni-forms-item label="地址" required>
26 <uni-data-select v-if="editIng" v-model="form.coordinates1"
27 :localdata="options"></uni-data-select>
28 </uni-forms-item>
29 <uni-forms-item label="详细地址" required><uni-easyinput v-model="form.siteAddress" :disabled="!editIng"
30 placeholder="请输入详细地址" type='textarea' /></uni-forms-item>
31
32 <uni-forms-item label="机构介绍" required><uni-easyinput v-model="form.introduce" placeholder="请输入机构介绍"
33 :disabled="!editIng" type='textarea' /></uni-forms-item>
34
35
36 </uni-forms>
37 <view class="fixedBottom">
38 <button class="btn-red" @click="submit()">提交,下一步</button>
39 </view>
40 </view>
41 <view class="wBox" v-if="active == 1">
42 <view>
43 <view>认证状态:
44 <text v-if="authenticationStatusa == 0 ||!authenticationStatusa" class="text-danger">未认证</text>
45 <text v-if="authenticationStatusa == 1" class="text-success">认证中</text>
46 <text v-if="authenticationStatusa == 2" class="text-success">已认证</text>
47 <text v-if="authenticationStatusa == 3" class="text-danger">认证未通过</text>
48 <text v-if="authenticationStatusa == 4" class="text-danger">即将过期</text>
49 <text v-if="authenticationStatusa == 5" class="text-danger">已过期</text>
50
51 </view>
52 <view>
53 <button v-if="authenticationStatusa==2" type="primary" :disabled="!result"
54 @click="audioFN1">去缴费</button>
55 <button v-if="authenticationStatusa!=2" type="primary" :disabled="!result"
56 @click="audioFN2">去认证</button>
57 <button v-if="form.deptType!=2" type="primary" @click="auditEditFN">审核详情</button>
58 </view>
59 </view>
60 <uni-forms>
61 <uni-forms-item label="选择所属协会" required>
62 <uni-data-select :disabled="!editIng" v-model="form.parentId"
63 :localdata="typeList" @change="changCase"></uni-data-select>
22 </uni-forms-item> 64 </uni-forms-item>
23 <uni-forms-item label="所在地区" required> 65 <uni-forms-item label="机构名称" required>
24 <uni-data-picker v-if="editIng" class="fixUniFormItemStyle" :clear-icon="!editIng" 66 <uni-easyinput v-model="form.name" :disabled="!editIng" placeholder="请输入机构名称" />
25 v-model="regionArr" @change="onchangeRegionId" :localdata="regionsList"
26 popup-title="请选择所在地区"></uni-data-picker>
27 <uni-easyinput v-model="baseFormData.regionStr" v-else disabled />
28 </uni-forms-item> 67 </uni-forms-item>
29 <uni-forms-item label="详细地址" required><uni-easyinput v-model="baseFormData.address" 68 </uni-forms>
30 :disabled="!editIng" placeholder="请输入详细地址" /></uni-forms-item> 69
31
32
33 </uni-forms>
34 <view class="fixedBottom">
35 <button class="btn-red" @click="saveMyteam()">下一步</button>
36 </view>
37 </view> 70 </view>
38 </view> 71 </view>
39 </view> 72 </view>
...@@ -48,18 +81,26 @@ ...@@ -48,18 +81,26 @@
48 onLoad, 81 onLoad,
49 onShow 82 onShow
50 } from '@dcloudio/uni-app'; 83 } from '@dcloudio/uni-app';
51 import {
52 tagList,
53 typeList,
54 comList
55 } from '@/static/js/data';
56 import config from '@/config.js' 84 import config from '@/config.js'
57 const app = getApp(); 85 const app = getApp();
58 const baseFormData = ref({ 86 const form = ref({
59 87 type: '1'
60 }); 88 });
61 const dataList = ref([]); 89 const typeList = ref([{
62 const memberList = ref([]); 90 value: '1',
91 text: '企业'
92 }, {
93 value: '1',
94 text: '国家组织'
95 }, {
96 value: '1',
97 text: '社会组织'
98 }, {
99 value: '1',
100 text: '其他'
101 }])
102 const options = ref([])
103
63 const regionArr = ref(); 104 const regionArr = ref();
64 const regionsList = ref([]); 105 const regionsList = ref([]);
65 const ranksList = ref([]); 106 const ranksList = ref([]);
...@@ -74,184 +115,129 @@ ...@@ -74,184 +115,129 @@
74 type: 0 115 type: 0
75 }); 116 });
76 const active = ref(0) 117 const active = ref(0)
118 const memberInfo = ref({})
119 const authenticationStatus = ref()
77 const list1 = ref([{ 120 const list1 = ref([{
78 title: '完善信息' 121 title: '完善信息'
79 }, { 122 }, {
80 title: '会员认证' 123 title: '会员认证'
81 }]) 124 }])
82 onLoad(option => { 125 onLoad(option => {
83 console.log(option) 126 if (app.globalData.isLogin) {
84 127 init()
85 getRegionsList(); 128 } else {
86 getDetail() 129 app.firstLoadCallback = () => {
130 init()
131 };
132 }
87 }); 133 });
88 function getDetail(){ 134
89 api.getMyOwnMemberInfo().then(res=>{ 135 function init() {
90 if (!res.data.memberInfo) res.data.memberInfo = {} 136 getDetail()
91 baseFormData.value = res.data.memberInfo 137 getRegionsList()
92 baseFormData.value.coordinates1 = [] 138 }
93 authenticationStatusa.value = res.data.authenticationStatus 139
94 if (baseFormData.value.siteProvinceId)baseFormData.value.coordinates1.push(baseFormData.value.siteProvinceId) 140 function getDetail() {
95 if (baseFormData.value.siteCityId) baseFormData.value.coordinates1.push(baseFormData.value.siteCityId) 141 api.getMyOwnMemberInfo().then(res => {
96 if (baseFormData.value.siteRegionId) baseFormData.value.coordinates1.push(baseFormData.value.siteRegionId) 142 if (res.data.memberInfo) {
97 143 form.value = res.data.memberInfo
98 }) 144 }
145 form.value.coordinates1 = []
146 authenticationStatus.value = res.data.authenticationStatus
147 if (form.value.siteProvinceId) {
148 form.value.coordinates1.push(form.value.siteProvinceId)
149 }
150 if (form.value.siteCityId) {
151 form.value.coordinates1.push(form.value.siteCityId)
152 }
153 if (form.value.siteRegionId) {
154 form.value.coordinates1.push(form.value.siteRegionId)
155 }
156
157 })
99 } 158 }
100 159
101 function getRegionsList() { 160 function getRegionsList() {
102 api.regionsList().then(res => { 161 api.regionsList().then(res => {
103 regionsList.value = res.data; 162 options.value = res.data;
104 }); 163 });
105 } 164 }
106 165
107 function onchangeRegionId(e) { 166 function submit() {
108 console.log(e.detail.value)
109 baseFormData.value.regionId = regionArr.value
110 }
111
112 function saveMyteam() {
113 // 验证必填项 167 // 验证必填项
114 if (baseFormData.value.imgUrl == '') { 168 if (form.value.baseName == '') {
115 uni.showToast({
116 title: '请上传logo',
117 duration: 2000,
118 icon: 'none'
119 })
120 return
121 }
122 if (baseFormData.value.name == '') {
123 uni.showToast({ 169 uni.showToast({
124 title: '请填写团体名称', 170 title: '请填写单位名称',
125 duration: 2000, 171 duration: 2000,
126 icon: 'none' 172 icon: 'none'
127 }) 173 })
128 return 174 return
129 } 175 }
130 if (baseFormData.value.abreviations == '') { 176 if (form.value.contact == '') {
131 uni.showToast({ 177 uni.showToast({
132 title: '请填写简称', 178 title: '请填写联系人',
133 duration: 2000,
134 icon: 'none'
135 })
136 return
137 }
138 if (baseFormData.value.type == '') {
139 uni.showToast({
140 title: '请选择参赛队类型',
141 duration: 2000, 179 duration: 2000,
142 icon: 'none' 180 icon: 'none'
143 }) 181 })
144 return 182 return
145 } 183 }
146 // if(baseFormData.value.type=='3'&&!baseFormData.value.ctype){ 184 if (form.value.phone == '') {
147 // uni.showToast({
148 // title: '请选择企业性质',
149 // duration: 2000,
150 // icon:'none'
151 // })
152 // return
153 // }
154 if (baseFormData.value.contactPerson == '') {
155 uni.showToast({ 185 uni.showToast({
156 title: '请填写联系', 186 title: '请填写联系电话',
157 duration: 2000, 187 duration: 2000,
158 icon: 'none' 188 icon: 'none'
159 }) 189 })
160 return 190 return
161 } 191 }
162 if (baseFormData.value.contactTelno == '') { 192 if (form.value.belongProvinceId == '') {
163 uni.showToast({ 193 uni.showToast({
164 title: '请填写联系方式', 194 title: '请选择所属省份',
165 duration: 2000, 195 duration: 2000,
166 icon: 'none' 196 icon: 'none'
167 }) 197 })
168 return 198 return
169 } 199 }
170 var pattern = /^1[3456789]\d{9}$/; 200 if (form.value.siteAddress == '') {
171 if (!pattern.test(baseFormData.value.contactTelno)) {
172 uni.showToast({ 201 uni.showToast({
173 title: '请输入正确的手机号', 202 title: '请填写详细地址',
174 duration: 2000, 203 duration: 2000,
175 icon: 'none' 204 icon: 'none'
176 }) 205 })
177 return 206 return
178 } 207 }
179 208
180 if (baseFormData.value.regionId == '') { 209 if (form.value.coordinates1 == '') {
181 uni.showToast({ 210 uni.showToast({
182 title: '选择所在地', 211 title: '选择所在地',
183 duration: 2000, 212 duration: 2000,
184 icon: 'none' 213 icon: 'none'
185 }) 214 })
186 return 215 return
187 } 216 }
188 if (baseFormData.value.address == '') { 217 if (form.value.introduce == '') {
189 uni.showToast({ 218 uni.showToast({
190 title: '请填写详细地址', 219 title: '请填写机构介绍',
191 duration: 2000, 220 duration: 2000,
192 icon: 'none' 221 icon: 'none'
193 }) 222 })
194 return 223 return
195 } 224 }
196 225 api.createMyMember(form.value).then(res => {
197 for (let n in participantsInfoArr.value) { 226 if (res.data.token) {
198 if (participantsInfoArr.value[n].status == 0 && (!participantsInfoArr.value[n].value)) { 227 uni.setStorageSync('token', 'Bearer ' + res.data.token)
199 uni.showToast({
200 title: '请完善必填字段',
201 duration: 2000,
202 icon: 'none'
203 })
204 return
205 }
206
207 }
208
209
210
211 match.saveMyGroup(baseFormData.value).then(res => {
212 groupId.value = res.data
213 if (participantsInfoArr.value && participantsInfoArr.value.length > 0) {
214 // 保存补充信息
215 const obj = {
216 cptId: cptId.value,
217 groupId: groupId.value,
218 groupInfo: JSON.stringify(participantsInfoArr.value)
219 }
220 match.saveMyGroupExtraInfo(obj).then(res => {
221
222 })
223 }
224
225 if (!signType.value) {
226 uni.showToast({
227 title: '保存成功',
228 icon: 'none',
229 duration: 2000
230 });
231 editIng.value = false;
232 } else if (signType.value == 1) {
233 // 团队
234 if (coachOrLeaderFlag.value == "1") {
235 uni.navigateTo({
236 url: `/pages_match/match/choose_coach?matchId=${cptId.value}&groupId=${groupId.value}&signType=${signType.value}`
237 });
238 } else {
239 // 选运动员
240 uni.navigateTo({
241 url: `/pages_match/match/choose_sportman?matchId=${cptId.value}&groupId=${groupId.value}&signType=${signType.value}`
242 });
243 }
244
245 } else if (signType.value == 2) {
246 // 队伍
247 uni.navigateTo({
248 url: `/pages_match/match/add_rank?matchId=${cptId.value}&groupId=${groupId.value}&signType=${signType.value}`
249 });
250 } 228 }
251 }); 229 active.value = 1
230 })
252 } 231 }
253 </script> 232 </script>
254 233
255 <style lang="scss"> 234 <style lang="scss" scoped>
256 235 .wBox {
236 width: 700rpx;
237 padding: 30rpx;
238 margin: 20rpx auto 0;
239 background: #FFFFFF;
240 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
241 border-radius: 15rpx;
242 }
257 </style> 243 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
6 <view class="wBox" v-if="active == 0"> 6 <view class="wBox" v-if="active == 0">
7 <uni-forms ref="baseForm" :modelValue="form" label-width="100"> 7 <uni-forms ref="baseForm" :modelValue="form" label-width="100">
8 <uni-forms-item label="考试名称"> 8 <uni-forms-item label="考试名称">
9 <view v-if="form.name">{{form.name}}</view> 9 <view class="align-forms-item" v-if="form.name">{{form.name}}</view>
10 <view v-else class="align-forms-item-placeHolder">自动生成</view> 10 <view v-else class="align-forms-item-placeHolder">自动生成</view>
11 </uni-forms-item> 11 </uni-forms-item>
12 <uni-forms-item label="申请单位" required> 12 <uni-forms-item label="申请单位" required>
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
24 <uni-forms-item label="考级地点" required> 24 <uni-forms-item label="考级地点" required>
25 <uni-easyinput v-model="form.examLocation" placeholder="考级地点" /> 25 <uni-easyinput v-model="form.examLocation" placeholder="考级地点" />
26 </uni-forms-item> 26 </uni-forms-item>
27 <uni-forms-item @updateData="updateData" :label="`考官${ec}`" v-for="ec in examinerForChoose" :key="ec"> 27 <uni-forms-item @updateData="updateData" :label="`考官${ec}`" v-for="ec in examinerForChoose"
28 :key="ec">
28 <view @click="selectFN(ec)" class="mask"> 29 <view @click="selectFN(ec)" class="mask">
29 <uni-easyinput v-model="form[`examiner_${ec}`]" clearable placeholder="点击选择考官" /> 30 <uni-easyinput v-model="form[`examiner_${ec}`]" clearable placeholder="点击选择考官" />
30 </view> 31 </view>
...@@ -33,55 +34,97 @@ ...@@ -33,55 +34,97 @@
33 </uni-forms> 34 </uni-forms>
34 35
35 </view> 36 </view>
36 <view class="wBox" v-if="active == 1"> 37 <view class="wBox" v-if="active == 1">
37 <!-- 添加考生 --> 38 <!-- 添加考生 -->
38 <button class="btn-red-kx">在线选择</button> 39 <button class="btn-red-kx mini" @click="chooseOnline">在线选择</button>
39 <view class="vipData"> 40 <view class="vipData mt30">
40 <view><text>{{total}}</text></view> 41 <view><text>{{tablePersonInfo.total}}</text></view>
41 </view> 42 <view v-for="l in tablePersonInfo.levelArr" :key="l.level">
42 <view class="userlist"> 43 {{ szToHz(l.level) }}级:<text>{{tablePersonInfo.total}}</text></view>
43 <view class="item" v-for="n in list" style="background-color: #fffafa;"> 44 </view>
45 <view class="userlist">
46 <view class="item" v-for="n in infoList" style="background-color: #fffafa;">
44 <view class="w100"> 47 <view class="w100">
45 <view class="photobox"> 48 <view style="display: flex;">
46 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> 49 <view class="photobox">
47 <view class="colorful" v-else>{{n.name.slice(0,1)}}</view> 50 <image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo"
51 mode='aspectFill'></image>
52 <view class="colorful" v-else>{{n.realName?.slice(0,1)}}</view>
48 </view> 53 </view>
49 <view class="name">{{n.realName}} <text>{{n.code}}</text></view> 54 <view>
50 <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view> 55 <view class="name">{{n.realName}} <text>{{n.perCode}}</text></view>
51 <view class="flexbox"> 56 <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view>
52 <view> 57 </view>
53 原有级别 58 </view>
54 <text>{{n}}</text> 59 <view class="flexbox mt30">
55 </view> 60 <view>
56 <view> 61 原有级别
62 <text style="padding: 15rpx 0;">{{ szToHz(n.levelOld) }}</text>
63 </view>
64 <view style="width: 40%;">
57 考试级别 65 考试级别
58 <uni-data-select 66 <view @click="changeLevelfather(n)">
59 v-model="value" 67 <uni-data-select v-model="n.levelNew" :localdata="levelArr"
60 :localdata="range" 68 @change="changeLevel"></uni-data-select>
61 @change="change" 69 </view>
62 ></uni-data-select> 70
63 </view> 71 </view>
64 72
65 <view> 73 <view style="width: 30%;">
66 是否通过 74 是否通过
67 <uni-data-select 75 <view>
68 v-model="value" 76 <uni-data-select v-model="n.isPass" :localdata="range"
69 :localdata="range" 77 ></uni-data-select>
70 @change="change" 78 </view>
71 ></uni-data-select> 79 </view>
72 </view> 80 </view>
73 </view> 81 </view>
74 </view> 82
75 83 </view>
84 <view class="nodata" v-if="infoList.length==0">
85 <image mode="aspectFit" src="/static/nodata.png"></image>
86 <text>待添加考生</text>
76 </view> 87 </view>
77 </view> 88 </view>
78 </view> 89 </view>
79 </view> 90 </view>
80 </view> 91 </view>
81 <view class="fixedBottom"> 92 <view class="fixedBottom" v-if="active == 0">
82 <button class="btn-red-kx" style="width: 40%;" @click="submitForm(0)">保存</button> 93 <button class="btn-red-kx" style="width: 40%;" @click="submitForm(0)">保存</button>
83 <button class="btn-red" style="width: 40%;" @click="submitForm(1)">下一步</button> 94 <button class="btn-red" style="width: 40%;" @click="submitForm(1)">下一步</button>
84 </view> 95 </view>
96 <view class="fixedBottom" v-if="active == 1">
97 <button class="btn-red-kx" style="width: 25%;" @click="active=0">上一步</button>
98 <button class="btn-red" style="width: 25%;" @click="submitForm2(0)">保存</button>
99 <button class="btn-red" style="width: 30%;" @click="submitForm2(1)">提交审核</button>
100 </view>
101
102
103 <uni-popup ref="choseStudent" type="bottom" background-color="#fff" animation>
104 <view class="popBody">
105 <view class="userlist">
106 <view class="item" v-for=" n in studentList">
107 <view @click="checkThis(n)">
108 <image class="icon" v-if="n.checked" src="@/static/member/dx_dwn.png" />
109 <image class="icon" v-else src="@/static/member/dx.png" />
110 </view>
111 <view class="photobox">
112 <image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'>
113 </image>
114 <view class="colorful" v-else>{{n.name.slice(0,1)}}</view>
115 </view>
116 <view>
117 <view class="name">{{n.name}} <text>{{n.perCode}}</text></view>
118 <view class="date">到期时间:{{n.validityDate}}</view>
119 <view class="date" style="color: #1561CB;" v-if="n.levelJi&&n.levelJi!=0">级位:{{szToHz(n.levelJi)}}</view>
120 <view class="date" v-else >级位:十级</view>
121 </view>
122 </view>
123
124 <button class="btn-red-kx" @click="submitStudents">确定</button>
125 </view>
126 </view>
127 </uni-popup>
85 </view> 128 </view>
86 </template> 129 </template>
87 130
...@@ -94,11 +137,6 @@ ...@@ -94,11 +137,6 @@
94 onLoad, 137 onLoad,
95 onShow 138 onShow
96 } from '@dcloudio/uni-app'; 139 } from '@dcloudio/uni-app';
97 import {
98 tagList,
99 typeList,
100 comList
101 } from '@/static/js/data';
102 import config from '@/config.js' 140 import config from '@/config.js'
103 import dayjs from 'dayjs' 141 import dayjs from 'dayjs'
104 import _ from 'lodash' 142 import _ from 'lodash'
...@@ -110,13 +148,21 @@ ...@@ -110,13 +148,21 @@
110 const dataList = ref([]); 148 const dataList = ref([]);
111 const examinerForChoose = ['A', 'B', 'C'] 149 const examinerForChoose = ['A', 'B', 'C']
112 const examinerArr = [] 150 const examinerArr = []
113 const active = ref(0) 151 const active = ref(0)
114 const total = ref(0) 152 const total = ref(0)
115 const list1 = ref([{ 153 const list1 = ref([{
116 title: '考级基本信息' 154 title: '考级基本信息'
117 }, { 155 }, {
118 title: '添加考生' 156 title: '添加考生'
119 }]) 157 }])
158 const choseStudent = ref(null)
159 const studentList = ref([])
160 const infoList = ref([])
161 const ids = ref([])
162 const tablePersonInfo = ref({})
163 const transcript = ref([])
164 const levelArr = ref([{value:'10',text:'十级'},{value:'9',text:'九级'},{value:'8',text:'八级'},{value:'7',text:'七级'},{value:'6',text:'六级'},{value:'5',text:'五级'},{value:'4',text:'四级'},{value:'3',text:'三级'},{value:'2',text:'二级'},{value:'1',text:'一级'}])
165 const range = ref([{value:'1',text:'是'},{value:'0',text:'否'}])
120 let examId 166 let examId
121 onLoad(option => { 167 onLoad(option => {
122 console.log(option) 168 console.log(option)
...@@ -155,7 +201,7 @@ ...@@ -155,7 +201,7 @@
155 uni.$on('chosen', updateData) 201 uni.$on('chosen', updateData)
156 }) 202 })
157 203
158 function updateData(e) { 204 function updateData(e) {
159 // console.log(e) 205 // console.log(e)
160 examinerArr.push(e.obj) 206 examinerArr.push(e.obj)
161 form.value[`examiner_${e.ec}`] = e.obj.name 207 form.value[`examiner_${e.ec}`] = e.obj.name
...@@ -253,30 +299,204 @@ ...@@ -253,30 +299,204 @@
253 return 299 return
254 } 300 }
255 save().then(() => { 301 save().then(() => {
256 // form.value.examId 下一步 302 // form.value.examId 下一步
257 active.value == 1 303 active.value = 1
304 getChosedStudentList()
258 }) 305 })
259 } 306 }
260 } 307 }
261 function save() { 308
262 if (form.value.examId) { 309 function save() {
263 return updateLevelInfo(form.value).then(() => { 310 if (form.value.examId) {
311 return api.updateLevelInfo(form.value).then(() => {
312 uni.showToast({
313 title: `保存成功`,
314 icon: 'none'
315 })
316 })
317 } else {
318 return api.addLevelInfo(form.value).then((res) => {
319 form.value.examId = res.data.examId
320 form.value.name = res.data.name
321 uni.showToast({
322 title: `保存成功`,
323 icon: 'none'
324 })
325 })
326 }
327 }
328
329 function chooseOnline() {
330
331 var obj = {
332 memId: memberInfo.memId,
333 examId: form.value.examId,
334 examType: form.value.type
335 }
336 api.chooseStudentsList(obj).then(response => {
337 studentList.value = response.rows
338 for (var s of studentList.value) {
339 s.checked = false
340 }
341 choseStudent.value.open()
342 })
343 }
344
345 function checkThis(item) {
346 if (item.checked) {
347 item.checked = false
348 } else {
349 item.checked = true
350 }
351 }
352
353 function submitStudents() {
354 ids.value = []
355 for (var s of studentList.value) {
356 if (s.checked) {
357 ids.value.push(s.perId)
358 }
359 }
360 if (ids.value.length == 0) {
264 uni.showToast({ 361 uni.showToast({
265 title: `保存成功`, 362 title: '请选择考生',
266 icon: 'none' 363 icon: 'none'
267 }) 364 })
268 }) 365 return
269 } else { 366 }
270 return addInfo(form.value).then((res) => { 367 api.batchChoose({
271 form.value.examId = res.data.examId 368 examId: form.value.examId,
272 form.value.name = res.data.name 369 perIds: ids.value
273 uni.showToast({ 370 }).then(() => {
274 title: `保存成功`, 371 getChosedStudentList()
275 icon: 'none' 372 choseStudent.value.close()
276 }) 373 })
277 })
278 }
279 } 374 }
375
376 function getChosedStudentList() {
377 var obj = {
378 examId: form.value.examId
379 }
380 api.getStudentList(obj).then(res => {
381 _.each(res.rows, (d) => {
382 if (d.levelOld) {
383 d.levelRecommend = (parseInt(d.levelOld) - 1) + ''
384 if (d.levelRecommend === '0') {
385 d.levelRecommend = '1'
386 }
387 } else {
388 d.levelRecommend = '9'
389 }
390
391 if (!d.levelNew) {
392 d.levelNew = d.levelRecommend
393 }
394
395 if (!d.isPass) {
396 d.isPass = '1'
397 }
398 })
399
400 infoList.value = res.rows
401
402 }).then(getTablePersonInfo)
403 }
404
405 function getTablePersonInfo() {
406 const total = infoList.value.length
407 const levelArr = []
408 _.each(infoList.value, (d) => {
409 const temp = _.find(levelArr, (l) => {
410 return l.level == d.levelNew
411 })
412 if (temp) {
413 temp.num++
414 } else {
415 levelArr.push({
416 level: d.levelNew,
417 num: 1
418 })
419 }
420 })
421
422 tablePersonInfo.value = {
423 total: total,
424 levelArr: _.sortBy(levelArr, (l) => {
425 return l.level
426 })
427 }
428 }
429 function szToHz(num) {
430 const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
431 return hzArr[parseInt(num)]
432 }
433
434 let nowRow
435 function changeLevelfather(row){
436 nowRow = row
437 }
438 function changeLevel(e){
439 console.log(e)
440 if (e !== nowRow.levelRecommend) {
441 uni.showModal({
442 title: '提示',
443 content: `建议考试级别为 "${szToHz(nowRow.levelRecommend)}级" ,确定要修改吗?`,
444 success: function(res) {
445 if (res.confirm) {
446 getTablePersonInfo()
447 }
448 },
449 fail: function (res) {
450 nowRow.levelNew = nowRow.levelRecommend
451 }
452 })
453 }
454 }
455 function submitForm2(flag){
456 if (flag === 1) {
457 if (infoList.value.length == 0) {
458 uni.showToast({
459 title: '请选择考生',
460 icon: 'none'
461 })
462 return
463 }
464 if (!form.value.transcript) {
465 uni.showToast({
466 title: '请上传成绩单',
467 icon: 'none'
468 })
469 return
470 }
471
472 uni.showModal({
473 title: '提示',
474 content: `确定提交审核?`,
475 success: function(res) {
476 saveStep2(flag)
477 }
478 })
479 } else {
480 saveStep2(flag)
481 }
482 }
483 function saveStep2(flag){
484 const data = _.map(infoList.value, (d) => {
485 return {
486 id: d.id,
487 levelNew: d.levelNew,
488 // score: d.score,
489 isPass: d.isPass
490 }
491 })
492 return api.editLevel({
493 examId: form.value.examId,
494 personInfo: JSON.stringify(data),
495 transcript: form.value.transcript,
496 status: flag
497 })
498 }
499
280 </script> 500 </script>
281 501
282 <style lang="scss" scoped> 502 <style lang="scss" scoped>
...@@ -291,13 +511,6 @@ ...@@ -291,13 +511,6 @@
291 511
292 :deep(.uni-forms-item__inner) { 512 :deep(.uni-forms-item__inner) {
293 padding-bottom: 20rpx; 513 padding-bottom: 20rpx;
294 } 514 }
295 515 .popBody{padding: 30rpx;}
296 :deep(.uni-forms-item__label .label-text) {
297 font-size: 28rpx !important;
298 }
299
300 :deep(.uni-input-input) {
301 font-size: 30rpx !important;
302 }
303 </style> 516 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
10 <view class="appItem" v-for="item in list"> 10 <view class="appItem" v-for="item in list">
11 <view class="status" @click="goDetail(item)"> 11 <view class="status" @click="goDetail(item)">
12 <text :class="{ 12 <text :class="{
13 'text-primary':item.status=='1',
13 'text-success':item.status=='2', 14 'text-success':item.status=='2',
14 'text-danger':item.status=='3', 15 'text-danger':item.status=='3',
15 'text-warning':item.status=='4' 16 'text-warning':item.status=='4'
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
4 styleType="text" activeColor="#AD181F"></uni-segmented-control>
3 5
6 <view class="appList">
7 <view class="appItem" v-for="item in infoList">
8 <view class="status" @click="goDetail(item)">
9 <text :class="{
10 'text-primary':item.auditStatus=='0',
11 'text-success':item.auditStatus=='1',
12 'text-danger':item.auditStatus=='2',
13 'text-warning':item.auditStatus=='3'
14 }">{{ item.statusStr }}</text>
15 </view>
16
17 <view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
18 <view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
19 <view class="pp esp">考级日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}</view>
20 <view class="flexbox" @click="goDetail(item)">
21 <view>
22 申请日期
23 <view>{{item.applyTime.substring(0, 10)}}</view>
24 </view>
25 <view>
26 申请单位
27 <view>{{item.memberName}}</view>
28 </view>
29 <view>
30 通过人数
31 <view>{{item.pass}}</view>
32 </view>
33 </view>
34 <view class="func" v-if="item.auditStatus=='0'">
35 <button @click="audit(item,'2')">拒绝</button>
36 <button @click="audit(item,'1')">同意</button>
37 </view>
38 </view>
39 </view>
40
41
42
43 <view class="nodata" v-if="infoList.length==0">
44 <image mode="aspectFit" src="/static/nodata.png"></image>
45 <text>暂无数据</text>
46 </view>
4 </view> 47 </view>
5 </template> 48 </template>
6 49
7 <script setup> 50 <script setup>
8 51 import * as api from '@/common/api.js'
9 </script> 52 import config from '@/config.js'
53 import _ from 'lodash'
54 import {
55 onMounted,
56 ref
57 } from 'vue'
58 import {
59 onLoad,
60 onShow
61 } from '@dcloudio/uni-app'
62 const app = getApp();
63 const queryParams = ref({
64 // pageNum: 1,
65 // pageSize: 10
66 status: '0',
67 type: '1'
68 })
69 const navs = ref(['审核中', '审核通过', '审核拒绝'])
70 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
71 const current = ref()
72 const infoList = ref([])
73 const total = ref(0)
74 const deptType = ref('')
75 onLoad(() => {
76
77 })
78 onShow(() => {
79 if (app.globalData.isLogin) {
80 init()
81 } else {
82
83 app.firstLoadCallback = () => {
84 init()
85 };
86 }
87 })
88
89 function init() {
90 uni.showLoading({
91 title: '加载中'
92 })
93 deptType.value = app.globalData.deptType
94 getList()
95 }
96
97
98 function getList() {
99 api.getVerityList(queryParams.value).then(res => {
100 uni.hideLoading()
101 const list = []
102 _.each(res.rows, r => {
103 const item = JSON.parse(r.content)
104 item.recordId = r.recordId
105 item.auditStatus = r.auditStatus
106 item.submitStatus = r.submitStatus
107 item.distributeTime = r.distributeTime
108 item.statusStr = statusArr[r.auditStatus]
109 item.remark = r.remark
110 item.isView = r.isView
111 item.sourceData = r
112 item.auditProcess = r.auditProcess
113 list.push(item)
114 })
115 infoList.value = list
116 total.value = res.total
117 })
118 }
119
120 function onClickItem(e) {
121 console.log(e)
122 uni.showLoading({
123 title: '加载中'
124 })
125 queryParams.value.status = e.currentIndex
126 getList()
127 }
128
129 function goDetail(item) {
130 if(item.status!='0'){
131 let path = `/pages/level/applyDetail?examId=${item.examId}`
132 uni.navigateTo({
133 url: path
134 });
135 } else {
136 return
137 }
138
139 }
140
141 function audit(item, flag) {
142 console.log(item.sourceData)
143 var obj = {
144 flag: flag,
145 reason: null,
146 body: [JSON.stringify(item.sourceData)]
147 }
148
149 if (flag == '2') {
150 // 拒绝
151 // 弹出框填写理由
152 uni.showModal({
153 title: '请输入拒绝理由',
154 editable: true,
155 success: function(res) {
156 if (res.confirm) {
157 if (!res.content) {
158 uni.showToast({
159 title: '请输入拒绝理由',
160 icon: 'none'
161 })
162 } else {
163 obj.reason = res.content
164 doApproval(obj)
165 }
166 }
167 }
168 })
169 } else if (flag == '1') {
170 // 二次确认
171 uni.showModal({
172 title: '提示',
173 content: `确定审批通过吗`,
174 success: function(res) {
175 if (res.confirm) {
176 doApproval(obj)
177 }
178 }
179 })
180 }
181 }
182
183 function doApproval(obj) {
184 console.log(obj)
185 api.doVerity(obj).then((res) => {
186 uni.showToast({
187 title: '操作成功',
188 icon: 'none'
189 })
190 getList()
191 })
192 }
193 </script>
10 194
11 <style lang="scss">
12 195
196 <style scoped>
197 .searchbar {
198 display: flex;
199 align-items: center;
200 padding: 25rpx;
201 box-sizing: border-box;
202
203 :deep(.uni-easyinput .uni-easyinput__content) {
204 border-radius: 35rpx;
205 border: none;
206 height: 70rpx;
207 }
208
209 :deep(.uni-easyinput__content-input) {
210 font-size: 26rpx;
211 }
212
213 .invertedbtn-red {
214 border-radius: 50px;
215 background-color: #fff;
216
217 font-size: 30rpx;
218 padding: 10rpx 20rpx;
219 }
220 }
221
222 .mt0 {
223 margin-top: 0 !important;
224 }
225
226 .appList .appItem .name {
227 width: 80%;
228 word-break: break-all;
229 }
13 </style> 230 </style>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
9 <view class="userlist"> 9 <view class="userlist">
10 <view class="item" v-for="n in list"> 10 <view class="item" v-for="n in list">
11 <view class="photobox"> 11 <view class="photobox">
12 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> 12 <image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
13 <view class="colorful" v-else>{{n.name.slice(1,2)}}</view> 13 <view class="colorful" v-else>{{n.name.slice(1,2)}}</view>
14 </view> 14 </view>
15 <view> 15 <view>
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
10 <view class="userlist"> 10 <view class="userlist">
11 <view class="item" v-for="n in list"> 11 <view class="item" v-for="n in list">
12 <view class="photobox"> 12 <view class="photobox">
13 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> 13 <image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
14 <view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view> 14 <view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view>
15 </view> 15 </view>
16 <view> 16 <view>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
12 <view class="content-box" @click="handleInfo(n)"> 12 <view class="content-box" @click="handleInfo(n)">
13 <view class="flexbox"> 13 <view class="flexbox">
14 <view class="photobox"> 14 <view class="photobox">
15 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> 15 <image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
16 <view class="colorful" v-else>{{n.name.slice(0,1)}}</view> 16 <view class="colorful" v-else>{{n.name.slice(0,1)}}</view>
17 </view> 17 </view>
18 <view> 18 <view>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
9 <view class="userlist"> 9 <view class="userlist">
10 <view class="item" v-for="n in list"> 10 <view class="item" v-for="n in list">
11 <view class="photobox"> 11 <view class="photobox">
12 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> 12 <image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
13 <view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view> 13 <view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view>
14 </view> 14 </view>
15 <view> 15 <view>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
15 <image class="icon" v-else src="@/static/member/dx.png" /> 15 <image class="icon" v-else src="@/static/member/dx.png" />
16 </view> 16 </view>
17 <view class="photobox"> 17 <view class="photobox">
18 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> 18 <image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
19 <view class="colorful" v-else>{{n.name.slice(0,1)}}</view> 19 <view class="colorful" v-else>{{n.name.slice(0,1)}}</view>
20 </view> 20 </view>
21 <view @click="handleInfo(n)"> 21 <view @click="handleInfo(n)">
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!