支付
Showing
21 changed files
with
1228 additions
and
93 deletions
| ... | @@ -220,6 +220,13 @@ export function addPersonToMyDept(data) { | ... | @@ -220,6 +220,13 @@ export function addPersonToMyDept(data) { |
| 220 | params: data | 220 | params: data |
| 221 | }) | 221 | }) |
| 222 | } | 222 | } |
| 223 | export function insertSinglePay(data) { | ||
| 224 | return request({ | ||
| 225 | url: '/person/paymentNew/insertSinglePay', | ||
| 226 | method: 'post', | ||
| 227 | params: data | ||
| 228 | }) | ||
| 229 | } | ||
| 223 | // 提交人工审核 | 230 | // 提交人工审核 |
| 224 | export function addPersonCommit(data) { | 231 | export function addPersonCommit(data) { |
| 225 | return request({ | 232 | return request({ |
| ... | @@ -228,6 +235,13 @@ export function addPersonCommit(data) { | ... | @@ -228,6 +235,13 @@ export function addPersonCommit(data) { |
| 228 | params: data | 235 | params: data |
| 229 | }) | 236 | }) |
| 230 | } | 237 | } |
| 238 | |||
| 239 | export function getZtxFeeConfig() { | ||
| 240 | return request({ | ||
| 241 | url: '/system/config/getZtxFeeConfig', | ||
| 242 | method: 'get' | ||
| 243 | }) | ||
| 244 | } | ||
| 231 | // 图片上传 | 245 | // 图片上传 |
| 232 | export function uploadImg(e) { | 246 | export function uploadImg(e) { |
| 233 | const tempFilePaths = e.tempFilePaths; | 247 | const tempFilePaths = e.tempFilePaths; |
| ... | @@ -1363,7 +1377,7 @@ export function getMyStatus() { | ... | @@ -1363,7 +1377,7 @@ export function getMyStatus() { |
| 1363 | // 个人会员缴费支付 | 1377 | // 个人会员缴费支付 |
| 1364 | export function goPay(id) { | 1378 | export function goPay(id) { |
| 1365 | return request({ | 1379 | return request({ |
| 1366 | url: `/person/paymentRangeNew/pay/${id}`, | 1380 | url: `/person/paymentRangeNew/pay/${id}`, |
| 1367 | method: 'post' | 1381 | method: 'post' |
| 1368 | }) | 1382 | }) |
| 1369 | } | 1383 | } | ... | ... |
| 1 | import config from '@/config.js' | 1 | import config from '@/config.js' |
| 2 | import _ from 'underscore' | 2 | import _ from 'underscore' |
| 3 | 3 | ||
| 4 | const excludeUrls = ['getMemberCountInfo', 'getInfo'] | 4 | const excludeUrls = ['getMemberCountInfo', 'getInfo'] |
| ... | @@ -23,7 +23,7 @@ function getHeaders() { | ... | @@ -23,7 +23,7 @@ function getHeaders() { |
| 23 | const header = { | 23 | const header = { |
| 24 | 'Authorization': token, | 24 | 'Authorization': token, |
| 25 | 'Content-Type': 'application/json', // 根据自己的数据类型 | 25 | 'Content-Type': 'application/json', // 根据自己的数据类型 |
| 26 | 'Content-Language': 'zh_CN', | 26 | 'Content-Language': 'zh_CN', |
| 27 | // "Content-Type":"application/x-www-form-urlencoded", | 27 | // "Content-Type":"application/x-www-form-urlencoded", |
| 28 | 'Ztx-Per-Id': uni.getStorageSync('perId') || '-1' | 28 | 'Ztx-Per-Id': uni.getStorageSync('perId') || '-1' |
| 29 | } | 29 | } |
| ... | @@ -118,11 +118,11 @@ const request = function(req) { | ... | @@ -118,11 +118,11 @@ const request = function(req) { |
| 118 | }).catch(res => { | 118 | }).catch(res => { |
| 119 | reject(res) | 119 | reject(res) |
| 120 | }).finally(() => { | 120 | }).finally(() => { |
| 121 | // if (req.method == 'POST' && !req.hideLoding) { | 121 | // if (req.method == 'POST' && !req.hideLoading) { |
| 122 | // uni.hideLoading() | 122 | uni.hideLoading() |
| 123 | // } | 123 | // } |
| 124 | }) | 124 | }) |
| 125 | }) | 125 | }) |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | export default request | 128 | export default request | ... | ... |
| ... | @@ -5,7 +5,7 @@ | ... | @@ -5,7 +5,7 @@ |
| 5 | // staging 会员系统 | 5 | // staging 会员系统 |
| 6 | // const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/"; | 6 | // const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/"; |
| 7 | // const baseUrl_api = "https://ztx.itechtop.cn:8443/stage-api"; | 7 | // const baseUrl_api = "https://ztx.itechtop.cn:8443/stage-api"; |
| 8 | const baseUrl_api = 'http://192.168.1.154:8788' | 8 | const baseUrl_api = 'http://192.168.1.189:8788' |
| 9 | // const baseUrl_api = 'https://tkcn.19wk.cn:8443/stage-api' | 9 | // const baseUrl_api = 'https://tkcn.19wk.cn:8443/stage-api' |
| 10 | // const baseUrl_api = 'http://tk004.wxjylt.com/stage-api' | 10 | // const baseUrl_api = 'http://tk004.wxjylt.com/stage-api' |
| 11 | 11 | ... | ... |
This diff could not be displayed because it is too large.
login/loginC.vue
0 → 100644
This diff could not be displayed because it is too large.
| ... | @@ -23,7 +23,7 @@ | ... | @@ -23,7 +23,7 @@ |
| 23 | <view v-else > | 23 | <view v-else > |
| 24 | <button class="btn-red" style="margin: 0 20rpx 0 0;" size="mini" :disabled="auditStatus==1||auditStatus==2||form.isPoints==0" | 24 | <button class="btn-red" style="margin: 0 20rpx 0 0;" size="mini" :disabled="auditStatus==1||auditStatus==2||form.isPoints==0" |
| 25 | @click="showApplyDialog">考点申请</button> | 25 | @click="showApplyDialog">考点申请</button> |
| 26 | <button class="btn-red" style="margin: 0 20rpx 0 0;" size="mini" :disabled="btn" | 26 | <button class="btn-red" style="margin: 0 20rpx 0 0;" size="mini" :disabled="btn" |
| 27 | @click="payTheFees">去缴费</button> | 27 | @click="payTheFees">去缴费</button> |
| 28 | <button class="btn-red-kx" style="margin: 0 20rpx 0 0;" size="mini" v-if="form.deptType!=1" | 28 | <button class="btn-red-kx" style="margin: 0 20rpx 0 0;" size="mini" v-if="form.deptType!=1" |
| 29 | @click="auditEditFN">审核详情</button> | 29 | @click="auditEditFN">审核详情</button> | ... | ... |
| ... | @@ -77,9 +77,10 @@ | ... | @@ -77,9 +77,10 @@ |
| 77 | <view class="custom-modal"> | 77 | <view class="custom-modal"> |
| 78 | <view class="modal-title">提示</view> | 78 | <view class="modal-title">提示</view> |
| 79 | <view class="modal-content"> | 79 | <view class="modal-content"> |
| 80 | 暂未查询到相关企业信息,企业信息异常请检查相关资料信息,确认无误后再次提交! | 80 | 暂未查询到相关企业信息 |
| 81 | </view> | 81 | </view> |
| 82 | <view class="modal-btns"> | 82 | <view class=" modal-content" style="color:red">企业信息异常请检查相关资料信息,确认无误后再次提交!</view> |
| 83 | <view class="modal-btns mt20"> | ||
| 83 | <button class="btn-cancel" @click="closeVerifyPopup()">返回修改</button> | 84 | <button class="btn-cancel" @click="closeVerifyPopup()">返回修改</button> |
| 84 | <button class="btn-confirm" @click="confirmSubmit()">确认无误</button> | 85 | <button class="btn-confirm" @click="confirmSubmit()">确认无误</button> |
| 85 | </view> | 86 | </view> | ... | ... |
| ... | @@ -119,6 +119,13 @@ | ... | @@ -119,6 +119,13 @@ |
| 119 | "navigationStyle": "custom" | 119 | "navigationStyle": "custom" |
| 120 | } | 120 | } |
| 121 | }, { | 121 | }, { |
| 122 | "path": "loginC", | ||
| 123 | "style": { | ||
| 124 | "navigationBarTitleText": "", | ||
| 125 | "enablePullDownRefresh": false, | ||
| 126 | "navigationStyle": "custom" | ||
| 127 | } | ||
| 128 | }, { | ||
| 122 | "path": "register", | 129 | "path": "register", |
| 123 | "style": { | 130 | "style": { |
| 124 | "navigationBarTitleText": "注册", | 131 | "navigationBarTitleText": "注册", |
| ... | @@ -126,15 +133,62 @@ | ... | @@ -126,15 +133,62 @@ |
| 126 | "navigationStyle": "custom" | 133 | "navigationStyle": "custom" |
| 127 | } | 134 | } |
| 128 | }] | 135 | }] |
| 129 | },{ | 136 | }, |
| 137 | { | ||
| 138 | "root": "personal", | ||
| 139 | "pages": [ | ||
| 140 | { | ||
| 141 | "path": "addVip_per", | ||
| 142 | "style": { | ||
| 143 | "navigationBarTitleText": "个人会员申请", | ||
| 144 | "enablePullDownRefresh": false | ||
| 145 | } | ||
| 146 | }, | ||
| 147 | { | ||
| 148 | "path" : "goPay_per", | ||
| 149 | "style" : | ||
| 150 | { | ||
| 151 | "navigationBarTitleText" : "付款详情", | ||
| 152 | "enablePullDownRefresh" : false | ||
| 153 | } | ||
| 154 | }, | ||
| 155 | { | ||
| 156 | "path" : "submitPay", | ||
| 157 | "style" : | ||
| 158 | { | ||
| 159 | "navigationBarTitleText" : "确认支付", | ||
| 160 | "enablePullDownRefresh" : false | ||
| 161 | } | ||
| 162 | }, | ||
| 163 | { | ||
| 164 | "path" : "sucPay", | ||
| 165 | "style" : | ||
| 166 | { | ||
| 167 | "navigationBarTitleText" : "支付详情", | ||
| 168 | "enablePullDownRefresh" : false | ||
| 169 | } | ||
| 170 | }, | ||
| 171 | { | ||
| 172 | "path" : "home", | ||
| 173 | "style" : | ||
| 174 | { | ||
| 175 | "navigationBarTitleText" : "个人会员中心", | ||
| 176 | "enablePullDownRefresh" : false | ||
| 177 | } | ||
| 178 | } | ||
| 179 | ] | ||
| 180 | }, | ||
| 181 | { | ||
| 130 | "root": "personalVip", | 182 | "root": "personalVip", |
| 131 | "pages": [{ | 183 | "pages": [ |
| 184 | { | ||
| 132 | "path": "addVip", | 185 | "path": "addVip", |
| 133 | "style": { | 186 | "style": { |
| 134 | "navigationBarTitleText": "添加会员", | 187 | "navigationBarTitleText": "添加会员", |
| 135 | "enablePullDownRefresh": false | 188 | "enablePullDownRefresh": false |
| 136 | } | 189 | } |
| 137 | }, { | 190 | }, |
| 191 | { | ||
| 138 | "path": "renew", | 192 | "path": "renew", |
| 139 | "style": { | 193 | "style": { |
| 140 | "navigationBarTitleText": "会员缴费", | 194 | "navigationBarTitleText": "会员缴费", |
| ... | @@ -721,7 +775,7 @@ | ... | @@ -721,7 +775,7 @@ |
| 721 | "preloadRule": { | 775 | "preloadRule": { |
| 722 | "pages/index/index": { | 776 | "pages/index/index": { |
| 723 | "network": "all", | 777 | "network": "all", |
| 724 | "packages": ["login","personalVip", "group","level","myCenter"] | 778 | "packages": ["login","personalVip", "group","level","myCenter","personal"] |
| 725 | } | 779 | } |
| 726 | } | 780 | } |
| 727 | } | 781 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -81,10 +81,10 @@ | ... | @@ -81,10 +81,10 @@ |
| 81 | <view @click="goPath('/personalVip/feeBill')"> | 81 | <view @click="goPath('/personalVip/feeBill')"> |
| 82 | <image :src="config.baseUrl_api+'/fs/static/icon/6.png'" /> | 82 | <image :src="config.baseUrl_api+'/fs/static/icon/6.png'" /> |
| 83 | 缴费单 | 83 | 缴费单 |
| 84 | </view> | 84 | </view> |
| 85 | <view @click="goPath('/personalVip/monthFee')"> | 85 | <view @click="goPath('/personalVip/monthFee')"> |
| 86 | <image :src="config.baseUrl_api+'/fs/static/icon/30.png'" /> | 86 | <image :src="config.baseUrl_api+'/fs/static/icon/30.png'" /> |
| 87 | 月结缴费 | 87 | 月结缴费 |
| 88 | </view> | 88 | </view> |
| 89 | <view @click="goPath('/personalVip/changeVip')"> | 89 | <view @click="goPath('/personalVip/changeVip')"> |
| 90 | <image :src="config.baseUrl_api+'/fs/static/icon/25.png'" /> | 90 | <image :src="config.baseUrl_api+'/fs/static/icon/25.png'" /> |
| ... | @@ -173,7 +173,7 @@ | ... | @@ -173,7 +173,7 @@ |
| 173 | <view @click="goPath('/personalVip/changeVipAudit')"> | 173 | <view @click="goPath('/personalVip/changeVipAudit')"> |
| 174 | <image :src="config.baseUrl_api+'/fs/static/icon/25.png'" /> | 174 | <image :src="config.baseUrl_api+'/fs/static/icon/25.png'" /> |
| 175 | 变更审核 | 175 | 变更审核 |
| 176 | </view> | 176 | </view> |
| 177 | <view @click="goPath('/personalVip/mergeVipAudit')"> | 177 | <view @click="goPath('/personalVip/mergeVipAudit')"> |
| 178 | <image :src="config.baseUrl_api+'/fs/static/icon/28.png'" /> | 178 | <image :src="config.baseUrl_api+'/fs/static/icon/28.png'" /> |
| 179 | 合并审核 | 179 | 合并审核 |
| ... | @@ -291,13 +291,13 @@ | ... | @@ -291,13 +291,13 @@ |
| 291 | const numData = ref({}); | 291 | const numData = ref({}); |
| 292 | 292 | ||
| 293 | const messageList = ref([]) | 293 | const messageList = ref([]) |
| 294 | const newsList = ref([]) | 294 | const newsList = ref([]) |
| 295 | const isInit = ref(false) | 295 | const isInit = ref(false) |
| 296 | const isBlack = ref(0) | 296 | const isBlack = ref(0) |
| 297 | onShow(() => { | 297 | onShow(() => { |
| 298 | uni.showLoading({ | 298 | // uni.showLoading({ |
| 299 | title:'加载中' | 299 | // title:'加载中' |
| 300 | }) | 300 | // }) |
| 301 | if (app.globalData.isLogin) { | 301 | if (app.globalData.isLogin) { |
| 302 | init() | 302 | init() |
| 303 | } else { | 303 | } else { |
| ... | @@ -317,19 +317,19 @@ | ... | @@ -317,19 +317,19 @@ |
| 317 | withShareTicket: true, | 317 | withShareTicket: true, |
| 318 | menus: ['shareAppMessage', 'shareTimeline'] | 318 | menus: ['shareAppMessage', 'shareTimeline'] |
| 319 | }); | 319 | }); |
| 320 | } | 320 | } |
| 321 | const changePassFlag = app.globalData.user?.changePassFlag | 321 | const changePassFlag = app.globalData.user?.changePassFlag |
| 322 | if (changePassFlag === '1'&&memberInfo.value.activeStatus == '1'&&app.globalData.authenticationStatus==2) { | 322 | if (changePassFlag === '1'&&memberInfo.value.activeStatus == '1'&&app.globalData.authenticationStatus==2) { |
| 323 | uni.showModal({ | 323 | uni.showModal({ |
| 324 | content: "密码长期未更新,请及时更新", | 324 | content: "密码长期未更新,请及时更新", |
| 325 | success: function(res) { | 325 | success: function(res) { |
| 326 | if (res.confirm) { | 326 | if (res.confirm) { |
| 327 | uni.navigateTo({ | 327 | uni.navigateTo({ |
| 328 | url: `/myCenter/safe?current=1` | 328 | url: `/myCenter/safe?current=1` |
| 329 | }); | 329 | }); |
| 330 | } | 330 | } |
| 331 | } | 331 | } |
| 332 | }) | 332 | }) |
| 333 | } | 333 | } |
| 334 | }); | 334 | }); |
| 335 | 335 | ||
| ... | @@ -350,14 +350,14 @@ | ... | @@ -350,14 +350,14 @@ |
| 350 | }) | 350 | }) |
| 351 | } | 351 | } |
| 352 | 352 | ||
| 353 | function goPath(path) { | 353 | function goPath(path) { |
| 354 | if(isBlack.value=='1'){ | 354 | if(isBlack.value=='1'){ |
| 355 | uni.showModal({ | 355 | uni.showModal({ |
| 356 | title: '提示', | 356 | title: '提示', |
| 357 | content: '您的账号已被拉黑,请联系中跆协!', | 357 | content: '您的账号已被拉黑,请联系中跆协!', |
| 358 | success: function(res) {} | 358 | success: function(res) {} |
| 359 | }) | 359 | }) |
| 360 | return | 360 | return |
| 361 | } | 361 | } |
| 362 | if (app.globalData.authenticationStatus == '5') { | 362 | if (app.globalData.authenticationStatus == '5') { |
| 363 | if (app.globalData.genFlag == 1) { | 363 | if (app.globalData.genFlag == 1) { |
| ... | @@ -370,11 +370,11 @@ | ... | @@ -370,11 +370,11 @@ |
| 370 | uni.showModal({ | 370 | uni.showModal({ |
| 371 | title: '提示', | 371 | title: '提示', |
| 372 | content: '会员已过期,请及时续费', | 372 | content: '会员已过期,请及时续费', |
| 373 | success: function(res) { | 373 | success: function(res) { |
| 374 | if(res.confirm){ | 374 | if(res.confirm){ |
| 375 | uni.navigateTo({ | 375 | uni.navigateTo({ |
| 376 | url: '/myCenter/auth' | 376 | url: '/myCenter/auth' |
| 377 | }); | 377 | }); |
| 378 | } | 378 | } |
| 379 | } | 379 | } |
| 380 | }) | 380 | }) |
| ... | @@ -385,12 +385,12 @@ | ... | @@ -385,12 +385,12 @@ |
| 385 | uni.showModal({ | 385 | uni.showModal({ |
| 386 | title: '提示', | 386 | title: '提示', |
| 387 | content: '账号未激活,请前去激活', | 387 | content: '账号未激活,请前去激活', |
| 388 | success: function(res) { | 388 | success: function(res) { |
| 389 | if(res.confirm){ | 389 | if(res.confirm){ |
| 390 | uni.navigateTo({ | 390 | uni.navigateTo({ |
| 391 | url: '/myCenter/auth' | 391 | url: '/myCenter/auth' |
| 392 | }); | 392 | }); |
| 393 | } | 393 | } |
| 394 | } | 394 | } |
| 395 | }) | 395 | }) |
| 396 | return | 396 | return |
| ... | @@ -418,11 +418,11 @@ | ... | @@ -418,11 +418,11 @@ |
| 418 | uni.showModal({ | 418 | uni.showModal({ |
| 419 | title: '提示', | 419 | title: '提示', |
| 420 | content: '会员已过期,请及时续费', | 420 | content: '会员已过期,请及时续费', |
| 421 | success: function(res) { | 421 | success: function(res) { |
| 422 | if(res.confirm){ | 422 | if(res.confirm){ |
| 423 | uni.navigateTo({ | 423 | uni.navigateTo({ |
| 424 | url: '/myCenter/auth' | 424 | url: '/myCenter/auth' |
| 425 | }); | 425 | }); |
| 426 | } | 426 | } |
| 427 | } | 427 | } |
| 428 | }) | 428 | }) |
| ... | @@ -442,31 +442,31 @@ | ... | @@ -442,31 +442,31 @@ |
| 442 | // uni.navigateTo({ | 442 | // uni.navigateTo({ |
| 443 | // url: '/pages/index/perfect' | 443 | // url: '/pages/index/perfect' |
| 444 | // }); | 444 | // }); |
| 445 | } | 445 | } |
| 446 | if (memberInfo.value.activeStatus == 0) { | 446 | if (memberInfo.value.activeStatus == 0) { |
| 447 | uni.showModal({ | 447 | uni.showModal({ |
| 448 | content: '账号未激活,请前去激活', | 448 | content: '账号未激活,请前去激活', |
| 449 | success: function(res) { | 449 | success: function(res) { |
| 450 | if(res.confirm){ | 450 | if(res.confirm){ |
| 451 | uni.navigateTo({ | 451 | uni.navigateTo({ |
| 452 | url: '/myCenter/auth' | 452 | url: '/myCenter/auth' |
| 453 | }); | 453 | }); |
| 454 | } | 454 | } |
| 455 | 455 | ||
| 456 | } | 456 | } |
| 457 | }) | 457 | }) |
| 458 | } | 458 | } |
| 459 | 459 | ||
| 460 | 460 | ||
| 461 | uni.hideLoading(); | 461 | uni.hideLoading(); |
| 462 | }) | 462 | }) |
| 463 | 463 | ||
| 464 | api.getRemindCount().then(res => { | 464 | api.getRemindCount().then(res => { |
| 465 | numData.value = res.data | 465 | numData.value = res.data |
| 466 | }) | 466 | }) |
| 467 | 467 | ||
| 468 | api.getBlack().then(res=>{ | 468 | api.getBlack().then(res=>{ |
| 469 | isBlack.value = res.data | 469 | isBlack.value = res.data |
| 470 | }) | 470 | }) |
| 471 | 471 | ||
| 472 | getNews() | 472 | getNews() |
| ... | @@ -480,14 +480,14 @@ | ... | @@ -480,14 +480,14 @@ |
| 480 | newsList.value = res.rows | 480 | newsList.value = res.rows |
| 481 | }) | 481 | }) |
| 482 | } | 482 | } |
| 483 | 483 | ||
| 484 | function goNewsDetail(n){ | 484 | function goNewsDetail(n){ |
| 485 | uni.navigateTo({ | 485 | uni.navigateTo({ |
| 486 | url: `/pages/index/newsDetail?noteId=${n.noteId}` | 486 | url: `/pages/index/newsDetail?noteId=${n.noteId}` |
| 487 | }); | 487 | }); |
| 488 | } | 488 | } |
| 489 | </script> | 489 | </script> |
| 490 | <style scope lang="scss"> | 490 | <style scope lang="scss"> |
| 491 | :deep(.uni-section){background-color: transparent!important;} | 491 | :deep(.uni-section){background-color: transparent!important;} |
| 492 | .page { | 492 | .page { |
| 493 | width: 100vw; | 493 | width: 100vw; | ... | ... |
personal/addVip_per.vue
0 → 100644
This diff is collapsed.
Click to expand it.
personal/goPay_per.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="container"> | ||
| 3 | <view class="content"> | ||
| 4 | <view class="card"> | ||
| 5 | <view class="yearRow"> | ||
| 6 | <view class="label">缴费年限</view> | ||
| 7 | <view class="control"> | ||
| 8 | <image class="icon" @click="minusYear" src="/static/dd_02.png" mode="widthFix" v-if="form.payYear > 1" ></image> | ||
| 9 | <image class="icon" src="/static/dd_02_g.png" mode="widthFix" v-else ></image> | ||
| 10 | <text class="num">{{ form.payYear }}年</text> | ||
| 11 | <image class="icon" src="/static/btn_03.png" mode="widthFix" @click="plusYear" v-if="form.payYear < 5" ></image> | ||
| 12 | <image class="icon" src="/static/btn_03_g.png" mode="widthFix" v-else ></image> | ||
| 13 | </view> | ||
| 14 | </view> | ||
| 15 | </view> | ||
| 16 | |||
| 17 | <view class="card "> | ||
| 18 | <view class="row "> | ||
| 19 | <text class="label">费用合计</text> | ||
| 20 | <text class="value red">{{ form.payYear * memberFee }}元</text> | ||
| 21 | </view> | ||
| 22 | |||
| 23 | </view> | ||
| 24 | |||
| 25 | <view class="payRow "> | ||
| 26 | <radio-group @change="onPayTypeChange"> | ||
| 27 | <label class="radioItem"> | ||
| 28 | <radio value="1" :checked="payType === '1'" class="custom-radio" /> | ||
| 29 | <view class="payInfo"> | ||
| 30 | <image class="icon" src="/static/min.png" mode="widthFix"></image> | ||
| 31 | <text>民生付</text> | ||
| 32 | </view> | ||
| 33 | </label> | ||
| 34 | </radio-group> | ||
| 35 | </view> | ||
| 36 | |||
| 37 | <view class="totalRow "> | ||
| 38 | <text class="label">支付费用合计</text> | ||
| 39 | <text class="value redBig">{{ memberTotalFee }}元</text> | ||
| 40 | </view> | ||
| 41 | |||
| 42 | </view> | ||
| 43 | |||
| 44 | <view class="bottomBtn"> | ||
| 45 | <button class="payBtn" @click="handelPay" :loading="isPaying">立即支付 ¥{{ memberTotalFee }}</button> | ||
| 46 | </view> | ||
| 47 | |||
| 48 | </view> | ||
| 49 | </template> | ||
| 50 | |||
| 51 | <script setup> | ||
| 52 | import { ref, computed, onMounted } from 'vue' | ||
| 53 | import { onLoad } from '@dcloudio/uni-app'; | ||
| 54 | import * as api from '@/common/api.js' | ||
| 55 | |||
| 56 | const form = ref({ | ||
| 57 | payYear: 1 | ||
| 58 | }) | ||
| 59 | |||
| 60 | // 支付方式 | ||
| 61 | const payType = ref('1') | ||
| 62 | const isPaying = ref(false) | ||
| 63 | |||
| 64 | // 费用与优惠 | ||
| 65 | const memberFee = ref(0) | ||
| 66 | const memberTotalFee = computed(() => { | ||
| 67 | return memberFee.value * form.value.payYear | ||
| 68 | |||
| 69 | }) | ||
| 70 | onLoad((options) => { | ||
| 71 | if (options.baseFormData) { | ||
| 72 | const data = JSON.parse(decodeURIComponent(options.baseFormData)) | ||
| 73 | form.value = { | ||
| 74 | ...data, | ||
| 75 | payYear: 1 // 年限默认1 | ||
| 76 | } | ||
| 77 | } | ||
| 78 | // 初始化接口 | ||
| 79 | getMyMemberCertUnitFeeApi() | ||
| 80 | }) | ||
| 81 | |||
| 82 | |||
| 83 | |||
| 84 | // 减年限 | ||
| 85 | const minusYear = () => { | ||
| 86 | if (form.value.payYear > 1) { | ||
| 87 | form.value.payYear-- | ||
| 88 | } | ||
| 89 | } | ||
| 90 | |||
| 91 | // 加年限(最大 5 年) | ||
| 92 | const plusYear = () => { | ||
| 93 | if (form.value.payYear < 5) { | ||
| 94 | form.value.payYear++ | ||
| 95 | } | ||
| 96 | } | ||
| 97 | |||
| 98 | // 支付方式切换 | ||
| 99 | const onPayTypeChange = (e) => { | ||
| 100 | payType.value = e.detail.value | ||
| 101 | } | ||
| 102 | |||
| 103 | const handelPay = async () => { | ||
| 104 | if (memberTotalFee.value <= 0) { | ||
| 105 | uni.showToast({ title: '支付金额异常', icon: 'none' }) | ||
| 106 | return | ||
| 107 | } | ||
| 108 | |||
| 109 | isPaying.value = true | ||
| 110 | try { | ||
| 111 | // 拼接完整参数 | ||
| 112 | const postData = { | ||
| 113 | ...form.value, | ||
| 114 | payYear: form.value.payYear, | ||
| 115 | payType: payType.value, | ||
| 116 | totalFee: memberTotalFee.value | ||
| 117 | } | ||
| 118 | |||
| 119 | const res = await api.insertSinglePay(postData) | ||
| 120 | console.log(777,res) | ||
| 121 | if (res.data?.orderId) { | ||
| 122 | api.pcallBack2(res.data.orderId) | ||
| 123 | uni.navigateTo({ | ||
| 124 | url: `/personal/sucPay` | ||
| 125 | }) | ||
| 126 | } | ||
| 127 | // if (data.payFlag == 0 || data.orderId) { | ||
| 128 | // data.orderId && api.callBack2(data.orderId) | ||
| 129 | // uni.navigateTo({ url: `/personal/submitPay?price=${res.data.price}` }) | ||
| 130 | // } | ||
| 131 | } catch (err) { | ||
| 132 | uni.showToast({ title: '支付失败', icon: 'none' }) | ||
| 133 | } finally { | ||
| 134 | isPaying.value = false | ||
| 135 | } | ||
| 136 | } | ||
| 137 | |||
| 138 | |||
| 139 | |||
| 140 | // 获取会员费 | ||
| 141 | async function getMyMemberCertUnitFeeApi() { | ||
| 142 | const res = await api.getZtxFeeConfig() | ||
| 143 | memberFee.value = Number(res.data.personMemberFee || 1500) | ||
| 144 | } | ||
| 145 | |||
| 146 | </script> | ||
| 147 | |||
| 148 | <style scoped> | ||
| 149 | .container { | ||
| 150 | min-height: 100vh; | ||
| 151 | background-color: #f7f7f7; | ||
| 152 | } | ||
| 153 | .content { | ||
| 154 | padding: 20rpx 20rpx 120rpx; | ||
| 155 | } | ||
| 156 | .card { | ||
| 157 | background: #fff; | ||
| 158 | border-radius: 8rpx; | ||
| 159 | padding: 25rpx 20rpx; | ||
| 160 | margin-bottom: 20rpx; | ||
| 161 | } | ||
| 162 | .yearRow { | ||
| 163 | display: flex; | ||
| 164 | align-items: center; | ||
| 165 | justify-content: space-between; | ||
| 166 | margin-bottom: 20rpx; | ||
| 167 | } | ||
| 168 | .yearRow .label { | ||
| 169 | font-size: 28rpx; | ||
| 170 | color: #333; | ||
| 171 | } | ||
| 172 | .yearRow .control { | ||
| 173 | display: flex; | ||
| 174 | align-items: center; | ||
| 175 | } | ||
| 176 | .control image { | ||
| 177 | width: 50rpx; | ||
| 178 | height: 50rpx; | ||
| 179 | } | ||
| 180 | .yearRow .num { | ||
| 181 | font-size: 28rpx; | ||
| 182 | color: #333; | ||
| 183 | min-width: 80rpx; | ||
| 184 | text-align: center; | ||
| 185 | margin: 0 10rpx; | ||
| 186 | } | ||
| 187 | .row { | ||
| 188 | display: flex; | ||
| 189 | justify-content: space-between; | ||
| 190 | align-items: center; | ||
| 191 | } | ||
| 192 | .row .label { | ||
| 193 | font-size: 28rpx; | ||
| 194 | color: #333; | ||
| 195 | } | ||
| 196 | .row .value { | ||
| 197 | font-size: 30rpx; | ||
| 198 | color: #C4121B; | ||
| 199 | font-weight: 500; | ||
| 200 | } | ||
| 201 | .hintRow { | ||
| 202 | display: flex; | ||
| 203 | align-items: flex-start; | ||
| 204 | font-size: 24rpx; | ||
| 205 | line-height: 1.4; | ||
| 206 | } | ||
| 207 | .hintRow .hintText { | ||
| 208 | color: #FF8124; | ||
| 209 | flex: 1; | ||
| 210 | margin-top: 10rpx; | ||
| 211 | } | ||
| 212 | .deductRow { | ||
| 213 | background: #fff; | ||
| 214 | padding: 20rpx 20rpx; | ||
| 215 | display: flex; | ||
| 216 | justify-content: space-between; | ||
| 217 | align-items: center; | ||
| 218 | margin-bottom: 10rpx; | ||
| 219 | border-radius: 8rpx; | ||
| 220 | } | ||
| 221 | .deductRow .label { | ||
| 222 | font-size: 28rpx; | ||
| 223 | color: #333; | ||
| 224 | } | ||
| 225 | .deductRow .value { | ||
| 226 | font-size: 30rpx; | ||
| 227 | color: #C4121B; | ||
| 228 | } | ||
| 229 | .payRow { | ||
| 230 | background: #fff; | ||
| 231 | border-radius: 8rpx; | ||
| 232 | padding: 20rpx 20rpx; | ||
| 233 | margin-bottom: 20rpx; | ||
| 234 | } | ||
| 235 | .radioItem { | ||
| 236 | display: flex; | ||
| 237 | align-items: center; | ||
| 238 | } | ||
| 239 | .payInfo { | ||
| 240 | display: flex; | ||
| 241 | align-items: center; | ||
| 242 | margin-left: 15rpx; | ||
| 243 | } | ||
| 244 | .payInfo .icon { | ||
| 245 | width: 40rpx; | ||
| 246 | height: 40rpx; | ||
| 247 | margin-right: 10rpx; | ||
| 248 | } | ||
| 249 | .payInfo text { | ||
| 250 | font-size: 28rpx; | ||
| 251 | color: #333; | ||
| 252 | } | ||
| 253 | .totalRow { | ||
| 254 | background: #fff; | ||
| 255 | border-radius: 8rpx; | ||
| 256 | padding: 20rpx 20rpx; | ||
| 257 | display: flex; | ||
| 258 | justify-content: space-between; | ||
| 259 | align-items: center; | ||
| 260 | margin-top: 10rpx; | ||
| 261 | } | ||
| 262 | .totalRow .label { | ||
| 263 | font-size: 28rpx; | ||
| 264 | color: #333; | ||
| 265 | } | ||
| 266 | .redBig { | ||
| 267 | font-size: 32rpx; | ||
| 268 | color: #C4121B; | ||
| 269 | font-weight: bold; | ||
| 270 | } | ||
| 271 | .bottomBtn { | ||
| 272 | position: fixed; | ||
| 273 | bottom: 0; | ||
| 274 | left: 0; | ||
| 275 | right: 0; | ||
| 276 | padding: 20rpx 20rpx; | ||
| 277 | background: #fff; | ||
| 278 | border-top: 1rpx solid #eee; | ||
| 279 | } | ||
| 280 | .payBtn { | ||
| 281 | width: 100%; | ||
| 282 | height: 88rpx; | ||
| 283 | line-height: 88rpx; | ||
| 284 | background-color: #C4121B; | ||
| 285 | color: #fff; | ||
| 286 | border-radius: 8rpx; | ||
| 287 | font-size: 32rpx; | ||
| 288 | text-align: center; | ||
| 289 | border: none; | ||
| 290 | } | ||
| 291 | .payBtn[disabled] { | ||
| 292 | background-color: #ccc; | ||
| 293 | color: #999; | ||
| 294 | } | ||
| 295 | .red { | ||
| 296 | color: #C4121B; | ||
| 297 | } | ||
| 298 | .icon{ | ||
| 299 | width:30px; | ||
| 300 | } | ||
| 301 | ::v-deep .custom-radio .wx-radio-input { | ||
| 302 | width: 30rpx; | ||
| 303 | height: 30rpx; | ||
| 304 | border-radius: 50%; | ||
| 305 | border: 2rpx solid #ccc; | ||
| 306 | } | ||
| 307 | ::v-deep .custom-radio .wx-radio-input.wx-radio-input-checked { | ||
| 308 | border-color: #C4121B !important; | ||
| 309 | background: #C4121B !important; | ||
| 310 | } | ||
| 311 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
personal/home.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="page-container"> | ||
| 3 | <view class="top-section"> | ||
| 4 | <!-- 用户信息 --> | ||
| 5 | <view class="user-info"> | ||
| 6 | <view class="avatar"> | ||
| 7 | <view class="avatar-placeholder">📄</view> | ||
| 8 | </view> | ||
| 9 | <view class="user-desc">注册会员8709745760778985472</view> | ||
| 10 | </view> | ||
| 11 | |||
| 12 | <!-- 会员卡片 --> | ||
| 13 | <view class="member-card"> | ||
| 14 | <view class="card-header"> | ||
| 15 | <view class="card-name">江行知</view> | ||
| 16 | <view class="bind-btn">绑定学员 ⇄</view> | ||
| 17 | </view> | ||
| 18 | <view class="card-id">证件号:360681201804040811</view> | ||
| 19 | |||
| 20 | <view class="card-func"> | ||
| 21 | <view class="func-item" @click="goToInfo"> | ||
| 22 | <view class="func-icon">⿱</view> | ||
| 23 | <view class="func-text">人员信息</view> | ||
| 24 | </view> | ||
| 25 | <view class="func-item"> | ||
| 26 | <view class="func-icon">✓</view> | ||
| 27 | <view class="func-text">参赛能力认证</view> | ||
| 28 | </view> | ||
| 29 | <view class="func-item"> | ||
| 30 | <view class="func-icon">🏆</view> | ||
| 31 | <view class="func-text">成绩查询</view> | ||
| 32 | </view> | ||
| 33 | <view class="func-item"> | ||
| 34 | <view class="func-icon">↻</view> | ||
| 35 | <view class="func-text">参赛记录</view> | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | </view> | ||
| 40 | |||
| 41 | <view class="bottom-section"> | ||
| 42 | <view class="info-title"> | ||
| 43 | <view class="title-line"></view> | ||
| 44 | <text>人员信息</text> | ||
| 45 | </view> | ||
| 46 | |||
| 47 | <view class="info-list"> | ||
| 48 | <view class="info-item"> | ||
| 49 | <view class="item-label">姓名</view> | ||
| 50 | <view class="item-value">江行知</view> | ||
| 51 | </view> | ||
| 52 | <view class="info-item"> | ||
| 53 | <view class="item-label">国籍</view> | ||
| 54 | <view class="item-value">中国</view> | ||
| 55 | </view> | ||
| 56 | <view class="info-item"> | ||
| 57 | <view class="item-label">证件类型</view> | ||
| 58 | <view class="item-value">身份证</view> | ||
| 59 | </view> | ||
| 60 | <view class="info-item"> | ||
| 61 | <view class="item-label">身份证号</view> | ||
| 62 | <view class="item-value">360681201804040811</view> | ||
| 63 | </view> | ||
| 64 | <view class="info-item"> | ||
| 65 | <view class="item-label">生日</view> | ||
| 66 | <view class="item-value">2018-04-04</view> | ||
| 67 | </view> | ||
| 68 | </view> | ||
| 69 | </view> | ||
| 70 | </view> | ||
| 71 | </template> | ||
| 72 | |||
| 73 | <script setup> | ||
| 74 | import { ref } from 'vue' | ||
| 75 | |||
| 76 | const userInfo = ref({ | ||
| 77 | memberNo: '8709745760778985472', | ||
| 78 | name: '江行知', | ||
| 79 | idCard: '360681201804040811', | ||
| 80 | nationality: '中国', | ||
| 81 | idType: '身份证', | ||
| 82 | birthday: '2018-04-04' | ||
| 83 | }) | ||
| 84 | |||
| 85 | const goToInfo = () => { | ||
| 86 | console.log('跳转到人员信息页') | ||
| 87 | } | ||
| 88 | </script> | ||
| 89 | |||
| 90 | <style lang="scss" scoped> | ||
| 91 | .page-container { | ||
| 92 | min-height: 100vh; | ||
| 93 | background: linear-gradient(180deg, #FFF9E8 0%, #FFFFFF 100%); | ||
| 94 | padding: 0 30rpx; | ||
| 95 | box-sizing: border-box; | ||
| 96 | } | ||
| 97 | |||
| 98 | .top-section { | ||
| 99 | padding-top: 40rpx; | ||
| 100 | } | ||
| 101 | |||
| 102 | .header { | ||
| 103 | display: flex; | ||
| 104 | justify-content: space-between; | ||
| 105 | align-items: center; | ||
| 106 | margin-bottom: 40rpx; | ||
| 107 | } | ||
| 108 | |||
| 109 | .title { | ||
| 110 | font-size: 36rpx; | ||
| 111 | font-weight: 500; | ||
| 112 | color: #333; | ||
| 113 | margin: 0 auto; | ||
| 114 | position: absolute; | ||
| 115 | left: 50%; | ||
| 116 | transform: translateX(-50%); | ||
| 117 | } | ||
| 118 | |||
| 119 | .more-btn { | ||
| 120 | display: flex; | ||
| 121 | align-items: center; | ||
| 122 | gap: 20rpx; | ||
| 123 | margin-left: auto; | ||
| 124 | background: #FFFFFF; | ||
| 125 | padding: 10rpx 20rpx; | ||
| 126 | border-radius: 40rpx; | ||
| 127 | } | ||
| 128 | |||
| 129 | .dots { | ||
| 130 | font-size: 32rpx; | ||
| 131 | color: #666; | ||
| 132 | line-height: 1; | ||
| 133 | } | ||
| 134 | |||
| 135 | .circle { | ||
| 136 | width: 40rpx; | ||
| 137 | height: 40rpx; | ||
| 138 | border-radius: 50%; | ||
| 139 | border: 2rpx solid #666; | ||
| 140 | position: relative; | ||
| 141 | &::after { | ||
| 142 | content: ''; | ||
| 143 | position: absolute; | ||
| 144 | top: 50%; | ||
| 145 | left: 50%; | ||
| 146 | transform: translate(-50%, -50%); | ||
| 147 | width: 16rpx; | ||
| 148 | height: 16rpx; | ||
| 149 | border-radius: 50%; | ||
| 150 | background: #666; | ||
| 151 | } | ||
| 152 | } | ||
| 153 | |||
| 154 | .user-info { | ||
| 155 | display: flex; | ||
| 156 | align-items: center; | ||
| 157 | gap: 30rpx; | ||
| 158 | margin-bottom: 40rpx; | ||
| 159 | } | ||
| 160 | |||
| 161 | .avatar { | ||
| 162 | width: 120rpx; | ||
| 163 | height: 120rpx; | ||
| 164 | border-radius: 50%; | ||
| 165 | background: #F5F5F5; | ||
| 166 | display: flex; | ||
| 167 | align-items: center; | ||
| 168 | justify-content: center; | ||
| 169 | font-size: 48rpx; | ||
| 170 | border: 4rpx solid #E8E8E8; | ||
| 171 | } | ||
| 172 | |||
| 173 | .avatar-placeholder { | ||
| 174 | color: #999; | ||
| 175 | } | ||
| 176 | |||
| 177 | .user-desc { | ||
| 178 | font-size: 36rpx; | ||
| 179 | color: #333; | ||
| 180 | font-weight: 500; | ||
| 181 | } | ||
| 182 | |||
| 183 | /* 会员卡片 */ | ||
| 184 | .member-card { | ||
| 185 | background: linear-gradient(135deg, #F7E090 0%, #E6C560 100%); | ||
| 186 | border-radius: 24rpx; | ||
| 187 | padding: 40rpx; | ||
| 188 | position: relative; | ||
| 189 | overflow: hidden; | ||
| 190 | margin-bottom: 30rpx; | ||
| 191 | |||
| 192 | &::before { | ||
| 193 | content: ''; | ||
| 194 | position: absolute; | ||
| 195 | top: 0; | ||
| 196 | left: 0; | ||
| 197 | right: 0; | ||
| 198 | bottom: 0; | ||
| 199 | background-image: url('data:image/svg+xml,%3Csvg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M0,50 Q250,20 500,50 T1000,50" fill="none" stroke="%23E6C560" stroke-width="2" opacity="0.3"/%3E%3C/svg%3E'); | ||
| 200 | background-size: cover; | ||
| 201 | z-index: 0; | ||
| 202 | } | ||
| 203 | } | ||
| 204 | |||
| 205 | .card-header { | ||
| 206 | display: flex; | ||
| 207 | justify-content: space-between; | ||
| 208 | align-items: center; | ||
| 209 | margin-bottom: 20rpx; | ||
| 210 | position: relative; | ||
| 211 | z-index: 1; | ||
| 212 | } | ||
| 213 | |||
| 214 | .card-name { | ||
| 215 | font-size: 40rpx; | ||
| 216 | font-weight: bold; | ||
| 217 | color: #222; | ||
| 218 | } | ||
| 219 | |||
| 220 | .bind-btn { | ||
| 221 | font-size: 28rpx; | ||
| 222 | color: #666; | ||
| 223 | } | ||
| 224 | |||
| 225 | .card-id { | ||
| 226 | font-size: 28rpx; | ||
| 227 | color: #555; | ||
| 228 | margin-bottom: 40rpx; | ||
| 229 | position: relative; | ||
| 230 | z-index: 1; | ||
| 231 | } | ||
| 232 | |||
| 233 | /* 功能入口 */ | ||
| 234 | .card-func { | ||
| 235 | display: flex; | ||
| 236 | justify-content: space-between; | ||
| 237 | position: relative; | ||
| 238 | z-index: 1; | ||
| 239 | } | ||
| 240 | |||
| 241 | .func-item { | ||
| 242 | display: flex; | ||
| 243 | flex-direction: column; | ||
| 244 | align-items: center; | ||
| 245 | gap: 10rpx; | ||
| 246 | cursor: pointer; | ||
| 247 | } | ||
| 248 | |||
| 249 | .func-icon { | ||
| 250 | width: 60rpx; | ||
| 251 | height: 60rpx; | ||
| 252 | border-radius: 12rpx; | ||
| 253 | display: flex; | ||
| 254 | align-items: center; | ||
| 255 | justify-content: center; | ||
| 256 | font-size: 32rpx; | ||
| 257 | color: #333; | ||
| 258 | } | ||
| 259 | |||
| 260 | .func-text { | ||
| 261 | font-size: 28rpx; | ||
| 262 | color: #333; | ||
| 263 | font-weight: 500; | ||
| 264 | } | ||
| 265 | |||
| 266 | /* ========== 下半部分:人员信息 ========== */ | ||
| 267 | .bottom-section { | ||
| 268 | background: #FFFFFF; | ||
| 269 | border-radius: 24rpx 24rpx 0 0; | ||
| 270 | padding: 30rpx; | ||
| 271 | margin-top: 20rpx; | ||
| 272 | } | ||
| 273 | |||
| 274 | .info-title { | ||
| 275 | display: flex; | ||
| 276 | align-items: center; | ||
| 277 | gap: 16rpx; | ||
| 278 | margin-bottom: 30rpx; | ||
| 279 | font-size: 36rpx; | ||
| 280 | font-weight: 500; | ||
| 281 | color: #333; | ||
| 282 | } | ||
| 283 | |||
| 284 | .title-line { | ||
| 285 | width: 12rpx; | ||
| 286 | height: 32rpx; | ||
| 287 | background: #E6C560; | ||
| 288 | border-radius: 4rpx; | ||
| 289 | } | ||
| 290 | |||
| 291 | .info-list { | ||
| 292 | display: flex; | ||
| 293 | flex-direction: column; | ||
| 294 | gap: 30rpx; | ||
| 295 | } | ||
| 296 | |||
| 297 | .info-item { | ||
| 298 | display: flex; | ||
| 299 | justify-content: space-between; | ||
| 300 | align-items: center; | ||
| 301 | padding-bottom: 30rpx; | ||
| 302 | border-bottom: 1rpx solid #F0F0F0; | ||
| 303 | |||
| 304 | &:last-child { | ||
| 305 | border-bottom: none; | ||
| 306 | padding-bottom: 0; | ||
| 307 | } | ||
| 308 | } | ||
| 309 | |||
| 310 | .item-label { | ||
| 311 | font-size: 32rpx; | ||
| 312 | color: #333; | ||
| 313 | font-weight: 500; | ||
| 314 | } | ||
| 315 | |||
| 316 | .item-value { | ||
| 317 | font-size: 32rpx; | ||
| 318 | color: #999; | ||
| 319 | } | ||
| 320 | |||
| 321 | /* 底部固定按钮(可选) */ | ||
| 322 | .fixedBottom { | ||
| 323 | position: fixed; | ||
| 324 | bottom: 0; | ||
| 325 | left: 0; | ||
| 326 | right: 0; | ||
| 327 | padding: 20rpx 30rpx; | ||
| 328 | background: #FFFFFF; | ||
| 329 | border-top: 1rpx solid #F0F0F0; | ||
| 330 | } | ||
| 331 | |||
| 332 | .btn-red { | ||
| 333 | width: 100%; | ||
| 334 | height: 88rpx; | ||
| 335 | line-height: 88rpx; | ||
| 336 | background: #C40F18; | ||
| 337 | color: #FFFFFF; | ||
| 338 | border-radius: 12rpx; | ||
| 339 | font-size: 32rpx; | ||
| 340 | font-weight: 500; | ||
| 341 | border: none; | ||
| 342 | } | ||
| 343 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
personal/submitPay.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="pay-order-container"> | ||
| 3 | |||
| 4 | |||
| 5 | <view class="order-info"> | ||
| 6 | |||
| 7 | <view class="info-item total-price"> | ||
| 8 | <text class="label">支付总费用:</text> | ||
| 9 | <text class="value red">{{ price ?? 0 }}元</text> | ||
| 10 | </view> | ||
| 11 | </view> | ||
| 12 | |||
| 13 | <view class="pay-type-section"> | ||
| 14 | <text class="section-title">选择支付方式</text> | ||
| 15 | <radio-group :value="payType" @change="handlePayTypeChange"> | ||
| 16 | <label class="radio-item"> | ||
| 17 | <radio value="0" color="#E60012" :checked="payType === '0'" /> | ||
| 18 | <view class="pay-method"> | ||
| 19 | <image class="icon" src="/static/min.png" mode="widthFix"></image> | ||
| 20 | <text class="pay-name">民生付</text> | ||
| 21 | </view> | ||
| 22 | </label> | ||
| 23 | </radio-group> | ||
| 24 | </view> | ||
| 25 | |||
| 26 | <!-- 底部支付按钮 --> | ||
| 27 | <view class="fixed-bottom"> | ||
| 28 | <button class="pay-btn red-bg" :loading="payLoading" @click="handlePay">立即支付</button> | ||
| 29 | </view> | ||
| 30 | </view> | ||
| 31 | </template> | ||
| 32 | |||
| 33 | <script setup> | ||
| 34 | import { ref } from 'vue' | ||
| 35 | import { onLoad } from '@dcloudio/uni-app'; | ||
| 36 | import * as api from '@/common/api.js' | ||
| 37 | |||
| 38 | // 核心数据 | ||
| 39 | const formData = ref({}) // 订单统计数据 | ||
| 40 | const price = ref('') // 核心业务ID | ||
| 41 | const payType = ref('0') // 支付方式(默认0=民生付) | ||
| 42 | const payLoading = ref(false) // 支付按钮加载状态 | ||
| 43 | |||
| 44 | // 页面加载接收参数 | ||
| 45 | onLoad(async (options) => { | ||
| 46 | console.log('订单ID:', options.price) | ||
| 47 | if (options.price) { | ||
| 48 | price.value = options.price | ||
| 49 | } | ||
| 50 | }) | ||
| 51 | |||
| 52 | |||
| 53 | // 支付方式切换 | ||
| 54 | function handlePayTypeChange(e) { | ||
| 55 | payType.value = e.detail.value | ||
| 56 | } | ||
| 57 | |||
| 58 | // 立即支付核心逻辑 | ||
| 59 | async function handlePay() { | ||
| 60 | |||
| 61 | |||
| 62 | try { | ||
| 63 | payLoading.value = true | ||
| 64 | const res = await api.goPay() | ||
| 65 | |||
| 66 | if (res.data?.orderId) { | ||
| 67 | api.pcallBack2(res.data.orderId) | ||
| 68 | uni.navigateTo({ | ||
| 69 | url: `/personal/sucPay` | ||
| 70 | }) | ||
| 71 | } | ||
| 72 | |||
| 73 | // 跳转到支付成功页 | ||
| 74 | |||
| 75 | } catch (err) { | ||
| 76 | const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试' | ||
| 77 | uni.showToast({ title: errMsg, icon: 'none' }) | ||
| 78 | } finally { | ||
| 79 | payLoading.value = false | ||
| 80 | } | ||
| 81 | } | ||
| 82 | </script> | ||
| 83 | |||
| 84 | <style scoped lang="scss"> | ||
| 85 | .pay-order-container { | ||
| 86 | padding: 30rpx; | ||
| 87 | background-color: #fff; | ||
| 88 | min-height: 100vh; | ||
| 89 | box-sizing: border-box; | ||
| 90 | } | ||
| 91 | .icon{ | ||
| 92 | width:30px; | ||
| 93 | } | ||
| 94 | // 页面头部 | ||
| 95 | .page-header { | ||
| 96 | text-align: center; | ||
| 97 | padding: 20rpx 0; | ||
| 98 | border-bottom: 1px solid #eee; | ||
| 99 | margin-bottom: 40rpx; | ||
| 100 | |||
| 101 | .title { | ||
| 102 | font-size: 36rpx; | ||
| 103 | font-weight: 600; | ||
| 104 | color: #333; | ||
| 105 | } | ||
| 106 | } | ||
| 107 | |||
| 108 | // 订单信息区域 | ||
| 109 | .order-info { | ||
| 110 | margin-bottom: 60rpx; | ||
| 111 | |||
| 112 | .info-item { | ||
| 113 | display: flex; | ||
| 114 | justify-content: space-between; | ||
| 115 | align-items: center; | ||
| 116 | padding: 25rpx 0; | ||
| 117 | border-bottom: 1px solid #f5f5f5; | ||
| 118 | font-size: 32rpx; | ||
| 119 | |||
| 120 | .label { | ||
| 121 | color: #666; | ||
| 122 | } | ||
| 123 | |||
| 124 | .value { | ||
| 125 | font-weight: 600; | ||
| 126 | font-size: 34rpx; | ||
| 127 | } | ||
| 128 | |||
| 129 | .red { | ||
| 130 | color: #E60012; | ||
| 131 | } | ||
| 132 | } | ||
| 133 | |||
| 134 | .total-price { | ||
| 135 | border-bottom: none; | ||
| 136 | margin-top: 10rpx; | ||
| 137 | |||
| 138 | .label { | ||
| 139 | font-size: 34rpx; | ||
| 140 | color: #333; | ||
| 141 | } | ||
| 142 | |||
| 143 | .value { | ||
| 144 | font-size: 38rpx; | ||
| 145 | } | ||
| 146 | } | ||
| 147 | } | ||
| 148 | |||
| 149 | // 支付方式区域 | ||
| 150 | .pay-type-section { | ||
| 151 | margin-bottom: 80rpx; | ||
| 152 | |||
| 153 | .section-title { | ||
| 154 | font-size: 32rpx; | ||
| 155 | color: #333; | ||
| 156 | margin-bottom: 20rpx; | ||
| 157 | display: block; | ||
| 158 | } | ||
| 159 | |||
| 160 | .radio-item { | ||
| 161 | display: flex; | ||
| 162 | align-items: center; | ||
| 163 | font-size: 32rpx; | ||
| 164 | padding: 10rpx 0; | ||
| 165 | |||
| 166 | .pay-method { | ||
| 167 | display: flex; | ||
| 168 | align-items: center; | ||
| 169 | margin-left: 10rpx; | ||
| 170 | |||
| 171 | .pay-name { | ||
| 172 | font-size: 32rpx; | ||
| 173 | margin-left: 20rpx; | ||
| 174 | color: #333; | ||
| 175 | } | ||
| 176 | } | ||
| 177 | } | ||
| 178 | } | ||
| 179 | |||
| 180 | // 底部支付按钮 | ||
| 181 | .fixed-bottom { | ||
| 182 | position: fixed; | ||
| 183 | bottom: 0; | ||
| 184 | left: 0; | ||
| 185 | right: 0; | ||
| 186 | padding: 20rpx 30rpx 30rpx; | ||
| 187 | background-color: #fff; | ||
| 188 | border-top: 1px solid #eee; | ||
| 189 | |||
| 190 | .pay-btn { | ||
| 191 | width: 100%; | ||
| 192 | height: 88rpx; | ||
| 193 | line-height: 88rpx; | ||
| 194 | border-radius: 44rpx; | ||
| 195 | font-size: 34rpx; | ||
| 196 | font-weight: 600; | ||
| 197 | } | ||
| 198 | |||
| 199 | .red-bg { | ||
| 200 | background-color: #E60012; | ||
| 201 | color: #fff; | ||
| 202 | } | ||
| 203 | } | ||
| 204 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
personal/sucPay.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="success-container"> | ||
| 3 | <!-- 成功图标(渐变圆形+动效) --> | ||
| 4 | <view class="success-icon"> | ||
| 5 | <view class="icon-circle"> | ||
| 6 | <text class="check-icon">✓</text> | ||
| 7 | </view> | ||
| 8 | </view> | ||
| 9 | |||
| 10 | <!-- 支付成功标题(动画) --> | ||
| 11 | <view class="success-title">支付成功</view> | ||
| 12 | <view class="success-subtitle">支付成功,请等待审核</view> | ||
| 13 | |||
| 14 | <!-- 订单信息卡片(带阴影) --> | ||
| 15 | <view class="info-card"> | ||
| 16 | <view class="info-item"> | ||
| 17 | <text class="label">付款账户</text> | ||
| 18 | <text class="value">(5437)</text> | ||
| 19 | </view> | ||
| 20 | <view class="info-item"> | ||
| 21 | <text class="label">交易流水号</text> | ||
| 22 | <text class="value">2205051351076117833</text> | ||
| 23 | </view> | ||
| 24 | <view class="info-item"> | ||
| 25 | <text class="label">商户名称</text> | ||
| 26 | <text class="value">中国跆拳道协会</text> | ||
| 27 | </view> | ||
| 28 | <view class="info-item"> | ||
| 29 | <text class="label">订单金额</text> | ||
| 30 | <text class="value amount">1500.00元</text> | ||
| 31 | </view> | ||
| 32 | <view class="info-item"> | ||
| 33 | <text class="label">会员编号</text> | ||
| 34 | <text class="value">CTA00004</text> | ||
| 35 | </view> | ||
| 36 | <view class="info-item"> | ||
| 37 | <text class="label">会员有效期</text> | ||
| 38 | <text class="value">2028年1月25日</text> | ||
| 39 | </view> | ||
| 40 | </view> | ||
| 41 | |||
| 42 | <!-- 确定按钮(渐变+动效) --> | ||
| 43 | <view class="confirm-btn-area"> | ||
| 44 | <button class="confirm-btn" @click="goBack">确定</button> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | </template> | ||
| 48 | |||
| 49 | <script setup> | ||
| 50 | import { onLoad } from '@dcloudio/uni-app' | ||
| 51 | const goBack = () => { | ||
| 52 | uni.navigateTo({ | ||
| 53 | url: `/personal/home` | ||
| 54 | }) | ||
| 55 | } | ||
| 56 | |||
| 57 | onLoad((option) => { | ||
| 58 | }) | ||
| 59 | </script> | ||
| 60 | |||
| 61 | <style scoped> | ||
| 62 | /* 全局容器 */ | ||
| 63 | .success-container { | ||
| 64 | display: flex; | ||
| 65 | flex-direction: column; | ||
| 66 | align-items: center; | ||
| 67 | padding: 100rpx 40rpx 60rpx; | ||
| 68 | min-height: 100vh; | ||
| 69 | background-color: #f8f9fa; | ||
| 70 | box-sizing: border-box; | ||
| 71 | } | ||
| 72 | |||
| 73 | /* 成功图标容器 */ | ||
| 74 | .success-icon { | ||
| 75 | margin-bottom: 40rpx; | ||
| 76 | animation: fadeIn 0.6s ease-out; | ||
| 77 | } | ||
| 78 | |||
| 79 | /* 渐变圆形背景 */ | ||
| 80 | .icon-circle { | ||
| 81 | width: 180rpx; | ||
| 82 | height: 180rpx; | ||
| 83 | border-radius: 50%; | ||
| 84 | /* 青绿色渐变 */ | ||
| 85 | background: linear-gradient(135deg, #06c1ae, #04a896); | ||
| 86 | display: flex; | ||
| 87 | align-items: center; | ||
| 88 | justify-content: center; | ||
| 89 | box-shadow: 0 8rpx 30rpx rgba(6, 193, 174, 0.3); | ||
| 90 | /* 轻微上浮动效 */ | ||
| 91 | animation: scaleIn 0.8s ease-out; | ||
| 92 | } | ||
| 93 | |||
| 94 | /* 对勾图标 */ | ||
| 95 | .check-icon { | ||
| 96 | font-size: 90rpx; | ||
| 97 | color: #ffffff; | ||
| 98 | font-weight: bold; | ||
| 99 | } | ||
| 100 | |||
| 101 | /* 支付成功标题 */ | ||
| 102 | .success-title { | ||
| 103 | font-size: 48rpx; | ||
| 104 | font-weight: 700; | ||
| 105 | color: #333333; | ||
| 106 | margin-bottom: 12rpx; | ||
| 107 | animation: slideUp 0.6s ease-out; | ||
| 108 | } | ||
| 109 | |||
| 110 | /* 副标题 */ | ||
| 111 | .success-subtitle { | ||
| 112 | font-size: 28rpx; | ||
| 113 | color: #666666; | ||
| 114 | margin-bottom: 60rpx; | ||
| 115 | animation: slideUp 0.8s ease-out; | ||
| 116 | } | ||
| 117 | |||
| 118 | /* 订单信息卡片 */ | ||
| 119 | .info-card { | ||
| 120 | width: 100%; | ||
| 121 | background: #ffffff; | ||
| 122 | border-radius: 20rpx; | ||
| 123 | padding: 40rpx 30rpx; | ||
| 124 | box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.05); | ||
| 125 | margin-bottom: 80rpx; | ||
| 126 | animation: fadeIn 1s ease-out; | ||
| 127 | } | ||
| 128 | |||
| 129 | /* 单个信息项 */ | ||
| 130 | .info-item { | ||
| 131 | display: flex; | ||
| 132 | justify-content: space-between; | ||
| 133 | align-items: center; | ||
| 134 | padding: 24rpx 0; | ||
| 135 | border-bottom: 1rpx solid #f5f5f5; | ||
| 136 | } | ||
| 137 | /* 最后一项去掉下划线 */ | ||
| 138 | .info-item:last-child { | ||
| 139 | border-bottom: none; | ||
| 140 | } | ||
| 141 | |||
| 142 | /* 标签样式 */ | ||
| 143 | .label { | ||
| 144 | font-size: 32rpx; | ||
| 145 | color: #666666; | ||
| 146 | } | ||
| 147 | |||
| 148 | /* 值样式 */ | ||
| 149 | .value { | ||
| 150 | font-size: 32rpx; | ||
| 151 | color: #333333; | ||
| 152 | text-align: right; | ||
| 153 | } | ||
| 154 | /* 金额特殊样式 */ | ||
| 155 | .amount { | ||
| 156 | color: #cd1e27; | ||
| 157 | font-weight: 600; | ||
| 158 | } | ||
| 159 | |||
| 160 | /* 确定按钮区域 */ | ||
| 161 | .confirm-btn-area { | ||
| 162 | width: 100%; | ||
| 163 | padding: 0 20rpx; | ||
| 164 | box-sizing: border-box; | ||
| 165 | } | ||
| 166 | |||
| 167 | /* 确定按钮(渐变+动效) */ | ||
| 168 | .confirm-btn { | ||
| 169 | width: 100%; | ||
| 170 | height: 90rpx; | ||
| 171 | line-height: 90rpx; | ||
| 172 | /* 按钮渐变背景 */ | ||
| 173 | background: #fff; | ||
| 174 | color: #C4121B; | ||
| 175 | font-size: 36rpx; | ||
| 176 | font-weight: 600; | ||
| 177 | border-radius: 45rpx; | ||
| 178 | border: 1px solid #C4121B; | ||
| 179 | animation: slideUp 1s ease-out; | ||
| 180 | /* 禁止默认样式 */ | ||
| 181 | position: relative; | ||
| 182 | overflow: hidden; | ||
| 183 | } | ||
| 184 | /* 按钮点击反馈 */ | ||
| 185 | .confirm-btn::after { | ||
| 186 | border: none; | ||
| 187 | } | ||
| 188 | .confirm-btn:active { | ||
| 189 | transform: scale(0.98); | ||
| 190 | box-shadow: 0 4rpx 10rpx rgba(6, 193, 174, 0.2); | ||
| 191 | } | ||
| 192 | |||
| 193 | /* 动画定义 */ | ||
| 194 | @keyframes fadeIn { | ||
| 195 | 0% { opacity: 0; } | ||
| 196 | 100% { opacity: 1; } | ||
| 197 | } | ||
| 198 | @keyframes scaleIn { | ||
| 199 | 0% { transform: scale(0); } | ||
| 200 | 70% { transform: scale(1.1); } | ||
| 201 | 100% { transform: scale(1); } | ||
| 202 | } | ||
| 203 | @keyframes slideUp { | ||
| 204 | 0% { opacity: 0; transform: translateY(30rpx); } | ||
| 205 | 100% { opacity: 1; transform: translateY(0); } | ||
| 206 | } | ||
| 207 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -21,6 +21,7 @@ | ... | @@ -21,6 +21,7 @@ |
| 21 | <text class="add-text">新建缴费</text> | 21 | <text class="add-text">新建缴费</text> |
| 22 | </view> | 22 | </view> |
| 23 | </view> | 23 | </view> |
| 24 | <view style="width:100%;height:20rpx;background-color:#f8f9fa"></view> | ||
| 24 | 25 | ||
| 25 | <!-- 审核状态筛选 Tab --> | 26 | <!-- 审核状态筛选 Tab --> |
| 26 | <view class="status-tabs"> | 27 | <view class="status-tabs"> |
| ... | @@ -341,6 +342,7 @@ onUnmounted(() => { | ... | @@ -341,6 +342,7 @@ onUnmounted(() => { |
| 341 | padding-bottom: 60rpx; | 342 | padding-bottom: 60rpx; |
| 342 | min-height: 100vh; | 343 | min-height: 100vh; |
| 343 | box-sizing: border-box; | 344 | box-sizing: border-box; |
| 345 | margin-top: 20rpx; | ||
| 344 | } | 346 | } |
| 345 | 347 | ||
| 346 | /* 搜索栏 */ | 348 | /* 搜索栏 */ |
| ... | @@ -521,11 +523,6 @@ onUnmounted(() => { | ... | @@ -521,11 +523,6 @@ onUnmounted(() => { |
| 521 | margin:0 8rpx; | 523 | margin:0 8rpx; |
| 522 | border:none; | 524 | border:none; |
| 523 | font-weight: 500; | 525 | font-weight: 500; |
| 524 | |||
| 525 | &:disabled { | ||
| 526 | background: #f0f0f0 !important; | ||
| 527 | color: #ccc !important; | ||
| 528 | } | ||
| 529 | } | 526 | } |
| 530 | 527 | ||
| 531 | .delete-btn { | 528 | .delete-btn { |
| ... | @@ -541,7 +538,11 @@ onUnmounted(() => { | ... | @@ -541,7 +538,11 @@ onUnmounted(() => { |
| 541 | color:#faad14; | 538 | color:#faad14; |
| 542 | } | 539 | } |
| 543 | } | 540 | } |
| 544 | 541 | .action-btn[disabled] { | |
| 542 | background: #f0f0f0 !important; | ||
| 543 | color: #ccc !important; | ||
| 544 | opacity: 0.6 !important; | ||
| 545 | } | ||
| 545 | /* 空状态 */ | 546 | /* 空状态 */ |
| 546 | .empty-state { | 547 | .empty-state { |
| 547 | display: flex; | 548 | display: flex; | ... | ... |
static/bg.png
0 → 100644
64.6 KB
static/btn01.png
0 → 100644
5.19 KB
static/btn02.png
0 → 100644
4.95 KB
static/btn03.png
0 → 100644
4.73 KB
static/di.png
0 → 100644
59.4 KB
static/wx_logo.png
0 → 100644
19.9 KB
-
Please register or sign in to post a comment