6a64b49d by lttnew

订单

1 parent a4d367f7
...@@ -68,11 +68,11 @@ const handleClick = (index, url) => { ...@@ -68,11 +68,11 @@ const handleClick = (index, url) => {
68 bottom: 0; 68 bottom: 0;
69 left: 0; 69 left: 0;
70 right: 0; 70 right: 0;
71 height: 120rpx; 71 height: 130rpx;
72 display: flex; 72 display: flex;
73 justify-content: flex-start; 73 justify-content: flex-start;
74 align-items: stretch; 74 align-items: stretch;
75 padding-bottom: env(safe-area-inset-bottom); 75 padding-bottom: 0;
76 z-index: 9999; 76 z-index: 9999;
77 background-color: #d9d9d9; 77 background-color: #d9d9d9;
78 overflow: hidden; 78 overflow: hidden;
...@@ -80,9 +80,10 @@ const handleClick = (index, url) => { ...@@ -80,9 +80,10 @@ const handleClick = (index, url) => {
80 80
81 .dg-tab-bar-bg { 81 .dg-tab-bar-bg {
82 position: absolute; 82 position: absolute;
83 top: 0rpx; 83 top: 0;
84 bottom: 0;
84 width: 20%; 85 width: 20%;
85 height: calc(100% - 35rpx); 86 height: 130rpx;
86 z-index: 0; 87 z-index: 0;
87 transition: left 0.3s ease; 88 transition: left 0.3s ease;
88 pointer-events: none; 89 pointer-events: none;
...@@ -94,7 +95,7 @@ const handleClick = (index, url) => { ...@@ -94,7 +95,7 @@ const handleClick = (index, url) => {
94 align-items: center; 95 align-items: center;
95 justify-content: center; 96 justify-content: center;
96 width: 20%; 97 width: 20%;
97 height: 100%; 98 height: 130rpx;
98 position: relative; 99 position: relative;
99 z-index: 1; 100 z-index: 1;
100 } 101 }
......
...@@ -9,11 +9,7 @@ ...@@ -9,11 +9,7 @@
9 <view class="appList"> 9 <view class="appList">
10 <view v-for="(item,index) in list" :key="item.examId || index" class="appItem"> 10 <view v-for="(item,index) in list" :key="item.examId || index" class="appItem">
11 <view class="status" @click="goDetail(item)"> 11 <view class="status" @click="goDetail(item)">
12 <text v-if="item.status=='0'" class="text-primary-bg">{{ item.statusStr }}</text> 12 <text :class="getStatusClass(item.status)">{{ auditStatusTag(item.status) }}</text>
13 <text v-if="item.status=='1'" class="text-primary-bg">{{ item.statusStr }}</text>
14 <text v-if="item.status=='2'" class="text-success-bg">{{ item.statusStr }}</text>
15 <text v-if="item.status=='3'" class="text-danger-bg">{{ item.statusStr }}</text>
16 <text v-if="item.status=='4'" class="text-warning-bg">{{ item.statusStr }}</text>
17 </view> 13 </view>
18 <view v-if="item.status!='0'&&item.submitTime" class="date">提交时间:{{ item.submitTime }}</view> 14 <view v-if="item.status!='0'&&item.submitTime" class="date">提交时间:{{ item.submitTime }}</view>
19 <view class="mt0" @click="goDetail(item)"> 15 <view class="mt0" @click="goDetail(item)">
...@@ -39,10 +35,12 @@ ...@@ -39,10 +35,12 @@
39 <view class="pp esp">考级日期:{{ item.startTime?.substring(0, 16) }}{{ item.endTime?.substring(0, 16) }} 35 <view class="pp esp">考级日期:{{ item.startTime?.substring(0, 16) }}{{ item.endTime?.substring(0, 16) }}
40 </view> 36 </view>
41 37
42 <view v-if="item.status=='0'||item.status=='3'||item.status=='4'||item.status=='9'" class="func"> 38 <view class="func">
43 <button v-if="item.status !== '1' && item.status !== '2' && item.status !== '3'" @click="handleDelete(item)">删除</button> 39 <!-- <button :disabled="item.status=='0'" @click="goDetail(item)">查看</button> -->
44 <button v-if="item.status === '0'" @click="editThis(item)">编辑</button> 40 <button :disabled="item.status!='0'" @click="editThis(item)">编辑</button>
45 <button v-if="(item.status === '0' || item.status === '9') && item.totalNum > 0 && item.pass > 0" @click="handleSubmit(item)">提交审核</button> 41 <button v-if="item.status === '9'" class="btn-pay" :disabled="item.status!='0'&&item.status!='9'||item.totalNum==0||item.pass==0" @click="handlePay(item)">支付</button>
42 <button v-else :disabled="item.status!='0'&&item.status!='9'||item.totalNum==0||item.pass==0" @click="handleSubmit(item)">提交审核</button>
43 <button :disabled="item.status!= 8" @click="handleDelete(item)">删除</button>
46 </view> 44 </view>
47 </view> 45 </view>
48 </view> 46 </view>
...@@ -112,6 +110,26 @@ function getList() { ...@@ -112,6 +110,26 @@ function getList() {
112 }) 110 })
113 } 111 }
114 112
113 const auditStatusTag = (status) => {
114 const map = {
115 '0': '待提交',
116 '1': '审核中',
117 '2': '审核通过',
118 '3': '审核拒绝',
119 '4': '已退回',
120 '8': '已取消',
121 '9': '待支付'
122 }
123 return map[status] || ''
124 }
125
126 const getStatusClass = (status) => {
127 if (status === '2') return 'text-success-bg'
128 if (status === '3' || status === '8') return 'text-danger-bg'
129 if (status === '4' || status === '9') return 'text-warning-bg'
130 return 'text-primary-bg'
131 }
132
115 function goAdd() { 133 function goAdd() {
116 let path = `/level/addApply` 134 let path = `/level/addApply`
117 uni.navigateTo({ 135 uni.navigateTo({
...@@ -186,6 +204,12 @@ function goDetail(item) { ...@@ -186,6 +204,12 @@ function goDetail(item) {
186 } 204 }
187 205
188 } 206 }
207
208 function handlePay(item) {
209 uni.navigateTo({
210 url: `/level/paymentDetail?examId=${item.examId}`
211 })
212 }
189 </script> 213 </script>
190 214
191 215
...@@ -220,12 +244,31 @@ function goDetail(item) { ...@@ -220,12 +244,31 @@ function goDetail(item) {
220 // border-color: #eee; 244 // border-color: #eee;
221 // } 245 // }
222 } 246 }
247
248 .btn-pay {
249 background-color: #13B5B1;
250 color: #fff;
251 border-color: #13B5B1;
252 }
223 :deep(.func button[disabled]) { 253 :deep(.func button[disabled]) {
224 background-color: #f5f5f5 !important; 254 background-color: #f5f5f5 !important;
225 color: #ccc !important; 255 color: #ccc !important;
226 border-color: #eee !important; 256 border-color: #eee !important;
227 opacity: 0.6; 257 opacity: 0.6;
228 } 258 }
259 :deep(.func) {
260 display: flex;
261 flex-wrap: wrap;
262 justify-content: flex-start;
263 gap: 10rpx;
264
265 button {
266 padding: 0 20rpx;
267 font-size: 24rpx;
268 line-height: 2;
269 min-width: 120rpx;
270 }
271 }
229 .mt0 { 272 .mt0 {
230 margin-top: 0 !important; 273 margin-top: 0 !important;
231 } 274 }
...@@ -234,4 +277,25 @@ function goDetail(item) { ...@@ -234,4 +277,25 @@ function goDetail(item) {
234 width: 85%; 277 width: 85%;
235 word-break: break-all; 278 word-break: break-all;
236 } 279 }
280
281 // 状态样式
282 .text-primary-bg {
283 background: #e6f0ff;
284 color: #409eff;
285 }
286
287 .text-success-bg {
288 background: #e6fff7;
289 color: #52c41a;
290 }
291
292 .text-danger-bg {
293 background: #fff1f0;
294 color: #ff4d4f;
295 }
296
297 .text-warning-bg {
298 background: #fff7e6;
299 color: #fa8c16;
300 }
237 </style> 301 </style>
......
...@@ -40,129 +40,6 @@ ...@@ -40,129 +40,6 @@
40 @scrolltolower="loadMore" 40 @scrolltolower="loadMore"
41 > 41 >
42 <view class="order-list"> 42 <view class="order-list">
43 <!-- 有数据才循环 -->
44 <!-- <view v-if="list.length > 0">-->
45 <!-- <view-->
46 <!-- v-for="(item, index) in list"-->
47 <!-- :key="index"-->
48 <!-- class="order-card"-->
49 <!-- @click="goToDetail(item)"-->
50 <!-- >-->
51 <!-- &lt;!&ndash; 订单头部:日期 + 状态 &ndash;&gt;-->
52 <!-- <view class="card-header">-->
53 <!-- <view class="date">-->
54 <!-- &lt;!&ndash; <image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" style="width:30rpx;height:30rpx;"/> &ndash;&gt;-->
55 <!-- &lt;!&ndash; &ndash;&gt;-->
56 <!-- <text class="value text-primary">{{ item.wfCode || '——' }}</text>-->
57 <!-- </view>-->
58 <!-- <view class="status-tags">-->
59 <!-- &lt;!&ndash; <view-->
60 <!-- class="status-tag"-->
61 <!-- :class="{-->
62 <!-- success: item.payStatus == 1,-->
63 <!-- danger: item.payStatus == 2,-->
64 <!-- pending: item.payStatus == 0-->
65 <!-- }"-->
66 <!-- >-->
67 <!-- {{ getStatusText(item.payStatus) }}-->
68 <!-- </view> &ndash;&gt;-->
69 <!-- <view-->
70 <!-- :class="{-->
71 <!-- 'status-wait': item.auditStatus == 0,-->
72 <!-- 'status-pending': item.auditStatus == 1,-->
73 <!-- 'status-success': item.auditStatus == 2,-->
74 <!-- 'status-danger': item.auditStatus == 3-->
75 <!-- }"-->
76 <!-- class="status-tag ml-10"-->
77 <!-- >-->
78 <!-- {{ getAuditStatusText(item.auditStatus) }}-->
79 <!-- </view>-->
80 <!-- </view>-->
81 <!-- </view>-->
82 <!-- -->
83 <!-- &lt;!&ndash; 订单编号、缴费编号 &ndash;&gt;-->
84 <!-- <view class="info-row">-->
85 <!-- <text class="label">订单编号:</text>-->
86 <!-- <text class="value">{{ item.tradeNo || '——' }}</text>-->
87 <!-- </view>-->
88 <!-- <view v-if="item.orderName" class="info-row">-->
89 <!-- <text class="label">缴费名称:</text>-->
90 <!-- <text class="value">{{ item.orderName || '' }}</text>-->
91 <!-- </view>-->
92 <!-- &lt;!&ndash; <view class="info-row">-->
93 <!-- <text class="label">缴费编号:</text>-->
94 <!-- -->
95 <!-- </view> &ndash;&gt;-->
96 <!-- -->
97 <!-- &lt;!&ndash; 核心:前2tab仅展示缴费年限,后2tab仅展示人数合计 &ndash;&gt;-->
98 <!-- <view v-if="item.content" class="info-section flex f-j-s">-->
99 <!-- &lt;!&ndash; 个人/单位会员(仅缴费年限) &ndash;&gt;-->
100 <!-- <view v-if="currentTab === '0' || currentTab === '1'" class="single-info">-->
101 <!-- <view class="label">缴费年限:</view>-->
102 <!-- <view class="value">{{ item.content.yearCount || 0 }}</view>-->
103 <!-- </view>-->
104 <!-- &lt;!&ndash; 级位/段位考试(仅人数合计) &ndash;&gt;-->
105 <!-- <view v-if="currentTab === '2' || currentTab === '3' || currentTab === '4'" class="single-info">-->
106 <!-- <view class="label">人数合计</view>-->
107 <!-- <view class="value">{{ item.content.personCount || 0 }}</view>-->
108 <!-- </view>-->
109 <!-- <view class="line"></view>-->
110 <!-- <view class="single-info">-->
111 <!-- <view class="label">订单状态</view>-->
112 <!-- <view :class="item.effect == 1 ? 'text-success' : 'text-warning'" class="value">-->
113 <!-- {{ item.effect == 1 ? '已生效' : '未生效' }}-->
114 <!-- </view>-->
115 <!-- </view>-->
116 <!-- <view class="line"></view>-->
117 <!-- <view class="single-info">-->
118 <!-- <view class="label">缴费状态</view>-->
119 <!-- <view-->
120 <!-- :class="{-->
121 <!-- 'text-primary': item.payStatus == 0,-->
122 <!-- 'text-success': item.payStatus == 1,-->
123 <!-- 'text-danger': item.payStatus == 2-->
124 <!-- }"-->
125 <!-- class="value"-->
126 <!-- >-->
127 <!-- {{ item.payStatus == 0 ? '待缴费' : item.payStatus == 1 ? '缴费成功' : '订单取消' }}-->
128 <!-- </view>-->
129 <!-- </view>-->
130 <!-- </view>-->
131 <!-- -->
132 <!-- &lt;!&ndash; 费用合计 + 缴费方式 &ndash;&gt;-->
133 <!-- <view class="price-section">-->
134 <!-- <view class="price-row">-->
135 <!-- <text class="price-label">费用合计</text>-->
136 <!-- <text class="price-value">¥{{ (Number(item.price) || 0).toFixed(2) }}</text>-->
137 <!-- </view>-->
138 <!-- <view class="price-row">-->
139 <!-- <text class="price-label">缴费方式</text>-->
140 <!-- <text class="price-value">{{ item.ziZhangBu ? '对公转账' : '民生付' }}</text>-->
141 <!-- </view>-->
142 <!-- </view>-->
143 <!-- -->
144 <!-- &lt;!&ndash; 按钮组:靠右紧凑展示 &ndash;&gt;-->
145 <!-- <view class="btn-group">-->
146 <!-- &lt;!&ndash; 已缴费:申请开票/已开票(需要审核通过才能开票) &ndash;&gt;-->
147 <!-- <template v-if="item.payStatus == 1 && item.invoiceStatus != 1&& item.auditStatus == 2 &&item.price>0">-->
148 <!-- <button :disabled="item.invoiceStatus === 1" class="btn btn-view-invoice" @click="makeInvoiceFN(item)">-->
149 <!-- 开票-->
150 <!-- </button>-->
151 <!-- </template>-->
152 <!-- &lt;!&ndash; 已开票:查看发票 &ndash;&gt;-->
153 <!-- <template v-if="item.invoiceStatus == 1">-->
154 <!-- <button class="btn btn-invoice" @click.stop="viewInvoice(item)">查看发票</button>-->
155 <!-- </template>-->
156 <!-- &lt;!&ndash; 未缴费:去缴费 + 取消订单 &ndash;&gt;-->
157 <!-- &lt;!&ndash; <template v-if="item.payStatus == 0">-->
158 <!-- <button class="btn btn-cancel" @click="handleCancel(item)">取消订单</button>-->
159 <!-- <button class="btn btn-pay" @click="handlePay(item)">去缴费</button>-->
160 <!-- </template> &ndash;&gt;-->
161 <!-- </view>-->
162 <!-- </view>-->
163 <!-- </view>-->
164
165 <!-- 有数据才循环 -->
166 <view v-if="list.length > 0"> 43 <view v-if="list.length > 0">
167 <view 44 <view
168 v-for="(item, index) in list" 45 v-for="(item, index) in list"
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
34 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user01.png'" mode="aspectFit"></image> 34 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user01.png'" mode="aspectFit"></image>
35 <text>单位信息</text> 35 <text>单位信息</text>
36 </view> 36 </view>
37 <text class="arrow">></text> 37 <uni-icons type="arrowright" size="18" color="#111"></uni-icons>
38 </view> 38 </view>
39 39
40 <view class="menu-item" @click="goPath('/myCenter/auth')"> 40 <view class="menu-item" @click="goPath('/myCenter/auth')">
...@@ -42,15 +42,15 @@ ...@@ -42,15 +42,15 @@
42 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user02.png'" mode="aspectFit"></image> 42 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user02.png'" mode="aspectFit"></image>
43 <text>会员认证</text> 43 <text>会员认证</text>
44 </view> 44 </view>
45 <text class="arrow">></text> 45 <uni-icons type="arrowright" size="18" color="#111"></uni-icons>
46 </view> 46 </view>
47 47
48 <view class="menu-item" @click="goPath('/myCenter/examPointApplyList')"> 48 <view class="menu-item" @click="goPath('/myCenter/examPointApplyList')">
49 <view class="menu-left"> 49 <view class="menu-left">
50 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user02.png'" mode="aspectFit"></image> 50 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user04.png'" mode="aspectFit"></image>
51 <text>考点认证</text> 51 <text>考点认证</text>
52 </view> 52 </view>
53 <text class="arrow">></text> 53 <uni-icons type="arrowright" size="18" color="#111"></uni-icons>
54 </view> 54 </view>
55 55
56 <view class="menu-item" @click="goPath('/myCenter/safe')"> 56 <view class="menu-item" @click="goPath('/myCenter/safe')">
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
58 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user03.png'" mode="aspectFit"></image> 58 <image class="menu-icon" :src="config.baseUrl_api + '/fs/static/img/user03.png'" mode="aspectFit"></image>
59 <text>账号安全</text> 59 <text>账号安全</text>
60 </view> 60 </view>
61 <text class="arrow">></text> 61 <uni-icons type="arrowright" size="18" color="#111"></uni-icons>
62 </view> 62 </view>
63 </view> 63 </view>
64 64
...@@ -353,13 +353,6 @@ function onTabSwitch(index, url) { ...@@ -353,13 +353,6 @@ function onTabSwitch(index, url) {
353 margin-right: 18rpx; 353 margin-right: 18rpx;
354 } 354 }
355 355
356 .arrow {
357 color: #111;
358 font-size: 42rpx;
359 font-weight: 400;
360 line-height: 1;
361 }
362
363 .logout-area { 356 .logout-area {
364 position: fixed; 357 position: fixed;
365 left: 0; 358 left: 0;
......
...@@ -67,129 +67,6 @@ ...@@ -67,129 +67,6 @@
67 @scrolltolower="loadMore" 67 @scrolltolower="loadMore"
68 > 68 >
69 <view class="order-list"> 69 <view class="order-list">
70 <!-- 有数据才循环 -->
71 <!-- <view v-if="list.length > 0">-->
72 <!-- <view-->
73 <!-- v-for="(item, index) in list"-->
74 <!-- :key="index"-->
75 <!-- class="order-card"-->
76 <!-- @click="goToDetail(item)"-->
77 <!-- >-->
78 <!-- &lt;!&ndash; 订单头部:日期 + 状态 &ndash;&gt;-->
79 <!-- <view class="card-header">-->
80 <!-- <view class="date">-->
81 <!-- &lt;!&ndash; <image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" style="width:30rpx;height:30rpx;"/> &ndash;&gt;-->
82 <!-- &lt;!&ndash; &ndash;&gt;-->
83 <!-- <text class="value text-primary">{{ item.wfCode || '——' }}</text>-->
84 <!-- </view>-->
85 <!-- <view class="status-tags">-->
86 <!-- &lt;!&ndash; <view-->
87 <!-- class="status-tag"-->
88 <!-- :class="{-->
89 <!-- success: item.payStatus == 1,-->
90 <!-- danger: item.payStatus == 2,-->
91 <!-- pending: item.payStatus == 0-->
92 <!-- }"-->
93 <!-- >-->
94 <!-- {{ getStatusText(item.payStatus) }}-->
95 <!-- </view> &ndash;&gt;-->
96 <!-- <view-->
97 <!-- :class="{-->
98 <!-- 'status-wait': item.auditStatus == 0,-->
99 <!-- 'status-pending': item.auditStatus == 1,-->
100 <!-- 'status-success': item.auditStatus == 2,-->
101 <!-- 'status-danger': item.auditStatus == 3-->
102 <!-- }"-->
103 <!-- class="status-tag ml-10"-->
104 <!-- >-->
105 <!-- {{ getAuditStatusText(item.auditStatus) }}-->
106 <!-- </view>-->
107 <!-- </view>-->
108 <!-- </view>-->
109 <!-- -->
110 <!-- &lt;!&ndash; 订单编号、缴费编号 &ndash;&gt;-->
111 <!-- <view class="info-row">-->
112 <!-- <text class="label">订单编号:</text>-->
113 <!-- <text class="value">{{ item.tradeNo || '——' }}</text>-->
114 <!-- </view>-->
115 <!-- <view v-if="item.orderName" class="info-row">-->
116 <!-- <text class="label">缴费名称:</text>-->
117 <!-- <text class="value">{{ item.orderName || '' }}</text>-->
118 <!-- </view>-->
119 <!-- &lt;!&ndash; <view class="info-row">-->
120 <!-- <text class="label">缴费编号:</text>-->
121 <!-- -->
122 <!-- </view> &ndash;&gt;-->
123 <!-- -->
124 <!-- &lt;!&ndash; 核心:前2tab仅展示缴费年限,后2tab仅展示人数合计 &ndash;&gt;-->
125 <!-- <view v-if="item.content" class="info-section flex f-j-s">-->
126 <!-- &lt;!&ndash; 个人/单位会员(仅缴费年限) &ndash;&gt;-->
127 <!-- <view v-if="currentTab === '0' || currentTab === '1'" class="single-info">-->
128 <!-- <view class="label">缴费年限:</view>-->
129 <!-- <view class="value">{{ item.content.yearCount || 0 }}</view>-->
130 <!-- </view>-->
131 <!-- &lt;!&ndash; 级位/段位考试(仅人数合计) &ndash;&gt;-->
132 <!-- <view v-if="currentTab === '2' || currentTab === '3' || currentTab === '4'" class="single-info">-->
133 <!-- <view class="label">人数合计</view>-->
134 <!-- <view class="value">{{ item.content.personCount || 0 }}</view>-->
135 <!-- </view>-->
136 <!-- <view class="line"></view>-->
137 <!-- <view class="single-info">-->
138 <!-- <view class="label">订单状态</view>-->
139 <!-- <view :class="item.effect == 1 ? 'text-success' : 'text-warning'" class="value">-->
140 <!-- {{ item.effect == 1 ? '已生效' : '未生效' }}-->
141 <!-- </view>-->
142 <!-- </view>-->
143 <!-- <view class="line"></view>-->
144 <!-- <view class="single-info">-->
145 <!-- <view class="label">缴费状态</view>-->
146 <!-- <view-->
147 <!-- :class="{-->
148 <!-- 'text-primary': item.payStatus == 0,-->
149 <!-- 'text-success': item.payStatus == 1,-->
150 <!-- 'text-danger': item.payStatus == 2-->
151 <!-- }"-->
152 <!-- class="value"-->
153 <!-- >-->
154 <!-- {{ item.payStatus == 0 ? '待缴费' : item.payStatus == 1 ? '缴费成功' : '订单取消' }}-->
155 <!-- </view>-->
156 <!-- </view>-->
157 <!-- </view>-->
158 <!-- -->
159 <!-- &lt;!&ndash; 费用合计 + 缴费方式 &ndash;&gt;-->
160 <!-- <view class="price-section">-->
161 <!-- <view class="price-row">-->
162 <!-- <text class="price-label">费用合计</text>-->
163 <!-- <text class="price-value">¥{{ (Number(item.price) || 0).toFixed(2) }}</text>-->
164 <!-- </view>-->
165 <!-- <view class="price-row">-->
166 <!-- <text class="price-label">缴费方式</text>-->
167 <!-- <text class="price-value">{{ item.ziZhangBu ? '对公转账' : '民生付' }}</text>-->
168 <!-- </view>-->
169 <!-- </view>-->
170 <!-- -->
171 <!-- &lt;!&ndash; 按钮组:靠右紧凑展示 &ndash;&gt;-->
172 <!-- <view class="btn-group">-->
173 <!-- &lt;!&ndash; 已缴费:申请开票/已开票(需要审核通过才能开票) &ndash;&gt;-->
174 <!-- <template v-if="item.payStatus == 1 && item.invoiceStatus != 1&& item.auditStatus == 2 &&item.price>0">-->
175 <!-- <button :disabled="item.invoiceStatus === 1" class="btn btn-view-invoice" @click="makeInvoiceFN(item)">-->
176 <!-- 开票-->
177 <!-- </button>-->
178 <!-- </template>-->
179 <!-- &lt;!&ndash; 已开票:查看发票 &ndash;&gt;-->
180 <!-- <template v-if="item.invoiceStatus == 1">-->
181 <!-- <button class="btn btn-invoice" @click.stop="viewInvoice(item)">查看发票</button>-->
182 <!-- </template>-->
183 <!-- &lt;!&ndash; 未缴费:去缴费 + 取消订单 &ndash;&gt;-->
184 <!-- &lt;!&ndash; <template v-if="item.payStatus == 0">-->
185 <!-- <button class="btn btn-cancel" @click="handleCancel(item)">取消订单</button>-->
186 <!-- <button class="btn btn-pay" @click="handlePay(item)">去缴费</button>-->
187 <!-- </template> &ndash;&gt;-->
188 <!-- </view>-->
189 <!-- </view>-->
190 <!-- </view>-->
191
192 <!-- 有数据才循环 -->
193 <view v-if="list.length > 0"> 70 <view v-if="list.length > 0">
194 <view 71 <view
195 v-for="(item, index) in list" 72 v-for="(item, index) in list"
...@@ -201,8 +78,9 @@ ...@@ -201,8 +78,9 @@
201 <view class="card-header"> 78 <view class="card-header">
202 <view class="date"> 79 <view class="date">
203 <view class="data-header"> 80 <view class="data-header">
204 <text class="member-label">{{ getOrderLabel(item) }}·</text> 81 <text class="member-label">{{ getOrderLabel(item) }} ·</text>
205 <text class="value ">{{ item.wfCode || '——' }} · {{ item.payType == '3' ? '对公转账' : '民生付' }}</text> 82 <text class="value ml10">{{ item.wfCode || '——' }} ·</text>
83 <text class="pay-type ml10"> {{ item.payType == '3' ? '对公转账' : '民生付' }}</text>
206 </view> 84 </view>
207 <text :class="{ 85 <text :class="{
208 'status-wait': item.payStatus == 3, 86 'status-wait': item.payStatus == 3,
...@@ -532,14 +410,18 @@ const isPersonalOrder = (item) => getRowType(item) === '0' ...@@ -532,14 +410,18 @@ const isPersonalOrder = (item) => getRowType(item) === '0'
532 410
533 const isGroupOrder = (item) => getRowType(item) === '1' 411 const isGroupOrder = (item) => getRowType(item) === '1'
534 412
413 const isLevelOrder = (item) => ['2', '3', '4'].includes(getRowType(item))
414
535 const isPayDisabled = (item) => { 415 const isPayDisabled = (item) => {
536 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '9' 416 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '9'
417 if (isLevelOrder(item)) return String(item?.auditStatus) !== '9'
537 if (String(item?.payStatus) !== '0') return true 418 if (String(item?.payStatus) !== '0') return true
538 return String(item?.auditStatus) !== '0' 419 return String(item?.auditStatus) !== '0'
539 } 420 }
540 421
541 const isCancelDisabled = (item) => { 422 const isCancelDisabled = (item) => {
542 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '9' 423 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '9'
424 if (isLevelOrder(item)) return String(item?.auditStatus) !== '9'
543 if (String(item?.payStatus) !== '0') return true 425 if (String(item?.payStatus) !== '0') return true
544 return false 426 return false
545 } 427 }
...@@ -549,6 +431,7 @@ const hasInvoice = (item) => String(item?.invoiceStatus) === '1' ...@@ -549,6 +431,7 @@ const hasInvoice = (item) => String(item?.invoiceStatus) === '1'
549 const isInvoiceDisabled = (item) => { 431 const isInvoiceDisabled = (item) => {
550 if (hasInvoice(item)) return true 432 if (hasInvoice(item)) return true
551 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '2' 433 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '2'
434 if (isLevelOrder(item)) return String(item?.payStatus) !== '1' || String(item?.auditStatus) !== '2' || Number(item?.price || 0) <= 0
552 return String(item?.payStatus) !== '1' || String(item?.auditStatus) !== '2' || Number(item?.price || 0) <= 0 435 return String(item?.payStatus) !== '1' || String(item?.auditStatus) !== '2' || Number(item?.price || 0) <= 0
553 } 436 }
554 437
...@@ -665,7 +548,7 @@ const closeDelPopup = () => { ...@@ -665,7 +548,7 @@ const closeDelPopup = () => {
665 currentOrder.value = null; 548 currentOrder.value = null;
666 }; 549 };
667 550
668 // 去支付:个人会员订单走 payOrder,再次支付携带 common/order 的 id;单位会员订单走 goPay。 551 // 去支付:个人会员订单走 payOrder,再次支付携带 common/order 的 id;单位会员订单走 goPay;级位/段位/越段考试走 paymentDetail
669 const handlePay = async (item) => { 552 const handlePay = async (item) => {
670 if (isPayDisabled(item)) return; 553 if (isPayDisabled(item)) return;
671 const payInfoQuery = buildPayInfoQuery(item) 554 const payInfoQuery = buildPayInfoQuery(item)
...@@ -685,7 +568,10 @@ const handlePay = async (item) => { ...@@ -685,7 +568,10 @@ const handlePay = async (item) => {
685 return; 568 return;
686 } 569 }
687 570
688 uni.navigateTo({url: `/pages/rank/applyDetail?examId=${item.sourceId || item.id}&type=${getRowType(item)}`}); 571 // 级位/段位/越段考试 - 跳转到支付详情页(再次支付)
572 uni.navigateTo({
573 url: `/level/paymentDetail?examId=${item.sourceId || item.id}&orderId=${item.id}`
574 });
689 }; 575 };
690 576
691 // 申请开票 577 // 申请开票
...@@ -1523,11 +1409,12 @@ const onTabSwitch = (index, url) => { ...@@ -1523,11 +1409,12 @@ const onTabSwitch = (index, url) => {
1523 overflow: hidden; 1409 overflow: hidden;
1524 white-space: nowrap; 1410 white-space: nowrap;
1525 text-overflow: ellipsis; 1411 text-overflow: ellipsis;
1412 }
1526 1413
1527 .tradeNo { 1414 .pay-type {
1528 color: #999; 1415 color: #999;
1529 font-size: 24rpx; 1416 font-size: 26rpx;
1530 } 1417 font-weight: normal;
1531 } 1418 }
1532 1419
1533 .date-text { 1420 .date-text {
......
...@@ -402,6 +402,7 @@ function checkDialogs() { ...@@ -402,6 +402,7 @@ function checkDialogs() {
402 } 402 }
403 403
404 async function checkExamPointDialog() { 404 async function checkExamPointDialog() {
405 console.log('checkExamPointDialog', app.globalData.userInfo.hintFlag )
405 const [err, res] = await to(api.getMyRecentExam()) 406 const [err, res] = await to(api.getMyRecentExam())
406 if (err || !res?.data) return 407 if (err || !res?.data) return
407 const status = res.data?.auditStatus 408 const status = res.data?.auditStatus
...@@ -409,6 +410,7 @@ async function checkExamPointDialog() { ...@@ -409,6 +410,7 @@ async function checkExamPointDialog() {
409 app.globalData.memberInfo?.activeStatus == 1 && 410 app.globalData.memberInfo?.activeStatus == 1 &&
410 app.globalData.authenticationStatus == 2 && 411 app.globalData.authenticationStatus == 2 &&
411 app.globalData.deptType == 6 && 412 app.globalData.deptType == 6 &&
413 app.globalData.userInfo.hintFlag == 1 &&
412 app.globalData.memberInfo?.isPoints == 1) { 414 app.globalData.memberInfo?.isPoints == 1) {
413 examPointPopup.value?.open() 415 examPointPopup.value?.open()
414 } 416 }
......
...@@ -20,102 +20,57 @@ ...@@ -20,102 +20,57 @@
20 :enhanced="true" 20 :enhanced="true"
21 :show-scrollbar="false" 21 :show-scrollbar="false"
22 :scroll-enabled="!isPopupOpen" 22 :scroll-enabled="!isPopupOpen"
23 lower-threshold="200"
24 @scrolltolower="loadMore"
23 > 25 >
24 <view class="order-list"> 26 <view class="order-list">
25 <view v-if="list.length > 0"> 27 <view v-if="list.length > 0">
26 <view 28 <view
27 v-for="(item, index) in list" 29 v-for="(item, index) in list"
28 :key="index" 30 :key="index"
29 class="order-card" @click="goToDetail(item)" 31 class="order-card-new"
32 @click="goToDetail(item)"
30 > 33 >
31 <!-- 订单头部:日期 + 审核状态 --> 34 <!-- 订单头部:类型 + 缴费编号 + 状态 -->
32 <view class="card-header"> 35 <view class="card-header">
33 <view class="date"> 36 <view class="date">
34 <text class="value order-no text-primary">{{ item.wfCode || '' }}</text> 37 <view class="data-header">
35 <!-- <image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" v-if="item.payTime" mode="widthFix" style="width:30rpx;height:30rpx;"/> 38 <text class="member-label">{{ getOrderLabel(item) }} ·</text>
36 <text class="date-text" v-if="item.payTime">{{ item.payTime }}</text> --> 39 <text class="value ml10">{{ item.wfCode || '——' }} · </text>
40 <text class="pay-type"> {{ item.payType == '3' ? '对公转账' : '民生付' }}</text>
37 </view> 41 </view>
38 <view 42 <text :class="{
39 class="audit-status-tag" 43 'status-wait': item.payStatus == 3,
40 :class="getAuditStatusClass(item.auditStatus)" 44 'status-pending': item.payStatus == 0,
41 > 45 'status-success': item.payStatus == 1,
42 {{ getAuditStatusText(item.auditStatus) }} 46 'status-danger': item.payStatus == 2
43 </view>
44 </view>
45
46 <!-- 订单编号 -->
47 <view class="info-row">
48 <text class="label">订单编号</text>
49 <text class="value order-no">{{ item.tradeNo || '——' }}</text>
50 </view>
51 <view class="info-row" v-if="item.orderName">
52 <text class="label">缴费名称</text>
53 <text class="value order-no">{{ item.orderName || '——' }}</text>
54 </view>
55
56 <!-- 缴费编号 -->
57 <view class="info-row payment-code-row" v-if="item.payTime">
58 <text class="label">缴费时间</text>
59 <text class="value order-no">{{ item.payTime.slice(0,10) || '' }}</text>
60 <!-- <view class="payment-code" >
61 <text class="code-text">{{ item.payTime || '——' }}</text>
62 </view> -->
63 </view>
64
65 <view class="info-row payment-code-row" >
66 <text class="label">开票状态</text>
67 <text class="value order-no">{{ item.invoiceStatus == 1 ? '已开票' : "未开票"}}</text>
68 </view>
69 <!-- 核心信息区:缴费年限/人数 + 缴费方式 -->
70 <view class="info-section flex f-j-s">
71 <view v-if="currentTab === 0 || currentTab === 1" class="single-info">
72 <view class="label">缴费年限</view>
73 <view class="value">{{ item.content?.yearCount || 0 }}</view>
74 </view>
75 <view v-if="currentTab === 2 || currentTab === 3 || currentTab === 4" class="single-info">
76 <view class="label">人数合计</view>
77 <view class="value">{{ item.content?.personCount || 0 }}</view>
78 </view>
79 <view class="divider"></view>
80 <view class="single-info">
81 <view class="label">缴费方式</view>
82 <view class="value" :class="{ 'b2b-text-disabled': item.payType == '3' && item.payStatus == '2' }">
83 {{ item.payType == '3' ? '对公转账' : '民生付' }}
84 </view>
85 <button
86 v-if="item.payType == '3' && item.payStatus != '2'"
87 class="b2b-btn"
88 @click.stop="getPayWay(item)"
89 >
90 查看
91 </button>
92 </view>
93 <view class="divider"></view>
94 <view class="single-info">
95 <view class="label">缴费状态</view>
96 <view
97 :class="{
98 'text-primary': item.payStatus == 0,
99 'text-success': item.payStatus == 1,
100 'text-danger': item.payStatus == 2
101 }" 47 }"
102 class="value" 48 class="status-tag">{{ getStatusText(item.payStatus) }}
103 > 49 </text>
104 {{ item.payStatus == 0 ? '待缴费' : item.payStatus == 1 ? '缴费成功' : '订单取消' }}
105 </view> 50 </view>
106 </view> 51 </view>
52 <view class="member-time">
53 <view class="label">
54 <text class="star"></text>
55 {{ `${filterTime(item.genTime)}${filterType(item.type)}` }}
56 </view>
57 <view class="price">
58 <view>{{ item.price || '0.00' }}</view>
59 <view v-if="item.type==0" class="person">{{ item.content?.yearCount || 0 }}</view>
60 <view v-if="item.type==1" class="person">{{ item.content?.yearCount || 0 }}</view>
61 <view v-if="item.type==2||item.type==3||item.type==4" class="person">{{ item.content?.personCount || 0 }}</view>
107 </view> 62 </view>
108
109 <!-- 费用合计 -->
110 <view class="total-row">
111 <text class="label">费用合计</text>
112 <text class="amount">¥{{ (Number(item.price) || 0).toFixed(2) }}</text>
113 </view> 63 </view>
64 <!-- <view class="btn-group"><template v-if="hasInvoice(item)">
65 <button class="btn btn-invoice" @click.stop="viewInvoice(item)">查看发票</button>
66 </template>
67 </view> -->
114 </view> 68 </view>
115 </view> 69 </view>
116 70
117 <!-- 空状态 --> 71 <!-- 空状态 -->
118 <view v-else class="empty"> 72 <view v-else class="empty">
73 <image :src="config.baseUrl_api + '/fs/static/nodata.png'" class="empty-img" mode="aspectFit"></image>
119 <text class="empty-text">暂无订单记录</text> 74 <text class="empty-text">暂无订单记录</text>
120 </view> 75 </view>
121 76
...@@ -148,6 +103,46 @@ ...@@ -148,6 +103,46 @@
148 </view> 103 </view>
149 </view> 104 </view>
150 </view> 105 </view>
106
107 <!-- 票据信息弹窗(级位/段位/越段考试) -->
108 <view v-if="showInvoicePopup" class="invoice-popup-mask" @click="closeInvoicePopup">
109 <view class="invoice-popup-content" @click.stop>
110 <view class="invoice-popup-header">
111 <text class="invoice-popup-title">票据信息</text>
112 <view class="invoice-popup-close" @click="closeInvoicePopup"></view>
113 </view>
114 <view class="invoice-popup-body">
115 <view class="invoice-info-list">
116 <view class="invoice-info-row">
117 <view class="invoice-info-label">票据类型</view>
118 <view :class="{ 'vat-type': invoiceData.invoiceType == 2 }" class="invoice-type-badge">
119 {{ invoiceData.invoiceType == 1 ? '普通票据' : '增值税专用票据' }}
120 </view>
121 </view>
122 <view class="invoice-info-row">
123 <text class="invoice-info-label">票据抬头</text>
124 <text class="invoice-info-value">{{ invoiceData.invoiceBuyerName || '—' }}</text>
125 </view>
126 <view v-if="invoiceData.invoiceBuyerTaxno" class="invoice-info-row">
127 <text class="invoice-info-label">纳税人识别号</text>
128 <text class="invoice-info-value">{{ invoiceData.invoiceBuyerTaxno }}</text>
129 </view>
130 <view class="invoice-info-row">
131 <text class="invoice-info-label">接收邮箱</text>
132 <text class="invoice-info-value">{{ invoiceData.invoicePushPhone || '—' }}</text>
133 </view>
134 <view class="invoice-info-row">
135 <text class="invoice-info-label">申请时间</text>
136 <text class="invoice-info-value">{{ invoiceData.invoiceTime || '—' }}</text>
137 </view>
138 <view class="invoice-info-row">
139 <text class="invoice-info-label">票据金额</text>
140 <text class="invoice-info-value">{{ invoiceData.price || '—' }}</text>
141 </view>
142 </view>
143 </view>
144 </view>
145 </view>
151 </view> 146 </view>
152 </template> 147 </template>
153 148
...@@ -186,6 +181,8 @@ const queryParams = reactive({ ...@@ -186,6 +181,8 @@ const queryParams = reactive({
186 const showDelPopup = ref(false); 181 const showDelPopup = ref(false);
187 const showCancelPopup = ref(false); 182 const showCancelPopup = ref(false);
188 const isPopupOpen = ref(false); 183 const isPopupOpen = ref(false);
184 const showInvoicePopup = ref(false);
185 const invoiceData = ref({});
189 186
190 // 弹窗内容 187 // 弹窗内容
191 const delModalContent = ref(''); 188 const delModalContent = ref('');
...@@ -214,6 +211,13 @@ onReachBottom(() => { ...@@ -214,6 +211,13 @@ onReachBottom(() => {
214 initData(); 211 initData();
215 } 212 }
216 }); 213 });
214
215 // 上拉加载更多
216 const loadMore = () => {
217 if (loading.value || !hasMore.value || isPopupOpen.value) return;
218 pageNum.value++;
219 initData();
220 };
217 const getPayWay = (item) => { 221 const getPayWay = (item) => {
218 uni.redirectTo({ 222 uni.redirectTo({
219 url: `/myCenter/transferPay?orderId=${item.id}` 223 url: `/myCenter/transferPay?orderId=${item.id}`
...@@ -253,6 +257,74 @@ const getAuditStatusClass = (status) => { ...@@ -253,6 +257,74 @@ const getAuditStatusClass = (status) => {
253 return map[statusStr] || ''; 257 return map[statusStr] || '';
254 }; 258 };
255 259
260 const getOrderLabel = (item) => {
261 const map = {
262 0: '个人',
263 1: '单位',
264 2: '级位',
265 3: '段位',
266 4: '越段'
267 }
268 return map[item.type] || '订单'
269 }
270
271 const filterTime = (row) => {
272 if (!row) return ''
273 const date = new Date(row)
274 const year = date.getFullYear()
275 const month = String(date.getMonth() + 1).padStart(2, '0')
276 const day = String(date.getDate()).padStart(2, '0')
277 return `${year}年${month}月${day}日`
278 }
279
280 const filterType = (row) => {
281 if (row == 0) return '个人会员缴费办理'
282 if (row == 1) return '单位会员缴费办理'
283 if (row == 2) return '级位考试办理'
284 if (row == 3) return '段位考试办理'
285 if (row == 4) return '越段考试办理'
286 }
287
288 const getRowType = (item) => String(item?.type ?? currentTab.value)
289
290 const isPersonalOrder = (item) => getRowType(item) === '0'
291
292 const isGroupOrder = (item) => getRowType(item) === '1'
293
294 const isLevelOrder = (item) => ['2', '3', '4'].includes(getRowType(item))
295
296 const getStatusText = (status) => {
297 const map = {
298 0: '待缴费',
299 1: '缴费成功',
300 2: '订单取消'
301 };
302 return map[status] || '';
303 };
304
305 const isPayDisabled = (item) => {
306 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '9'
307 if (isLevelOrder(item)) return String(item?.auditStatus) !== '9'
308 if (String(item?.payStatus) !== '0') return true
309 return String(item?.auditStatus) !== '0'
310 }
311
312 const isCancelDisabled = (item) => {
313 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '9'
314 if (isLevelOrder(item)) return String(item?.auditStatus) !== '9'
315 if (String(item?.payStatus) !== '0') return true
316 return false
317 }
318
319 const hasInvoice = (item) => String(item?.invoiceStatus) === '1'
320
321 const isInvoiceDisabled = (item) => {
322 if (hasInvoice(item)) return true
323 if (isPersonalOrder(item)) return String(item?.auditStatus) !== '2'
324 if (isLevelOrder(item)) return String(item?.payStatus) !== '1' || String(item?.auditStatus) !== '2' || Number(item?.price || 0) <= 0
325 return String(item?.payStatus) !== '1' || String(item?.auditStatus) !== '2' || Number(item?.price || 0) <= 0
326 }
327
256 // 数据请求核心方法 328 // 数据请求核心方法
257 const initData = async () => { 329 const initData = async () => {
258 loading.value = true; 330 loading.value = true;
...@@ -320,18 +392,64 @@ const closeDelPopup = () => { ...@@ -320,18 +392,64 @@ const closeDelPopup = () => {
320 392
321 // 去缴费 393 // 去缴费
322 const handlePay = async (item) => { 394 const handlePay = async (item) => {
323 if (item.payStatus !== 0) return; 395 if (isPayDisabled(item)) return;
324 try { 396 if (isPersonalOrder(item)) {
325 await api.goPay({ id: item.id }); 397 const rangeId = item.sourceId || item.rangId || ''
326 uni.navigateTo({ url: `/pages/pay/pay?orderId=${item.id}` }); 398 uni.navigateTo({
327 } catch (e) { 399 url: `/myCenter/payOrder?orderId=${item.id}&rangeId=${rangeId}`
328 uni.showToast({ title: '发起支付失败', icon: 'none' }); 400 });
401 return;
329 } 402 }
403 if (isGroupOrder(item)) {
404 uni.navigateTo({
405 url: `/myCenter/goPay?orderId=${item.id}&renewYear=${item.content?.yearCount || 1}`
406 });
407 return;
408 }
409 // 级位/段位/越段考试 - 跳转到支付详情页(再次支付)
410 uni.navigateTo({
411 url: `/level/paymentDetail?examId=${item.sourceId || item.id}&orderId=${item.id}`
412 });
330 }; 413 };
331 414
332 // 申请开票 415 // 申请开票
333 const makeInvoiceFN = (item) => { 416 const makeInvoiceFN = (item) => {
334 uni.navigateTo({ url: `/pages/invoice/apply?orderId=${item.id}amount=${item.price}` }); 417 const ziZhangBu = item.ziZhangBu ? '&ziZhangBu=1' : '';
418 if (currentTab.value === 0 || currentTab.value === 1) {
419 uni.navigateTo({
420 url: `/pages/invoice/applyFeisui?orderId=${item.id}&amount=${item.price}${ziZhangBu}`
421 });
422 } else {
423 uni.navigateTo({
424 url: `/pages/invoice/apply?orderId=${item.id}&amount=${item.price}${ziZhangBu}`
425 });
426 }
427 };
428
429 // 查看发票
430 const viewInvoice = (item) => {
431 if (item.type === 0 || item.type === '0' || item.type === 1 || item.type === '1') {
432 if (item.invoiceUrl) {
433 const encodedUrl = encodeURIComponent(item.invoiceUrl);
434 uni.navigateTo({
435 url: `/pages/webview/webview?url=${encodedUrl}`
436 });
437 } else {
438 uni.showToast({ title: '暂无发票', icon: 'none' });
439 }
440 return;
441 }
442 // 级位/段位/越段考试显示发票信息弹窗
443 invoiceData.value = {
444 invoiceType: item.invoiceType || 1,
445 invoiceBuyerName: item.invoiceTitle || item.invoiceBuyerName || '—',
446 invoiceBuyerTaxno: item.invoiceTaxno || item.invoiceBuyerTaxno || '',
447 invoicePushPhone: item.invoiceEmail || item.invoicePushPhone || '—',
448 price: item.price || '-',
449 invoiceTime: item.invoiceTime || '—'
450 };
451 showInvoicePopup.value = true;
452 isPopupOpen.value = true;
335 }; 453 };
336 454
337 // 取消订单 455 // 取消订单
...@@ -346,7 +464,7 @@ const handleCancel = (item) => { ...@@ -346,7 +464,7 @@ const handleCancel = (item) => {
346 const confirmCancel = async () => { 464 const confirmCancel = async () => {
347 if (!currentOrder.value) return; 465 if (!currentOrder.value) return;
348 try { 466 try {
349 await api.cancelPay(currentOrder.value.id); 467 await api.cancelOrder(currentOrder.value.id);
350 uni.showToast({ title: '取消成功', icon: 'success' }); 468 uni.showToast({ title: '取消成功', icon: 'success' });
351 pageNum.value = 1; 469 pageNum.value = 1;
352 list.value = []; 470 list.value = [];
...@@ -364,6 +482,12 @@ const closeCancelPopup = () => { ...@@ -364,6 +482,12 @@ const closeCancelPopup = () => {
364 currentOrder.value = null; 482 currentOrder.value = null;
365 }; 483 };
366 484
485 // 关闭发票弹窗
486 const closeInvoicePopup = () => {
487 showInvoicePopup.value = false;
488 isPopupOpen.value = false;
489 };
490
367 // 跳转到详情页 491 // 跳转到详情页
368 const goToDetail = (item) => { 492 const goToDetail = (item) => {
369 const form = encodeURIComponent(JSON.stringify(item)) 493 const form = encodeURIComponent(JSON.stringify(item))
...@@ -386,19 +510,20 @@ const goToDetail = (item) => { ...@@ -386,19 +510,20 @@ const goToDetail = (item) => {
386 510
387 <style lang="scss" scoped> 511 <style lang="scss" scoped>
388 .order-page { 512 .order-page {
389 background: #f5f7fa; 513 background: #ededf0;
390 min-height: 100vh; 514 min-height: 100vh;
391 display: flex; 515 display: flex;
392 flex-direction: column; 516 flex-direction: column;
517 overflow: hidden;
518 padding-bottom: 0;
519 box-sizing: border-box;
393 520
394 &.no-scroll { 521 &.no-scroll {
395 overflow: hidden; 522 overflow: hidden;
396 height: 100vh; 523 height: 100vh;
397 } 524 }
398 } 525 }
399 .link { 526
400 color: #667fee;
401 }
402 // 标签栏样式 527 // 标签栏样式
403 .tab-bar { 528 .tab-bar {
404 display: flex; 529 display: flex;
...@@ -415,8 +540,8 @@ const goToDetail = (item) => { ...@@ -415,8 +540,8 @@ const goToDetail = (item) => {
415 position: relative; 540 position: relative;
416 541
417 &.active { 542 &.active {
418 color: #e4393c; 543 color: #c30d23;
419 font-weight: 500; 544 font-weight: bold;
420 545
421 &::after { 546 &::after {
422 content: ''; 547 content: '';
...@@ -424,9 +549,9 @@ const goToDetail = (item) => { ...@@ -424,9 +549,9 @@ const goToDetail = (item) => {
424 bottom: 0; 549 bottom: 0;
425 left: 50%; 550 left: 50%;
426 transform: translateX(-50%); 551 transform: translateX(-50%);
427 width: 60rpx; 552 width: 72rpx;
428 height: 4rpx; 553 height: 4rpx;
429 background: linear-gradient(90deg, #FF755A, #F51722); 554 background: #c30d23;
430 border-radius: 2rpx; 555 border-radius: 2rpx;
431 } 556 }
432 } 557 }
...@@ -437,200 +562,35 @@ const goToDetail = (item) => { ...@@ -437,200 +562,35 @@ const goToDetail = (item) => {
437 .order-list-scroll { 562 .order-list-scroll {
438 flex: 1; 563 flex: 1;
439 height: 0; 564 height: 0;
565 min-height: 0;
566 overflow: hidden;
567 background: #ededf0;
440 } 568 }
441 569
442 // 订单列表 570 // 订单列表
443 .order-list { 571 .order-list {
444 padding: 20rpx; 572 min-height: 100%;
445 573 box-sizing: border-box;
446 .order-card { 574 padding: 20rpx 24rpx;
447 background: #fff;
448 margin-bottom: 20rpx;
449 padding: 24rpx;
450 border-radius: 16rpx;
451 box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.06);
452 position: relative;
453 overflow: hidden;
454 }
455 }
456
457 // 卡片头部
458 .card-header {
459 display: flex;
460 justify-content: space-between;
461 align-items: center;
462 padding-bottom: 20rpx;
463 // margin-bottom: 20rpx;
464 // border-bottom: 1rpx solid #f0f0f0;
465
466 .date {
467 display: flex;
468 align-items: center;
469 // gap: 8rpx;
470 font-size: 28rpx;
471
472 .date-text {
473 color: #666;
474 }
475 }
476
477 .audit-status-tag {
478 font-size: 24rpx;
479 padding: 6rpx 18rpx;
480 border-radius: 22rpx;
481 font-weight: 500;
482
483 &.audit-success {
484 background: linear-gradient(135deg, #e6f7ef, #d4f5e2);
485 color: #1db024;
486 border: 1rpx solid rgba(82, 196, 26, 0.3);
487 }
488
489 &.audit-danger {
490 background: linear-gradient(135deg, #fff1f0, #ffe5e5);
491 color: #e8341d;
492 border: 1rpx solid rgba(232, 52, 29, 0.3);
493 }
494
495 &.audit-processing {
496 background: linear-gradient(135deg, #e6f3ff, #d4e9ff);
497 color: #1890ff;
498 border: 1rpx solid rgba(24, 144, 255, 0.3);
499 }
500
501 &.audit-pending {
502 background: linear-gradient(135deg, #fff7e6, #fff1cc);
503 color: #faad14;
504 border: 1rpx solid rgba(250, 173, 20, 0.3);
505 }
506 }
507 }
508
509 // 基础信息行
510 .info-row {
511 display: flex;
512 align-items: center;
513 margin-bottom: 16rpx;
514 font-size: 28rpx;
515
516 .label {
517 color: #666;
518 flex-shrink: 0;
519 width: 120rpx;
520 margin-right: 10rpx;
521 }
522
523 .value {
524 color: #333;
525 word-break: break-all;
526
527 &.order-no {
528 font-size: 26rpx;
529 }
530 }
531 }
532
533 // 缴费编号行
534 .payment-code-row {
535 margin-bottom: 20rpx;
536 }
537
538 // 缴费编号 - 醒目可点击
539 .payment-code {
540 display: inline-flex;
541 align-items: center;
542 // transition: all 0.2s ease;
543
544 &:active {
545 opacity: 0.8;
546 transform: scale(0.98);
547 }
548
549 .code-text {
550 font-size: 30rpx;
551 // font-weight: 600;
552 color: #1890ff;
553 // letter-spacing: 1rpx;
554 }
555 }
556
557 // 核心信息区
558 .info-section {
559 background: #f4f9fd;
560 display: flex;
561 align-items: center;
562 justify-content: space-around;
563 margin: 20rpx 0;
564 border-radius: 12rpx;
565 padding: 16rpx 0;
566 }
567
568 .divider {
569 width: 1rpx;
570 height: 60rpx;
571 background: #e5e5e5;
572 }
573
574 .single-info {
575 flex: 1;
576 text-align: center;
577 font-size: 28rpx;
578
579 .label {
580 color: #666;
581 margin-bottom: 8rpx;
582 }
583
584 .value {
585 color: #333;
586 font-weight: 500;
587
588 &.text-primary {
589 color: #597ef7;
590 }
591
592 &.text-success {
593 color: #52c41a;
594 }
595
596 &.text-danger {
597 color: #ff4d4f;
598 }
599 }
600 }
601
602 // 费用合计
603 .total-row {
604 display: flex;
605 justify-content: space-between;
606 align-items: center;
607 padding-top: 10rpx;
608 // border-top: 1rpx solid #f0f0f0;
609 font-size: 28rpx;
610
611 .label {
612 color: #333;
613 font-weight: 500;
614 }
615
616 .amount {
617 color: #e8341d;
618 font-weight: 700;
619 font-size: 36rpx;
620 letter-spacing: 1rpx;
621 }
622 } 575 }
623 576
624 // 空状态 577 // 空状态
625 .empty { 578 .empty {
626 display: flex; 579 display: flex;
580 flex-direction: column;
627 justify-content: center; 581 justify-content: center;
628 align-items: center; 582 align-items: center;
629 padding: 120rpx 0; 583 padding: 120rpx 0;
630 584
585 .empty-img {
586 width: 300rpx;
587 height: 300rpx;
588 }
589
631 .empty-text { 590 .empty-text {
632 color: #666; 591 color: #666;
633 font-size: 28rpx; 592 font-size: 28rpx;
593 margin-top: 20rpx;
634 } 594 }
635 } 595 }
636 596
...@@ -638,29 +598,10 @@ const goToDetail = (item) => { ...@@ -638,29 +598,10 @@ const goToDetail = (item) => {
638 .loading-tip, .no-more { 598 .loading-tip, .no-more {
639 text-align: center; 599 text-align: center;
640 padding: 20rpx 0; 600 padding: 20rpx 0;
641 color: #666; 601 color: #999;
642 font-size: 26rpx; 602 font-size: 26rpx;
643 } 603 }
644 604
645 // 对公转账按钮禁用样式
646 .b2b-btn {
647 background: transparent;
648 border: none;
649 padding: 0;
650 font-size: 24rpx;
651 color: #1890ff;
652 line-height: 1;
653 margin-left: 8rpx;
654
655 &::after {
656 border: none;
657 }
658 }
659
660 .b2b-text-disabled {
661 color: #bbb;
662 }
663
664 // 弹窗遮罩层 605 // 弹窗遮罩层
665 .popup-mask { 606 .popup-mask {
666 position: fixed; 607 position: fixed;
...@@ -740,4 +681,268 @@ const goToDetail = (item) => { ...@@ -740,4 +681,268 @@ const goToDetail = (item) => {
740 border: none; 681 border: none;
741 } 682 }
742 } 683 }
684
685 // 发票弹窗样式
686 .invoice-popup-mask {
687 position: fixed;
688 top: 0;
689 left: 0;
690 right: 0;
691 bottom: 0;
692 background-color: rgba(0, 0, 0, 0.5);
693 display: flex;
694 align-items: center;
695 justify-content: center;
696 z-index: 999;
697 }
698
699 .invoice-popup-content {
700 width: 600rpx;
701 background: #fff;
702 border-radius: 20rpx;
703 overflow: hidden;
704 box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.2);
705 }
706
707 .invoice-popup-header {
708 display: flex;
709 justify-content: space-between;
710 align-items: center;
711 padding: 30rpx;
712 background: linear-gradient(135deg, #AD181F 0%, #E4393C 100%);
713
714 .invoice-popup-title {
715 font-size: 32rpx;
716 font-weight: 600;
717 color: #fff;
718 }
719
720 .invoice-popup-close {
721 width: 44rpx;
722 height: 44rpx;
723 display: flex;
724 align-items: center;
725 justify-content: center;
726 font-size: 28rpx;
727 color: rgba(255, 255, 255, 0.8);
728 }
729 }
730
731 .invoice-popup-body {
732 padding: 30rpx;
733 }
734
735 .invoice-type-badge {
736 display: inline-flex;
737 align-items: center;
738 padding: 8rpx 24rpx;
739 background: linear-gradient(135deg, #FF755A 0%, #F51722 100%);
740 color: #fff;
741 border-radius: 30rpx;
742 font-size: 24rpx;
743 font-weight: 500;
744
745 &.vat-type {
746 background: linear-gradient(135deg, #6aaaf2 0%, #178cd7 100%);
747 }
748 }
749
750 .invoice-info-list {
751 .invoice-info-row {
752 display: flex;
753 justify-content: space-between;
754 align-items: flex-start;
755 padding: 24rpx 0;
756 border-bottom: 1rpx dashed #eee;
757
758 &:last-child {
759 border-bottom: none;
760 }
761
762 .invoice-info-label {
763 font-size: 26rpx;
764 color: #999;
765 flex-shrink: 0;
766 }
767
768 .invoice-info-value {
769 font-size: 26rpx;
770 color: #333;
771 text-align: right;
772 word-break: break-all;
773 max-width: 340rpx;
774 }
775 }
776 }
777
778 // 新订单卡片样式 (与 daoGuanOrder 一致)
779 .order-card-new {
780 background: #fff;
781 margin-bottom: 22rpx;
782 padding: 22rpx 18rpx 18rpx;
783 box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
784 border-radius: 18rpx;
785 display: flex;
786 flex-direction: column;
787
788 .card-header {
789 display: flex;
790 justify-content: space-between;
791 align-items: center;
792 padding-bottom: 10rpx;
793
794 .date {
795 width: 100%;
796 display: flex;
797 align-items: center;
798 justify-content: space-between;
799 gap: 8rpx;
800 font-size: 26rpx;
801
802 .data-header {
803 display: flex;
804 }
805
806 .member-label {
807 color: #c30d23;
808 font-size: 28rpx;
809 font-weight: bold;
810 }
811
812 .value {
813 color: #000;
814 font-size: 27rpx;
815 font-weight: bold;
816 max-width: 460rpx;
817 overflow: hidden;
818 white-space: nowrap;
819 text-overflow: ellipsis;
820 }
821
822 .pay-type {
823 color: #999;
824 font-size: 26rpx;
825 font-weight: normal;
826 margin-left: 10rpx;
827 }
828
829 .status-tag {
830 font-size: 24rpx;
831 color: #999;
832
833 &.status-wait {
834 color: #597ef7;
835 }
836
837 &.status-pending {
838 color: #faad14;
839 }
840
841 &.status-success {
842 color: #52c41a;
843 }
844
845 &.status-danger {
846 color: #ff4d4f;
847 }
848 }
849 }
850 }
851
852 .member-time {
853 width: 100%;
854 display: flex;
855 justify-content: space-between;
856 padding-bottom: 4rpx;
857
858 .label {
859 max-width: 480rpx;
860 color: #555;
861 font-size: 26rpx;
862 font-weight: 700;
863 line-height: 1.4;
864
865 .star {
866 color: #777;
867 font-size: 26rpx;
868 }
869 }
870
871 .price {
872 min-width: 130rpx;
873 color: #333;
874 font-size: 26rpx;
875 font-weight: 500;
876 text-align: right;
877
878 .person {
879 font-size: 24rpx;
880 color: #999;
881 text-align: right;
882 }
883 }
884 }
885 }
886
887 // 按钮组
888 .btn-group {
889 display: flex;
890 justify-content: flex-end;
891 align-items: center;
892 gap: 16rpx;
893 width: 100%;
894 margin-top: 16rpx;
895 flex-wrap: wrap;
896
897 .btn {
898 width: 140rpx;
899 height: 48rpx;
900 line-height: 48rpx;
901 padding: 0;
902 border-radius: 10rpx;
903 font-size: 24rpx;
904 white-space: nowrap;
905 font-weight: bold;
906 border: none;
907 background: transparent;
908 text-align: center;
909 margin: 0;
910
911 &::after {
912 border: none;
913 display: none;
914 }
915
916 &.btn-invoice {
917 background: #fff;
918 color: #c30d23;
919 border: 1rpx solid #c30d23;
920 }
921
922 &.btn-view-invoice {
923 color: #c30d23;
924 border: 1rpx solid #c30d23;
925 }
926
927 &.btn-cancel {
928 background: #fff;
929 color: #666;
930 border: 1rpx solid #ccc;
931 }
932
933 &.btn-pay {
934 color: #c30d23;
935 border: 1rpx solid #c30d23;
936 }
937
938 &.disabled,
939 &[disabled] {
940 background: #f5f5f5 !important;
941 color: #b8b8b8 !important;
942 border: 1rpx solid #e1e1e1 !important;
943 opacity: 1;
944 pointer-events: none;
945 }
946 }
947 }
743 </style> 948 </style>
...\ No newline at end of file ...\ No newline at end of file
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!