订单
Showing
7 changed files
with
598 additions
and
569 deletions
| ... | @@ -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 | <!-- <!– 订单头部:日期 + 状态 –>--> | ||
| 52 | <!-- <view class="card-header">--> | ||
| 53 | <!-- <view class="date">--> | ||
| 54 | <!-- <!– <image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" style="width:30rpx;height:30rpx;"/> –>--> | ||
| 55 | <!-- <!– –>--> | ||
| 56 | <!-- <text class="value text-primary">{{ item.wfCode || '——' }}</text>--> | ||
| 57 | <!-- </view>--> | ||
| 58 | <!-- <view class="status-tags">--> | ||
| 59 | <!-- <!– <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> –>--> | ||
| 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 | <!-- <!– 订单编号、缴费编号 –>--> | ||
| 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 | <!-- <!– <view class="info-row">--> | ||
| 93 | <!-- <text class="label">缴费编号:</text>--> | ||
| 94 | <!-- --> | ||
| 95 | <!-- </view> –>--> | ||
| 96 | <!-- --> | ||
| 97 | <!-- <!– 核心:前2tab仅展示缴费年限,后2tab仅展示人数合计 –>--> | ||
| 98 | <!-- <view v-if="item.content" class="info-section flex f-j-s">--> | ||
| 99 | <!-- <!– 个人/单位会员(仅缴费年限) –>--> | ||
| 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 | <!-- <!– 级位/段位考试(仅人数合计) –>--> | ||
| 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 | <!-- <!– 费用合计 + 缴费方式 –>--> | ||
| 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 | <!-- <!– 按钮组:靠右紧凑展示 –>--> | ||
| 145 | <!-- <view class="btn-group">--> | ||
| 146 | <!-- <!– 已缴费:申请开票/已开票(需要审核通过才能开票) –>--> | ||
| 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 | <!-- <!– 已开票:查看发票 –>--> | ||
| 153 | <!-- <template v-if="item.invoiceStatus == 1">--> | ||
| 154 | <!-- <button class="btn btn-invoice" @click.stop="viewInvoice(item)">查看发票</button>--> | ||
| 155 | <!-- </template>--> | ||
| 156 | <!-- <!– 未缴费:去缴费 + 取消订单 –>--> | ||
| 157 | <!-- <!– <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> –>--> | ||
| 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 | <!-- <!– 订单头部:日期 + 状态 –>--> | ||
| 79 | <!-- <view class="card-header">--> | ||
| 80 | <!-- <view class="date">--> | ||
| 81 | <!-- <!– <image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" style="width:30rpx;height:30rpx;"/> –>--> | ||
| 82 | <!-- <!– –>--> | ||
| 83 | <!-- <text class="value text-primary">{{ item.wfCode || '——' }}</text>--> | ||
| 84 | <!-- </view>--> | ||
| 85 | <!-- <view class="status-tags">--> | ||
| 86 | <!-- <!– <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> –>--> | ||
| 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 | <!-- <!– 订单编号、缴费编号 –>--> | ||
| 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 | <!-- <!– <view class="info-row">--> | ||
| 120 | <!-- <text class="label">缴费编号:</text>--> | ||
| 121 | <!-- --> | ||
| 122 | <!-- </view> –>--> | ||
| 123 | <!-- --> | ||
| 124 | <!-- <!– 核心:前2tab仅展示缴费年限,后2tab仅展示人数合计 –>--> | ||
| 125 | <!-- <view v-if="item.content" class="info-section flex f-j-s">--> | ||
| 126 | <!-- <!– 个人/单位会员(仅缴费年限) –>--> | ||
| 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 | <!-- <!– 级位/段位考试(仅人数合计) –>--> | ||
| 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 | <!-- <!– 费用合计 + 缴费方式 –>--> | ||
| 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 | <!-- <!– 按钮组:靠右紧凑展示 –>--> | ||
| 172 | <!-- <view class="btn-group">--> | ||
| 173 | <!-- <!– 已缴费:申请开票/已开票(需要审核通过才能开票) –>--> | ||
| 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 | <!-- <!– 已开票:查看发票 –>--> | ||
| 180 | <!-- <template v-if="item.invoiceStatus == 1">--> | ||
| 181 | <!-- <button class="btn btn-invoice" @click.stop="viewInvoice(item)">查看发票</button>--> | ||
| 182 | <!-- </template>--> | ||
| 183 | <!-- <!– 未缴费:去缴费 + 取消订单 –>--> | ||
| 184 | <!-- <!– <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> –>--> | ||
| 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 | ... | ... |
-
Please register or sign in to post a comment