no message
Showing
58 changed files
with
4194 additions
and
456 deletions
.hbuilderx/launch.json
0 → 100644
| 1 | { // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ | ||
| 2 | // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 | ||
| 3 | "version": "0.0", | ||
| 4 | "configurations": [{ | ||
| 5 | "default" : | ||
| 6 | { | ||
| 7 | "launchtype" : "local" | ||
| 8 | }, | ||
| 9 | "mp-weixin" : | ||
| 10 | { | ||
| 11 | "launchtype" : "local" | ||
| 12 | }, | ||
| 13 | "type" : "uniCloud" | ||
| 14 | } | ||
| 15 | ] | ||
| 16 | } |
This diff is collapsed.
Click to expand it.
| 1 | import request from './request' | 1 | import request from './request' |
| 2 | import * as api from '@/common/api.js' | 2 | import * as api from '@/common/api.js' |
| 3 | 3 | ||
| 4 | let appId = '' | ||
| 5 | // #ifdef MP | ||
| 6 | const accountInfo = uni.getAccountInfoSync() | ||
| 7 | appId = accountInfo.miniProgram.appId | ||
| 8 | // #endif | ||
| 9 | |||
| 10 | function wxLogin() { | ||
| 11 | return new Promise((resolve, reject) => { | ||
| 12 | uni.login({ | ||
| 13 | provider: 'weixin', | ||
| 14 | success: (res) => { | ||
| 15 | // console.log(res.code); | ||
| 16 | resolve(res) | ||
| 17 | }, | ||
| 18 | fail: (res) => { | ||
| 19 | reject(res) | ||
| 20 | } | ||
| 21 | }) | ||
| 22 | }) | ||
| 23 | } | ||
| 24 | |||
| 25 | function pcLogin(data) { | 4 | function pcLogin(data) { |
| 26 | return request({ | 5 | return request({ |
| 27 | url: '/login', | 6 | url: '/login', |
| 28 | method: 'post', | 7 | method: 'post', |
| 29 | params: data | 8 | params: data |
| 30 | }).then((res) => { | 9 | }).then((res) => { |
| 31 | uni.setStorageSync('token', 'Bearer ' + res.data.token) | 10 | uni.setStorageSync('token', 'Bearer ' + res.data.token) |
| 32 | }).then(getInfo) | 11 | }).then(getInfo) |
| 33 | } | 12 | } |
| 34 | 13 | ||
| 35 | function h5Login(userName) { | 14 | function h5Login(userName) { |
| 36 | return request({ | 15 | return request({ |
| 37 | url: `/h5Login`, | 16 | url: `/h5Login`, |
| 38 | method: 'post', | 17 | method: 'post', |
| 39 | params: { | 18 | params: { |
| 40 | username: userName | 19 | username: userName |
| 41 | } | 20 | } |
| 42 | }).then((res) => { | 21 | }).then((res) => { |
| 43 | uni.setStorageSync('token', 'Bearer ' + res.data.token) | 22 | uni.setStorageSync('token', 'Bearer ' + res.data.token) |
| 44 | }).then(getInfo) | 23 | }).then(getInfo) |
| 45 | } | 24 | } |
| 46 | 25 | ||
| 47 | function h5LoginAuto() { | 26 | function h5LoginAuto() { |
| 48 | const userName = uni.getStorageSync('userName') | 27 | const userName = uni.getStorageSync('userName') |
| 49 | if (userName) { | 28 | if (userName) { |
| 50 | return h5Login(userName) | 29 | return h5Login(userName) |
| 51 | } else { | 30 | } else { |
| 52 | uni.redirectTo({ | 31 | uni.redirectTo({ |
| 53 | url: '/pages/index/login' | 32 | url: '/pages/index/login' |
| 54 | }) | 33 | }) |
| 55 | } | 34 | } |
| 56 | } | 35 | } |
| 57 | 36 | ||
| 58 | function getCurrUser(isAuto) { | ||
| 59 | return request({ | ||
| 60 | url: '/system/wx/getUserInfo', | ||
| 61 | method: 'GET', | ||
| 62 | opts: { | ||
| 63 | isAuto: isAuto | ||
| 64 | } | ||
| 65 | }).then((res) => { | ||
| 66 | const user = res.data | ||
| 67 | uni.setStorageSync('currUser', user) | ||
| 68 | return user | ||
| 69 | }) | ||
| 70 | } | ||
| 71 | |||
| 72 | function getWxUser() { | ||
| 73 | return new Promise((resolve, reject) => { | ||
| 74 | const currUser = uni.getStorageSync('currUser') | ||
| 75 | // getNowOpenId() | ||
| 76 | const nowOpenId = uni.getStorageSync('nowOpenId') | ||
| 77 | uni.getUserProfile({ | ||
| 78 | desc: '用于完善用户信息', | ||
| 79 | success: function(infoRes) { | ||
| 80 | console.log(infoRes) | ||
| 81 | 37 | ||
| 82 | request({ | ||
| 83 | url: `/system/wx/updateWxUser?openId=${nowOpenId}`, | ||
| 84 | method: 'POST', | ||
| 85 | params: { | ||
| 86 | appId: appId, | ||
| 87 | openId: nowOpenId, | ||
| 88 | userId: currUser.id, | ||
| 89 | encryptedData: infoRes.encryptedData, | ||
| 90 | errMsg: infoRes.errMsg, | ||
| 91 | iv: infoRes.iv, | ||
| 92 | rawData: infoRes.rawData, | ||
| 93 | signature: infoRes.signature | ||
| 94 | } | ||
| 95 | }).then((res) => { | ||
| 96 | const user = res.data | ||
| 97 | uni.setStorageSync('currUser', user) | ||
| 98 | resolve(user) | ||
| 99 | }).catch(() => { | ||
| 100 | reject() | ||
| 101 | }) | ||
| 102 | }, | ||
| 103 | fail: (res) => { | ||
| 104 | reject(res) | ||
| 105 | } | ||
| 106 | }) | ||
| 107 | }) | ||
| 108 | } | ||
| 109 | 38 | ||
| 110 | function getWxUserPhone(phoneRes) { | ||
| 111 | // console.log(phoneRes) | ||
| 112 | 39 | ||
| 113 | const currUser = uni.getStorageSync('currUser') | ||
| 114 | // getNowOpenId() | ||
| 115 | const nowOpenId = uni.getStorageSync('nowOpenId') | ||
| 116 | return request({ | ||
| 117 | url: `/system/wx/updateMobile?openId=${nowOpenId}`, | ||
| 118 | method: 'POST', | ||
| 119 | params: { | ||
| 120 | appId: appId, | ||
| 121 | userId: currUser.id, | ||
| 122 | encryptedData: phoneRes.encryptedData, | ||
| 123 | errMsg: phoneRes.errMsg, | ||
| 124 | iv: phoneRes.iv, | ||
| 125 | rawData: phoneRes.rawData, | ||
| 126 | signature: phoneRes.signature | ||
| 127 | } | ||
| 128 | }).then((res) => { | ||
| 129 | const user = res.data | ||
| 130 | // uni.setStorageSync('token', 'Bearer '+ user.token); | ||
| 131 | uni.setStorageSync('token', user.token) | ||
| 132 | uni.setStorageSync('currUser', user) | ||
| 133 | return user | ||
| 134 | }) | ||
| 135 | } | ||
| 136 | |||
| 137 | function checkUserAuth(path) { | ||
| 138 | const currUser = uni.getStorageSync('currUser') | ||
| 139 | if (currUser.phonenumber) { | ||
| 140 | // if (currUser.nickName) { | ||
| 141 | return true | ||
| 142 | } else { | ||
| 143 | uni.navigateTo({ | ||
| 144 | url: '/pages/index/start?path=' + encodeURIComponent(path) | ||
| 145 | }) | ||
| 146 | return false | ||
| 147 | } | ||
| 148 | } | ||
| 149 | |||
| 150 | function getNowOpenId() { | ||
| 151 | console.log('getNowOpenId') | ||
| 152 | return request({ | ||
| 153 | url: `/system/user/getMyOpenId/${appId}`, | ||
| 154 | method: 'get' | ||
| 155 | }).then((res) => { | ||
| 156 | uni.setStorageSync('nowOpenId', res.msg) | ||
| 157 | }) | ||
| 158 | } | ||
| 159 | |||
| 160 | function initData() { | ||
| 161 | console.log('initData') | ||
| 162 | |||
| 163 | // const currUser = uni.getStorageSync('currUser') | ||
| 164 | // console.log(currUser) | ||
| 165 | return Promise.all([api.getVenue(), api.getOwnMemberInfo()]).then(res => { | ||
| 166 | const ven = res[0].data | ||
| 167 | const men = res[1]?.data | ||
| 168 | |||
| 169 | const app = getApp() | ||
| 170 | |||
| 171 | if (ven.venuePic) { | ||
| 172 | ven.venuePicArr = ven.venuePic.split(',') | ||
| 173 | } | ||
| 174 | if (ven.businessPeriod) { | ||
| 175 | ven.startBus = ven.businessPeriod.split(',')[0] | ||
| 176 | ven.endBus = ven.businessPeriod.split(',')[1] | ||
| 177 | } | ||
| 178 | ven.latitude = ven.lal.split(',')[0] | ||
| 179 | ven.longitude = ven.lal.split(',')[1] | ||
| 180 | |||
| 181 | app.globalData.venue = ven | ||
| 182 | app.globalData.isVip = men?.isVip | ||
| 183 | // app.globalData.relateProjectId = men.info.relateProjectId; | ||
| 184 | app.globalData.relateProjectIdList = men?.info?.relateProjectIdList | ||
| 185 | app.globalData.relateVenueProjectIdList = men?.info?.relateVenueProjectIdList | ||
| 186 | |||
| 187 | app.globalData.venueConfig = { | ||
| 188 | normalOverDay: ven.resSiteConfig?.normalOrderNum, | ||
| 189 | normalPeriodStart: ven.resSiteConfig?.normalOrderPeriod.split(',')[0], | ||
| 190 | normalPeriodEnd: ven.resSiteConfig?.normalOrderPeriod.split(',')[1] | ||
| 191 | } | ||
| 192 | if (men?.isVip) { | ||
| 193 | app.globalData.venueConfig.memberOverDay = ven.resSiteConfig?.memberOrderNum | ||
| 194 | app.globalData.venueConfig.memberPeriodStart = ven.resSiteConfig?.memberOrderPeriod.split(',')[0] | ||
| 195 | app.globalData.venueConfig.memberPeriodEnd = ven.resSiteConfig?.memberOrderPeriod.split(',')[1] | ||
| 196 | } | ||
| 197 | }) | ||
| 198 | } | ||
| 199 | 40 | ||
| 200 | function getCodeImg() { | 41 | function getCodeImg() { |
| 201 | return request({ | 42 | return request({ |
| 202 | url: '/captchaImage', | 43 | url: '/captchaImage', |
| 203 | method: 'get' | 44 | method: 'get' |
| 204 | }) | 45 | }) |
| 205 | } | 46 | } |
| 206 | 47 | ||
| 207 | // 代退图形认证的获取手机验证码 | 48 | // 代退图形认证的获取手机验证码 |
| 208 | function getSmsCode(data) { | 49 | function getSmsCode(data) { |
| 209 | return request({ | 50 | return request({ |
| 210 | url: '/captchaSmsWithCaptchaImage', | 51 | url: '/captchaSmsWithCaptchaImage', |
| 211 | method: 'post', | 52 | method: 'post', |
| 212 | params: data | 53 | params: data |
| 213 | }) | 54 | }) |
| 214 | } | 55 | } |
| 215 | 56 | ||
| 216 | function loginByPhone(phonenumber, code) { | 57 | function loginByPhone(phonenumber, code) { |
| 217 | const data = { | 58 | const data = { |
| 218 | phonenumber, | 59 | phonenumber, |
| 219 | code | 60 | code |
| 220 | } | 61 | } |
| 221 | return request({ | 62 | return request({ |
| 222 | url: '/userLoginByPhone', | 63 | url: '/userLoginByPhone', |
| 223 | method: 'post', | 64 | method: 'post', |
| 224 | params: data | 65 | params: data |
| 225 | }).then((res) => { | 66 | }).then((res) => { |
| 226 | uni.setStorageSync('token', 'Bearer ' + res.data.token) | 67 | uni.setStorageSync('token', 'Bearer ' + res.data.token) |
| 227 | }).then(getInfo) | 68 | }).then(getInfo) |
| 228 | } | 69 | } |
| 229 | 70 | ||
| 230 | // 获取用户详细信息 | 71 | // 获取用户详细信息 |
| 231 | function getInfo() { | 72 | function getInfo() { |
| 232 | return request({ | 73 | return request({ |
| 233 | url: '/getInfo', | 74 | url: '/getInfo', |
| 234 | method: 'get' | 75 | method: 'get' |
| 235 | }).then(res => { | 76 | }).then(res => { |
| 236 | const app = getApp() | 77 | const app = getApp() |
| 237 | const user = res.data.user | 78 | const user = res.data.user |
| 238 | uni.setStorageSync('userName', user.userName) | 79 | uni.setStorageSync('userName', user.userName) |
| 239 | 80 | app.globalData.deptType = user.dept.deptType | |
| 240 | switch (user.dept.deptType) { | 81 | switch (user.dept.deptType) { |
| 241 | case '1': // 中跆协 | 82 | case '1': // 中跆协 |
| 242 | app.globalData.userType = '1' | 83 | app.globalData.userType = '1' |
| 243 | break | 84 | break |
| 244 | case '2': // 省 | 85 | case '2': // 省 |
| 245 | case '3': | 86 | case '3': |
| 246 | app.globalData.userType = '2' | 87 | app.globalData.userType = '2' |
| 247 | break | 88 | break |
| 248 | case '6': // 道馆 | 89 | case '6': // 道馆 |
| 249 | app.globalData.userType = '4' | 90 | app.globalData.userType = '4' |
| 250 | break | 91 | break |
| 251 | default: // 市、区 | 92 | default: // 市、区 |
| 252 | app.globalData.userType = '3' | 93 | app.globalData.userType = '3' |
| 253 | break | 94 | break |
| 254 | } | 95 | } |
| 96 | |||
| 97 | app.globalData.userInfo = user | ||
| 98 | }) | ||
| 99 | } | ||
| 255 | 100 | ||
| 256 | app.globalData.userInfo = user | 101 | // 团队会员用户注册接口 |
| 257 | }) | 102 | function groupMemberRegister(data) { |
| 103 | return request({ | ||
| 104 | url: '/groupMemberRegister', | ||
| 105 | method: 'post', | ||
| 106 | params: data | ||
| 107 | }) | ||
| 258 | } | 108 | } |
| 259 | 109 | // 获取道馆信息 | |
| 260 | // 团队会员用户注册接口 | 110 | function getMyOwnMemberInfo() { |
| 261 | function groupMemberRegister(data) { | 111 | return request({ |
| 262 | return request({ | 112 | url: '/member/info/getMyOwnMemberInfo', |
| 263 | url: '/groupMemberRegister', | 113 | method: 'get' |
| 264 | method: 'post', | 114 | }).then(res => { |
| 265 | params: data | 115 | const app = getApp() |
| 266 | }) | 116 | app.globalData.authenticationStatus = res.data.authenticationStatus |
| 117 | app.globalData.memberInfo = res.data.memberInfo | ||
| 118 | app.globalData.isExam = res.data?.dept?.isExam | ||
| 119 | }) | ||
| 267 | } | 120 | } |
| 268 | |||
| 269 | export { | 121 | export { |
| 270 | getNowOpenId, | 122 | pcLogin, |
| 271 | wxLogin, | 123 | getCodeImg, |
| 272 | pcLogin, | 124 | getSmsCode, |
| 273 | getCurrUser, | 125 | h5Login, |
| 274 | getWxUser, | 126 | h5LoginAuto, |
| 275 | getWxUserPhone, | 127 | loginByPhone, |
| 276 | checkUserAuth, | 128 | groupMemberRegister, |
| 277 | initData, | 129 | getMyOwnMemberInfo |
| 278 | getCodeImg, | 130 | } |
| 279 | getSmsCode, | ||
| 280 | h5Login, | ||
| 281 | h5LoginAuto, | ||
| 282 | loginByPhone, | ||
| 283 | groupMemberRegister | ||
| 284 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -3,10 +3,12 @@ page { | ... | @@ -3,10 +3,12 @@ page { |
| 3 | overflow: auto; | 3 | overflow: auto; |
| 4 | background: #f5f7f9; | 4 | background: #f5f7f9; |
| 5 | } | 5 | } |
| 6 | .esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;} | ||
| 6 | .flexbox{display: flex;} | 7 | .flexbox{display: flex;} |
| 7 | .mt40{margin-top: 40rpx;} | 8 | .mt40{margin-top: 40rpx;} |
| 8 | .mt50{margin-top: 50rpx;} | 9 | .mt50{margin-top: 50rpx;} |
| 9 | 10 | .align-forms-item-placeHolder{color: #999;line-height: 2.6;} | |
| 11 | .align-forms-item{line-height: 2.6;} | ||
| 10 | .more{color: #929AA0;font-size: 24rpx;} | 12 | .more{color: #929AA0;font-size: 24rpx;} |
| 11 | .msglist{ | 13 | .msglist{ |
| 12 | .msgitem{background: #FFFFFF;border-radius: 10rpx;margin-bottom: 25rpx;padding: 30rpx 20rpx 30rpx 50rpx; | 14 | .msgitem{background: #FFFFFF;border-radius: 10rpx;margin-bottom: 25rpx;padding: 30rpx 20rpx 30rpx 50rpx; |
| ... | @@ -26,6 +28,15 @@ font-size: 24rpx;} | ... | @@ -26,6 +28,15 @@ font-size: 24rpx;} |
| 26 | } | 28 | } |
| 27 | } | 29 | } |
| 28 | 30 | ||
| 31 | .vipData{ | ||
| 32 | font-size: 24rpx;padding: 10px 20px; | ||
| 33 | display: flex;background: #F7E7E8; | ||
| 34 | view{margin-right: 20rpx; | ||
| 35 | text{ | ||
| 36 | font-weight: bold; | ||
| 37 | color: #AD1920;} | ||
| 38 | } | ||
| 39 | } | ||
| 29 | 40 | ||
| 30 | 41 | ||
| 31 | .nodata{padding:10vh 0; box-sizing: border-box; text-align: center;} | 42 | .nodata{padding:10vh 0; box-sizing: border-box; text-align: center;} |
| ... | @@ -42,13 +53,16 @@ font-size: 24rpx;} | ... | @@ -42,13 +53,16 @@ font-size: 24rpx;} |
| 42 | .tar { text-align: right;} | 53 | .tar { text-align: right;} |
| 43 | .whitebg {background: #fff; | 54 | .whitebg {background: #fff; |
| 44 | } | 55 | } |
| 45 | 56 | .btn-red-kx{background-color: #fff; | |
| 57 | border: 1px solid #AD181F; | ||
| 58 | color: #AD181F;} | ||
| 46 | /* 底部固定按钮 */ | 59 | /* 底部固定按钮 */ |
| 47 | .fixedBottom {background: #fff;height: 150rpx; | 60 | .fixedBottom {background: #fff;height: 150rpx; |
| 48 | box-shadow: 0px -2rpx 10rpx 0px #e8e8e8; padding: 30rpx 0 0; | 61 | box-shadow: 0px -2rpx 10rpx 0px #e8e8e8; padding: 30rpx 0 0; |
| 49 | position: fixed; display: flex;justify-content: center; | 62 | position: fixed; display: flex;justify-content: center; |
| 50 | width: 100%; bottom: 0;left: 0;z-index: 3; | 63 | width: 100%; bottom: 0;left: 0;z-index: 3; |
| 51 | .btn-red{line-height: 70rpx;height: 70rpx;border-radius: 35rpx;width: 500rpx;font-size: 32rpx;} | 64 | .btn-red{line-height: 70rpx;height: 70rpx;border-radius: 35rpx;width: 500rpx;font-size: 32rpx;} |
| 65 | .btn-red-kx{line-height: 70rpx;height: 70rpx;border-radius: 35rpx;font-size: 32rpx;} | ||
| 52 | } | 66 | } |
| 53 | .nolineform{margin: 24rpx;background-color: #fff;padding: 30rpx;border-radius: 15rpx; | 67 | .nolineform{margin: 24rpx;background-color: #fff;padding: 30rpx;border-radius: 15rpx; |
| 54 | .uni-data-checklist .checklist-group .checklist-box .checklist-content .checklist-text{ | 68 | .uni-data-checklist .checklist-group .checklist-box .checklist-content .checklist-text{ |
| ... | @@ -61,7 +75,7 @@ font-size: 30rpx!important;} | ... | @@ -61,7 +75,7 @@ font-size: 30rpx!important;} |
| 61 | .uni-input-input{text-align: right;direction: rtl;font-size: 30rpx!important;} | 75 | .uni-input-input{text-align: right;direction: rtl;font-size: 30rpx!important;} |
| 62 | .uni-forms-item__inner{} | 76 | .uni-forms-item__inner{} |
| 63 | .uni-select{border: transparent!important;border-bottom: transparent!important;text-align: right;font-size: 30rpx!important;} | 77 | .uni-select{border: transparent!important;border-bottom: transparent!important;text-align: right;font-size: 30rpx!important;} |
| 64 | .uni-data-checklist .checklist-group{justify-content: end;} | 78 | .uni-data-checklist .checklist-group{justify-content: flex-end;} |
| 65 | .uni-data-checklist .checklist-group .checklist-box{margin-right: 0!important;margin-left: 25px!important;} | 79 | .uni-data-checklist .checklist-group .checklist-box{margin-right: 0!important;margin-left: 25px!important;} |
| 66 | .uni-data-checklist .checklist-group .checklist-box.is--default.is-checked .radio__inner .radio__inner-icon{ | 80 | .uni-data-checklist .checklist-group .checklist-box.is--default.is-checked .radio__inner .radio__inner-icon{ |
| 67 | background-color: #C40F18!important; | 81 | background-color: #C40F18!important; |
| ... | @@ -83,4 +97,231 @@ font-size: 30rpx!important;} | ... | @@ -83,4 +97,231 @@ font-size: 30rpx!important;} |
| 83 | .hasfixedbottom{padding-bottom:170rpx;} | 97 | .hasfixedbottom{padding-bottom:170rpx;} |
| 84 | .btn-red{background: #AD181F;color: #fff;} | 98 | .btn-red{background: #AD181F;color: #fff;} |
| 85 | .invertedbtn-red{color: #AD181F;border:1px solid #AD181F;} | 99 | .invertedbtn-red{color: #AD181F;border:1px solid #AD181F;} |
| 86 | .text-red{color: #AD181F;} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 100 | .text-red{color: #AD181F;} | ||
| 101 | .pd30{padding: 30rpx;} | ||
| 102 | |||
| 103 | .appList{width: 700rpx;margin:30rpx auto; | ||
| 104 | .appItem{background: #FFFFFF;padding: 30rpx;margin-bottom: 30rpx; | ||
| 105 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196,203,214,0.1); | ||
| 106 | border-radius: 15rpx;position: relative; | ||
| 107 | .pp{font-size: 28rpx;color: #666;margin-bottom: 10rpx;} | ||
| 108 | .date{ | ||
| 109 | font-size: 28rpx; | ||
| 110 | color: #7D8592;} | ||
| 111 | .name{margin: 30rpx 0 20rpx;color: #0A1629;font-size: 30rpx;} | ||
| 112 | .flexbox{justify-content: space-between;padding: 0 0 25rpx; | ||
| 113 | font-size: 28rpx;color: #91929E; | ||
| 114 | view{font-size: 26rpx; | ||
| 115 | view{color: #0A1629;font-size: 28rpx;} | ||
| 116 | } | ||
| 117 | } | ||
| 118 | } | ||
| 119 | .func{display: flex;justify-content: flex-end; | ||
| 120 | border-top: 1px dashed #e5e5e5;padding-top: 20rpx; | ||
| 121 | button{border: 1px solid #AD181F; | ||
| 122 | border-radius: 30rpx;height: 60rpx;line-height: 60rpx; | ||
| 123 | font-size: 30rpx;color: #AD181F;background: #fff; | ||
| 124 | margin: 0 0 0 30rpx;padding: 0 60rpx; | ||
| 125 | } | ||
| 126 | text{font-size: 30rpx;padding:30rpx 0 0;} | ||
| 127 | } | ||
| 128 | .status{position: absolute;font-size: 30rpx;right: 30rpx;} | ||
| 129 | } | ||
| 130 | |||
| 131 | .text-primary{color: #1561CB;} | ||
| 132 | .text-success{color: #13B5B1;} | ||
| 133 | .text-danger{color: #d51515;} | ||
| 134 | .text-warning{color: #e6a23c;} | ||
| 135 | .h3-padding{ | ||
| 136 | padding:50rpx 30rpx 0;font-size: 36rpx; | ||
| 137 | font-weight: 500;color: #0A1629; | ||
| 138 | } | ||
| 139 | .mt30{margin-top: 30rpx;} | ||
| 140 | .userlist { | ||
| 141 | .colorful { | ||
| 142 | width: 100rpx; | ||
| 143 | margin-right: 14rpx; | ||
| 144 | height: 100rpx; | ||
| 145 | line-height: 100rpx; | ||
| 146 | font-size: 44rpx; | ||
| 147 | color: #fff; | ||
| 148 | text-align: center; | ||
| 149 | border-radius: 50%; | ||
| 150 | } | ||
| 151 | .w100{width: 100%;} | ||
| 152 | .item { | ||
| 153 | display: flex;width: 100%; | ||
| 154 | background: #FFFFFF; | ||
| 155 | align-items: center; | ||
| 156 | border-radius: 15rpx; | ||
| 157 | margin: 0 0 26rpx; | ||
| 158 | padding:20rpx;position: relative; | ||
| 159 | .date{color: #999;font-size: 24rpx;} | ||
| 160 | .status{font-size: 28rpx;position: absolute;right: 30rpx;} | ||
| 161 | .name{font-size: 30rpx;margin-bottom: 10rpx; | ||
| 162 | text{font-size: 28rpx;color: #666;} | ||
| 163 | } | ||
| 164 | .icon { | ||
| 165 | width: 50rpx; | ||
| 166 | height: 50rpx; | ||
| 167 | margin-right: 20rpx; | ||
| 168 | } | ||
| 169 | |||
| 170 | &:nth-child(5n) .colorful { | ||
| 171 | background: #014A9F; | ||
| 172 | } | ||
| 173 | |||
| 174 | &:nth-child(5n+1) .colorful { | ||
| 175 | background: #AD181F; | ||
| 176 | } | ||
| 177 | |||
| 178 | &:nth-child(5n+2) .colorful { | ||
| 179 | background: #D3B267; | ||
| 180 | } | ||
| 181 | |||
| 182 | &:nth-child(5n+3) .colorful { | ||
| 183 | background: #3195F5; | ||
| 184 | } | ||
| 185 | |||
| 186 | &:nth-child(5n+4) .colorful { | ||
| 187 | background: #E79222; | ||
| 188 | } | ||
| 189 | } | ||
| 190 | .photobox{} | ||
| 191 | .photo{width: 100rpx;margin-right: 14rpx; | ||
| 192 | height: 100rpx;border-radius: 50%;} | ||
| 193 | .colorful { | ||
| 194 | width: 100rpx; | ||
| 195 | margin-right: 14rpx; | ||
| 196 | height: 100rpx; | ||
| 197 | line-height: 100rpx; | ||
| 198 | font-size: 44rpx; | ||
| 199 | color: #fff; | ||
| 200 | text-align: center; | ||
| 201 | border-radius: 50%; | ||
| 202 | } | ||
| 203 | .flexbox{justify-content: space-between; | ||
| 204 | font-size: 28rpx;color: #91929E; | ||
| 205 | view{font-size: 26rpx; | ||
| 206 | text{color: #0A1629;font-size: 28rpx;display: block;} | ||
| 207 | .text-primary{color: #1561CB;} | ||
| 208 | .text-success{color: #13B5B1;} | ||
| 209 | .text-danger{color: #d51515;} | ||
| 210 | .text-warning{color: #e6a23c;} | ||
| 211 | } | ||
| 212 | } | ||
| 213 | |||
| 214 | } | ||
| 215 | .stepItem{position: relative; | ||
| 216 | padding: 0 0 30rpx 30rpx; | ||
| 217 | border-left: 1px dashed #e5e5e5; | ||
| 218 | .time{font-size: 24rpx;color: #929AA0; | ||
| 219 | margin-bottom: 20rpx; | ||
| 220 | &::before{content: ''; | ||
| 221 | width: 15rpx;position: absolute;left: -9rpx;top: 12rpx; | ||
| 222 | height: 15rpx; | ||
| 223 | background: #DCDCDC; | ||
| 224 | border-radius: 50%;} | ||
| 225 | } | ||
| 226 | .content{background: #F4F9FD;position: relative;overflow: hidden; | ||
| 227 | font-size: 28rpx;border-radius: 15rpx;padding: 16rpx 36rpx; | ||
| 228 | .status{position: absolute;right: 0;top: 0;font-size: 28rpx; | ||
| 229 | text{color: #fff;padding: 0rpx 16rpx;border-radius: 0 0 0 10rpx;} | ||
| 230 | .text-primary{background: #1561CB;} | ||
| 231 | .text-success{background: #13B5B1;} | ||
| 232 | .text-danger{background: #d51515;} | ||
| 233 | .text-warning{background: #e6a23c;} | ||
| 234 | } | ||
| 235 | .name{color: #4C5359;} | ||
| 236 | .deptName{color: #4C5359;margin: 10rpx 0; | ||
| 237 | color: #030303; | ||
| 238 | font-size: 30rpx;} | ||
| 239 | } | ||
| 240 | } | ||
| 241 | |||
| 242 | .personitem { | ||
| 243 | background: #fff; | ||
| 244 | box-sizing: border-box; | ||
| 245 | margin-bottom: 30rpx; | ||
| 246 | |||
| 247 | .content-box { | ||
| 248 | display: flex; | ||
| 249 | align-items: center; | ||
| 250 | padding: 16rpx 30rpx; | ||
| 251 | border-radius: 15rpx; | ||
| 252 | justify-content: space-between; | ||
| 253 | |||
| 254 | .photobox { | ||
| 255 | position: relative; | ||
| 256 | } | ||
| 257 | |||
| 258 | .photo { | ||
| 259 | width: 100rpx; | ||
| 260 | object-fit: cover; | ||
| 261 | margin-right: 14rpx; | ||
| 262 | height: 100rpx; | ||
| 263 | border-radius: 50%; | ||
| 264 | } | ||
| 265 | |||
| 266 | .noborder { | ||
| 267 | border: none; | ||
| 268 | |||
| 269 | :deep(.uni-select) { | ||
| 270 | border: none; | ||
| 271 | text-align: right; | ||
| 272 | } | ||
| 273 | } | ||
| 274 | } | ||
| 275 | |||
| 276 | .flexbox { | ||
| 277 | align-items: center; | ||
| 278 | } | ||
| 279 | .date{font-size: 28rpx;color: #666;margin-top: 10rpx;} | ||
| 280 | &:nth-child(3n) .colorful { | ||
| 281 | background: #AD181F; | ||
| 282 | } | ||
| 283 | |||
| 284 | &:nth-child(3n+1) .colorful { | ||
| 285 | background: #014A9F; | ||
| 286 | } | ||
| 287 | |||
| 288 | &:nth-child(3n+2) .colorful { | ||
| 289 | background: #D3B267; | ||
| 290 | } | ||
| 291 | } | ||
| 292 | |||
| 293 | .colorful { | ||
| 294 | width: 100rpx; | ||
| 295 | margin-right: 14rpx; | ||
| 296 | height: 100rpx; | ||
| 297 | line-height: 100rpx; | ||
| 298 | font-size: 44rpx; | ||
| 299 | color: #fff; | ||
| 300 | text-align: center; | ||
| 301 | border-radius: 50%; | ||
| 302 | } | ||
| 303 | |||
| 304 | .slot-button { | ||
| 305 | display: flex; | ||
| 306 | align-items: center; | ||
| 307 | text-align: center; | ||
| 308 | |||
| 309 | .danger-button { | ||
| 310 | background-color: #E60012; | ||
| 311 | padding: 15px 20px; | ||
| 312 | height: 100%; | ||
| 313 | } | ||
| 314 | |||
| 315 | .edit-button { | ||
| 316 | background-color: #13B5B1; | ||
| 317 | padding: 15px 20px; | ||
| 318 | height: 100%; | ||
| 319 | } | ||
| 320 | |||
| 321 | } | ||
| 322 | |||
| 323 | .slot-button-text { | ||
| 324 | color: #ffffff; | ||
| 325 | display: block; | ||
| 326 | font-size: 14px; | ||
| 327 | } | ... | ... |
| ... | @@ -56,9 +56,11 @@ const request = function(req) { | ... | @@ -56,9 +56,11 @@ const request = function(req) { |
| 56 | switch (res.statusCode) { | 56 | switch (res.statusCode) { |
| 57 | case 200: | 57 | case 200: |
| 58 | const data = res.data || {} | 58 | const data = res.data || {} |
| 59 | if (data.code === 200) { | 59 | if (data.code === 200||data.pageData?.code === 200) { |
| 60 | resolve(data) | 60 | resolve(data) |
| 61 | } else { | 61 | } else if (req.url.indexOf('getMemberCountInfo')>-1){ |
| 62 | resolve(data) | ||
| 63 | } else { | ||
| 62 | if (!excludeUrls.includes(req.url)) { | 64 | if (!excludeUrls.includes(req.url)) { |
| 63 | uni.showToast({ | 65 | uni.showToast({ |
| 64 | title: data.msg, | 66 | title: data.msg, | ... | ... |
| ... | @@ -3,8 +3,9 @@ | ... | @@ -3,8 +3,9 @@ |
| 3 | 3 | ||
| 4 | 4 | ||
| 5 | // staging | 5 | // staging |
| 6 | const baseUrl_api = "http://192.168.1.96:8787"; | 6 | const baseUrl_api = "http://192.168.1.96:8787"; |
| 7 | const fileUrl_api = "http://192.168.1.11:8787"; | ||
| 7 | 8 | ||
| 8 | export default { | 9 | export default { |
| 9 | baseUrl_api | ||
| 10 | }; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 10 | baseUrl_api,fileUrl_api | ||
| 11 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
This diff is collapsed.
Click to expand it.
| ... | @@ -166,5 +166,18 @@ | ... | @@ -166,5 +166,18 @@ |
| 166 | .formBox{ background: #fff; | 166 | .formBox{ background: #fff; |
| 167 | padding: 50rpx 40rpx; | 167 | padding: 50rpx 40rpx; |
| 168 | margin: 0 30rpx; | 168 | margin: 0 30rpx; |
| 169 | border-radius: 20rpx;} | 169 | border-radius: 20rpx;} |
| 170 | |||
| 171 | .popBody { | ||
| 172 | font-size: 28rpx; | ||
| 173 | line-height: 1.5; | ||
| 174 | font-family: 华文仿宋; | ||
| 175 | height: 80vh; | ||
| 176 | overflow: auto; | ||
| 177 | padding: 30rpx; | ||
| 178 | |||
| 179 | .btn-red { | ||
| 180 | margin: 50rpx 0 30rpx; | ||
| 181 | } | ||
| 182 | } | ||
| 170 | </style> | 183 | </style> | ... | ... |
pages/group/applyList.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.auditStatus == 0">审核中</text> | ||
| 10 | <text v-if="item.auditStatus == 1" class="text-success">审核通过</text> | ||
| 11 | <text v-if="item.auditStatus == 2" class="text-danger">审核拒绝</text> | ||
| 12 | <text v-if="item.auditStatus == 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.memberName }}</view> | ||
| 21 | </view> | ||
| 22 | <view> | ||
| 23 | 会员合计 | ||
| 24 | <view>{{item.content.allCount}}</view> | ||
| 25 | </view> | ||
| 26 | <view> | ||
| 27 | 新会员合计 | ||
| 28 | <view>{{item.content.renewYear}}</view> | ||
| 29 | </view> | ||
| 30 | <view> | ||
| 31 | 费用合计 | ||
| 32 | <view> {{ (item?.content?.allFee*1).toFixed(2) }}</view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | <view class="func" v-if="(deptType == 1&&item.ztxRes == 0)||((deptType == 2 || deptType == 3)&&item.shenRes == 0)"> | ||
| 36 | <button @click="audit(item.recordId,'0')">拒绝</button> | ||
| 37 | <button @click="audit(item.recordId,'1')">同意</button> | ||
| 38 | </view> | ||
| 39 | <view class="func" v-if="(deptType == 6&&(item.status == 0 || item.status == 2))"> | ||
| 40 | <button>提交审核</button> | ||
| 41 | </view> | ||
| 42 | </view> | ||
| 43 | </view> | ||
| 44 | |||
| 45 | |||
| 46 | |||
| 47 | <view class="nodata" v-if="list.length==0"> | ||
| 48 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 49 | <text>暂无数据</text> | ||
| 50 | </view> | ||
| 51 | </view> | ||
| 52 | </template> | ||
| 53 | |||
| 54 | <script setup> | ||
| 55 | import * as api from '@/common/api.js' | ||
| 56 | import config from '@/config.js' | ||
| 57 | import { | ||
| 58 | onMounted, | ||
| 59 | ref | ||
| 60 | } from 'vue' | ||
| 61 | import { | ||
| 62 | onLoad | ||
| 63 | } from '@dcloudio/uni-app' | ||
| 64 | const app = getApp(); | ||
| 65 | const queryParams = ref({ | ||
| 66 | // pageNum: 1, | ||
| 67 | // pageSize: 10 | ||
| 68 | auditStatus:'0' | ||
| 69 | }) | ||
| 70 | const navs = ref(['审核中', '审核通过', '审核拒绝', '退回']) | ||
| 71 | const current = ref() | ||
| 72 | const list = ref([]) | ||
| 73 | const total = ref(0) | ||
| 74 | const deptType = ref('') | ||
| 75 | onLoad(() => { | ||
| 76 | if (app.globalData.isLogin) { | ||
| 77 | init() | ||
| 78 | } else { | ||
| 79 | |||
| 80 | app.firstLoadCallback = () => { | ||
| 81 | init() | ||
| 82 | }; | ||
| 83 | } | ||
| 84 | }) | ||
| 85 | |||
| 86 | function init() { | ||
| 87 | deptType.value = app.globalData.deptType | ||
| 88 | getList() | ||
| 89 | } | ||
| 90 | |||
| 91 | function onClickItem(e) { | ||
| 92 | console.log(e) | ||
| 93 | queryParams.value.auditStatus = e.currentIndex | ||
| 94 | getList() | ||
| 95 | } | ||
| 96 | |||
| 97 | function getList() { | ||
| 98 | uni.showLoading({ | ||
| 99 | title:'加载中' | ||
| 100 | }) | ||
| 101 | if(deptType.value==2||deptType.value==3){ | ||
| 102 | // 省 | ||
| 103 | queryParams.value.mergeFlag = 0 | ||
| 104 | }else if(deptType.value==1){ | ||
| 105 | queryParams.value.noEmpty = 1 | ||
| 106 | }else if( deptType.value==4||deptType.value==5){ | ||
| 107 | queryParams.value.noEmpty=1 | ||
| 108 | } | ||
| 109 | api.getGroupList(queryParams.value).then(res => { | ||
| 110 | uni.hideLoading() | ||
| 111 | list.value = res.rows | ||
| 112 | list.value.forEach(item => { | ||
| 113 | item.content = JSON.parse(item.content) | ||
| 114 | // item.doc = JSON.parse(item.doc) | ||
| 115 | }) | ||
| 116 | total.value = res.total | ||
| 117 | }) | ||
| 118 | } | ||
| 119 | |||
| 120 | function audit(recordId, flag) { | ||
| 121 | if (flag == '0') { | ||
| 122 | // 拒绝 | ||
| 123 | // 弹出框填写理由 | ||
| 124 | uni.showModal({ | ||
| 125 | title: '请输入拒绝理由', | ||
| 126 | editable: true, | ||
| 127 | success: function(res) { | ||
| 128 | if (res.confirm) { | ||
| 129 | if (!res.content) { | ||
| 130 | uni.showToast({ | ||
| 131 | title: '请输入拒绝理由', | ||
| 132 | icon: 'none' | ||
| 133 | }) | ||
| 134 | } else { | ||
| 135 | doApproval(recordId, flag, res.content) | ||
| 136 | } | ||
| 137 | } | ||
| 138 | } | ||
| 139 | }) | ||
| 140 | } else if (flag == '1') { | ||
| 141 | // 二次确认 | ||
| 142 | uni.showModal({ | ||
| 143 | title: '提示', | ||
| 144 | content: `确定审批通过吗`, | ||
| 145 | success: function(res) { | ||
| 146 | if (res.confirm) { | ||
| 147 | doApproval(recordId, flag) | ||
| 148 | } | ||
| 149 | } | ||
| 150 | }) | ||
| 151 | } | ||
| 152 | } | ||
| 153 | |||
| 154 | function doApproval(recordId, flag, reason) { | ||
| 155 | var obj = { | ||
| 156 | flag: flag, | ||
| 157 | reason: reason || '', | ||
| 158 | recordIds: [] | ||
| 159 | } | ||
| 160 | obj.recordIds.push(recordId) | ||
| 161 | console.log(obj) | ||
| 162 | api.audit(obj).then((res) => { | ||
| 163 | uni.showToast({ | ||
| 164 | title: '操作成功', | ||
| 165 | icon: 'none' | ||
| 166 | }) | ||
| 167 | getList() | ||
| 168 | }) | ||
| 169 | } | ||
| 170 | |||
| 171 | function goDetail(item) { | ||
| 172 | const auditLog = encodeURIComponent(JSON.stringify(item.auditLog)) | ||
| 173 | const form = encodeURIComponent(JSON.stringify(item)) | ||
| 174 | |||
| 175 | let path = `/pages/personalVip/mobilizeDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}` | ||
| 176 | uni.navigateTo({ | ||
| 177 | url: path | ||
| 178 | }); | ||
| 179 | } | ||
| 180 | </script> | ||
| 181 | |||
| 182 | <style scoped> | ||
| 183 | .mt0{margin-top: 0!important;} | ||
| 184 | .appList .appItem .name{width: 80%;word-break: break-all;} | ||
| 185 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/detail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <!-- 机构会员 --> | ||
| 4 | <view class="wBox"> | ||
| 5 | <!-- 成员 --> | ||
| 6 | <view class="userlist"> | ||
| 7 | <view class="item" v-for="n in list"> | ||
| 8 | <view class="photobox"> | ||
| 9 | <view class="colorful">{{n.name?.slice(0,1)}}</view> | ||
| 10 | </view> | ||
| 11 | <view> | ||
| 12 | <view class="name">{{n.name}} | ||
| 13 | |||
| 14 | <text v-if="n.sex == 1">(女)</text> | ||
| 15 | <text v-else>(男)</text> | ||
| 16 | |||
| 17 | |||
| 18 | </view> | ||
| 19 | <!-- <view class="date">{{n.ancestorNameList[0]}} {{ n.ancestorNameList[1] }} | ||
| 20 | {{n.ancestorNameList[2]}}</view> --> | ||
| 21 | <view class="date"> | ||
| 22 | 注册时间 {{n.createTime }} | ||
| 23 | </view> | ||
| 24 | </view> | ||
| 25 | <view class="nian"> | ||
| 26 | <text v-if="n.perType==1"> 个人</text> | ||
| 27 | <text v-if="n.perType==2"> 教练</text> | ||
| 28 | <text v-if="n.perType==3"> 考官</text> | ||
| 29 | <text v-if="n.perType==4"> 裁判</text> | ||
| 30 | <text v-if="n.perType==5">临时</text> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | </view> | ||
| 34 | <view class="nodata" v-if="list.length==0"> | ||
| 35 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 36 | <text>暂无会员</text> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | </template> | ||
| 41 | |||
| 42 | <script setup> | ||
| 43 | import * as api from '@/common/api.js' | ||
| 44 | import config from '@/config.js' | ||
| 45 | import { | ||
| 46 | ref, | ||
| 47 | getCurrentInstance | ||
| 48 | } from 'vue' | ||
| 49 | import { | ||
| 50 | onLoad | ||
| 51 | } from '@dcloudio/uni-app' | ||
| 52 | const { | ||
| 53 | proxy | ||
| 54 | } = getCurrentInstance() | ||
| 55 | const app = getApp(); | ||
| 56 | const query = ref({ | ||
| 57 | sonDeptId: 1, | ||
| 58 | perType: '1' | ||
| 59 | }) | ||
| 60 | const list = ref([]) | ||
| 61 | const forms = ref({}) | ||
| 62 | const total = ref(0) | ||
| 63 | const current = ref(0) | ||
| 64 | const currentTabName = ref('道馆') | ||
| 65 | const userType = ref('') | ||
| 66 | const deptType = ref('') | ||
| 67 | onLoad((option) => { | ||
| 68 | query.value.sonDeptId = option.deptId | ||
| 69 | getList() | ||
| 70 | }) | ||
| 71 | |||
| 72 | function getList() { | ||
| 73 | uni.showLoading({ | ||
| 74 | title:"加载中" | ||
| 75 | }) | ||
| 76 | api.selectPageList(query.value).then(res => { | ||
| 77 | uni.hideLoading() | ||
| 78 | list.value = res.rows | ||
| 79 | total.value = res.total | ||
| 80 | }) | ||
| 81 | } | ||
| 82 | </script> | ||
| 83 | |||
| 84 | <style lang="scss" scoped> | ||
| 85 | .nian { | ||
| 86 | position: absolute; | ||
| 87 | right: 20rpx; | ||
| 88 | font-size: 26rpx; | ||
| 89 | color: #999; | ||
| 90 | } | ||
| 91 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/group/list.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" styleType="text" activeColor="#AD181F"></uni-segmented-control> | ||
| 4 | <view class="searchbar"> | ||
| 5 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 6 | v-model="query.name" placeholder="搜索团队会员名称" @blur="getList" @clear="getList"> | ||
| 7 | </uni-easyinput> | ||
| 8 | </view> | ||
| 9 | <view class="vipData"> | ||
| 10 | <view>共 <text>{{ forms?.total }}</text>人</view> | ||
| 11 | <view>有效会员 <text>{{ forms?.effective }}</text></view> | ||
| 12 | <view>过期会员 <text>{{ forms?.expired }}</text></view> | ||
| 13 | <view>即将过期会员 <text>{{ forms?.soon }}</text></view> | ||
| 14 | </view> | ||
| 15 | <view class="indexboxre"> | ||
| 16 | <view class="userlist mt30"> | ||
| 17 | <view class="item" v-for="n in infoList" @click="handleInfo(n)"> | ||
| 18 | <view @click="handleInfo(n)"> | ||
| 19 | <view class="name">{{n.name}}<text v-if="n.memCode"> ({{n.memCode}}) </text></view> | ||
| 20 | <view class="date">到期时间:{{n.validityDate?.slice(0,10)||'--'}}</view> | ||
| 21 | </view> | ||
| 22 | <view class="status"> | ||
| 23 | 会员 <text class="text-success">{{n.validityMemberCount}}</text>/{{n.allMemberCount}} | ||
| 24 | </view> | ||
| 25 | </view> | ||
| 26 | </view> | ||
| 27 | <view class="nodata" v-if="infoList.length==0"> | ||
| 28 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 29 | <text>暂无数据</text> | ||
| 30 | </view> | ||
| 31 | </view> | ||
| 32 | |||
| 33 | </view> | ||
| 34 | </template> | ||
| 35 | |||
| 36 | <script setup> | ||
| 37 | import * as api from '@/common/api.js' | ||
| 38 | import { | ||
| 39 | ref, | ||
| 40 | getCurrentInstance | ||
| 41 | } from 'vue' | ||
| 42 | import { | ||
| 43 | onLoad | ||
| 44 | } from '@dcloudio/uni-app' | ||
| 45 | const { | ||
| 46 | proxy | ||
| 47 | } = getCurrentInstance() | ||
| 48 | const app = getApp(); | ||
| 49 | const query = ref({ | ||
| 50 | fromList: 1, | ||
| 51 | dType: 4, | ||
| 52 | }) | ||
| 53 | const navs = ref(['道馆','三级协会','二级协会','一级协会']) | ||
| 54 | const list = ref([]) | ||
| 55 | const forms = ref({}) | ||
| 56 | const infoList = ref([]) | ||
| 57 | const total = ref(0) | ||
| 58 | const current = ref(0) | ||
| 59 | const currentTabName = ref('道馆') | ||
| 60 | const userType = ref('') | ||
| 61 | const deptType = ref('') | ||
| 62 | onLoad(() => { | ||
| 63 | userType.value = app.globalData.userType | ||
| 64 | deptType.value = app.globalData.deptType | ||
| 65 | // 部门类型 1:中跆协 2:省 3:直属 4:市 5:区 6: 团体 | ||
| 66 | if(deptType.value==2||deptType.value==3){ | ||
| 67 | navs.value = ['道馆','三级协会','二级协会'] | ||
| 68 | } else if(deptType.value==4){ | ||
| 69 | navs.value = ['道馆','三级协会'] | ||
| 70 | } | ||
| 71 | getList() | ||
| 72 | getGroupInfo() | ||
| 73 | }) | ||
| 74 | |||
| 75 | function getList() { | ||
| 76 | console.log(current.value,currentTabName.value,query.value.dType) | ||
| 77 | api.getGroupVipList(query.value).then(res => { | ||
| 78 | infoList.value = res.rows | ||
| 79 | total.value = res.total | ||
| 80 | }) | ||
| 81 | } | ||
| 82 | function getGroupInfo(){ | ||
| 83 | api.getMemberCountInfo({dType: query.value.dType, fromList: 1}).then(res=>{ | ||
| 84 | forms.value = res | ||
| 85 | }) | ||
| 86 | } | ||
| 87 | function onClickItem(e){ | ||
| 88 | current.value = e.currentIndex | ||
| 89 | currentTabName.value = navs.value[e.currentIndex] | ||
| 90 | if(currentTabName.value == '道馆'){ | ||
| 91 | query.value.dType = 4 | ||
| 92 | } else if(currentTabName.value == '三级协会'){ | ||
| 93 | query.value.dType = 3 | ||
| 94 | } else if(currentTabName.value == '二级协会'){ | ||
| 95 | query.value.dType = 2 | ||
| 96 | } else if(currentTabName.value == '一级协会'){ | ||
| 97 | query.value.dType = 1 | ||
| 98 | } | ||
| 99 | getList() | ||
| 100 | getGroupInfo() | ||
| 101 | } | ||
| 102 | function handleInfo(n) { | ||
| 103 | uni.navigateTo({ | ||
| 104 | url: `/pages/group/detail?deptId=${n.deptId}` | ||
| 105 | }) | ||
| 106 | } | ||
| 107 | |||
| 108 | </script> | ||
| 109 | |||
| 110 | <style scoped lang="scss"> | ||
| 111 | |||
| 112 | |||
| 113 | .indexboxre { | ||
| 114 | padding: 0 30rpx; | ||
| 115 | |||
| 116 | .tt { | ||
| 117 | font-size: 30rpx; | ||
| 118 | margin: 0 0 30rpx; | ||
| 119 | color: #4C5359; | ||
| 120 | } | ||
| 121 | |||
| 122 | position: relative; | ||
| 123 | height: calc(100vh - 300rpx); | ||
| 124 | } | ||
| 125 | |||
| 126 | .searchbar { | ||
| 127 | display: flex; | ||
| 128 | align-items: center; | ||
| 129 | padding: 25rpx; | ||
| 130 | box-sizing: border-box; | ||
| 131 | |||
| 132 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 133 | border-radius: 35rpx; | ||
| 134 | border: none; | ||
| 135 | height: 70rpx; | ||
| 136 | } | ||
| 137 | |||
| 138 | :deep(.uni-easyinput__content-input) { | ||
| 139 | font-size: 26rpx; | ||
| 140 | } | ||
| 141 | } | ||
| 142 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/index/booking.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
| ... | @@ -3,24 +3,30 @@ | ... | @@ -3,24 +3,30 @@ |
| 3 | <view> | 3 | <view> |
| 4 | <view class="welcome">您好!<br />欢迎使用中跆协会员管理系统</view> | 4 | <view class="welcome">您好!<br />欢迎使用中跆协会员管理系统</view> |
| 5 | <view class="flexbox"> | 5 | <view class="flexbox"> |
| 6 | <view @click="goAddVip">添加会员</view> | 6 | <!-- userType 1:中跆协 2:省 3:市区 4:道馆--> |
| 7 | <view @click="goRenew">会员缴费</view> | 7 | <!-- 4 --> |
| 8 | <view>缴费审核</view> | 8 | <view v-if="userType=='4'" @click="goAddVip">添加会员</view> |
| 9 | <view v-if="userType=='4'" @click="goPath('/pages/personalVip/payment')">会员缴费</view> | ||
| 10 | <view v-if="userType=='2'" @click="goPath('/pages/personalVip/feeBill')">会员缴费单</view> | ||
| 11 | <!-- 3 2 1--> | ||
| 12 | <view v-if="userType!='4'" @click="goPath('/pages/personalVip/audit')">缴费审核</view> | ||
| 13 | |||
| 14 | <!-- 都有 --> | ||
| 15 | <view @click="goPath('/pages/personalVip/list')">会员查询</view> | ||
| 9 | </view> | 16 | </view> |
| 10 | 17 | ||
| 11 | </view> | 18 | </view> |
| 12 | <view> | 19 | <view> |
| 13 | <uni-grid :column="4" :show-border="false" :square="false"> | 20 | <view v-if="userType!='3'" @click="goPath('/pages/personalVip/mobilize')"> |
| 14 | <uni-grid-item v-for="(item ,index) in list" :index="index" :key="index"> | 21 | 会员调动 |
| 15 | <view class="grid-item-box"> | 22 | </view> |
| 16 | <image class="image" :src="item.url" mode="aspectFill" /> | 23 | <view v-if="userType!='4'" @click="goPath('/pages/group/list')">团体会员查询</view> |
| 17 | <text class="text">{{item.text}}</text> | 24 | <view v-if="userType!='4'" @click="goPath('/pages/group/applyList')">团体会员审核</view> |
| 18 | <view v-if="item.badge" class="grid-dot"> | 25 | <view v-if="userType=='2'" @click="goPath('/pages/group/pay')">团体会员认证</view> |
| 19 | <uni-badge :text="item.badge" :type="item.type" /> | 26 | |
| 20 | </view> | 27 | <view v-if="userType=='4'" @click="goPath('/pages/level/apply')">级位考试申请</view> |
| 21 | </view> | 28 | <view v-if="userType!='4'" @click="goPath('/pages/level/approval')">级位考试审核</view> |
| 22 | </uni-grid-item> | 29 | |
| 23 | </uni-grid> | ||
| 24 | </view> | 30 | </view> |
| 25 | <uni-section title="待办提醒" padding> | 31 | <uni-section title="待办提醒" padding> |
| 26 | <template v-slot:right> | 32 | <template v-slot:right> |
| ... | @@ -31,6 +37,10 @@ | ... | @@ -31,6 +37,10 @@ |
| 31 | <text class="dot" :class="n.readFlag=='1'?'done':''"></text> | 37 | <text class="dot" :class="n.readFlag=='1'?'done':''"></text> |
| 32 | <view class="tt esp">{{n.name}}</view> | 38 | <view class="tt esp">{{n.name}}</view> |
| 33 | <view class="date">{{n.createTime}}</view> | 39 | <view class="date">{{n.createTime}}</view> |
| 40 | </view> | ||
| 41 | <view class="nodata" v-if="messageList.length==0"> | ||
| 42 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 43 | <text>暂无数据</text> | ||
| 34 | </view> | 44 | </view> |
| 35 | </view> | 45 | </view> |
| 36 | </uni-section> | 46 | </uni-section> |
| ... | @@ -41,15 +51,9 @@ | ... | @@ -41,15 +51,9 @@ |
| 41 | import * as api from '@/common/api.js'; | 51 | import * as api from '@/common/api.js'; |
| 42 | import * as loginServer from '@/common/login.js'; | 52 | import * as loginServer from '@/common/login.js'; |
| 43 | import { | 53 | import { |
| 44 | getWxUser, | ||
| 45 | getWxUserPhone | ||
| 46 | } from '@/common/login.js'; | ||
| 47 | import { | ||
| 48 | onLoad, | 54 | onLoad, |
| 49 | onShow, | 55 | onShow, |
| 50 | onReady, | 56 | onReady, |
| 51 | onShareAppMessage, | ||
| 52 | onShareTimeline, | ||
| 53 | onPullDownRefresh | 57 | onPullDownRefresh |
| 54 | } from '@dcloudio/uni-app'; | 58 | } from '@dcloudio/uni-app'; |
| 55 | import { | 59 | import { |
| ... | @@ -62,35 +66,11 @@ | ... | @@ -62,35 +66,11 @@ |
| 62 | proxy | 66 | proxy |
| 63 | } = getCurrentInstance() | 67 | } = getCurrentInstance() |
| 64 | const app = getApp(); | 68 | const app = getApp(); |
| 65 | 69 | const userType = ref('1') | |
| 66 | 70 | ||
| 67 | let proId; | 71 | let proId; |
| 68 | let goPath; | ||
| 69 | const svId = ref(null); | 72 | const svId = ref(null); |
| 70 | const list = ref([{ | 73 | const list = ref([ |
| 71 | url: '', | ||
| 72 | text: '会员调动', | ||
| 73 | badge: '0', | ||
| 74 | type: "primary" | ||
| 75 | }, | ||
| 76 | { | ||
| 77 | url: '', | ||
| 78 | text: '调动审核', | ||
| 79 | badge: '1', | ||
| 80 | type: "success" | ||
| 81 | }, | ||
| 82 | { | ||
| 83 | url: '', | ||
| 84 | text: '级位考试申请', | ||
| 85 | badge: '99', | ||
| 86 | type: "warning" | ||
| 87 | }, | ||
| 88 | { | ||
| 89 | url: '', | ||
| 90 | text: '级位考试审核', | ||
| 91 | badge: '2', | ||
| 92 | type: "error" | ||
| 93 | }, | ||
| 94 | { | 74 | { |
| 95 | url: '', | 75 | url: '', |
| 96 | text: '段位考试申请' | 76 | text: '段位考试申请' |
| ... | @@ -111,15 +91,16 @@ | ... | @@ -111,15 +91,16 @@ |
| 111 | const messageList = ref([]) | 91 | const messageList = ref([]) |
| 112 | onShow(() => { | 92 | onShow(() => { |
| 113 | if (app.globalData.isLogin) { | 93 | if (app.globalData.isLogin) { |
| 114 | init(); | 94 | init() |
| 115 | } else { | 95 | } else { |
| 116 | 96 | ||
| 117 | app.firstLoadCallback = () => { | 97 | app.firstLoadCallback = () => { |
| 118 | init(); | 98 | init() |
| 119 | }; | 99 | }; |
| 120 | } | 100 | } |
| 121 | }) | 101 | }) |
| 122 | onLoad(option => { | 102 | onLoad(option => { |
| 103 | |||
| 123 | if (option.scene) { | 104 | if (option.scene) { |
| 124 | proId = decodeURIComponent(option.scene); | 105 | proId = decodeURIComponent(option.scene); |
| 125 | } else { | 106 | } else { |
| ... | @@ -128,6 +109,12 @@ | ... | @@ -128,6 +109,12 @@ |
| 128 | 109 | ||
| 129 | }); | 110 | }); |
| 130 | 111 | ||
| 112 | function goPath(path) { | ||
| 113 | uni.navigateTo({ | ||
| 114 | url: path | ||
| 115 | }); | ||
| 116 | } | ||
| 117 | |||
| 131 | function gologin() { | 118 | function gologin() { |
| 132 | let path = '/pages/index/login'; | 119 | let path = '/pages/index/login'; |
| 133 | uni.navigateTo({ | 120 | uni.navigateTo({ |
| ... | @@ -157,66 +144,86 @@ | ... | @@ -157,66 +144,86 @@ |
| 157 | }); | 144 | }); |
| 158 | } | 145 | } |
| 159 | 146 | ||
| 160 | function init() { | 147 | function init() { |
| 161 | api.getMessage({ | 148 | uni.showLoading({ |
| 162 | pageNum: 1, | 149 | title: '加载中' |
| 163 | pageSize: 10 | 150 | }); |
| 164 | }).then(res => { | 151 | loginServer.getMyOwnMemberInfo().then(res=>{ |
| 165 | for (var d of res.rows) { | 152 | userType.value = app.globalData.userType |
| 166 | switch (d.type) { | 153 | if (userType.value!='1' && app.globalData.authenticationStatus != '2' && app.globalData.authenticationStatus != '4'){ |
| 167 | case 30001: | 154 | // 注册引导 |
| 168 | d.name = '你有一条会员缴费等待审批,点击去处理!' | 155 | uni.navigateTo({ |
| 169 | d.path = '/member/audit' | 156 | url: '/pages/index/perfect' |
| 170 | break | 157 | }); |
| 171 | case 30002: | 158 | } else { |
| 172 | d.name = '你有一条级位考试等待审批,点击去处理!' | 159 | getMes() |
| 173 | d.path = '/level/approval' | 160 | } |
| 174 | break | 161 | uni.hideLoading(); |
| 175 | case 30003: | ||
| 176 | d.name = '你有一条段位考试等待审批,点击去处理!' | ||
| 177 | d.path = '/rank/approval' | ||
| 178 | break | ||
| 179 | case 30004: | ||
| 180 | d.name = '你有一条会员调动等待审批,点击去处理!' | ||
| 181 | d.path = '/member/mobillize' | ||
| 182 | break | ||
| 183 | case 30005: | ||
| 184 | d.name = '你有一条团体会员认证等待审批,点击去处理!' | ||
| 185 | d.path = '/group/authentication' | ||
| 186 | break | ||
| 187 | case 30006: | ||
| 188 | d.name = '你有一条段位成绩等待审批,点击去处理!' | ||
| 189 | d.path = '/rank/score/approval' | ||
| 190 | break | ||
| 191 | case 40001: | ||
| 192 | d.name = '你有一条级位申请待提交,点击去处理!' | ||
| 193 | d.path = '/level/apply/modify/' + d.eventId | ||
| 194 | break | ||
| 195 | case 40002: | ||
| 196 | d.name = '你有一条段位申请待提交,点击去处理!' | ||
| 197 | d.path = '/rank/apply/modify/' + d.eventId | ||
| 198 | break | ||
| 199 | case 40003: | ||
| 200 | d.name = '你有一条成绩维护的数据待提交,点击去处理!' | ||
| 201 | d.path = '/rank/score/modify/' + d.eventId | ||
| 202 | break | ||
| 203 | case 50001: | ||
| 204 | d.name = '你有一条新的个人会员申请,点击去处理!' | ||
| 205 | d.path = '/member/list' | ||
| 206 | break | ||
| 207 | } | ||
| 208 | } | ||
| 209 | messageList.value = res.rows | ||
| 210 | }) | 162 | }) |
| 211 | 163 | ||
| 212 | } | ||
| 213 | 164 | ||
| 165 | } | ||
| 166 | function getMes(){ | ||
| 167 | api.getMessage({ | ||
| 168 | pageNum: 1, | ||
| 169 | pageSize: 10 | ||
| 170 | }).then(res => { | ||
| 171 | if (res.rows && res.rows.length > 0) | ||
| 172 | for (var d of res.rows) { | ||
| 173 | switch (d.type) { | ||
| 174 | case 30001: | ||
| 175 | d.name = '你有一条会员缴费等待审批,点击去处理!' | ||
| 176 | d.path = '/personalVip/audit' | ||
| 177 | break | ||
| 178 | case 30002: | ||
| 179 | d.name = '你有一条级位考试等待审批,点击去处理!' | ||
| 180 | d.path = '/level/approval' | ||
| 181 | break | ||
| 182 | case 30003: | ||
| 183 | d.name = '你有一条段位考试等待审批,点击去处理!' | ||
| 184 | d.path = '/rank/approval' | ||
| 185 | break | ||
| 186 | case 30004: | ||
| 187 | d.name = '你有一条会员调动等待审批,点击去处理!' | ||
| 188 | d.path = '/personalVip/mobillize' | ||
| 189 | break | ||
| 190 | case 30005: | ||
| 191 | d.name = '你有一条团体会员认证等待审批,点击去处理!' | ||
| 192 | d.path = '/group/authentication' | ||
| 193 | break | ||
| 194 | case 30006: | ||
| 195 | d.name = '你有一条段位成绩等待审批,点击去处理!' | ||
| 196 | d.path = '/rank/scoreApproval' | ||
| 197 | break | ||
| 198 | case 40001: | ||
| 199 | d.name = '你有一条级位申请待提交,点击去处理!' | ||
| 200 | d.path = `/level/apply/modify?id=${d.eventId}` | ||
| 201 | break | ||
| 202 | case 40002: | ||
| 203 | d.name = '你有一条段位申请待提交,点击去处理!' | ||
| 204 | d.path = `/rank/apply/modify?id=${d.eventId}` | ||
| 205 | break | ||
| 206 | case 40003: | ||
| 207 | d.name = '你有一条成绩维护的数据待提交,点击去处理!' | ||
| 208 | d.path = `/rank/score/modify?id=${d.eventId}` | ||
| 209 | break | ||
| 210 | case 50001: | ||
| 211 | d.name = '你有一条新的个人会员申请,点击去处理!' | ||
| 212 | d.path = '/personalVip/approvalList' | ||
| 213 | break | ||
| 214 | } | ||
| 215 | } | ||
| 216 | messageList.value = res.rows | ||
| 217 | }) | ||
| 218 | } | ||
| 214 | function readMessage(item) { | 219 | function readMessage(item) { |
| 215 | uni.navigateTo({ | 220 | uni.navigateTo({ |
| 216 | url: item.path | 221 | url: item.path |
| 217 | }); | 222 | }); |
| 218 | api.reader({id: item.id}).then(res=>{ | 223 | api.reader({ |
| 219 | item.readFlag = '1' | 224 | id: item.id |
| 225 | }).then(res => { | ||
| 226 | item.readFlag = '1' | ||
| 220 | }) | 227 | }) |
| 221 | } | 228 | } |
| 222 | 229 | ... | ... |
| ... | @@ -14,15 +14,15 @@ | ... | @@ -14,15 +14,15 @@ |
| 14 | <form v-if="isActive==0"> | 14 | <form v-if="isActive==0"> |
| 15 | <view class="round-input-item"> | 15 | <view class="round-input-item"> |
| 16 | <image class="icon" src="@/static/login/tag01@2x.png"></image> | 16 | <image class="icon" src="@/static/login/tag01@2x.png"></image> |
| 17 | <uni-easyinput placeholder="账号" v-model="form.username" /> | 17 | <uni-easyinput :styles="inputstyle" placeholder="账号" v-model="form.username" /> |
| 18 | </view> | 18 | </view> |
| 19 | <view class="round-input-item"> | 19 | <view class="round-input-item"> |
| 20 | <image class="icon" src="@/static/login/tag02@2x.png"></image> | 20 | <image class="icon" src="@/static/login/tag02@2x.png"></image> |
| 21 | <uni-easyinput placeholder="密码" v-model="form.password" type="password" /> | 21 | <uni-easyinput :styles="inputstyle" placeholder="密码" v-model="form.password" type="password" /> |
| 22 | </view> | 22 | </view> |
| 23 | <view class="round-input-item"> | 23 | <view class="round-input-item"> |
| 24 | <image class="icon" src="@/static/login/tag03@2x.png"></image> | 24 | <image class="icon" src="@/static/login/tag03@2x.png"></image> |
| 25 | <uni-easyinput placeholder="图形验证码" v-model="form.code" /> | 25 | <uni-easyinput :styles="inputstyle" placeholder="图形验证码" v-model="form.code" /> |
| 26 | <image :src="codeUrl" @click="getCode" /> | 26 | <image :src="codeUrl" @click="getCode" /> |
| 27 | </view> | 27 | </view> |
| 28 | 28 | ||
| ... | @@ -31,16 +31,16 @@ | ... | @@ -31,16 +31,16 @@ |
| 31 | <form v-if="isActive==1"> | 31 | <form v-if="isActive==1"> |
| 32 | <view class="round-input-item"> | 32 | <view class="round-input-item"> |
| 33 | <image class="icon" src="@/static/login/tag01@2x.png"></image> | 33 | <image class="icon" src="@/static/login/tag01@2x.png"></image> |
| 34 | <uni-easyinput placeholder="请输入手机号" v-model="form2.telNo" /> | 34 | <uni-easyinput :styles="inputstyle" placeholder="请输入手机号" v-model="form2.telNo" /> |
| 35 | </view> | 35 | </view> |
| 36 | <view class="round-input-item"> | 36 | <view class="round-input-item"> |
| 37 | <image class="icon" src="@/static/login/tag02@2x.png"></image> | 37 | <image class="icon" src="@/static/login/tag02@2x.png"></image> |
| 38 | <uni-easyinput placeholder="图形验证码" v-model="form2.captcha" /> | 38 | <uni-easyinput :styles="inputstyle" placeholder="图形验证码" v-model="form2.captcha" /> |
| 39 | <image :src="codeUrl" @click="getCode" /> | 39 | <image :src="codeUrl" @click="getCode" /> |
| 40 | </view> | 40 | </view> |
| 41 | <view class="round-input-item"> | 41 | <view class="round-input-item"> |
| 42 | <image class="icon" src="@/static/login/tag04@2x.png"></image> | 42 | <image class="icon" src="@/static/login/tag04@2x.png"></image> |
| 43 | <uni-easyinput placeholder="短信验证码" v-model="form2.code" /> | 43 | <uni-easyinput :styles="inputstyle" placeholder="短信验证码" v-model="form2.code" /> |
| 44 | <text v-if="!countDown.start" @click="getCaptchaSms">获取验证码</text> | 44 | <text v-if="!countDown.start" @click="getCaptchaSms">获取验证码</text> |
| 45 | <uni-countdown v-if="countDown.start" color="#014A9F" :show-day="false" :show-hour="false" | 45 | <uni-countdown v-if="countDown.start" color="#014A9F" :show-day="false" :show-hour="false" |
| 46 | :show-min="false" @timeup="timeup" :start="countDown.start" | 46 | :show-min="false" @timeup="timeup" :start="countDown.start" |
| ... | @@ -94,7 +94,11 @@ import { | ... | @@ -94,7 +94,11 @@ import { |
| 94 | const isActive = ref(0) | 94 | const isActive = ref(0) |
| 95 | const agree = ref(false) | 95 | const agree = ref(false) |
| 96 | const isRember = ref(true) | 96 | const isRember = ref(true) |
| 97 | const codeUrl = ref(null) | 97 | const codeUrl = ref(null) |
| 98 | const inputstyle = ref({ | ||
| 99 | borderColor: 'transparent', | ||
| 100 | fontSize: '30rpx' | ||
| 101 | }) | ||
| 98 | const form = ref({ | 102 | const form = ref({ |
| 99 | username: null, | 103 | username: null, |
| 100 | password: null, | 104 | password: null, |
| ... | @@ -420,8 +424,9 @@ function timeup() { | ... | @@ -420,8 +424,9 @@ function timeup() { |
| 420 | 424 | ||
| 421 | text { | 425 | text { |
| 422 | font-size: 28rpx; | 426 | font-size: 28rpx; |
| 423 | color: #014A9F; | 427 | color: #014A9F; padding: 0 20rpx; |
| 424 | } | 428 | } |
| 429 | |||
| 425 | } | 430 | } |
| 426 | 431 | ||
| 427 | .fixedagree { | 432 | .fixedagree { | ... | ... |
pages/index/order.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
pages/index/perfect.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="pd30"> | ||
| 4 | <uni-steps :options="list1" :active="active" /> | ||
| 5 | |||
| 6 | <view> | ||
| 7 | <uni-forms ref="baseForm" :modelValue="baseFormData" label-width="100"> | ||
| 8 | <uni-forms-item label="所属协会" required><uni-easyinput v-model="baseFormData.name" | ||
| 9 | :disabled="!editIng" placeholder="所属协会" /></uni-forms-item> | ||
| 10 | <uni-forms-item label="机构名称" required><uni-easyinput v-model="baseFormData.name" | ||
| 11 | :disabled="!editIng" placeholder="机构名称" /></uni-forms-item> | ||
| 12 | <uni-forms-item label="单位类型" required> | ||
| 13 | <uni-data-select :disabled="!editIng" v-model="baseFormData.type" | ||
| 14 | :localdata="typeList"></uni-data-select> | ||
| 15 | </uni-forms-item> | ||
| 16 | <uni-forms-item label="联系人" required> | ||
| 17 | <uni-easyinput v-model="baseFormData.contactPerson" :disabled="!editIng" | ||
| 18 | placeholder="请输入联系人姓名" /> | ||
| 19 | </uni-forms-item> | ||
| 20 | <uni-forms-item label="联系方式" required> | ||
| 21 | <uni-easyinput v-model="baseFormData.contactTelno" :disabled="!editIng" placeholder="请输入联系方式" /> | ||
| 22 | </uni-forms-item> | ||
| 23 | <uni-forms-item label="所在地区" required> | ||
| 24 | <uni-data-picker v-if="editIng" class="fixUniFormItemStyle" :clear-icon="!editIng" | ||
| 25 | v-model="regionArr" @change="onchangeRegionId" :localdata="regionsList" | ||
| 26 | popup-title="请选择所在地区"></uni-data-picker> | ||
| 27 | <uni-easyinput v-model="baseFormData.regionStr" v-else disabled /> | ||
| 28 | </uni-forms-item> | ||
| 29 | <uni-forms-item label="详细地址" required><uni-easyinput v-model="baseFormData.address" | ||
| 30 | :disabled="!editIng" placeholder="请输入详细地址" /></uni-forms-item> | ||
| 31 | |||
| 32 | |||
| 33 | </uni-forms> | ||
| 34 | <view class="fixedBottom"> | ||
| 35 | <button class="btn-red" @click="saveMyteam()">下一步</button> | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | </template> | ||
| 41 | |||
| 42 | <script setup> | ||
| 43 | import { | ||
| 44 | ref | ||
| 45 | } from 'vue'; | ||
| 46 | import * as api from '@/common/api.js'; | ||
| 47 | import { | ||
| 48 | onLoad, | ||
| 49 | onShow | ||
| 50 | } from '@dcloudio/uni-app'; | ||
| 51 | import { | ||
| 52 | tagList, | ||
| 53 | typeList, | ||
| 54 | comList | ||
| 55 | } from '@/static/js/data'; | ||
| 56 | import config from '@/config.js' | ||
| 57 | const app = getApp(); | ||
| 58 | const baseFormData = ref({ | ||
| 59 | |||
| 60 | }); | ||
| 61 | const dataList = ref([]); | ||
| 62 | const memberList = ref([]); | ||
| 63 | const regionArr = ref(); | ||
| 64 | const regionsList = ref([]); | ||
| 65 | const ranksList = ref([]); | ||
| 66 | const current = ref(0); | ||
| 67 | const groupId = ref(0); | ||
| 68 | const currIndex = ref(null); | ||
| 69 | const cptId = ref(); | ||
| 70 | const signType = ref(); | ||
| 71 | const editIng = ref(true); | ||
| 72 | const isSign = ref(false); | ||
| 73 | const query = ref({ | ||
| 74 | type: 0 | ||
| 75 | }); | ||
| 76 | const active = ref(0) | ||
| 77 | const list1 = ref([{ | ||
| 78 | title: '完善信息' | ||
| 79 | }, { | ||
| 80 | title: '会员认证' | ||
| 81 | }]) | ||
| 82 | onLoad(option => { | ||
| 83 | console.log(option) | ||
| 84 | |||
| 85 | getRegionsList(); | ||
| 86 | getDetail() | ||
| 87 | }); | ||
| 88 | function getDetail(){ | ||
| 89 | api.getMyOwnMemberInfo().then(res=>{ | ||
| 90 | if (!res.data.memberInfo) res.data.memberInfo = {} | ||
| 91 | baseFormData.value = res.data.memberInfo | ||
| 92 | baseFormData.value.coordinates1 = [] | ||
| 93 | authenticationStatusa.value = res.data.authenticationStatus | ||
| 94 | if (baseFormData.value.siteProvinceId)baseFormData.value.coordinates1.push(baseFormData.value.siteProvinceId) | ||
| 95 | if (baseFormData.value.siteCityId) baseFormData.value.coordinates1.push(baseFormData.value.siteCityId) | ||
| 96 | if (baseFormData.value.siteRegionId) baseFormData.value.coordinates1.push(baseFormData.value.siteRegionId) | ||
| 97 | |||
| 98 | }) | ||
| 99 | } | ||
| 100 | |||
| 101 | function getRegionsList() { | ||
| 102 | api.regionsList().then(res => { | ||
| 103 | regionsList.value = res.data; | ||
| 104 | }); | ||
| 105 | } | ||
| 106 | |||
| 107 | function onchangeRegionId(e) { | ||
| 108 | console.log(e.detail.value) | ||
| 109 | baseFormData.value.regionId = regionArr.value | ||
| 110 | } | ||
| 111 | |||
| 112 | function saveMyteam() { | ||
| 113 | // 验证必填项 | ||
| 114 | if (baseFormData.value.imgUrl == '') { | ||
| 115 | uni.showToast({ | ||
| 116 | title: '请上传logo', | ||
| 117 | duration: 2000, | ||
| 118 | icon: 'none' | ||
| 119 | }) | ||
| 120 | return | ||
| 121 | } | ||
| 122 | if (baseFormData.value.name == '') { | ||
| 123 | uni.showToast({ | ||
| 124 | title: '请填写团体名称', | ||
| 125 | duration: 2000, | ||
| 126 | icon: 'none' | ||
| 127 | }) | ||
| 128 | return | ||
| 129 | } | ||
| 130 | if (baseFormData.value.abreviations == '') { | ||
| 131 | uni.showToast({ | ||
| 132 | title: '请填写简称', | ||
| 133 | duration: 2000, | ||
| 134 | icon: 'none' | ||
| 135 | }) | ||
| 136 | return | ||
| 137 | } | ||
| 138 | if (baseFormData.value.type == '') { | ||
| 139 | uni.showToast({ | ||
| 140 | title: '请选择参赛队类型', | ||
| 141 | duration: 2000, | ||
| 142 | icon: 'none' | ||
| 143 | }) | ||
| 144 | return | ||
| 145 | } | ||
| 146 | // if(baseFormData.value.type=='3'&&!baseFormData.value.ctype){ | ||
| 147 | // uni.showToast({ | ||
| 148 | // title: '请选择企业性质', | ||
| 149 | // duration: 2000, | ||
| 150 | // icon:'none' | ||
| 151 | // }) | ||
| 152 | // return | ||
| 153 | // } | ||
| 154 | if (baseFormData.value.contactPerson == '') { | ||
| 155 | uni.showToast({ | ||
| 156 | title: '请填写联系人', | ||
| 157 | duration: 2000, | ||
| 158 | icon: 'none' | ||
| 159 | }) | ||
| 160 | return | ||
| 161 | } | ||
| 162 | if (baseFormData.value.contactTelno == '') { | ||
| 163 | uni.showToast({ | ||
| 164 | title: '请填写联系方式', | ||
| 165 | duration: 2000, | ||
| 166 | icon: 'none' | ||
| 167 | }) | ||
| 168 | return | ||
| 169 | } | ||
| 170 | var pattern = /^1[3456789]\d{9}$/; | ||
| 171 | if (!pattern.test(baseFormData.value.contactTelno)) { | ||
| 172 | uni.showToast({ | ||
| 173 | title: '请输入正确的手机号', | ||
| 174 | duration: 2000, | ||
| 175 | icon: 'none' | ||
| 176 | }) | ||
| 177 | return | ||
| 178 | } | ||
| 179 | |||
| 180 | if (baseFormData.value.regionId == '') { | ||
| 181 | uni.showToast({ | ||
| 182 | title: '选择所在地区', | ||
| 183 | duration: 2000, | ||
| 184 | icon: 'none' | ||
| 185 | }) | ||
| 186 | return | ||
| 187 | } | ||
| 188 | if (baseFormData.value.address == '') { | ||
| 189 | uni.showToast({ | ||
| 190 | title: '请填写详细地址', | ||
| 191 | duration: 2000, | ||
| 192 | icon: 'none' | ||
| 193 | }) | ||
| 194 | return | ||
| 195 | } | ||
| 196 | |||
| 197 | for (let n in participantsInfoArr.value) { | ||
| 198 | if (participantsInfoArr.value[n].status == 0 && (!participantsInfoArr.value[n].value)) { | ||
| 199 | uni.showToast({ | ||
| 200 | title: '请完善必填字段', | ||
| 201 | duration: 2000, | ||
| 202 | icon: 'none' | ||
| 203 | }) | ||
| 204 | return | ||
| 205 | } | ||
| 206 | |||
| 207 | } | ||
| 208 | |||
| 209 | |||
| 210 | |||
| 211 | match.saveMyGroup(baseFormData.value).then(res => { | ||
| 212 | groupId.value = res.data | ||
| 213 | if (participantsInfoArr.value && participantsInfoArr.value.length > 0) { | ||
| 214 | // 保存补充信息 | ||
| 215 | const obj = { | ||
| 216 | cptId: cptId.value, | ||
| 217 | groupId: groupId.value, | ||
| 218 | groupInfo: JSON.stringify(participantsInfoArr.value) | ||
| 219 | } | ||
| 220 | match.saveMyGroupExtraInfo(obj).then(res => { | ||
| 221 | |||
| 222 | }) | ||
| 223 | } | ||
| 224 | |||
| 225 | if (!signType.value) { | ||
| 226 | uni.showToast({ | ||
| 227 | title: '保存成功', | ||
| 228 | icon: 'none', | ||
| 229 | duration: 2000 | ||
| 230 | }); | ||
| 231 | editIng.value = false; | ||
| 232 | } else if (signType.value == 1) { | ||
| 233 | // 团队 | ||
| 234 | if (coachOrLeaderFlag.value == "1") { | ||
| 235 | uni.navigateTo({ | ||
| 236 | url: `/pages_match/match/choose_coach?matchId=${cptId.value}&groupId=${groupId.value}&signType=${signType.value}` | ||
| 237 | }); | ||
| 238 | } else { | ||
| 239 | // 选运动员 | ||
| 240 | uni.navigateTo({ | ||
| 241 | url: `/pages_match/match/choose_sportman?matchId=${cptId.value}&groupId=${groupId.value}&signType=${signType.value}` | ||
| 242 | }); | ||
| 243 | } | ||
| 244 | |||
| 245 | } else if (signType.value == 2) { | ||
| 246 | // 队伍 | ||
| 247 | uni.navigateTo({ | ||
| 248 | url: `/pages_match/match/add_rank?matchId=${cptId.value}&groupId=${groupId.value}&signType=${signType.value}` | ||
| 249 | }); | ||
| 250 | } | ||
| 251 | }); | ||
| 252 | } | ||
| 253 | </script> | ||
| 254 | |||
| 255 | <style lang="scss"> | ||
| 256 | |||
| 257 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -12,24 +12,24 @@ | ... | @@ -12,24 +12,24 @@ |
| 12 | <form> | 12 | <form> |
| 13 | <view class="round-input-item"> | 13 | <view class="round-input-item"> |
| 14 | <image class="icon" src="@/static/login/tag01@2x.png"></image> | 14 | <image class="icon" src="@/static/login/tag01@2x.png"></image> |
| 15 | <uni-easyinput v-model="registerForm.telNo" placeholder="请输入手机号" /> | 15 | <uni-easyinput :styles="inputstyle" v-model="registerForm.telNo" placeholder="请输入手机号" /> |
| 16 | </view> | 16 | </view> |
| 17 | <view class="round-input-item"> | 17 | <view class="round-input-item"> |
| 18 | <image class="icon" src="@/static/login/tag02@2x.png"></image> | 18 | <image class="icon" src="@/static/login/tag02@2x.png"></image> |
| 19 | <uni-easyinput v-model="registerForm.password" placeholder="密码" /> | 19 | <uni-easyinput :styles="inputstyle" v-model="registerForm.password" placeholder="密码" type="password"/> |
| 20 | </view> | 20 | </view> |
| 21 | <view class="round-input-item"> | 21 | <view class="round-input-item"> |
| 22 | <image class="icon" src="@/static/login/tag02@2x.png"></image> | 22 | <image class="icon" src="@/static/login/tag02@2x.png"></image> |
| 23 | <uni-easyinput v-model="registerForm.password2" placeholder="确认密码" /> | 23 | <uni-easyinput :styles="inputstyle" v-model="registerForm.password2" placeholder="确认密码" type="password"/> |
| 24 | </view> | 24 | </view> |
| 25 | <view class="round-input-item"> | 25 | <view class="round-input-item"> |
| 26 | <image class="icon" src="@/static/login/tag02@2x.png"></image> | 26 | <image class="icon" src="@/static/login/tag03@2x.png"></image> |
| 27 | <uni-easyinput placeholder="图形验证码" v-model="registerForm.captcha" /> | 27 | <uni-easyinput :styles="inputstyle" placeholder="图形验证码" v-model="registerForm.captcha" /> |
| 28 | <image :src="codeUrl" @click="getCode" /> | 28 | <image :src="codeUrl" @click="getCode" /> |
| 29 | </view> | 29 | </view> |
| 30 | <view class="round-input-item"> | 30 | <view class="round-input-item"> |
| 31 | <image class="icon" src="@/static/login/tag04@2x.png"></image> | 31 | <image class="icon" src="@/static/login/tag04@2x.png"></image> |
| 32 | <uni-easyinput placeholder="短信验证码" v-model="registerForm.code" /> | 32 | <uni-easyinput :styles="inputstyle" placeholder="短信验证码" v-model="registerForm.code" /> |
| 33 | <text v-if="!countDown.start" @click="getCaptchaSms">获取验证码</text> | 33 | <text v-if="!countDown.start" @click="getCaptchaSms">获取验证码</text> |
| 34 | <uni-countdown v-if="countDown.start" color="#014A9F" :show-day="false" | 34 | <uni-countdown v-if="countDown.start" color="#014A9F" :show-day="false" |
| 35 | :show-hour="false" :show-min="false" @timeup="timeup" :start="countDown.start" | 35 | :show-hour="false" :show-min="false" @timeup="timeup" :start="countDown.start" |
| ... | @@ -86,7 +86,10 @@ const countDown = ref({ | ... | @@ -86,7 +86,10 @@ const countDown = ref({ |
| 86 | start: false, | 86 | start: false, |
| 87 | second: 60 | 87 | second: 60 |
| 88 | }) | 88 | }) |
| 89 | 89 | const inputstyle = ref({ | |
| 90 | borderColor: 'transparent', | ||
| 91 | fontSize: '30rpx' | ||
| 92 | }) | ||
| 90 | onMounted(() => { | 93 | onMounted(() => { |
| 91 | getCode() | 94 | getCode() |
| 92 | }) | 95 | }) |
| ... | @@ -117,7 +120,7 @@ function register() { | ... | @@ -117,7 +120,7 @@ function register() { |
| 117 | }) | 120 | }) |
| 118 | return | 121 | return |
| 119 | } | 122 | } |
| 120 | if (!form.value.code) { | 123 | if (!registerForm.value.code) { |
| 121 | uni.showToast({ | 124 | uni.showToast({ |
| 122 | title: '验证码不能为空', | 125 | title: '验证码不能为空', |
| 123 | icon: 'none' | 126 | icon: 'none' |
| ... | @@ -222,65 +225,29 @@ function timeup() { | ... | @@ -222,65 +225,29 @@ function timeup() { |
| 222 | position: relative; | 225 | position: relative; |
| 223 | } | 226 | } |
| 224 | 227 | ||
| 225 | .loginbox { | ||
| 226 | .loginNav { | ||
| 227 | width: 700rpx; | ||
| 228 | margin: 0 auto -53rpx; | ||
| 229 | height: 133rpx; | ||
| 230 | overflow: hidden; | ||
| 231 | position: relative; | ||
| 232 | |||
| 233 | view { | ||
| 234 | text-align: center; | ||
| 235 | height: 133rpx; | ||
| 236 | box-sizing: border-box; | ||
| 237 | padding: 26rpx 0 0; | ||
| 238 | } | ||
| 239 | |||
| 240 | .n1 { | ||
| 241 | background: url('@/static/login/tab1.png') no-repeat top left; | ||
| 242 | background-size: contain; | ||
| 243 | opacity: 0.7; | ||
| 244 | width: 407rpx; | ||
| 245 | position: absolute; | ||
| 246 | left: 0; | ||
| 247 | } | ||
| 248 | |||
| 249 | .n2 { | ||
| 250 | background: url('@/static/login/tab2.png') no-repeat top right; | ||
| 251 | background-size: contain; | ||
| 252 | opacity: 0.7; | ||
| 253 | width: 399rpx; | ||
| 254 | position: absolute; | ||
| 255 | right: 0; | ||
| 256 | } | ||
| 257 | |||
| 258 | .active { | ||
| 259 | color: #AD181F; | ||
| 260 | opacity: 1; | ||
| 261 | |||
| 262 | &::after { | ||
| 263 | content: ''; | ||
| 264 | position: absolute; | ||
| 265 | width: 25rpx; | ||
| 266 | height: 4rpx; | ||
| 267 | background: #AD181F; | ||
| 268 | border-radius: 2rpx; | ||
| 269 | left: 0; | ||
| 270 | right: 0; | ||
| 271 | margin: auto; | ||
| 272 | bottom: 50rpx; | ||
| 273 | } | ||
| 274 | } | ||
| 275 | } | ||
| 276 | } | ||
| 277 | |||
| 278 | .formbox { | 228 | .formbox { |
| 279 | background: #fff; | 229 | background: #fff; |
| 280 | width: 700rpx; | 230 | width: 700rpx; |
| 281 | padding: 50rpx; | 231 | padding: 30rpx 50rpx; |
| 282 | margin: auto; | 232 | margin: auto; |
| 283 | border-radius: 20rpx; | 233 | border-radius: 20rpx; |
| 234 | .nav{text-align: center;position: relative;padding: 0 0 30rpx; | ||
| 235 | } | ||
| 236 | .nav.active{font-size: 30rpx;color: #AD181F; | ||
| 237 | &::after { | ||
| 238 | content: ''; | ||
| 239 | position: absolute; | ||
| 240 | width: 25rpx; | ||
| 241 | height: 4rpx; | ||
| 242 | background: #AD181F; | ||
| 243 | border-radius: 2rpx; | ||
| 244 | left: 0; | ||
| 245 | right: 0; | ||
| 246 | margin: auto; | ||
| 247 | bottom: 20rpx; | ||
| 248 | } | ||
| 249 | } | ||
| 250 | |||
| 284 | } | 251 | } |
| 285 | 252 | ||
| 286 | .flex-item { | 253 | .flex-item { |
| ... | @@ -367,7 +334,8 @@ function timeup() { | ... | @@ -367,7 +334,8 @@ function timeup() { |
| 367 | } | 334 | } |
| 368 | 335 | ||
| 369 | text { | 336 | text { |
| 370 | font-size: 28rpx; | 337 | font-size: 28rpx; |
| 338 | padding: 0 20rpx; | ||
| 371 | color: #014A9F; | 339 | color: #014A9F; |
| 372 | } | 340 | } |
| 373 | } | 341 | } | ... | ... |
pages/level/addApply.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="pd30"> | ||
| 4 | <uni-steps :options="list1" :active="active" /> | ||
| 5 | <view class="hasfixedbottom"> | ||
| 6 | <view class="wBox" v-if="active == 0"> | ||
| 7 | <uni-forms ref="baseForm" :modelValue="form" label-width="100"> | ||
| 8 | <uni-forms-item label="考试名称"> | ||
| 9 | <view v-if="form.name">{{form.name}}</view> | ||
| 10 | <view v-else class="align-forms-item-placeHolder">自动生成</view> | ||
| 11 | </uni-forms-item> | ||
| 12 | <uni-forms-item label="申请单位" required> | ||
| 13 | <view class="align-forms-item">{{form.memberName}}</view> | ||
| 14 | </uni-forms-item> | ||
| 15 | <uni-forms-item label="申请日期" required> | ||
| 16 | <uni-datetime-picker type="date" v-model="form.applyTime"></uni-datetime-picker> | ||
| 17 | </uni-forms-item> | ||
| 18 | <uni-forms-item label="考试开始时间" required> | ||
| 19 | <uni-datetime-picker type="datetime" v-model="form.startTime"></uni-datetime-picker> | ||
| 20 | </uni-forms-item> | ||
| 21 | <uni-forms-item label="考试结束时间" required> | ||
| 22 | <uni-datetime-picker type="datetime" v-model="form.endTime"></uni-datetime-picker> | ||
| 23 | </uni-forms-item> | ||
| 24 | <uni-forms-item label="考级地点" required> | ||
| 25 | <uni-easyinput v-model="form.examLocation" placeholder="考级地点" /> | ||
| 26 | </uni-forms-item> | ||
| 27 | <uni-forms-item @updateData="updateData" :label="`考官${ec}`" v-for="ec in examinerForChoose" :key="ec"> | ||
| 28 | <view @click="selectFN(ec)" class="mask"> | ||
| 29 | <uni-easyinput v-model="form[`examiner_${ec}`]" clearable placeholder="点击选择考官" /> | ||
| 30 | </view> | ||
| 31 | </uni-forms-item> | ||
| 32 | |||
| 33 | </uni-forms> | ||
| 34 | |||
| 35 | </view> | ||
| 36 | <view class="wBox" v-if="active == 1"> | ||
| 37 | <!-- 添加考生 --> | ||
| 38 | <button class="btn-red-kx">在线选择</button> | ||
| 39 | <view class="vipData"> | ||
| 40 | <view>共<text>{{total}}</text>人</view> | ||
| 41 | </view> | ||
| 42 | <view class="userlist"> | ||
| 43 | <view class="item" v-for="n in list" style="background-color: #fffafa;"> | ||
| 44 | <view class="w100"> | ||
| 45 | <view class="photobox"> | ||
| 46 | <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> | ||
| 47 | <view class="colorful" v-else>{{n.name.slice(0,1)}}</view> | ||
| 48 | </view> | ||
| 49 | <view class="name">{{n.realName}} <text>{{n.code}}</text></view> | ||
| 50 | <view class="date">{{n.idcTypeStr}}:{{n.idcCode}}</view> | ||
| 51 | <view class="flexbox"> | ||
| 52 | <view> | ||
| 53 | 原有级别 | ||
| 54 | <text>{{n}}</text> | ||
| 55 | </view> | ||
| 56 | <view> | ||
| 57 | 考试级别 | ||
| 58 | <uni-data-select | ||
| 59 | v-model="value" | ||
| 60 | :localdata="range" | ||
| 61 | @change="change" | ||
| 62 | ></uni-data-select> | ||
| 63 | </view> | ||
| 64 | |||
| 65 | <view> | ||
| 66 | 是否通过 | ||
| 67 | <uni-data-select | ||
| 68 | v-model="value" | ||
| 69 | :localdata="range" | ||
| 70 | @change="change" | ||
| 71 | ></uni-data-select> | ||
| 72 | </view> | ||
| 73 | </view> | ||
| 74 | </view> | ||
| 75 | |||
| 76 | </view> | ||
| 77 | </view> | ||
| 78 | </view> | ||
| 79 | </view> | ||
| 80 | </view> | ||
| 81 | <view class="fixedBottom"> | ||
| 82 | <button class="btn-red-kx" style="width: 40%;" @click="submitForm(0)">保存</button> | ||
| 83 | <button class="btn-red" style="width: 40%;" @click="submitForm(1)">下一步</button> | ||
| 84 | </view> | ||
| 85 | </view> | ||
| 86 | </template> | ||
| 87 | |||
| 88 | <script setup> | ||
| 89 | import { | ||
| 90 | ref | ||
| 91 | } from 'vue'; | ||
| 92 | import * as api from '@/common/api.js'; | ||
| 93 | import { | ||
| 94 | onLoad, | ||
| 95 | onShow | ||
| 96 | } from '@dcloudio/uni-app'; | ||
| 97 | import { | ||
| 98 | tagList, | ||
| 99 | typeList, | ||
| 100 | comList | ||
| 101 | } from '@/static/js/data'; | ||
| 102 | import config from '@/config.js' | ||
| 103 | import dayjs from 'dayjs' | ||
| 104 | import _ from 'lodash' | ||
| 105 | const app = getApp(); | ||
| 106 | const memberInfo = app.globalData.memberInfo | ||
| 107 | const form = ref({ | ||
| 108 | |||
| 109 | }); | ||
| 110 | const dataList = ref([]); | ||
| 111 | const examinerForChoose = ['A', 'B', 'C'] | ||
| 112 | const examinerArr = [] | ||
| 113 | const active = ref(0) | ||
| 114 | const total = ref(0) | ||
| 115 | const list1 = ref([{ | ||
| 116 | title: '考级基本信息' | ||
| 117 | }, { | ||
| 118 | title: '添加考生' | ||
| 119 | }]) | ||
| 120 | let examId | ||
| 121 | onLoad(option => { | ||
| 122 | console.log(option) | ||
| 123 | if (app.globalData.isLogin) { | ||
| 124 | form.value.memberName = app.globalData.memberInfo.name | ||
| 125 | form.value.applyTime = dayjs().format('YYYY-MM-DD') | ||
| 126 | |||
| 127 | _.each(examinerForChoose, ec => { | ||
| 128 | form.value[`examiner_${ec}`] = null | ||
| 129 | }) | ||
| 130 | if (option.examId) { | ||
| 131 | examId = option.examId | ||
| 132 | |||
| 133 | getDetail() | ||
| 134 | } | ||
| 135 | } else { | ||
| 136 | |||
| 137 | app.firstLoadCallback = () => { | ||
| 138 | form.value.memberName = app.globalData.memberInfo.name | ||
| 139 | form.value.applyTime = dayjs().format('YYYY-MM-DD') | ||
| 140 | |||
| 141 | _.each(examinerForChoose, ec => { | ||
| 142 | form.value[`examiner_${ec}`] = null | ||
| 143 | }) | ||
| 144 | if (option.examId) { | ||
| 145 | examId = option.examId | ||
| 146 | getDetail() | ||
| 147 | } | ||
| 148 | }; | ||
| 149 | } | ||
| 150 | }); | ||
| 151 | onShow(option => { | ||
| 152 | // if(!!option){ | ||
| 153 | // console.log(option) | ||
| 154 | // } | ||
| 155 | uni.$on('chosen', updateData) | ||
| 156 | }) | ||
| 157 | |||
| 158 | function updateData(e) { | ||
| 159 | // console.log(e) | ||
| 160 | examinerArr.push(e.obj) | ||
| 161 | form.value[`examiner_${e.ec}`] = e.obj.name | ||
| 162 | } | ||
| 163 | |||
| 164 | function getDetail() { | ||
| 165 | api.getLevelApplyInfo(examId).then(res => { | ||
| 166 | const data = res.data | ||
| 167 | if (data.examiner) { | ||
| 168 | _.each(data.examiner.split(','), (id) => { | ||
| 169 | examinerArr.push({ | ||
| 170 | perId: id | ||
| 171 | }) | ||
| 172 | }) | ||
| 173 | |||
| 174 | _.each(data.examinerNames.split(','), (name, i) => { | ||
| 175 | data[`examiner_${examinerForChoose[i]}`] = name | ||
| 176 | examinerArr[i].name = name | ||
| 177 | }) | ||
| 178 | } | ||
| 179 | |||
| 180 | form.value = data | ||
| 181 | }) | ||
| 182 | } | ||
| 183 | |||
| 184 | function selectFN(ec) { | ||
| 185 | const chosen = [] | ||
| 186 | const type = form.value.type | ||
| 187 | _.each(examinerForChoose, ec => { | ||
| 188 | const key = `examiner_${ec}` | ||
| 189 | if (form.value[key]) { | ||
| 190 | const examiner = _.find(examinerArr, (e) => { | ||
| 191 | return e.name == form.value[key] | ||
| 192 | }) | ||
| 193 | if (examiner) { | ||
| 194 | chosen.push(examiner) | ||
| 195 | } | ||
| 196 | } | ||
| 197 | }) | ||
| 198 | |||
| 199 | console.log(ec, chosen, type) | ||
| 200 | let path = `/pages/level/chooseExaminer?type=${type}&chosen=${chosen}&ec=${ec}` | ||
| 201 | uni.navigateTo({ | ||
| 202 | url: path | ||
| 203 | }); | ||
| 204 | } | ||
| 205 | |||
| 206 | function submitForm(flag) { | ||
| 207 | form.value.status = '0' | ||
| 208 | const examinerIds = [] | ||
| 209 | const examinerNames = [] | ||
| 210 | _.each(examinerForChoose, ec => { | ||
| 211 | const key = `examiner_${ec}` | ||
| 212 | if (form.value[key]) { | ||
| 213 | const examiner = _.find(examinerArr, (e) => { | ||
| 214 | return e.name == form.value[key] | ||
| 215 | }) | ||
| 216 | if (examiner) { | ||
| 217 | examinerIds.push(examiner.perId) | ||
| 218 | examinerNames.push(examiner.name) | ||
| 219 | } | ||
| 220 | } | ||
| 221 | }) | ||
| 222 | |||
| 223 | if (examinerIds.length > 0) { | ||
| 224 | form.value.examiner = examinerIds.join(',') | ||
| 225 | form.value.examinerNames = examinerNames.join(',') | ||
| 226 | } else { | ||
| 227 | form.value.examiner = null | ||
| 228 | form.value.examinerNames = null | ||
| 229 | } | ||
| 230 | form.value.draftFlag = flag === 0 ? '1' : '0' | ||
| 231 | if (flag === 0) { | ||
| 232 | save() | ||
| 233 | } else { | ||
| 234 | if (dayjs(form.value.startTime).valueOf() < dayjs(form.value.applyTime).valueOf()) { | ||
| 235 | uni.showToast({ | ||
| 236 | title: `考试开始时间应大于申请日期`, | ||
| 237 | icon: 'error' | ||
| 238 | }) | ||
| 239 | return | ||
| 240 | } | ||
| 241 | if (dayjs(form.value.endTime).valueOf() <= dayjs(form.value.startTime).valueOf()) { | ||
| 242 | uni.showToast({ | ||
| 243 | title: `考试结束时间应大于考试开始时间`, | ||
| 244 | icon: 'error' | ||
| 245 | }) | ||
| 246 | return | ||
| 247 | } | ||
| 248 | if (examinerIds.length % 2 === 0) { | ||
| 249 | uni.showToast({ | ||
| 250 | title: `录入的考官人数必须为单数`, | ||
| 251 | icon: 'error' | ||
| 252 | }) | ||
| 253 | return | ||
| 254 | } | ||
| 255 | save().then(() => { | ||
| 256 | // form.value.examId 下一步 | ||
| 257 | active.value == 1 | ||
| 258 | }) | ||
| 259 | } | ||
| 260 | } | ||
| 261 | function save() { | ||
| 262 | if (form.value.examId) { | ||
| 263 | return updateLevelInfo(form.value).then(() => { | ||
| 264 | uni.showToast({ | ||
| 265 | title: `保存成功`, | ||
| 266 | icon: 'none' | ||
| 267 | }) | ||
| 268 | }) | ||
| 269 | } else { | ||
| 270 | return addInfo(form.value).then((res) => { | ||
| 271 | form.value.examId = res.data.examId | ||
| 272 | form.value.name = res.data.name | ||
| 273 | uni.showToast({ | ||
| 274 | title: `保存成功`, | ||
| 275 | icon: 'none' | ||
| 276 | }) | ||
| 277 | }) | ||
| 278 | } | ||
| 279 | } | ||
| 280 | </script> | ||
| 281 | |||
| 282 | <style lang="scss" scoped> | ||
| 283 | .wBox { | ||
| 284 | width: 700rpx; | ||
| 285 | padding: 30rpx; | ||
| 286 | margin: 20rpx auto; | ||
| 287 | background: #FFFFFF; | ||
| 288 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 289 | border-radius: 15rpx; | ||
| 290 | } | ||
| 291 | |||
| 292 | :deep(.uni-forms-item__inner) { | ||
| 293 | padding-bottom: 20rpx; | ||
| 294 | } | ||
| 295 | |||
| 296 | :deep(.uni-forms-item__label .label-text) { | ||
| 297 | font-size: 28rpx !important; | ||
| 298 | } | ||
| 299 | |||
| 300 | :deep(.uni-input-input) { | ||
| 301 | font-size: 30rpx !important; | ||
| 302 | } | ||
| 303 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/level/apply.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="queryParams.name" placeholder="搜索考级名称" @blur="getList" @clear="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | <view class="invertedbtn-red" @click="goAdd">+ 添加级位考试</view> | ||
| 8 | </view> | ||
| 9 | <view class="appList"> | ||
| 10 | <view class="appItem" v-for="item in list"> | ||
| 11 | <view class="status" @click="goDetail(item)"> | ||
| 12 | <text :class="{ | ||
| 13 | 'text-success':item.status=='2', | ||
| 14 | 'text-danger':item.status=='3', | ||
| 15 | 'text-warning':item.status=='4' | ||
| 16 | }">{{ item.statusStr }}</text> | ||
| 17 | </view> | ||
| 18 | |||
| 19 | <view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view> | ||
| 20 | <view class="name mt0" @click="goDetail(item)">{{item.name}}</view> | ||
| 21 | <view class="pp esp">考级日期:{{item.startTime.substring(0,16)}} 至 {{item.endTime.substring(0,16)}}</view> | ||
| 22 | <view class="flexbox" @click="goDetail(item)"> | ||
| 23 | <view> | ||
| 24 | 申请日期 | ||
| 25 | <view>{{item.applyTime.substring(0, 10)}}</view> | ||
| 26 | </view> | ||
| 27 | <view> | ||
| 28 | 申请单位 | ||
| 29 | <view>{{item.memberName}}</view> | ||
| 30 | </view> | ||
| 31 | <view> | ||
| 32 | 通过人数 | ||
| 33 | <view>{{item.pass}}</view> | ||
| 34 | </view> | ||
| 35 | </view> | ||
| 36 | <view class="func" v-if="item.status=='0'||item.status=='3'||item.status=='4'"> | ||
| 37 | <button @click="editThis(item)">编辑</button> | ||
| 38 | <button @click="handleSubmit(item)">提交审核</button> | ||
| 39 | </view> | ||
| 40 | </view> | ||
| 41 | </view> | ||
| 42 | |||
| 43 | |||
| 44 | |||
| 45 | <view class="nodata" v-if="list.length==0"> | ||
| 46 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 47 | <text>暂无数据</text> | ||
| 48 | </view> | ||
| 49 | </view> | ||
| 50 | </template> | ||
| 51 | |||
| 52 | <script setup> | ||
| 53 | import * as api from '@/common/api.js' | ||
| 54 | import config from '@/config.js' | ||
| 55 | import { | ||
| 56 | onMounted, | ||
| 57 | ref | ||
| 58 | } from 'vue' | ||
| 59 | import { | ||
| 60 | onLoad, | ||
| 61 | onShow | ||
| 62 | } from '@dcloudio/uni-app' | ||
| 63 | const app = getApp(); | ||
| 64 | const queryParams = ref({ | ||
| 65 | // pageNum: 1, | ||
| 66 | // pageSize: 10 | ||
| 67 | type: '1', | ||
| 68 | rankStatus: '0' | ||
| 69 | }) | ||
| 70 | const navs = ref(['未提交', '审核中', '审核通过', '审核拒绝']) | ||
| 71 | const current = ref() | ||
| 72 | const list = ref([]) | ||
| 73 | const total = ref(0) | ||
| 74 | const deptType = ref('') | ||
| 75 | onLoad(() => { | ||
| 76 | |||
| 77 | }) | ||
| 78 | onShow(() => { | ||
| 79 | if (app.globalData.isLogin) { | ||
| 80 | init() | ||
| 81 | } else { | ||
| 82 | |||
| 83 | app.firstLoadCallback = () => { | ||
| 84 | init() | ||
| 85 | }; | ||
| 86 | } | ||
| 87 | }) | ||
| 88 | |||
| 89 | function init() { | ||
| 90 | uni.showLoading({ | ||
| 91 | title: '加载中' | ||
| 92 | }) | ||
| 93 | deptType.value = app.globalData.deptType | ||
| 94 | getList() | ||
| 95 | } | ||
| 96 | |||
| 97 | |||
| 98 | function getList() { | ||
| 99 | api.getLevelList(queryParams.value).then(res => { | ||
| 100 | uni.hideLoading() | ||
| 101 | list.value = res.rows | ||
| 102 | total.value = res.total | ||
| 103 | }) | ||
| 104 | } | ||
| 105 | |||
| 106 | function goAdd() { | ||
| 107 | let path = `/pages/level/addApply` | ||
| 108 | uni.navigateTo({ | ||
| 109 | url: path | ||
| 110 | }); | ||
| 111 | } | ||
| 112 | |||
| 113 | function editThis(item) { | ||
| 114 | let path = `/pages/level/addApply?examId=${item.examId}` | ||
| 115 | uni.navigateTo({ | ||
| 116 | url: path | ||
| 117 | }); | ||
| 118 | } | ||
| 119 | function handleSubmit(item){ | ||
| 120 | uni.showModal({ | ||
| 121 | title: '提示', | ||
| 122 | content: `确定提交${item.name}进行审核吗`, | ||
| 123 | success: function(res) { | ||
| 124 | if (res.confirm) { | ||
| 125 | uni.showLoading({ | ||
| 126 | title:`提交中` | ||
| 127 | }) | ||
| 128 | upApply(item.examId) | ||
| 129 | } | ||
| 130 | } | ||
| 131 | }) | ||
| 132 | } | ||
| 133 | function upApply(id){ | ||
| 134 | api.submitVerity(id).then(res=>{ | ||
| 135 | uni.hideLoading() | ||
| 136 | getList() | ||
| 137 | uni.showToast({ | ||
| 138 | title:`提交成功` | ||
| 139 | }) | ||
| 140 | }) | ||
| 141 | } | ||
| 142 | |||
| 143 | |||
| 144 | function goDetail(item) { | ||
| 145 | if(item.status!='0'){ | ||
| 146 | let path = `/pages/level/applyDetail?examId=${item.examId}` | ||
| 147 | uni.navigateTo({ | ||
| 148 | url: path | ||
| 149 | }); | ||
| 150 | } else { | ||
| 151 | return | ||
| 152 | } | ||
| 153 | |||
| 154 | } | ||
| 155 | </script> | ||
| 156 | |||
| 157 | |||
| 158 | <style scoped> | ||
| 159 | .searchbar { | ||
| 160 | display: flex; | ||
| 161 | align-items: center; | ||
| 162 | padding: 25rpx; | ||
| 163 | box-sizing: border-box; | ||
| 164 | |||
| 165 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 166 | border-radius: 35rpx; | ||
| 167 | border: none; | ||
| 168 | height: 70rpx; | ||
| 169 | } | ||
| 170 | |||
| 171 | :deep(.uni-easyinput__content-input) { | ||
| 172 | font-size: 26rpx; | ||
| 173 | } | ||
| 174 | |||
| 175 | .invertedbtn-red { | ||
| 176 | border-radius: 50px; | ||
| 177 | background-color: #fff; | ||
| 178 | |||
| 179 | font-size: 30rpx; | ||
| 180 | padding: 10rpx 20rpx; | ||
| 181 | } | ||
| 182 | } | ||
| 183 | |||
| 184 | .mt0 { | ||
| 185 | margin-top: 0 !important; | ||
| 186 | } | ||
| 187 | |||
| 188 | .appList .appItem .name { | ||
| 189 | width: 80%; | ||
| 190 | word-break: break-all; | ||
| 191 | } | ||
| 192 | </style> |
pages/level/applyDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="wBox"> | ||
| 4 | <view class="tt">考级基本信息</view> | ||
| 5 | <view class="ddd"> | ||
| 6 | <text class="lab">考级名称:</text>{{ form.name }} | ||
| 7 | </view> | ||
| 8 | <view class="ddd"> | ||
| 9 | <text class="lab">申请日期:</text>{{form.applyTime}} | ||
| 10 | </view> | ||
| 11 | <view class="ddd"> | ||
| 12 | <text class="lab">申请单位:</text>{{ form.memberName }} | ||
| 13 | </view> | ||
| 14 | <view class="ddd"> | ||
| 15 | <text class="lab">考官:</text>{{form.examinerNames?.split(',').join('/')}} | ||
| 16 | </view> | ||
| 17 | <view class="ddd"> | ||
| 18 | <text class="lab">考试开始时间:</text>{{form.startTime}} | ||
| 19 | </view> | ||
| 20 | <view class="ddd"> | ||
| 21 | <text class="lab">考试结束时间:</text>{{form.endTime}} | ||
| 22 | </view> | ||
| 23 | <view class="ddd"> | ||
| 24 | <text class="lab">考级地点:</text>{{form.address}} | ||
| 25 | </view> | ||
| 26 | <view class="ddd" v-if="app.globalData.showPrice"> | ||
| 27 | <text class="lab">总金额:</text>{{(form.totalAmount*1).toFixed(2) }} | ||
| 28 | </view> | ||
| 29 | </view> | ||
| 30 | <view class="wBox"> | ||
| 31 | <view class="tt"> | ||
| 32 | 考生信息 | ||
| 33 | </view> | ||
| 34 | <view class="vipData"> | ||
| 35 | <view>共 <text>{{ tablePersonInfo.total }}</text>人</view> | ||
| 36 | <view v-for="l in tablePersonInfo.levelArr" :key="l.level"> | ||
| 37 | {{ szToHz(l.level) }}级: <text>{{ l.num }} </text>人 | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | <view class="userlist"> | ||
| 41 | <view class="item" v-for="n in list" style="background-color: #fffafa;"> | ||
| 42 | <view class="w100"> | ||
| 43 | <view class="name">{{n.realName}} <text>{{n.memName}}</text></view> | ||
| 44 | <!-- <view class="date">{{n.idcTypeStr}}:{{n.idcCode}}</view> --> | ||
| 45 | <view class="flexbox"> | ||
| 46 | <view> | ||
| 47 | 原有级别 | ||
| 48 | <text v-if="n.levelOld">{{ szToHz(n.levelOld) }}级</text> | ||
| 49 | <text v-else>十级</text> | ||
| 50 | </view> | ||
| 51 | <view> | ||
| 52 | 考试级别 | ||
| 53 | <text> | ||
| 54 | {{ szToHz(n.levelNew) }}级 | ||
| 55 | </text> | ||
| 56 | </view> | ||
| 57 | <view v-if="app.globalData.showPrice"> | ||
| 58 | 金额 | ||
| 59 | <text> | ||
| 60 | {{ (n.examFee * 1).toFixed(2) }} | ||
| 61 | </text> | ||
| 62 | </view> | ||
| 63 | <view> | ||
| 64 | 是否通过 | ||
| 65 | <text v-if="n.isPass=='1'" class="text-success">通过</text> | ||
| 66 | <text v-else class="text-danger">未通过</text> | ||
| 67 | </view> | ||
| 68 | </view> | ||
| 69 | </view> | ||
| 70 | |||
| 71 | </view> | ||
| 72 | </view> | ||
| 73 | |||
| 74 | </view> | ||
| 75 | <view class="wBox"> | ||
| 76 | <view class="tt"> | ||
| 77 | 审核信息 | ||
| 78 | </view> | ||
| 79 | <view> | ||
| 80 | <view class="stepItem" v-for="(n,index) in recordList"> | ||
| 81 | <view class="time">{{n.handleDate||'待审批'}}</view> | ||
| 82 | <view class="content"> | ||
| 83 | <view class="status"> | ||
| 84 | <text :class="{ | ||
| 85 | 'text-success':n.auditStatus=='1', | ||
| 86 | 'text-danger':n.auditStatus=='2', | ||
| 87 | 'text-warning':n.auditStatus=='3' | ||
| 88 | }">{{ n.auditStatusStr }}</text> | ||
| 89 | </view> | ||
| 90 | <!-- <view class="name">第 {{index+1}} 步</view> --> | ||
| 91 | <view class="deptName">{{n.deptName}}</view> | ||
| 92 | <view v-if="n.auditStatus==2"> | ||
| 93 | 备注:{{n.reason||'/' }} | ||
| 94 | </view> | ||
| 95 | </view> | ||
| 96 | </view> | ||
| 97 | </view> | ||
| 98 | </view> | ||
| 99 | |||
| 100 | </view> | ||
| 101 | </template> | ||
| 102 | |||
| 103 | <script setup> | ||
| 104 | import * as api from '@/common/api.js' | ||
| 105 | import config from '@/config.js' | ||
| 106 | import _ from 'lodash' | ||
| 107 | import { | ||
| 108 | onMounted, | ||
| 109 | ref | ||
| 110 | } from 'vue' | ||
| 111 | import { | ||
| 112 | onLoad, | ||
| 113 | onShow | ||
| 114 | } from '@dcloudio/uni-app' | ||
| 115 | const app = getApp(); | ||
| 116 | const deptType = ref('') | ||
| 117 | const form = ref({}) | ||
| 118 | const tablePersonInfo = ref({}) | ||
| 119 | const recordList = ref([]) | ||
| 120 | const list = ref([]) | ||
| 121 | let examId = '' | ||
| 122 | onLoad((option) => { | ||
| 123 | examId = option.examId | ||
| 124 | }) | ||
| 125 | onShow(() => { | ||
| 126 | if (app.globalData.isLogin) { | ||
| 127 | init() | ||
| 128 | } else { | ||
| 129 | app.firstLoadCallback = () => { | ||
| 130 | init() | ||
| 131 | }; | ||
| 132 | } | ||
| 133 | }) | ||
| 134 | |||
| 135 | function init() { | ||
| 136 | uni.showLoading({ | ||
| 137 | title: '加载中' | ||
| 138 | }) | ||
| 139 | deptType.value = app.globalData.deptType | ||
| 140 | getForm() | ||
| 141 | getRecordList() | ||
| 142 | getTablePersonInfo() | ||
| 143 | } | ||
| 144 | |||
| 145 | function getForm() { | ||
| 146 | api.getLevelApplyInfo(examId).then(res => { | ||
| 147 | uni.hideLoading() | ||
| 148 | form.value = res.data | ||
| 149 | }) | ||
| 150 | } | ||
| 151 | |||
| 152 | function getRecordList() { | ||
| 153 | api.getApprovalRecord(examId).then(res => { | ||
| 154 | recordList.value = res.data.levelSteps | ||
| 155 | }) | ||
| 156 | } | ||
| 157 | function getTablePersonInfo() { | ||
| 158 | api.getStudentList({ | ||
| 159 | examId: examId | ||
| 160 | }).then(res=>{ | ||
| 161 | list.value = res.rows | ||
| 162 | |||
| 163 | const total = list.value.length | ||
| 164 | const levelArr = [] | ||
| 165 | _.each(list.value, (d) => { | ||
| 166 | const temp = _.find(levelArr, (l) => { | ||
| 167 | return l.level == d.levelNew | ||
| 168 | }) | ||
| 169 | if (temp) { | ||
| 170 | temp.num++ | ||
| 171 | } else { | ||
| 172 | levelArr.push({ | ||
| 173 | level: d.levelNew, | ||
| 174 | num: 1 | ||
| 175 | }) | ||
| 176 | } | ||
| 177 | }) | ||
| 178 | |||
| 179 | tablePersonInfo.value = { | ||
| 180 | total: total, | ||
| 181 | levelArr: _.sortBy(levelArr, (l) => { | ||
| 182 | return l.level | ||
| 183 | }) | ||
| 184 | } | ||
| 185 | }) | ||
| 186 | } | ||
| 187 | function szToHz(num) { | ||
| 188 | const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'] | ||
| 189 | return hzArr[parseInt(num)] | ||
| 190 | } | ||
| 191 | </script> | ||
| 192 | |||
| 193 | <style scoped> | ||
| 194 | .wBox { | ||
| 195 | width: 700rpx; | ||
| 196 | padding: 30rpx; | ||
| 197 | margin: 20rpx auto; | ||
| 198 | background: #FFFFFF; | ||
| 199 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 200 | border-radius: 15rpx; | ||
| 201 | |||
| 202 | .tt { | ||
| 203 | color: #0A1629;margin: 0 0 30rpx; | ||
| 204 | font-size: 30rpx; | ||
| 205 | } | ||
| 206 | |||
| 207 | .ddd{font-size: 28rpx;color: #333; | ||
| 208 | .lab{color: #999;display: inline-block;text-align: justify;} | ||
| 209 | } | ||
| 210 | } | ||
| 211 | |||
| 212 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/level/approval.vue
0 → 100644
pages/level/chooseExaminer.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="query.idcCode" placeholder="证件号码" @blur="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | </view> | ||
| 8 | <view class="indexboxre"> | ||
| 9 | <view class="userlist"> | ||
| 10 | <view class="item" v-for="n in list"> | ||
| 11 | <view class="photobox"> | ||
| 12 | <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> | ||
| 13 | <view class="colorful" v-else>{{n.name.slice(1,2)}}</view> | ||
| 14 | </view> | ||
| 15 | <view> | ||
| 16 | <view class="name">{{n.name}}</view> | ||
| 17 | <view class="date">会员号:{{n.perCode}}</view> | ||
| 18 | </view> | ||
| 19 | <view class="status"> | ||
| 20 | <text v-if="checkChosen(n)">选择</text> | ||
| 21 | <text v-else class="text-primary" @click="handleChoose(n)">选择</text> | ||
| 22 | |||
| 23 | </view> | ||
| 24 | </view> | ||
| 25 | </view> | ||
| 26 | <view class="nodata" v-if="list.length==0"> | ||
| 27 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 28 | <text>请输入证件号查找</text> | ||
| 29 | </view> | ||
| 30 | </view> | ||
| 31 | |||
| 32 | </view> | ||
| 33 | </template> | ||
| 34 | |||
| 35 | <script setup> | ||
| 36 | import * as api from '@/common/api.js' | ||
| 37 | import { | ||
| 38 | ref, | ||
| 39 | getCurrentInstance | ||
| 40 | } from 'vue' | ||
| 41 | import { | ||
| 42 | onLoad | ||
| 43 | } from '@dcloudio/uni-app' | ||
| 44 | import _ from 'lodash' | ||
| 45 | const { | ||
| 46 | proxy | ||
| 47 | } = getCurrentInstance() | ||
| 48 | const app = getApp(); | ||
| 49 | const query = ref({ | ||
| 50 | |||
| 51 | }) | ||
| 52 | const list = ref([]) | ||
| 53 | const total = ref(0) | ||
| 54 | const userType = ref('') | ||
| 55 | let chosen = [] | ||
| 56 | let ec = null | ||
| 57 | onLoad((options) => { | ||
| 58 | console.log(options) | ||
| 59 | query.value.type = options.type | ||
| 60 | chosen = options.chosen || [] | ||
| 61 | ec = options.ec | ||
| 62 | }) | ||
| 63 | |||
| 64 | function getList() { | ||
| 65 | if (!query.value.idcCode) { | ||
| 66 | return | ||
| 67 | } | ||
| 68 | uni.showLoading({ | ||
| 69 | title: `查找中` | ||
| 70 | }) | ||
| 71 | api.getCoachList(query.value).then(res => { | ||
| 72 | uni.hideLoading() | ||
| 73 | if (res.data.length == 0) { | ||
| 74 | uni.showToast({ | ||
| 75 | title: '未查询到考官信息', | ||
| 76 | icon: "error" | ||
| 77 | }) | ||
| 78 | return | ||
| 79 | } | ||
| 80 | list.value = res.data | ||
| 81 | }) | ||
| 82 | } | ||
| 83 | |||
| 84 | function checkChosen(n) { | ||
| 85 | return _.some(chosen, (c) => { | ||
| 86 | return c.perId == n.perId | ||
| 87 | }) | ||
| 88 | } | ||
| 89 | |||
| 90 | function handleChoose(row) { | ||
| 91 | var pages = getCurrentPages() | ||
| 92 | var prevPage = pages[pages.length - 2] | ||
| 93 | var obj = { | ||
| 94 | perId: row.perId, | ||
| 95 | name: row.name, | ||
| 96 | } | ||
| 97 | |||
| 98 | // prevPage.onShow(obj) | ||
| 99 | uni.$emit('chosen',{ | ||
| 100 | obj:obj, | ||
| 101 | ec | ||
| 102 | }) | ||
| 103 | uni.navigateBack({delta:1}) | ||
| 104 | } | ||
| 105 | |||
| 106 | function handleInfo(n) { | ||
| 107 | uni.navigateTo({ | ||
| 108 | url: `/pages/personalVip/detail?perId=${n.perId}` | ||
| 109 | }) | ||
| 110 | } | ||
| 111 | </script> | ||
| 112 | |||
| 113 | <style scoped lang="scss"> | ||
| 114 | .indexboxre { | ||
| 115 | padding: 0 30rpx; | ||
| 116 | |||
| 117 | .tt { | ||
| 118 | font-size: 30rpx; | ||
| 119 | margin: 0 0 30rpx; | ||
| 120 | color: #4C5359; | ||
| 121 | } | ||
| 122 | |||
| 123 | position: relative; | ||
| 124 | height: calc(100vh - 300rpx); | ||
| 125 | } | ||
| 126 | |||
| 127 | .searchbar { | ||
| 128 | display: flex; | ||
| 129 | align-items: center; | ||
| 130 | padding: 25rpx; | ||
| 131 | box-sizing: border-box; | ||
| 132 | |||
| 133 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 134 | border-radius: 35rpx; | ||
| 135 | border: none; | ||
| 136 | height: 70rpx; | ||
| 137 | } | ||
| 138 | |||
| 139 | :deep(.uni-easyinput__content-input) { | ||
| 140 | font-size: 26rpx; | ||
| 141 | } | ||
| 142 | } | ||
| 143 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/addMobilize.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <view class="nolineform"> | ||
| 4 | <uni-forms :border="true" :modelValue="baseFormData" label-width="120"> | ||
| 5 | <uni-forms-item label="姓名" required name="name"> | ||
| 6 | <uni-easyinput :styles="inputstyle" :clearable='false' :placeholderStyle="placeholderStyle" | ||
| 7 | v-model="baseFormData.name" placeholder="请输入姓名" /> | ||
| 8 | </uni-forms-item> | ||
| 9 | <uni-forms-item label="证件类型" required name="idcType"> | ||
| 10 | <uni-data-select v-model="baseFormData.idcType" :localdata="idcTypeList" | ||
| 11 | :clear="false"></uni-data-select> | ||
| 12 | </uni-forms-item> | ||
| 13 | <uni-forms-item label="证件号码" required name="idcCode"> | ||
| 14 | <uni-easyinput :styles="inputstyle" :clearable='false' :placeholderStyle="placeholderStyle" | ||
| 15 | v-model="baseFormData.idcCode" placeholder="请输入证件号码" /> | ||
| 16 | </uni-forms-item> | ||
| 17 | </uni-forms> | ||
| 18 | <view class="button-group"> | ||
| 19 | <button type="primary" size="mini" @click="selectMember">查询</button> | ||
| 20 | <button type="primary" size="mini" :disabled="flag" @click="submitForm">添加</button> | ||
| 21 | </view> | ||
| 22 | </view> | ||
| 23 | <view class="wBox"> | ||
| 24 | <view class="info"> | ||
| 25 | <view>人数合计 <text class="text-danger"> {{ total}} </text> 人</view> | ||
| 26 | </view> | ||
| 27 | <uni-swipe-action> | ||
| 28 | <uni-swipe-action-item class="personitem" v-for="n in list"> | ||
| 29 | <view class="content-box" @click="handleInfo(n)"> | ||
| 30 | <view class="flexbox"> | ||
| 31 | <view class="photobox"> | ||
| 32 | <view class="colorful">{{n.perName?.slice(0,1)}}</view> | ||
| 33 | </view> | ||
| 34 | <view> | ||
| 35 | {{n.perName}} | ||
| 36 | <view class="date"> | ||
| 37 | {{idcTypeList[n.perIdcType].text}}: {{n.perIdcCode}} | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | </view> | ||
| 41 | |||
| 42 | |||
| 43 | </view> | ||
| 44 | <template v-slot:right> | ||
| 45 | <view class="slot-button"> | ||
| 46 | <view class="danger-button" @click="handleDelete(n)"> | ||
| 47 | <uni-icons type="trash" color="#fff" size="20"></uni-icons> | ||
| 48 | <text class="slot-button-text">删除</text> | ||
| 49 | </view> | ||
| 50 | </view> | ||
| 51 | </template> | ||
| 52 | </uni-swipe-action-item> | ||
| 53 | </uni-swipe-action> | ||
| 54 | |||
| 55 | </view> | ||
| 56 | </view> | ||
| 57 | <view class="fixedBottom"> | ||
| 58 | <button class="btn-red" :disabled="list?.length <= 0" @click="commitFN">保存并提交</button> | ||
| 59 | </view> | ||
| 60 | </template> | ||
| 61 | |||
| 62 | <script setup> | ||
| 63 | import { | ||
| 64 | ref | ||
| 65 | } from 'vue' | ||
| 66 | import { | ||
| 67 | onLoad | ||
| 68 | } from '@dcloudio/uni-app' | ||
| 69 | import * as api from '@/common/api.js' | ||
| 70 | const inputstyle = ref({ | ||
| 71 | borderColor: '#fff', | ||
| 72 | fontSize: '30rpx' | ||
| 73 | }) | ||
| 74 | const placeholderStyle = ref('text-align: right;font-size:30rpx') | ||
| 75 | |||
| 76 | const idcTypeList = ref([{ | ||
| 77 | value: '0', | ||
| 78 | text: "身份证" | ||
| 79 | }, | ||
| 80 | { | ||
| 81 | value: '1', | ||
| 82 | text: "港澳台通信身份证" | ||
| 83 | }, | ||
| 84 | { | ||
| 85 | value: '2', | ||
| 86 | text: "中国护照" | ||
| 87 | }, | ||
| 88 | { | ||
| 89 | value: '3', | ||
| 90 | text: "外国护照" | ||
| 91 | } | ||
| 92 | ]) | ||
| 93 | const baseFormData = ref({ | ||
| 94 | idcType: '0' | ||
| 95 | }) | ||
| 96 | const list = ref([]) | ||
| 97 | const total = ref(0) | ||
| 98 | const flag = ref(true) | ||
| 99 | const queryParams = ref({ | ||
| 100 | rangeId: -1 | ||
| 101 | }) | ||
| 102 | onLoad((option) => { | ||
| 103 | if (option.rangId) { | ||
| 104 | baseFormData.value.rangeId = option.rangId | ||
| 105 | queryParams.value.rangeId = option.rangId | ||
| 106 | getList() | ||
| 107 | } | ||
| 108 | }) | ||
| 109 | // 查询会员 | ||
| 110 | function selectMember() { | ||
| 111 | if (!baseFormData.value.name) { | ||
| 112 | uni.showToast({ | ||
| 113 | title: '请输入姓名', | ||
| 114 | icon: 'none' | ||
| 115 | }) | ||
| 116 | return | ||
| 117 | } | ||
| 118 | |||
| 119 | if (!baseFormData.value.idcCode) { | ||
| 120 | uni.showToast({ | ||
| 121 | title: '请输入证件号', | ||
| 122 | icon: 'none' | ||
| 123 | }) | ||
| 124 | return | ||
| 125 | } | ||
| 126 | |||
| 127 | |||
| 128 | api.pickUp(baseFormData.value).then(res => { | ||
| 129 | baseFormData.value.perId = res.data.perId | ||
| 130 | baseFormData.value.ancestorNameList = res.data.ancestorNameList | ||
| 131 | baseFormData.value.memName = res.data.memName | ||
| 132 | baseFormData.value.personIdArray = res.data.perId | ||
| 133 | flag.value = false | ||
| 134 | uni.showToast({ | ||
| 135 | title: '查询成功!' | ||
| 136 | }) | ||
| 137 | }) | ||
| 138 | } | ||
| 139 | |||
| 140 | function submitForm() { | ||
| 141 | if (!baseFormData.value.name) { | ||
| 142 | uni.showToast({ | ||
| 143 | title: '请输入姓名', | ||
| 144 | icon: 'none' | ||
| 145 | }) | ||
| 146 | return | ||
| 147 | } | ||
| 148 | |||
| 149 | if (!baseFormData.value.idcCode) { | ||
| 150 | uni.showToast({ | ||
| 151 | title: '请输入证件号', | ||
| 152 | icon: 'none' | ||
| 153 | }) | ||
| 154 | return | ||
| 155 | } | ||
| 156 | api.addTransferToRange({ | ||
| 157 | rangeId: baseFormData.value.rangeId || -1, | ||
| 158 | personIdArray: baseFormData.value.personIdArray | ||
| 159 | }).then(res => { | ||
| 160 | baseFormData.value.rangeId = res.data | ||
| 161 | queryParams.value.rangeId = res.data | ||
| 162 | flag.value = true | ||
| 163 | baseFormData.value.idcType = '0' | ||
| 164 | baseFormData.value.idcCode = '' | ||
| 165 | baseFormData.value.name = '' | ||
| 166 | getList() | ||
| 167 | }) | ||
| 168 | } | ||
| 169 | |||
| 170 | function getList() { | ||
| 171 | api.getTransferList(queryParams.value).then(res => { | ||
| 172 | list.value = res.rows | ||
| 173 | total.value = res.total | ||
| 174 | }) | ||
| 175 | } | ||
| 176 | function commitFN() { | ||
| 177 | if (baseFormData.value.rangeId == -1) return | ||
| 178 | api.commit([baseFormData.value.rangeId] || [queryParams.value.rangeId]).then(res=>{ | ||
| 179 | uni.showToast({ | ||
| 180 | title: '提交成功!' | ||
| 181 | }) | ||
| 182 | uni.navigateBack() | ||
| 183 | }) | ||
| 184 | } | ||
| 185 | </script> | ||
| 186 | |||
| 187 | <style scoped lang="scss"> | ||
| 188 | .wBox { | ||
| 189 | width: 700rpx; | ||
| 190 | padding: 30rpx; | ||
| 191 | margin: 20rpx auto 0; | ||
| 192 | background: #FFFFFF; | ||
| 193 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 194 | border-radius: 15rpx; | ||
| 195 | |||
| 196 | .tt { | ||
| 197 | color: #0A1629; | ||
| 198 | font-size: 30rpx; | ||
| 199 | } | ||
| 200 | } | ||
| 201 | |||
| 202 | .button-group { | ||
| 203 | text-align: right; | ||
| 204 | |||
| 205 | button { | ||
| 206 | margin-left: 30rpx; | ||
| 207 | } | ||
| 208 | } | ||
| 209 | |||
| 210 | .info { | ||
| 211 | display: flex; | ||
| 212 | margin: 30rpx 0 20rpx; | ||
| 213 | font-size: 28rpx; | ||
| 214 | |||
| 215 | view { | ||
| 216 | color: #7D8592; | ||
| 217 | margin-right: 20rpx; | ||
| 218 | } | ||
| 219 | } | ||
| 220 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -119,9 +119,9 @@ | ... | @@ -119,9 +119,9 @@ |
| 119 | const regionsList = ref([]) | 119 | const regionsList = ref([]) |
| 120 | const baseFormData = ref({ | 120 | const baseFormData = ref({ |
| 121 | sex: '0', | 121 | sex: '0', |
| 122 | idcType: '0' | 122 | idcType: '0', |
| 123 | perType: '1', // (1:个人会员;2:教练;3:考官;4:裁判;5:临时会员;) | ||
| 123 | }) | 124 | }) |
| 124 | const baseFormData2 = ref({}) | ||
| 125 | const items = ref(['手动录入', '自动录入']) | 125 | const items = ref(['手动录入', '自动录入']) |
| 126 | const idcTypeList = ref([{ | 126 | const idcTypeList = ref([{ |
| 127 | value: '0', | 127 | value: '0', |
| ... | @@ -185,26 +185,21 @@ | ... | @@ -185,26 +185,21 @@ |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | function changeAgree(item) { | 187 | function changeAgree(item) { |
| 188 | if (agree.value) { | 188 | agree.value = !item |
| 189 | agree.value = false | ||
| 190 | } else { | ||
| 191 | agree.value = true | ||
| 192 | } | ||
| 193 | // item = !item | ||
| 194 | } | 189 | } |
| 195 | 190 | ||
| 196 | //身份证识别 | 191 | //身份证识别 |
| 197 | function upIdCardImgFront(e) { | 192 | function upIdCardImgFront(e) { |
| 198 | baseFormData.value.card = e.tempFiles; | 193 | baseFormData.value.card = e.tempFiles; |
| 199 | console.log(e.tempFiles[0].file) | 194 | // console.log(e) |
| 200 | const formData = new FormData() | 195 | // const formData = new FormData() |
| 201 | formData.append('pic', e.tempFiles[0].file) | 196 | // formData.append('pic', e.tempFiles[0].file) |
| 202 | api.carUrl(formData, baseFormData.value.idcType).then(res => { | 197 | api.carUrl(e.tempFilePaths[0], baseFormData.value.idcType).then(res => { |
| 203 | baseFormData.value.idcUrl = res.data.url | 198 | baseFormData.value.idcUrl = res.data.url |
| 204 | baseFormData.value.sex = res.data.sex | 199 | baseFormData.value.sex = res.data.sex |
| 205 | baseFormData.value.birth = res.data.birth | 200 | baseFormData.value.birth = res.data.birth |
| 206 | baseFormData.value.idcCode = res.data.code | 201 | baseFormData.value.idcCode = res.data.code |
| 207 | baseFormDatabaseFormData.value.cityId = res.data.cityId | 202 | baseFormData.value.cityId = res.data.cityId |
| 208 | baseFormData.value.address = res.data.address | 203 | baseFormData.value.address = res.data.address |
| 209 | baseFormData.value.photo = res.data.photo | 204 | baseFormData.value.photo = res.data.photo |
| 210 | baseFormData.value.name = res.data.name | 205 | baseFormData.value.name = res.data.name |
| ... | @@ -216,9 +211,9 @@ | ... | @@ -216,9 +211,9 @@ |
| 216 | } | 211 | } |
| 217 | 212 | ||
| 218 | function upPhoto(e) { | 213 | function upPhoto(e) { |
| 219 | // api.uploadImg(e).then(data => { | 214 | api.uploadImg(e).then(data => { |
| 220 | // baseFormData.value.photo = data.data; | 215 | baseFormData.value.photo = data.data; |
| 221 | // }); | 216 | }); |
| 222 | } | 217 | } |
| 223 | 218 | ||
| 224 | function delimgFont(n) { | 219 | function delimgFont(n) { |
| ... | @@ -292,8 +287,9 @@ | ... | @@ -292,8 +287,9 @@ |
| 292 | uni.showModal({ | 287 | uni.showModal({ |
| 293 | content: '确认信息正确', | 288 | content: '确认信息正确', |
| 294 | success: function(res) { | 289 | success: function(res) { |
| 295 | if (res.confirm) { | 290 | if (res.confirm) { |
| 296 | api.addPersonToMyDept().then(res => { | 291 | delete baseFormData.value |
| 292 | api.addPersonToMyDept(baseFormData.value).then(res => { | ||
| 297 | if (res.data == 0) { | 293 | if (res.data == 0) { |
| 298 | let msg = '该成员,实名认证未通过,注册失败!' | 294 | let msg = '该成员,实名认证未通过,注册失败!' |
| 299 | resultDialog.value = true | 295 | resultDialog.value = true |
| ... | @@ -399,6 +395,6 @@ | ... | @@ -399,6 +395,6 @@ |
| 399 | } | 395 | } |
| 400 | 396 | ||
| 401 | :deep(.selected-list) { | 397 | :deep(.selected-list) { |
| 402 | justify-content: end; | 398 | justify-content: flex-end; |
| 403 | } | 399 | } |
| 404 | </style> | 400 | </style> |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
pages/personalVip/audit.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" styleType="text" activeColor="#AD181F"></uni-segmented-control> | ||
| 4 | |||
| 5 | <!-- 缴费审核 --> | ||
| 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.auditStatus==0" class="text-primary">审核中</text> | ||
| 10 | <text v-if="item.auditStatus==1" class="text-success"> 审核通过</text> | ||
| 11 | <text v-if="item.auditStatus==2" class="text-danger"> 审核拒绝</text> | ||
| 12 | <text v-if="item.auditStatus==3" class="text-warning">已退回</text> | ||
| 13 | </view> | ||
| 14 | <view class="date" @click="goDetail(item)"> | ||
| 15 | <uni-icons type="calendar" size="16" color="#7D8592"></uni-icons> | ||
| 16 | {{item.content.commitTime}} 提交 | ||
| 17 | </view> | ||
| 18 | <view class="name" @click="goDetail(item)">{{item.content.name}}</view> | ||
| 19 | <view class="flexbox" @click="goDetail(item)"> | ||
| 20 | <view> | ||
| 21 | 人数合计 | ||
| 22 | <view>{{item.content.personCount}}</view> | ||
| 23 | </view> | ||
| 24 | <view> | ||
| 25 | 年限合计 | ||
| 26 | <view>{{item.content.totalYear}}</view> | ||
| 27 | </view> | ||
| 28 | <view> | ||
| 29 | 提交单位 | ||
| 30 | <view>{{item.content.memberName}}</view> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | <view class="func" v-if="item.auditStatus==0"> | ||
| 34 | <button @click="audit(item.recordId,'0')">拒绝</button> | ||
| 35 | <button @click="audit(item.recordId,'1')">同意</button> | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | |||
| 40 | |||
| 41 | |||
| 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 queryParams = ref({ | ||
| 61 | // pageNum: 1, | ||
| 62 | // pageSize: 10 | ||
| 63 | auditStatus: '0' | ||
| 64 | }) | ||
| 65 | const navs = ref(['待审核','审核通过','审核拒绝','退回']) | ||
| 66 | const list = ref([]) | ||
| 67 | const total = ref(0) | ||
| 68 | const deptType = ref('') | ||
| 69 | onLoad(() => { | ||
| 70 | if (app.globalData.isLogin) { | ||
| 71 | init() | ||
| 72 | } else { | ||
| 73 | |||
| 74 | app.firstLoadCallback = () => { | ||
| 75 | init() | ||
| 76 | }; | ||
| 77 | } | ||
| 78 | }) | ||
| 79 | function init(){ | ||
| 80 | deptType.value = app.globalData.deptType | ||
| 81 | getList() | ||
| 82 | } | ||
| 83 | function onClickItem(e){ | ||
| 84 | console.log(e) | ||
| 85 | queryParams.value.auditStatus = e.currentIndex | ||
| 86 | getList() | ||
| 87 | } | ||
| 88 | function getList() { | ||
| 89 | if(deptType.value==2||deptType.value==3){ | ||
| 90 | queryParams.value.mergeFlag = 0 | ||
| 91 | } | ||
| 92 | api.getVerifyList(queryParams.value).then(res => { | ||
| 93 | list.value = res.rows | ||
| 94 | list.value.forEach(item => { | ||
| 95 | item.content = JSON.parse(item.content) | ||
| 96 | }) | ||
| 97 | total.value = res.total | ||
| 98 | }) | ||
| 99 | } | ||
| 100 | |||
| 101 | function audit(recordId, flag) { | ||
| 102 | if (flag == '0') { | ||
| 103 | // 拒绝 | ||
| 104 | // 弹出框填写理由 | ||
| 105 | uni.showModal({ | ||
| 106 | title: '请输入拒绝理由', | ||
| 107 | editable: true, | ||
| 108 | success: function(res) { | ||
| 109 | if (res.confirm) { | ||
| 110 | if (!res.content) { | ||
| 111 | uni.showToast({ | ||
| 112 | title: '请输入拒绝理由', | ||
| 113 | icon: 'none' | ||
| 114 | }) | ||
| 115 | } else { | ||
| 116 | doApproval(recordId, flag, res.content) | ||
| 117 | } | ||
| 118 | } | ||
| 119 | } | ||
| 120 | }) | ||
| 121 | } else if (flag == '1') { | ||
| 122 | // 二次确认 | ||
| 123 | uni.showModal({ | ||
| 124 | title: '提示', | ||
| 125 | content: `确定审批通过吗`, | ||
| 126 | success: function(res) { | ||
| 127 | if (res.confirm) { | ||
| 128 | doApproval(recordId, flag) | ||
| 129 | } | ||
| 130 | } | ||
| 131 | }) | ||
| 132 | } | ||
| 133 | } | ||
| 134 | |||
| 135 | function doApproval(recordId, flag, reason) { | ||
| 136 | var obj = { | ||
| 137 | flag: flag, | ||
| 138 | reason: reason || '', | ||
| 139 | recordIds: [] | ||
| 140 | } | ||
| 141 | obj.recordIds.push(recordId) | ||
| 142 | console.log(obj) | ||
| 143 | api.audit(obj).then((res) => { | ||
| 144 | uni.showToast({ | ||
| 145 | title: '操作成功', | ||
| 146 | icon: 'none' | ||
| 147 | }) | ||
| 148 | getList() | ||
| 149 | }) | ||
| 150 | } | ||
| 151 | |||
| 152 | function goDetail(item) { | ||
| 153 | let path = `/pages/personalVip/auditDetail?wfId=${item.wfId}&auditStatus=${queryParams.value.auditStatus}` | ||
| 154 | uni.navigateTo({ | ||
| 155 | url: path | ||
| 156 | }); | ||
| 157 | } | ||
| 158 | </script> | ||
| 159 | |||
| 160 | <style> | ||
| 161 | |||
| 162 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/auditDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <view class="wBox"> | ||
| 4 | <view class="tt">{{form.content?.name}}</view> | ||
| 5 | <view class="info"> | ||
| 6 | <view>共 <text class="text-danger"> {{ form.content?.personCount }} </text> 人</view> | ||
| 7 | <view>合计缴费年限 <text class="text-primary"> {{totalYear }} </text> 年</view> | ||
| 8 | </view> | ||
| 9 | <!-- 成员 --> | ||
| 10 | <view class="userlist"> | ||
| 11 | <view class="item" v-for="n in list"> | ||
| 12 | <view class="photobox"> | ||
| 13 | <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> | ||
| 14 | <view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view> | ||
| 15 | </view> | ||
| 16 | <view> | ||
| 17 | <view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view> | ||
| 18 | <view class="date">原有效期至 {{n.originValidityDate||'--'}}</view> | ||
| 19 | </view> | ||
| 20 | <view class="nian"> | ||
| 21 | {{n.payYear}} 年 | ||
| 22 | </view> | ||
| 23 | </view> | ||
| 24 | </view> | ||
| 25 | |||
| 26 | </view> | ||
| 27 | |||
| 28 | <view class="h3-padding">审核流程</view> | ||
| 29 | <view class="wBox"> | ||
| 30 | <view class="stepItem" v-for="(n,index) in feelList"> | ||
| 31 | <view class="time">{{n.handleDate||'待审批'}}</view> | ||
| 32 | <view class="content"> | ||
| 33 | <view class="status"> | ||
| 34 | <text v-if="n.auditStatus==1" class="text-success">审核通过</text> | ||
| 35 | <text v-if="n.auditStatus==2" class="text-danger"> 审核拒绝</text> | ||
| 36 | <text v-if="n.auditStatus==0||n.auditStatus==100" class="text-primary"> 审核中</text> | ||
| 37 | <text v-if="n.auditStatus==3" class="text-warning"> 已退回</text> | ||
| 38 | </view> | ||
| 39 | <!-- <view class="name">第 {{index+1}} 步</view> --> | ||
| 40 | <view class="deptName">{{n.handlerDeptName||n.auditBy}}</view> | ||
| 41 | <view v-if="n.auditStatus==2" > | ||
| 42 | 备注:{{n.reason||'/' }} | ||
| 43 | </view> | ||
| 44 | </view> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | |||
| 48 | <view class="fixedBottom" v-if="form.auditStatus == 0"> | ||
| 49 | <button class="btn-red-kx" @click="audit(form.recordId,'0')">拒绝</button> | ||
| 50 | <button class="btn-red" @click="audit(form.recordId,'1')">同意</button> | ||
| 51 | </view> | ||
| 52 | |||
| 53 | </view> | ||
| 54 | </template> | ||
| 55 | |||
| 56 | <script setup> | ||
| 57 | import * as api from '@/common/api.js' | ||
| 58 | import config from '@/config.js' | ||
| 59 | import { | ||
| 60 | onMounted, | ||
| 61 | ref | ||
| 62 | } from 'vue' | ||
| 63 | import { | ||
| 64 | onLoad | ||
| 65 | } from '@dcloudio/uni-app' | ||
| 66 | const app = getApp(); | ||
| 67 | const queryParams = ref({ | ||
| 68 | // pageNum: 1, | ||
| 69 | // pageSize: 10 | ||
| 70 | // mergeFlag: 0, | ||
| 71 | auditStatus: '' | ||
| 72 | }) | ||
| 73 | const wfId = ref('') | ||
| 74 | const form = ref([]) | ||
| 75 | const list = ref([]) | ||
| 76 | const feelList = ref([]) | ||
| 77 | const total = ref(0) | ||
| 78 | const totalYear = ref(0) | ||
| 79 | const deptType = ref() | ||
| 80 | onLoad((option) => { | ||
| 81 | wfId.value = option.wfId | ||
| 82 | queryParams.value.auditStatus = option.auditStatus | ||
| 83 | |||
| 84 | if (app.globalData.isLogin) { | ||
| 85 | init() | ||
| 86 | } else { | ||
| 87 | |||
| 88 | app.firstLoadCallback = () => { | ||
| 89 | init() | ||
| 90 | }; | ||
| 91 | } | ||
| 92 | |||
| 93 | }) | ||
| 94 | function init(){ | ||
| 95 | deptType.value = app.globalData.deptType | ||
| 96 | getForm() | ||
| 97 | } | ||
| 98 | function getForm() { | ||
| 99 | uni.showLoading({ | ||
| 100 | title: '加载中' | ||
| 101 | }) | ||
| 102 | totalYear.value = 0 | ||
| 103 | if(deptType.value==2||deptType.value==3){ | ||
| 104 | queryParams.value.mergeFlag = 0 | ||
| 105 | } | ||
| 106 | api.getVerifyList(queryParams.value).then(res => { | ||
| 107 | uni.hideLoading() | ||
| 108 | if(res.rows) | ||
| 109 | for (var n of res.rows) { | ||
| 110 | if (n.wfId == wfId.value) { | ||
| 111 | form.value = n | ||
| 112 | } | ||
| 113 | } | ||
| 114 | if(form.value.content){ | ||
| 115 | form.value.content = JSON.parse(form.value.content) | ||
| 116 | list.value = form.value.content.personList | ||
| 117 | for (var n of list.value) { | ||
| 118 | totalYear.value += n.payYear | ||
| 119 | } | ||
| 120 | } | ||
| 121 | |||
| 122 | getFillList(list.value[0]?.rangeId) | ||
| 123 | }) | ||
| 124 | } | ||
| 125 | |||
| 126 | function getFillList(id) { | ||
| 127 | if(id) | ||
| 128 | api.getHistoryByRelateId(id).then(res => { | ||
| 129 | feelList.value = res.data | ||
| 130 | uni.hideLoading() | ||
| 131 | }) | ||
| 132 | } | ||
| 133 | function audit(recordId, flag) { | ||
| 134 | if (flag == '0') { | ||
| 135 | // 拒绝 | ||
| 136 | // 弹出框填写理由 | ||
| 137 | uni.showModal({ | ||
| 138 | title: '请输入拒绝理由', | ||
| 139 | editable: true, | ||
| 140 | success: function(res) { | ||
| 141 | if (res.confirm) { | ||
| 142 | if (!res.content) { | ||
| 143 | uni.showToast({ | ||
| 144 | title: '请输入拒绝理由', | ||
| 145 | icon: 'none' | ||
| 146 | }) | ||
| 147 | } else { | ||
| 148 | doApproval(recordId, flag, res.content) | ||
| 149 | } | ||
| 150 | } | ||
| 151 | } | ||
| 152 | }) | ||
| 153 | } else if (flag == '1') { | ||
| 154 | // 二次确认 | ||
| 155 | uni.showModal({ | ||
| 156 | title: '提示', | ||
| 157 | content: `确定审批通过吗`, | ||
| 158 | success: function(res) { | ||
| 159 | if (res.confirm) { | ||
| 160 | doApproval(recordId, flag) | ||
| 161 | } | ||
| 162 | } | ||
| 163 | }) | ||
| 164 | } | ||
| 165 | } | ||
| 166 | |||
| 167 | function doApproval(recordId, flag, reason) { | ||
| 168 | var obj = { | ||
| 169 | flag: flag, | ||
| 170 | reason: reason||'', | ||
| 171 | recordIds: [] | ||
| 172 | } | ||
| 173 | obj.recordIds.push(recordId) | ||
| 174 | console.log(obj) | ||
| 175 | api.audit(obj).then((res) => { | ||
| 176 | uni.showToast({ | ||
| 177 | title: '操作成功', | ||
| 178 | icon: 'none' | ||
| 179 | }) | ||
| 180 | uni.navigateBack() | ||
| 181 | }) | ||
| 182 | } | ||
| 183 | </script> | ||
| 184 | |||
| 185 | <style scoped lang="scss"> | ||
| 186 | .wBox{ | ||
| 187 | width: 700rpx;padding: 30rpx;margin: 20rpx auto 0; | ||
| 188 | background: #FFFFFF; | ||
| 189 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196,203,214,0.1); | ||
| 190 | border-radius: 15rpx; | ||
| 191 | .tt{ | ||
| 192 | color: #0A1629; | ||
| 193 | font-size: 30rpx;} | ||
| 194 | } | ||
| 195 | |||
| 196 | .userlist{ | ||
| 197 | .item{border-bottom: 1px dashed #e5e5e5;position: relative; | ||
| 198 | .date{margin-top: 10rpx;} | ||
| 199 | .name{ | ||
| 200 | text{margin-left: 1em; | ||
| 201 | color: #4C5359; | ||
| 202 | font-size: 26rpx;} | ||
| 203 | } | ||
| 204 | .nian{position: absolute;right: 0; | ||
| 205 | font-size: 30rpx; | ||
| 206 | color: #AD181F;} | ||
| 207 | } | ||
| 208 | } | ||
| 209 | .info{display: flex;margin: 30rpx 0 20rpx; | ||
| 210 | font-size: 28rpx; | ||
| 211 | view{color: #7D8592;margin-right: 20rpx; | ||
| 212 | } | ||
| 213 | } | ||
| 214 | .fixedBottom{justify-content: center; | ||
| 215 | button{margin: 0 20rpx;width: 286rpx;} | ||
| 216 | .btn-red{width: 286rpx;} | ||
| 217 | } | ||
| 218 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/detail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="mainbox"> | ||
| 3 | <view class="photobox"> | ||
| 4 | <image class="photo" v-if="form.photo" :src="config.fileUrl_api + form.photo" mode='widthFix'></image> | ||
| 5 | <view class="colorful" v-else>{{form.name?.slice(0,1)}}</view> | ||
| 6 | |||
| 7 | </view> | ||
| 8 | <uni-list> | ||
| 9 | <uni-list-item title="姓名" :rightText="form.name"/> | ||
| 10 | <uni-list-item title="证件类型" :rightText="cardType?.[form?.idcType]?.label" /> | ||
| 11 | <uni-list-item title="证件号" :rightText="form.idcCode"/> | ||
| 12 | <uni-list-item title="性别" :rightText="form.sex==0?'男':'女'"/> | ||
| 13 | <uni-list-item title="会员编号" :rightText="form.perCode"/> | ||
| 14 | <uni-list-item title="所属一级协会" :rightText="form.topAssName"/> | ||
| 15 | <uni-list-item title="所属地区协会" :rightText="form.areaAssName"/> | ||
| 16 | <uni-list-item title="注册团体会员" :rightText="form.memName"/> | ||
| 17 | <uni-list-item title="缴费日期" :rightText="form.payDate"/> | ||
| 18 | <uni-list-item title="出生日期" :rightText="form.birth?.slice(0,10)"/> | ||
| 19 | <uni-list-item title="手机号码" :rightText="form.phone"/> | ||
| 20 | <uni-list-item title="所在地区" :rightText="form.cityId"/> | ||
| 21 | <uni-list-item title="详细地址" :rightText="form.address"/> | ||
| 22 | </uni-list> | ||
| 23 | |||
| 24 | </view> | ||
| 25 | </template> | ||
| 26 | |||
| 27 | <script setup> | ||
| 28 | import * as api from '@/common/api.js' | ||
| 29 | import config from '@/config.js' | ||
| 30 | import { | ||
| 31 | onLoad,onShow | ||
| 32 | } from '@dcloudio/uni-app'; | ||
| 33 | import {ref } from 'vue' | ||
| 34 | const cardType = ref([ | ||
| 35 | { label: '身份证', value: '0' }, | ||
| 36 | { label: '港澳台通信身份证 ', value: '1' }, | ||
| 37 | { label: '中国护照', value: '2' }, | ||
| 38 | { label: '外国护照', value: '3' } | ||
| 39 | ]) | ||
| 40 | const form = ref({}) | ||
| 41 | onLoad((option)=>{ | ||
| 42 | console.log(option) | ||
| 43 | |||
| 44 | api.getInfo(option.perId).then(res=>{ | ||
| 45 | form.value = res.data | ||
| 46 | form.value.topAssName = form.value?.ancestorNameList?.[0] | ||
| 47 | form.value.areaAssName = form.value?.ancestorNameList?.[1] | ||
| 48 | form.value.memName = res.data.memName | ||
| 49 | }) | ||
| 50 | }) | ||
| 51 | |||
| 52 | |||
| 53 | </script> | ||
| 54 | |||
| 55 | <style scoped lang="scss"> | ||
| 56 | .mainbox{margin: 30rpx 25rpx;padding: 1px; | ||
| 57 | background: #FFFFFF; | ||
| 58 | border-radius: 15rpx; | ||
| 59 | :deep(.uni-list-item__content-title){color: #4C5359;font-size: 30rpx; | ||
| 60 | font-weight: 300;} | ||
| 61 | :deep(.uni-list-item__extra-text){color: #000; | ||
| 62 | font-size: 30rpx;} | ||
| 63 | } | ||
| 64 | .photobox{position: relative;margin: 30rpx auto; | ||
| 65 | .photo{width: 210rpx;height: 280rpx;background-color: #f4f4f4;display: block;margin: auto;} | ||
| 66 | } | ||
| 67 | .colorful {background-color: #007BDA; | ||
| 68 | width: 200rpx; | ||
| 69 | margin: auto; | ||
| 70 | height: 200rpx; | ||
| 71 | line-height: 200rpx; | ||
| 72 | font-size: 44rpx; | ||
| 73 | color: #fff; | ||
| 74 | text-align: center; | ||
| 75 | border-radius: 50%; | ||
| 76 | } | ||
| 77 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/editVip.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="hasfixedbottom"> | ||
| 4 | <view> | ||
| 5 | <uni-forms ref="baseForm" :border="true" :modelValue="baseFormData" label-width="80"> | ||
| 6 | |||
| 7 | <view class="nolineform"> | ||
| 8 | |||
| 9 | <uni-forms-item label="姓名" disabled required name="name"> | ||
| 10 | <uni-easyinput :styles="inputstyle" :clearable='false' :placeholderStyle="placeholderStyle" | ||
| 11 | v-model="baseFormData.name" placeholder="请输入姓名" /> | ||
| 12 | </uni-forms-item> | ||
| 13 | <uni-forms-item label="证件类型" disabled required name="idcType"> | ||
| 14 | <uni-data-select v-model="baseFormData.idcType" :localdata="idcTypeList"></uni-data-select> | ||
| 15 | </uni-forms-item> | ||
| 16 | |||
| 17 | <uni-forms-item label="证件号码" disabled required name="idcCode"> | ||
| 18 | <uni-easyinput :styles="inputstyle" :clearable='false' :placeholderStyle="placeholderStyle" | ||
| 19 | v-model="baseFormData.idcCode" @blur="giveBirthDay" placeholder="请输入证件号码" /> | ||
| 20 | </uni-forms-item> | ||
| 21 | <uni-forms-item label="性别" disabled required name="sex"> | ||
| 22 | <uni-data-checkbox v-model="baseFormData.sex" @change="changeSex" :localdata="sexs" /> | ||
| 23 | </uni-forms-item> | ||
| 24 | <uni-forms-item label="出生日期" disabled required name="birth"> | ||
| 25 | <uni-datetime-picker type="date" placeholder="YYYY-MM-DD" :border='false' | ||
| 26 | :clear-icon="false" v-model="baseFormData.birth" /> | ||
| 27 | </uni-forms-item> | ||
| 28 | <uni-forms-item label="联系方式" name="phone"> | ||
| 29 | <uni-easyinput :styles="inputstyle" :placeholderStyle="placeholderStyle" | ||
| 30 | v-model="baseFormData.phone" placeholder="请输入联系方式" /> | ||
| 31 | </uni-forms-item> | ||
| 32 | |||
| 33 | <uni-forms-item label="所在地区"> | ||
| 34 | <uni-data-picker class="fixUniFormItemStyle" v-model="baseFormData.cityId" | ||
| 35 | :localdata="regionsList" popup-title="请选择所在地区"></uni-data-picker> | ||
| 36 | </uni-forms-item> | ||
| 37 | <uni-forms-item label="详细地址"><uni-easyinput :styles="inputstyle" | ||
| 38 | :placeholderStyle="placeholderStyle" v-model="baseFormData.address" | ||
| 39 | placeholder="请输入详细地址" /></uni-forms-item> | ||
| 40 | |||
| 41 | <uni-forms-item label="头像" required name="photo"> | ||
| 42 | <uni-file-picker v-model="baseFormData.photoObj" @delete="delPhoto" return-type="object" | ||
| 43 | limit="1" @select="upPhoto" :image-styles="imageStylesTx"></uni-file-picker> | ||
| 44 | </uni-forms-item> | ||
| 45 | |||
| 46 | </view> | ||
| 47 | </uni-forms> | ||
| 48 | |||
| 49 | </view> | ||
| 50 | |||
| 51 | </view> | ||
| 52 | <view class="fixedBottom"><button class="btn-red" @click="goSubmit">确 定</button></view> | ||
| 53 | </view> | ||
| 54 | </template> | ||
| 55 | |||
| 56 | <script setup> | ||
| 57 | import { | ||
| 58 | onMounted, | ||
| 59 | ref | ||
| 60 | } from 'vue' | ||
| 61 | import { | ||
| 62 | onLoad | ||
| 63 | } from '@dcloudio/uni-app'; | ||
| 64 | import * as api from '@/common/api.js' | ||
| 65 | const perId = ref() | ||
| 66 | const regionsList = ref([]) | ||
| 67 | const baseFormData = ref({ | ||
| 68 | sex: '0', | ||
| 69 | idcType: '0' | ||
| 70 | }) | ||
| 71 | const idcTypeList = ref([{ | ||
| 72 | value: '0', | ||
| 73 | text: "身份证" | ||
| 74 | }, | ||
| 75 | { | ||
| 76 | value: '1', | ||
| 77 | text: "港澳台通信身份证" | ||
| 78 | }, | ||
| 79 | { | ||
| 80 | value: '2', | ||
| 81 | text: "中国护照" | ||
| 82 | }, | ||
| 83 | { | ||
| 84 | value: '3', | ||
| 85 | text: "外国护照" | ||
| 86 | } | ||
| 87 | ]) | ||
| 88 | const sexs = ref([{ | ||
| 89 | text: '女', | ||
| 90 | value: '0' | ||
| 91 | }, { | ||
| 92 | text: '男', | ||
| 93 | value: '1' | ||
| 94 | }]) | ||
| 95 | const placeholderStyle = ref('text-align: right;font-size:30rpx') | ||
| 96 | const inputstyle = ref({ | ||
| 97 | borderColor: '#fff', | ||
| 98 | fontSize: '30rpx' | ||
| 99 | }) | ||
| 100 | const imageStylesTx = ref({ | ||
| 101 | width: '210rpx', | ||
| 102 | height: '280rpx', | ||
| 103 | background: { | ||
| 104 | color: '#F4F6FA' | ||
| 105 | }, | ||
| 106 | border: { | ||
| 107 | radius: '2px' | ||
| 108 | } | ||
| 109 | }); | ||
| 110 | onLoad((option)=>{ | ||
| 111 | |||
| 112 | }) | ||
| 113 | onMounted(() => { | ||
| 114 | getRegionsList() | ||
| 115 | }) | ||
| 116 | |||
| 117 | function getRegionsList() { | ||
| 118 | api.regionsList().then(res => { | ||
| 119 | regionsList.value = res.data | ||
| 120 | }) | ||
| 121 | } | ||
| 122 | |||
| 123 | function upPhoto(e) { | ||
| 124 | // api.uploadImg(e).then(data => { | ||
| 125 | // baseFormData.value.photo = data.data; | ||
| 126 | // }); | ||
| 127 | } | ||
| 128 | |||
| 129 | function delimgFont(n) { | ||
| 130 | baseFormData.value.card = ''; | ||
| 131 | } | ||
| 132 | |||
| 133 | function delPhoto(n) { | ||
| 134 | baseFormData.value.photo = ''; | ||
| 135 | } | ||
| 136 | |||
| 137 | |||
| 138 | function goSubmit() { | ||
| 139 | |||
| 140 | } | ||
| 141 | |||
| 142 | function getUserInfo() { | ||
| 143 | api.getInfo(perId.value).then(res=>{ | ||
| 144 | forms.value = res.data | ||
| 145 | if (forms.areaAssName)forms.ancestorNameList = forms.value.ancestorNameList.join(',').replaceAll(',', '/') | ||
| 146 | }) | ||
| 147 | } | ||
| 148 | </script> | ||
| 149 | |||
| 150 | <style lang="scss" scoped> | ||
| 151 | :deep(.segmented-control) { | ||
| 152 | height: 100rpx; | ||
| 153 | } | ||
| 154 | |||
| 155 | :deep(.segmented-control__text) { | ||
| 156 | line-height: 2; | ||
| 157 | font-size: 30rpx; | ||
| 158 | } | ||
| 159 | |||
| 160 | .tt { | ||
| 161 | text-align: center; | ||
| 162 | font-size: 30rpx; | ||
| 163 | padding: 40rpx 0 0; | ||
| 164 | } | ||
| 165 | |||
| 166 | .popBody { | ||
| 167 | font-size: 28rpx; | ||
| 168 | line-height: 1.5; | ||
| 169 | font-family: 华文仿宋; | ||
| 170 | height: 80vh; | ||
| 171 | overflow: auto; | ||
| 172 | padding: 30rpx; | ||
| 173 | |||
| 174 | .btn-red { | ||
| 175 | margin: 50rpx 0 30rpx; | ||
| 176 | } | ||
| 177 | } | ||
| 178 | |||
| 179 | .agreeline { | ||
| 180 | padding: 20rpx 40rpx; | ||
| 181 | box-sizing: border-box; | ||
| 182 | display: flex; | ||
| 183 | font-size: 30rpx; | ||
| 184 | |||
| 185 | text { | ||
| 186 | color: #014A9F; | ||
| 187 | } | ||
| 188 | |||
| 189 | image { | ||
| 190 | width: 40rpx; | ||
| 191 | height: 40rpx; | ||
| 192 | margin-right: 20rpx; | ||
| 193 | } | ||
| 194 | } | ||
| 195 | |||
| 196 | .upCard { | ||
| 197 | position: relative; | ||
| 198 | width: 500rpx; | ||
| 199 | height: 316rpx; | ||
| 200 | |||
| 201 | .uni-file-picker { | ||
| 202 | position: absolute; | ||
| 203 | z-index: 1; | ||
| 204 | } | ||
| 205 | |||
| 206 | .sfz { | ||
| 207 | width: 500rpx; | ||
| 208 | height: 316rpx; | ||
| 209 | } | ||
| 210 | } | ||
| 211 | |||
| 212 | .op0 { | ||
| 213 | opacity: 0; | ||
| 214 | } | ||
| 215 | |||
| 216 | |||
| 217 | :deep(.item-text-overflow) { | ||
| 218 | text-align: left; | ||
| 219 | } | ||
| 220 | |||
| 221 | :deep(.selected-list) { | ||
| 222 | justify-content: flex-end; | ||
| 223 | } | ||
| 224 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/feeBill.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <!-- 查看缴费单+上传凭证 --> | ||
| 4 | <!-- 缴费审核 --> | ||
| 5 | <view class="appList"> | ||
| 6 | <view class="appItem" v-for="item in list"> | ||
| 7 | <view class="status" @click="goDetail(item)"> | ||
| 8 | <text v-if="item.record.auditStatus==0" class="text-primary">审核中</text> | ||
| 9 | <text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text> | ||
| 10 | <text v-if="item.record.auditStatus==2" class="text-danger"> 审核拒绝</text> | ||
| 11 | <text v-if="item.record.auditStatus==3" class="text-warning">已退回</text> | ||
| 12 | </view> | ||
| 13 | <view class="date" @click="goDetail(item)"> | ||
| 14 | <uni-icons type="calendar" size="16" color="#7D8592"></uni-icons> | ||
| 15 | <text v-if="item.payTime">{{item.payTime}} 缴费</text> | ||
| 16 | <text v-else>{{item.payNoticeSendTime}} 下发</text> | ||
| 17 | </view> | ||
| 18 | <view class="name" @click="goDetail(item)">{{item.finalDocName}}</view> | ||
| 19 | <view class="flexbox" @click="goDetail(item)"> | ||
| 20 | <view> | ||
| 21 | 人数合计 | ||
| 22 | <view>{{item.personCount}}</view> | ||
| 23 | </view> | ||
| 24 | <view> | ||
| 25 | 年限合计 | ||
| 26 | <view>{{item.yearCount}}</view> | ||
| 27 | </view> | ||
| 28 | <view> | ||
| 29 | 费用合计 | ||
| 30 | <view>¥{{item.allPrice}}</view> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | <view class="func"> | ||
| 34 | <button | ||
| 35 | v-if="(deptType == 2 || deptType == 3)&&item?.record?.auditStatus != 2 && item?.record?.auditStatus != 3" | ||
| 36 | @click="handleUpdate(item)">上传凭证</button> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | <view class="nodata" v-if="list.length==0"> | ||
| 41 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 42 | <text>暂无数据</text> | ||
| 43 | </view> | ||
| 44 | |||
| 45 | <!-- 上传凭证 --> | ||
| 46 | <uni-popup ref="UpPop" type="bottom" background-color="#fff" animation> | ||
| 47 | <view class="popBody"> | ||
| 48 | <uni-forms v-model="form"> | ||
| 49 | <uni-forms-item label="缴费日期" required> | ||
| 50 | <uni-datetime-picker v-model="form.payTime"></uni-datetime-picker> | ||
| 51 | </uni-forms-item> | ||
| 52 | <uni-forms-item label="缴费凭证" required> | ||
| 53 | |||
| 54 | <uni-file-picker limit="1" file-mediatype="all" file-extname="png,jpg,jpeg,pdf,zip" | ||
| 55 | @select="selectFile" | ||
| 56 | @progress="fileProgress" @delete="delSupplementFile(index)"></uni-file-picker> | ||
| 57 | </uni-forms-item> | ||
| 58 | <uni-forms-item label="备注"> | ||
| 59 | <uni-easyinput v-model="form.remark" type="textarea"></uni-easyinput> | ||
| 60 | </uni-forms-item> | ||
| 61 | </uni-forms> | ||
| 62 | |||
| 63 | <button class="btn-red" @click="uploadSure">确定</button> | ||
| 64 | </view> | ||
| 65 | </uni-popup> | ||
| 66 | </view> | ||
| 67 | </template> | ||
| 68 | |||
| 69 | <script setup> | ||
| 70 | import * as api from '@/common/api.js' | ||
| 71 | import config from '@/config.js' | ||
| 72 | import { | ||
| 73 | onMounted, | ||
| 74 | ref | ||
| 75 | } from 'vue' | ||
| 76 | import { | ||
| 77 | onLoad | ||
| 78 | } from '@dcloudio/uni-app' | ||
| 79 | const app = getApp(); | ||
| 80 | const list = ref([]) | ||
| 81 | const deptType = ref('') | ||
| 82 | const UpPop = ref(null) | ||
| 83 | const form = ref({ | ||
| 84 | docId:'', | ||
| 85 | payTime:'', | ||
| 86 | url:'', | ||
| 87 | remark:'' | ||
| 88 | }) | ||
| 89 | onLoad(() => { | ||
| 90 | if (app.globalData.isLogin) { | ||
| 91 | init() | ||
| 92 | } else { | ||
| 93 | |||
| 94 | app.firstLoadCallback = () => { | ||
| 95 | init() | ||
| 96 | }; | ||
| 97 | } | ||
| 98 | }) | ||
| 99 | |||
| 100 | function init() { | ||
| 101 | deptType.value = app.globalData.deptType | ||
| 102 | getList() | ||
| 103 | } | ||
| 104 | |||
| 105 | function getList() { | ||
| 106 | api.getFeeBillList().then(res => { | ||
| 107 | list.value = res.rows | ||
| 108 | }) | ||
| 109 | } | ||
| 110 | |||
| 111 | function handleUpdate(item) { | ||
| 112 | form.value.docId = item.docId | ||
| 113 | UpPop.value.open() | ||
| 114 | } | ||
| 115 | let selectFileValue = {} | ||
| 116 | function selectFile(e) { | ||
| 117 | let file = e.tempFiles[0] | ||
| 118 | api.uploadFile(e).then(data => { | ||
| 119 | selectFileValue = { | ||
| 120 | url: data.msg, | ||
| 121 | name: file.name, | ||
| 122 | extname: file.extname | ||
| 123 | } | ||
| 124 | |||
| 125 | form.value.url=JSON.stringify([selectFileValue]) | ||
| 126 | }); | ||
| 127 | } | ||
| 128 | function fileProgress(e) { | ||
| 129 | console.log('progress:'+ e) | ||
| 130 | } | ||
| 131 | function delSupplementFile(index) { | ||
| 132 | selectFileValue = {} | ||
| 133 | } | ||
| 134 | function uploadSure(){ | ||
| 135 | console.log(form.value) | ||
| 136 | api.commitPaymentVoucher(form.value).then(res=>{ | ||
| 137 | UpPop.value.close() | ||
| 138 | form.value = {} | ||
| 139 | uni.showToast({ | ||
| 140 | icon:'none', | ||
| 141 | title:'操作成功' | ||
| 142 | }) | ||
| 143 | getList() | ||
| 144 | }) | ||
| 145 | } | ||
| 146 | function goDetail(item) { | ||
| 147 | //详情 | ||
| 148 | console.log(item.docId) | ||
| 149 | let path = `/pages/personalVip/feeBillDetail?docId=${item.docId}` | ||
| 150 | uni.navigateTo({ | ||
| 151 | url: path | ||
| 152 | }); | ||
| 153 | } | ||
| 154 | </script> | ||
| 155 | |||
| 156 | <style scoped lang="scss"> | ||
| 157 | .popBody { | ||
| 158 | font-size: 28rpx; | ||
| 159 | line-height: 1.5; | ||
| 160 | overflow: auto; | ||
| 161 | padding: 30rpx; | ||
| 162 | |||
| 163 | .btn-red { | ||
| 164 | margin: 50rpx 0 30rpx; | ||
| 165 | } | ||
| 166 | } | ||
| 167 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/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="info"> | ||
| 9 | <view>共 <text class="text-danger"> {{ form.allPersonCount}} </text> 人</view> | ||
| 10 | <view>缴费合计人数 <text class="text-danger"> {{ form.oldPersonCount}} </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="photobox"> | ||
| 17 | <view class="colorful">{{n.personName?.slice(0,1)}}</view> | ||
| 18 | </view> | ||
| 19 | <view> | ||
| 20 | <view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view> | ||
| 21 | <view class="date">原有效期至{{n.originValidityDate||'--'}}</view> | ||
| 22 | </view> | ||
| 23 | <view class="nian"> | ||
| 24 | 总价 ¥{{n.payYear}} | ||
| 25 | </view> | ||
| 26 | </view> | ||
| 27 | </view> | ||
| 28 | |||
| 29 | </view> | ||
| 30 | |||
| 31 | </view> | ||
| 32 | </template> | ||
| 33 | |||
| 34 | <script setup> | ||
| 35 | import * as api from '@/common/api.js' | ||
| 36 | import config from '@/config.js' | ||
| 37 | import { | ||
| 38 | onMounted, | ||
| 39 | ref | ||
| 40 | } from 'vue' | ||
| 41 | import { | ||
| 42 | onLoad | ||
| 43 | } from '@dcloudio/uni-app' | ||
| 44 | const app = getApp(); | ||
| 45 | const queryParams = ref({ | ||
| 46 | // pageNum: 1, | ||
| 47 | // pageSize: 10 | ||
| 48 | // mergeFlag: 0, | ||
| 49 | auditStatus: '' | ||
| 50 | }) | ||
| 51 | const docId = ref('') | ||
| 52 | const form = ref([]) | ||
| 53 | const list = ref([]) | ||
| 54 | const deptType = ref() | ||
| 55 | onLoad((option) => { | ||
| 56 | if (app.globalData.isLogin) { | ||
| 57 | docId.value = option.docId | ||
| 58 | init() | ||
| 59 | } else { | ||
| 60 | |||
| 61 | app.firstLoadCallback = () => { | ||
| 62 | docId.value = option.docId | ||
| 63 | init() | ||
| 64 | }; | ||
| 65 | } | ||
| 66 | |||
| 67 | }) | ||
| 68 | |||
| 69 | function init() { | ||
| 70 | deptType.value = app.globalData.deptType | ||
| 71 | api.getFeeBillDetail(docId.value).then(res => { | ||
| 72 | list.value = res.data.personPaymentList | ||
| 73 | // arr.value = JSON.parse(JSON.stringify(list.value)) | ||
| 74 | form.value = res.data | ||
| 75 | }) | ||
| 76 | } | ||
| 77 | </script> | ||
| 78 | |||
| 79 | <style scoped lang="scss"> | ||
| 80 | .wBox { | ||
| 81 | width: 700rpx; | ||
| 82 | padding: 30rpx; | ||
| 83 | margin: 20rpx auto 0; | ||
| 84 | background: #FFFFFF; | ||
| 85 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 86 | border-radius: 15rpx; | ||
| 87 | |||
| 88 | .tt { | ||
| 89 | color: #0A1629; | ||
| 90 | font-size: 30rpx; | ||
| 91 | } | ||
| 92 | .subtt{ | ||
| 93 | color: #666;margin: 20rpx 0 0; | ||
| 94 | font-size: 28rpx; | ||
| 95 | } | ||
| 96 | } | ||
| 97 | |||
| 98 | .userlist { | ||
| 99 | .item { | ||
| 100 | border-bottom: 1px dashed #e5e5e5; | ||
| 101 | position: relative;padding: 20rpx 0; | ||
| 102 | |||
| 103 | .date { | ||
| 104 | margin-top: 10rpx; | ||
| 105 | } | ||
| 106 | |||
| 107 | .name { | ||
| 108 | text { | ||
| 109 | margin-left: 1em; | ||
| 110 | color: #4C5359; | ||
| 111 | font-size: 26rpx; | ||
| 112 | } | ||
| 113 | } | ||
| 114 | |||
| 115 | .nian { | ||
| 116 | position: absolute; | ||
| 117 | right: 0; | ||
| 118 | font-size: 26rpx; | ||
| 119 | color: #AD181F; | ||
| 120 | } | ||
| 121 | } | ||
| 122 | } | ||
| 123 | |||
| 124 | .info { | ||
| 125 | display: flex; | ||
| 126 | margin: 30rpx 0 20rpx; | ||
| 127 | font-size: 28rpx; | ||
| 128 | |||
| 129 | view { | ||
| 130 | color: #7D8592; | ||
| 131 | margin-right: 20rpx; | ||
| 132 | } | ||
| 133 | } | ||
| 134 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/list.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="query.name" @blur="getList" @clear="getList" placeholder="搜索姓名"> | ||
| 6 | </uni-easyinput> | ||
| 7 | |||
| 8 | </view> | ||
| 9 | |||
| 10 | <uni-swipe-action> | ||
| 11 | <uni-swipe-action-item class="personitem" v-for="n in list"> | ||
| 12 | <view class="content-box" @click="handleInfo(n)"> | ||
| 13 | <view class="flexbox"> | ||
| 14 | <view class="photobox"> | ||
| 15 | <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> | ||
| 16 | <view class="colorful" v-else>{{n.name.slice(0,1)}}</view> | ||
| 17 | </view> | ||
| 18 | <view> | ||
| 19 | {{n.name}} ({{n.perCode}}) | ||
| 20 | </view> | ||
| 21 | </view> | ||
| 22 | <view class="flexbox"> | ||
| 23 | <text v-if="n.certStage==0" class="text-green"> | ||
| 24 | 新会员 | ||
| 25 | </text> | ||
| 26 | <text v-if="n.certStage==1" class="text-warning"> | ||
| 27 | 待提交 | ||
| 28 | </text> | ||
| 29 | <text v-if="n.certStage==2" class="text-red"> | ||
| 30 | 缴费中 | ||
| 31 | </text> | ||
| 32 | <text v-if="n.certStage==3"> | ||
| 33 | 正常 | ||
| 34 | </text> | ||
| 35 | <text v-if="n.certStage==4" class="text-gray"> | ||
| 36 | 过期 | ||
| 37 | </text> | ||
| 38 | </view> | ||
| 39 | |||
| 40 | </view> | ||
| 41 | <!-- <template v-slot:right> | ||
| 42 | <view class="slot-button"> | ||
| 43 | <view class="edit-button" @click="handleUpdate(n)"> | ||
| 44 | <uni-icons type="compose" color="#fff" size="20"></uni-icons> | ||
| 45 | <text class="slot-button-text">编辑</text> | ||
| 46 | </view> | ||
| 47 | <view class="danger-button" v-if="n.certStage==0" @click="handleDelete(n)"> | ||
| 48 | <uni-icons type="trash" color="#fff" size="20"></uni-icons> | ||
| 49 | <text class="slot-button-text">删除</text> | ||
| 50 | </view> | ||
| 51 | </view> | ||
| 52 | </template> --> | ||
| 53 | </uni-swipe-action-item> | ||
| 54 | </uni-swipe-action> | ||
| 55 | |||
| 56 | <view class="nodata" v-if="list.length==0"> | ||
| 57 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 58 | <button class="btn-red" v-if="userType=='4'" @click="goVipList">+ 添加会员</button> | ||
| 59 | <text v-else>暂无数据</text> | ||
| 60 | </view> | ||
| 61 | </view> | ||
| 62 | </template> | ||
| 63 | |||
| 64 | <script setup> | ||
| 65 | import * as api from '@/common/api.js' | ||
| 66 | import config from '@/config.js' | ||
| 67 | import { | ||
| 68 | onMounted, | ||
| 69 | ref | ||
| 70 | } from 'vue' | ||
| 71 | import { | ||
| 72 | onLoad | ||
| 73 | } from '@dcloudio/uni-app' | ||
| 74 | const query = ref({ | ||
| 75 | pageNum: 1, | ||
| 76 | pageSize: 20, | ||
| 77 | showMyPersonFlag: null, | ||
| 78 | multiDeptFlag: 1, | ||
| 79 | perType: 1, | ||
| 80 | checkPaymentCommit: 1 | ||
| 81 | }) | ||
| 82 | const userType = ref('1') | ||
| 83 | const list = ref([]) | ||
| 84 | const total = ref(0) | ||
| 85 | const app = getApp(); | ||
| 86 | onLoad(()=>{ | ||
| 87 | userType.value = app.globalData.userType | ||
| 88 | }) | ||
| 89 | onMounted(() => { | ||
| 90 | getList() | ||
| 91 | }) | ||
| 92 | |||
| 93 | function getList() { | ||
| 94 | if (app.globalData.userType == '4') { | ||
| 95 | // 道馆 | ||
| 96 | query.value.multiDeptFlag = null | ||
| 97 | query.value.showMyPersonFlag = 1 | ||
| 98 | } | ||
| 99 | api.selectPageList(query.value).then(res => { | ||
| 100 | for (var p of res.rows) { | ||
| 101 | if (p.photo) { | ||
| 102 | p.photo = config.fileUrl_api + p.photo | ||
| 103 | console.log(p.photo) | ||
| 104 | } | ||
| 105 | } | ||
| 106 | list.value = res.rows | ||
| 107 | total.value = res.total | ||
| 108 | }) | ||
| 109 | } | ||
| 110 | |||
| 111 | function handleDelete(item) { | ||
| 112 | uni.showModal({ | ||
| 113 | content: `是否确认删除${item.name}`, | ||
| 114 | success: function(res) { | ||
| 115 | if (res.confirm) { | ||
| 116 | api.delInfo(item.perId).then(response => { | ||
| 117 | uni.showToast({ | ||
| 118 | title: '删除成功', | ||
| 119 | icon: 'none' | ||
| 120 | }) | ||
| 121 | getList() | ||
| 122 | }) | ||
| 123 | } | ||
| 124 | } | ||
| 125 | }) | ||
| 126 | } | ||
| 127 | function handleUpdate(n) { | ||
| 128 | uni.navigateTo({ | ||
| 129 | url: `/pages/personalVip/editVip?perId=${n.perId}&perType=${n.perType}` | ||
| 130 | }) | ||
| 131 | } | ||
| 132 | function handleInfo(n) { | ||
| 133 | uni.navigateTo({ | ||
| 134 | url: `/pages/personalVip/detail?perId=${n.perId}` | ||
| 135 | }) | ||
| 136 | } | ||
| 137 | |||
| 138 | function goVipList() { | ||
| 139 | let path = '/pages/personalVip/addVip'; | ||
| 140 | uni.navigateTo({ | ||
| 141 | url: path | ||
| 142 | }); | ||
| 143 | } | ||
| 144 | </script> | ||
| 145 | |||
| 146 | <style scoped lang="scss"> | ||
| 147 | .searchbar { | ||
| 148 | display: flex; | ||
| 149 | align-items: center; | ||
| 150 | padding: 25rpx; | ||
| 151 | box-sizing: border-box; | ||
| 152 | |||
| 153 | .invertedbtn-red { | ||
| 154 | margin-left: 15rpx; | ||
| 155 | font-size: 30rpx; | ||
| 156 | padding: 16rpx 20rpx; | ||
| 157 | box-sizing: border-box; | ||
| 158 | border-radius: 50rpx; | ||
| 159 | background-color: #fff; | ||
| 160 | } | ||
| 161 | |||
| 162 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 163 | border-radius: 35rpx; | ||
| 164 | border: none; | ||
| 165 | height: 70rpx; | ||
| 166 | } | ||
| 167 | |||
| 168 | :deep(.uni-easyinput__content-input) { | ||
| 169 | font-size: 26rpx; | ||
| 170 | } | ||
| 171 | } | ||
| 172 | |||
| 173 | |||
| 174 | |||
| 175 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/mobilize.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 | |||
| 7 | <view class="searchbar" v-if="deptType == 6"> | ||
| 8 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 9 | v-model="queryParams.name" placeholder="搜索调动名称" @blur="getList"> | ||
| 10 | </uni-easyinput> | ||
| 11 | <view class="invertedbtn-red" @click="goAddMobilize">+ 新建调动</view> | ||
| 12 | </view> | ||
| 13 | |||
| 14 | <view class="appList"> | ||
| 15 | <view class="appItem" v-for="item in list"> | ||
| 16 | <view class="status" @click="goDetail(item)"> | ||
| 17 | <view v-if="deptType == 1"> | ||
| 18 | <text v-if="item.ztxRes == 0">审核中</text> | ||
| 19 | <text v-if="item.ztxRes == 1" class="text-success">审核通过</text> | ||
| 20 | <text v-if="item.ztxRes == 2" class="text-danger">审核拒绝</text> | ||
| 21 | <text v-if="item.ztxRes == 3" class="text-warning">撤销申请</text> | ||
| 22 | </view> | ||
| 23 | |||
| 24 | <view v-if="deptType == 2 || deptType == 3"> | ||
| 25 | <text v-if="item.shenRes == 0">审核中</text> | ||
| 26 | <text v-if="item.shenRes == 1" class="text-success">审核通过</text> | ||
| 27 | <text v-if="item.shenRes == 2" class="text-danger">审核拒绝</text> | ||
| 28 | <text v-if="item.shenRes == 3" class="text-warning">撤销申请</text> | ||
| 29 | </view> | ||
| 30 | |||
| 31 | <view v-if="deptType == 6"> | ||
| 32 | <text v-if="item.status == 0">待提交</text> | ||
| 33 | <text v-if="item.status == 1">审核中</text> | ||
| 34 | <text v-if="item.status == 2" class="text-warning">审核拒绝</text> | ||
| 35 | <text v-if="item.status == 3" class="text-success">审核通过</text> | ||
| 36 | <text v-if="item.status == 4" class="text-danger">已退回</text> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | <view class="name mt0" @click="goDetail(item)">{{item.name}}</view> | ||
| 40 | <view class="flexbox" @click="goDetail(item)"> | ||
| 41 | <view> | ||
| 42 | 调动类型 | ||
| 43 | <view>{{ item.type == 1 ? '省外调动' : '省内调动' }}</view> | ||
| 44 | </view> | ||
| 45 | <view v-if="deptType == 1 || deptType == 2 || deptType == 3"> | ||
| 46 | 申请调入单位 | ||
| 47 | <view>{{item.targetDeptName}}</view> | ||
| 48 | </view> | ||
| 49 | <view> | ||
| 50 | 会员合计 | ||
| 51 | <view>{{item.personCount}}</view> | ||
| 52 | </view> | ||
| 53 | </view> | ||
| 54 | <view class="func" | ||
| 55 | v-if="(deptType == 1&&item.ztxRes == 0)||((deptType == 2 || deptType == 3)&&item.shenRes == 0)"> | ||
| 56 | <button @click="audit(item.id,'2')">拒绝</button> | ||
| 57 | <button @click="audit(item.id,'1')">同意</button> | ||
| 58 | </view> | ||
| 59 | <view class="func" v-if="(deptType == 6&&(item.status == 0 || item.status == 2))"> | ||
| 60 | <button @click="editThis(item)">编辑</button> | ||
| 61 | <button>提交审核</button> | ||
| 62 | </view> | ||
| 63 | </view> | ||
| 64 | </view> | ||
| 65 | |||
| 66 | |||
| 67 | |||
| 68 | <view class="nodata" v-if="list.length==0"> | ||
| 69 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 70 | <text>暂无数据</text> | ||
| 71 | </view> | ||
| 72 | </view> | ||
| 73 | </template> | ||
| 74 | |||
| 75 | <script setup> | ||
| 76 | import * as api from '@/common/api.js' | ||
| 77 | import config from '@/config.js' | ||
| 78 | import { | ||
| 79 | onMounted, | ||
| 80 | ref | ||
| 81 | } from 'vue' | ||
| 82 | import { | ||
| 83 | onLoad, | ||
| 84 | onShow | ||
| 85 | } from '@dcloudio/uni-app' | ||
| 86 | const app = getApp(); | ||
| 87 | const queryParams = ref({ | ||
| 88 | // pageNum: 1, | ||
| 89 | // pageSize: 10 | ||
| 90 | }) | ||
| 91 | const navs = ref(['未提交', '审核中', '审核通过', '审核拒绝']) | ||
| 92 | const current = ref() | ||
| 93 | const list = ref([]) | ||
| 94 | const total = ref(0) | ||
| 95 | const deptType = ref('') | ||
| 96 | onLoad(() => { | ||
| 97 | |||
| 98 | }) | ||
| 99 | onShow(() => { | ||
| 100 | if (app.globalData.isLogin) { | ||
| 101 | init() | ||
| 102 | } else { | ||
| 103 | |||
| 104 | app.firstLoadCallback = () => { | ||
| 105 | init() | ||
| 106 | }; | ||
| 107 | } | ||
| 108 | }) | ||
| 109 | |||
| 110 | function init() { | ||
| 111 | uni.showLoading({ | ||
| 112 | title: '加载中' | ||
| 113 | }) | ||
| 114 | deptType.value = app.globalData.deptType | ||
| 115 | if (deptType.value == 2 || deptType.value == 3) { | ||
| 116 | queryParams.value.dgId = -1 | ||
| 117 | queryParams.value.shenRes = '0' | ||
| 118 | navs.value = ['审核中', '审核通过', '审核拒绝'] | ||
| 119 | } | ||
| 120 | if (deptType.value == 1) { | ||
| 121 | queryParams.value.dgId = -2 | ||
| 122 | queryParams.value.ztxRes = '0' | ||
| 123 | navs.value = ['审核中', '审核通过', '审核拒绝', '撤销申请'] | ||
| 124 | } | ||
| 125 | if (deptType.value == 6) { | ||
| 126 | queryParams.value.dgId = 1 | ||
| 127 | queryParams.value.status = '0' | ||
| 128 | navs.value = ['未提交', '审核中', '审核拒绝', '审核通过', '已退回'] | ||
| 129 | } | ||
| 130 | getList() | ||
| 131 | } | ||
| 132 | |||
| 133 | function onClickItem(e) { | ||
| 134 | console.log(e) | ||
| 135 | uni.showLoading({ | ||
| 136 | title: '加载中' | ||
| 137 | }) | ||
| 138 | if (deptType.value == 2 || deptType.value == 3) { | ||
| 139 | queryParams.value.dgId = -1 | ||
| 140 | queryParams.value.shenRes = e.currentIndex | ||
| 141 | } | ||
| 142 | if (deptType.value == 1) { | ||
| 143 | queryParams.value.dgId = -2 | ||
| 144 | queryParams.value.ztxRes = e.currentIndex | ||
| 145 | } | ||
| 146 | if (deptType.value == 6) { | ||
| 147 | queryParams.value.dgId = 1 | ||
| 148 | queryParams.value.status = e.currentIndex | ||
| 149 | } | ||
| 150 | getList() | ||
| 151 | } | ||
| 152 | |||
| 153 | function getList() { | ||
| 154 | api.getMobilizelist(queryParams.value).then(res => { | ||
| 155 | uni.hideLoading() | ||
| 156 | list.value = res.rows | ||
| 157 | list.value.forEach(item => { | ||
| 158 | if (item.status == 0) { | ||
| 159 | item.schedule = 0 | ||
| 160 | } | ||
| 161 | if (item.status == 1 || item.status == 2) { | ||
| 162 | if (item.shenRes == 0) { | ||
| 163 | item.schedule = 0 | ||
| 164 | } | ||
| 165 | if (item.shenRes == 1) { | ||
| 166 | item.type == 1 ? item.schedule = 50 : item.schedule = 100 | ||
| 167 | if (item.ztxRes == 1) { | ||
| 168 | item.schedule = 100 | ||
| 169 | } | ||
| 170 | } | ||
| 171 | if (item.shenRes == 2) { | ||
| 172 | item.type == 1 ? item.schedule = 50 : item.schedule = 0 | ||
| 173 | } | ||
| 174 | } | ||
| 175 | if (item.status == 3) { | ||
| 176 | item.schedule = 100 | ||
| 177 | } | ||
| 178 | }) | ||
| 179 | total.value = res.total | ||
| 180 | }) | ||
| 181 | } | ||
| 182 | |||
| 183 | function goAddMobilize() { | ||
| 184 | let path = `/pages/personalVip/addMobilize` | ||
| 185 | uni.navigateTo({ | ||
| 186 | url: path | ||
| 187 | }); | ||
| 188 | } | ||
| 189 | |||
| 190 | function editThis(item) { | ||
| 191 | let path = `/pages/personalVip/addMobilize?rangId=${item.id}` | ||
| 192 | uni.navigateTo({ | ||
| 193 | url: path | ||
| 194 | }); | ||
| 195 | } | ||
| 196 | |||
| 197 | function audit(rangeId, flag) { | ||
| 198 | if (flag == '0') { | ||
| 199 | // 拒绝 | ||
| 200 | // 弹出框填写理由 | ||
| 201 | uni.showModal({ | ||
| 202 | title: '请输入拒绝理由', | ||
| 203 | editable: true, | ||
| 204 | success: function(res) { | ||
| 205 | if (res.confirm) { | ||
| 206 | if (!res.content) { | ||
| 207 | uni.showToast({ | ||
| 208 | title: '请输入拒绝理由', | ||
| 209 | icon: 'none' | ||
| 210 | }) | ||
| 211 | } else { | ||
| 212 | doApproval(rangeId, flag, res.content) | ||
| 213 | } | ||
| 214 | } | ||
| 215 | } | ||
| 216 | }) | ||
| 217 | } else if (flag == '1') { | ||
| 218 | // 二次确认 | ||
| 219 | uni.showModal({ | ||
| 220 | title: '提示', | ||
| 221 | content: `确定审批通过吗`, | ||
| 222 | success: function(res) { | ||
| 223 | if (res.confirm) { | ||
| 224 | doApproval(rangeId, flag) | ||
| 225 | } | ||
| 226 | } | ||
| 227 | }) | ||
| 228 | } | ||
| 229 | } | ||
| 230 | |||
| 231 | function doApproval(rangeId, flag, reason) { | ||
| 232 | var obj = { | ||
| 233 | flag: flag, | ||
| 234 | reason: reason || '', | ||
| 235 | rangeIds: rangeId | ||
| 236 | } | ||
| 237 | console.log(obj) | ||
| 238 | api.mobilizeAudit(obj).then((res) => { | ||
| 239 | uni.showToast({ | ||
| 240 | title: '操作成功', | ||
| 241 | icon: 'none' | ||
| 242 | }) | ||
| 243 | getList() | ||
| 244 | }) | ||
| 245 | } | ||
| 246 | |||
| 247 | function goDetail(item) { | ||
| 248 | const auditLog = encodeURIComponent(JSON.stringify(item.auditLog)) | ||
| 249 | const form = encodeURIComponent(JSON.stringify(item)) | ||
| 250 | |||
| 251 | let path = `/pages/personalVip/mobilizeDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}` | ||
| 252 | uni.navigateTo({ | ||
| 253 | url: path | ||
| 254 | }); | ||
| 255 | } | ||
| 256 | </script> | ||
| 257 | |||
| 258 | <style scoped> | ||
| 259 | .searchbar { | ||
| 260 | display: flex; | ||
| 261 | align-items: center; | ||
| 262 | padding: 25rpx; | ||
| 263 | box-sizing: border-box; | ||
| 264 | |||
| 265 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 266 | border-radius: 35rpx; | ||
| 267 | border: none; | ||
| 268 | height: 70rpx; | ||
| 269 | } | ||
| 270 | |||
| 271 | :deep(.uni-easyinput__content-input) { | ||
| 272 | font-size: 26rpx; | ||
| 273 | } | ||
| 274 | |||
| 275 | .invertedbtn-red { | ||
| 276 | border-radius: 50px; | ||
| 277 | background-color: #fff; | ||
| 278 | |||
| 279 | font-size: 30rpx; | ||
| 280 | padding: 10rpx 20rpx; | ||
| 281 | } | ||
| 282 | } | ||
| 283 | |||
| 284 | .mt0 { | ||
| 285 | margin-top: 0 !important; | ||
| 286 | } | ||
| 287 | |||
| 288 | .appList .appItem .name { | ||
| 289 | width: 80%; | ||
| 290 | word-break: break-all; | ||
| 291 | } | ||
| 292 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/mobilizeDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | <view class="wBox"> | ||
| 4 | <view class="tt">{{form.name}}</view> | ||
| 5 | |||
| 6 | <!-- 成员 --> | ||
| 7 | <view class="userlist"> | ||
| 8 | <view class="item" v-for="n in list"> | ||
| 9 | <view class="photobox"> | ||
| 10 | <view class="colorful">{{n.perName?.slice(0,1)}}</view> | ||
| 11 | </view> | ||
| 12 | <view> | ||
| 13 | <view class="name">{{n.perName}}</view> | ||
| 14 | <view class="date">申请调入一级协会 {{n.sourceShenDeptName||'--'}}</view> | ||
| 15 | <view class="date">申请调入单位 {{n.targetDeptName||'--'}}</view> | ||
| 16 | </view> | ||
| 17 | </view> | ||
| 18 | </view> | ||
| 19 | |||
| 20 | </view> | ||
| 21 | |||
| 22 | <view class="h3-padding">审核流程</view> | ||
| 23 | <view class="wBox"> | ||
| 24 | <view class="stepItem" v-for="(n,index) in auditLog"> | ||
| 25 | <view class="time">{{n.auditTime||'待审批'}}</view> | ||
| 26 | <view class="content"> | ||
| 27 | <view class="status"> | ||
| 28 | <text v-if="n.auditResult==1" class="text-success">审核通过</text> | ||
| 29 | <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text> | ||
| 30 | <text v-if="n.auditResult==0" class="text-primary"> 审核中</text> | ||
| 31 | </view> | ||
| 32 | <!-- <view class="name">第 {{index+1}} 步</view> --> | ||
| 33 | <view class="deptName">{{n.auditDeptName}}</view> | ||
| 34 | <view v-if="n.auditResult==2"> | ||
| 35 | 备注:{{n.auditMsg||'/' }} | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | |||
| 41 | <view class="fixedBottom" v-if="(deptType == 1)&&form.ztxRes == 0"> | ||
| 42 | <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> | ||
| 43 | <button class="btn-red" @click="audit(form.id,'1')">同意</button> | ||
| 44 | </view> | ||
| 45 | |||
| 46 | <view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.shenRes == 0"> | ||
| 47 | <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> | ||
| 48 | <button class="btn-red" @click="audit(form.id,'1')">同意</button> | ||
| 49 | </view> | ||
| 50 | |||
| 51 | </view> | ||
| 52 | </template> | ||
| 53 | |||
| 54 | <script setup> | ||
| 55 | import * as api from '@/common/api.js' | ||
| 56 | import config from '@/config.js' | ||
| 57 | import { | ||
| 58 | onMounted, | ||
| 59 | ref | ||
| 60 | } from 'vue' | ||
| 61 | import { | ||
| 62 | onLoad | ||
| 63 | } from '@dcloudio/uni-app' | ||
| 64 | const app = getApp(); | ||
| 65 | const queryParams = ref({}) | ||
| 66 | |||
| 67 | const form = ref({}) | ||
| 68 | const list = ref([]) | ||
| 69 | const auditLog = ref([]) | ||
| 70 | const feelList = ref([]) | ||
| 71 | const total = ref(0) | ||
| 72 | const totalYear = ref(0) | ||
| 73 | const deptType = ref() | ||
| 74 | let rangeId = '' | ||
| 75 | onLoad((option) => { | ||
| 76 | rangeId = option.rangeId | ||
| 77 | if ('auditLog' in option) { | ||
| 78 | auditLog.value = JSON.parse(decodeURIComponent(option.auditLog)) | ||
| 79 | } | ||
| 80 | if ('form' in option) { | ||
| 81 | form.value = JSON.parse(decodeURIComponent(option.form)) | ||
| 82 | } | ||
| 83 | console.log(form.value) | ||
| 84 | if (app.globalData.isLogin) { | ||
| 85 | init() | ||
| 86 | } else { | ||
| 87 | |||
| 88 | app.firstLoadCallback = () => { | ||
| 89 | init() | ||
| 90 | }; | ||
| 91 | } | ||
| 92 | |||
| 93 | }) | ||
| 94 | |||
| 95 | function init() { | ||
| 96 | deptType.value = app.globalData.deptType | ||
| 97 | getForm() | ||
| 98 | } | ||
| 99 | |||
| 100 | function getForm() { | ||
| 101 | uni.showLoading({ | ||
| 102 | title: '加载中' | ||
| 103 | }) | ||
| 104 | api.getTransferList({ | ||
| 105 | rangeId: rangeId | ||
| 106 | }).then(res => { | ||
| 107 | uni.hideLoading() | ||
| 108 | list.value = res.rows | ||
| 109 | }) | ||
| 110 | } | ||
| 111 | |||
| 112 | function audit(rangeId, flag) { | ||
| 113 | if (flag == '2') { | ||
| 114 | // 拒绝 | ||
| 115 | // 弹出框填写理由 | ||
| 116 | uni.showModal({ | ||
| 117 | title: '请输入拒绝理由', | ||
| 118 | editable: true, | ||
| 119 | success: function(res) { | ||
| 120 | if (res.confirm) { | ||
| 121 | if (!res.content) { | ||
| 122 | uni.showToast({ | ||
| 123 | title: '请输入拒绝理由', | ||
| 124 | icon: 'none' | ||
| 125 | }) | ||
| 126 | } else { | ||
| 127 | doApproval(rangeId, flag, res.content) | ||
| 128 | } | ||
| 129 | } | ||
| 130 | } | ||
| 131 | }) | ||
| 132 | } else if (flag == '1') { | ||
| 133 | // 二次确认 | ||
| 134 | uni.showModal({ | ||
| 135 | title: '提示', | ||
| 136 | content: `确定审批通过吗`, | ||
| 137 | success: function(res) { | ||
| 138 | if (res.confirm) { | ||
| 139 | doApproval(rangeId, flag) | ||
| 140 | } | ||
| 141 | } | ||
| 142 | }) | ||
| 143 | } | ||
| 144 | } | ||
| 145 | |||
| 146 | function doApproval(rangeId, flag, reason) { | ||
| 147 | var obj = { | ||
| 148 | flag: flag, | ||
| 149 | reason: reason || '', | ||
| 150 | rangeIds: rangeIds | ||
| 151 | } | ||
| 152 | console.log(obj) | ||
| 153 | api.mobilizeAudit(obj).then((res) => { | ||
| 154 | uni.showToast({ | ||
| 155 | title: '操作成功', | ||
| 156 | icon: 'none' | ||
| 157 | }) | ||
| 158 | uni.navigateBack() | ||
| 159 | }) | ||
| 160 | } | ||
| 161 | </script> | ||
| 162 | |||
| 163 | <style scoped lang="scss"> | ||
| 164 | .wBox { | ||
| 165 | width: 700rpx; | ||
| 166 | padding: 30rpx; | ||
| 167 | margin: 20rpx auto 0; | ||
| 168 | background: #FFFFFF; | ||
| 169 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 170 | border-radius: 15rpx; | ||
| 171 | |||
| 172 | .tt { | ||
| 173 | color: #0A1629; | ||
| 174 | font-size: 30rpx; | ||
| 175 | } | ||
| 176 | } | ||
| 177 | |||
| 178 | .userlist { | ||
| 179 | .item { | ||
| 180 | border-bottom: 1px dashed #e5e5e5; | ||
| 181 | position: relative; | ||
| 182 | |||
| 183 | .date { | ||
| 184 | margin-top: 10rpx; | ||
| 185 | } | ||
| 186 | |||
| 187 | .name { | ||
| 188 | text { | ||
| 189 | margin-left: 1em; | ||
| 190 | color: #4C5359; | ||
| 191 | font-size: 26rpx; | ||
| 192 | } | ||
| 193 | } | ||
| 194 | |||
| 195 | .nian { | ||
| 196 | position: absolute; | ||
| 197 | right: 0; | ||
| 198 | font-size: 30rpx; | ||
| 199 | color: #AD181F; | ||
| 200 | } | ||
| 201 | } | ||
| 202 | } | ||
| 203 | |||
| 204 | .info { | ||
| 205 | display: flex; | ||
| 206 | margin: 30rpx 0 20rpx; | ||
| 207 | font-size: 28rpx; | ||
| 208 | |||
| 209 | view { | ||
| 210 | color: #7D8592; | ||
| 211 | margin-right: 20rpx; | ||
| 212 | } | ||
| 213 | } | ||
| 214 | |||
| 215 | .fixedBottom { | ||
| 216 | justify-content: center; | ||
| 217 | |||
| 218 | button { | ||
| 219 | margin: 0 20rpx; | ||
| 220 | width: 286rpx; | ||
| 221 | } | ||
| 222 | |||
| 223 | .btn-red { | ||
| 224 | width: 286rpx; | ||
| 225 | } | ||
| 226 | } | ||
| 227 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/payment.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <!-- 会员缴费 --> | ||
| 4 | |||
| 5 | <view class="appList"> | ||
| 6 | <view class="appItem" v-for="item in list" @click="goDteail(item)"> | ||
| 7 | <view class="status"> | ||
| 8 | <text v-if="item.status==1" class="text-primary">审核中</text> | ||
| 9 | <text v-if="item.status==2" class="text-success"> 审核通过</text> | ||
| 10 | <text v-if="item.status==3" class="text-danger"> 审核拒绝</text> | ||
| 11 | <text v-if="item.status==4" class="text-warning">已退回</text> | ||
| 12 | </view> | ||
| 13 | <view class="date"> | ||
| 14 | <uni-icons type="calendar" size="16" color="#7D8592"></uni-icons> | ||
| 15 | {{item.commitTime}} 提交 | ||
| 16 | </view> | ||
| 17 | <view class="name">{{item.paymentName}}</view> | ||
| 18 | <view class="flexbox"> | ||
| 19 | <view> | ||
| 20 | 人数合计 | ||
| 21 | <view>{{item.personCount}}</view> | ||
| 22 | </view> | ||
| 23 | <view> | ||
| 24 | 新会员合计 | ||
| 25 | <view>{{item.newPersonCount}}</view> | ||
| 26 | </view> | ||
| 27 | <view> | ||
| 28 | 年限合计 | ||
| 29 | <view>{{item.totalYear}}</view> | ||
| 30 | </view> | ||
| 31 | </view> | ||
| 32 | <view class="func" v-if="item.status==0"> | ||
| 33 | <button>提交审核</button> | ||
| 34 | </view> | ||
| 35 | </view> | ||
| 36 | </view> | ||
| 37 | |||
| 38 | </view> | ||
| 39 | </template> | ||
| 40 | |||
| 41 | <script setup> | ||
| 42 | import * as api from '@/common/api.js' | ||
| 43 | import config from '@/config.js' | ||
| 44 | import { | ||
| 45 | onMounted, | ||
| 46 | ref | ||
| 47 | } from 'vue' | ||
| 48 | import { | ||
| 49 | onLoad | ||
| 50 | } from '@dcloudio/uni-app' | ||
| 51 | const queryParams = ref({ | ||
| 52 | // pageNum: 1, | ||
| 53 | // pageSize: 10 | ||
| 54 | }) | ||
| 55 | const list = ref([]) | ||
| 56 | const total = ref(0) | ||
| 57 | onMounted(() => { | ||
| 58 | getList() | ||
| 59 | }) | ||
| 60 | |||
| 61 | function getList() { | ||
| 62 | api.getPaymentList(queryParams.value).then(res => { | ||
| 63 | list.value = res.rows | ||
| 64 | total.value = res.total | ||
| 65 | }) | ||
| 66 | } | ||
| 67 | |||
| 68 | function goDteail(item) { | ||
| 69 | let path = `/pages/personalVip/paymentDetail?wfCode=${item.wfCode}` | ||
| 70 | uni.navigateTo({ | ||
| 71 | url: path | ||
| 72 | }); | ||
| 73 | } | ||
| 74 | </script> | ||
| 75 | |||
| 76 | <style> | ||
| 77 | |||
| 78 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
pages/personalVip/paymentDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="wBox"> | ||
| 4 | <view class="tt">{{form.paymentName}}</view> | ||
| 5 | <view class="info"> | ||
| 6 | <view>共<text>{{list.length}}</text>人</view> | ||
| 7 | </view> | ||
| 8 | <!-- 成员 --> | ||
| 9 | <view class="userlist"> | ||
| 10 | <view class="item" v-for="n in list"> | ||
| 11 | <view class="photobox"> | ||
| 12 | <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> | ||
| 13 | <view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view> | ||
| 14 | </view> | ||
| 15 | <view> | ||
| 16 | <view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view> | ||
| 17 | <view class="date">原有效期至{{n.originValidityDate||'--'}}</view> | ||
| 18 | </view> | ||
| 19 | <view class="nian"> | ||
| 20 | {{n.payYear}}年 | ||
| 21 | </view> | ||
| 22 | </view> | ||
| 23 | </view> | ||
| 24 | |||
| 25 | </view> | ||
| 26 | |||
| 27 | <view class="h3-padding">审核流程</view> | ||
| 28 | <view class="wBox"> | ||
| 29 | <view class="stepItem" v-for="(n,index) in feelList"> | ||
| 30 | <view class="time">{{n.auditTime||'待审批'}}</view> | ||
| 31 | <view class="content"> | ||
| 32 | <view class="status"> | ||
| 33 | <text v-if="n.auditResult==1" class="text-success">审核通过</text> | ||
| 34 | <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text> | ||
| 35 | <text v-if="n.auditResult==0" class="text-primary"> 审核中</text> | ||
| 36 | <text v-if="n.auditResult==3" class="text-warning"> 已退回</text> | ||
| 37 | </view> | ||
| 38 | <view class="name">第 {{index+1}} 步</view> | ||
| 39 | <view class="deptName">{{n.auditDeptName||n.auditBy}}</view> | ||
| 40 | <view> | ||
| 41 | 备注:{{n.auditMsg||'/' }} | ||
| 42 | </view> | ||
| 43 | </view> | ||
| 44 | </view> | ||
| 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 queryParams = ref({ | ||
| 60 | // pageNum: 1, | ||
| 61 | // pageSize: 10 | ||
| 62 | }) | ||
| 63 | const wfCode = ref('') | ||
| 64 | const form = ref([]) | ||
| 65 | const list = ref([]) | ||
| 66 | const feelList = ref([]) | ||
| 67 | const total = ref(0) | ||
| 68 | onLoad((option) => { | ||
| 69 | wfCode.value = option.wfCode | ||
| 70 | getForm() | ||
| 71 | }) | ||
| 72 | |||
| 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() { | ||
| 87 | queryParams.value.rangeId = form.value.rangId | ||
| 88 | api.addSelectPageList(queryParams.value).then(res => { | ||
| 89 | list.value = res.pageData.rows | ||
| 90 | }) | ||
| 91 | } | ||
| 92 | |||
| 93 | function getFillList(id) { | ||
| 94 | api.fillAuditLog(id).then(res => { | ||
| 95 | feelList.value = res.data | ||
| 96 | }) | ||
| 97 | } | ||
| 98 | </script> | ||
| 99 | |||
| 100 | <style scoped lang="scss"> | ||
| 101 | .wBox{ | ||
| 102 | width: 700rpx;padding: 30rpx;margin: 20rpx auto 0; | ||
| 103 | background: #FFFFFF; | ||
| 104 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196,203,214,0.1); | ||
| 105 | border-radius: 15rpx; | ||
| 106 | .tt{ | ||
| 107 | color: #0A1629; | ||
| 108 | font-size: 30rpx;} | ||
| 109 | } | ||
| 110 | |||
| 111 | .userlist{ | ||
| 112 | .item{border-bottom: 1px dashed #e5e5e5;position: relative; | ||
| 113 | .date{margin-top: 10rpx;} | ||
| 114 | .name{ | ||
| 115 | text{margin-left: 1em; | ||
| 116 | color: #4C5359; | ||
| 117 | font-size: 26rpx;} | ||
| 118 | } | ||
| 119 | .nian{position: absolute;right: 0; | ||
| 120 | font-size: 30rpx; | ||
| 121 | color: #AD181F;} | ||
| 122 | } | ||
| 123 | } | ||
| 124 | .info{display: flex;margin: 30rpx 0 20rpx; | ||
| 125 | font-size: 28rpx; | ||
| 126 | view{color: #7D8592;margin-right: 20rpx; | ||
| 127 | text{ | ||
| 128 | color: #AD181F;} | ||
| 129 | } | ||
| 130 | } | ||
| 131 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
pages/rank/approval.vue
0 → 100644
This diff is collapsed.
Click to expand it.
pages/train/apply/apply.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
pages/train/index.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
pages/train/payScuess/payScuess.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
pages/usercenter/match.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
pages/usercenter/matchBillDetail.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
pages/usercenter/matchSignDetail.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
pages/usercenter/mycard/mycard.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
pages/usercenter/mycard/renew.vue
deleted
100644 → 0
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
static/member/dx.png
0 → 100644
1.66 KB
static/member/dx_dwn.png
0 → 100644
2.6 KB
static/member/qx@2x.png
0 → 100644
2.79 KB
static/member/qx_dwn@2x.png
0 → 100644
2.17 KB
This diff is collapsed.
Click to expand it.
-
Please register or sign in to post a comment