bbc048f7 by lttnew
2 parents 322dceef b9272f18
...@@ -930,13 +930,14 @@ export function auditJi(data) { ...@@ -930,13 +930,14 @@ export function auditJi(data) {
930 if (data.reason && data.reason.trim() !== '') { 930 if (data.reason && data.reason.trim() !== '') {
931 url += `&reason=${data.reason}`; 931 url += `&reason=${data.reason}`;
932 } 932 }
933 933
934 return request({ 934 return request({
935 url: url, 935 url: url,
936 method: 'post', 936 method: 'post',
937 params: data 937 params: data
938 }) 938 })
939 } 939 }
940
940 export function auditDuanExam(data) { 941 export function auditDuanExam(data) {
941 // 基础 URL 942 // 基础 URL
942 let url = `/exam/info/auditDuanExam/${data.ids}?flag=${data.flag}&ids=${data.ids}`; 943 let url = `/exam/info/auditDuanExam/${data.ids}?flag=${data.flag}&ids=${data.ids}`;
...@@ -945,13 +946,14 @@ export function auditDuanExam(data) { ...@@ -945,13 +946,14 @@ export function auditDuanExam(data) {
945 if (data.reason && data.reason.trim() !== '') { 946 if (data.reason && data.reason.trim() !== '') {
946 url += `&reason=${data.reason}`; 947 url += `&reason=${data.reason}`;
947 } 948 }
948 949
949 return request({ 950 return request({
950 url: url, 951 url: url,
951 method: 'post', 952 method: 'post',
952 params: data 953 params: data
953 }) 954 })
954 } 955 }
956
955 export function auditDuanScore(data) { 957 export function auditDuanScore(data) {
956 // 基础 URL 958 // 基础 URL
957 let url = `/exam/info/auditDuanScore/${data.ids}?flag=${data.flag}&ids=${data.ids}`; 959 let url = `/exam/info/auditDuanScore/${data.ids}?flag=${data.flag}&ids=${data.ids}`;
...@@ -960,7 +962,7 @@ export function auditDuanScore(data) { ...@@ -960,7 +962,7 @@ export function auditDuanScore(data) {
960 if (data.reason && data.reason.trim() !== '') { 962 if (data.reason && data.reason.trim() !== '') {
961 url += `&reason=${data.reason}`; 963 url += `&reason=${data.reason}`;
962 } 964 }
963 965
964 return request({ 966 return request({
965 url: url, 967 url: url,
966 method: 'post', 968 method: 'post',
...@@ -1367,6 +1369,13 @@ export function changeLevelAudit(data) { ...@@ -1367,6 +1369,13 @@ export function changeLevelAudit(data) {
1367 }) 1369 })
1368 } 1370 }
1369 1371
1372 export function changeLevelShenAudit(data) {
1373 return request({
1374 url: `/person/levelModRange/shenAudit/${data.ids}?flag=${data.flag}&reason=${data.reason}`,
1375 method: 'post'
1376 })
1377 }
1378
1370 export function changeLevelWithDraw(data) { 1379 export function changeLevelWithDraw(data) {
1371 return request({ 1380 return request({
1372 url: `/person/levelModRange/withDraw/${data}`, 1381 url: `/person/levelModRange/withDraw/${data}`,
......
1 // dev 1 // dev
2 const baseUrl_api = 'http://192.168.1.137:8787' 2 // const baseUrl_api = 'http://192.168.1.137:8787'
3 // const baseUrl_api = 'http://tk001.wxjylt.com/stage-api' 3 const baseUrl_api = 'http://tk001.wxjylt.com/stage-api'
4 const loginImage_api = 'http://tk001.wxjylt.com/stage-api' 4 const loginImage_api = 'http://tk001.wxjylt.com/stage-api'
5 const payUrl = 'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do' 5 const payUrl = 'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do'
6 6
......
...@@ -94,11 +94,11 @@ onLoad((option) => { ...@@ -94,11 +94,11 @@ onLoad((option) => {
94 }) 94 })
95 } 95 }
96 }) 96 })
97
97 onShow(() => { 98 onShow(() => {
98 if (app.globalData.isLogin) { 99 if (app.globalData.isLogin) {
99 init() 100 init()
100 } else { 101 } else {
101
102 app.firstLoadCallback = () => { 102 app.firstLoadCallback = () => {
103 init() 103 init()
104 }; 104 };
......
...@@ -58,6 +58,10 @@ ...@@ -58,6 +58,10 @@
58 <image :src="config.baseUrl_api+'/fs/static/icon/3.png'"/> 58 <image :src="config.baseUrl_api+'/fs/static/icon/3.png'"/>
59 级位考试申请 59 级位考试申请
60 </view> 60 </view>
61 <view @click="goPath('/personalVip/changeLevel')">
62 <image :src="config.baseUrl_api+'/fs/static/icon/26.png'"/>
63 级位变更
64 </view>
61 </view> 65 </view>
62 <view v-if="userType=='3'" class="girdBox"> 66 <view v-if="userType=='3'" class="girdBox">
63 <view @click="goPath('/group/apply/applyList')"> 67 <view @click="goPath('/group/apply/applyList')">
...@@ -133,10 +137,16 @@ ...@@ -133,10 +137,16 @@
133 <!-- <view @click="goPath('/pages/exam/payment?type=1')"> 137 <!-- <view @click="goPath('/pages/exam/payment?type=1')">
134 <image :src="config.baseUrl_api+'/fs/static/icon/10.png'" />考试缴费单 138 <image :src="config.baseUrl_api+'/fs/static/icon/10.png'" />考试缴费单
135 </view> --> 139 </view> -->
136 <view @click="goPath('/personalVip/changeLevel')"> 140 <!-- <view @click="goPath('/personalVip/changeLevel')">-->
141 <!-- <image :src="config.baseUrl_api+'/fs/static/icon/26.png'"/>-->
142 <!-- 级位变更-->
143 <!-- </view>-->
144
145 <view @click="goPath('/personalVip/changeLevelAudit')">
137 <image :src="config.baseUrl_api+'/fs/static/icon/26.png'"/> 146 <image :src="config.baseUrl_api+'/fs/static/icon/26.png'"/>
138 级位变更 147 变更审核
139 </view> 148 </view>
149
140 <view @click="goPath('/level/auditRecord2')"> 150 <view @click="goPath('/level/auditRecord2')">
141 <image :src="config.baseUrl_api+'/fs/static/icon/17.png'"/> 151 <image :src="config.baseUrl_api+'/fs/static/icon/17.png'"/>
142 审核记录 152 审核记录
......
...@@ -20,9 +20,9 @@ ...@@ -20,9 +20,9 @@
20 <view class="card-header"> 20 <view class="card-header">
21 <view class="date"> 21 <view class="date">
22 <!-- <image v-if="item.payTime" :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" --> 22 <!-- <image v-if="item.payTime" :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" -->
23 <!-- style="width:30rpx;height:30rpx;"/> --> 23 <!-- style="width:30rpx;height:30rpx;"/> -->
24 <!-- <text v-if="item.payTime" class="date-text">{{ item.payTime }}</text> --> 24 <!-- <text v-if="item.payTime" class="date-text">{{ item.payTime }}</text> -->
25 <text class="value text-primary" >{{ item.wfCode || '——' }}</text> 25 <text class="value text-primary">{{ item.wfCode || '——' }}</text>
26 </view> 26 </view>
27 <view 27 <view
28 :class="{ 28 :class="{
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
124 <script setup> 124 <script setup>
125 import {ref, reactive, onMounted, computed} from 'vue'; 125 import {ref, reactive, onMounted, computed} from 'vue';
126 import {onReachBottom} from '@dcloudio/uni-app' 126 import {onReachBottom} from '@dcloudio/uni-app'
127 import {useUserStore} from "../store/modules/user"; 127 import {useUserStore} from "@/store/modules/user";
128 import * as api from '@/common/api.js' 128 import * as api from '@/common/api.js'
129 import config from '@/config.js' 129 import config from '@/config.js'
130 130
...@@ -242,7 +242,7 @@ const confirmDel = async () => { ...@@ -242,7 +242,7 @@ const confirmDel = async () => {
242 uni.showToast({title: '删除成功', icon: 'success'}); 242 uni.showToast({title: '删除成功', icon: 'success'});
243 pageNum.value = 1; 243 pageNum.value = 1;
244 list.value = []; 244 list.value = [];
245 initData(); 245 await initData();
246 closeDelPopup(); 246 closeDelPopup();
247 } catch (e) { 247 } catch (e) {
248 uni.showToast({title: '删除失败', icon: 'error'}); 248 uni.showToast({title: '删除失败', icon: 'error'});
...@@ -288,7 +288,7 @@ const confirmCancel = async () => { ...@@ -288,7 +288,7 @@ const confirmCancel = async () => {
288 uni.showToast({title: '取消成功', icon: 'success'}); 288 uni.showToast({title: '取消成功', icon: 'success'});
289 pageNum.value = 1; 289 pageNum.value = 1;
290 list.value = []; 290 list.value = [];
291 initData(); 291 await initData();
292 closeCancelPopup(); 292 closeCancelPopup();
293 } catch (e) { 293 } catch (e) {
294 uni.showToast({title: '取消失败', icon: 'error'}); 294 uni.showToast({title: '取消失败', icon: 'error'});
...@@ -309,7 +309,7 @@ const closeCancelPopup = () => { ...@@ -309,7 +309,7 @@ const closeCancelPopup = () => {
309 height: 100vh; 309 height: 100vh;
310 display: flex; 310 display: flex;
311 flex-direction: column; 311 flex-direction: column;
312 312
313 &.no-scroll { 313 &.no-scroll {
314 overflow: hidden; 314 overflow: hidden;
315 height: 100vh; 315 height: 100vh;
...@@ -326,7 +326,7 @@ const closeCancelPopup = () => { ...@@ -326,7 +326,7 @@ const closeCancelPopup = () => {
326 // 订单列表 326 // 订单列表
327 .order-list { 327 .order-list {
328 padding: 20rpx; 328 padding: 20rpx;
329 329
330 .order-card { 330 .order-card {
331 background: #fff; 331 background: #fff;
332 margin-bottom: 20rpx; 332 margin-bottom: 20rpx;
...@@ -342,35 +342,35 @@ const closeCancelPopup = () => { ...@@ -342,35 +342,35 @@ const closeCancelPopup = () => {
342 justify-content: space-between; 342 justify-content: space-between;
343 align-items: center; 343 align-items: center;
344 padding-bottom: 20rpx; 344 padding-bottom: 20rpx;
345 345
346 .date { 346 .date {
347 display: flex; 347 display: flex;
348 align-items: center; 348 align-items: center;
349 gap: 8rpx; 349 gap: 8rpx;
350 font-size: 26rpx; 350 font-size: 26rpx;
351 351
352 .date-text { 352 .date-text {
353 color: #666; 353 color: #666;
354 } 354 }
355 } 355 }
356 356
357 .status-tag { 357 .status-tag {
358 font-size: 22rpx; 358 font-size: 22rpx;
359 padding: 6rpx 16rpx; 359 padding: 6rpx 16rpx;
360 border-radius: 20rpx; 360 border-radius: 20rpx;
361 361
362 &.success { 362 &.success {
363 background: #e6f7ef; 363 background: #e6f7ef;
364 color: #52c41a; 364 color: #52c41a;
365 border: 1rpx solid rgba(82, 196, 26, 0.3); 365 border: 1rpx solid rgba(82, 196, 26, 0.3);
366 } 366 }
367 367
368 &.danger { 368 &.danger {
369 background: #fff1f0; 369 background: #fff1f0;
370 color: #ff4d4f; 370 color: #ff4d4f;
371 border: 1rpx solid rgba(232, 52, 29, 0.3); 371 border: 1rpx solid rgba(232, 52, 29, 0.3);
372 } 372 }
373 373
374 &.pending { 374 &.pending {
375 background: #fff7e6; 375 background: #fff7e6;
376 color: #faad14; 376 color: #faad14;
...@@ -385,13 +385,13 @@ const closeCancelPopup = () => { ...@@ -385,13 +385,13 @@ const closeCancelPopup = () => {
385 align-items: center; 385 align-items: center;
386 margin-bottom: 20rpx; 386 margin-bottom: 20rpx;
387 font-size: 26rpx; 387 font-size: 26rpx;
388 388
389 .label { 389 .label {
390 color: #999; 390 color: #999;
391 flex-shrink: 0; 391 flex-shrink: 0;
392 width: 140rpx; 392 width: 140rpx;
393 } 393 }
394 394
395 .value { 395 .value {
396 color: #333; 396 color: #333;
397 word-break: break-all; 397 word-break: break-all;
...@@ -417,12 +417,12 @@ const closeCancelPopup = () => { ...@@ -417,12 +417,12 @@ const closeCancelPopup = () => {
417 padding: 16rpx 20rpx; 417 padding: 16rpx 20rpx;
418 border-radius: 8rpx; 418 border-radius: 8rpx;
419 font-size: 26rpx; 419 font-size: 26rpx;
420 420
421 .label { 421 .label {
422 color: #999; 422 color: #999;
423 text-align: center; 423 text-align: center;
424 } 424 }
425 425
426 .value { 426 .value {
427 color: #333; 427 color: #333;
428 font-weight: 500; 428 font-weight: 500;
...@@ -439,11 +439,11 @@ const closeCancelPopup = () => { ...@@ -439,11 +439,11 @@ const closeCancelPopup = () => {
439 margin: 0 0 16rpx; 439 margin: 0 0 16rpx;
440 padding: 8rpx 0; 440 padding: 8rpx 0;
441 font-size: 26rpx; 441 font-size: 26rpx;
442 442
443 .label { 443 .label {
444 color: #333; 444 color: #333;
445 } 445 }
446 446
447 .amount { 447 .amount {
448 color: #EB6100; 448 color: #EB6100;
449 font-weight: 600; 449 font-weight: 600;
...@@ -458,7 +458,7 @@ const closeCancelPopup = () => { ...@@ -458,7 +458,7 @@ const closeCancelPopup = () => {
458 align-items: center; 458 align-items: center;
459 gap: 16rpx; 459 gap: 16rpx;
460 width: 100%; 460 width: 100%;
461 461
462 .btn { 462 .btn {
463 padding: 12rpx 32rpx; 463 padding: 12rpx 32rpx;
464 border-radius: 40rpx; 464 border-radius: 40rpx;
...@@ -470,35 +470,35 @@ const closeCancelPopup = () => { ...@@ -470,35 +470,35 @@ const closeCancelPopup = () => {
470 border: none; 470 border: none;
471 width: 80px; 471 width: 80px;
472 background: transparent; 472 background: transparent;
473 473
474 &::after { 474 &::after {
475 border: none; 475 border: none;
476 } 476 }
477 477
478 &.btn-delete { 478 &.btn-delete {
479 background: #fff; 479 background: #fff;
480 color: #e4393c; 480 color: #e4393c;
481 border: 1rpx solid #e4393c; 481 border: 1rpx solid #e4393c;
482 } 482 }
483 483
484 &.btn-invoice { 484 &.btn-invoice {
485 background: #fff; 485 background: #fff;
486 color: #e4393c; 486 color: #e4393c;
487 border: 1rpx solid #e4393c; 487 border: 1rpx solid #e4393c;
488 } 488 }
489 489
490 &.btn-cancel { 490 &.btn-cancel {
491 background: #fff; 491 background: #fff;
492 color: #666; 492 color: #666;
493 border: 1rpx solid #ccc; 493 border: 1rpx solid #ccc;
494 } 494 }
495 495
496 &.btn-pay { 496 &.btn-pay {
497 background: linear-gradient(90deg, #FF755A, #F51722); 497 background: linear-gradient(90deg, #FF755A, #F51722);
498 color: #fff; 498 color: #fff;
499 border: none; 499 border: none;
500 } 500 }
501 501
502 &:disabled { 502 &:disabled {
503 opacity: 0.6; 503 opacity: 0.6;
504 pointer-events: none; 504 pointer-events: none;
...@@ -571,7 +571,7 @@ const closeCancelPopup = () => { ...@@ -571,7 +571,7 @@ const closeCancelPopup = () => {
571 border: none; 571 border: none;
572 margin: 0; 572 margin: 0;
573 padding: 0; 573 padding: 0;
574 574
575 &::after { 575 &::after {
576 border: none; 576 border: none;
577 } 577 }
...@@ -588,7 +588,7 @@ const closeCancelPopup = () => { ...@@ -588,7 +588,7 @@ const closeCancelPopup = () => {
588 border: none; 588 border: none;
589 margin: 0; 589 margin: 0;
590 padding: 0; 590 padding: 0;
591 591
592 &::after { 592 &::after {
593 border: none; 593 border: none;
594 } 594 }
......
1 <template> 1 <template>
2 <view class="success-container"> 2 <view class="success-container">
3 <!-- 成功图标(渐变圆形+动效) --> 3 <!-- 成功图标(渐变圆形+动效) -->
4 <view class="success-icon"> 4 <view class="success-icon">
5 <view class="icon-circle"> 5 <view class="icon-circle">
6 <text class="check-icon"></text> 6 <text class="check-icon"></text>
7 </view> 7 </view>
8 </view> 8 </view>
9 9
10 <!-- 支付成功标题(动画) --> 10 <!-- 支付成功标题(动画) -->
11 <view class="success-title">支付成功</view> 11 <view class="success-title">支付成功</view>
12 <view class="success-subtitle">支付成功,请等待审核</view> 12 <view class="success-subtitle">支付成功,请等待审核</view>
13 13
14 <!-- 订单信息卡片(带阴影) --> 14 <!-- 订单信息卡片(带阴影) -->
15 <view class="info-card"> 15 <view class="info-card">
16 <view class="info-item"> 16 <view class="info-item">
17 <text class="label">交易流水号</text> 17 <text class="label">交易流水号</text>
18 <text class="value">{{ orderInfo.tradeNo||'--' }}</text> 18 <text class="value">{{ orderInfo.tradeNo || '--' }}</text>
19 </view> 19 </view>
20 <view class="info-item"> 20 <view class="info-item">
21 <text class="label">商户名称</text> 21 <text class="label">商户名称</text>
22 <text class="value">{{ orderInfo.merchantName || '中国跆拳道协会' }}</text> 22 <text class="value">{{ orderInfo.merchantName || '中国跆拳道协会' }}</text>
23 </view> 23 </view>
24 <view class="info-item"> 24 <view class="info-item">
25 <text class="label">订单金额</text> 25 <text class="label">订单金额</text>
26 <text class="value amount">{{ orderInfo.price ? orderInfo.price + '元' : '--' }}</text> 26 <text class="value amount">{{ orderInfo.price ? orderInfo.price + '元' : '--' }}</text>
27 </view> 27 </view>
28 </view> 28 </view>
29 29
30 <!-- 确定按钮(渐变+动效) --> 30 <!-- 确定按钮(渐变+动效) -->
31 <view class="confirm-btn-area"> 31 <view class="confirm-btn-area">
32 <button class="confirm-btn" @click="goBack">确定</button> 32 <button class="confirm-btn" @click="goBack">确定</button>
33 </view> 33 </view>
34 </view> 34 </view>
35 </template> 35 </template>
36 36
37 <script setup> 37 <script setup>
38 import { 38 import {
39 ref 39 ref
40 } from 'vue' 40 } from 'vue'
41 import { 41 import {
42 onLoad 42 onLoad
43 } from '@dcloudio/uni-app' 43 } from '@dcloudio/uni-app'
44 import to from 'await-to-js' 44 import to from 'await-to-js'
45 import * as api from '@/common/api.js' 45 import * as api from '@/common/api.js'
46 46
47 const orderInfo = ref({ 47 const orderInfo = ref({
48 id: '', 48 id: '',
49 tradeNo: '', 49 tradeNo: '',
50 merchantName: '中国跆拳道协会', 50 merchantName: '中国跆拳道协会',
51 price: '' 51 price: ''
52 }) 52 })
53 53
54 const goBack = () => { 54 const goBack = () => {
55 uni.reLaunch({ 55 uni.redirectTo({
56 url: '/login/login' 56 // url: '/login/login'
57 }) 57 url: '/personal/order'
58 } 58 })
59 59 }
60 onLoad(async (option) => { 60
61 if (option.orderId) { 61 onLoad(async (option) => {
62 const [err, res] = await to(api.getOrderInfo(option.orderId)) 62 if (option.orderId) {
63 if (!err && res.data) { 63 const [err, res] = await to(api.getOrderInfo(option.orderId))
64 orderInfo.value = res.data 64 if (!err && res.data) {
65 } else { 65 orderInfo.value = res.data
66 orderInfo.value.id = option.orderId 66 } else {
67 } 67 orderInfo.value.id = option.orderId
68 } 68 }
69 }) 69 }
70 })
70 </script> 71 </script>
71 72
72 <style scoped> 73 <style scoped>
73 /* 全局容器 */
74 .success-container {
75 display: flex;
76 flex-direction: column;
77 align-items: center;
78 padding: 100rpx 40rpx 60rpx;
79 min-height: 100vh;
80 background-color: #f8f9fa;
81 box-sizing: border-box;
82 }
83
84 /* 成功图标容器 */
85 .success-icon {
86 margin-bottom: 40rpx;
87 animation: fadeIn 0.6s ease-out;
88 }
89
90 /* 渐变圆形背景 */
91 .icon-circle {
92 width: 180rpx;
93 height: 180rpx;
94 border-radius: 50%;
95 /* 青绿色渐变 */
96 background: linear-gradient(135deg, #06c1ae, #04a896);
97 display: flex;
98 align-items: center;
99 justify-content: center;
100 box-shadow: 0 8rpx 30rpx rgba(6, 193, 174, 0.3);
101 /* 轻微上浮动效 */
102 animation: scaleIn 0.8s ease-out;
103 }
104
105 /* 对勾图标 */
106 .check-icon {
107 font-size: 90rpx;
108 color: #ffffff;
109 font-weight: bold;
110 }
111
112 /* 支付成功标题 */
113 .success-title {
114 font-size: 48rpx;
115 font-weight: 700;
116 color: #333333;
117 margin-bottom: 12rpx;
118 animation: slideUp 0.6s ease-out;
119 }
120
121 /* 副标题 */
122 .success-subtitle {
123 font-size: 28rpx;
124 color: #666666;
125 margin-bottom: 60rpx;
126 animation: slideUp 0.8s ease-out;
127 }
128
129 /* 订单信息卡片 */
130 .info-card {
131 width: 100%;
132 background: #ffffff;
133 border-radius: 20rpx;
134 padding: 40rpx 30rpx;
135 box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.05);
136 margin-bottom: 80rpx;
137 animation: fadeIn 1s ease-out;
138 }
139
140 /* 单个信息项 */
141 .info-item {
142 display: flex;
143 justify-content: space-between;
144 align-items: center;
145 padding: 24rpx 0;
146 border-bottom: 1rpx solid #f5f5f5;
147 }
148
149 /* 最后一项去掉下划线 */
150 .info-item:last-child {
151 border-bottom: none;
152 }
153
154 /* 标签样式 */
155 .label {
156 font-size: 32rpx;
157 color: #666666;
158 white-space: nowrap;
159 margin-right: 20rpx;
160 flex-shrink: 0;
161 }
162
163 /* 值样式 */
164 .value {
165 font-size: 32rpx;
166 color: #333333;
167 text-align: right;
168 word-break: break-all;
169 word-wrap: break-word;
170 }
171
172 /* 金额特殊样式 */
173 .amount {
174 color: #cd1e27;
175 font-weight: 600;
176 }
177
178 /* 确定按钮区域 */
179 .confirm-btn-area {
180 width: 100%;
181 padding: 0 20rpx;
182 box-sizing: border-box;
183 }
184
185 /* 确定按钮(渐变+动效) */
186 .confirm-btn {
187 width: 100%;
188 height: 90rpx;
189 line-height: 90rpx;
190 /* 按钮渐变背景 */
191 background: #fff;
192 color: #C4121B;
193 font-size: 36rpx;
194 font-weight: 600;
195 border-radius: 45rpx;
196 border: 1px solid #C4121B;
197 animation: slideUp 1s ease-out;
198 /* 禁止默认样式 */
199 position: relative;
200 overflow: hidden;
201 }
202
203 /* 按钮点击反馈 */
204 .confirm-btn::after {
205 border: none;
206 }
207
208 .confirm-btn:active {
209 transform: scale(0.98);
210 box-shadow: 0 4rpx 10rpx rgba(6, 193, 174, 0.2);
211 }
212
213 /* 动画定义 */
214 @keyframes fadeIn {
215 0% {
216 opacity: 0;
217 }
218
219 100% {
220 opacity: 1;
221 }
222 }
223
224 @keyframes scaleIn {
225 0% {
226 transform: scale(0);
227 }
228
229 70% {
230 transform: scale(1.1);
231 }
232
233 100% {
234 transform: scale(1);
235 }
236 }
237
238 @keyframes slideUp {
239 0% {
240 opacity: 0;
241 transform: translateY(30rpx);
242 }
243
244 100% {
245 opacity: 1;
246 transform: translateY(0);
247 }
248 }
249 </style>
...\ No newline at end of file ...\ No newline at end of file
74 /* 全局容器 */
75 .success-container {
76 display: flex;
77 flex-direction: column;
78 align-items: center;
79 padding: 100rpx 40rpx 60rpx;
80 min-height: 100vh;
81 background-color: #f8f9fa;
82 box-sizing: border-box;
83 }
84
85 /* 成功图标容器 */
86 .success-icon {
87 margin-bottom: 40rpx;
88 animation: fadeIn 0.6s ease-out;
89 }
90
91 /* 渐变圆形背景 */
92 .icon-circle {
93 width: 180rpx;
94 height: 180rpx;
95 border-radius: 50%;
96 /* 青绿色渐变 */
97 background: linear-gradient(135deg, #06c1ae, #04a896);
98 display: flex;
99 align-items: center;
100 justify-content: center;
101 box-shadow: 0 8rpx 30rpx rgba(6, 193, 174, 0.3);
102 /* 轻微上浮动效 */
103 animation: scaleIn 0.8s ease-out;
104 }
105
106 /* 对勾图标 */
107 .check-icon {
108 font-size: 90rpx;
109 color: #ffffff;
110 font-weight: bold;
111 }
112
113 /* 支付成功标题 */
114 .success-title {
115 font-size: 48rpx;
116 font-weight: 700;
117 color: #333333;
118 margin-bottom: 12rpx;
119 animation: slideUp 0.6s ease-out;
120 }
121
122 /* 副标题 */
123 .success-subtitle {
124 font-size: 28rpx;
125 color: #666666;
126 margin-bottom: 60rpx;
127 animation: slideUp 0.8s ease-out;
128 }
129
130 /* 订单信息卡片 */
131 .info-card {
132 width: 100%;
133 background: #ffffff;
134 border-radius: 20rpx;
135 padding: 40rpx 30rpx;
136 box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.05);
137 margin-bottom: 80rpx;
138 animation: fadeIn 1s ease-out;
139 }
140
141 /* 单个信息项 */
142 .info-item {
143 display: flex;
144 justify-content: space-between;
145 align-items: center;
146 padding: 24rpx 0;
147 border-bottom: 1rpx solid #f5f5f5;
148 }
149
150 /* 最后一项去掉下划线 */
151 .info-item:last-child {
152 border-bottom: none;
153 }
154
155 /* 标签样式 */
156 .label {
157 font-size: 32rpx;
158 color: #666666;
159 white-space: nowrap;
160 margin-right: 20rpx;
161 flex-shrink: 0;
162 }
163
164 /* 值样式 */
165 .value {
166 font-size: 32rpx;
167 color: #333333;
168 text-align: right;
169 word-break: break-all;
170 word-wrap: break-word;
171 }
172
173 /* 金额特殊样式 */
174 .amount {
175 color: #cd1e27;
176 font-weight: 600;
177 }
178
179 /* 确定按钮区域 */
180 .confirm-btn-area {
181 width: 100%;
182 padding: 0 20rpx;
183 box-sizing: border-box;
184 }
185
186 /* 确定按钮(渐变+动效) */
187 .confirm-btn {
188 width: 100%;
189 height: 90rpx;
190 line-height: 90rpx;
191 /* 按钮渐变背景 */
192 background: #fff;
193 color: #C4121B;
194 font-size: 36rpx;
195 font-weight: 600;
196 border-radius: 45rpx;
197 border: 1px solid #C4121B;
198 animation: slideUp 1s ease-out;
199 /* 禁止默认样式 */
200 position: relative;
201 overflow: hidden;
202 }
203
204 /* 按钮点击反馈 */
205 .confirm-btn::after {
206 border: none;
207 }
208
209 .confirm-btn:active {
210 transform: scale(0.98);
211 box-shadow: 0 4rpx 10rpx rgba(6, 193, 174, 0.2);
212 }
213
214 /* 动画定义 */
215 @keyframes fadeIn {
216 0% {
217 opacity: 0;
218 }
219
220 100% {
221 opacity: 1;
222 }
223 }
224
225 @keyframes scaleIn {
226 0% {
227 transform: scale(0);
228 }
229
230 70% {
231 transform: scale(1.1);
232 }
233
234 100% {
235 transform: scale(1);
236 }
237 }
238
239 @keyframes slideUp {
240 0% {
241 opacity: 0;
242 transform: translateY(30rpx);
243 }
244
245 100% {
246 opacity: 1;
247 transform: translateY(0);
248 }
249 }
250 </style>
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="searchbar"> 3 <view class="searchbar">
4 <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" 4 <uni-easyinput v-model="queryParams.code" :input-border="false" placeholder="搜索变更单号"
5 v-model="queryParams.code" placeholder="搜索变更单号" @blur="getList" @clear="getList"> 5 placeholderStyle="font-size:30rpx" prefixIcon="search" @blur="getList" @clear="getList">
6 </uni-easyinput> 6 </uni-easyinput>
7 </view> 7 </view>
8 <view class="vipData"> 8 <view class="vipData">
9 <view>级位变更人数合计: <text>{{statistical.personCount}}</text></view> 9 <view>级位变更人数合计:
10 </view> 10 <text>{{ statistical.personCount }}</text>
11 <view class="appList"> 11
12 <view class="appItem" v-for="(item,index) in list" :key="index"> 12 </view>
13 <view class="status" @click="goDetail(item)"> 13 </view>
14 <view> 14 <view class="appList">
15 <text v-if="item.status == 0" class="text-warning">待提交</text> 15 <view v-for="(item,index) in list" :key="index" class="appItem">
16 <text v-if="item.status == 1" class="text-primary">审核中</text> 16 <view class="status" @click="goDetail(item)">
17 <text v-if="item.status == 2" class="text-success">审核通过</text> 17 <view>
18 <text v-if="item.status == 3" class="text-danger">审核拒绝</text> 18 <text v-if="userType==1?item.status == 1:item.shenAuditStatus==0" class="text-primary">审核中</text>
19 <text v-if="item.status == 4" class="text-warning">已撤回</text> 19 <text v-if="userType==1?item.status == 2:item.shenAuditStatus==1" class="text-success">审核通过</text>
20 </view> 20 <text v-if="userType==1?item.status == 3:item.shenAuditStatus==2" class="text-danger">审核拒绝</text>
21 </view> 21 <text v-if="userType==1?item.status == 4:item.shenAuditStatus==3" class="text-warning">已撤回</text>
22 22 </view>
23 <view class="name mt0" @click="goDetail(item)"> 23 </view>
24 <text class="text-primary">{{item.code}}</text>-{{item.shenMemName}} 24
25 </view> 25 <view class="name mt0" @click="goDetail(item)">
26 <view class="flexbox" @click="goDetail(item)"> 26 <text class="text-primary">{{ item.code }}</text>
27 <view> 27 -{{ item.shenMemName }}
28 变更人数 28 </view>
29 <view> 29 <view class="flexbox" @click="goDetail(item)">
30 <text class="text-danger">{{item.count}}</text> 30 <view>
31 </view> 31 变更人数
32 </view> 32 <view>
33 <view class="w50"> 33 <text class="text-danger">{{ item.count }}</text>
34 提交时间 34 </view>
35 <view>{{item.commitTime||'--'}}</view> 35 </view>
36 </view> 36 <view class="w50">
37 </view> 37 提交时间
38 <view class="func" v-if="item.status==1"> 38 <view>{{ item.commitTime || '--' }}</view>
39 <button @click="audit(item.id,'0')">拒绝</button> 39 </view>
40 <button @click="audit(item.id,'1')">同意</button> 40 </view>
41 </view> 41 <view v-if="userType==1?item.status == 1:item.shenAuditStatus==0 " class="func">
42 <view class="func" v-if="item.status==2"> 42 <button @click="audit(item.id,'0')">拒绝</button>
43 <button @click="handleDelete(item)">撤回</button> 43 <button @click="audit(item.id,'1')">同意</button>
44 </view> 44 </view>
45 </view> 45 <!-- <view v-if="item.status==2" class="func">-->
46 </view> 46 <!-- <button @click="handleDelete(item)">撤回</button>-->
47 <view class="nodata" v-if="list.length==0"> 47 <!-- </view>-->
48 <image mode="aspectFit" :src="config.baseUrl_api + '/fs/static/nodata.png'"></image> 48 </view>
49 <text>暂无数据</text> 49 </view>
50 </view> 50 <view v-if="list.length==0" class="nodata">
51 </view> 51 <image :src="config.baseUrl_api + '/fs/static/nodata.png'" mode="aspectFit"></image>
52 <text>暂无数据</text>
53 </view>
54 </view>
52 </template> 55 </template>
53 56
54 <script setup> 57 <script setup>
55 import * as api from '@/common/api.js' 58 import * as api from '@/common/api.js'
56 import config from '@/config.js' 59 import config from '@/config.js'
57 import { 60 import {
58 ref 61 ref
59 } from 'vue' 62 } from 'vue'
60 import { 63 import {
61 onLoad, 64 onLoad,
62 onShow 65 onShow
63 } from '@dcloudio/uni-app' 66 } from '@dcloudio/uni-app'
64 const app = getApp(); 67 import {changeLevelShenAudit} from "@/common/api.js";
65 const queryParams = ref({
66 code: '',
67 ztxList: 0
68 })
69 const list = ref([])
70 const statistical = ref({
71 personCount: 0
72 })
73 const total = ref(0)
74 onShow(() => {
75 getList()
76 })
77
78 function getList() {
79 uni.showLoading({
80 title: '加载中'
81 })
82 statistical.value.personCount = 0
83 api.getChangelevelList(queryParams.value).then(res => {
84 list.value = res.rows
85 list.value.forEach(item => {
86 statistical.value.personCount += (item.count * 1)
87 })
88 total.value = res.total
89 uni.hideLoading()
90 })
91 }
92 68
93 function goDetail(item) { 69 const app = getApp();
94 let path = `/personalVip/changeLevelDetail?rangeId=${item.id}` 70 const queryParams = ref({
95 uni.navigateTo({ 71 code: '',
96 url: path 72 // shenAuditStatus: 0
97 }); 73 })
98 } 74 const list = ref([])
75 const statistical = ref({
76 personCount: 0
77 })
78 const total = ref(0)
79 const userType = ref(2)
99 80
100 function handleDelete(row) { 81 onShow(() => {
101 uni.showModal({ 82 userType.value = app.globalData.userType
102 title: '提示', 83
103 content: `确定撤回吗`, 84 getList()
104 success: function(res) { 85 })
105 if (res.confirm) {
106 api.changeLevelWithDraw([row.id]).then(Response => {
107 uni.showToast({
108 icon: "none",
109 title: '撤回成功!'
110 })
111 getList()
112 })
113 }
114 }
115 })
116 }
117 86
118 function audit(id, flag) { 87 function getList() {
119 if (flag == 0) { 88 uni.showLoading({
120 // 拒绝 89 title: '加载中'
121 // 弹出框填写理由 90 })
122 uni.showModal({ 91 statistical.value.personCount = 0
123 title: '请输入拒绝理由', 92 api.getChangelevelList(queryParams.value).then(res => {
124 editable: true, 93 list.value = res.rows
125 success: function(res) { 94 list.value.forEach(item => {
126 if (res.confirm) { 95 statistical.value.personCount += (item.count * 1)
127 if (!res.content) { 96 })
128 uni.showToast({ 97 total.value = res.total
129 title: '请输入拒绝理由', 98 uni.hideLoading()
130 icon: 'none' 99 })
131 }) 100 }
132 } else {
133 doApproval(id, flag, res.content)
134 }
135 }
136 }
137 })
138 } else if (flag == '1') {
139 // 二次确认
140 uni.showModal({
141 title: '提示',
142 content: `确定审批通过吗`,
143 success: function(res) {
144 if (res.confirm) {
145 doApproval(id, flag)
146 }
147 }
148 })
149 }
150 }
151 101
152 function doApproval(id, flag, reason) { 102 function goDetail(item) {
153 var obj = { 103 let path = `/personalVip/changeLevelDetail?rangeId=${item.id}`
154 flag: flag, 104 uni.navigateTo({
155 reason: reason || '', 105 url: path
156 ids: [id] 106 });
157 } 107 }
158 console.log(obj)
159 uni.showLoading({
160 title: '加载中'
161 })
162 api.changeLevelAudit(obj).then((res) => {
163 uni.hideLoading()
164 uni.showToast({
165 title: '操作成功',
166 icon: 'none'
167 })
168 getList()
169 })
170 }
171 </script>
172 108
173 <style lang='scss' scoped> 109 function handleDelete(row) {
174 .searchbar { 110 uni.showModal({
175 display: flex; 111 title: '提示',
176 align-items: center; 112 content: `确定撤回吗`,
177 padding: 25rpx; 113 success: function (res) {
178 box-sizing: border-box; 114 if (res.confirm) {
115 api.changeLevelWithDraw([row.id]).then(Response => {
116 uni.showToast({
117 icon: "none",
118 title: '撤回成功!'
119 })
120 getList()
121 })
122 }
123 }
124 })
125 }
179 126
180 :deep(.uni-easyinput .uni-easyinput__content) { 127 function audit(id, flag) {
181 border-radius: 35rpx; 128 if (flag == 0) {
182 border: none; 129 // 拒绝
183 height: 70rpx; 130 // 弹出框填写理由
184 } 131 uni.showModal({
132 title: '请输入拒绝理由',
133 editable: true,
134 success: function (res) {
135 if (res.confirm) {
136 if (!res.content) {
137 uni.showToast({
138 title: '请输入拒绝理由',
139 icon: 'none'
140 })
141 } else {
142 doApproval(id, flag, res.content)
143 }
144 }
145 }
146 })
147 } else if (flag == '1') {
148 // 二次确认
149 uni.showModal({
150 title: '提示',
151 content: `确定审批通过吗`,
152 success: function (res) {
153 if (res.confirm) {
154 doApproval(id, flag)
155 }
156 }
157 })
158 }
159 }
185 160
186 :deep(.uni-easyinput__content-input) { 161 async function doApproval(id, flag, reason) {
187 font-size: 26rpx; 162 let obj = {
188 } 163 flag: flag,
189 164 reason: reason || '',
190 .invertedbtn-red { 165 ids: [id]
191 border-radius: 50px; 166 }
192 background-color: #fff; 167 console.log(obj)
168 uni.showLoading({
169 title: '加载中'
170 })
171 if (userType.value == 1) {
172 await api.changeLevelAudit(obj)
173 } else {
174 await api.changeLevelShenAudit(obj)
175 }
176 uni.hideLoading()
177 uni.showToast({
178 title: '操作成功',
179 icon: 'none'
180 })
181 getList()
182
183 }
184 </script>
193 185
194 font-size: 30rpx;
195 padding: 10rpx 20rpx;
196 }
197 }
198 </style>
...\ No newline at end of file ...\ No newline at end of file
186 <style lang='scss' scoped>
187 .searchbar {
188 display: flex;
189 align-items: center;
190 padding: 25rpx;
191 box-sizing: border-box;
192
193 :deep(.uni-easyinput .uni-easyinput__content) {
194 border-radius: 35rpx;
195 border: none;
196 height: 70rpx;
197 }
198
199 :deep(.uni-easyinput__content-input) {
200 font-size: 26rpx;
201 }
202
203 .invertedbtn-red {
204 border-radius: 50px;
205 background-color: #fff;
206
207 font-size: 30rpx;
208 padding: 10rpx 20rpx;
209 }
210 }
211 </style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!