3dd81aba by lttnew

接口修改

1 parent 58412f8a
...@@ -747,7 +747,7 @@ export function delPayment(payIds) { ...@@ -747,7 +747,7 @@ export function delPayment(payIds) {
747 } 747 }
748 export function paymentDel(payIds) { 748 export function paymentDel(payIds) {
749 return request({ 749 return request({
750 url: `/person/paymentRange/${payIds}`, 750 url: `/person/paymentRangeNew/${payIds}`,
751 method: 'DELETE' 751 method: 'DELETE'
752 }) 752 })
753 } 753 }
...@@ -1303,7 +1303,14 @@ export function certifiedNew(params) { ...@@ -1303,7 +1303,14 @@ export function certifiedNew(params) {
1303 // 模拟回调 1303 // 模拟回调
1304 export function callBack2(orderId) { 1304 export function callBack2(orderId) {
1305 return request({ 1305 return request({
1306 url: `/system/certifiedNew/callBack2/${orderId}` 1306 url: `/system/certifiedNew/callBack2/${orderId}`,
1307 method: 'get',
1308 })
1309 }
1310 export function pcallBack2(orderId) {
1311 return request({
1312 url: `/person/paymentRangeNew/callBack2/${orderId}`,
1313 method: 'get',
1307 }) 1314 })
1308 } 1315 }
1309 // 优惠政策回显 1316 // 优惠政策回显
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <!-- 会员认证 --> 3 <!-- 会员认证 -->
4 <view class="searchbar"> 4 <view class="searchbar">
...@@ -6,96 +6,96 @@ ...@@ -6,96 +6,96 @@
6 v-model="queryParams.rangeName" placeholder="缴费名称" @blur="getList" @clear="getList"> 6 v-model="queryParams.rangeName" placeholder="缴费名称" @blur="getList" @clear="getList">
7 </uni-easyinput> 7 </uni-easyinput>
8 <view class="invertedbtn-red" v-if="userType=='2'" @click="goAddPay">+ 新建缴费</view> 8 <view class="invertedbtn-red" v-if="userType=='2'" @click="goAddPay">+ 新建缴费</view>
9 </view> 9 </view>
10 <view class="appList"> 10 <view class="appList">
11 <view class="appItem" v-for="(item,index) in list" :key="index"> 11 <view class="appItem" v-for="(item,index) in list" :key="index">
12 <view class="status" @click="goDetail(item)"> 12 <view class="status" @click="goDetail(item)">
13 <text v-if="item?.content?.status==0" class="text-primary">待提交</text> 13 <text v-if="item?.content?.status==0" class="text-primary">待提交</text>
14 <text v-if="item?.content?.status==1" class="text-primary">审核中</text> 14 <text v-if="item?.content?.status==1" class="text-primary">审核中</text>
15 <text v-if="item?.content?.status==2" class="text-success"> 审核通过</text> 15 <text v-if="item?.content?.status==2" class="text-success"> 审核通过</text>
16 <text v-if="item?.content?.status==3" class="text-danger"> 审核拒绝</text> 16 <text v-if="item?.content?.status==3" class="text-danger"> 审核拒绝</text>
17 <text v-if="item?.content?.status==4" class="text-warning">已撤回</text> 17 <text v-if="item?.content?.status==4" class="text-warning">已撤回</text>
18 </view> 18 </view>
19 <view class="date">{{item?.content?.commitTime}} 提交</view> 19 <view class="date">{{item?.content?.commitTime}} 提交</view>
20 <view class="text-primary" v-if="item.wfCode">{{item.wfCode}}</view> 20 <view class="text-primary" v-if="item.wfCode">{{item.wfCode}}</view>
21 <view class="name mt0" @click="goDetail(item)">{{item.rangeName}}</view> 21 <view class="name mt0" @click="goDetail(item)">{{item.rangeName}}</view>
22 <view class="flexbox" @click="goDetail(item)"> 22 <view class="flexbox" @click="goDetail(item)">
23 <view> 23 <view>
24 会员合计 24 会员合计
25 <view>{{item.allCount}}</view> 25 <view>{{item.allCount}}</view>
26 </view> 26 </view>
27 <view v-if="userType!='2'"> 27 <view v-if="userType!='2'">
28 续费年限 28 续费年限
29 <view>{{item.content?.renewYear}}</view> 29 <view>{{item.content?.renewYear}}</view>
30 </view> 30 </view>
31 <view :class="userType=='2'?'w50':''"> 31 <view :class="userType=='2'?'w50':''">
32 年限合计 32 年限合计
33 <view>{{item.totalRenewYear}}</view> 33 <view>{{item.totalRenewYear}}</view>
34 </view> 34 </view>
35 </view> 35 </view>
36 <view class="func" v-if="item.content?.status==0||item.content?.status==3||item.content?.status==4"> 36 <view class="func" v-if="item.content?.status==0||item.content?.status==3||item.content?.status==4">
37 <button @click="handleDelete(item)">删除</button> 37 <button @click="handleDelete(item)">删除</button>
38 <button @click="handleUpdate(item)">编辑</button> 38 <button @click="handleUpdate(item)">编辑</button>
39 <button @click="commitFN(item)">提交审核</button> 39 <button @click="commitFN(item)">提交审核</button>
40 </view> 40 </view>
41 </view> 41 </view>
42 </view> 42 </view>
43 <view class="nodata" v-if="list.length==0"> 43 <view class="nodata" v-if="list.length==0">
44 <image mode="aspectFit" src="/static/nodata.png"></image> 44 <image mode="aspectFit" src="/static/nodata.png"></image>
45 <text>暂无数据</text> 45 <text>暂无数据</text>
46 </view> 46 </view>
47 </view> 47 </view>
48 </template> 48 </template>
49 49
50 <script setup> 50 <script setup>
51 import * as api from '@/common/api.js' 51 import * as api from '@/common/api.js'
52 import config from '@/config.js' 52 import config from '@/config.js'
53 import { 53 import {
54 onMounted, 54 onMounted,
55 ref 55 ref
56 } from 'vue' 56 } from 'vue'
57 import { 57 import {
58 onLoad,onShow 58 onLoad,onShow
59 } from '@dcloudio/uni-app' 59 } from '@dcloudio/uni-app'
60 const app = getApp(); 60 const app = getApp();
61 const list = ref([]) 61 const list = ref([])
62 const queryParams = ref({}) 62 const queryParams = ref({})
63 const userType = ref('') 63 const userType = ref('')
64 const UpPop = ref(null) 64 const UpPop = ref(null)
65 const form = ref({ 65 const form = ref({
66 docId:'', 66 docId:'',
67 payTime:'', 67 payTime:'',
68 url:'', 68 url:'',
69 remark:'' 69 remark:''
70 }) 70 })
71 onShow(() => { 71 onShow(() => {
72 if (app.globalData.isLogin) { 72 if (app.globalData.isLogin) {
73 init() 73 init()
74 } else { 74 } else {
75 75
76 app.firstLoadCallback = () => { 76 app.firstLoadCallback = () => {
77 init() 77 init()
78 }; 78 };
79 } 79 }
80 }) 80 })
81 81
82 function init() { 82 function init() {
83 userType.value = app.globalData.userType 83 userType.value = app.globalData.userType
84 getList() 84 getList()
85 } 85 }
86 86
87 function getList() { 87 function getList() {
88 api.getPayList(queryParams.value).then(res => { 88 api.getPayList(queryParams.value).then(res => {
89 for (const item of res.rows) { 89 for (const item of res.rows) {
90 item.content = null 90 item.content = null
91 if (item.certList?.length > 0) { 91 if (item.certList?.length > 0) {
92 item.content = item.certList[0] 92 item.content = item.certList[0]
93 } 93 }
94 } 94 }
95 list.value = res.rows 95 list.value = res.rows
96 }) 96 })
97 } 97 }
98 98
99 function commitFN(row) { 99 function commitFN(row) {
100 uni.showModal({ 100 uni.showModal({
101 title: '提示', 101 title: '提示',
...@@ -109,16 +109,16 @@ ...@@ -109,16 +109,16 @@
109 }) 109 })
110 } 110 }
111 }) 111 })
112 112
113 } 113 }
114 function goDetail(item) { 114 function goDetail(item) {
115 //详情 115 //详情
116 const form = encodeURIComponent(JSON.stringify(item)) 116 const form = encodeURIComponent(JSON.stringify(item))
117 // 查看 117 // 查看
118 let path = `/group/payDetail?&form=${form}` 118 let path = `/group/payDetail?&form=${form}`
119 uni.navigateTo({ 119 uni.navigateTo({
120 url: path 120 url: path
121 }); 121 });
122 } 122 }
123 123
124 function goAddPay(){ 124 function goAddPay(){
...@@ -147,9 +147,9 @@ ...@@ -147,9 +147,9 @@
147 url: path 147 url: path
148 }); 148 });
149 } 149 }
150 150
151 </script> 151 </script>
152 152
153 <style scoped lang="scss"> 153 <style scoped lang="scss">
154 .searchbar { 154 .searchbar {
155 display: flex; 155 display: flex;
...@@ -174,15 +174,15 @@ ...@@ -174,15 +174,15 @@
174 font-size: 30rpx; 174 font-size: 30rpx;
175 padding: 10rpx 20rpx; 175 padding: 10rpx 20rpx;
176 } 176 }
177 } 177 }
178 .popBody { 178 .popBody {
179 font-size: 28rpx; 179 font-size: 28rpx;
180 line-height: 1.5; 180 line-height: 1.5;
181 overflow: auto; 181 overflow: auto;
182 padding: 30rpx; 182 padding: 30rpx;
183 183
184 .btn-red { 184 .btn-red {
185 margin: 50rpx 0 30rpx; 185 margin: 50rpx 0 30rpx;
186 } 186 }
187 } 187 }
188 </style> 188 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -195,10 +195,11 @@ async function confirmAddExpireExaminer() { ...@@ -195,10 +195,11 @@ async function confirmAddExpireExaminer() {
195 .search-buttons { 195 .search-buttons {
196 display: flex; 196 display: flex;
197 justify-content: space-between; 197 justify-content: space-between;
198 margin-top: 10rpx; 198 margin-top: 30rpx;
199 margin-left: 80px;
199 } 200 }
200 .search-btn, .reset-btn { 201 .search-btn, .reset-btn {
201 width: 200rpx; 202 width: 220rpx;
202 height: 70rpx; 203 height: 70rpx;
203 line-height: 70rpx; 204 line-height: 70rpx;
204 border-radius: 8rpx; 205 border-radius: 8rpx;
......
1 <template> 1 <template>
2 <view class="container"> 2 <view class="container">
3 <!-- 主内容区域 -->
4 <view class="content"> 3 <view class="content">
5 <!-- 缴费年限 + 费用卡片 -->
6 <view class="card"> 4 <view class="card">
7 <!-- 缴费年限 -->
8 <view class="yearRow"> 5 <view class="yearRow">
9 <view class="label">缴费年限</view> 6 <view class="label">缴费年限</view>
10 <view class="control"> 7 <view class="control">
...@@ -112,9 +109,9 @@ const handelPay = async () => { ...@@ -112,9 +109,9 @@ const handelPay = async () => {
112 }) 109 })
113 } else { 110 } else {
114 if (data.orderId) { 111 if (data.orderId) {
115 await callBack2(data.orderId) 112 api.callBack2(data.orderId)
116 uni.navigateTo({ 113 uni.navigateTo({
117 url: `/myCenter/goPay` 114 url: `/myCenter/sucPay`
118 }) 115 })
119 116
120 } 117 }
......
...@@ -93,18 +93,18 @@ async function handlePay() { ...@@ -93,18 +93,18 @@ async function handlePay() {
93 payLoading.value = true 93 payLoading.value = true
94 const res = await api.goPay(rangeId.value) 94 const res = await api.goPay(rangeId.value)
95 95
96 // 订单ID存在则调用回调接口
97 if (res.data?.orderId) { 96 if (res.data?.orderId) {
98 await api.callBack2(res.data.orderId) 97 api.pcallBack2(res.data.orderId)
98 uni.navigateTo({
99 url: `/myCenter/sucPay?rangeId=${rangeId.value}from=payOrder`
100 })
99 } 101 }
100 102
101 // 跳转到支付成功页 103 // 跳转到支付成功页
102 uni.navigateTo({ 104
103 url: `/pages/payOk/payOk?rangeId=${rangeId.value}`
104 })
105 } catch (err) { 105 } catch (err) {
106 console.error('支付失败:', err) 106 const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试'
107 uni.showToast({ title: err.data.msg, icon: 'none' }) 107 uni.showToast({ title: errMsg, icon: 'none' })
108 } finally { 108 } finally {
109 payLoading.value = false 109 payLoading.value = false
110 } 110 }
......
...@@ -41,23 +41,30 @@ ...@@ -41,23 +41,30 @@
41 41
42 <!-- 确定按钮(渐变+动效) --> 42 <!-- 确定按钮(渐变+动效) -->
43 <view class="confirm-btn-area"> 43 <view class="confirm-btn-area">
44 <button class="confirm-btn" @click="handleConfirm">确定</button> 44 <button class="confirm-btn" @click="goBack">确定</button>
45 </view> 45 </view>
46 </view> 46 </view>
47 </template> 47 </template>
48 48
49 <script setup> 49 <script setup>
50 import { onLoad } from '@dcloudio/uni-app' 50 import { onLoad } from '@dcloudio/uni-app'
51 const goBack = () => {
52 const pages = getCurrentPages()
53 const currentPage = pages[pages.length - 1]
54 const { from } = currentPage.options || {}
51 55
52 // 确定按钮点击事件 56 let delta = 1
53 const handleConfirm = () => { 57
54 uni.navigateBack({ delta: 1 }) 58 if (from === 'payOrder') {
55 // 也可跳转首页:uni.redirectTo({ url: '/pages/index/index' }) 59 delta = 2 // 来自添加会员 / 订单页 → 返回 2 级
60 }else{
61 delta = 3
62 }
63
64 uni.navigateBack({ delta })
56 } 65 }
57 66
58 onLoad((option) => { 67 onLoad((option) => {
59 // 可接收订单参数动态渲染,示例:
60 // if (option.amount) { /* 赋值给金额变量 */ }
61 }) 68 })
62 </script> 69 </script>
63 70
......
...@@ -67,11 +67,7 @@ ...@@ -67,11 +67,7 @@
67 <image mode="aspectFill" v-if="baseFormData.photo2" style="height:200rpx;width:200rpx;" :src="config.baseUrl_api + baseFormData.photo2"/> 67 <image mode="aspectFill" v-if="baseFormData.photo2" style="height:200rpx;width:200rpx;" :src="config.baseUrl_api + baseFormData.photo2"/>
68 </uni-forms-item> 68 </uni-forms-item>
69 </view> 69 </view>
70
71
72
73 </uni-forms> 70 </uni-forms>
74
75 </view> 71 </view>
76 <view class="agreeline"> 72 <view class="agreeline">
77 <image @click="changeAgree(agree)" v-if="agree" 73 <image @click="changeAgree(agree)" v-if="agree"
...@@ -84,7 +80,7 @@ ...@@ -84,7 +80,7 @@
84 <view class="fixedBottom"><button class="btn-red" @click="goSubmit">确 定</button></view> 80 <view class="fixedBottom"><button class="btn-red" @click="goSubmit">确 定</button></view>
85 81
86 <!-- 会员须知 --> 82 <!-- 会员须知 -->
87 <uni-popup ref="popup" type="bottom" background-color="#fff" animation> 83 <uni-popup ref="popup" type="bottom" background-color="#fff" animation :disable-scroll="true" :mask-click="false">
88 <view class="tt">入会须知</view> 84 <view class="tt">入会须知</view>
89 <view class="popBody"> 85 <view class="popBody">
90 _{{baseFormData.name}}_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。 86 _{{baseFormData.name}}_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
...@@ -106,7 +102,7 @@ ...@@ -106,7 +102,7 @@
106 </view> 102 </view>
107 </uni-popup> 103 </uni-popup>
108 104
109 <uni-popup ref="infoConfirm" type="center"> 105 <uni-popup ref="infoConfirm" type="center" :disable-scroll="true" :mask-click="false">
110 <view class="tt">确认信息</view> 106 <view class="tt">确认信息</view>
111 <view class="popBody"> 107 <view class="popBody">
112 <view> 108 <view>
...@@ -504,7 +500,6 @@ ...@@ -504,7 +500,6 @@
504 const time = new Date().valueOf() + '' 500 const time = new Date().valueOf() + ''
505 baseFormData.value.t = time + Math.floor(Math.random() * 10) 501 baseFormData.value.t = time + Math.floor(Math.random() * 10)
506 baseFormData.value.signT = aes2.AESEncrypt(baseFormData.value.idcType + time) 502 baseFormData.value.signT = aes2.AESEncrypt(baseFormData.value.idcType + time)
507 console.log(baseFormData.value)
508 api.addPersonToMyDept(baseFormData.value).then(Response => { 503 api.addPersonToMyDept(baseFormData.value).then(Response => {
509 if (Response.data == 0) { 504 if (Response.data == 0) {
510 let msg = '该成员,实名认证未通过,注册失败!' 505 let msg = '该成员,实名认证未通过,注册失败!'
...@@ -573,6 +568,7 @@ ...@@ -573,6 +568,7 @@
573 align-items: center !important; 568 align-items: center !important;
574 justify-content: flex-end !important; 569 justify-content: flex-end !important;
575 text-align: right !important; 570 text-align: right !important;
571 flex-wrap: nowrap !important;
576 } 572 }
577 573
578 /* 输入框内容右对齐 */ 574 /* 输入框内容右对齐 */
...@@ -587,18 +583,24 @@ ...@@ -587,18 +583,24 @@
587 /* 文本内容右对齐 */ 583 /* 文本内容右对齐 */
588 .uni-forms-item .uni-forms-item__content text, 584 .uni-forms-item .uni-forms-item__content text,
589 .uni-forms-item .uni-forms-item__content > text { 585 .uni-forms-item .uni-forms-item__content > text {
590 text-align: right !important; 586 display: inline-block !important;
591 width: 100%; 587 white-space: nowrap !important;
592 display: block;
593 } 588 }
594 589
595 /* 覆盖原有样式 */
596 :deep(.uni-forms-item__content) {
597 justify-content: flex-end !important;
598 }
599 </style> 590 </style>
600 591
601 <style lang="scss" scoped> 592 <style lang="scss" scoped>
593 :deep(.uni-popup__mask) {
594 overflow: hidden !important;
595 position: fixed !important;
596 top: 0;
597 left: 0;
598 right: 0;
599 bottom: 0;
600 }
601 :deep(.uni-popup) {
602 overflow: hidden !important;
603 }
602 :deep(.segmented-control) { 604 :deep(.segmented-control) {
603 height: 100rpx; 605 height: 100rpx;
604 } 606 }
...@@ -617,6 +619,8 @@ ...@@ -617,6 +619,8 @@
617 .popBody { 619 .popBody {
618 font-size: 28rpx; 620 font-size: 28rpx;
619 line-height: 1.5; 621 line-height: 1.5;
622 height: 70vh;
623 overflow-y: auto;
620 font-family: 华文仿宋; 624 font-family: 华文仿宋;
621 height: 80vh; 625 height: 80vh;
622 overflow: auto; 626 overflow: auto;
...@@ -632,6 +636,7 @@ ...@@ -632,6 +636,7 @@
632 box-sizing: border-box; 636 box-sizing: border-box;
633 display: flex; 637 display: flex;
634 font-size: 30rpx; 638 font-size: 30rpx;
639
635 640
636 text { 641 text {
637 color: #014A9F; 642 color: #014A9F;
...@@ -671,4 +676,13 @@ ...@@ -671,4 +676,13 @@
671 :deep(.item-text-overflow) { 676 :deep(.item-text-overflow) {
672 text-align: left; 677 text-align: left;
673 } 678 }
679 :deep(.fixUniFormItemStyle .uni-data-picker__input-box) {
680 justify-content: flex-start !important;
681 text-align: left !important;
682 }
683
684 /* 让地区选择器的文本左对齐 */
685 :deep(.fixUniFormItemStyle .uni-data-picker__text) {
686 text-align: left !important;
687 }
674 </style> 688 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <!-- 根容器:弹窗时强制固定定位,彻底锁死滚动 --> 2 <!-- 根容器:弹窗时强制固定定位,彻底锁死滚动 -->
3 <view class="container" :class="{ 'lock-scroll': showModal }"> 3 <view class="container" :class="{ 'lock-scroll': showModal }">
4 <!-- 搜索栏 --> 4
5 <view class="search-bar"> 5 <!-- 固定顶部:搜索栏 + 状态Tab -->
6 <uni-easyinput 6 <view class="fixed-header-wrapper">
7 class="search-input" 7 <!-- 搜索栏 -->
8 placeholderStyle="font-size:30rpx;color:#999" 8 <view class="search-bar">
9 :input-border="false" 9 <uni-easyinput
10 prefixIcon="search" 10 class="search-input"
11 v-model="queryParams.memName" 11 placeholderStyle="font-size:30rpx;color:#999"
12 placeholder="搜索缴费名称" 12 :input-border="false"
13 @blur="getList" 13 prefixIcon="search"
14 @clear="getList"> 14 v-model="queryParams.memName"
15 </uni-easyinput> 15 placeholder="搜索缴费名称"
16 <view class="add-btn" @click="goAdd"> 16 @blur="getList"
17 <text class="add-icon">+</text> 17 @clear="getList">
18 <text class="add-text">新建缴费</text> 18 </uni-easyinput>
19 <view class="add-btn" @click="goAdd">
20 <text class="add-icon">+</text>
21 <text class="add-text">新建缴费</text>
22 </view>
19 </view> 23 </view>
20 </view>
21 24
22 <!-- 1. 新增:审核状态筛选 Tab --> 25 <!-- 审核状态筛选 Tab -->
23 <view class="status-tabs"> 26 <view class="status-tabs">
24 <view class="tab-item" :class="{ active: activeTab === '' }" @click="switchTab('')">全部</view> 27 <view class="tab-item" :class="{ active: activeTab === '' }" @click="switchTab('')">全部</view>
25 <view class="tab-item" :class="{ active: activeTab === 0 }" @click="switchTab(0)">待提交</view> 28 <view class="tab-item" :class="{ active: activeTab === 0 }" @click="switchTab(0)">待提交</view>
26 <view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">审核中</view> 29 <view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">审核中</view>
27 <view class="tab-item" :class="{ active: activeTab === 2 }" @click="switchTab(2)">审核通过</view> 30 <view class="tab-item" :class="{ active: activeTab === 2 }" @click="switchTab(2)">审核通过</view>
28 <view class="tab-item" :class="{ active: activeTab === 3 }" @click="switchTab(3)">审核拒绝</view> 31 <view class="tab-item" :class="{ active: activeTab === 3 }" @click="switchTab(3)">审核拒绝</view>
32 </view>
29 </view> 33 </view>
30 34
31 <!-- 会员缴费列表 --> 35 <!-- 内容区域:自动滚动(顶部留出固定栏高度) -->
32 <view class="list-container" v-if="list.length > 0"> 36 <view class="scroll-content">
33 <view class="list-item" v-for="(item, index) in list" :key="index" @click="goDetail(item)"> 37 <!-- 会员缴费列表 -->
34 <view class="item-header"> 38 <view class="list-container" v-if="list.length > 0">
35 <view class="left-info"> 39 <view class="list-item" v-for="(item, index) in list" :key="index" @click="goDetail(item)">
36 <text class="mem-name">{{ item.memName }}</text> 40 <view class="item-header">
37 <text class="wf-code" v-if="item.wfCode">{{ item.wfCode }}</text> 41 <view class="left-info">
38 </view> 42 <text class="mem-name">{{ item.memName }}</text>
39 <view class="status-badge" :class="getStatusClass(item.auditStatus)"> 43 <text class="wf-code" v-if="item.wfCode">{{ item.wfCode }}</text>
40 {{ getStatusText(item.auditStatus) }} 44 </view>
45 <view class="status-badge" :class="getStatusClass(item.auditStatus)">
46 {{ getStatusText(item.auditStatus) }}
47 </view>
41 </view> 48 </view>
42 </view> 49
43 50 <view class="stats-row">
44 <view class="stats-row"> 51 <view class="stat-item">
45 <view class="stat-item"> 52 <text class="stat-label">人数合计</text>
46 <text class="stat-label">人数合计</text> 53 <text class="stat-value">{{ item.allCount || 0 }}</text>
47 <text class="stat-value">{{ item.allCount || 0 }}</text> 54 </view>
55 <view class="stat-item">
56 <text class="stat-label">新会员合计</text>
57 <text class="stat-value">{{ item.newCount || 0 }}</text>
58 </view>
59 <view class="stat-item">
60 <text class="stat-label">年限合计</text>
61 <text class="stat-value">{{ item.yearCount || 0 }}</text>
62 </view>
48 </view> 63 </view>
49 <view class="stat-item"> 64
50 <text class="stat-label">新会员合计</text> 65 <view class="submit-time" v-if="item.commitTime">
51 <text class="stat-value">{{ item.newCount || 0 }}</text> 66 <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
67 <text class="time-text">{{ item.commitTime }} 提交</text>
52 </view> 68 </view>
53 <view class="stat-item"> 69
54 <text class="stat-label">年限合计</text> 70 <view class="action-buttons">
55 <text class="stat-value">{{ item.yearCount || 0 }}</text> 71 <button
72 class="action-btn delete-btn"
73 @click.stop="handleDel(item)"
74 :disabled="item.auditStatus == 1 || item.auditStatus == 9">
75 删除
76 </button>
77 <button
78 class="action-btn edit-btn"
79 @click.stop="handleUpdate(item)"
80 :disabled="item.auditStatus != 0">
81 编辑
82 </button>
83 <button
84 class="action-btn submit-btn"
85 @click.stop="commitFN(item)"
86 :disabled="item.auditStatus != 0">
87 提交审核
88 </button>
56 </view> 89 </view>
57 </view> 90 </view>
58 91
59 <view class="submit-time" v-if="item.commitTime"> 92 <view class="load-more" v-if="hasMore">
60 <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons> 93 <text class="load-text">加载中...</text>
61 <text class="time-text">{{ item.commitTime }} 提交</text>
62 </view> 94 </view>
63 95 <view class="load-more" v-else-if="list.length > 0">
64 <view class="action-buttons"> 96 <text class="load-text">没有更多数据了</text>
65 <button
66 class="action-btn delete-btn"
67 @click.stop="handleDel(item)"
68 :disabled="item.auditStatus == 1 || item.auditStatus == 9">
69 删除
70 </button>
71 <button
72 class="action-btn edit-btn"
73 @click.stop="handleUpdate(item)"
74 :disabled="item.auditStatus != 0">
75 编辑
76 </button>
77 <button
78 class="action-btn submit-btn"
79 @click.stop="commitFN(item)"
80 :disabled="item.auditStatus != 0">
81 提交审核
82 </button>
83 </view> 97 </view>
84 </view> 98 </view>
85 </view>
86 99
87 <!-- 空数据状态 --> 100 <!-- 空数据状态 -->
88 <view class="empty-state" v-else> 101 <view class="empty-state" v-else>
89 <image mode="aspectFit" src="/static/nodata.png" class="empty-icon"></image> 102 <image mode="aspectFit" src="/static/nodata.png" class="empty-icon"></image>
90 <text class="empty-text">暂无数据</text> 103 <text class="empty-text">暂无数据</text>
104 </view>
91 </view> 105 </view>
92 106
107 <!-- 弹窗 -->
93 <view 108 <view
94 class="modal-mask" 109 class="modal-mask"
95 v-show="showModal" 110 v-show="showModal"
...@@ -102,7 +117,7 @@ ...@@ -102,7 +117,7 @@
102 @click.stop 117 @click.stop
103 @touchmove.stop.prevent="() => {}" 118 @touchmove.stop.prevent="() => {}"
104 > 119 >
105 <view class="modal-title">提示</view> 120 <view class="modal-title">提示</view>
106 <view class="modal-con">{{ modalTitle }}</view> 121 <view class="modal-con">{{ modalTitle }}</view>
107 <view class="modal-buttons"> 122 <view class="modal-buttons">
108 <view class="btn-cancel" @click="closeModal">取消</view> 123 <view class="btn-cancel" @click="closeModal">取消</view>
...@@ -117,18 +132,27 @@ ...@@ -117,18 +132,27 @@
117 import * as api from '@/common/api.js' 132 import * as api from '@/common/api.js'
118 import config from '@/config.js' 133 import config from '@/config.js'
119 import { ref, onUnmounted } from 'vue' 134 import { ref, onUnmounted } from 'vue'
120 import { onLoad, onShow, onReady } from '@dcloudio/uni-app' 135 import { onLoad, onShow, onReady, onReachBottom } from '@dcloudio/uni-app'
121 136
122 const queryParams = ref({}) 137 const queryParams = ref({})
123 const list = ref([]) 138 const list = ref([])
124 const total = ref(0) 139 const total = ref(0)
125 // 新增:状态 Tab 激活项
126 const activeTab = ref('') 140 const activeTab = ref('')
127 141
128 // ========== 1. 彻底解决弹窗默认显示 ========== 142 // ========== 分页参数 ==========
129 let showModal = ref(false) 143 const pageNum = ref(1)
144 const pageSize = ref(10)
145 const hasMore = ref(true)
146 const loading = ref(false)
147
148 // ========== 弹窗 ==========
149 const showModal = ref(false)
150 const modalTitle = ref('')
151 let confirmCallback = null
152
130 onLoad(() => { 153 onLoad(() => {
131 showModal.value = false 154 showModal.value = false
155 resetList()
132 }) 156 })
133 onReady(() => { 157 onReady(() => {
134 showModal.value = false 158 showModal.value = false
...@@ -138,15 +162,15 @@ onShow(() => { ...@@ -138,15 +162,15 @@ onShow(() => {
138 getList() 162 getList()
139 }) 163 })
140 164
141 const modalTitle = ref('') 165 // 上拉加载更多
142 let confirmCallback = null 166 onReachBottom(() => {
143 167 if (hasMore.value && !loading.value) {
144 // ========== 2. 移除所有 uni.setPageScrollEnabled 调用 ========== 168 pageNum.value++
145 onUnmounted(() => { 169 getList()
146 showModal.value = false 170 }
147 }) 171 })
148 172
149 // 新增:状态 Tab 切换 173 // 切换Tab时重置分页
150 function switchTab(status) { 174 function switchTab(status) {
151 activeTab.value = status 175 activeTab.value = status
152 if (status === '') { 176 if (status === '') {
...@@ -154,14 +178,54 @@ function switchTab(status) { ...@@ -154,14 +178,54 @@ function switchTab(status) {
154 } else { 178 } else {
155 queryParams.value.auditStatus = status 179 queryParams.value.auditStatus = status
156 } 180 }
181 resetList()
157 getList() 182 getList()
158 } 183 }
159 184
160 function getList() { 185 // 重置列表
161 api.getPaymentList(queryParams.value).then(res => { 186 function resetList() {
162 list.value = res.rows || [] 187 pageNum.value = 1
188 list.value = []
189 hasMore.value = true
190 }
191
192 // 获取列表(支持分页)
193 async function getList() {
194 if (loading.value) return
195 loading.value = true
196
197 try {
198 const res = await api.getPaymentList({
199 ...queryParams.value,
200 pageNum: pageNum.value,
201 pageSize: pageSize.value
202 })
203
204 const data = res.rows || []
163 total.value = res.total || 0 205 total.value = res.total || 0
164 }) 206
207 if (pageNum.value === 1) {
208 list.value = data
209 } else {
210 list.value = [...list.value, ...data]
211 }
212
213 if (data.length < pageSize.value) {
214 hasMore.value = false
215 } else {
216 hasMore.value = true
217 }
218 } catch (err) {
219 console.log(err)
220 } finally {
221 loading.value = false
222 }
223 }
224
225 // 搜索时重置
226 function searchFN() {
227 resetList()
228 getList()
165 } 229 }
166 230
167 function goDetail(item) { 231 function goDetail(item) {
...@@ -175,14 +239,12 @@ function handleUpdate(item) { ...@@ -175,14 +239,12 @@ function handleUpdate(item) {
175 uni.navigateTo({ url: path }) 239 uni.navigateTo({ url: path })
176 } 240 }
177 241
178 // 打开弹窗:只控制弹窗显示,滚动锁定交给 CSS
179 function openModal(title, callback) { 242 function openModal(title, callback) {
180 modalTitle.value = title 243 modalTitle.value = title
181 showModal.value = true 244 showModal.value = true
182 confirmCallback = callback 245 confirmCallback = callback
183 } 246 }
184 247
185 // 关闭弹窗:只控制弹窗隐藏,滚动恢复交给 CSS
186 function closeModal() { 248 function closeModal() {
187 showModal.value = false 249 showModal.value = false
188 confirmCallback = null 250 confirmCallback = null
...@@ -193,7 +255,6 @@ function confirmModal() { ...@@ -193,7 +255,6 @@ function confirmModal() {
193 closeModal() 255 closeModal()
194 } 256 }
195 257
196 // 删除
197 function handleDel(row) { 258 function handleDel(row) {
198 showModal.value = false 259 showModal.value = false
199 openModal(`是否确认删除缴费编号为"${row.wfCode}"的数据项?`, () => { 260 openModal(`是否确认删除缴费编号为"${row.wfCode}"的数据项?`, () => {
...@@ -201,16 +262,16 @@ function handleDel(row) { ...@@ -201,16 +262,16 @@ function handleDel(row) {
201 api.paymentDel(row.rangId).then(() => { 262 api.paymentDel(row.rangId).then(() => {
202 uni.hideLoading() 263 uni.hideLoading()
203 uni.showToast({ title: '删除成功' }) 264 uni.showToast({ title: '删除成功' })
265 resetList()
204 getList() 266 getList()
205 }) 267 })
206 }) 268 })
207 } 269 }
208 270
209 // 提交审核
210 function commitFN(row) { 271 function commitFN(row) {
211 uni.navigateTo({ 272 uni.navigateTo({
212 url: `/myCenter/payOrder?rangeId=${row.rangId}` 273 url: `/myCenter/payOrder?rangeId=${row.rangId}`
213 }) 274 })
214 } 275 }
215 276
216 async function goAdd() { 277 async function goAdd() {
...@@ -234,25 +295,26 @@ function getStatusText(status) { ...@@ -234,25 +295,26 @@ function getStatusText(status) {
234 295
235 function getStatusClass(status) { 296 function getStatusClass(status) {
236 const classMap = { 297 const classMap = {
237 0: 'status-pending', 298 0: 'status-processing',
238 1: 'status-processing', 299 1: 'status-pending',
239 2: 'status-success', 300 2: 'status-success',
240 3: 'status-rejected', 301 3: 'status-rejected',
241 9: 'status-withdrawn' 302 9: 'status-withdrawn'
242 } 303 }
243 return classMap[status] || 'status-default' 304 return classMap[status] || 'status-default'
244 } 305 }
306
307 onUnmounted(() => {
308 showModal.value = false
309 })
245 </script> 310 </script>
246 311
247 <style lang="scss" scoped> 312 <style lang="scss" scoped>
248 /* 核心:锁死滚动的样式(优先级最高) */
249 .container { 313 .container {
250 min-height: 100vh; 314 min-height: 100vh;
251 background-color: #f8f9fa; 315 background-color: #f8f9fa;
252 padding-bottom: 60rpx; 316 position: relative;
253 transition: all 0.2s ease;
254 } 317 }
255 /* 弹窗时强制固定定位,彻底禁止滚动(纯 CSS 实现,不依赖 API) */
256 .container.lock-scroll { 318 .container.lock-scroll {
257 position: fixed; 319 position: fixed;
258 top: 0; 320 top: 0;
...@@ -262,14 +324,32 @@ function getStatusClass(status) { ...@@ -262,14 +324,32 @@ function getStatusClass(status) {
262 overflow: hidden !important; 324 overflow: hidden !important;
263 } 325 }
264 326
327 /* ============= 核心:固定顶部 ============= */
328 .fixed-header-wrapper {
329 position: fixed;
330 top: 0;
331 left: 0;
332 right: 0;
333 background: #fff;
334 z-index: 10;
335 box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.04);
336 }
337
338 /* 内容区域:顶部留出固定栏高度 */
339 .scroll-content {
340 padding-top: 190rpx;
341 padding-bottom: 60rpx;
342 min-height: 100vh;
343 box-sizing: border-box;
344 }
345
265 /* 搜索栏 */ 346 /* 搜索栏 */
266 .search-bar { 347 .search-bar {
267 display: flex; 348 display: flex;
268 align-items: center; 349 align-items: center;
269 padding: 20rpx 30rpx; 350 padding: 20rpx 30rpx;
270 background-color: #ffffff; 351 background-color: #ffffff;
271 margin-bottom: 24rpx; 352 margin-bottom: 0;
272 box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
273 353
274 .search-input { 354 .search-input {
275 flex: 1; 355 flex: 1;
...@@ -280,18 +360,11 @@ function getStatusClass(status) { ...@@ -280,18 +360,11 @@ function getStatusClass(status) {
280 background-color: #f5f7fa; 360 background-color: #f5f7fa;
281 height: 76rpx; 361 height: 76rpx;
282 padding: 0 24rpx; 362 padding: 0 24rpx;
283 transition: all 0.3s ease;
284 } 363 }
285 364
286 :deep(.uni-easyinput__content-input) { 365 :deep(.uni-easyinput__content-input) {
287 font-size: 28rpx; 366 font-size: 28rpx;
288 color: #333; 367 color: #333;
289 letter-spacing: 0.5rpx;
290 }
291
292 :deep(.uni-easyinput__content):focus-within {
293 background-color: #f0f2f5;
294 box-shadow: 0 0 0 2rpx rgba(173, 24, 31, 0.1);
295 } 368 }
296 } 369 }
297 370
...@@ -303,28 +376,20 @@ function getStatusClass(status) { ...@@ -303,28 +376,20 @@ function getStatusClass(status) {
303 border-radius: 40rpx; 376 border-radius: 40rpx;
304 font-size: 28rpx; 377 font-size: 28rpx;
305 color: #ffffff; 378 color: #ffffff;
306 box-shadow: 0 4rpx 12rpx rgba(173, 24, 31, 0.2); 379 }
307 transition: all 0.2s ease; 380
308 381 .add-icon {
309 &:active { 382 font-size: 36rpx;
310 transform: scale(0.96); 383 margin-right: 10rpx;
311 box-shadow: 0 2rpx 8rpx rgba(173, 24, 31, 0.15); 384 font-weight: bold;
312 }
313
314 .add-icon {
315 font-size: 36rpx;
316 margin-right: 10rpx;
317 font-weight: bold;
318 }
319 } 385 }
320 } 386 }
321 387
322 /* 1. 新增:审核状态筛选 Tab 样式 */ 388 /* 状态Tab */
323 .status-tabs { 389 .status-tabs {
324 display: flex; 390 display: flex;
325 background: #fff; 391 background: #fff;
326 padding: 0 30rpx; 392 padding: 0 30rpx;
327 margin-bottom: 20rpx;
328 393
329 .tab-item { 394 .tab-item {
330 flex: 1; 395 flex: 1;
...@@ -354,24 +419,16 @@ function getStatusClass(status) { ...@@ -354,24 +419,16 @@ function getStatusClass(status) {
354 } 419 }
355 } 420 }
356 421
357 /* 列表容器 */ 422 /* 列表 */
358 .list-container { 423 .list-container {
359 padding: 0 30rpx; 424 padding: 0 30rpx;
360 } 425 }
361
362 /* 列表项 */
363 .list-item { 426 .list-item {
364 background: #ffffff; 427 background: #ffffff;
365 border-radius: 24rpx; 428 border-radius: 24rpx;
366 padding: 36rpx 32rpx; 429 padding: 36rpx 32rpx;
367 margin-bottom: 24rpx; 430 margin-bottom: 24rpx;
368 box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05); 431 box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
369 transition: all 0.2s ease;
370
371 &:active {
372 transform: translateY(2rpx);
373 box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
374 }
375 } 432 }
376 433
377 .item-header { 434 .item-header {
...@@ -392,7 +449,6 @@ function getStatusClass(status) { ...@@ -392,7 +449,6 @@ function getStatusClass(status) {
392 font-weight:600; 449 font-weight:600;
393 color:#1a1a1a; 450 color:#1a1a1a;
394 margin-right:16rpx; 451 margin-right:16rpx;
395 letter-spacing: 0.8rpx;
396 } 452 }
397 453
398 .wf-code { 454 .wf-code {
...@@ -401,19 +457,15 @@ function getStatusClass(status) { ...@@ -401,19 +457,15 @@ function getStatusClass(status) {
401 background:#f0f8fb; 457 background:#f0f8fb;
402 padding:6rpx 12rpx; 458 padding:6rpx 12rpx;
403 border-radius: 16rpx; 459 border-radius: 16rpx;
404 margin-top: 4rpx;
405 } 460 }
406 461
407 .status-badge { 462 .status-badge {
408 font-size:24rpx; 463 font-size:24rpx;
409 padding:8rpx 16rpx; 464 padding:8rpx 16rpx;
410 border-radius: 20rpx; 465 border-radius: 20rpx;
411 font-weight: 500;
412 letter-spacing: 0.5rpx;
413 } 466 }
414 } 467 }
415 468
416 /* 状态徽章 */
417 .status-pending { background:#f5f5f5; color:#888; } 469 .status-pending { background:#f5f5f5; color:#888; }
418 .status-processing { background:#e8e8ff; color:#1890ff; } 470 .status-processing { background:#e8e8ff; color:#1890ff; }
419 .status-success { background:#f0fff4; color:#52c41a; } 471 .status-success { background:#f0fff4; color:#52c41a; }
...@@ -421,7 +473,6 @@ function getStatusClass(status) { ...@@ -421,7 +473,6 @@ function getStatusClass(status) {
421 .status-withdrawn { background:#fffbe6; color:#faad14; } 473 .status-withdrawn { background:#fffbe6; color:#faad14; }
422 .status-default { background:#f5f5f5; color:#999; } 474 .status-default { background:#f5f5f5; color:#999; }
423 475
424 /* 数据统计 */
425 .stats-row { 476 .stats-row {
426 display: flex; 477 display: flex;
427 justify-content: space-between; 478 justify-content: space-between;
...@@ -437,9 +488,7 @@ function getStatusClass(status) { ...@@ -437,9 +488,7 @@ function getStatusClass(status) {
437 font-size:24rpx; 488 font-size:24rpx;
438 color:#999; 489 color:#999;
439 margin-bottom:10rpx; 490 margin-bottom:10rpx;
440 letter-spacing: 0.5rpx;
441 } 491 }
442
443 .stat-value { 492 .stat-value {
444 font-size:32rpx; 493 font-size:32rpx;
445 font-weight:700; 494 font-weight:700;
...@@ -448,7 +497,6 @@ function getStatusClass(status) { ...@@ -448,7 +497,6 @@ function getStatusClass(status) {
448 } 497 }
449 } 498 }
450 499
451 /* 提交时间 */
452 .submit-time { 500 .submit-time {
453 display: flex; 501 display: flex;
454 align-items: center; 502 align-items: center;
...@@ -458,11 +506,9 @@ function getStatusClass(status) { ...@@ -458,11 +506,9 @@ function getStatusClass(status) {
458 font-size:24rpx; 506 font-size:24rpx;
459 color:#666; 507 color:#666;
460 margin-left:20rpx; 508 margin-left:20rpx;
461 letter-spacing: 0.3rpx;
462 } 509 }
463 } 510 }
464 511
465 /* 操作按钮 */
466 .action-buttons { 512 .action-buttons {
467 display: flex; 513 display: flex;
468 514
...@@ -475,27 +521,13 @@ function getStatusClass(status) { ...@@ -475,27 +521,13 @@ function getStatusClass(status) {
475 margin:0 8rpx; 521 margin:0 8rpx;
476 border:none; 522 border:none;
477 font-weight: 500; 523 font-weight: 500;
478 letter-spacing: 0.8rpx;
479 transition: all 0.2s ease;
480
481 524
482 /* 2. 强化:按钮禁用样式(一眼能看出不可用) */
483 &:disabled { 525 &:disabled {
484 background: #f0f0f0 !important; 526 background: #f0f0f0 !important;
485 color: #ccc !important; 527 color: #ccc !important;
486 cursor: not-allowed;
487 transform: none !important;
488 opacity: 1 !important;
489 } 528 }
490 } 529 }
491 .action-btn[disabled] { 530
492 background: #f0f0f0 !important;
493 color: #cccccc !important;
494 opacity: 1 !important;
495 cursor: not-allowed;
496 transform: none !important;
497 }
498
499 .delete-btn { 531 .delete-btn {
500 background:#fff2f2; 532 background:#fff2f2;
501 color:#ff4d4f; 533 color:#ff4d4f;
...@@ -510,12 +542,12 @@ function getStatusClass(status) { ...@@ -510,12 +542,12 @@ function getStatusClass(status) {
510 } 542 }
511 } 543 }
512 544
513 /* 空数据 */ 545 /* 空状态 */
514 .empty-state { 546 .empty-state {
515 display: flex; 547 display: flex;
516 flex-direction: column; 548 flex-direction: column;
517 align-items: center; 549 align-items: center;
518 padding:160rpx 40rpx 0; 550 padding:100rpx 40rpx 0;
519 551
520 .empty-icon { 552 .empty-icon {
521 width:240rpx; 553 width:240rpx;
...@@ -523,15 +555,23 @@ function getStatusClass(status) { ...@@ -523,15 +555,23 @@ function getStatusClass(status) {
523 margin-bottom:40rpx; 555 margin-bottom:40rpx;
524 opacity:0.5; 556 opacity:0.5;
525 } 557 }
526
527 .empty-text { 558 .empty-text {
528 font-size:30rpx; 559 font-size:30rpx;
529 color:#999; 560 color:#999;
530 letter-spacing: 1rpx;
531 } 561 }
532 } 562 }
533 563
534 /* 弹窗:最高优先级样式 */ 564 /* 加载更多 */
565 .load-more {
566 padding: 30rpx 0;
567 text-align: center;
568 .load-text {
569 font-size: 26rpx;
570 color: #999;
571 }
572 }
573
574 /* 弹窗 */
535 .modal-mask { 575 .modal-mask {
536 position: fixed; 576 position: fixed;
537 top: 0; 577 top: 0;
...@@ -542,78 +582,51 @@ function getStatusClass(status) { ...@@ -542,78 +582,51 @@ function getStatusClass(status) {
542 display: flex; 582 display: flex;
543 align-items: center; 583 align-items: center;
544 justify-content: center; 584 justify-content: center;
545 z-index: 99999 !important; /* 最高层级 */ 585 z-index: 99999 !important;
546 backdrop-filter: blur(4rpx);
547 touch-action: none !important; /* 禁止触摸 */
548 pointer-events: auto !important; /* 强制可点击 */
549 } 586 }
550 587
551 .modal-box { 588 .modal-box {
552 width: 85%; 589 width: 85%;
553 max-width: 580rpx; 590 max-width: 580rpx;
554 background: #ffffff; 591 background: #fff;
555 border-radius: 32rpx; 592 border-radius: 32rpx;
556 padding: 60rpx 40rpx 50rpx; 593 padding: 60rpx 40rpx 50rpx;
557 box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.15);
558 touch-action: none !important;
559 pointer-events: auto !important;
560 } 594 }
561 .modal-con { 595 .modal-title {
562 text-align: center; 596 text-align: center;
563 font-size: 32rpx; 597 font-size: 32rpx;
564 // font-weight: 600;
565 color: #333; 598 color: #333;
566 margin-bottom: 50rpx; 599 margin-bottom: 20rpx;
567 letter-spacing: 1rpx;
568 line-height: 1.4;
569 } 600 }
570 .modal-title { 601 .modal-con {
571 text-align: center; 602 text-align: center;
572 font-size: 32rpx; 603 font-size: 32rpx;
573 // font-weight: 600;
574 color: #333; 604 color: #333;
575 margin-bottom: 20rpx; 605 margin-bottom: 50rpx;
576 letter-spacing: 1rpx;
577 line-height: 1.4;
578 } 606 }
579
580 .modal-buttons { 607 .modal-buttons {
581 display: flex; 608 display: flex;
582 gap: 24rpx; 609 gap: 24rpx;
583 } 610 }
584
585 .btn-cancel { 611 .btn-cancel {
586 flex: 1; 612 flex:1;
587 height: 92rpx; 613 height:92rpx;
588 line-height: 92rpx; 614 line-height:92rpx;
589 text-align: center; 615 text-align:center;
590 font-size: 32rpx; 616 font-size:32rpx;
591 color: #666; 617 color:#666;
592 background: #f5f7fa; 618 background:#f5f7fa;
593 border-radius: 46rpx; 619 border-radius:46rpx;
594 transition: all 0.2s ease;
595
596 &:active {
597 background: #e8e8e8;
598 }
599 } 620 }
600
601 .btn-confirm { 621 .btn-confirm {
602 flex: 1; 622 flex:1;
603 height: 92rpx; 623 height:92rpx;
604 line-height: 92rpx; 624 line-height:92rpx;
605 text-align: center; 625 text-align:center;
606 font-size: 32rpx; 626 font-size:32rpx;
607 color: #fff; 627 color:#fff;
608 background: linear-gradient(135deg, #AD181F 0%, #c92028 100%); 628 background:linear-gradient(135deg, #AD181F 0%, #c92028 100%);
609 border-radius: 46rpx; 629 border-radius:46rpx;
610 font-weight: 600; 630 font-weight:600;
611 box-shadow: 0 6rpx 16rpx rgba(173, 24, 31, 0.25);
612 transition: all 0.2s ease;
613
614 &:active {
615 transform: scale(0.96);
616 box-shadow: 0 4rpx 12rpx rgba(173, 24, 31, 0.2);
617 }
618 } 631 }
619 </style> 632 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -266,7 +266,7 @@ ...@@ -266,7 +266,7 @@
266 } 266 }
267 267
268 .vipData { 268 .vipData {
269 padding: 10rpx 20rpx; 269 padding: 10rpx 20rpx 5rpx;
270 font-size: 28rpx; 270 font-size: 28rpx;
271 color: #666; 271 color: #666;
272 view { margin-bottom: 10rpx; } 272 view { margin-bottom: 10rpx; }
......
...@@ -200,7 +200,7 @@ ...@@ -200,7 +200,7 @@
200 .icon { 200 .icon {
201 width: 40rpx; 201 width: 40rpx;
202 height: 40rpx; 202 height: 40rpx;
203 margin-right: 20rpx; 203 margin:0 20rpx;
204 } 204 }
205 205
206 .photobox { 206 .photobox {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!