no message
Showing
22 changed files
with
2607 additions
and
158 deletions
| ... | @@ -370,8 +370,113 @@ function doVerity(data) { | ... | @@ -370,8 +370,113 @@ function doVerity(data) { |
| 370 | params: data | 370 | params: data |
| 371 | }) | 371 | }) |
| 372 | } | 372 | } |
| 373 | 373 | function mergeRecords(data) { | |
| 374 | 374 | return request({ | |
| 375 | url: '/exam/info/mergeRecords', | ||
| 376 | method: 'post', | ||
| 377 | params: data | ||
| 378 | }) | ||
| 379 | } | ||
| 380 | function groupAudit(data) { | ||
| 381 | return request({ | ||
| 382 | url: '/member/certified/audit', | ||
| 383 | method: 'post', | ||
| 384 | params: data | ||
| 385 | }) | ||
| 386 | } | ||
| 387 | function groupMergeApi(data) { | ||
| 388 | return request({ | ||
| 389 | url: `/member/certified/merge`, | ||
| 390 | method: 'post', | ||
| 391 | params:data | ||
| 392 | }) | ||
| 393 | } | ||
| 394 | function getDetailList(data) { | ||
| 395 | return request({ | ||
| 396 | url: `/member/certified/getDetailList`, | ||
| 397 | method: 'get', | ||
| 398 | params: data | ||
| 399 | }) | ||
| 400 | } | ||
| 401 | function getPayList(data) { | ||
| 402 | return request({ | ||
| 403 | url: `/member/certifiedRange/list`, | ||
| 404 | method: 'get', | ||
| 405 | params: data | ||
| 406 | }) | ||
| 407 | } | ||
| 408 | function getFillAuditLog(rangeId) { | ||
| 409 | return request({ | ||
| 410 | url: `/member/certifiedRange/fillAuditLog/${rangeId}`, | ||
| 411 | method: 'get' | ||
| 412 | }) | ||
| 413 | } | ||
| 414 | function commitGroupPay(rangeId) { | ||
| 415 | return request({ | ||
| 416 | url: `/member/certifiedRange/commit/${rangeId}`, | ||
| 417 | method: 'post' | ||
| 418 | }) | ||
| 419 | } | ||
| 420 | function getGroupFeeBill(query) { | ||
| 421 | return request({ | ||
| 422 | url: '/member/certifiedDoc/list', | ||
| 423 | method: 'get', | ||
| 424 | params: query | ||
| 425 | }) | ||
| 426 | } | ||
| 427 | function groupCommitPaymentVoucher(data) { | ||
| 428 | return request({ | ||
| 429 | url: '/member/certifiedDoc/commitPaymentVoucher', | ||
| 430 | method: 'post', | ||
| 431 | params: data | ||
| 432 | }) | ||
| 433 | } | ||
| 434 | function getFeeBillById(id) { | ||
| 435 | return request({ | ||
| 436 | url: `/member/certifiedDoc/${id}`, | ||
| 437 | method: 'get' | ||
| 438 | }) | ||
| 439 | } | ||
| 440 | function personalCommit(id) { | ||
| 441 | return request({ | ||
| 442 | url: `/person/paymentRange/commit/${id}`, | ||
| 443 | method: 'post', | ||
| 444 | params: id | ||
| 445 | }) | ||
| 446 | } | ||
| 447 | function delPayment(payIds) { | ||
| 448 | return request({ | ||
| 449 | url: `/person/payment/${payIds}`, | ||
| 450 | method: 'DELETE' | ||
| 451 | }) | ||
| 452 | } | ||
| 453 | function editYear(id, year) { | ||
| 454 | return request({ | ||
| 455 | url: `/person/payment/editYear/${id}`, | ||
| 456 | method: 'get', | ||
| 457 | params: { year: year } | ||
| 458 | }) | ||
| 459 | } | ||
| 460 | function addPersonPaymentGroup(data) { | ||
| 461 | return request({ | ||
| 462 | url: `/person/payment/addPersonPaymentGroup`, | ||
| 463 | method: 'post', | ||
| 464 | params: data | ||
| 465 | }) | ||
| 466 | } | ||
| 467 | function commitRenew(id) { | ||
| 468 | return request({ | ||
| 469 | url: `/person/paymentRange/commit/${id}`, | ||
| 470 | method: 'post' | ||
| 471 | }) | ||
| 472 | } | ||
| 473 | function getVerityMergeList(params) { | ||
| 474 | return request({ | ||
| 475 | url: '/exam/info/verityMergeList', | ||
| 476 | method: 'get', | ||
| 477 | params: params | ||
| 478 | }) | ||
| 479 | } | ||
| 375 | export { | 480 | export { |
| 376 | getMessage, | 481 | getMessage, |
| 377 | reader, | 482 | reader, |
| ... | @@ -410,5 +515,12 @@ export { | ... | @@ -410,5 +515,12 @@ export { |
| 410 | updateLevelInfo,addLevelInfo, | 515 | updateLevelInfo,addLevelInfo, |
| 411 | chooseStudentsList,batchChoose,getVerityList, | 516 | chooseStudentsList,batchChoose,getVerityList, |
| 412 | getGroupHistoryByRelateId, | 517 | getGroupHistoryByRelateId, |
| 413 | createMyMember,doVerity | 518 | createMyMember,doVerity,mergeRecords, |
| 519 | groupAudit,groupMergeApi, | ||
| 520 | getDetailList,getPayList, | ||
| 521 | getFillAuditLog,commitGroupPay,getGroupFeeBill, | ||
| 522 | groupCommitPaymentVoucher,getFeeBillById, | ||
| 523 | personalCommit, | ||
| 524 | delPayment,editYear,addPersonPaymentGroup, | ||
| 525 | commitRenew,getVerityMergeList | ||
| 414 | } | 526 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -3,9 +3,13 @@ page { | ... | @@ -3,9 +3,13 @@ page { |
| 3 | overflow: auto; | 3 | overflow: auto; |
| 4 | background: #f5f7f9; | 4 | background: #f5f7f9; |
| 5 | } | 5 | } |
| 6 | .w50{width: 50%;} | ||
| 7 | .w100{width: 100%;} | ||
| 8 | .vipData .w50{width: 45%;} | ||
| 6 | .esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;} | 9 | .esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;} |
| 7 | .flexbox{display: flex;} | 10 | .flexbox{display: flex;} |
| 8 | .mt30{margin-top: 30rpx;} | 11 | .mt30{margin-top: 30rpx;} |
| 12 | .mtb30{margin: 30rpx 0;} | ||
| 9 | .mt40{margin-top: 40rpx;} | 13 | .mt40{margin-top: 40rpx;} |
| 10 | .mt50{margin-top: 50rpx;} | 14 | .mt50{margin-top: 50rpx;} |
| 11 | .align-forms-item-placeHolder{color: #999;line-height: 2.6;} | 15 | .align-forms-item-placeHolder{color: #999;line-height: 2.6;} |
| ... | @@ -109,6 +113,7 @@ font-size: 30rpx!important;} | ... | @@ -109,6 +113,7 @@ font-size: 30rpx!important;} |
| 109 | .appItem{background: #FFFFFF;padding: 30rpx;margin-bottom: 30rpx; | 113 | .appItem{background: #FFFFFF;padding: 30rpx;margin-bottom: 30rpx; |
| 110 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196,203,214,0.1); | 114 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196,203,214,0.1); |
| 111 | border-radius: 15rpx;position: relative; | 115 | border-radius: 15rpx;position: relative; |
| 116 | .iconbox{position: absolute;left: 20rpx;} | ||
| 112 | .pp{font-size: 28rpx;color: #666;margin-bottom: 10rpx;} | 117 | .pp{font-size: 28rpx;color: #666;margin-bottom: 10rpx;} |
| 113 | .date{ | 118 | .date{ |
| 114 | font-size: 28rpx; | 119 | font-size: 28rpx; |
| ... | @@ -343,7 +348,9 @@ border-radius: 20rpx 20rpx 0rpx 0rpx; | ... | @@ -343,7 +348,9 @@ border-radius: 20rpx 20rpx 0rpx 0rpx; |
| 343 | image{width: 20vw;height: 20vw;display: block;margin: auto;} | 348 | image{width: 20vw;height: 20vw;display: block;margin: auto;} |
| 344 | } | 349 | } |
| 345 | } | 350 | } |
| 346 | 351 | .block-btn-box{padding: 30rpx; | |
| 352 | .btn-red-kx{line-height: 2;font-size: 30rpx;} | ||
| 353 | } | ||
| 347 | 354 | ||
| 348 | 355 | ||
| 349 | 356 | ... | ... |
| ... | @@ -3,7 +3,8 @@ | ... | @@ -3,7 +3,8 @@ |
| 3 | 3 | ||
| 4 | 4 | ||
| 5 | // staging | 5 | // staging |
| 6 | const baseUrl_api = "http://192.168.1.97:8787"; | 6 | // const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/"; |
| 7 | const baseUrl_api = "http://192.168.1.95:8787"; | ||
| 7 | const fileUrl_api = "http://192.168.1.11:8787"; | 8 | const fileUrl_api = "http://192.168.1.11:8787"; |
| 8 | 9 | ||
| 9 | export default { | 10 | export default { | ... | ... |
| ... | @@ -259,6 +259,13 @@ | ... | @@ -259,6 +259,13 @@ |
| 259 | "enablePullDownRefresh": false | 259 | "enablePullDownRefresh": false |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | },{ | ||
| 263 | "path" : "pages/group/feeBill", | ||
| 264 | "style" : | ||
| 265 | { | ||
| 266 | "navigationBarTitleText": "团体会员缴费单", | ||
| 267 | "enablePullDownRefresh": false | ||
| 268 | } | ||
| 262 | } | 269 | } |
| 263 | ,{ | 270 | ,{ |
| 264 | "path" : "pages/personalVip/feeBillDetail", | 271 | "path" : "pages/personalVip/feeBillDetail", |
| ... | @@ -268,6 +275,14 @@ | ... | @@ -268,6 +275,14 @@ |
| 268 | "enablePullDownRefresh": false | 275 | "enablePullDownRefresh": false |
| 269 | } | 276 | } |
| 270 | 277 | ||
| 278 | } ,{ | ||
| 279 | "path" : "pages/group/feeBillDetail", | ||
| 280 | "style" : | ||
| 281 | { | ||
| 282 | "navigationBarTitleText": "缴费单详情", | ||
| 283 | "enablePullDownRefresh": false | ||
| 284 | } | ||
| 285 | |||
| 271 | } | 286 | } |
| 272 | ,{ | 287 | ,{ |
| 273 | "path" : "pages/personalVip/mobilize", | 288 | "path" : "pages/personalVip/mobilize", |
| ... | @@ -340,6 +355,30 @@ | ... | @@ -340,6 +355,30 @@ |
| 340 | "enablePullDownRefresh": false | 355 | "enablePullDownRefresh": false |
| 341 | } | 356 | } |
| 342 | 357 | ||
| 358 | },{ | ||
| 359 | "path" : "pages/level/merge", | ||
| 360 | "style" : | ||
| 361 | { | ||
| 362 | "navigationBarTitleText": "审核合并", | ||
| 363 | "enablePullDownRefresh": false | ||
| 364 | } | ||
| 365 | |||
| 366 | },{ | ||
| 367 | "path" : "pages/group/apply/merge", | ||
| 368 | "style" : | ||
| 369 | { | ||
| 370 | "navigationBarTitleText": "审核合并", | ||
| 371 | "enablePullDownRefresh": false | ||
| 372 | } | ||
| 373 | |||
| 374 | },{ | ||
| 375 | "path" : "pages/group/apply/mergeUp", | ||
| 376 | "style" : | ||
| 377 | { | ||
| 378 | "navigationBarTitleText": "审核合并提交", | ||
| 379 | "enablePullDownRefresh": false | ||
| 380 | } | ||
| 381 | |||
| 343 | } | 382 | } |
| 344 | ,{ | 383 | ,{ |
| 345 | "path" : "pages/group/apply/applyDetail", | 384 | "path" : "pages/group/apply/applyDetail", |
| ... | @@ -359,6 +398,38 @@ | ... | @@ -359,6 +398,38 @@ |
| 359 | } | 398 | } |
| 360 | 399 | ||
| 361 | } | 400 | } |
| 401 | ,{ | ||
| 402 | "path" : "pages/level/mergeUp", | ||
| 403 | "style" : | ||
| 404 | { | ||
| 405 | "navigationBarTitleText": "合并提交", | ||
| 406 | "enablePullDownRefresh": false | ||
| 407 | } | ||
| 408 | |||
| 409 | } | ||
| 410 | ,{ | ||
| 411 | "path" : "pages/group/apply/mergeUpDetail", | ||
| 412 | "style" : | ||
| 413 | { | ||
| 414 | "navigationBarTitleText": "缴费详情", | ||
| 415 | "enablePullDownRefresh": false | ||
| 416 | } | ||
| 417 | |||
| 418 | },{ | ||
| 419 | "path" : "pages/group/pay", | ||
| 420 | "style" : | ||
| 421 | { | ||
| 422 | "navigationBarTitleText": "团队会员认证", | ||
| 423 | "enablePullDownRefresh": false | ||
| 424 | } | ||
| 425 | },{ | ||
| 426 | "path" : "pages/group/payDetail", | ||
| 427 | "style" : | ||
| 428 | { | ||
| 429 | "navigationBarTitleText": "认证详情", | ||
| 430 | "enablePullDownRefresh": false | ||
| 431 | } | ||
| 432 | } | ||
| 362 | ], | 433 | ], |
| 363 | "globalStyle": { | 434 | "globalStyle": { |
| 364 | "navigationStyle": "custom", | 435 | "navigationStyle": "custom", | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view> |
| 3 | <!-- 会员调动 --> | 3 | <!-- 团队会员审核 --> |
| 4 | <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" | 4 | <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" |
| 5 | styleType="text" activeColor="#AD181F"></uni-segmented-control> | 5 | styleType="text" activeColor="#AD181F"></uni-segmented-control> |
| 6 | <view class="appList"> | 6 | <view class="appList"> |
| 7 | <view class="appItem" v-for="item in list"> | 7 | <view class="appItem" v-for="item in list"> |
| 8 | <view class="status" @click="goDetail(item)"> | 8 | <view class="status" @click="goDetail(item)"> |
| 9 | <text v-if="item.auditStatus == 0">审核中</text> | 9 | <text v-if="item.auditStatus == 0" class="text-primary">审核中</text> |
| 10 | <text v-if="item.auditStatus == 1" class="text-success">审核通过</text> | 10 | <text v-if="item.auditStatus == 1" class="text-success">审核通过</text> |
| 11 | <text v-if="item.auditStatus == 2" class="text-danger">审核拒绝</text> | 11 | <text v-if="item.auditStatus == 2" class="text-danger">审核拒绝</text> |
| 12 | <text v-if="item.auditStatus == 3" class="text-warning">审核退回</text> | 12 | <text v-if="item.auditStatus == 3" class="text-warning">审核退回</text> |
| ... | @@ -19,10 +19,18 @@ | ... | @@ -19,10 +19,18 @@ |
| 19 | 缴费单位 | 19 | 缴费单位 |
| 20 | <view>{{ item.content.memberName }}</view> | 20 | <view>{{ item.content.memberName }}</view> |
| 21 | </view> | 21 | </view> |
| 22 | <view v-if="userType = '3'"> | 22 | <view v-if="userType == '3'"> |
| 23 | 所属省份 | 23 | 所属省份 |
| 24 | <view>{{item.content.province}}</view> | 24 | <view>{{item.content.province}}</view> |
| 25 | </view> | 25 | </view> |
| 26 | <view v-if="userType == '2'"> | ||
| 27 | 所属一级 | ||
| 28 | <view>{{item.content.firstDeptName}}</view> | ||
| 29 | </view> | ||
| 30 | <view v-if="userType == '2'"> | ||
| 31 | 所属二级 | ||
| 32 | <view>{{item.content.secondDeptName}}</view> | ||
| 33 | </view> | ||
| 26 | <view> | 34 | <view> |
| 27 | 年限 | 35 | 年限 |
| 28 | <view>{{item.content.renewYear}}</view> | 36 | <view>{{item.content.renewYear}}</view> |
| ... | @@ -36,6 +44,10 @@ | ... | @@ -36,6 +44,10 @@ |
| 36 | <view> {{ (item?.content?.allFee*1).toFixed(2) }}</view> | 44 | <view> {{ (item?.content?.allFee*1).toFixed(2) }}</view> |
| 37 | </view> | 45 | </view> |
| 38 | </view> | 46 | </view> |
| 47 | <view class="func" v-if="(userType == '3'||userType == '2') && item.auditStatus == 0"> | ||
| 48 | <button @click="audit(item.recordId,'0')">拒绝</button> | ||
| 49 | <button @click="audit(item.recordId,'1')">同意</button> | ||
| 50 | </view> | ||
| 39 | <view class="func" v-if="(deptType == 1&&item.ztxRes == 0)||((deptType == 2 || deptType == 3)&&item.shenRes == 0)"> | 51 | <view class="func" v-if="(deptType == 1&&item.ztxRes == 0)||((deptType == 2 || deptType == 3)&&item.shenRes == 0)"> |
| 40 | <button @click="audit(item.recordId,'0')">拒绝</button> | 52 | <button @click="audit(item.recordId,'0')">拒绝</button> |
| 41 | <button @click="audit(item.recordId,'1')">同意</button> | 53 | <button @click="audit(item.recordId,'1')">同意</button> |
| ... | @@ -46,11 +58,12 @@ | ... | @@ -46,11 +58,12 @@ |
| 46 | </view> | 58 | </view> |
| 47 | </view> | 59 | </view> |
| 48 | 60 | ||
| 49 | |||
| 50 | |||
| 51 | <view class="nodata" v-if="list.length==0"> | 61 | <view class="nodata" v-if="list.length==0"> |
| 52 | <image mode="aspectFit" src="/static/nodata.png"></image> | 62 | <image mode="aspectFit" src="/static/nodata.png"></image> |
| 53 | <text>暂无数据</text> | 63 | <text>暂无数据</text> |
| 64 | </view> | ||
| 65 | <view v-if="userType=='2'" class="block-btn-box"> | ||
| 66 | <button @click="goMerge" class="btn-red-kx">前往合并 > </button> | ||
| 54 | </view> | 67 | </view> |
| 55 | </view> | 68 | </view> |
| 56 | </template> | 69 | </template> |
| ... | @@ -90,7 +103,8 @@ | ... | @@ -90,7 +103,8 @@ |
| 90 | 103 | ||
| 91 | function init() { | 104 | function init() { |
| 92 | deptType.value = app.globalData.deptType | 105 | deptType.value = app.globalData.deptType |
| 93 | userType.value = app.globalData.userType | 106 | userType.value = app.globalData.userType |
| 107 | console.log(userType.value) | ||
| 94 | getList() | 108 | getList() |
| 95 | } | 109 | } |
| 96 | 110 | ||
| ... | @@ -165,7 +179,7 @@ | ... | @@ -165,7 +179,7 @@ |
| 165 | } | 179 | } |
| 166 | obj.recordIds.push(recordId) | 180 | obj.recordIds.push(recordId) |
| 167 | console.log(obj) | 181 | console.log(obj) |
| 168 | api.audit(obj).then((res) => { | 182 | api.groupAudit(obj).then((res) => { |
| 169 | uni.showToast({ | 183 | uni.showToast({ |
| 170 | title: '操作成功', | 184 | title: '操作成功', |
| 171 | icon: 'none' | 185 | icon: 'none' |
| ... | @@ -184,15 +198,19 @@ | ... | @@ -184,15 +198,19 @@ |
| 184 | uni.navigateTo({ | 198 | uni.navigateTo({ |
| 185 | url: path | 199 | url: path |
| 186 | }); | 200 | }); |
| 187 | } else if(userType.value=='3'){ | 201 | } else if(userType.value=='2'||userType.value=='3'){ |
| 188 | // 审核记录 | 202 | // 审核记录 |
| 189 | let path = `/pages/group/apply/record?certId=${item.content.certId}` | 203 | let path = `/pages/group/apply/record?certId=${item.content.certId}` |
| 190 | uni.navigateTo({ | 204 | uni.navigateTo({ |
| 191 | url: path | 205 | url: path |
| 192 | }); | 206 | }); |
| 193 | } | 207 | } |
| 194 | 208 | } | |
| 195 | 209 | function goMerge(){ | |
| 210 | let path = `/pages/group/apply/merge` | ||
| 211 | uni.navigateTo({ | ||
| 212 | url: path | ||
| 213 | }); | ||
| 196 | } | 214 | } |
| 197 | </script> | 215 | </script> |
| 198 | 216 | ... | ... |
pages/group/apply/merge.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <!-- 审批合并 --> | ||
| 4 | <view class="appList"> | ||
| 5 | <view class="appItem" v-for="item in infoList"> | ||
| 6 | <view @click="checkThis(item)" class="iconbox"> | ||
| 7 | <image class="icon" v-if="item.checked" src="@/static/member/dx_dwn.png" /> | ||
| 8 | <image class="icon" v-else src="@/static/member/dx.png" /> | ||
| 9 | </view> | ||
| 10 | <view class="status" @click="goDetail(item)"> | ||
| 11 | <text v-if="item.auditStatus == 0" class="text-primary">审核中</text> | ||
| 12 | <text v-if="item.auditStatus == 1" class="text-success">审核通过</text> | ||
| 13 | <text v-if="item.auditStatus == 2" class="text-danger">审核拒绝</text> | ||
| 14 | <text v-if="item.auditStatus == 3" class="text-warning">已撤回</text> | ||
| 15 | </view> | ||
| 16 | |||
| 17 | <view class="date" v-if="item.content.commitTime">提交日期:{{item.content.commitTime}}</view> | ||
| 18 | <view class="name mt0" @click="goDetail(item)">{{item.content.certName}}</view> | ||
| 19 | <view class="flexbox" @click="goDetail(item)"> | ||
| 20 | <view> | ||
| 21 | 缴费单位 | ||
| 22 | <view>{{item.content.memberName}}</view> | ||
| 23 | </view> | ||
| 24 | <view v-if="item.content.validityTime"> | ||
| 25 | 原有效期 | ||
| 26 | <view>{{item.content.validityTime}}</view> | ||
| 27 | </view> | ||
| 28 | <view> | ||
| 29 | 年限 | ||
| 30 | <view>{{item.content.renewYear}}</view> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | |||
| 36 | <view class="fixedBottom"> | ||
| 37 | <button @click="handleMerge" v-if="infoList.length>0" style="width: 40%;" class="btn-red">合并</button> | ||
| 38 | <button @click="goMergeUp" class="btn-red-kx" style="width: 40%;">合并提交 > </button> | ||
| 39 | </view> | ||
| 40 | |||
| 41 | <view class="nodata" v-if="infoList.length==0"> | ||
| 42 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 43 | <text>暂无数据</text> | ||
| 44 | </view> | ||
| 45 | </view> | ||
| 46 | </template> | ||
| 47 | |||
| 48 | <script setup> | ||
| 49 | import * as api from '@/common/api.js' | ||
| 50 | import config from '@/config.js' | ||
| 51 | import _ from 'lodash' | ||
| 52 | import { | ||
| 53 | onMounted, | ||
| 54 | ref | ||
| 55 | } from 'vue' | ||
| 56 | import { | ||
| 57 | onLoad, | ||
| 58 | onShow | ||
| 59 | } from '@dcloudio/uni-app' | ||
| 60 | const app = getApp(); | ||
| 61 | const queryParams = ref({ | ||
| 62 | // pageNum: 1, | ||
| 63 | // pageSize: 10 | ||
| 64 | auditStatus: '', | ||
| 65 | mergeFlag: '0' | ||
| 66 | }) | ||
| 67 | const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回'] | ||
| 68 | const infoList = ref([]) | ||
| 69 | const batchList = ref([]) | ||
| 70 | const total = ref(0) | ||
| 71 | const totalCost = ref(0) | ||
| 72 | const deptType = ref('') | ||
| 73 | onLoad(() => { | ||
| 74 | |||
| 75 | }) | ||
| 76 | onShow(() => { | ||
| 77 | if (app.globalData.isLogin) { | ||
| 78 | init() | ||
| 79 | } else { | ||
| 80 | |||
| 81 | app.firstLoadCallback = () => { | ||
| 82 | init() | ||
| 83 | }; | ||
| 84 | } | ||
| 85 | }) | ||
| 86 | |||
| 87 | function init() { | ||
| 88 | uni.showLoading({ | ||
| 89 | title: '加载中' | ||
| 90 | }) | ||
| 91 | deptType.value = app.globalData.deptType | ||
| 92 | getList() | ||
| 93 | } | ||
| 94 | |||
| 95 | |||
| 96 | function getList() { | ||
| 97 | api.getGroupList(queryParams.value).then(response => { | ||
| 98 | infoList.value = response.rows | ||
| 99 | infoList.value.forEach(item => { | ||
| 100 | item.con = item.content | ||
| 101 | item.content = JSON.parse(item.content) | ||
| 102 | item.checked = false | ||
| 103 | }) | ||
| 104 | total.value = response.total | ||
| 105 | uni.hideLoading() | ||
| 106 | }) | ||
| 107 | } | ||
| 108 | |||
| 109 | function goDetail(item) { | ||
| 110 | let path = `/pages/group/apply/record?certId=${item.content.certId}` | ||
| 111 | uni.navigateTo({ | ||
| 112 | url: path | ||
| 113 | }); | ||
| 114 | |||
| 115 | } | ||
| 116 | function goMergeUp(){ | ||
| 117 | // 合并提交 | ||
| 118 | let path = `/pages/group/apply/mergeUp` | ||
| 119 | uni.navigateTo({ | ||
| 120 | url: path | ||
| 121 | }); | ||
| 122 | } | ||
| 123 | function checkThis(item) { | ||
| 124 | if(item.auditStatus != 1){ | ||
| 125 | uni.showToast({ | ||
| 126 | title:'审核未通过,无法合并', | ||
| 127 | icon:'error' | ||
| 128 | }) | ||
| 129 | return | ||
| 130 | } | ||
| 131 | if (item.checked) { | ||
| 132 | item.checked = false | ||
| 133 | } else { | ||
| 134 | item.checked = true | ||
| 135 | } | ||
| 136 | } | ||
| 137 | var ids = [] | ||
| 138 | |||
| 139 | function handleMerge() { | ||
| 140 | batchList.value = [] | ||
| 141 | ids = [] | ||
| 142 | for (var n of infoList.value) { | ||
| 143 | if (n.checked) { | ||
| 144 | batchList.value.push(n) | ||
| 145 | ids.push(n.recordId) | ||
| 146 | } | ||
| 147 | } | ||
| 148 | if (batchList.value.length == 0) { | ||
| 149 | uni.showToast({ | ||
| 150 | title: `请选择至少一条数据`, | ||
| 151 | icon: 'none' | ||
| 152 | }) | ||
| 153 | return | ||
| 154 | } | ||
| 155 | const mergeFlag = batchList.value.some(item => { | ||
| 156 | if (item.auditStatus != '1') { | ||
| 157 | return uni.showToast({ | ||
| 158 | title: `${item.examCode}审核未通过,无法合并`, | ||
| 159 | icon: 'none' | ||
| 160 | }) | ||
| 161 | } | ||
| 162 | }) | ||
| 163 | uni.showModal({ | ||
| 164 | title: '提示', | ||
| 165 | content: `确认合并已选中的数据?`, | ||
| 166 | success: function(res) { | ||
| 167 | if (res.confirm) { | ||
| 168 | api.groupMergeApi({ | ||
| 169 | recordIds: ids | ||
| 170 | }).then(res => { | ||
| 171 | uni.showToast({ | ||
| 172 | title: `操作成功` | ||
| 173 | }) | ||
| 174 | getList() | ||
| 175 | }) | ||
| 176 | } | ||
| 177 | } | ||
| 178 | }) | ||
| 179 | |||
| 180 | } | ||
| 181 | |||
| 182 | </script> | ||
| 183 | |||
| 184 | |||
| 185 | <style scoped lang="scss"> | ||
| 186 | .mt0 { | ||
| 187 | margin-top: 0 !important; | ||
| 188 | } | ||
| 189 | .appList .appItem{padding: 30rpx 30rpx 30rpx 120rpx;} | ||
| 190 | .appList .appItem .name { | ||
| 191 | width: 80%; | ||
| 192 | word-break: break-all; | ||
| 193 | } | ||
| 194 | |||
| 195 | .icon { | ||
| 196 | width: 60rpx; | ||
| 197 | height: 60rpx; | ||
| 198 | margin-right: 16rpx; | ||
| 199 | } | ||
| 200 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/apply/mergeUp.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <!-- 团队会员审核 --> | ||
| 4 | <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" | ||
| 5 | styleType="text" activeColor="#AD181F"></uni-segmented-control> | ||
| 6 | <view class="appList"> | ||
| 7 | <view class="appItem" v-for="item in list"> | ||
| 8 | <view class="status" @click="goDetail(item)"> | ||
| 9 | <text v-if="item.status == 0" class="text-primary">审核中</text> | ||
| 10 | <text v-if="item.status == 1" class="text-success">审核通过</text> | ||
| 11 | <text v-if="item.status == 2" class="text-danger">审核拒绝</text> | ||
| 12 | <text v-if="item.status == 3" class="text-warning">审核撤回</text> | ||
| 13 | </view> | ||
| 14 | <view class="date">提交日期:{{item.content.commitTime}}</view> | ||
| 15 | <view class="date" v-if="item.content.validityTime">原有效期:{{item.content.validityTime}}</view> | ||
| 16 | <view class="name" @click="goDetail(item)">{{item.content.certName}}</view> | ||
| 17 | <view class="flexbox" @click="goDetail(item)"> | ||
| 18 | <view> | ||
| 19 | 年限 | ||
| 20 | <view>{{item.content.renewYear}}</view> | ||
| 21 | </view> | ||
| 22 | <view> | ||
| 23 | 会员合计/新会员 | ||
| 24 | <view>{{item.content.allCount}}/<text class="text-danger">{{item.content.newCount}}</text></view> | ||
| 25 | </view> | ||
| 26 | <view> | ||
| 27 | 费用合计 | ||
| 28 | <view> {{ (item?.content?.allFee*1).toFixed(2) }}</view> | ||
| 29 | </view> | ||
| 30 | </view> | ||
| 31 | |||
| 32 | <view class="func" v-if="item.auditStatus == 100"> | ||
| 33 | <button @click="handleAudit(item)">提交</button> | ||
| 34 | <!-- <button v-if="item.lastIds?.slice(0, 1) != '-'" @click="resolution(item)">取消合并</button> --> | ||
| 35 | </view> | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | |||
| 39 | <view class="nodata" v-if="list.length==0"> | ||
| 40 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 41 | <text>暂无数据</text> | ||
| 42 | </view> | ||
| 43 | </view> | ||
| 44 | </template> | ||
| 45 | |||
| 46 | <script setup> | ||
| 47 | import * as api from '@/common/api.js' | ||
| 48 | import config from '@/config.js' | ||
| 49 | import { | ||
| 50 | onMounted, | ||
| 51 | ref | ||
| 52 | } from 'vue' | ||
| 53 | import { | ||
| 54 | onLoad | ||
| 55 | } from '@dcloudio/uni-app' | ||
| 56 | const app = getApp(); | ||
| 57 | const queryParams = ref({ | ||
| 58 | // pageNum: 1, | ||
| 59 | // pageSize: 10 | ||
| 60 | mergeFlag: 100, | ||
| 61 | statusFlag: '101' | ||
| 62 | }) | ||
| 63 | const navs = ref(['待提交','审核中', '审核通过', '审核拒绝', '已撤回']) | ||
| 64 | const current = ref() | ||
| 65 | const list = ref([]) | ||
| 66 | const total = ref(0) | ||
| 67 | const deptType = ref('') | ||
| 68 | const userType = ref('') | ||
| 69 | onLoad(() => { | ||
| 70 | if (app.globalData.isLogin) { | ||
| 71 | init() | ||
| 72 | } else { | ||
| 73 | |||
| 74 | app.firstLoadCallback = () => { | ||
| 75 | init() | ||
| 76 | }; | ||
| 77 | } | ||
| 78 | }) | ||
| 79 | |||
| 80 | function init() { | ||
| 81 | deptType.value = app.globalData.deptType | ||
| 82 | userType.value = app.globalData.userType | ||
| 83 | console.log(userType.value) | ||
| 84 | getList() | ||
| 85 | } | ||
| 86 | |||
| 87 | function onClickItem(e) { | ||
| 88 | console.log(e) | ||
| 89 | switch(e.currentIndex){ | ||
| 90 | case 0: | ||
| 91 | queryParams.value.statusFlag = 101 | ||
| 92 | break; | ||
| 93 | case 1: | ||
| 94 | queryParams.value.statusFlag = 102 | ||
| 95 | break; | ||
| 96 | case 2: | ||
| 97 | queryParams.value.statusFlag = 103 | ||
| 98 | break; | ||
| 99 | case 3: | ||
| 100 | queryParams.value.statusFlag = 104 | ||
| 101 | break; | ||
| 102 | case 4: | ||
| 103 | queryParams.value.statusFlag = 105 | ||
| 104 | break; | ||
| 105 | } | ||
| 106 | getList() | ||
| 107 | } | ||
| 108 | |||
| 109 | function getList() { | ||
| 110 | uni.showLoading({ | ||
| 111 | title:'加载中' | ||
| 112 | }) | ||
| 113 | if (queryParams.value.statusFlag == '') { | ||
| 114 | queryParams.value.mergeFlag = 100 | ||
| 115 | queryParams.value.status = null | ||
| 116 | } | ||
| 117 | if (queryParams.value.statusFlag == 101) { | ||
| 118 | queryParams.value.mergeFlag = 101 | ||
| 119 | queryParams.value.status = null | ||
| 120 | } | ||
| 121 | if (queryParams.value.statusFlag == 102) { | ||
| 122 | queryParams.value.mergeFlag = 1 | ||
| 123 | queryParams.value.status = 0 | ||
| 124 | } | ||
| 125 | if (queryParams.value.statusFlag == 103) { | ||
| 126 | queryParams.value.mergeFlag = 1 | ||
| 127 | queryParams.value.status = 1 | ||
| 128 | } | ||
| 129 | if (queryParams.value.statusFlag == 104) { | ||
| 130 | queryParams.value.mergeFlag = 1 | ||
| 131 | queryParams.value.status = 2 | ||
| 132 | } | ||
| 133 | if (queryParams.value.statusFlag == 105) { | ||
| 134 | queryParams.value.mergeFlag = 100 | ||
| 135 | queryParams.value.status = 3 | ||
| 136 | } | ||
| 137 | api.getGroupList(queryParams.value).then(res => { | ||
| 138 | uni.hideLoading() | ||
| 139 | list.value = res.rows | ||
| 140 | list.value.forEach(item => { | ||
| 141 | item.con = item.content | ||
| 142 | item.content = JSON.parse(item.content) | ||
| 143 | }) | ||
| 144 | total.value = res.total | ||
| 145 | }) | ||
| 146 | } | ||
| 147 | |||
| 148 | function handleAudit(item){ | ||
| 149 | uni.showModal({ | ||
| 150 | title: '提示', | ||
| 151 | content: `确定提交${item.content.certName}吗`, | ||
| 152 | success: function(res) { | ||
| 153 | if (res.confirm) { | ||
| 154 | api.groupAudit({ | ||
| 155 | flag: '1', | ||
| 156 | recordIds: [item.recordId], | ||
| 157 | reason: null | ||
| 158 | }).then(res=>{ | ||
| 159 | getList() | ||
| 160 | uni.showToast({ | ||
| 161 | title:`操作成功!` | ||
| 162 | }) | ||
| 163 | }) | ||
| 164 | } | ||
| 165 | } | ||
| 166 | }) | ||
| 167 | } | ||
| 168 | |||
| 169 | function goDetail(item) { | ||
| 170 | const form = encodeURIComponent(JSON.stringify(item)) | ||
| 171 | // 查看 | ||
| 172 | let path = `/pages/group/apply/mergeUpDetail?&form=${form}` | ||
| 173 | uni.navigateTo({ | ||
| 174 | url: path | ||
| 175 | }); | ||
| 176 | |||
| 177 | } | ||
| 178 | |||
| 179 | </script> | ||
| 180 | |||
| 181 | <style scoped> | ||
| 182 | .mt0{margin-top: 0!important;} | ||
| 183 | .appList .appItem .name{width: 80%;word-break: break-all;} | ||
| 184 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/apply/mergeUpDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <view class="wBox"> | ||
| 4 | <view class="tt">{{form.content.certName}}</view> | ||
| 5 | <view> | ||
| 6 | <view class="date" v-if="form.content.commitTime">提交日期:<text>{{ form.content.commitTime }}</text> | ||
| 7 | </view> | ||
| 8 | <view class="date">提交单位:<text>{{ form.content.memberName }}</text> </view> | ||
| 9 | </view> | ||
| 10 | <view class="vipData mt30" style="flex-wrap: wrap;"> | ||
| 11 | <view class="w50"> | ||
| 12 | 团队会员合计: | ||
| 13 | <text>{{ form.content.allCount }}个</text> | ||
| 14 | </view> | ||
| 15 | <view class="w50"> | ||
| 16 | 新会员合计: | ||
| 17 | <text>{{ form.content.newCount }}个</text> | ||
| 18 | </view> | ||
| 19 | <view class="w50"> | ||
| 20 | 年限合计: | ||
| 21 | <text>{{ form.content.renewYear }}年</text> | ||
| 22 | </view> | ||
| 23 | <view class="w50"> | ||
| 24 | 费用合计: | ||
| 25 | <text>{{ (form.content.allFee*1).toFixed(2) }}元</text> | ||
| 26 | </view> | ||
| 27 | </view> | ||
| 28 | |||
| 29 | <!-- 成员 --> | ||
| 30 | <view class="userlist"> | ||
| 31 | <view class="item" v-for="n in list"> | ||
| 32 | <view style="width: 100%"> | ||
| 33 | <view class="name">{{n.memberName}}</view> | ||
| 34 | <view class="date">单位类型: | ||
| 35 | <text v-if="n.deptType==2">一级协会</text> | ||
| 36 | <text v-if="n.deptType==3">直属协会</text> | ||
| 37 | <text v-if="n.deptType==4">二级协会</text> | ||
| 38 | <text v-if="n.deptType==5">三级协会</text> | ||
| 39 | <text v-if="n.deptType==6">职业性团体会员</text> | ||
| 40 | </view> | ||
| 41 | <view class="flexbox"> | ||
| 42 | <view> | ||
| 43 | 单价 | ||
| 44 | <text>¥{{n.unitPrice}}</text> | ||
| 45 | </view> | ||
| 46 | <view> | ||
| 47 | 年限 | ||
| 48 | <text>{{n.renewYear}}</text> | ||
| 49 | </view> | ||
| 50 | <view> | ||
| 51 | 总价 | ||
| 52 | <text>¥{{n.allFee}}</text> | ||
| 53 | </view> | ||
| 54 | </view> | ||
| 55 | </view> | ||
| 56 | </view> | ||
| 57 | </view> | ||
| 58 | |||
| 59 | </view> | ||
| 60 | |||
| 61 | <view class="h3-padding">审核记录</view> | ||
| 62 | <view class="wBox"> | ||
| 63 | <view class="stepItem" v-for="(n,index) in auditList"> | ||
| 64 | <view class="time">{{n.handleDate||'待审批'}}</view> | ||
| 65 | <view class="content"> | ||
| 66 | <view class="status"> | ||
| 67 | <text v-if="n.auditStatus==1" class="text-success">审核通过</text> | ||
| 68 | <text v-if="n.auditStatus==2" class="text-danger"> 审核拒绝</text> | ||
| 69 | <text v-if="n.auditStatus==0" class="text-primary"> 审核中</text> | ||
| 70 | <text v-if="n.auditStatus==3" class="text-warning">已撤回</text> | ||
| 71 | <text v-if="n.auditStatus==100" class="text-primary">审核中</text> | ||
| 72 | |||
| 73 | </view> | ||
| 74 | <!-- <view class="name">第 {{index+1}} 步</view> --> | ||
| 75 | <view class="deptName">{{n.handlerDeptName}}</view> | ||
| 76 | <view v-if="n.reason"> | ||
| 77 | 备注:{{n.reason||'/' }} | ||
| 78 | </view> | ||
| 79 | </view> | ||
| 80 | </view> | ||
| 81 | </view> | ||
| 82 | |||
| 83 | <view class="fixedBottom" v-if="(deptType == 1)&&form.ztxRes == 0"> | ||
| 84 | <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> | ||
| 85 | <button class="btn-red" @click="audit(form.id,'1')">同意</button> | ||
| 86 | </view> | ||
| 87 | |||
| 88 | <view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.shenRes == 0"> | ||
| 89 | <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> | ||
| 90 | <button class="btn-red" @click="audit(form.id,'1')">同意</button> | ||
| 91 | </view> | ||
| 92 | |||
| 93 | </view> | ||
| 94 | </template> | ||
| 95 | |||
| 96 | <script setup> | ||
| 97 | import * as api from '@/common/api.js' | ||
| 98 | import config from '@/config.js' | ||
| 99 | import { | ||
| 100 | onMounted, | ||
| 101 | ref | ||
| 102 | } from 'vue' | ||
| 103 | import { | ||
| 104 | onLoad | ||
| 105 | } from '@dcloudio/uni-app' | ||
| 106 | const app = getApp(); | ||
| 107 | const queryParams = ref({ | ||
| 108 | recordId: '' | ||
| 109 | }) | ||
| 110 | |||
| 111 | const form = ref({}) | ||
| 112 | const list = ref([]) | ||
| 113 | const listArr = ref([]) | ||
| 114 | const id = ref() | ||
| 115 | const auditList = ref([]) | ||
| 116 | |||
| 117 | const feelList = ref([]) | ||
| 118 | const total = ref(0) | ||
| 119 | const totalYear = ref(0) | ||
| 120 | const deptType = ref() | ||
| 121 | let rangeId = '' | ||
| 122 | onLoad((option) => { | ||
| 123 | if ('form' in option) { | ||
| 124 | form.value = JSON.parse(decodeURIComponent(option.form)) | ||
| 125 | } | ||
| 126 | list.value = form.content?.certifiedSimpleList || [] | ||
| 127 | listArr.value = form.content?.certifiedSimpleList || [] | ||
| 128 | queryParams.value.recordId = form.value.recordId | ||
| 129 | console.log(form.value) | ||
| 130 | if (app.globalData.isLogin) { | ||
| 131 | init() | ||
| 132 | } else { | ||
| 133 | |||
| 134 | app.firstLoadCallback = () => { | ||
| 135 | init() | ||
| 136 | }; | ||
| 137 | } | ||
| 138 | |||
| 139 | }) | ||
| 140 | |||
| 141 | function init() { | ||
| 142 | deptType.value = app.globalData.deptType | ||
| 143 | getForm() | ||
| 144 | } | ||
| 145 | |||
| 146 | function getForm() { | ||
| 147 | uni.showLoading({ | ||
| 148 | title: '加载中' | ||
| 149 | }) | ||
| 150 | api.getDetailList(queryParams.value).then(res => { | ||
| 151 | uni.hideLoading() | ||
| 152 | list.value = res.rows | ||
| 153 | list.value[0].rangeId == 0 ? id.value = list.value[0].certId : id.value = list.value[0].rangeId | ||
| 154 | if (id.value) { | ||
| 155 | auditFN() | ||
| 156 | } | ||
| 157 | }) | ||
| 158 | } | ||
| 159 | |||
| 160 | function auditFN() { | ||
| 161 | api.getGroupHistoryByRelateId(id.value).then(res => { | ||
| 162 | auditList.value = res.data | ||
| 163 | }) | ||
| 164 | } | ||
| 165 | |||
| 166 | function audit(rangeId, flag) { | ||
| 167 | if (flag == '2') { | ||
| 168 | // 拒绝 | ||
| 169 | // 弹出框填写理由 | ||
| 170 | uni.showModal({ | ||
| 171 | title: '请输入拒绝理由', | ||
| 172 | editable: true, | ||
| 173 | success: function(res) { | ||
| 174 | if (res.confirm) { | ||
| 175 | if (!res.content) { | ||
| 176 | uni.showToast({ | ||
| 177 | title: '请输入拒绝理由', | ||
| 178 | icon: 'none' | ||
| 179 | }) | ||
| 180 | } else { | ||
| 181 | doApproval(rangeId, flag, res.content) | ||
| 182 | } | ||
| 183 | } | ||
| 184 | } | ||
| 185 | }) | ||
| 186 | } else if (flag == '1') { | ||
| 187 | // 二次确认 | ||
| 188 | uni.showModal({ | ||
| 189 | title: '提示', | ||
| 190 | content: `确定审批通过吗`, | ||
| 191 | success: function(res) { | ||
| 192 | if (res.confirm) { | ||
| 193 | doApproval(rangeId, flag) | ||
| 194 | } | ||
| 195 | } | ||
| 196 | }) | ||
| 197 | } | ||
| 198 | } | ||
| 199 | |||
| 200 | function doApproval(rangeId, flag, reason) { | ||
| 201 | var obj = { | ||
| 202 | flag: flag, | ||
| 203 | reason: reason || '', | ||
| 204 | rangeIds: rangeIds | ||
| 205 | } | ||
| 206 | console.log(obj) | ||
| 207 | api.mobilizeAudit(obj).then((res) => { | ||
| 208 | uni.showToast({ | ||
| 209 | title: '操作成功', | ||
| 210 | icon: 'none' | ||
| 211 | }) | ||
| 212 | uni.navigateBack() | ||
| 213 | }) | ||
| 214 | } | ||
| 215 | </script> | ||
| 216 | |||
| 217 | <style scoped lang="scss"> | ||
| 218 | .date { | ||
| 219 | margin-top: 10rpx; | ||
| 220 | font-size: 26rpx; | ||
| 221 | color: #999; | ||
| 222 | } | ||
| 223 | |||
| 224 | .wBox { | ||
| 225 | width: 700rpx; | ||
| 226 | padding: 30rpx; | ||
| 227 | margin: 20rpx auto 0; | ||
| 228 | background: #FFFFFF; | ||
| 229 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 230 | border-radius: 15rpx; | ||
| 231 | |||
| 232 | .tt { | ||
| 233 | color: #0A1629; | ||
| 234 | font-size: 30rpx; | ||
| 235 | } | ||
| 236 | } | ||
| 237 | |||
| 238 | .userlist { | ||
| 239 | .item { | ||
| 240 | border-bottom: 1px dashed #e5e5e5; | ||
| 241 | position: relative; | ||
| 242 | |||
| 243 | .date { | ||
| 244 | margin-top: 10rpx; | ||
| 245 | } | ||
| 246 | |||
| 247 | .name { | ||
| 248 | text { | ||
| 249 | margin-left: 1em; | ||
| 250 | color: #4C5359; | ||
| 251 | font-size: 26rpx; | ||
| 252 | } | ||
| 253 | } | ||
| 254 | |||
| 255 | .nian { | ||
| 256 | position: absolute; | ||
| 257 | right: 0; | ||
| 258 | font-size: 30rpx; | ||
| 259 | color: #AD181F; | ||
| 260 | } | ||
| 261 | } | ||
| 262 | } | ||
| 263 | |||
| 264 | .info { | ||
| 265 | display: flex; | ||
| 266 | margin: 30rpx 0 20rpx; | ||
| 267 | font-size: 28rpx; | ||
| 268 | |||
| 269 | view { | ||
| 270 | color: #7D8592; | ||
| 271 | margin-right: 20rpx; | ||
| 272 | } | ||
| 273 | } | ||
| 274 | |||
| 275 | .fixedBottom { | ||
| 276 | justify-content: center; | ||
| 277 | |||
| 278 | button { | ||
| 279 | margin: 0 20rpx; | ||
| 280 | width: 286rpx; | ||
| 281 | } | ||
| 282 | |||
| 283 | .btn-red { | ||
| 284 | width: 286rpx; | ||
| 285 | } | ||
| 286 | } | ||
| 287 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/feeBill.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <!-- 会员缴费单 --> | ||
| 4 | <view class="appList"> | ||
| 5 | <view class="vipData" v-show="totalCost>0"> | ||
| 6 | <view>费用合计:<text>{{ totalCost.toFixed(2) }}元</text></view> | ||
| 7 | </view> | ||
| 8 | <view class="appItem" v-for="item in list"> | ||
| 9 | <view class="status" @click="goDetail(item)"> | ||
| 10 | <text v-if="item.record.auditStatus==0" class="text-primary">审核中</text> | ||
| 11 | <text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text> | ||
| 12 | <text v-if="item.record.auditStatus==2" class="text-danger"> 审核拒绝</text> | ||
| 13 | <text v-if="item.record.auditStatus==3" class="text-warning">已退回</text> | ||
| 14 | </view> | ||
| 15 | <view class="date" @click="goDetail(item)" v-if="item.payTime"> | ||
| 16 | <uni-icons type="calendar" size="16" color="#7D8592"></uni-icons> | ||
| 17 | <text>{{item.payTime}} 缴费</text> | ||
| 18 | </view> | ||
| 19 | |||
| 20 | <view class="name" @click="goDetail(item)">{{item.finalDocName}}</view> | ||
| 21 | <view v-if="deptType==1" class="date"> | ||
| 22 | <text>{{item.payNoticeSendTime}} 下发</text> | ||
| 23 | </view> | ||
| 24 | <view class="flexbox" @click="goDetail(item)"> | ||
| 25 | <view> | ||
| 26 | 缴费状态 | ||
| 27 | <view v-if="item.settleFlag == 0"> | ||
| 28 | <text class="text-primary">已结算</text> | ||
| 29 | </view> | ||
| 30 | <view v-if="item.settleFlag == 1 && item?.payFlag == 0"> | ||
| 31 | <text class="text-success">已上传凭证</text> | ||
| 32 | </view> | ||
| 33 | <view v-if="item.settleFlag == 1 && item?.payFlag == 1"> | ||
| 34 | <text class="text-danger">未上传凭证</text> | ||
| 35 | </view> | ||
| 36 | </view> | ||
| 37 | <view> | ||
| 38 | 年限合计 | ||
| 39 | <view>{{item.yearCount}}</view> | ||
| 40 | </view> | ||
| 41 | <view> | ||
| 42 | 费用合计 | ||
| 43 | <view>¥{{item.allPrice}}</view> | ||
| 44 | </view> | ||
| 45 | </view> | ||
| 46 | <view class="func"> | ||
| 47 | <button | ||
| 48 | v-if="(deptType == 2 || deptType == 3)&&item?.record?.auditStatus != 2 && item?.record?.auditStatus != 3" | ||
| 49 | @click="handleUpdate(item)">上传凭证</button> | ||
| 50 | </view> | ||
| 51 | </view> | ||
| 52 | </view> | ||
| 53 | <view class="nodata" v-if="list.length==0"> | ||
| 54 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 55 | <text>暂无数据</text> | ||
| 56 | </view> | ||
| 57 | |||
| 58 | <!-- 上传凭证 --> | ||
| 59 | <uni-popup ref="UpPop" type="bottom" background-color="#fff" animation> | ||
| 60 | <view class="popBody"> | ||
| 61 | <uni-forms v-model="form"> | ||
| 62 | <uni-forms-item label="缴费日期" required> | ||
| 63 | <uni-datetime-picker v-model="form.payTime"></uni-datetime-picker> | ||
| 64 | </uni-forms-item> | ||
| 65 | <uni-forms-item label="缴费凭证" required> | ||
| 66 | |||
| 67 | <uni-file-picker limit="1" file-mediatype="all" file-extname="png,jpg,jpeg,pdf,zip" | ||
| 68 | @select="selectFile" @progress="fileProgress" | ||
| 69 | @delete="delSupplementFile(index)"></uni-file-picker> | ||
| 70 | </uni-forms-item> | ||
| 71 | <uni-forms-item label="备注"> | ||
| 72 | <uni-easyinput v-model="form.remark" type="textarea"></uni-easyinput> | ||
| 73 | </uni-forms-item> | ||
| 74 | </uni-forms> | ||
| 75 | |||
| 76 | <button class="btn-red" @click="uploadSure">确定</button> | ||
| 77 | </view> | ||
| 78 | </uni-popup> | ||
| 79 | </view> | ||
| 80 | </template> | ||
| 81 | |||
| 82 | <script setup> | ||
| 83 | import * as api from '@/common/api.js' | ||
| 84 | import config from '@/config.js' | ||
| 85 | import { | ||
| 86 | onMounted, | ||
| 87 | ref | ||
| 88 | } from 'vue' | ||
| 89 | import { | ||
| 90 | onLoad | ||
| 91 | } from '@dcloudio/uni-app' | ||
| 92 | const app = getApp(); | ||
| 93 | const list = ref([]) | ||
| 94 | const queryParams = ref({}) | ||
| 95 | const totalCost = ref(0) | ||
| 96 | const deptType = ref('') | ||
| 97 | const UpPop = ref(null) | ||
| 98 | const form = ref({ | ||
| 99 | docId: '', | ||
| 100 | payTime: '', | ||
| 101 | url: '', | ||
| 102 | remark: '' | ||
| 103 | }) | ||
| 104 | onLoad(() => { | ||
| 105 | if (app.globalData.isLogin) { | ||
| 106 | init() | ||
| 107 | } else { | ||
| 108 | |||
| 109 | app.firstLoadCallback = () => { | ||
| 110 | init() | ||
| 111 | }; | ||
| 112 | } | ||
| 113 | }) | ||
| 114 | |||
| 115 | function init() { | ||
| 116 | deptType.value = app.globalData.deptType | ||
| 117 | getList() | ||
| 118 | } | ||
| 119 | |||
| 120 | function getList() { | ||
| 121 | if (queryParams.value.settle == 1) { | ||
| 122 | queryParams.value.settleFlag = undefined | ||
| 123 | queryParams.value.payFlag = undefined | ||
| 124 | } | ||
| 125 | totalCost.value = 0 | ||
| 126 | api.getGroupFeeBill().then(res => { | ||
| 127 | list.value = res.rows | ||
| 128 | list.value.forEach(item => { | ||
| 129 | item.payEvidence = JSON.parse(item.payEvidence) | ||
| 130 | item.record.content = JSON.parse(item.record.content) | ||
| 131 | totalCost.value = totalCost.value + (item.allPrice * 1) | ||
| 132 | }) | ||
| 133 | }) | ||
| 134 | } | ||
| 135 | |||
| 136 | function handleUpdate(item) { | ||
| 137 | form.value.docId = item.docId | ||
| 138 | if (item.payEvidence) { | ||
| 139 | form.value.url = item.payEvidence | ||
| 140 | } | ||
| 141 | UpPop.value.open() | ||
| 142 | } | ||
| 143 | let selectFileValue = {} | ||
| 144 | |||
| 145 | function selectFile(e) { | ||
| 146 | let file = e.tempFiles[0] | ||
| 147 | api.uploadFile(e).then(data => { | ||
| 148 | selectFileValue = { | ||
| 149 | url: data.msg, | ||
| 150 | name: file.name, | ||
| 151 | extname: file.extname | ||
| 152 | } | ||
| 153 | |||
| 154 | form.value.url = JSON.stringify([selectFileValue]) | ||
| 155 | }); | ||
| 156 | } | ||
| 157 | |||
| 158 | function fileProgress(e) { | ||
| 159 | console.log('progress:' + e) | ||
| 160 | } | ||
| 161 | |||
| 162 | function delSupplementFile(index) { | ||
| 163 | selectFileValue = {} | ||
| 164 | } | ||
| 165 | |||
| 166 | function uploadSure() { | ||
| 167 | console.log(form.value) | ||
| 168 | if(!form.value.payTime){ | ||
| 169 | uni.showToast({ | ||
| 170 | icon:`none`, | ||
| 171 | title:'请选择缴费时间' | ||
| 172 | }) | ||
| 173 | return | ||
| 174 | } | ||
| 175 | if(!form.value.url){ | ||
| 176 | uni.showToast({ | ||
| 177 | icon:`none`, | ||
| 178 | title:'请上传缴费凭证' | ||
| 179 | }) | ||
| 180 | return | ||
| 181 | } | ||
| 182 | api.groupCommitPaymentVoucher(form.value).then(res => { | ||
| 183 | UpPop.value.close() | ||
| 184 | form.value = {} | ||
| 185 | uni.showToast({ | ||
| 186 | icon: 'none', | ||
| 187 | title: '操作成功' | ||
| 188 | }) | ||
| 189 | getList() | ||
| 190 | }) | ||
| 191 | } | ||
| 192 | |||
| 193 | function goDetail(item) { | ||
| 194 | //详情 | ||
| 195 | console.log(item.docId) | ||
| 196 | let path = `/pages/group/feeBillDetail?docId=${item.docId}` | ||
| 197 | uni.navigateTo({ | ||
| 198 | url: path | ||
| 199 | }); | ||
| 200 | } | ||
| 201 | </script> | ||
| 202 | |||
| 203 | <style scoped lang="scss"> | ||
| 204 | .popBody { | ||
| 205 | font-size: 28rpx; | ||
| 206 | line-height: 1.5; | ||
| 207 | overflow: auto; | ||
| 208 | padding: 30rpx; | ||
| 209 | |||
| 210 | .btn-red { | ||
| 211 | margin: 50rpx 0 30rpx; | ||
| 212 | } | ||
| 213 | } | ||
| 214 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/feeBillDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="wBox"> | ||
| 4 | <view class="tt">{{form.finalDocName}}</view> | ||
| 5 | <view class="subtt" v-if="form.payTime">提交日期:<text>{{ form.payTime }}</text></view> | ||
| 6 | <view class="subtt" v-if="form.payDeptName">提交单位:<text>{{ form.payDeptName }}</text></view> | ||
| 7 | |||
| 8 | <view class="vipData mtb30"> | ||
| 9 | <view>共 <text class="text-danger"> {{ form.deptCount}} </text> 团队</view> | ||
| 10 | <view>年限合计 <text class="text-danger"> {{ form.yearCount}} </text> 年</view> | ||
| 11 | <view>费用合计 <text class="text-primary"> ¥{{ form.allPrice }} </text> </view> | ||
| 12 | </view> | ||
| 13 | <!-- 成员 --> | ||
| 14 | <view class="userlist"> | ||
| 15 | <view class="item" v-for="n in list"> | ||
| 16 | <view class="w100"> | ||
| 17 | <view class="name">{{n.certName}}</view> | ||
| 18 | <view class="date" v-if="n.validityTime">{{n.validityTime?.silce(0,10)}}</view> | ||
| 19 | <view class="flexbox"> | ||
| 20 | <view>单价 | ||
| 21 | <text>¥{{ (n.unitPrice*1).toFixed(2) }}</text> | ||
| 22 | </view> | ||
| 23 | <view>缴费年限 | ||
| 24 | <text>{{n.renewYear}}</text> | ||
| 25 | </view> | ||
| 26 | <view>总价 | ||
| 27 | <text class="text-danger">¥{{ (n.allFee*1).toFixed(2) }}</text> | ||
| 28 | </view> | ||
| 29 | </view> | ||
| 30 | </view> | ||
| 31 | |||
| 32 | </view> | ||
| 33 | </view> | ||
| 34 | |||
| 35 | </view> | ||
| 36 | |||
| 37 | </view> | ||
| 38 | </template> | ||
| 39 | |||
| 40 | <script setup> | ||
| 41 | import * as api from '@/common/api.js' | ||
| 42 | import config from '@/config.js' | ||
| 43 | import { | ||
| 44 | onMounted, | ||
| 45 | ref | ||
| 46 | } from 'vue' | ||
| 47 | import { | ||
| 48 | onLoad | ||
| 49 | } from '@dcloudio/uni-app' | ||
| 50 | const app = getApp(); | ||
| 51 | const queryParams = ref({ | ||
| 52 | // pageNum: 1, | ||
| 53 | // pageSize: 10 | ||
| 54 | // mergeFlag: 0, | ||
| 55 | auditStatus: '' | ||
| 56 | }) | ||
| 57 | const docId = ref('') | ||
| 58 | const form = ref([]) | ||
| 59 | const list = ref([]) | ||
| 60 | const deptType = ref() | ||
| 61 | onLoad((option) => { | ||
| 62 | if (app.globalData.isLogin) { | ||
| 63 | docId.value = option.docId | ||
| 64 | init() | ||
| 65 | } else { | ||
| 66 | |||
| 67 | app.firstLoadCallback = () => { | ||
| 68 | docId.value = option.docId | ||
| 69 | init() | ||
| 70 | }; | ||
| 71 | } | ||
| 72 | |||
| 73 | }) | ||
| 74 | |||
| 75 | function init() { | ||
| 76 | deptType.value = app.globalData.deptType | ||
| 77 | api.getFeeBillById(docId.value).then(res => { | ||
| 78 | list.value = res.data.certList | ||
| 79 | // arr.value = JSON.parse(JSON.stringify(list.value)) | ||
| 80 | form.value = res.data | ||
| 81 | }) | ||
| 82 | } | ||
| 83 | </script> | ||
| 84 | |||
| 85 | <style scoped lang="scss"> | ||
| 86 | .wBox { | ||
| 87 | width: 700rpx; | ||
| 88 | padding: 30rpx; | ||
| 89 | margin: 20rpx auto 0; | ||
| 90 | background: #FFFFFF; | ||
| 91 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 92 | border-radius: 15rpx; | ||
| 93 | |||
| 94 | .tt { | ||
| 95 | color: #0A1629; | ||
| 96 | font-size: 30rpx; | ||
| 97 | } | ||
| 98 | .subtt{ | ||
| 99 | color: #666;margin: 20rpx 0 0; | ||
| 100 | font-size: 28rpx; | ||
| 101 | } | ||
| 102 | } | ||
| 103 | |||
| 104 | .userlist { | ||
| 105 | .item { | ||
| 106 | border-bottom: 1px dashed #e5e5e5; | ||
| 107 | position: relative;padding: 20rpx 0; | ||
| 108 | |||
| 109 | .date { | ||
| 110 | margin-top: 10rpx; | ||
| 111 | } | ||
| 112 | |||
| 113 | .name { | ||
| 114 | text { | ||
| 115 | margin-left: 1em; | ||
| 116 | color: #4C5359; | ||
| 117 | font-size: 26rpx; | ||
| 118 | } | ||
| 119 | } | ||
| 120 | |||
| 121 | .nian { | ||
| 122 | position: absolute; | ||
| 123 | right: 0; | ||
| 124 | font-size: 26rpx; | ||
| 125 | color: #AD181F; | ||
| 126 | } | ||
| 127 | } | ||
| 128 | } | ||
| 129 | |||
| 130 | .info { | ||
| 131 | display: flex; | ||
| 132 | margin: 30rpx 0 20rpx; | ||
| 133 | font-size: 28rpx; | ||
| 134 | |||
| 135 | view { | ||
| 136 | color: #7D8592; | ||
| 137 | margin-right: 20rpx; | ||
| 138 | } | ||
| 139 | } | ||
| 140 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/pay.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <!-- 会员认证 --> | ||
| 4 | <!-- <view class="searchbar"> | ||
| 5 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 6 | v-model="queryParams.rangeName" placeholder="缴费名称" @blur="getList" @clear="getList"> | ||
| 7 | </uni-easyinput> | ||
| 8 | <view class="invertedbtn-red" @click="goAddPay">+ 新建缴费</view> | ||
| 9 | </view> --> | ||
| 10 | <view class="appList"> | ||
| 11 | <view class="appItem" v-for="item in list"> | ||
| 12 | <view class="status" @click="goDetail(item)"> | ||
| 13 | <text v-if="item?.content?.status==0" class="text-primary">待提交</text> | ||
| 14 | <text v-if="item?.content?.status==1" class="text-primary">审核中</text> | ||
| 15 | <text v-if="item?.content?.status==2" class="text-success"> 审核通过</text> | ||
| 16 | <text v-if="item?.content?.status==3" class="text-danger"> 审核拒绝</text> | ||
| 17 | <text v-if="item?.content?.status==4" class="text-warning">已撤回</text> | ||
| 18 | </view> | ||
| 19 | <view class="date">{{item?.content?.commitTime}} 提交</view> | ||
| 20 | <view class="name" @click="goDetail(item)">{{item.rangeName}}</view> | ||
| 21 | <view class="flexbox" @click="goDetail(item)"> | ||
| 22 | <view> | ||
| 23 | 会员合计 | ||
| 24 | <view>{{item.allCount}}</view> | ||
| 25 | </view> | ||
| 26 | <view> | ||
| 27 | 续费年限 | ||
| 28 | <view>{{item.content?.renewYear}}</view> | ||
| 29 | </view> | ||
| 30 | <view> | ||
| 31 | 年限合计 | ||
| 32 | <view>{{item.totalRenewYear}}</view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | <view class="func" v-if="item?.content?.status == 0"> | ||
| 36 | <button | ||
| 37 | |||
| 38 | @click="commitFN(item)">提交审核</button> | ||
| 39 | </view> | ||
| 40 | </view> | ||
| 41 | </view> | ||
| 42 | <view class="nodata" v-if="list.length==0"> | ||
| 43 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 44 | <text>暂无数据</text> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | </template> | ||
| 48 | |||
| 49 | <script setup> | ||
| 50 | import * as api from '@/common/api.js' | ||
| 51 | import config from '@/config.js' | ||
| 52 | import { | ||
| 53 | onMounted, | ||
| 54 | ref | ||
| 55 | } from 'vue' | ||
| 56 | import { | ||
| 57 | onLoad | ||
| 58 | } from '@dcloudio/uni-app' | ||
| 59 | const app = getApp(); | ||
| 60 | const list = ref([]) | ||
| 61 | const queryParams = ref({}) | ||
| 62 | const deptType = ref('') | ||
| 63 | const UpPop = ref(null) | ||
| 64 | const form = ref({ | ||
| 65 | docId:'', | ||
| 66 | payTime:'', | ||
| 67 | url:'', | ||
| 68 | remark:'' | ||
| 69 | }) | ||
| 70 | onLoad(() => { | ||
| 71 | if (app.globalData.isLogin) { | ||
| 72 | init() | ||
| 73 | } else { | ||
| 74 | |||
| 75 | app.firstLoadCallback = () => { | ||
| 76 | init() | ||
| 77 | }; | ||
| 78 | } | ||
| 79 | }) | ||
| 80 | |||
| 81 | function init() { | ||
| 82 | deptType.value = app.globalData.deptType | ||
| 83 | getList() | ||
| 84 | } | ||
| 85 | |||
| 86 | function getList() { | ||
| 87 | api.getPayList(queryParams.value).then(res => { | ||
| 88 | for (const item of res.rows) { | ||
| 89 | item.content = null | ||
| 90 | if (item.certList?.length > 0) { | ||
| 91 | item.content = item.certList[0] | ||
| 92 | } | ||
| 93 | } | ||
| 94 | list.value = res.rows | ||
| 95 | }) | ||
| 96 | } | ||
| 97 | |||
| 98 | function commitFN(row) { | ||
| 99 | api.commitGroupPay(row.rangeId).then(res=>{ | ||
| 100 | uni.showToast({ | ||
| 101 | title:`提交成功!` | ||
| 102 | }) | ||
| 103 | getList() | ||
| 104 | }) | ||
| 105 | } | ||
| 106 | function goDetail(item) { | ||
| 107 | //详情 | ||
| 108 | const form = encodeURIComponent(JSON.stringify(item)) | ||
| 109 | // 查看 | ||
| 110 | let path = `/pages/group/payDetail?&form=${form}` | ||
| 111 | uni.navigateTo({ | ||
| 112 | url: path | ||
| 113 | }); | ||
| 114 | } | ||
| 115 | </script> | ||
| 116 | |||
| 117 | <style scoped lang="scss"> | ||
| 118 | .searchbar { | ||
| 119 | display: flex; | ||
| 120 | align-items: center; | ||
| 121 | padding: 25rpx; | ||
| 122 | box-sizing: border-box; | ||
| 123 | |||
| 124 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 125 | border-radius: 35rpx; | ||
| 126 | border: none; | ||
| 127 | height: 70rpx; | ||
| 128 | } | ||
| 129 | |||
| 130 | :deep(.uni-easyinput__content-input) { | ||
| 131 | font-size: 26rpx; | ||
| 132 | } | ||
| 133 | |||
| 134 | .invertedbtn-red { | ||
| 135 | border-radius: 50px; | ||
| 136 | background-color: #fff; | ||
| 137 | |||
| 138 | font-size: 30rpx; | ||
| 139 | padding: 10rpx 20rpx; | ||
| 140 | } | ||
| 141 | } | ||
| 142 | .popBody { | ||
| 143 | font-size: 28rpx; | ||
| 144 | line-height: 1.5; | ||
| 145 | overflow: auto; | ||
| 146 | padding: 30rpx; | ||
| 147 | |||
| 148 | .btn-red { | ||
| 149 | margin: 50rpx 0 30rpx; | ||
| 150 | } | ||
| 151 | } | ||
| 152 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/payDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <view class="wBox"> | ||
| 4 | <!-- 成员 --> | ||
| 5 | <view class="userlist"> | ||
| 6 | <view class="item" v-for="n in list"> | ||
| 7 | <view style="width: 100%"> | ||
| 8 | <view class="status"> | ||
| 9 | <view v-if="n.status==0" class="text-primary"> | ||
| 10 | 待提交 | ||
| 11 | </view> | ||
| 12 | <view v-if="n.status==1" class="text-primary"> | ||
| 13 | 审核中 | ||
| 14 | </view> | ||
| 15 | <view v-if="n.status==2" class="text-success"> | ||
| 16 | 审核通过 | ||
| 17 | </view> | ||
| 18 | <view v-if="n.status==3" class="text-danger"> | ||
| 19 | 审核拒绝 | ||
| 20 | </view> | ||
| 21 | <view v-if="n.status==4" class="text-warning"> | ||
| 22 | 撤回 | ||
| 23 | </view> | ||
| 24 | </view> | ||
| 25 | <view class="name">{{n.memberName}}</view> | ||
| 26 | <view class="date">提交日期:{{n.commitTime}} | ||
| 27 | </view> | ||
| 28 | <view class="flexbox"> | ||
| 29 | <view v-if="n.validityTime"> | ||
| 30 | 原有效期 | ||
| 31 | <text>{{n.validityTime.slice(0,10)}}</text> | ||
| 32 | </view> | ||
| 33 | <view> | ||
| 34 | 续费年限 | ||
| 35 | <text>{{n.renewYear}}</text> | ||
| 36 | </view> | ||
| 37 | <view> | ||
| 38 | 总价 | ||
| 39 | <text>¥{{n.allPrice}}</text> | ||
| 40 | </view> | ||
| 41 | </view> | ||
| 42 | </view> | ||
| 43 | </view> | ||
| 44 | </view> | ||
| 45 | |||
| 46 | </view> | ||
| 47 | |||
| 48 | <view class="h3-padding">审核记录</view> | ||
| 49 | <view class="wBox"> | ||
| 50 | <view class="stepItem" v-for="(n,index) in feelList"> | ||
| 51 | <view class="time">{{n.auditTime||'待审批'}}</view> | ||
| 52 | <view class="content"> | ||
| 53 | <view class="status"> | ||
| 54 | <text v-if="n.auditResult==1" class="text-success">审核通过</text> | ||
| 55 | <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text> | ||
| 56 | <text v-if="n.auditResult==0" class="text-primary"> 审核中</text> | ||
| 57 | <text v-if="n.auditResult==3" class="text-warning">已撤回</text> | ||
| 58 | |||
| 59 | </view> | ||
| 60 | <!-- <view class="name">第 {{index+1}} 步</view> --> | ||
| 61 | <view class="deptName">{{n.auditDeptName}}</view> | ||
| 62 | <view v-if="n.auditMsg"> | ||
| 63 | 备注:{{n.auditMsg||'/' }} | ||
| 64 | </view> | ||
| 65 | </view> | ||
| 66 | </view> | ||
| 67 | </view> | ||
| 68 | |||
| 69 | </view> | ||
| 70 | </template> | ||
| 71 | |||
| 72 | <script setup> | ||
| 73 | import * as api from '@/common/api.js' | ||
| 74 | import config from '@/config.js' | ||
| 75 | import { | ||
| 76 | onMounted, | ||
| 77 | ref | ||
| 78 | } from 'vue' | ||
| 79 | import { | ||
| 80 | onLoad | ||
| 81 | } from '@dcloudio/uni-app' | ||
| 82 | const app = getApp(); | ||
| 83 | const queryParams = ref({ | ||
| 84 | recordId: '' | ||
| 85 | }) | ||
| 86 | |||
| 87 | const form = ref({}) | ||
| 88 | const list = ref([]) | ||
| 89 | const listArr = ref([]) | ||
| 90 | const id = ref() | ||
| 91 | const auditList = ref([]) | ||
| 92 | |||
| 93 | const feelList = ref([]) | ||
| 94 | const total = ref(0) | ||
| 95 | const totalYear = ref(0) | ||
| 96 | const deptType = ref() | ||
| 97 | let rangeId = '' | ||
| 98 | onLoad((option) => { | ||
| 99 | if ('form' in option) { | ||
| 100 | form.value = JSON.parse(decodeURIComponent(option.form)) | ||
| 101 | } | ||
| 102 | queryParams.value.rangeId = form.value.rangId | ||
| 103 | list.value = form.value.certList | ||
| 104 | console.log(form.value) | ||
| 105 | if (app.globalData.isLogin) { | ||
| 106 | init() | ||
| 107 | } else { | ||
| 108 | |||
| 109 | app.firstLoadCallback = () => { | ||
| 110 | init() | ||
| 111 | }; | ||
| 112 | } | ||
| 113 | |||
| 114 | }) | ||
| 115 | |||
| 116 | function init() { | ||
| 117 | uni.showLoading({ | ||
| 118 | title: '加载中' | ||
| 119 | }) | ||
| 120 | deptType.value = app.globalData.deptType | ||
| 121 | getFillList() | ||
| 122 | } | ||
| 123 | |||
| 124 | function getFillList() { | ||
| 125 | api.getFillAuditLog(form.value.rangeId).then(res => { | ||
| 126 | uni.hideLoading() | ||
| 127 | feelList.value = res.data | ||
| 128 | }) | ||
| 129 | } | ||
| 130 | </script> | ||
| 131 | |||
| 132 | <style scoped lang="scss"> | ||
| 133 | .date { | ||
| 134 | margin-top: 10rpx; | ||
| 135 | font-size: 26rpx; | ||
| 136 | color: #999; | ||
| 137 | } | ||
| 138 | |||
| 139 | .wBox { | ||
| 140 | width: 700rpx; | ||
| 141 | padding: 30rpx; | ||
| 142 | margin: 20rpx auto 0; | ||
| 143 | background: #FFFFFF; | ||
| 144 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 145 | border-radius: 15rpx; | ||
| 146 | |||
| 147 | .tt { | ||
| 148 | color: #0A1629; | ||
| 149 | font-size: 30rpx; | ||
| 150 | } | ||
| 151 | } | ||
| 152 | |||
| 153 | .userlist { | ||
| 154 | .item { | ||
| 155 | border-bottom: 1px dashed #e5e5e5; | ||
| 156 | position: relative; | ||
| 157 | |||
| 158 | .date { | ||
| 159 | margin-top: 10rpx; | ||
| 160 | } | ||
| 161 | |||
| 162 | .name { | ||
| 163 | text { | ||
| 164 | margin-left: 1em; | ||
| 165 | color: #4C5359; | ||
| 166 | font-size: 26rpx; | ||
| 167 | } | ||
| 168 | } | ||
| 169 | |||
| 170 | .nian { | ||
| 171 | position: absolute; | ||
| 172 | right: 0; | ||
| 173 | font-size: 30rpx; | ||
| 174 | color: #AD181F; | ||
| 175 | } | ||
| 176 | } | ||
| 177 | } | ||
| 178 | |||
| 179 | .info { | ||
| 180 | display: flex; | ||
| 181 | margin: 30rpx 0 20rpx; | ||
| 182 | font-size: 28rpx; | ||
| 183 | |||
| 184 | view { | ||
| 185 | color: #7D8592; | ||
| 186 | margin-right: 20rpx; | ||
| 187 | } | ||
| 188 | } | ||
| 189 | |||
| 190 | .fixedBottom { | ||
| 191 | justify-content: center; | ||
| 192 | |||
| 193 | button { | ||
| 194 | margin: 0 20rpx; | ||
| 195 | width: 286rpx; | ||
| 196 | } | ||
| 197 | |||
| 198 | .btn-red { | ||
| 199 | width: 286rpx; | ||
| 200 | } | ||
| 201 | } | ||
| 202 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -2,7 +2,7 @@ | ... | @@ -2,7 +2,7 @@ |
| 2 | <view class="page"> | 2 | <view class="page"> |
| 3 | <view class="bgbg"> | 3 | <view class="bgbg"> |
| 4 | <view class="welcome">您好! | 4 | <view class="welcome">您好! |
| 5 | <!-- {{memberInfo.name}} --> | 5 | {{memberInfo.name}} |
| 6 | <br />欢迎使用中跆协会员管理系统</view> | 6 | <br />欢迎使用中跆协会员管理系统</view> |
| 7 | <view class="flexbox"> | 7 | <view class="flexbox"> |
| 8 | <!-- userType 1:中跆协 2:省 3:市区 4:道馆--> | 8 | <!-- userType 1:中跆协 2:省 3:市区 4:道馆--> |
| ... | @@ -25,13 +25,18 @@ | ... | @@ -25,13 +25,18 @@ |
| 25 | </view> | 25 | </view> |
| 26 | <view v-if="userType!='4'" @click="goPath('/pages/group/list')"> | 26 | <view v-if="userType!='4'" @click="goPath('/pages/group/list')"> |
| 27 | <image />团体会员查询 | 27 | <image />团体会员查询 |
| 28 | </view> | 28 | </view> |
| 29 | <!--市区 省 中跆协 --> | ||
| 29 | <view v-if="userType!='4'" @click="goPath('/pages/group/apply/applyList')"> | 30 | <view v-if="userType!='4'" @click="goPath('/pages/group/apply/applyList')"> |
| 30 | <image />团体会员审核 | 31 | <image />团体会员审核 |
| 31 | </view> | 32 | </view> |
| 32 | <view v-if="userType=='2'" @click="goPath('/pages/group/pay')"> | 33 | <view v-if="userType=='2'" @click="goPath('/pages/group/pay')"> |
| 33 | <image />团体会员认证 | 34 | <image />团体会员认证 |
| 34 | </view> | 35 | </view> |
| 36 | |||
| 37 | <view v-if="userType=='2'" @click="goPath('/pages/group/feeBill')"> | ||
| 38 | <image />团体会员缴费单 | ||
| 39 | </view> | ||
| 35 | 40 | ||
| 36 | <view v-if="userType=='4'" @click="goPath('/pages/level/apply')"> | 41 | <view v-if="userType=='4'" @click="goPath('/pages/level/apply')"> |
| 37 | <image />级位考试申请 | 42 | <image />级位考试申请 |
| ... | @@ -142,7 +147,7 @@ | ... | @@ -142,7 +147,7 @@ |
| 142 | uni.showLoading({ | 147 | uni.showLoading({ |
| 143 | title: '加载中' | 148 | title: '加载中' |
| 144 | }); | 149 | }); |
| 145 | // loginServer.getMyOwnMemberInfo().then(res=>{ | 150 | loginServer.getMyOwnMemberInfo().then(res=>{ |
| 146 | userType.value = app.globalData.userType | 151 | userType.value = app.globalData.userType |
| 147 | memberInfo.value = app.globalData.memberInfo | 152 | memberInfo.value = app.globalData.memberInfo |
| 148 | console.log(userType.value,app.globalData.authenticationStatus) | 153 | console.log(userType.value,app.globalData.authenticationStatus) |
| ... | @@ -156,7 +161,7 @@ | ... | @@ -156,7 +161,7 @@ |
| 156 | getMes() | 161 | getMes() |
| 157 | } | 162 | } |
| 158 | uni.hideLoading(); | 163 | uni.hideLoading(); |
| 159 | // }) | 164 | }) |
| 160 | 165 | ||
| 161 | 166 | ||
| 162 | } | 167 | } | ... | ... |
| ... | @@ -38,7 +38,9 @@ | ... | @@ -38,7 +38,9 @@ |
| 38 | </view> | 38 | </view> |
| 39 | </view> | 39 | </view> |
| 40 | 40 | ||
| 41 | 41 | <view v-if="userType=='2'" class="block-btn-box"> | |
| 42 | <button @click="goMerge" class="btn-red-kx">前往合并 > </button> | ||
| 43 | </view> | ||
| 42 | 44 | ||
| 43 | <view class="nodata" v-if="infoList.length==0"> | 45 | <view class="nodata" v-if="infoList.length==0"> |
| 44 | <image mode="aspectFit" src="/static/nodata.png"></image> | 46 | <image mode="aspectFit" src="/static/nodata.png"></image> |
| ... | @@ -71,7 +73,8 @@ | ... | @@ -71,7 +73,8 @@ |
| 71 | const current = ref() | 73 | const current = ref() |
| 72 | const infoList = ref([]) | 74 | const infoList = ref([]) |
| 73 | const total = ref(0) | 75 | const total = ref(0) |
| 74 | const deptType = ref('') | 76 | const deptType = ref('') |
| 77 | const userType = ref('') | ||
| 75 | onLoad(() => { | 78 | onLoad(() => { |
| 76 | 79 | ||
| 77 | }) | 80 | }) |
| ... | @@ -90,7 +93,8 @@ | ... | @@ -90,7 +93,8 @@ |
| 90 | uni.showLoading({ | 93 | uni.showLoading({ |
| 91 | title: '加载中' | 94 | title: '加载中' |
| 92 | }) | 95 | }) |
| 93 | deptType.value = app.globalData.deptType | 96 | deptType.value = app.globalData.deptType |
| 97 | userType.value = app.globalData.userType | ||
| 94 | getList() | 98 | getList() |
| 95 | } | 99 | } |
| 96 | 100 | ||
| ... | @@ -135,9 +139,13 @@ | ... | @@ -135,9 +139,13 @@ |
| 135 | } else { | 139 | } else { |
| 136 | return | 140 | return |
| 137 | } | 141 | } |
| 138 | |||
| 139 | } | 142 | } |
| 140 | 143 | function goMerge(){ | |
| 144 | let path = `/pages/level/merge` | ||
| 145 | uni.navigateTo({ | ||
| 146 | url: path | ||
| 147 | }); | ||
| 148 | } | ||
| 141 | function audit(item, flag) { | 149 | function audit(item, flag) { |
| 142 | console.log(item.sourceData) | 150 | console.log(item.sourceData) |
| 143 | var obj = { | 151 | var obj = { |
| ... | @@ -193,32 +201,7 @@ | ... | @@ -193,32 +201,7 @@ |
| 193 | </script> | 201 | </script> |
| 194 | 202 | ||
| 195 | 203 | ||
| 196 | <style scoped> | 204 | <style scoped lang="scss"> |
| 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 { | 205 | .mt0 { |
| 223 | margin-top: 0 !important; | 206 | margin-top: 0 !important; |
| 224 | } | 207 | } |
| ... | @@ -226,5 +209,6 @@ | ... | @@ -226,5 +209,6 @@ |
| 226 | .appList .appItem .name { | 209 | .appList .appItem .name { |
| 227 | width: 80%; | 210 | width: 80%; |
| 228 | word-break: break-all; | 211 | word-break: break-all; |
| 229 | } | 212 | } |
| 213 | |||
| 230 | </style> | 214 | </style> | ... | ... |
pages/level/merge.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <view class="appList"> | ||
| 4 | <view class="appItem" v-for="item in infoList"> | ||
| 5 | <view @click="checkThis(item)" class="iconbox"> | ||
| 6 | <image class="icon" v-if="item.checked" src="@/static/member/dx_dwn.png" /> | ||
| 7 | <image class="icon" v-else src="@/static/member/dx.png" /> | ||
| 8 | </view> | ||
| 9 | <view class="status" @click="goDetail(item)"> | ||
| 10 | <text :class="{ | ||
| 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.applyTime">上报日期:{{item.applyTime}}</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.memberName}}</view> | ||
| 24 | </view> | ||
| 25 | <view> | ||
| 26 | 考级考官 | ||
| 27 | <view>{{item.examinerNames}}</view> | ||
| 28 | </view> | ||
| 29 | <view> | ||
| 30 | 考级考生数 | ||
| 31 | <view>{{item.totalNum}}</view> | ||
| 32 | </view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | </view> | ||
| 36 | |||
| 37 | |||
| 38 | <view class="fixedBottom"> | ||
| 39 | <button @click="handleMerge" v-if="infoList.length>0" style="width: 40%;" class="btn-red">合并</button> | ||
| 40 | <button @click="goMergeUp" class="btn-red-kx" style="width: 40%;">合并提交 > </button> | ||
| 41 | </view> | ||
| 42 | |||
| 43 | <view class="nodata" v-if="infoList.length==0"> | ||
| 44 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 45 | <text>暂无数据</text> | ||
| 46 | </view> | ||
| 47 | </view> | ||
| 48 | </template> | ||
| 49 | |||
| 50 | <script setup> | ||
| 51 | import * as api from '@/common/api.js' | ||
| 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: '1', | ||
| 67 | mergeFlag: '0', | ||
| 68 | type: '1' | ||
| 69 | }) | ||
| 70 | const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回'] | ||
| 71 | const infoList = ref([]) | ||
| 72 | const batchList = ref([]) | ||
| 73 | const total = ref(0) | ||
| 74 | const totalCost = ref(0) | ||
| 75 | const deptType = ref('') | ||
| 76 | onLoad(() => { | ||
| 77 | |||
| 78 | }) | ||
| 79 | onShow(() => { | ||
| 80 | if (app.globalData.isLogin) { | ||
| 81 | init() | ||
| 82 | } else { | ||
| 83 | |||
| 84 | app.firstLoadCallback = () => { | ||
| 85 | init() | ||
| 86 | }; | ||
| 87 | } | ||
| 88 | }) | ||
| 89 | |||
| 90 | function init() { | ||
| 91 | uni.showLoading({ | ||
| 92 | title: '加载中' | ||
| 93 | }) | ||
| 94 | deptType.value = app.globalData.deptType | ||
| 95 | getList() | ||
| 96 | } | ||
| 97 | |||
| 98 | |||
| 99 | function getList() { | ||
| 100 | totalCost.value = 0 | ||
| 101 | api.getVerityList(queryParams.value).then(res => { | ||
| 102 | const list = [] | ||
| 103 | _.each(res.rows, r => { | ||
| 104 | const item = JSON.parse(r.content) | ||
| 105 | item.recordId = r.recordId | ||
| 106 | item.auditStatus = r.auditStatus | ||
| 107 | item.isView = r.isView | ||
| 108 | item.submitStatus = r.submitStatus | ||
| 109 | item.distributeTime = r.distributeTime | ||
| 110 | item.statusStr = statusArr[r.auditStatus] | ||
| 111 | item.remark = r.remark | ||
| 112 | item.cuLevels = r.cuLevels | ||
| 113 | item.sourceData = r | ||
| 114 | item.auditProcess = r.auditProcess | ||
| 115 | item.checked = false | ||
| 116 | console.log(item) | ||
| 117 | list.push(item) | ||
| 118 | totalCost.value += (item.totalAmount * 1) | ||
| 119 | }) | ||
| 120 | infoList.value = list | ||
| 121 | total.value = res.total | ||
| 122 | uni.hideLoading() | ||
| 123 | }) | ||
| 124 | } | ||
| 125 | |||
| 126 | function goDetail(item) { | ||
| 127 | if (item.status != '0') { | ||
| 128 | let path = `/pages/level/applyDetail?examId=${item.examId}` | ||
| 129 | uni.navigateTo({ | ||
| 130 | url: path | ||
| 131 | }); | ||
| 132 | } else { | ||
| 133 | return | ||
| 134 | } | ||
| 135 | |||
| 136 | } | ||
| 137 | function goMergeUp(){ | ||
| 138 | // 合并提交 | ||
| 139 | let path = `/pages/level/mergeUp` | ||
| 140 | uni.navigateTo({ | ||
| 141 | url: path | ||
| 142 | }); | ||
| 143 | } | ||
| 144 | function checkThis(item) { | ||
| 145 | if (item.checked) { | ||
| 146 | item.checked = false | ||
| 147 | } else { | ||
| 148 | item.checked = true | ||
| 149 | } | ||
| 150 | } | ||
| 151 | var ids = [] | ||
| 152 | |||
| 153 | function handleMerge() { | ||
| 154 | batchList.value = [] | ||
| 155 | ids = [] | ||
| 156 | for (var n of infoList.value) { | ||
| 157 | if (n.checked) { | ||
| 158 | batchList.value.push(n) | ||
| 159 | ids.push(n.recordId) | ||
| 160 | } | ||
| 161 | } | ||
| 162 | if (batchList.value.length == 0) { | ||
| 163 | uni.showToast({ | ||
| 164 | title: `请选择至少一条数据`, | ||
| 165 | icon: 'none' | ||
| 166 | }) | ||
| 167 | return | ||
| 168 | } | ||
| 169 | const mergeFlag = batchList.value.some(item => { | ||
| 170 | if (item.auditStatus != '1') { | ||
| 171 | return uni.showToast({ | ||
| 172 | title: `${item.examCode}审核未通过,无法合并`, | ||
| 173 | icon: 'none' | ||
| 174 | }) | ||
| 175 | } | ||
| 176 | }) | ||
| 177 | uni.showModal({ | ||
| 178 | title: '提示', | ||
| 179 | content: `确认合并已选中的数据?`, | ||
| 180 | success: function(res) { | ||
| 181 | if (res.confirm) { | ||
| 182 | api.mergeRecords({ | ||
| 183 | body: ids.join(), | ||
| 184 | type: queryParams.value.type | ||
| 185 | }).then(res => { | ||
| 186 | uni.showToast({ | ||
| 187 | title: `操作成功` | ||
| 188 | }) | ||
| 189 | getList() | ||
| 190 | }) | ||
| 191 | } | ||
| 192 | } | ||
| 193 | }) | ||
| 194 | |||
| 195 | } | ||
| 196 | </script> | ||
| 197 | |||
| 198 | |||
| 199 | <style scoped lang="scss"> | ||
| 200 | .mt0 { | ||
| 201 | margin-top: 0 !important; | ||
| 202 | } | ||
| 203 | .appList .appItem{padding: 30rpx 30rpx 30rpx 120rpx;} | ||
| 204 | .appList .appItem .name { | ||
| 205 | width: 80%; | ||
| 206 | word-break: break-all; | ||
| 207 | } | ||
| 208 | |||
| 209 | .icon { | ||
| 210 | width: 60rpx; | ||
| 211 | height: 60rpx; | ||
| 212 | margin-right: 16rpx; | ||
| 213 | } | ||
| 214 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/level/mergeUp.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <!-- 级位合并提交 --> | ||
| 4 | <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" | ||
| 5 | styleType="text" activeColor="#AD181F"></uni-segmented-control> | ||
| 6 | <view class="appList"> | ||
| 7 | <view class="appItem" v-for="item in infoList"> | ||
| 8 | <view class="status" @click="goDetail(item)"> | ||
| 9 | <view :class="{ | ||
| 10 | 'text-success':item.status=='1', | ||
| 11 | 'text-danger':item.status=='2', | ||
| 12 | 'text-warning':item.status=='3' | ||
| 13 | }"> | ||
| 14 | {{ item.auditStatus=='100'?'待提交':statusArr[item.status] }} | ||
| 15 | </view> | ||
| 16 | </view> | ||
| 17 | <view class="date" v-if="item.handleDate">{{item.handleDate}}</view> | ||
| 18 | <view class="name" @click="goDetail(item)">{{item.mergeName}}</view> | ||
| 19 | <view class="flexbox" @click="goDetail(item)"> | ||
| 20 | <view> | ||
| 21 | 考试人数 | ||
| 22 | <view>{{item.totalNum}}</view> | ||
| 23 | </view> | ||
| 24 | <view> | ||
| 25 | 合并日期 | ||
| 26 | <view>{{item.mergeTime.slice(0,16)}}</view> | ||
| 27 | </view> | ||
| 28 | <view> | ||
| 29 | 总金额 | ||
| 30 | <view>¥{{item.totalAmount}}</view> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | |||
| 34 | <view class="func" v-if="item.auditStatus == 100"> | ||
| 35 | <button @click="handleAudit(item)">提交</button> | ||
| 36 | <!-- <button v-if="item.lastIds?.slice(0, 1) != '-'" @click="resolution(item)">取消合并</button> --> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | |||
| 41 | <view class="nodata" v-if="infoList.length==0"> | ||
| 42 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 43 | <text>暂无数据</text> | ||
| 44 | </view> | ||
| 45 | </view> | ||
| 46 | </template> | ||
| 47 | |||
| 48 | <script setup> | ||
| 49 | import * as api from '@/common/api.js' | ||
| 50 | import config from '@/config.js' | ||
| 51 | import _ from 'lodash' | ||
| 52 | import { | ||
| 53 | onMounted, | ||
| 54 | ref | ||
| 55 | } from 'vue' | ||
| 56 | import { | ||
| 57 | onLoad | ||
| 58 | } from '@dcloudio/uni-app' | ||
| 59 | const app = getApp(); | ||
| 60 | const queryParams = ref({ | ||
| 61 | // pageNum: 1, | ||
| 62 | // pageSize: 10 | ||
| 63 | flowCode: undefined, | ||
| 64 | mergeName: undefined, | ||
| 65 | status: '100', | ||
| 66 | examCode: undefined, | ||
| 67 | type: '1' | ||
| 68 | }) | ||
| 69 | const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝']) | ||
| 70 | const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回'] | ||
| 71 | const current = ref() | ||
| 72 | const list = ref([]) | ||
| 73 | const infoList = ref([]) | ||
| 74 | const totalCost = ref(0) | ||
| 75 | const deptType = ref('') | ||
| 76 | const userType = ref('') | ||
| 77 | onLoad(() => { | ||
| 78 | if (app.globalData.isLogin) { | ||
| 79 | init() | ||
| 80 | } else { | ||
| 81 | |||
| 82 | app.firstLoadCallback = () => { | ||
| 83 | init() | ||
| 84 | }; | ||
| 85 | } | ||
| 86 | }) | ||
| 87 | |||
| 88 | function init() { | ||
| 89 | deptType.value = app.globalData.deptType | ||
| 90 | userType.value = app.globalData.userType | ||
| 91 | getList() | ||
| 92 | } | ||
| 93 | |||
| 94 | function onClickItem(e) { | ||
| 95 | console.log(e) | ||
| 96 | switch (e.currentIndex) { | ||
| 97 | case 0: | ||
| 98 | queryParams.value.status = 100 | ||
| 99 | break; | ||
| 100 | case 1: | ||
| 101 | queryParams.value.status = 0 | ||
| 102 | break; | ||
| 103 | case 2: | ||
| 104 | queryParams.value.status = 1 | ||
| 105 | break; | ||
| 106 | case 3: | ||
| 107 | queryParams.value.status = 2 | ||
| 108 | break; | ||
| 109 | } | ||
| 110 | getList() | ||
| 111 | } | ||
| 112 | |||
| 113 | function getList() { | ||
| 114 | uni.showLoading({ | ||
| 115 | title: '加载中' | ||
| 116 | }) | ||
| 117 | api.getVerityMergeList(queryParams.value).then(response => { | ||
| 118 | uni.hideLoading() | ||
| 119 | const list = [] | ||
| 120 | _.each(response.rows, r => { | ||
| 121 | const item = JSON.parse(r.remark) | ||
| 122 | item.recordId = r.recordId | ||
| 123 | item.auditStatus = r.auditStatus | ||
| 124 | item.status = r.status | ||
| 125 | item.isView = r.isView | ||
| 126 | item.payStatus = r.payStatus | ||
| 127 | item.sourceData = r | ||
| 128 | item.auditProcess = r.auditProcess | ||
| 129 | item.handleDate = r.handleDate | ||
| 130 | list.push(item) | ||
| 131 | |||
| 132 | totalCost.value += (item.totalAmount * 1) | ||
| 133 | }) | ||
| 134 | infoList.value = list | ||
| 135 | |||
| 136 | }) | ||
| 137 | } | ||
| 138 | |||
| 139 | function handleAudit(item) { | ||
| 140 | uni.showModal({ | ||
| 141 | title: '提示', | ||
| 142 | content: `确定提交${item.content.certName}吗`, | ||
| 143 | success: function(res) { | ||
| 144 | if (res.confirm) { | ||
| 145 | api.groupAudit({ | ||
| 146 | flag: '1', | ||
| 147 | recordIds: [item.recordId], | ||
| 148 | reason: null | ||
| 149 | }).then(res => { | ||
| 150 | getList() | ||
| 151 | uni.showToast({ | ||
| 152 | title: `操作成功!` | ||
| 153 | }) | ||
| 154 | }) | ||
| 155 | } | ||
| 156 | } | ||
| 157 | }) | ||
| 158 | } | ||
| 159 | |||
| 160 | function goDetail(item) { | ||
| 161 | const form = encodeURIComponent(JSON.stringify(item)) | ||
| 162 | // 查看 | ||
| 163 | let path = `/pages/level/mergeUpDetail?&form=${form}` | ||
| 164 | uni.navigateTo({ | ||
| 165 | url: path | ||
| 166 | }); | ||
| 167 | |||
| 168 | } | ||
| 169 | </script> | ||
| 170 | |||
| 171 | <style scoped> | ||
| 172 | .mt0 { | ||
| 173 | margin-top: 0 !important; | ||
| 174 | } | ||
| 175 | |||
| 176 | .appList .appItem .name { | ||
| 177 | width: 80%; | ||
| 178 | word-break: break-all; | ||
| 179 | } | ||
| 180 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/level/mergeUpDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <view class="wBox"> | ||
| 4 | <view class="tt">{{form.content.certName}}</view> | ||
| 5 | <view> | ||
| 6 | <view class="date" v-if="form.content.commitTime">提交日期:<text>{{ form.content.commitTime }}</text> | ||
| 7 | </view> | ||
| 8 | <view class="date">提交单位:<text>{{ form.content.memberName }}</text> </view> | ||
| 9 | </view> | ||
| 10 | <view class="vipData mt30" style="flex-wrap: wrap;"> | ||
| 11 | <view class="w50"> | ||
| 12 | 团队会员合计: | ||
| 13 | <text>{{ form.content.allCount }}个</text> | ||
| 14 | </view> | ||
| 15 | <view class="w50"> | ||
| 16 | 新会员合计: | ||
| 17 | <text>{{ form.content.newCount }}个</text> | ||
| 18 | </view> | ||
| 19 | <view class="w50"> | ||
| 20 | 年限合计: | ||
| 21 | <text>{{ form.content.renewYear }}年</text> | ||
| 22 | </view> | ||
| 23 | <view class="w50"> | ||
| 24 | 费用合计: | ||
| 25 | <text>{{ (form.content.allFee*1).toFixed(2) }}元</text> | ||
| 26 | </view> | ||
| 27 | </view> | ||
| 28 | |||
| 29 | <!-- 成员 --> | ||
| 30 | <view class="userlist"> | ||
| 31 | <view class="item" v-for="n in list"> | ||
| 32 | <view style="width: 100%"> | ||
| 33 | <view class="name">{{n.memberName}}</view> | ||
| 34 | <view class="date">单位类型: | ||
| 35 | <text v-if="n.deptType==2">一级协会</text> | ||
| 36 | <text v-if="n.deptType==3">直属协会</text> | ||
| 37 | <text v-if="n.deptType==4">二级协会</text> | ||
| 38 | <text v-if="n.deptType==5">三级协会</text> | ||
| 39 | <text v-if="n.deptType==6">职业性团体会员</text> | ||
| 40 | </view> | ||
| 41 | <view class="flexbox"> | ||
| 42 | <view> | ||
| 43 | 单价 | ||
| 44 | <text>¥{{n.unitPrice}}</text> | ||
| 45 | </view> | ||
| 46 | <view> | ||
| 47 | 年限 | ||
| 48 | <text>{{n.renewYear}}</text> | ||
| 49 | </view> | ||
| 50 | <view> | ||
| 51 | 总价 | ||
| 52 | <text>¥{{n.allFee}}</text> | ||
| 53 | </view> | ||
| 54 | </view> | ||
| 55 | </view> | ||
| 56 | </view> | ||
| 57 | </view> | ||
| 58 | |||
| 59 | </view> | ||
| 60 | |||
| 61 | <view class="h3-padding">审核记录</view> | ||
| 62 | <view class="wBox"> | ||
| 63 | <view class="stepItem" v-for="(n,index) in auditList"> | ||
| 64 | <view class="time">{{n.handleDate||'待审批'}}</view> | ||
| 65 | <view class="content"> | ||
| 66 | <view class="status"> | ||
| 67 | <text v-if="n.auditStatus==1" class="text-success">审核通过</text> | ||
| 68 | <text v-if="n.auditStatus==2" class="text-danger"> 审核拒绝</text> | ||
| 69 | <text v-if="n.auditStatus==0" class="text-primary"> 审核中</text> | ||
| 70 | <text v-if="n.auditStatus==3" class="text-warning">已撤回</text> | ||
| 71 | <text v-if="n.auditStatus==100" class="text-primary">审核中</text> | ||
| 72 | |||
| 73 | </view> | ||
| 74 | <!-- <view class="name">第 {{index+1}} 步</view> --> | ||
| 75 | <view class="deptName">{{n.handlerDeptName}}</view> | ||
| 76 | <view v-if="n.reason"> | ||
| 77 | 备注:{{n.reason||'/' }} | ||
| 78 | </view> | ||
| 79 | </view> | ||
| 80 | </view> | ||
| 81 | </view> | ||
| 82 | |||
| 83 | <view class="fixedBottom" v-if="(deptType == 1)&&form.ztxRes == 0"> | ||
| 84 | <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> | ||
| 85 | <button class="btn-red" @click="audit(form.id,'1')">同意</button> | ||
| 86 | </view> | ||
| 87 | |||
| 88 | <view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.shenRes == 0"> | ||
| 89 | <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> | ||
| 90 | <button class="btn-red" @click="audit(form.id,'1')">同意</button> | ||
| 91 | </view> | ||
| 92 | |||
| 93 | </view> | ||
| 94 | </template> | ||
| 95 | |||
| 96 | <script setup> | ||
| 97 | import * as api from '@/common/api.js' | ||
| 98 | import config from '@/config.js' | ||
| 99 | import { | ||
| 100 | onMounted, | ||
| 101 | ref | ||
| 102 | } from 'vue' | ||
| 103 | import { | ||
| 104 | onLoad | ||
| 105 | } from '@dcloudio/uni-app' | ||
| 106 | const app = getApp(); | ||
| 107 | const queryParams = ref({ | ||
| 108 | recordId: '' | ||
| 109 | }) | ||
| 110 | |||
| 111 | const form = ref({}) | ||
| 112 | const list = ref([]) | ||
| 113 | const listArr = ref([]) | ||
| 114 | const id = ref() | ||
| 115 | const auditList = ref([]) | ||
| 116 | |||
| 117 | const feelList = ref([]) | ||
| 118 | const total = ref(0) | ||
| 119 | const totalYear = ref(0) | ||
| 120 | const deptType = ref() | ||
| 121 | let rangeId = '' | ||
| 122 | onLoad((option) => { | ||
| 123 | if ('form' in option) { | ||
| 124 | form.value = JSON.parse(decodeURIComponent(option.form)) | ||
| 125 | } | ||
| 126 | list.value = form.content?.certifiedSimpleList || [] | ||
| 127 | listArr.value = form.content?.certifiedSimpleList || [] | ||
| 128 | queryParams.value.recordId = form.value.recordId | ||
| 129 | console.log(form.value) | ||
| 130 | if (app.globalData.isLogin) { | ||
| 131 | init() | ||
| 132 | } else { | ||
| 133 | |||
| 134 | app.firstLoadCallback = () => { | ||
| 135 | init() | ||
| 136 | }; | ||
| 137 | } | ||
| 138 | |||
| 139 | }) | ||
| 140 | |||
| 141 | function init() { | ||
| 142 | deptType.value = app.globalData.deptType | ||
| 143 | getForm() | ||
| 144 | } | ||
| 145 | |||
| 146 | function getForm() { | ||
| 147 | uni.showLoading({ | ||
| 148 | title: '加载中' | ||
| 149 | }) | ||
| 150 | api.getDetailList(queryParams.value).then(res => { | ||
| 151 | uni.hideLoading() | ||
| 152 | list.value = res.rows | ||
| 153 | list.value[0].rangeId == 0 ? id.value = list.value[0].certId : id.value = list.value[0].rangeId | ||
| 154 | if (id.value) { | ||
| 155 | auditFN() | ||
| 156 | } | ||
| 157 | }) | ||
| 158 | } | ||
| 159 | |||
| 160 | function auditFN() { | ||
| 161 | api.getGroupHistoryByRelateId(id.value).then(res => { | ||
| 162 | auditList.value = res.data | ||
| 163 | }) | ||
| 164 | } | ||
| 165 | |||
| 166 | function audit(rangeId, flag) { | ||
| 167 | if (flag == '2') { | ||
| 168 | // 拒绝 | ||
| 169 | // 弹出框填写理由 | ||
| 170 | uni.showModal({ | ||
| 171 | title: '请输入拒绝理由', | ||
| 172 | editable: true, | ||
| 173 | success: function(res) { | ||
| 174 | if (res.confirm) { | ||
| 175 | if (!res.content) { | ||
| 176 | uni.showToast({ | ||
| 177 | title: '请输入拒绝理由', | ||
| 178 | icon: 'none' | ||
| 179 | }) | ||
| 180 | } else { | ||
| 181 | doApproval(rangeId, flag, res.content) | ||
| 182 | } | ||
| 183 | } | ||
| 184 | } | ||
| 185 | }) | ||
| 186 | } else if (flag == '1') { | ||
| 187 | // 二次确认 | ||
| 188 | uni.showModal({ | ||
| 189 | title: '提示', | ||
| 190 | content: `确定审批通过吗`, | ||
| 191 | success: function(res) { | ||
| 192 | if (res.confirm) { | ||
| 193 | doApproval(rangeId, flag) | ||
| 194 | } | ||
| 195 | } | ||
| 196 | }) | ||
| 197 | } | ||
| 198 | } | ||
| 199 | |||
| 200 | function doApproval(rangeId, flag, reason) { | ||
| 201 | var obj = { | ||
| 202 | flag: flag, | ||
| 203 | reason: reason || '', | ||
| 204 | rangeIds: rangeIds | ||
| 205 | } | ||
| 206 | console.log(obj) | ||
| 207 | api.mobilizeAudit(obj).then((res) => { | ||
| 208 | uni.showToast({ | ||
| 209 | title: '操作成功', | ||
| 210 | icon: 'none' | ||
| 211 | }) | ||
| 212 | uni.navigateBack() | ||
| 213 | }) | ||
| 214 | } | ||
| 215 | </script> | ||
| 216 | |||
| 217 | <style scoped lang="scss"> | ||
| 218 | .date { | ||
| 219 | margin-top: 10rpx; | ||
| 220 | font-size: 26rpx; | ||
| 221 | color: #999; | ||
| 222 | } | ||
| 223 | |||
| 224 | .wBox { | ||
| 225 | width: 700rpx; | ||
| 226 | padding: 30rpx; | ||
| 227 | margin: 20rpx auto 0; | ||
| 228 | background: #FFFFFF; | ||
| 229 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 230 | border-radius: 15rpx; | ||
| 231 | |||
| 232 | .tt { | ||
| 233 | color: #0A1629; | ||
| 234 | font-size: 30rpx; | ||
| 235 | } | ||
| 236 | } | ||
| 237 | |||
| 238 | .userlist { | ||
| 239 | .item { | ||
| 240 | border-bottom: 1px dashed #e5e5e5; | ||
| 241 | position: relative; | ||
| 242 | |||
| 243 | .date { | ||
| 244 | margin-top: 10rpx; | ||
| 245 | } | ||
| 246 | |||
| 247 | .name { | ||
| 248 | text { | ||
| 249 | margin-left: 1em; | ||
| 250 | color: #4C5359; | ||
| 251 | font-size: 26rpx; | ||
| 252 | } | ||
| 253 | } | ||
| 254 | |||
| 255 | .nian { | ||
| 256 | position: absolute; | ||
| 257 | right: 0; | ||
| 258 | font-size: 30rpx; | ||
| 259 | color: #AD181F; | ||
| 260 | } | ||
| 261 | } | ||
| 262 | } | ||
| 263 | |||
| 264 | .info { | ||
| 265 | display: flex; | ||
| 266 | margin: 30rpx 0 20rpx; | ||
| 267 | font-size: 28rpx; | ||
| 268 | |||
| 269 | view { | ||
| 270 | color: #7D8592; | ||
| 271 | margin-right: 20rpx; | ||
| 272 | } | ||
| 273 | } | ||
| 274 | |||
| 275 | .fixedBottom { | ||
| 276 | justify-content: center; | ||
| 277 | |||
| 278 | button { | ||
| 279 | margin: 0 20rpx; | ||
| 280 | width: 286rpx; | ||
| 281 | } | ||
| 282 | |||
| 283 | .btn-red { | ||
| 284 | width: 286rpx; | ||
| 285 | } | ||
| 286 | } | ||
| 287 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -6,7 +6,7 @@ | ... | @@ -6,7 +6,7 @@ |
| 6 | 6 | ||
| 7 | <view class="searchbar" v-if="deptType == 6"> | 7 | <view class="searchbar" v-if="deptType == 6"> |
| 8 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | 8 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" |
| 9 | v-model="queryParams.name" placeholder="搜索调动名称" @blur="getList"> | 9 | v-model="queryParams.name" placeholder="搜索调动名称" @blur="getList" @clear="getList"> |
| 10 | </uni-easyinput> | 10 | </uni-easyinput> |
| 11 | <view class="invertedbtn-red" @click="goAddMobilize">+ 新建调动</view> | 11 | <view class="invertedbtn-red" @click="goAddMobilize">+ 新建调动</view> |
| 12 | </view> | 12 | </view> | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view> |
| 3 | <!-- 会员缴费 --> | 3 | <!-- <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" |
| 4 | styleType="text" activeColor="#AD181F"></uni-segmented-control> --> | ||
| 5 | <view class="searchbar"> | ||
| 6 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 7 | v-model="queryParams.paymentName" placeholder="搜索缴费名称" @blur="getList" @clear="getList"> | ||
| 8 | </uni-easyinput> | ||
| 9 | <view class="invertedbtn-red" @click="goAdd">+ 新建缴费</view> | ||
| 10 | </view> | ||
| 4 | 11 | ||
| 12 | <!-- 会员缴费 --> | ||
| 5 | <view class="appList"> | 13 | <view class="appList"> |
| 6 | <view class="appItem" v-for="item in list" @click="goDteail(item)"> | 14 | <view class="appItem" v-for="item in list"> |
| 7 | <view class="status"> | 15 | <view class="status" @click="goDetail(item)"> |
| 8 | <text v-if="item.status==1" class="text-primary">审核中</text> | 16 | <text v-if="item.status==1" class="text-primary">审核中</text> |
| 9 | <text v-if="item.status==2" class="text-success"> 审核通过</text> | 17 | <text v-if="item.status==2" class="text-success"> 审核通过</text> |
| 10 | <text v-if="item.status==3" class="text-danger"> 审核拒绝</text> | 18 | <text v-if="item.status==3" class="text-danger"> 审核拒绝</text> |
| 11 | <text v-if="item.status==4" class="text-warning">已退回</text> | 19 | <text v-if="item.status==4" class="text-warning">已退回</text> |
| 12 | </view> | 20 | </view> |
| 13 | <view class="date"> | 21 | <view class="date" @click="goDetail(item)" v-if="item.commitTime"> |
| 14 | <uni-icons type="calendar" size="16" color="#7D8592"></uni-icons> | 22 | <uni-icons type="calendar" size="16" color="#7D8592"></uni-icons> |
| 15 | {{item.commitTime}} 提交 | 23 | {{item.commitTime}} 提交 |
| 16 | </view> | 24 | </view> |
| 17 | <view class="name">{{item.paymentName}}</view> | 25 | <view class="name" @click="goDetail(item)">{{item.paymentName}}</view> |
| 18 | <view class="flexbox"> | 26 | <view class="flexbox" @click="goDetail(item)"> |
| 19 | <view> | 27 | <view> |
| 20 | 人数合计 | 28 | 人数合计 |
| 21 | <view>{{item.personCount}}</view> | 29 | <view>{{item.personCount}}</view> |
| ... | @@ -29,8 +37,9 @@ | ... | @@ -29,8 +37,9 @@ |
| 29 | <view>{{item.totalYear}}</view> | 37 | <view>{{item.totalYear}}</view> |
| 30 | </view> | 38 | </view> |
| 31 | </view> | 39 | </view> |
| 32 | <view class="func" v-if="item.status==0"> | 40 | <view class="func" v-if="item.status==0||item.status==3||item.status==4"> |
| 33 | <button>提交审核</button> | 41 | <button @click="handleUpdate(item)">编辑</button> |
| 42 | <button @click="commitFN(item)">提交审核</button> | ||
| 34 | </view> | 43 | </view> |
| 35 | </view> | 44 | </view> |
| 36 | </view> | 45 | </view> |
| ... | @@ -42,20 +51,29 @@ | ... | @@ -42,20 +51,29 @@ |
| 42 | import * as api from '@/common/api.js' | 51 | import * as api from '@/common/api.js' |
| 43 | import config from '@/config.js' | 52 | import config from '@/config.js' |
| 44 | import { | 53 | import { |
| 45 | onMounted, | ||
| 46 | ref | 54 | ref |
| 47 | } from 'vue' | 55 | } from 'vue' |
| 48 | import { | 56 | import { |
| 49 | onLoad | 57 | onLoad, |
| 58 | onShow | ||
| 50 | } from '@dcloudio/uni-app' | 59 | } from '@dcloudio/uni-app' |
| 60 | const app = getApp() | ||
| 51 | const queryParams = ref({ | 61 | const queryParams = ref({ |
| 52 | // pageNum: 1, | 62 | // pageNum: 1, |
| 53 | // pageSize: 10 | 63 | // pageSize: 10 |
| 54 | }) | 64 | }) |
| 55 | const list = ref([]) | 65 | const list = ref([]) |
| 56 | const total = ref(0) | 66 | const total = ref(0) |
| 57 | onMounted(() => { | 67 | const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝']) |
| 58 | getList() | 68 | onShow(() => { |
| 69 | if (app.globalData.isLogin) { | ||
| 70 | getList() | ||
| 71 | } else { | ||
| 72 | |||
| 73 | app.firstLoadCallback = () => { | ||
| 74 | getList() | ||
| 75 | }; | ||
| 76 | } | ||
| 59 | }) | 77 | }) |
| 60 | 78 | ||
| 61 | function getList() { | 79 | function getList() { |
| ... | @@ -65,14 +83,76 @@ | ... | @@ -65,14 +83,76 @@ |
| 65 | }) | 83 | }) |
| 66 | } | 84 | } |
| 67 | 85 | ||
| 68 | function goDteail(item) { | 86 | function goDetail(item) { |
| 69 | let path = `/pages/personalVip/paymentDetail?wfCode=${item.wfCode}` | 87 | const form = encodeURIComponent(JSON.stringify(item)) |
| 70 | uni.navigateTo({ | 88 | let path = `/pages/personalVip/paymentDetail?form=${form}` |
| 71 | url: path | 89 | uni.navigateTo({ |
| 90 | url: path | ||
| 91 | }); | ||
| 92 | } | ||
| 93 | |||
| 94 | function handleUpdate(item) { | ||
| 95 | let path = `/pages/personalVip/renew?rangeId=${item.rangId}` | ||
| 96 | uni.navigateTo({ | ||
| 97 | url: path | ||
| 98 | }); | ||
| 99 | } | ||
| 100 | |||
| 101 | function commitFN(row) { | ||
| 102 | uni.showModal({ | ||
| 103 | title: '提示', | ||
| 104 | content: `确定提交${row.paymentName}吗`, | ||
| 105 | success: function(res) { | ||
| 106 | if (res.confirm) { | ||
| 107 | uni.showLoading({ | ||
| 108 | icon: 'none', | ||
| 109 | title: '提交中' | ||
| 110 | }) | ||
| 111 | api.personalCommit(row.rangId).then(res => { | ||
| 112 | uni.hideLoading() | ||
| 113 | uni.showToast({ | ||
| 114 | title: '提交成功' | ||
| 115 | }) | ||
| 116 | }) | ||
| 117 | getList() | ||
| 118 | } | ||
| 119 | } | ||
| 120 | }) | ||
| 121 | |||
| 122 | |||
| 123 | } | ||
| 124 | |||
| 125 | function goAdd() { | ||
| 126 | let path = `/pages/personalVip/renew` | ||
| 127 | uni.navigateTo({ | ||
| 128 | url: path | ||
| 72 | }); | 129 | }); |
| 73 | } | 130 | } |
| 74 | </script> | 131 | </script> |
| 75 | 132 | ||
| 76 | <style> | 133 | <style lang="scss" scoped> |
| 134 | .searchbar { | ||
| 135 | display: flex; | ||
| 136 | align-items: center; | ||
| 137 | padding: 25rpx; | ||
| 138 | box-sizing: border-box; | ||
| 139 | |||
| 140 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 141 | border-radius: 35rpx; | ||
| 142 | border: none; | ||
| 143 | height: 70rpx; | ||
| 144 | } | ||
| 145 | |||
| 146 | :deep(.uni-easyinput__content-input) { | ||
| 147 | font-size: 26rpx; | ||
| 148 | } | ||
| 77 | 149 | ||
| 150 | .invertedbtn-red { | ||
| 151 | border-radius: 50px; | ||
| 152 | background-color: #fff; | ||
| 153 | |||
| 154 | font-size: 30rpx; | ||
| 155 | padding: 10rpx 20rpx; | ||
| 156 | } | ||
| 157 | } | ||
| 78 | </style> | 158 | </style> |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
| 14 | </view> | 14 | </view> |
| 15 | <view> | 15 | <view> |
| 16 | <view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view> | 16 | <view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view> |
| 17 | <view class="date">原有效期至{{n.originValidityDate||'--'}}</view> | 17 | <view class="date">原有效期至 {{n.originValidityDate?.slice(0,10)||'--'}}</view> |
| 18 | </view> | 18 | </view> |
| 19 | <view class="nian"> | 19 | <view class="nian"> |
| 20 | {{n.payYear}}年 | 20 | {{n.payYear}}年 |
| ... | @@ -24,8 +24,8 @@ | ... | @@ -24,8 +24,8 @@ |
| 24 | 24 | ||
| 25 | </view> | 25 | </view> |
| 26 | 26 | ||
| 27 | <view class="h3-padding">审核流程</view> | 27 | <view class="h3-padding" v-if="feelList.length>0">审核流程</view> |
| 28 | <view class="wBox"> | 28 | <view class="wBox" v-if="feelList.length>0"> |
| 29 | <view class="stepItem" v-for="(n,index) in feelList"> | 29 | <view class="stepItem" v-for="(n,index) in feelList"> |
| 30 | <view class="time">{{n.auditTime||'待审批'}}</view> | 30 | <view class="time">{{n.auditTime||'待审批'}}</view> |
| 31 | <view class="content"> | 31 | <view class="content"> |
| ... | @@ -66,23 +66,13 @@ | ... | @@ -66,23 +66,13 @@ |
| 66 | const feelList = ref([]) | 66 | const feelList = ref([]) |
| 67 | const total = ref(0) | 67 | const total = ref(0) |
| 68 | onLoad((option) => { | 68 | onLoad((option) => { |
| 69 | wfCode.value = option.wfCode | 69 | if ('form' in option) { |
| 70 | getForm() | 70 | form.value = JSON.parse(decodeURIComponent(option.form)) |
| 71 | } | ||
| 72 | getFillList(form.value.rangId) | ||
| 73 | getPersons() | ||
| 71 | }) | 74 | }) |
| 72 | 75 | ||
| 73 | function getForm() { | ||
| 74 | api.getPaymentList(queryParams.value).then(res => { | ||
| 75 | if(res.rows) | ||
| 76 | for (var n of res.rows) { | ||
| 77 | if (n.wfCode == wfCode.value) { | ||
| 78 | form.value = n | ||
| 79 | } | ||
| 80 | } | ||
| 81 | getFillList(form.value.rangId) | ||
| 82 | getPersons() | ||
| 83 | }) | ||
| 84 | } | ||
| 85 | |||
| 86 | function getPersons() { | 76 | function getPersons() { |
| 87 | queryParams.value.rangeId = form.value.rangId | 77 | queryParams.value.rangeId = form.value.rangId |
| 88 | api.addSelectPageList(queryParams.value).then(res => { | 78 | api.addSelectPageList(queryParams.value).then(res => { | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view class="hasfixedbottom"> |
| 3 | <view class="searchbar"> | 3 | <view class="searchbar"> |
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" |
| 5 | v-model="query.name" placeholder="搜索姓名或证件号码" @iconClick="iconClick"> | 5 | v-model="queryParams.personName" placeholder="搜索姓名或证件号码" @blur="getList" @clear="getList"> |
| 6 | </uni-easyinput> | 6 | </uni-easyinput> |
| 7 | <view class="invertedbtn-red" @click="goVipList">+ 添加会员</view> | 7 | <view class="invertedbtn-red" @click="goVipList">+ 添加会员</view> |
| 8 | </view> | 8 | </view> |
| 9 | 9 | ||
| 10 | <view class="vipData mtb30"> | ||
| 11 | <view> 人数合计:<text>{{ formData.personCount? formData.personCount:0 }}</text>人 </view> | ||
| 12 | <view> 新会员合计:<text>{{ formData.newPersonCount? formData.newPersonCount:0 }}</text>人 </view> | ||
| 13 | <view> 续费会员合计:<text>{{ formData.oldPersonCount? formData.oldPersonCount:0 }}</text>人 </view> | ||
| 14 | </view> | ||
| 15 | |||
| 10 | <uni-swipe-action> | 16 | <uni-swipe-action> |
| 11 | <uni-swipe-action-item class="personitem" v-for="n in choseList"> | 17 | <uni-swipe-action-item class="personitem" v-for="n in list"> |
| 12 | <view class="content-box"> | 18 | <view class="content-box"> |
| 13 | <view class="flexbox"> | 19 | <view class="flexbox"> |
| 14 | <view class="colorful">{{n.name.slice(0,1)}}</view> | 20 | <view class="colorful">{{n.personName?.slice(0,1)}}</view> |
| 15 | {{n.name}} | 21 | <view>{{n.personName}} |
| 22 | <view class="date"> | ||
| 23 | 证件号:{{n.personIdcCode}} | ||
| 24 | </view> | ||
| 25 | </view> | ||
| 16 | </view> | 26 | </view> |
| 17 | <view class="flexbox"> | 27 | <view class="flexbox" @click="changeYear(n)"> |
| 18 | <uni-number-box :min="1" v-model="n.year" :max="5"></uni-number-box>年 | 28 | <view class="text-danger">({{yearlist[n.payYear-1].text}})</view> |
| 29 | <uni-icons type="forward" size="18" color="#999"></uni-icons> | ||
| 19 | </view> | 30 | </view> |
| 20 | 31 | ||
| 21 | </view> | 32 | </view> |
| 22 | <template v-slot:right> | 33 | <template v-slot:right> |
| 23 | <view class="slot-button"> | 34 | <view class="slot-button"> |
| 24 | <view> | 35 | <view @click="handleDelete(n)"> |
| 25 | <uni-icons type="trash-filled" color="#fff" size="20"></uni-icons> | 36 | <uni-icons type="trash-filled" color="#fff" size="20"></uni-icons> |
| 26 | <text class="slot-button-text">删除</text> | 37 | <text class="slot-button-text">删除</text> |
| 27 | </view> | 38 | </view> |
| ... | @@ -30,10 +41,23 @@ | ... | @@ -30,10 +41,23 @@ |
| 30 | </uni-swipe-action-item> | 41 | </uni-swipe-action-item> |
| 31 | </uni-swipe-action> | 42 | </uni-swipe-action> |
| 32 | 43 | ||
| 33 | <view class="nodata" v-if="choseList.length==0"> | 44 | <view class="nodata" v-if="list.length==0"> |
| 34 | <image mode="aspectFit" src="/static/nodata.png"></image> | 45 | <image mode="aspectFit" src="/static/nodata.png"></image> |
| 35 | <button class="btn-red" @click="goVipList">+ 添加会员</button> | 46 | <button class="btn-red" @click="goVipList">+ 在线选择</button> |
| 36 | </view> | 47 | </view> |
| 48 | |||
| 49 | <view class="fixedBottom"> | ||
| 50 | <button class="btn-red" :disabled="list?.length <= 0" @click="commitFN">保存并提交</button> | ||
| 51 | </view> | ||
| 52 | |||
| 53 | <uni-popup ref="pickView" type="bottom"> | ||
| 54 | <view class="pickViewBox"> | ||
| 55 | <view v-for="n in yearlist" @click="bindyear(n)"> | ||
| 56 | {{n.text}}<uni-icons v-show="n.value == (nowYear)" type="checkmarkempty" size="20" | ||
| 57 | color="green"></uni-icons> | ||
| 58 | </view> | ||
| 59 | </view> | ||
| 60 | </uni-popup> | ||
| 37 | </view> | 61 | </view> |
| 38 | </template> | 62 | </template> |
| 39 | 63 | ||
| ... | @@ -41,35 +65,133 @@ | ... | @@ -41,35 +65,133 @@ |
| 41 | import { | 65 | import { |
| 42 | ref | 66 | ref |
| 43 | } from 'vue' | 67 | } from 'vue' |
| 44 | const query = ref({}) | 68 | import { |
| 45 | const choseList = ref([{ | 69 | onShow, |
| 46 | name: '张三', | 70 | onLoad |
| 47 | year: '1' | 71 | } from '@dcloudio/uni-app' |
| 48 | }, { | 72 | import * as api from '@/common/api.js' |
| 49 | name: '李三', | 73 | import config from '@/config.js' |
| 50 | year: '1' | 74 | const app = getApp() |
| 51 | }]) | 75 | const queryParams = ref({ |
| 76 | rangeId: -1 | ||
| 77 | }) | ||
| 78 | const formData = ref({}) | ||
| 79 | const list = ref({}) | ||
| 80 | const total = ref(0) | ||
| 81 | const nowYear = ref(1) | ||
| 82 | const nowItem = ref({}) | ||
| 83 | const pickView = ref(null) | ||
| 84 | const visible = ref(true) | ||
| 52 | const yearlist = ref([{ | 85 | const yearlist = ref([{ |
| 53 | text: '一年', | 86 | text: '一年', |
| 54 | value: '1' | 87 | value: 1 |
| 88 | }, { | ||
| 89 | text: '二年', | ||
| 90 | value: 2 | ||
| 91 | }, { | ||
| 92 | text: '三年', | ||
| 93 | value: 3 | ||
| 55 | }, { | 94 | }, { |
| 56 | text: '2年', | 95 | text: '四年', |
| 57 | value: '2' | 96 | value: 4 |
| 97 | }, { | ||
| 98 | text: '五年', | ||
| 99 | value: 5 | ||
| 58 | }]) | 100 | }]) |
| 101 | onLoad((option) => { | ||
| 102 | if (option.rangeId) { | ||
| 103 | queryParams.value.rangeId = option.rangeId | ||
| 104 | } | ||
| 105 | }) | ||
| 106 | onShow(() => { | ||
| 107 | if (app.globalData.isLogin) { | ||
| 108 | init() | ||
| 109 | } else { | ||
| 110 | app.firstLoadCallback = () => { | ||
| 111 | init() | ||
| 112 | }; | ||
| 113 | } | ||
| 114 | }) | ||
| 115 | |||
| 116 | function init() { | ||
| 117 | getList() | ||
| 118 | } | ||
| 119 | |||
| 120 | function getList() { | ||
| 121 | api.addSelectPageList(queryParams.value).then(res => { | ||
| 122 | list.value = res.pageData.rows | ||
| 123 | total.value = res.pageData.total | ||
| 124 | formData.value = res | ||
| 125 | }) | ||
| 126 | } | ||
| 59 | 127 | ||
| 60 | function goVipList() { | 128 | function goVipList() { |
| 61 | let path = '/pages/personalVip/vipList'; | 129 | let path = `/pages/personalVip/vipList?rangeId=${queryParams.value.rangeId}` |
| 62 | uni.navigateTo({ | 130 | uni.redirectTo({ |
| 63 | url: path | 131 | url: path |
| 64 | }); | 132 | }); |
| 65 | } | 133 | } |
| 66 | 134 | ||
| 67 | function changeYear() { | 135 | function changeYear(e) { |
| 136 | nowItem.value = e | ||
| 137 | nowYear.value = e.payYear | ||
| 138 | pickView.value.open() | ||
| 139 | |||
| 140 | } | ||
| 141 | |||
| 142 | function bindyear(n) { | ||
| 143 | nowYear.value = n.value | ||
| 144 | pickView.value.close() | ||
| 145 | nowItem.value.payYear = n.value | ||
| 146 | api.editYear(nowItem.value.payId, nowItem.value.payYear).then(res => { | ||
| 147 | for (var nn of list.value) { | ||
| 148 | if (nn.perId == nowItem.value.perId) { | ||
| 149 | nn.payYear = nowItem.value.payYear | ||
| 150 | } | ||
| 151 | } | ||
| 152 | }) | ||
| 153 | } | ||
| 68 | 154 | ||
| 155 | function handleDelete(row) { | ||
| 156 | uni.showModal({ | ||
| 157 | title: '提示', | ||
| 158 | content: `确定删除${row.personName}吗`, | ||
| 159 | success: function(res) { | ||
| 160 | if (res.confirm) { | ||
| 161 | api.delPayment([row.payId]).then(res => { | ||
| 162 | uni.showToast({ | ||
| 163 | title: '删除成功' | ||
| 164 | }) | ||
| 165 | if (list.value.length == 1) { | ||
| 166 | queryParams.value.rangeId = -1 | ||
| 167 | } | ||
| 168 | getList() | ||
| 169 | }) | ||
| 170 | } | ||
| 171 | } | ||
| 172 | }) | ||
| 173 | } | ||
| 174 | function commitFN(){ | ||
| 175 | if (queryParams.value.rangeId == -1) return | ||
| 176 | api.commitRenew(queryParams.value.rangeId).then(res=>{ | ||
| 177 | uni.showToast({ | ||
| 178 | title: '提交成功' | ||
| 179 | }) | ||
| 180 | uni.navigateBack() | ||
| 181 | }) | ||
| 69 | } | 182 | } |
| 70 | </script> | 183 | </script> |
| 71 | 184 | ||
| 72 | <style scoped lang="scss"> | 185 | <style scoped lang="scss"> |
| 186 | .pickViewBox { | ||
| 187 | background-color: #fff; | ||
| 188 | text-align: center; | ||
| 189 | |||
| 190 | view { | ||
| 191 | line-height: 3; | ||
| 192 | } | ||
| 193 | } | ||
| 194 | |||
| 73 | .searchbar { | 195 | .searchbar { |
| 74 | display: flex; | 196 | display: flex; |
| 75 | align-items: center; | 197 | align-items: center; | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view class="hasfixedbottom"> |
| 3 | <view class="searchbar"> | 3 | <view class="searchbar"> |
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" |
| 5 | v-model="query.name" placeholder="搜索姓名或证件号码" @blur="getList()" @clear="getList()"> | 5 | v-model="queryParams.name" placeholder="搜索姓名或证件号码" @blur="getList()" @clear="getList()"> |
| 6 | </uni-easyinput> | 6 | </uni-easyinput> |
| 7 | </view> | 7 | </view> |
| 8 | <view class="indexboxre"> | 8 | <view class="indexboxre"> |
| ... | @@ -20,20 +20,20 @@ | ... | @@ -20,20 +20,20 @@ |
| 20 | </view> | 20 | </view> |
| 21 | <view @click="handleInfo(n)"> | 21 | <view @click="handleInfo(n)"> |
| 22 | <view class="name">{{n.name}}</view> | 22 | <view class="name">{{n.name}}</view> |
| 23 | <view class="date" v-if="n.validityDate">到期时间:{{n.validityDate}}</view> | 23 | <view class="date" v-if="n.validityDate">到期时间:{{n.validityDate?.slice(0,10)}}</view> |
| 24 | <view class="date" v-else>注册时间:{{n.createTime}}</view> | 24 | <view class="date" v-else>注册时间:{{n.createTime?.slice(0,10)}}</view> |
| 25 | </view> | 25 | </view> |
| 26 | <view class="status"> | 26 | <view class="status"> |
| 27 | <text v-if="n.certStage==0" class="text-green"> | 27 | <text v-if="n.certStage==0" class="text-warning"> |
| 28 | 新会员 | 28 | 新会员 |
| 29 | </text> | 29 | </text> |
| 30 | <text v-if="n.certStage==1" class="text-warning"> | 30 | <text v-if="n.certStage==1" class="text-warning"> |
| 31 | 待提交 | 31 | 待提交 |
| 32 | </text> | 32 | </text> |
| 33 | <text v-if="n.certStage==2" class="text-red"> | 33 | <text v-if="n.certStage==2" class="text-danger"> |
| 34 | 缴费中 | 34 | 缴费中 |
| 35 | </text> | 35 | </text> |
| 36 | <text v-if="n.certStage==3"> | 36 | <text v-if="n.certStage==3" class="text-success"> |
| 37 | 正常 | 37 | 正常 |
| 38 | </text> | 38 | </text> |
| 39 | <text v-if="n.certStage==4" class="text-gray"> | 39 | <text v-if="n.certStage==4" class="text-gray"> |
| ... | @@ -47,14 +47,15 @@ | ... | @@ -47,14 +47,15 @@ |
| 47 | 47 | ||
| 48 | <view class="fixedBottom"> | 48 | <view class="fixedBottom"> |
| 49 | 49 | ||
| 50 | <button class="btn-red" @click="goAddRenew">添 加</button> | 50 | <button class="btn-red" @click="handleImport">导 入</button> |
| 51 | </view> | 51 | </view> |
| 52 | 52 | ||
| 53 | </view> | 53 | </view> |
| 54 | </template> | 54 | </template> |
| 55 | 55 | ||
| 56 | <script setup> | 56 | <script setup> |
| 57 | import * as api from '@/common/api.js' | 57 | import * as api from '@/common/api.js' |
| 58 | import config from '@/config.js' | ||
| 58 | import { | 59 | import { |
| 59 | ref, | 60 | ref, |
| 60 | getCurrentInstance | 61 | getCurrentInstance |
| ... | @@ -66,35 +67,22 @@ | ... | @@ -66,35 +67,22 @@ |
| 66 | proxy | 67 | proxy |
| 67 | } = getCurrentInstance() | 68 | } = getCurrentInstance() |
| 68 | const app = getApp(); | 69 | const app = getApp(); |
| 69 | const query = ref({ | 70 | const queryParams = ref({ |
| 70 | pageNum: 1, | 71 | showMyPersonFlag: 1, |
| 71 | pageSize: 20, | 72 | checkPaymentCommit: 1, |
| 72 | showMyPersonFlag: null, | 73 | queryParams: 1 |
| 73 | multiDeptFlag: 1, | ||
| 74 | perType: 1, | ||
| 75 | checkPaymentCommit: 1 | ||
| 76 | }) | 74 | }) |
| 77 | const list = ref([]) | 75 | const list = ref([]) |
| 78 | const total = ref(0) | 76 | const total = ref(0) |
| 79 | const userType = ref('') | 77 | const userType = ref('') |
| 80 | onLoad(() => { | 78 | onLoad((option) => { |
| 81 | userType.value = app.globalData.userType | 79 | userType.value = app.globalData.userType |
| 80 | queryParams.value.paymentRangeId = option.rangeId | ||
| 82 | getList() | 81 | getList() |
| 83 | }) | 82 | }) |
| 84 | 83 | ||
| 85 | function getList() { | 84 | function getList() { |
| 86 | if (userType.value == '4') { | 85 | api.selectPageList(queryParams.value).then(res => { |
| 87 | // 道馆 | ||
| 88 | query.value.multiDeptFlag = null | ||
| 89 | query.value.showMyPersonFlag = 1 | ||
| 90 | } | ||
| 91 | api.selectPageList(query.value).then(res => { | ||
| 92 | for (var p of res.rows) { | ||
| 93 | if (p.photo) { | ||
| 94 | p.photo = config.fileUrl_api + p.photo | ||
| 95 | console.log(p.photo) | ||
| 96 | } | ||
| 97 | } | ||
| 98 | list.value = res.rows | 86 | list.value = res.rows |
| 99 | total.value = res.total | 87 | total.value = res.total |
| 100 | }) | 88 | }) |
| ... | @@ -115,16 +103,27 @@ | ... | @@ -115,16 +103,27 @@ |
| 115 | }else{ | 103 | }else{ |
| 116 | n.checked = true | 104 | n.checked = true |
| 117 | } | 105 | } |
| 118 | } | 106 | } |
| 119 | function checkboxChange(e) { | 107 | function handleImport(){ |
| 120 | let values = e.detail.value; | 108 | var arr=[] |
| 121 | for (var n of list.value) { | 109 | for(var n of list.value){ |
| 122 | if (values.includes(n)) { | 110 | if(n.checked){ |
| 123 | proxy.$set(n, 'checked', true) | 111 | arr.push(n.perId) |
| 124 | } else { | 112 | } |
| 125 | proxy.$set(n, 'checked', false) | 113 | } |
| 126 | } | 114 | if(arr.length==0){ |
| 127 | } | 115 | uni.showToast({ |
| 116 | title:"请选择会员", | ||
| 117 | icon:"none" | ||
| 118 | }) | ||
| 119 | return | ||
| 120 | } | ||
| 121 | api.addPersonPaymentGroup({ rangeId: queryParams.value.paymentRangeId, personIdArray: arr.join(',') }).then(res=>{ | ||
| 122 | let path = `/pages/personalVip/renew?rangeId=${res.data.rangeId}` | ||
| 123 | uni.redirectTo({ | ||
| 124 | url: path | ||
| 125 | }); | ||
| 126 | }) | ||
| 128 | } | 127 | } |
| 129 | </script> | 128 | </script> |
| 130 | 129 | ||
| ... | @@ -141,7 +140,7 @@ | ... | @@ -141,7 +140,7 @@ |
| 141 | } | 140 | } |
| 142 | 141 | ||
| 143 | position: relative; | 142 | position: relative; |
| 144 | height: calc(100vh - 300rpx); | 143 | height: calc(100vh - 280rpx);overflow: auto; |
| 145 | } | 144 | } |
| 146 | 145 | ||
| 147 | .searchbar { | 146 | .searchbar { | ... | ... |
-
Please register or sign in to post a comment