37e8b001 by 杨炀

no message

1 parent d473edea
Showing 89 changed files with 211 additions and 4496 deletions
...@@ -57,5 +57,6 @@ ...@@ -57,5 +57,6 @@
57 /*每个页面公共css */ 57 /*每个页面公共css */
58 @import '/common/uni.css'; 58 @import '/common/uni.css';
59 @import '/common/mystyle.scss'; 59 @import '/common/mystyle.scss';
60 @import '@/static/font/iconfont.css'; 60 @import '@/static/font/iconfont.css';
61 .uni-modal__textarea{height: 50px;}
61 </style> 62 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -8,6 +8,10 @@ function checkReport() { ...@@ -8,6 +8,10 @@ function checkReport() {
8 method: 'get' 8 method: 'get'
9 }) 9 })
10 } 10 }
11
12
13
14
11 15
12 function getVenue() { 16 function getVenue() {
13 return request({ 17 return request({
...@@ -17,15 +21,7 @@ function getVenue() { ...@@ -17,15 +21,7 @@ function getVenue() {
17 } 21 }
18 22
19 23
20 function getOwnMemberInfo() { 24
21 // return loginServer.getNowOpenId().then(()=>{
22 const nowOpenId = uni.getStorageSync('nowOpenId');
23 return request({
24 url: `/systemj/member/getOwnMemberInfo?openId=${nowOpenId}`,
25 method: 'get'
26 })
27 // })
28 }
29 25
30 function getSiteList(projectId) { 26 function getSiteList(projectId) {
31 return request({ 27 return request({
...@@ -92,14 +88,6 @@ function payForOrder(id, data) { ...@@ -92,14 +88,6 @@ function payForOrder(id, data) {
92 }) 88 })
93 } 89 }
94 90
95 function rechargeCard(params) {
96 const nowOpenId = uni.getStorageSync('nowOpenId');
97 return request({
98 url: `/systemj/member/maRecharge?openId=${nowOpenId}`,
99 method: 'post',
100 params: params
101 })
102 }
103 91
104 /** 92 /**
105 * 获取余额 93 * 获取余额
...@@ -228,17 +216,5 @@ function miniappData(params) { ...@@ -228,17 +216,5 @@ function miniappData(params) {
228 216
229 217
230 export {checkReport, 218 export {checkReport,
231 getVenue, 219 getVenue
232 getOwnMemberInfo,
233 getSiteList,
234 getDateOrderInfo,
235 maGetPrice,
236 userOrder,
237 maReserveVenueWithInfoList,
238 payForOrder,
239 getMyBalance,cancelOrder,getMalist,getMaItemById,xfList,czList,getMaInfo,
240 listCanUse,rechargeCard,scanQrCode,
241 getCaptchaSms,maRebindMemberCard,getCancelHint,
242 maRechargeConfirm,maPayConfirm,
243 getMemberLevelTip,miniappData
244 } 220 }
......
1 import request from './request.js' 1 import request from './request.js'
2 import config from '@/config.js' 2 import config from '@/config.js'
3 3
4 function getTrainList(venueId) { 4 function getTrainList(params) {
5 return request({ 5 return request({
6 url: `/train/info/h5List`, 6 url: `/train/info/h5List`,
7 method: 'get'
8 })
9 }
10 function getTrainDetail(id) {
11 return request({
12 url: `/train/info/${id}`,
13 method: 'get', 7 method: 'get',
14 params: id 8 params: params
15 }) 9 })
16 } 10 }
17 11 function getComanyList(params) {
18
19 function getActivityHotelList(params) {
20 return request({ 12 return request({
21 url: `/logex/activityHotel/list`, 13 url: `/system/billing/list`,
22 method: 'get', 14 method: 'get',
23 params: params 15 params: params
24 }) 16 })
25 } 17 }
26 function getHotelById(id) { 18 function getTrainDetail(id) {
27 return request({ 19 return request({
28 url: `/logex/hotel/${id}`, 20 url: `/train/info/${id}`,
29 method: 'get', 21 method: 'get',
30 params: id 22 params: id
31 }) 23 })
32 } 24 }
33 25 function submitOrder(params) {
34 function getHotelRooms(id) { 26 return request({
27 url: `/train/order/submitOrder`,
28 method: 'post',
29 params: params
30 })
31 }
32 function getOrderInfoByOrderId(orderId) {
35 return request({ 33 return request({
36 url: `/logex/activityRoom/list?hotelId=${id}`, 34 url: `/train/orderInfo/getOrderInfoByOrderId?orderId=${orderId}`,
37 method: 'get', 35 method: 'get'
38 params: id
39 }) 36 })
40 } 37 }
41 function getbilllist(userId,venueId) { 38 function newbilllist() {
42 return request({ 39 return request({
43 url: `/logex/order/list?createById=${userId}&venueId=${venueId}`, 40 url: `/train/order/getOrderbyUser `,
44 method: 'get', 41 method: 'get'
45 params: userId
46 }) 42 })
47 } 43 }
48 function newbilllist(userId,venueId) { 44 function getInvoiceByActiveId(trainId) {
49 return request({ 45 return request({
50 url: `/logex/norder/list?createById=${userId}&venueId=${venueId}`, 46 url: `/train/invoice/list?trainId=${trainId}`,
51 method: 'get', 47 method: 'get'
52 params: userId
53 }) 48 })
54 } 49 }
55 function getCanInvoiceBills(params) { 50 function getCanInvoiceBills(trainId) {
56 return request({ 51 return request({
57 url: `/logex/norder/list?activeId=${params.activeId}&createById=${params.userId}&invoiced=1&venueId=${params.venueId}`, 52 url: `/train/orderInfo/getOrderInfoByKp?isInvoice=0&trainId=${trainId}`,
58 method: 'get' 53 method: 'get'
59 }) 54 })
60 } 55 }
61 function getbilldetailbyId(orderId) { 56 function addAddress(form) {
62 return request({ 57 return request({
63 // url: `/logex/order/${orderId}`, 58 url: `/train/invoiceInfo`,
64 url: `/logex/norder/${orderId}`, 59 method: 'post',
65 method: 'get', 60 params: form
66 params: orderId
67 }) 61 })
68 } 62 }
69 function getFoodBilldetailbyId(orderId) { 63 function delAddress(ids) {
70 return request({ 64 return request({
71 url: `/logex/orderFood/getFoodOrderInfoByOrder?orderId=${orderId}`, 65 url: `/train/invoiceInfo/${ids}`,
72 method: 'get' 66 method: 'delete'
73 }) 67 })
74 } 68 }
75 function getRoomBilldetailbyId(orderId) { 69 function regionsList() {
76 return request({ 70 return request({
77 url: `/logex/orderRoom/getRoomOrderInfoByOrderId?orderId=${orderId}`, 71 url: `/systemj/region/regionsList`,
78 method: 'get' 72 method: 'get'
79 }) 73 })
80 } 74 }
81 function getCarBilldetailbyId(orderId) { 75 function addressList() {
82 return request({ 76 return request({
83 url: `/logex/norder/getOrderByOrderId?orderId=${orderId}`, 77 url: `/train/invoiceInfo/list`,
84 method: 'get' 78 method: 'get'
85 }) 79 })
86 } 80 }
87 function getInvoiceByActiveId(activeId,userId,venueId) { 81 function submitInvoice(form) {
88 return request({ 82 return request({
89 url: `/logex/invoice/list?activeId=${activeId}&createById=${userId}&venueId=${venueId}`, 83 url: `/train/invoice`,
90 method: 'get' 84 method: 'post',
85 params: form
91 }) 86 })
92 } 87 }
93 function getInvoiceByUserId(userId,venueId) { 88 function editInvoice(form) {
94 return request({ 89 return request({
95 url: `/logex/invoice/list?createById=${userId}&venueId=${venueId}`, 90 url: `/train/invoice`,
96 method: 'get' 91 method: 'put',
92 params: form
97 }) 93 })
98 } 94 }
99 function getInvoiceDetailBills(invoiceId) { 95 function getInvoiceDetailBills(invoiceId) {
100 return request({ 96 return request({
101 url: `/logex/norder/list?invoiceId=${invoiceId}`, 97 url: `/train/orderInfo/getOrderInfoByKp?invoiceId=${invoiceId}`,
102 method: 'get' 98 method: 'get'
103 }) 99 })
104 } 100 }
105 function getInvoiceDetail(invoiceId) { 101 function getInvoiceDetail(invoiceId) {
106 return request({ 102 return request({
107 url: `/logex/invoice/${invoiceId}`, 103 url: `/train/invoice/${invoiceId}`,
108 method: 'get' 104 method: 'get'
109 }) 105 })
110 } 106 }
111 function submitOrder(data) { 107
108 function getInvoiceByUserId() {
112 return request({ 109 return request({
113 url: `/logex/order/submitOrder`, 110 url: `/train/invoice/list`,
114 method: 'post', 111 method: 'get'
115 params: data
116 }) 112 })
117 } 113 }
118 // 退款 114 // /-sss--sss--sssssss---ssssssssss-----////
119 function cancelOrder(orderId) { 115
116
117
118
119 function getbilllist(userId,venueId) {
120 return request({ 120 return request({
121 // url: `/logex/norder/unSubscribeOrderBack/${orderId}`, 121 url: `/logex/order/list?createById=${userId}&venueId=${venueId}`,
122 url: `/logex/norder/applyOrderBack/${orderId}`, 122 method: 'get',
123 method: 'post', 123 params: userId
124 })
125 }
126
127
128 function getbilldetailbyId(orderId) {
129 return request({
130 // url: `/logex/order/${orderId}`,
131 url: `/logex/norder/${orderId}`,
132 method: 'get',
124 params: orderId 133 params: orderId
125 }) 134 })
126 } 135 }
136 function getFoodBilldetailbyId(orderId) {
137 return request({
138 url: `/logex/orderFood/getFoodOrderInfoByOrder?orderId=${orderId}`,
139 method: 'get'
140 })
141 }
142
143 function getCarBilldetailbyId(orderId) {
144 return request({
145 url: `/logex/norder/getOrderByOrderId?orderId=${orderId}`,
146 method: 'get'
147 })
148 }
149
150
151
152
153
154 // 退ding
155 function cancelOrder() {
156 return request({
157 url: `/train/info/getUnReg`,
158 method: 'get'
159 })
160 }
127 // 取消 161 // 取消
128 function cancelOrder2(orderId) { 162 function cancelOrder2(orderId) {
129 return request({ 163 return request({
...@@ -142,27 +176,7 @@ function payForOrder(orderId) { ...@@ -142,27 +176,7 @@ function payForOrder(orderId) {
142 params: orderId 176 params: orderId
143 }) 177 })
144 } 178 }
145 function submitInvoice(form) { 179
146 return request({
147 url: `/logex/invoice`,
148 method: 'post',
149 params: form
150 })
151 }
152 function editInvoice(form) {
153 return request({
154 url: `/logex/invoice`,
155 method: 'put',
156 params: form
157 })
158 }
159 function addAddress(form) {
160 return request({
161 url: `/logex/invoiceInfo`,
162 method: 'post',
163 params: form
164 })
165 }
166 function checkResidueRoom(form) { 180 function checkResidueRoom(form) {
167 return request({ 181 return request({
168 url: `/logex/orderRoom/checkResidueRoom`, 182 url: `/logex/orderRoom/checkResidueRoom`,
...@@ -170,25 +184,7 @@ function checkResidueRoom(form) { ...@@ -170,25 +184,7 @@ function checkResidueRoom(form) {
170 params: form 184 params: form
171 }) 185 })
172 } 186 }
173 function delAddress(ids) { 187
174 return request({
175 url: `/logex/invoiceInfo/${ids}`,
176 method: 'delete'
177 })
178 }
179 function regionsList() {
180 return request({
181 url: `/systemj/region/regionsList`,
182 method: 'get'
183 })
184 }
185 function addressList() {
186 const currUser = uni.getStorageSync('currUser');
187 return request({
188 url: `/logex/invoiceInfo/list?createById=${currUser.userId}`,
189 method: 'get'
190 })
191 }
192 function getActivityRestaurantList(params) { 188 function getActivityRestaurantList(params) {
193 return request({ 189 return request({
194 url: `/logex/activityRestaurant/list`, 190 url: `/logex/activityRestaurant/list`,
...@@ -230,11 +226,12 @@ function newsSubmitOrderHotel(form) { ...@@ -230,11 +226,12 @@ function newsSubmitOrderHotel(form) {
230 params: form 226 params: form
231 }) 227 })
232 } 228 }
233 export {getTrainList,getActivityHotelList,getTrainDetail,getHotelById,getHotelRooms,submitOrder,getbilllist,getbilldetailbyId, 229 export {getTrainList,getOrderInfoByOrderId
230 ,getTrainDetail,submitOrder,getbilllist,getbilldetailbyId,
234 payForOrder,cancelOrder,getCanInvoiceBills,submitInvoice,getInvoiceByActiveId,getInvoiceDetailBills, 231 payForOrder,cancelOrder,getCanInvoiceBills,submitInvoice,getInvoiceByActiveId,getInvoiceDetailBills,
235 getInvoiceDetail,getInvoiceByUserId,editInvoice,addAddress,regionsList,addressList,delAddress, 232 getInvoiceDetail,getInvoiceByUserId,editInvoice,addAddress,regionsList,addressList,delAddress,
236 checkResidueRoom,getActivityRestaurantList,getMenuById, 233 checkResidueRoom,getActivityRestaurantList,getMenuById,
237 submitOrderFood,getActivityCarList,submitOrderCar,newsSubmitOrderHotel,newbilllist, 234 submitOrderFood,getActivityCarList,submitOrderCar,newsSubmitOrderHotel,newbilllist,
238 getFoodBilldetailbyId,getRoomBilldetailbyId,getCarBilldetailbyId, 235 getFoodBilldetailbyId,getCarBilldetailbyId,
239 cancelOrder2 236 cancelOrder2,getComanyList
240 } 237 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -196,10 +196,10 @@ function showLogin(callback) { ...@@ -196,10 +196,10 @@ function showLogin(callback) {
196 uni.clearStorageSync() 196 uni.clearStorageSync()
197 197
198 uni.showModal({ 198 uni.showModal({
199 title: '请输入工号,进行身份验证', 199 title: '请输入身份证,进行身份验证',
200 showCancel: false, 200 showCancel: false,
201 editable: true, 201 editable: true,
202 placeholderText: '工号', 202 placeholderText: '身份证',
203 complete: (res) => { 203 complete: (res) => {
204 if (res.cancel) { 204 if (res.cancel) {
205 setTimeout(() => { 205 setTimeout(() => {
...@@ -209,7 +209,7 @@ function showLogin(callback) { ...@@ -209,7 +209,7 @@ function showLogin(callback) {
209 } 209 }
210 if (!res.content) { 210 if (!res.content) {
211 uni.showToast({ 211 uni.showToast({
212 title: '工号不能为空', 212 title: '身份证不能为空',
213 icon: 'none', 213 icon: 'none',
214 duration: 3000 214 duration: 3000
215 }) 215 })
...@@ -252,43 +252,6 @@ function h5LoginAuto() { ...@@ -252,43 +252,6 @@ function h5LoginAuto() {
252 } 252 }
253 253
254 function initData() { 254 function initData() {
255 console.log('initData')
256
257 const currUser = uni.getStorageSync('currUser');
258 // console.log(currUser)
259 return Promise.all([api.getVenue(), api.getOwnMemberInfo()]).then(res => {
260 let ven = res[0].data;
261 let men = res[1]?.data;
262
263 const app = getApp();
264
265 if (ven.venuePic) {
266 ven.venuePicArr = ven.venuePic.split(',');
267 }
268 if (ven.businessPeriod) {
269 ven.startBus = ven.businessPeriod.split(',')[0];
270 ven.endBus = ven.businessPeriod.split(',')[1];
271 }
272 ven.latitude = ven.lal.split(',')[0];
273 ven.longitude = ven.lal.split(',')[1];
274
275 app.globalData.venue = ven;
276 app.globalData.isVip = men?.isVip;
277 // app.globalData.relateProjectId = men.info.relateProjectId;
278 app.globalData.relateProjectIdList = men?.info?.relateProjectIdList;
279 app.globalData.relateVenueProjectIdList = men?.info?.relateVenueProjectIdList;
280
281 app.globalData.venueConfig = {
282 normalOverDay: ven.resSiteConfig?.normalOrderNum,
283 normalPeriodStart: ven.resSiteConfig?.normalOrderPeriod.split(',')[0],
284 normalPeriodEnd: ven.resSiteConfig?.normalOrderPeriod.split(',')[1]
285 };
286 if (men?.isVip) {
287 app.globalData.venueConfig.memberOverDay = ven.resSiteConfig?.memberOrderNum;
288 app.globalData.venueConfig.memberPeriodStart = ven.resSiteConfig?.memberOrderPeriod.split(',')[0];
289 app.globalData.venueConfig.memberPeriodEnd = ven.resSiteConfig?.memberOrderPeriod.split(',')[1];
290 }
291 });
292 } 255 }
293 256
294 export { 257 export {
......
1 import request from './request.js' 1 import request from './request.js'
2 const accountInfo = uni.getAccountInfoSync() 2 let appId = ''
3 const appId = accountInfo.miniProgram.appId; 3 // #ifdef MP
4 const accountInfo = uni.getAccountInfoSync()
5 const appId = accountInfo.miniProgram.appId;
6 // #endif
4 import config from '@/config.js' 7 import config from '@/config.js'
5 8
6 function regionsList() { 9 function regionsList() {
......
...@@ -167,9 +167,9 @@ page { ...@@ -167,9 +167,9 @@ page {
167 font-size: 28rpx; 167 font-size: 28rpx;
168 line-height: 40rpx; 168 line-height: 40rpx;
169 font-weight: 400; 169 font-weight: 400;
170 display: block; 170 display: block; font-family: sans-serif;
171 text-indent: 2em; 171 text-indent: 2em;color: #666;
172 text-align: center; 172 text-align: justify;
173 } 173 }
174 .contentbox .content image { 174 .contentbox .content image {
175 width: 80rpx; 175 width: 80rpx;
...@@ -359,9 +359,9 @@ font-size: 36rpx;} ...@@ -359,9 +359,9 @@ font-size: 36rpx;}
359 font-size: 60rpx;margin-right: 15rpx; 359 font-size: 60rpx;margin-right: 15rpx;
360 text-shadow: 0px 2px 5px rgba(117,117,117,0.75);} 360 text-shadow: 0px 2px 5px rgba(117,117,117,0.75);}
361 361
362 .billItem{width: 700rpx;margin:30rpx 0 0; 362 .billItem{
363 background: #FFFFFF;box-sizing: border-box; 363 background: #FFFFFF;box-sizing: border-box;
364 border-radius: 20rpx;padding: 38rpx 0 0;} 364 }
365 .bill-content{background: #F5F7F9;padding: 30rpx 25rpx;} 365 .bill-content{background: #F5F7F9;padding: 30rpx 25rpx;}
366 .billItem > view{overflow: hidden; 366 .billItem > view{overflow: hidden;
367 padding: 0 35rpx; 367 padding: 0 35rpx;
...@@ -373,7 +373,6 @@ margin-bottom: 33rpx; ...@@ -373,7 +373,6 @@ margin-bottom: 33rpx;
373 color: #2B3133; 373 color: #2B3133;
374 font-size: 28rpx; 374 font-size: 28rpx;
375 display: inline-block; 375 display: inline-block;
376 max-width: 80%;
377 text-align: right;} 376 text-align: right;}
378 .billItem .billFoot{padding: 22rpx 35rpx 0;} 377 .billItem .billFoot{padding: 22rpx 35rpx 0;}
379 .billFoot{border-top:1rpx solid #E5E5E5; 378 .billFoot{border-top:1rpx solid #E5E5E5;
...@@ -613,11 +612,9 @@ wx-swiper .wx-swiper-dot-active { ...@@ -613,11 +612,9 @@ wx-swiper .wx-swiper-dot-active {
613 } 612 }
614 613
615 .uni-collapse-item { 614 .uni-collapse-item {
616 margin: 0 0 30rpx;
617 box-sizing: border-box; 615 box-sizing: border-box;
618 background-color: #fff; 616 background-color: #fff;
619 border-radius: 20rpx; 617 border-radius: 20rpx;
620 padding: 30rpx;
621 } 618 }
622 .collapseBox .uni-collapse-item__title.uni-collapse-item-border { 619 .collapseBox .uni-collapse-item__title.uni-collapse-item-border {
623 border-bottom: none; 620 border-bottom: none;
...@@ -695,8 +692,10 @@ wx-swiper .wx-swiper-dot-active { ...@@ -695,8 +692,10 @@ wx-swiper .wx-swiper-dot-active {
695 } 692 }
696 .fBottom{background: #FFFFFF; padding: 30rpx 30rpx 100rpx;} 693 .fBottom{background: #FFFFFF; padding: 30rpx 30rpx 100rpx;}
697 694
698 .pp{font-weight: 400;color: #7B7F83;font-size: 28rpx; margin: 16rpx 0; 695 .pp{
699 text{float:right;font-size: 28rpx;color: #2B3133;text-align:right;} 696 display: block;
697 font-weight: 400;color: #7B7F83;font-size: 28rpx; margin: 16rpx 0;
698 text{font-size: 28rpx;color: #2B3133;text-align:right;}
700 } 699 }
701 .txr{text-align:right;} 700 .txr{text-align:right;}
702 .mt-30{margin-top: 30rpx;} 701 .mt-30{margin-top: 30rpx;}
......
1 import request from './request.js'
2 const accountInfo = uni.getAccountInfoSync()
3 const appId = accountInfo.miniProgram.appId;
4
5 // 获取培训列表
6 function tainList(params) {
7 return request({
8 url: `/systemj/information/applets/trainsList`,
9 method: 'get',
10 params: params
11 })
12 }
13
14 // 查看培训项目
15 function trainParticulars(params) {
16 return request({
17 url: '/systemj/information/getTrainDetails',
18 method: 'get',
19 params: params
20 })
21 }
22
23 // 查看培训项目
24 function trainProjectList(params) {
25 return request({
26 url: '/systemj/information/projectList',
27 method: 'get',
28 params: params
29 })
30 }
31
32 // 查看报名费用(未支付前)
33 function searchTrainCost(params) {
34 return request({
35 url: '/systemj/signer/getEnrollBill',
36 method: 'get',
37 params: params
38 })
39 }
40
41 // 提交 用户资料
42 function trainNext(params) {
43 return request({
44 url: `/systemj/signer/signUp`,
45 method: 'post',
46 params,
47 })
48 }
49
50 // 生成订单
51 function createOrder(params) {
52 return request({
53 url: `/systemj/order/saveOrder`,
54 method: 'post',
55 params,
56 })
57 }
58
59 //会员支付
60 function pay(params) {
61 return request({
62 url: `/systemj/order/pay`,
63 method: 'post',
64 params,
65 })
66 }
67
68 // 线下支付银行信息
69 function bankSlip(params) {
70 return request({
71 url: `/systemj/order/bankInfo`,
72 method: 'get',
73 params,
74 })
75 }
76
77 function trainOrder(params) {
78 return request({
79 url: `/systemj/order/getMyOrders`,
80 method: 'get',
81 params,
82 })
83 }
84
85 // 修改报名
86 function trainUpdata(params) {
87 return request({
88 url: `/systemj/signer/updateSign`,
89 method: 'put',
90 params,
91 })
92 }
93
94 // 取消订单
95 function cancelOrder(params) {
96 return request({
97 url: `/systemj/order/cancelOrder`,
98 method: 'put',
99 params,
100 })
101 }
102
103 // 报项列表
104 function signList(params) {
105 return request({
106 url: `/systemj/signer/applets/signList`,
107 method: 'get',
108 params,
109 })
110 }
111
112 // 报项详情
113 function signDetail(params) {
114 return request({
115 url: `/systemj/signer/applets/signDetail`,
116 method: 'get',
117 params,
118 })
119 }
120
121 // 订单列表
122 function orderList(params) {
123 return request({
124 url: `/systemj/order/applets/orderList`,
125 method: 'get',
126 params,
127 })
128 }
129
130
131 // 订单详情
132 function getOrderDetail(params) {
133 return request({
134 url: `/systemj/order/getOrderDetail`,
135 method: 'get',
136 params,
137 })
138 }
139
140
141
142 export {
143 getOrderDetail,
144 orderList,
145 signDetail,
146 signList,
147 tainList,
148 trainParticulars,
149 trainProjectList,
150 searchTrainCost,
151 trainNext,
152 createOrder,
153 pay,
154 bankSlip,
155 trainOrder,
156 trainUpdata,
157 cancelOrder
158 }
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view class="box">
3 <view class="box1">
4 <view class="title">
5 <view class="title-left">{{ porps.title }}</view>
6 <view class="title-icon" @click="changFN">
7 <uni-icons type="top" color="#95a1a6" v-if="show"></uni-icons>
8 <uni-icons type="bottom" color="#95a1a6" v-else></uni-icons>
9 </view>
10 </view>
11 <view class="conter-liner-cost">
12 <view class="liner-left">{{ porps.text }}&nbsp;&nbsp; 合计:</view>
13 <view class="liner-right">{{ porps.cost }}</view>
14 </view>
15 </view>
16 <view class="box2" v-show="show"><slot></slot></view>
17 </view>
18 </template>
19
20 <script setup>
21 import { ref } from 'vue';
22 const porps = defineProps({
23 title: String,
24 text: String,
25 cost: String
26 });
27 const show = ref(false);
28
29 function changFN() {
30 show.value = !show.value;
31 }
32 </script>
33
34 <style lang="scss" scoped>
35 .box {
36 margin: 0;
37 padding: 0 25rpx;
38 .box1 {
39 margin-bottom: 23rpx;
40 margin-top: 35rpx;
41 .title {
42 display: flex;
43 justify-content: space-between;
44 margin-bottom: 10rpx;
45
46 .title-left {
47 font-size: 30rpx;
48 font-family: PingFang SC;
49 font-weight: 500;
50 color: #2b3133;
51 }
52 }
53 .conter-liner-cost {
54 display: flex;
55 .liner-left {
56 font-size: 28rpx;
57 font-family: PingFang SC;
58 font-weight: 400;
59 color: #7b7f83;
60 }
61 .liner-right {
62 font-size: 28rpx;
63 font-family: PingFang SC;
64 font-weight: 400;
65 color: #ff8124;
66 }
67 }
68 }
69 .box2 {
70 border-top: 1rpx solid #e6e6e6;
71 }
72 }
73 </style>
1 <template>
2 <view class=" conter-box">
3 <view class="box" v-if="props.trainProjectsList.length != 0">
4 <view class="text">培训科目</view>
5 <view class="box2">
6 <checkbox-group>
7 <view class="box-check" v-for="item in props.trainProjectsList" :key="item.id">
8 <view class="">
9 <view class="title">{{ item.projectName }}</view>
10 <view class="content">
11 {{ item.isNecessary == 1 ? '必选' : '非必选' }}&nbsp;&nbsp;合计:
12 <view class="span">{{ item.cost }}</view>
13 </view>
14 </view>
15 <view class="checkbox">
16 <checkbox
17 :disabled="item.isNecessary == 1"
18 :value="item.id"
19 @click="checkTrain(item)"
20 :checked="item.check"
21 />
22 </view>
23 </view>
24 </checkbox-group>
25 </view>
26 </view>
27 <view class="box" v-if="props.examProjectsList.length != 0">
28 <view class="text">考试科目</view>
29 <view class="box2">
30 <checkbox-group>
31 <view class="box-check" v-for="item in props.examProjectsList" :key="item.id">
32 <view class="">
33 <view class="title">{{ item.projectName }}</view>
34 <view class="content">
35 {{ item.isNecessary == 1 ? '必选' : '非必选' }}&nbsp;&nbsp;合计:
36 <view class="span">{{ item.cost }}</view>
37 </view>
38 </view>
39 <view class="checkbox">
40 <checkbox
41 :disabled="item.isNecessary == 1"
42 :value="item.id"
43 @click="checkTrain(item)"
44 :checked="item.check"
45 />
46 </view>
47 </view>
48 </checkbox-group>
49 </view>
50 </view>
51 </view>
52 <view class="foot">
53 <view class="button1" @click="upFN">上一步</view>
54 <view class="button" @click="nextFN">下一步</view>
55 </view>
56 <view class="nodata " v-if="props.examProjectsList.length == 0 && props.trainProjectsList.length == 0">
57 没有培训科目
58 </view>
59 </template>
60
61 <script setup>
62 import { forEach } from 'lodash';
63 import { ref, getCurrentInstance, reactive, toRefs } from 'vue';
64 const props = defineProps({
65 trainProjectsList: {},
66 examProjectsList: {},
67 hotelList: {},
68 id: {}
69 });
70 const data = reactive({
71 projectIdsArray: []
72 });
73
74 const examIdsArry = ref([]);
75 const { projectIdsArray } = toRefs(data);
76 const emit = defineEmits(['nextFN']);
77 const checkbox1 = ref([0]);
78
79 function checkTrain(item) {
80 if (item.isNecessary == 1) {
81 item.check = true;
82 } else {
83 item.check = !item.check;
84 }
85 }
86
87 // 上一步
88 function upFN() {
89 emit('nextFN', 0);
90 }
91
92 // 下一步
93 function nextFN() {
94 let falg = true;
95 let arr1 = [];
96 let arr2 = [];
97 props.examProjectsList.forEach(item => {
98 if (item.check) {
99 arr1.push(item.id);
100 }
101 });
102 props.trainProjectsList.forEach(item => {
103 if (item.check) {
104 arr2.push(item.id);
105 }
106 });
107 let examList = JSON.parse(JSON.stringify(props.examProjectsList));
108 let trainList = JSON.parse(JSON.stringify(props.trainProjectsList));
109 examList.concat(trainList).forEach(item => {
110 if (item.isNecessary == 1 && item.check == false) {
111 falg = false;
112 }
113 });
114
115 if (falg) {
116 examIdsArry.value = arr1;
117 projectIdsArray.value = arr2;
118 if (props.hotelList.length == 0) {
119 // 没有酒店直接报名
120 // 页面跳转
121 let path = `/pages/train/costBreakdown/costBreakdown?id=` + props.id;
122 wx.navigateTo({
123 url: path
124 });
125 } else {
126 emit('nextFN', 2, projectIdsArray.value, examIdsArry.value);
127 }
128 } else {
129 uni.showToast({
130 title: '请选择必选科目!',
131 duration: 2000,
132 icon: 'error'
133 });
134 return false;
135 }
136 }
137 </script>
138
139 <style scoped lang="scss">
140 .nodata {
141 background: url(/static/nodata.png) no-repeat;
142 background-size: 100%;
143 width: 100%;
144 height: 835rpx;
145 color: #aaa59f;
146 font-size: 50rpx;
147 }
148
149 .conter-box {
150 padding-bottom: 100rpx;
151 }
152
153 .box {
154 padding: 34rpx 25rpx;
155 background-color: #f4f6fa;
156 padding-bottom: 0;
157
158 .box2 {
159 background-color: #fff;
160 border-radius: 15rpx;
161 margin-top: 20rpx;
162 }
163
164 .text {
165 height: 29px;
166 font-size: 30rpx;
167 font-family: PingFang SC;
168 font-weight: 500;
169 color: #000000;
170 line-height: 62rpx;
171 }
172
173 .box-check {
174 padding: 40rpx;
175 display: flex;
176 justify-content: space-between;
177 border-bottom: 1rpx solid #e6e6e6;
178 padding-bottom: 20rpx;
179
180 :deep(.checkbox__inner) {
181 background-color: #d9d9d9 !important;
182 border-color: #d9d9d9 !important;
183 border-radius: 50% !important;
184 width: 45rpx !important;
185 height: 45rpx !important;
186 line-height: 40rpx;
187 }
188
189 .text {
190 font-size: 12px;
191 color: #666;
192 margin-top: 5px;
193 }
194
195 .title {
196 font-size: 30rpx;
197 font-family: PingFang SC;
198 font-weight: 400;
199 color: #2b3133;
200 margin-bottom: 10rpx;
201 }
202
203 .content {
204 display: flex;
205 font-size: 30rpx;
206 font-family: PingFang SC;
207 font-weight: 400;
208 color: #2b3133;
209
210 .span {
211 color: #ff8124;
212 font-size: 28rpx;
213 font-family: PingFang SC;
214 font-weight: 400;
215 }
216 }
217 }
218
219 :deep(.checkbox__inner-icon) {
220 position: absolute !important;
221 top: 4px !important;
222 left: 7px !important;
223 color: #000 !important;
224 }
225
226 :deep(.uni-data-checklist .checklist-group .checklist-box) {
227 margin-right: 0;
228 }
229 }
230
231 .conter-button {
232 position: absolute;
233 left: 0;
234 bottom: 10rpx;
235 width: 100%;
236 display: flex;
237 justify-content: center;
238
239 .button {
240 height: 80rpx;
241 width: 500rpx;
242 text-align: center;
243 font-size: 32rpx;
244 font-family: PingFang SC;
245 font-weight: 500;
246 color: #ffffff;
247 line-height: 80rpx;
248 background: linear-gradient(270deg, #54e1b9, #00caa6);
249 border-radius: 40rpx;
250 }
251 }
252
253 .foot {
254 display: flex;
255 background-color: #ffffff;
256 padding: 20rpx 0;
257 position: absolute;
258 left: 0;
259 bottom: 0;
260 width: 100%;
261
262 .button {
263 margin: 0 auto;
264 height: 80rpx;
265 width: 300rpx;
266 text-align: center;
267 font-size: 32rpx;
268 font-family: PingFang SC;
269 font-weight: 500;
270 color: #ffffff;
271 line-height: 80rpx;
272 background: linear-gradient(270deg, #54e1b9, #00caa6);
273 border-radius: 40rpx;
274 }
275
276 .button1 {
277 margin: 0 auto;
278 height: 80rpx;
279 width: 300rpx;
280 text-align: center;
281 font-size: 32rpx;
282 font-family: PingFang SC;
283 font-weight: 500;
284 line-height: 80rpx;
285 background: #fff;
286 border-radius: 40rpx;
287 border: 1px solid #2ed981;
288 color: #2ed981;
289 }
290 }
291 </style>
1 <template>
2 <view class="box">
3 <view class="liner" v-for="item in props.scheduleList" :key="item.id">
4 <view class="timer">
5 <uni-icons custom-prefix="iconfont" type="icon-ai253" color="#1ec886" size="20"></uni-icons>
6 &nbsp; {{ item.dayStr }} 10:00-12:00
7 </view>
8 <view class="conetr">{{ item.event }}</view>
9 <view class="data">
10 <uni-icons custom-prefix="iconfont" type="icon-loufangfangzi"></uni-icons>
11 {{ item.place }}
12 </view>
13 </view>
14 <view class="nodata" v-if="props?.scheduleList?.length == 0">你还没有日程安排</view>
15 </view>
16 </template>
17
18 <script setup>
19 import { ref, getCurrentInstance, reactive, toRefs } from 'vue';
20 const props = defineProps({
21 scheduleList: {}
22 });
23 </script>
24
25 <style scoped lang="scss">
26 .nodata {
27 background: url(/static/nodata.png) no-repeat;
28 background-size: 100%;
29 width: 100%;
30 height: 835rpx;
31 color: #aaa59f;
32 font-size: 50rpx;
33 }
34
35 .box {
36 padding-top: 25rpx;
37
38 .liner {
39 margin-bottom: 20rpx;
40 background-color: #fff;
41 border-radius: 15rpx;
42 padding: 20rpx;
43 }
44
45 .timer {
46 display: flex;
47 font-size: 28rpx;
48 font-family: PingFang SC;
49 font-weight: 400;
50 color: #1ec886;
51 }
52
53 .conetr {
54 font-size: 30rpx;
55 font-family: PingFang SC;
56 font-weight: 400;
57 color: #2b3133;
58 margin: 25rpx 0;
59 }
60
61 .data {
62 font-size: 28rpx;
63 font-family: PingFang SC;
64 font-weight: 400;
65 color: #7b7f83;
66 }
67 }
68 </style>
1 <template>
2 <view class="big-box">
3 <view class="list-box">
4 <view class="image">
5 <image class="img" referrer="no-referrer|origin|unsafe-url" :src="porps.pic" mode="aspectFill"></image>
6 </view>
7 <view class="text">
8 <view class="text-title">{{ porps.title }}</view>
9 <view class="text-card color" v-if="porps.card == '报名中'">{{ porps.card }}</view>
10 <view class="text-card color1" v-if="porps.card == '进行中'">{{ porps.card }}</view>
11 <view class="text-card color2" v-if="porps.card == '即将开始'">{{ porps.card }}</view>
12 <view class="text-card color3" v-if="porps.card == '已结束'">{{ porps.card }}</view>
13 <view class="text-card color4" v-if="porps.card == '培训未开始'">{{ porps.card }}</view>
14 <view class="text-card color4" v-if="porps.card == '报名未开始'">{{ porps.card }}</view>
15 <view class="text-timer ">报名截止:{{ porps.timer }}</view>
16 </view>
17 </view>
18 <view class="hr"></view>
19 </view>
20 </template>
21
22 <script setup>
23 const porps = defineProps({
24 pic: {
25 type: String
26 },
27 title: {
28 type: String
29 },
30 card: {
31 type: String
32 },
33 timer: {
34 type: String
35 }
36 });
37 </script>
38
39 <style lang="scss">
40 .big-box {
41 width: 100%;
42 padding: 25rpx 0;
43
44 .hr {
45 width: 100%;
46 border-bottom: 1rpx solid #e5e5e5;
47 padding-top: 25rpx;
48 }
49
50 .list-box {
51 width: 100%;
52 height: 180rpx;
53 display: flex;
54
55 .image {
56 width: 270rpx;
57 height: 180rpx;
58 padding-right: 25rpx;
59
60 .img {
61 width: 270rpx;
62 height: 180rpx;
63 border-radius: 15rpx;
64 }
65 }
66
67 .text {
68 margin-left: 20rpx;
69
70 .text-title {
71 text-align: left;
72 font-size: 30rpx;
73 font-family: PingFang SC;
74 font-weight: 400;
75 color: #000000;
76 }
77
78 .text-card {
79 font-size: 20rpx;
80 width: 110rpx;
81 height: 32rpx;
82 margin-top: 57rpx;
83 text-align: center;
84 font-family: PingFang SC;
85 font-weight: 400;
86 color: #ffffff;
87 border-radius: 16px 16px 16px 0px;
88 }
89
90 .color {
91 background: linear-gradient(270deg, #54e1b9, #00caa6);
92 }
93
94 .color1 {
95 background: linear-gradient(270deg, #be8efb, #a76df4);
96 }
97
98 .color2 {
99 background: linear-gradient(270deg, #fea449, #ffb95f);
100 }
101
102 .color3 {
103 background: linear-gradient(270deg, #d9d9d9, #bcbcbc);
104 }
105
106 .color4 {
107 background: linear-gradient(270deg, #40d8ee, #53a7f6);
108 }
109
110 .text-timer {
111 margin-top: 20rpx;
112 height: 23rpx;
113 font-size: 24rpx;
114 font-family: PingFang SC;
115 font-weight: 400;
116 color: #7b7f83;
117 }
118 }
119 }
120 }
121 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view class="big-box">
3 <view class="list-box">
4 <view class="image">
5 <image
6 class="img"
7 referrer="no-referrer|origin|unsafe-url"
8 :src="porps.item.cover"
9 mode="aspectFill"
10 ></image>
11 </view>
12 <view class="text">
13 <view class="text-title">{{ porps.item.trainName }}</view>
14 <view class="text-card color1" v-if="porps.item.statusStr == '审核通过'">
15 {{ porps.item.statusStr }}
16 </view>
17 <view class="text-card color2" v-if="porps.item.statusStr == '待审核'">
18 {{
19 porps.item.status == '0' && porps.item.payStatus == '0'
20 ? porps.item.payStatusStr
21 : porps.item.statusStr
22 }}
23 </view>
24 <view class="text-card color3" v-if="porps.item.statusStr == '报名失败'">
25 {{ porps.item.statusStr }}
26 </view>
27 <view class="text-card color3" v-if="porps.item.statusStr == '审核拒绝'">
28 {{ porps.item.statusStr }}
29 </view>
30 <view class="text-card color4" v-if="porps.item.statusStr == '待支付'">{{ porps.item.statusStr }}</view>
31 <view class="text-card color4" v-if="porps.item.statusStr == '待提交'">{{ porps.item.statusStr }}</view>
32 <view class="text-card color5" v-if="porps.item.statusStr == '已取消'">{{ porps.item.statusStr }}</view>
33 </view>
34 </view>
35 <view class="hr"></view>
36 </view>
37 </template>
38
39 <script setup>
40 const porps = defineProps({
41 pic: {
42 type: String
43 },
44 title: {
45 type: String
46 },
47 card: {
48 type: String
49 },
50 timer: {
51 type: String
52 },
53 item: {}
54 });
55 </script>
56
57 <style lang="scss">
58 .big-box {
59 width: 100%;
60 padding: 25rpx 0;
61
62 .hr {
63 width: 100%;
64 border-bottom: 1rpx solid #e5e5e5;
65 padding-top: 25rpx;
66 }
67
68 .list-box {
69 width: 100%;
70 height: 180rpx;
71 display: flex;
72
73 .image {
74 width: 270rpx;
75 height: 180rpx;
76 padding-right: 25rpx;
77
78 .img {
79 width: 270rpx;
80 height: 180rpx;
81 border-radius: 15rpx;
82 }
83 }
84
85 .text {
86 margin-left: 20rpx;
87
88 .text-title {
89 text-align: left;
90 font-size: 30rpx;
91 font-family: PingFang SC;
92 font-weight: 400;
93 color: #000000;
94 }
95
96 .text-card {
97 font-size: 20rpx;
98 width: 94rpx;
99 height: 32rpx;
100 margin-top: 57rpx;
101 text-align: center;
102 font-family: PingFang SC;
103 font-weight: 400;
104 color: #ffffff;
105 border-radius: 16px 16px 16px 0px;
106 }
107
108 .color1 {
109 background: linear-gradient(270deg, #54e1b9, #00caa6);
110 }
111
112 .color2 {
113 background: linear-gradient(270deg, #be8efb, #a76df4);
114 }
115
116 .color3 {
117 background: linear-gradient(90deg, #f83841, #f76d74);
118 }
119
120 .color4 {
121 background: linear-gradient(90deg, #fea449, #ffb95f);
122 }
123
124 .color5 {
125 background: linear-gradient(270deg, #d9d9d9, #bcbcbc);
126 }
127 }
128 }
129 }
130 </style>
...@@ -3,8 +3,9 @@ ...@@ -3,8 +3,9 @@
3 3
4 4
5 // staging 5 // staging
6 const baseUrl_api = "http://192.168.1.118:8080"; 6 const baseUrl_api = "http://192.168.1.118:6688";
7 // const baseUrl_api = "http://123.60.96.243:6688";
7 8
8 export default { 9 export default {
9 baseUrl_api 10 baseUrl_api
10 };
...\ No newline at end of file ...\ No newline at end of file
11 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -38,7 +38,8 @@ ...@@ -38,7 +38,8 @@
38 "quickapp" : {}, 38 "quickapp" : {},
39 /* 小程序特有相关 */ 39 /* 小程序特有相关 */
40 "mp-weixin" : { 40 "mp-weixin" : {
41 "appid" : "wx5d51e8ed31bbdbb7",//J系统 41 "appid" : "wx5d51e8ed31bbdbb7", //J系统
42
42 // "appid" : "wx70f16625f10de4fe",//新跆联 43 // "appid" : "wx70f16625f10de4fe",//新跆联
43 // "appid" : "wx5e2471ed6210c3a6", 44 // "appid" : "wx5e2471ed6210c3a6",
44 "setting" : { 45 "setting" : {
...@@ -48,7 +49,9 @@ ...@@ -48,7 +49,9 @@
48 }, 49 },
49 "usingComponents" : true, 50 "usingComponents" : true,
50 "permission" : {}, 51 "permission" : {},
51 "optimization":{"subPackages":true} 52 "optimization" : {
53 "subPackages" : true
54 }
52 }, 55 },
53 "mp-alipay" : { 56 "mp-alipay" : {
54 "usingComponents" : true 57 "usingComponents" : true
...@@ -62,5 +65,10 @@ ...@@ -62,5 +65,10 @@
62 "uniStatistics" : { 65 "uniStatistics" : {
63 "enable" : false 66 "enable" : false
64 }, 67 },
65 "vueVersion" : "3" 68 "vueVersion" : "3",
69 "h5" : {
70 "router" : {
71 "mode" : "history"
72 }
73 }
66 } 74 }
......
...@@ -3,21 +3,18 @@ ...@@ -3,21 +3,18 @@
3 <view class="formBox"> 3 <view class="formBox">
4 <uni-forms ref="baseForm" :modelValue="baseFormData"> 4 <uni-forms ref="baseForm" :modelValue="baseFormData">
5 <uni-forms-item label="姓名" required> 5 <uni-forms-item label="姓名" required>
6 <uni-easyinput v-model="baseFormData.name" placeholder="请输入姓名" /> 6 <uni-easyinput disabled v-model="baseFormData.nickName" placeholder="请输入姓名" />
7 </uni-forms-item> 7 </uni-forms-item>
8 <uni-forms-item label="身份证" required> 8 <uni-forms-item label="身份证" required>
9 <uni-easyinput v-model="baseFormData.telno" placeholder="请输入身份证号码" /> 9 <uni-easyinput disabled v-model="baseFormData.card" placeholder="请输入身份证号码" />
10 </uni-forms-item>
11 <uni-forms-item label="备注说明">
12 <uni-easyinput type="textarea" v-model="baseFormData.requirement" placeholder="请输入需求描述" />
13 </uni-forms-item> 10 </uni-forms-item>
14 </uni-forms> 11 </uni-forms>
15 <button type="primary" @click="submit">核实报名信息</button> 12 <button type="primary" @click="goPay">点击进入培训缴费</button>
16 </view> 13 </view>
17 </view> 14 </view>
18 15
19 <uni-popup ref="alertPayOk" type="dialog"> 16 <uni-popup ref="alertPayOk" type="dialog">
20 <uni-popup-dialog type="success" confirmText="确定" content="用户不存在或信息填写错误请再次核实" @confirm="goIndex"> 17 <uni-popup-dialog type="success" confirmText="确定" content="用户不存在或信息填写错误请再次核实">
21 </uni-popup-dialog> 18 </uni-popup-dialog>
22 </uni-popup> 19 </uni-popup>
23 </template> 20 </template>
...@@ -37,49 +34,22 @@ ...@@ -37,49 +34,22 @@
37 const alertPayOk = ref(null); 34 const alertPayOk = ref(null);
38 const isActive = ref(null); 35 const isActive = ref(null);
39 const formData = ref({}) 36 const formData = ref({})
40 const baseFormData = ref({}) 37 const baseFormData = ref({})
38 const id = ref()
41 39
42 onReady(()=>{ 40 onLoad((option) => {
43 // 修改页头标题 41 id.value = option.id
44 uni.setNavigationBarTitle({ 42 api.checkReport().then((res)=>{
45 title: formData.value.name 43 baseFormData.value = res.data
46 }); 44 })
47 })
48 onShow(() => {
49
50 }) 45 })
51 46
52 function goIndex() { 47
53 48 function goPay(){
54 } 49 let path = `/pages_hotel/hotel/hotelDetail?id=${id.value}`;
55 function submit(){ 50 uni.navigateTo({
56 // 姓名 51 url: path
57 if(!baseFormData.value.name){ 52 });
58 uni.showToast({
59 title: '请输入姓名',
60 icon: 'none',
61 duration: 2000
62 });
63 return
64 }
65 // 手机号
66 if(!baseFormData.value.telno){
67 uni.showToast({
68 title: '请输入手机号',
69 icon: 'none',
70 duration: 2000
71 });
72 return
73 }
74
75 api.checkReport().then((res)=>{
76 if(res.data.userNo){
77
78 } else {
79 alertPayOk.value.open()
80 }
81 })
82
83 } 53 }
84 </script> 54 </script>
85 55
......
...@@ -6,24 +6,34 @@ ...@@ -6,24 +6,34 @@
6 <text>{{venue.venueName}}</text> 6 <text>{{venue.venueName}}</text>
7 </view> --> 7 </view> -->
8 8
9 <!-- <swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval" 9 <swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
10 :duration="duration" indicator-color="rgba(255,255,255,0.6)" indicator-active-color="#fff"> 10 :duration="duration" indicator-color="rgba(255,255,255,0.6)" indicator-active-color="#fff">
11 <swiper-item v-for="(p, index) in venue.venuePicArr" :key="index"> 11 <!-- <swiper-item v-for="(p, index) in venue.venuePicArr" :key="index">
12 <view class="swiper-item"> 12 <view class="swiper-item">
13 <image mode="aspectFill" :src="p"></image> 13 <image mode="aspectFill" :src="p"></image>
14 </view> 14 </view>
15 </swiper-item> -->
16 <swiper-item>
17 <view class="swiper-item">
18 <image mode="aspectFill" src="/static/fm.jpg"></image>
19 </view>
15 </swiper-item> 20 </swiper-item>
16 </swiper> --> 21 </swiper>
17 </view> 22 </view>
18 <view class="infoArea"> 23 <view class="infoArea">
24
25
26
19 <view class="contentbox"> 27 <view class="contentbox">
20 <view class="name"> 28 <view class="name">
21 国电培训中心简介 29 国电培训中心简介
22 <view class="content" v-html="venue.introdution"> 30 <!-- <view class="content" v-html="venue.introdution"> -->
31 <view class="content" style="margin-top: 20rpx;">
32 国网江苏省电力公司营销技能培训中心办公室地址位于传统的江南文化、鱼米之乡盐城,盐城 盐城市大庆东路66号,于2008年10月30日在盐城市工商行政管理局注册成立,注册资本为400万元人民币,在公司发展壮大的15年里,我们始终为客户提供好的产品和技术支持、健全的售后服务,我公司主要经营住宿服务;电力人才交流、培训、信息服务。,我们有好的产品和专业的销售和技术团队,我公司属于盐城电力供应业黄页行业,如果您对我公司的产品服务有兴趣,期待您在线留言或者来电咨询
23 </view> 33 </view>
24 </view> 34 </view>
25 <view class="n9" @click="makeCall"> 35 <view class="n9" @click="makeCall">
26 联系电话:{{ venue.venueTelno }} 36 联系电话:{{ venue.venueTelno||'0515-66886668' }}
27 <image style="position: relative;top: 18rpx;" class="phoneIcon" src="/static/phone.png"></image> 37 <image style="position: relative;top: 18rpx;" class="phoneIcon" src="/static/phone.png"></image>
28 </view> 38 </view>
29 <view class="mapshow" @click="gogo"> 39 <view class="mapshow" @click="gogo">
...@@ -34,40 +44,32 @@ ...@@ -34,40 +44,32 @@
34 44
35 <view class="addressBox"> 45 <view class="addressBox">
36 <view class="adtext"> 46 <view class="adtext">
37 <text>{{ venue.venueAddress }}</text> 47 <text>{{ venue.venueAddress || '盐城市城南新区新园路29号'}}</text>
38 <image class="goicon" src="/static/navigation.png"></image> 48 <image class="goicon" src="/static/navigation.png"></image>
39 49
40 </view> 50 </view>
41 </view> 51 </view>
42 </view> 52 </view>
43 </view> 53 </view>
44 <view class="contentbox"> 54 <view class="contentbox" style="padding: 0;">
55 <view class="content">
56 <uni-grid :column="4" :highlight="true" :showBorder="false">
57 <uni-grid-item v-for="(item, index) in list" :index="index" :key="index">
58 <view class="grid-item-box" @click="goItem(item)">
59 <image :src="item.partLogo" class="image" mode="aspectFill" />
60 <text class="text">{{ item.name }}</text>
61 </view>
62 </uni-grid-item>
63 </uni-grid>
64 </view>
65 </view>
66
67 <view class="contentbox" v-if="venue.notice">
45 <view class="t">培训公告</view> 68 <view class="t">培训公告</view>
46 <rich-text class="richText" :nodes="venue.notice"></rich-text> 69 <rich-text class="richText" :nodes="venue.notice"></rich-text>
47 </view> 70 </view>
48 <view class="contentbox">
49 <view class="content">
50 <uni-grid :column="4" :highlight="true" :showBorder="false">
51 <uni-grid-item v-for="(item, index) in list" :index="index" :key="index">
52 <view class="grid-item-box" @click="goItem(item)">
53 <image :src="app.globalData.fileUrl + item.partLogo" class="image" mode="aspectFill" />
54 <text class="text">{{ item.name }}</text>
55 </view>
56 </uni-grid-item>
57 </uni-grid>
58 </view>
59 </view>
60 </view> 71 </view>
61 72
62
63 <uni-popup class="popYanZhengBox" ref="popYanZheng" type="center">
64 <view class="popup-content">
65 <view class="t">温馨提示</view>
66 <view class="p">该微信未绑定系统内手机号,绑定手机号后正常使用。</view>
67 <button class="start" type="default" open-type="getPhoneNumber"
68 @getphonenumber="decryptPhoneNumber">绑定手机号</button>
69 </view>
70 </uni-popup>
71 </view> 73 </view>
72 </template> 74 </template>
73 75
...@@ -75,8 +77,7 @@ ...@@ -75,8 +77,7 @@
75 import * as api from '@/common/api.js'; 77 import * as api from '@/common/api.js';
76 import * as loginServer from '@/common/login.js'; 78 import * as loginServer from '@/common/login.js';
77 import { 79 import {
78 getWxUser, 80 showLogin
79 getWxUserPhone
80 } from '@/common/login.js'; 81 } from '@/common/login.js';
81 import { 82 import {
82 onLoad, 83 onLoad,
...@@ -122,11 +123,23 @@ ...@@ -122,11 +123,23 @@
122 const svId = ref(null); 123 const svId = ref(null);
123 const list = ref([{ 124 const list = ref([{
124 id: 0, 125 id: 0,
125 name: '培训助手', 126 name: '培训助手',
127 partLogo:'/static/btn01.png',
126 path: '/pages_hotel/hotel/index' 128 path: '/pages_hotel/hotel/index'
127 }, { 129 }, {
128 id: 1, 130 id: 1,
129 name: '我的', 131 name: '预订',
132 partLogo:'/static/btn02.png',
133 path: '/pages_hotel/hotel/index'
134 }, {
135 id: 2,
136 name: '在线学习',
137 partLogo:'/static/btn03.png',
138 path: ''
139 }, {
140 id: 3,
141 name: '我的',
142 partLogo:'/static/btn04.png',
130 path: '/pages_hotel/hotel/mycenter' 143 path: '/pages_hotel/hotel/mycenter'
131 }]); 144 }]);
132 145
...@@ -142,10 +155,14 @@ ...@@ -142,10 +155,14 @@
142 onLoad(option => { 155 onLoad(option => {
143 if (option.scene) { 156 if (option.scene) {
144 proId = decodeURIComponent(option.scene); 157 proId = decodeURIComponent(option.scene);
145 } else { 158 }
146 proId = option.proId; 159 if(option.relogo){
160 showLogin(()=>{
161 uni.redirectTo({
162 url: '/pages/index/index'
163 });
164 })
147 } 165 }
148
149 }); 166 });
150 onReady(() => { 167 onReady(() => {
151 proxy._mapContext = uni.createMapContext("map", this) 168 proxy._mapContext = uni.createMapContext("map", this)
...@@ -276,11 +293,9 @@ ...@@ -276,11 +293,9 @@
276 function goItem(item) { 293 function goItem(item) {
277 if (item.path) { 294 if (item.path) {
278 let path = item.path 295 let path = item.path
279 // if (checkUserPhone(path)) {
280 uni.navigateTo({ 296 uni.navigateTo({
281 url: item.path 297 url: item.path
282 }); 298 });
283 // }
284 } else { 299 } else {
285 uni.showToast({ 300 uni.showToast({
286 title: `暂未开放`, 301 title: `暂未开放`,
...@@ -290,7 +305,10 @@ ...@@ -290,7 +305,10 @@
290 305
291 } 306 }
292 </script> 307 </script>
293 <style scope lang="scss"> 308 <style scope lang="scss">
309 .grid-item-box{text-align: center;
310 image{width: 120rpx;height: 120rpx;}
311 }
294 .singlePop { 312 .singlePop {
295 max-height: 60vh; 313 max-height: 60vh;
296 overflow: auto; 314 overflow: auto;
......
1 <template>
2 <!-- 报名 -->
3 <view class="box">
4 <view class="box1" v-if="reactvt == 0">
5 <view class="header"><image class="image" mode="aspectFit" :src="userList.picUrl"></image></view>
6 <view class="body">
7 <view class="liner">
8 <view class="liner-left">姓名</view>
9 <view class="liner-right">{{ userList.realName }}</view>
10 </view>
11 <view class="liner">
12 <view class="liner-left">性别</view>
13 <view class="liner-right">{{ userList.sex }}</view>
14 </view>
15 <view class="liner">
16 <view class="liner-left">出生日期</view>
17 <view class="liner-right">{{ birthday }}</view>
18 </view>
19 <view class="liner">
20 <view class="liner-left">证件类型</view>
21 <view class="liner-right">{{ userList.identify }}</view>
22 </view>
23 <view class="liner">
24 <view class="liner-left">证件号</view>
25 <view class="liner-right">{{ userList.identifyCode }}</view>
26 </view>
27 <view class="liner">
28 <view class="liner-left">联系方式</view>
29 <view class="liner-right">{{ userList.phone }}</view>
30 </view>
31 </view>
32 <view class="foot "><view class="button" @click="nextFN(1)">下一步</view></view>
33 </view>
34
35 <trainApply2
36 v-show="reactvt == 1"
37 :hotelList="hotelList"
38 :examProjectsList="examProjectsList"
39 :trainProjectsList="trainProjectsList"
40 @nextFN="nextFN"
41 :id="id"
42 />
43 <trainApply3
44 v-if="reactvt == 2"
45 :signId="signId"
46 :id="id"
47 :hotelList="hotelList"
48 :projectIdsArray="projectIdsArray"
49 :examIdsArry="examIdsArry"
50 @nextFN="nextFN"
51 />
52 </view>
53 </template>
54
55 <script setup>
56 import trainApply2 from '@/components/train/train-apply/train-apply.vue';
57 import trainApply3 from '@/components/train/train-apply-three/train-apply-three.vue';
58 import { onLoad, onReady, onShareAppMessage, onShareTimeline, onPullDownRefresh } from '@dcloudio/uni-app';
59 import { ref, getCurrentInstance, reactive, toRefs } from 'vue';
60 import * as train from '@/common/train.js';
61 const reactvt = ref(0);
62 const id = ref();
63 const trainProjectsList = ref([]);
64 const examProjectsList = ref([]);
65 const hotelList = ref();
66 const birthday = ref();
67 const projectIdsArray = ref();
68 const examIdsArry = ref();
69 const signId = ref();
70 const data = reactive({
71 addForm: {},
72 userList: {}
73 });
74 const { addForm, userList } = toRefs(data);
75 onLoad(option => {
76 const arr = option.data.split(',');
77 id.value = arr[0];
78 initData();
79 });
80 // 获取详情数据
81 async function initData() {
82 addForm.value.id = id.value;
83 let res = await train.trainParticulars(addForm.value);
84 signId.value = res.data.signId;
85 res.data.examProjectsList.forEach(item => {
86 if (item.isNecessary == 1) {
87 item.check = true;
88 } else {
89 item.check = false;
90 }
91 examProjectsList.value.push(item);
92 });
93
94 res.data.trainProjectsList.forEach(item => {
95 if (item.isNecessary == 1) {
96 item.check = true;
97 } else {
98 item.check = false;
99 }
100 trainProjectsList.value.push(item);
101 });
102
103 hotelList.value = res.data.hotelList;
104 userList.value = res.data.userList[0];
105 birthday.value = userList.value.birth.slice(0, 10);
106 }
107
108 // 下一步
109 const nextFN = (e, val, arr) => {
110 reactvt.value = e;
111 projectIdsArray.value = val;
112 examIdsArry.value = arr;
113 };
114 </script>
115
116 <style scoped lang="scss">
117 .box {
118 position: relative;
119 min-height: 1442rpx;
120 }
121
122 .box1 {
123 background-color: #fff;
124 padding: 30rpx;
125 }
126
127 .header {
128 text-align: center;
129 margin-bottom: 30rpx;
130
131 .image {
132 border-radius: 15rpx;
133 width: 230rpx;
134 height: 280rpx;
135 background-color: #eeeeee;
136 }
137 }
138
139 .body {
140 .liner {
141 display: flex;
142 justify-content: space-between;
143 border-top: 1rpx solid #e6e6e6;
144 height: 100rpx;
145 line-height: 100rpx;
146 }
147
148 .liner-left {
149 font-size: 30rpx;
150 font-family: PingFang SC;
151 font-weight: 400;
152 color: #4c5359;
153 }
154
155 .liner-right {
156 font-size: 30rpx;
157 font-family: PingFang SC;
158 font-weight: 400;
159 color: #000000;
160 }
161 }
162
163 .foot {
164 background-color: #ffffff;
165 padding: 20rpx 0;
166 position: absolute;
167 left: 0;
168 bottom: 0;
169 width: 100%;
170
171 .button {
172 margin: 0 auto;
173 height: 80rpx;
174 width: 500rpx;
175 text-align: center;
176 font-size: 32rpx;
177 font-family: PingFang SC;
178 font-weight: 500;
179 color: #ffffff;
180 line-height: 80rpx;
181 background: linear-gradient(270deg, #54e1b9, #00caa6);
182 border-radius: 40rpx;
183 }
184 }
185 </style>
1 <template>
2 <view class="box">
3 <view class="title">
4 <view class="navSerch">
5 <view class="serch">
6 <uni-search-bar class="uni-mt-10" radius="30" placeholder="搜索" clearButton="auto" Button="none"
7 cancelText="" v-model="name" bgColor="#F4F6FA" @confirm="search" @blur="blur" @clear="clear" />
8 </view>
9 </view>
10 <view class="searchLeft">
11 <uni-section title="" type="line">
12 <uni-data-select v-model="name" :localdata="range" @change="change" :clear="false"
13 placeholder="全部"></uni-data-select>
14 </uni-section>
15 </view>
16 </view>
17 <view>
18
19 <view class="nav-box">
20 <view class="nav-ul">
21 <view class="nva-li" @click="nvaText(index)" :class="{nt:Nindex==index}"
22 v-for="(item,index) in items" :key="index">
23 {{item}}
24 </view>
25 </view>
26 </view>
27
28 <view class="content">
29 <view class="taber">
30 <view v-for="item in list" :key="item.trainId" @click="detail(item)">
31 <uniList :pic="item.cover" :title="item.trainName" :card="item.statusStr"
32 :timer="filterTime(item.enrollEndStr) "></uniList>
33 </view>
34 </view>
35 </view>
36 <view><uni-load-more :status="status" :content-text="contentText" /></view>
37 </view>
38 </view>
39 </template>
40
41 <script setup>
42 import uniList from '@/components/train/ulist/ulist';
43 import * as train from '@/common/train.js';
44 import {
45 onLoad,
46 onReady,
47 onShareAppMessage,
48 onShareTimeline,
49 onPullDownRefresh,
50 onReachBottom
51 } from '@dcloudio/uni-app';
52 import {
53 ref,
54 getCurrentInstance,
55 reactive,
56 toRefs
57 } from 'vue';
58
59 const searchValue = ref();
60 const items = ref(['全部', '报名中', '进行中', '即将开始', '报名未开始', '培训未开始', '已结束']);
61 const current = ref(0);
62 const name = ref();
63 const Nindex = ref(0)
64 const range = ref([{
65 value: 1,
66 text: '全部'
67 },
68 {
69 value: 2,
70 text: '报名中'
71 },
72 {
73 value: 3,
74 text: '进行中'
75 },
76 {
77 value: 4,
78 text: '即将开始'
79 },
80 {
81 value: 5,
82 text: '报名未开始'
83 },
84 {
85 value: 6,
86 text: '培训未开始'
87 },
88 {
89 value: 7,
90 text: '已结束'
91 }
92 ]);
93 const list = ref();
94 const total = ref();
95 // noMore没有更多了
96 // loading加载中
97 // more下来加载
98 const status = ref('more');
99 const flag = ref();
100 const data = reactive({
101 addForm: {},
102 contentText: {
103 contentdown: '',
104 contentrefresh: '加载中',
105 contentnomore: '没有更多'
106 }
107 });
108 const {
109 addForm,
110 contentText
111 } = toRefs(data);
112
113 // 加载培训列表数据
114 onLoad(option => {
115 initData();
116
117 });
118
119 async function initData() {
120 addForm.value.flag = current.value;
121 addForm.value.pageNum = 1;
122 addForm.value.pageSize = 10;
123 let res = await train.tainList(addForm.value);
124 list.value = res.rows;
125 total.value = res.rows;
126 }
127
128 // 页面跳转
129 // function goRenew() {
130 // let path = `/pages/usercenter/mycard/renew/`;
131 // uni.navigateTo({
132 // url: path
133 // });
134 // }
135
136 // 详情页
137 function detail(item) {
138 let path = '/pages/train/detailPage/detailPage?item=' + encodeURIComponent(JSON.stringify(item));
139 uni.navigateTo({
140 url: path
141 });
142 }
143
144 function nvaText(index) {
145 Nindex.value = index
146 current.value = index
147 initData()
148 console.log(index);
149 }
150
151
152 function filterTime(num) {
153 if (num) return num.slice(0, 16)
154 }
155
156
157 // 下拉框
158 function change(e) {
159 if (e) {
160 addForm.value.flag = e - 1;
161 current.value = e - 1;
162 Nindex.value = e - 1
163 console.log(e);
164 initData();
165 }
166 }
167
168 // 搜索
169 function search(res) {
170 if (res.value != '') {
171 addForm.value.trainName = res.value;
172 initData();
173 }
174
175 }
176
177 // 搜索清空按钮
178 function clear(res) {
179 addForm.value.trainName = '';
180 initData();
181 }
182
183 // 下来刷新
184 onPullDownRefresh(() => {
185 addForm.value.flag = 0;
186 initData();
187 wx.stopPullDownRefresh();
188 });
189
190 // 上拉加载
191 onReachBottom(async () => {
192 if (list.value.length == total.value) {
193 status.value = 'noMore';
194 return false;
195 } else {
196 status.value = 'loading';
197 addForm.value.pageNum += 1;
198 let res = await train.tainList(addForm.value);
199 let arr = res.rows;
200 list.value = list.value.concat(arr);
201 total.value = res.total;
202 status.value = 'noMore';
203 }
204 });
205 </script>
206
207 <style lang="scss">
208 .uni-section-header {
209 display: none !important;
210 }
211
212 .box {
213 background-color: #fff;
214 }
215
216 .nav-box {
217 overflow-x: scroll;
218 }
219
220 .nav-ul {
221 display: flex;
222 justify-content: space-between;
223 width: 900rpx;
224
225 }
226
227 .nva-li {
228 font-size: 26rpx;
229 padding: 10rpx 0rpx;
230 margin: 0 15rpx;
231
232 }
233
234 .nt {
235 font-size: 30rpx;
236 font-weight: 400;
237 border-bottom: 2rpx solid #54e1b9;
238 }
239
240
241 .taber {
242 width: 100%;
243 padding: 25rpx 30rpx;
244 padding-bottom: 0;
245 }
246
247 .segmented-control__text {
248 font-size: 26rpx !important;
249 font-family: PingFang SC !important;
250 font-weight: 400 !important;
251 color: #4c5359 !important;
252 }
253
254 .segmented-control__item--text {
255 border-bottom: 4rpx solid #54e1b9;
256 font-size: 30rpx !important;
257 font-family: PingFang SC !important;
258 font-weight: 500 !important;
259 color: #2b3133 !important;
260 }
261
262 .title {
263 display: flex;
264 justify-content: space-between;
265 padding-left: 20rpx;
266
267 .navSerch {
268 width: 580rpx;
269 position: relative;
270
271 .serch {
272 width: 590rpx;
273 position: absolute;
274 right: -38rpx;
275 }
276 }
277
278 .searchLeft {
279 font-size: 26rpx;
280 font-family: PingFang SC;
281 font-weight: 400;
282 color: #000000;
283 margin-top: 25rpx;
284 display: flex;
285 }
286
287 .uni-searchbar__cancel {
288 display: none;
289 }
290
291 :deep(.uni-select) {
292 border: 0;
293 // padding-left: 20rpx;
294 }
295
296 :deep(.uni-select__input-text) {
297 font-size: 26rpx;
298 font-family: PingFang SC;
299 font-weight: 400;
300 color: #000000;
301 margin-right: 14rpx;
302 width: 110rpx;
303 text-align: right;
304 }
305
306 :deep(.uni-select__selector-item) {
307 // padding: 0 auto;
308 text-align: center;
309 font-size: 26rpx;
310 font-family: PingFang SC;
311 font-weight: 400;
312 color: #000000;
313 }
314 }
315
316 // 搜索框
317 .search-result {
318 padding-top: 10rpx;
319 padding-bottom: 20rpx;
320 text-align: center;
321 }
322
323 .search-result-text {
324 text-align: center;
325 font-size: 14rpx;
326 color: #666;
327 }
328
329 .uni-searchbar {
330 padding-right: 0rpx !important;
331 padding-left: 20rpx !important;
332 }
333
334 .uni-searchbar__box {
335 padding-right: 0rpx !important;
336 }
337
338 .example-body {
339 /* #ifndef APP-NVUE */
340 display: block;
341 /* #endif */
342 padding: 0px;
343 }
344
345 .uni-mt-10 {
346 width: 600rpx;
347 }
348
349 // 分段器
350 .example-body {
351 /* #ifndef APP-NVUE */
352 display: flex;
353 /* #endif */
354 flex-direction: row;
355 padding: 0;
356 }
357
358 .uni-common-mt {
359 margin-top: 30rpx;
360 }
361
362 .uni-padding-wrap {
363 // width: 750rpx;
364 padding: 0rpx 30rpx;
365 }
366
367 .content {
368 /* #ifndef APP-NVUE */
369 display: flex;
370 /* #endif */
371 justify-content: center;
372 // height: 1235rpx;
373 text-align: center;
374 }
375
376 .content-text {
377 font-size: 14rpx;
378 color: #666;
379 }
380
381 .color-tag {
382 width: 25rpx;
383 height: 25rpx;
384 }
385
386 .uni-list {
387 flex: 1;
388 }
389
390 .uni-list-item {
391 /* #ifndef APP-NVUE */
392 display: flex;
393 /* #endif */
394 flex: 1;
395 flex-direction: row;
396 background-color: #ffffff;
397 }
398
399 .uni-list-item__container {
400 padding: 12rpx 15rpx;
401 width: 100%;
402 flex: 1;
403 position: relative;
404 /* #ifndef APP-NVUE */
405 display: flex;
406 box-sizing: border-box;
407 /* #endif */
408 flex-direction: row;
409 justify-content: space-between;
410 align-items: center;
411 border-bottom-style: solid;
412 border-bottom-width: 1rpx;
413 border-bottom-color: #eee;
414 }
415
416 .uni-list-item__content-title {
417 font-size: 14rpx;
418 }
419
420 .chat-custom-right {
421 flex: 1;
422 /* #ifndef APP-NVUE */
423 display: flex;
424 /* #endif */
425 flex-direction: column;
426 justify-content: space-between;
427 align-items: flex-end;
428 }
429
430 .chat-custom-text {
431 font-size: 12rpx;
432 color: #999;
433 }
434 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view class="fixedbody">
3 <view class="successBox">
4 <view class="doneIcon"><uni-icons type="checkbox-filled" size="100" color="#1EC886"></uni-icons></view>
5
6 <!-- <view v-if="chargeFlag == '0'" style="margin: 0 0 80rpx;">报名成功</view> -->
7 <view style="margin: 0 0 80rpx;">
8 <view>支付成功</view>
9 <view class="ppp">
10 订单金额
11 <text class="orange">{{ amount }}</text>
12 </view>
13 <view class="ppp">
14 交易方式
15 <text v-if="payType == '2'">会员卡支付</text>
16 <text v-else-if="payType == '0'">微信支付</text>
17 <text v-else-if="payType == '1'">线下支付</text>
18 </view>
19 </view>
20 <button class="btn btn1" style="margin: auto;" @click="goDetail">查看订单</button>
21 </view>
22 </view>
23 </template>
24
25 <script setup>
26 import { reactive, toRefs } from 'vue';
27 import * as match from '@/common/match.js';
28 import { onLoad } from '@dcloudio/uni-app';
29 const data = reactive({
30 chargeFlag: '',
31 amount: '',
32 payType: ''
33 });
34 const { chargeFlag, payType, amount } = toRefs(data);
35 const app = getApp();
36 let cptId;
37 let groupId;
38 let orderId;
39 onLoad(option => {
40 if (option) {
41 payType.value = option.payType;
42 amount.value = option.payTotal;
43 console.log(option);
44 }
45 });
46 function goDetail() {
47 // 前往订单详情
48 uni.redirectTo({
49 url: `/pages/usercenter/myTrain/index/index?current=${1}`
50 });
51 }
52 </script>
53
54 <style lang="scss" scoped>
55 .successBox {
56 text-align: center;
57 }
58 .doneIcon {
59 margin: 5vh auto;
60 }
61 .ppp {
62 text-align: left;
63 font-size: 30rpx;
64 padding: 0 30rpx;
65 color: #a0a0a0;
66 margin: 20rpx 0;
67 text {
68 float: right;
69 color: #000;
70 }
71 }
72 </style>
1 <template>
2 <view>
3 <view>请完善您的收件信息</view>
4 <uni-forms ref="baseForm" :modelValue="baseFormData">
5 <uni-forms-item label="收件人" required>
6 <uni-easyinput v-model="baseFormData.name" placeholder="请输入姓名" />
7 </uni-forms-item>
8 <uni-forms-item label="联系电话" required>
9 <uni-easyinput v-model="baseFormData.phone" placeholder="请输入联系电话" />
10 </uni-forms-item>
11 <uni-forms-item label="省/市/区/县" required>
12 <uni-data-picker placeholder="请选择 省/市/区/县" popup-title="请选择所在地区" :localdata="dataTree"
13 v-model="baseFormData.areaInfo" @change="onchange" @nodeclick="onnodeclick"
14 @popupopened="onpopupopened" @popupclosed="onpopupclosed">
15 </uni-data-picker>
16 </uni-forms-item>
17 <uni-forms-item label="详细地址" required>
18 <uni-easyinput v-model="baseFormData.address" placeholder="请输入详细地址" />
19 </uni-forms-item>
20
21 </uni-forms>
22 </view>
23 </template>
24
25 <script setup>
26 import {
27 ref
28 } from 'vue'
29 const dataTree = ref([{
30 text: "江苏",
31 value: "00",
32 children: [{
33 text: "无锡",
34 value: "001"
35 }, {
36 text: "苏州",
37 value: "002"
38 }]
39 }]);
40 const baseFormData = ref({});
41 </script>
42
43 <style>
44
45 </style>
1 <template>
2 <view class="graybg">
3 <view class="pads">
4 <view class="box">
5 <view class="billItem" @click="showDetail(b)" v-for="b in billsList" :key="b.id">
6 <!-- parentType -->
7 <view>
8 订单编号:
9 <text>{{ b.orderCode }}</text>
10 </view>
11 <view v-if="b.verificationCode">
12 验证码:
13 <text>{{ b.verificationCode }}</text>
14 </view>
15 <view v-if="b.siteName">
16 预订项目:
17 <text>{{b.projectName||b.sonList[0].projectName}} {{ b.siteName }}</text>
18 </view>
19 <view v-if="b.orderDate">
20 预订时间:
21 <text>{{ b.orderDate }} {{ b.orderTimePeriod.replace(/,/,'-') }}</text>
22 </view>
23 <view class="billFoot">
24 <view class="status" v-if="b.payStatus == 1">{{ b.payStatusStr }}</view>
25 <view class="status warning" v-else>{{ b.payStatusStr }}</view>
26 <view class="price">
27 <text class="tip" v-if="b.payStatus == 0 && b.parentType == 2">*子订单不支持独立支付</text>
28 <!--payStatus 0 未支付 1 已支付 2 部分退款 3 已退款-->
29 <!--orderType 预定类型 0 普通预定 1 长租预定 2 预留 3 锁场 -->
30
31 <text v-if="b.payStatus==0">原价¥{{b.orderAmount}}</text>
32 <text v-if="b.payStatus>0">{{b.finalOrderAmount}}</text>
33 <text class="danger" v-if="b.payStatus==2||b.payStatus==3">
34 (已退款¥{{b.refundAmount}})</text>
35
36
37 <button class="billbtn" v-if="b.payStatusStr == '未支付' && b.parentType != 2" @click.stop="goBooking(b)">去支付</button>
38 </view>
39 </view>
40 </view>
41
42 <view v-show="isLoadMore" @click="clickLoadMore">
43 <uni-load-more :status="loadStatus" :content-text="contentText"></uni-load-more>
44 </view>
45 <view class="nodata" v-if="billsList.length==0">
46 <image mode="aspectFit" src="/static/nodata.png"></image>
47 </view>
48 </view>
49 </view>
50 </view>
51 </template>
52
53 <script setup>
54 import { ref } from 'vue';
55 import { onShow,onPullDownRefresh,onReachBottom} from '@dcloudio/uni-app';
56 import * as api from '@/common/api.js';
57 import _ from 'lodash';
58 const billsList = ref([]);
59 const alertDialog = ref(null);
60 const isLoadMore = ref(false);
61 const loadStatus = ref('loading');
62 const contentText = ref({
63 contentdown: '点击查看更多',
64 contentrefresh: '正在加载...',
65 contentnomore: '没有更多数据了'
66 })
67 const queryparam = ref({
68 pageNum:1,
69 pageSize: 10
70 })
71 onShow(() => {
72 billsList.value = []
73 getBills()
74 });
75 function clickLoadMore() {
76 if(loadStatus.value=='nomore'){
77 return
78 }
79 queryparam.value.pageNum+=1
80 getBills()
81
82 }
83 function getBills() {
84 isLoadMore.value = false
85 api.getMalist(queryparam.value).then(res => {
86 _.each(res.rows,(r)=>{
87 billsList.value.push(r)
88 })
89 // billsList.value = res.rows;
90 if(res.total < (queryparam.value.pageSize*queryparam.value.pageNum)){
91 isLoadMore.value = true
92 loadStatus.value='nomore'
93 } else {
94 isLoadMore.value = true
95 loadStatus.value='more'
96 }
97 });
98 }
99 function goBooking(b) {
100 let path = `/pages/index/booking?id=${b.id}`;
101 uni.navigateTo({
102 url: path
103 });
104 }
105 function showDetail(b) {
106 let path = `/pages/usercenter/billsDetail?id=${b.id}`;
107 uni.navigateTo({
108 url: path
109 });
110 }
111 function pay() {
112 alertDialog.value.open();
113 }
114 function dialogConfirm() {
115 // 微信支付
116 }
117 function dialogClose() {
118 alertDialog.value.close();
119 }
120 </script>
121
122 <style lang="scss" scoped>
123 .pads{padding:0 25rpx 70rpx;}
124 .billItem {
125 width: auto; padding-bottom: 1px;
126 .uni-input {
127 padding: 15rpx 0;
128 color: #000;
129 }
130 .billFoot{ margin-bottom: 20rpx;}
131 }
132 .rrcard .box {
133 padding: 0 0 1px;
134 margin: 20rpx 0 0;
135 }
136 .graybg {
137 background: #f7f8fa;
138 height: 100vh;
139 width: 100vw;
140 overflow: auto;
141 }
142 .whitebg {
143 background: #fff;
144 margin-top: 15rpx;
145 border-radius: 20rpx;
146 margin-bottom: 180rpx;
147 }
148 .payBtn {
149 width: 750rpx;
150 line-height: 90rpx;
151 height: 120rpx;
152 text-align: center;
153 background: #ff8124;
154 color: #ffffff;
155 font-size: 36rpx;
156 border-radius: 20rpx 20rpx 0px 0px;
157 position: fixed;
158 bottom: 0;
159 }
160 .uni-list-cell::after {
161 display: none;
162 }
163 .littleimgBox {
164 display: flex;
165 align-items: center;
166 }
167 .littleimg {
168 width: 50rpx;
169 height: 50rpx;
170 margin-right: 15rpx;
171 }
172 .padh20 {
173 padding: 0 25rpx;
174 }
175 .billFoot .tip {
176 font-size: 24rpx;
177 font-size: 24rpx;
178 color: #999;
179 font-weight: 500;
180 margin: 0 20rpx;
181 }
182 .billFoot text{white-space: nowrap;}
183 .billFoot text.danger{color: #da2a2a;}
184 </style>
1 <template>
2 <view>
3 <view class="title">{{cpt.name}}</view>
4
5 <view class="t">订单基本信息</view>
6 <view class="wBox">
7 <view>
8 <view class="pp">订单编号: <text>{{order.id}}</text></view>
9 <view class="pp">下单时间: <text>{{order.commitTime}}</text></view>
10 <view class="pp" v-if="order.groupName">报名参赛队: <text>{{order.groupName}}</text></view>
11 <view class="pp" v-if="order.needPay!='0'">支付方式:
12 <!-- 0 会员卡支付 1 微信支付 2 线下支付 -->
13 <text v-if="order.payType=='0'">会员卡支付</text>
14 <text v-if="order.payType=='1'">微信支付</text>
15 <text v-if="order.payType=='2'">线下支付</text>
16 </view>
17 <view class="pp" v-if="order.needPay!='0'">订单状态:
18 <text v-if="order.payStatus=='0'" class="orange">待支付</text>
19 <text v-if="order.payStatus=='1'" class="green">线下支付</text>
20 <text v-if="order.payStatus=='2'">付款中</text>
21 <text v-if="order.payStatus=='3'" class="green">已支付</text>
22 <text v-if="order.payStatus=='4'" class="red">退款中</text>
23 <text v-if="order.payStatus=='5'" class="red">已退款</text>
24 <text v-if="order.payStatus=='6'">退款核销中</text>
25 </view>
26 <view class="pp" v-if="order.payTime">付款时间: <text>{{order.payTime}}</text></view>
27 <view class="pp" v-if="order.needPay=='0'">订单金额: <text class="green" style="font-size: 34rpx;">免费订单</text></view>
28 <view class="pp" v-if="order.needPay!='0'">订单金额: <text>{{order.totalAmount}}</text></view>
29 <view class="pp" v-if="order.totalPayAmount">付款金额: <text style="font-size: 34rpx;" class="orange">{{order.totalPayAmount}}</text></view>
30
31 </view>
32 </view>
33
34 <view class="t" v-if="order.payType == '2'">收款方</view>
35 <view class="wBox" v-if="order.payType == '2'">
36 <view>
37 <view class="pp">收款账户:<text>{{billData.orgBankAccount}}</text></view>
38 <view class="pp">开户银行: <text>{{billData.orgBankName}}</text></view>
39 <view class="pp">开户账号: <text>{{billData.orgBankAccountNum}}</text></view>
40
41 </view>
42 </view>
43 <view v-if="order.needPay!='0'">
44 <view class="t">费用明细</view>
45
46 <view class="wBox">
47 <!-- 报名费 -->
48 <view>
49 <view class="t">{{cptRegistrationFee.name}}</view>
50 <uni-collapse>
51 <uni-collapse-item :border="false" title-border="none">
52 <template v-slot:title>
53 <view class="h2">
54 <text v-if="cptRegistrationFee.count">{{cptRegistrationFee.count}}</text>
55 合计:<text class="orange">{{cptRegistrationFee.totalFee}}</text>
56 </view>
57 </template>
58 <!-- 人员列表 -->
59 <uni-list :border="false">
60 <uni-list-item :border="false" v-for="(m,index) in cptRegistrationFee.info" :key="index"
61 :thumb="m.personInfo.picUrl" thumb-size="lg" :title="m.personInfo.realName" :right-text="'¥'+ m.registrationFee">
62 </uni-list-item>
63 </uni-list>
64 </uni-collapse-item>
65 </uni-collapse>
66 </view>
67 </view>
68 <view class="wBox" v-if="cptCompatibleFee.totalFee>'0'">
69 <view>
70 <view class="t">{{cptCompatibleFee.name}}</view>
71 <uni-collapse>
72 <uni-collapse-item :border="false" title-border="none">
73 <template v-slot:title>
74 <view class="h2">
75 <text v-if="cptCompatibleFee.count">{{cptCompatibleFee.count}}</text>
76 合计:<text class="orange">{{cptCompatibleFee.totalFee}}</text>
77 </view>
78 </template>
79 <!-- 人员列表 -->
80 <uni-list :border="false">
81 <uni-list-item :border="false" v-for="(m,index) in cptCompatibleFee.info" :key="index"
82 :thumb="m.personInfo?.picUrl" :title="m.personInfo?.realName" thumb-size="lg" :right-text="'¥'+ m.compatibleFee">
83 </uni-list-item>
84 </uni-list>
85 </uni-collapse-item>
86 </uni-collapse>
87
88 </view>
89 </view>
90 <view class="wBox" v-if="cptInsuranceFee.totalFee>'0'">
91 <view>
92 <view class="t">{{cptInsuranceFee.name}}</view>
93 <uni-collapse>
94 <uni-collapse-item :border="false" title-border="none">
95 <template v-slot:title>
96 <view class="h2">
97 <text v-if="cptInsuranceFee.count">{{cptInsuranceFee.count}}</text>
98 合计:<text class="orange">{{cptInsuranceFee.totalFee}}</text>
99 </view>
100 </template>
101 <!-- 人员列表 -->
102 <uni-list :border="false">
103 <uni-list-item :border="false" v-show="m.buyFlag=='1'" v-for="(m,index) in cptInsuranceFee.info" :key="index"
104 :right-text="'¥'+ m.insuranceFee" :title="m.personInfo.realName" :note="m.personInfo.idcCode"
105 :thumb="m.personInfo.picUrl" thumb-size="lg">
106 </uni-list-item>
107 </uni-list>
108 </uni-collapse-item>
109 </uni-collapse>
110 </view>
111 </view>
112 <view class="wBox" v-if="otherFee.totalFee>'0'">
113 <view>
114 <view class="t">{{otherFee.name}}</view>
115 <uni-collapse>
116 <uni-collapse-item :border="false" title-border="none">
117 <template v-slot:title>
118 <view class="h2">
119 <text v-if="otherFee.count">{{otherFee.count}}</text>
120 合计:<text class="orange">{{otherFee.totalFee}}</text>
121 </view>
122 </template>
123 <!-- 人员列表 -->
124 <uni-list :border="false">
125 <uni-list-item :border="false" v-for="(m,index) in otherFee.info" :key="index"
126 :thumb="m.personInfo.picUrl" thumb-size="lg" :title="m.personInfo.realName" :right-text="'¥'+ m.otherFee">
127 </uni-list-item>
128 </uni-list>
129 </uni-collapse-item>
130 </uni-collapse>
131 </view>
132 </view>
133 <!-- <view class="wBox" v-if="teamFee.totalFee>'0'">
134 <view>
135 <view class="t">{{teamFee.name}}</view>
136 <uni-collapse>
137 <uni-collapse-item :border="false" title-border="none">
138 <template v-slot:title>
139 <view class="h2">
140 <text v-if="teamFee.count">{{teamFee.count}}人</text>
141 合计:<text class="orange">{{teamFee.totalFee}}元</text>
142 </view>
143 </template>
144 <uni-list :border="false">
145 <uni-list-item v-for="(m,index) in teamFee.info" :key="index" :border="false"
146 :rightText="'¥'+ m.teamFee" :title="m.groupName" :note="m.teamName">
147 </uni-list-item>
148 </uni-list>
149 </uni-collapse-item>
150 </uni-collapse>
151 </view>
152 </view>
153 --> </view>
154 <view class="fBottom" v-if="order.needPay!='0'">
155 <view class="pp" v-if="cptRegistrationFee.totalFee>0">{{cptRegistrationFee.name}}:<text>{{cptRegistrationFee.totalFee}}元</text></view>
156 <view class="pp" v-if="cptCompatibleFee.totalFee>0">{{cptCompatibleFee.name}}:<text>{{cptCompatibleFee.totalFee}}元</text></view>
157
158 <view class="pp" v-if="cptInsuranceFee.totalFee>0">{{cptInsuranceFee.name}}:<text>{{cptInsuranceFee.totalFee}}元</text></view>
159 <view class="pp" v-if="otherFee.totalFee>0">{{otherFee.name}}:<text>{{otherFee.totalFee}}元</text></view>
160 <view class="pp" v-if="teamFee.totalFee>0">{{teamFee.name}}:<text>{{teamFee.totalFee}}元</text></view>
161 <view class="pp" v-if="cptDepositFee.totalFee>0">{{cptDepositFee.name}}:<text>{{cptDepositFee.totalFee}}元</text></view>
162 <view class="pp" v-if="order.totalPayAmount">已缴纳费用:<text>{{order.totalPayAmount}}元</text></view>
163 <view class="txr">
164 合计:<text class="orange">{{order.totalAmount}}元</text>
165 </view>
166 </view>
167 </view>
168 </template>
169
170 <script setup>
171 import { reactive, toRefs } from 'vue';
172 import * as match from '@/common/match.js';
173 import { onLoad } from '@dcloudio/uni-app';
174 const data = reactive({
175 billData: {},
176 cpt: {},
177 order: {},
178 totalFee: {},
179 billId:'',
180 teamFee:{},
181 otherFee:{},
182 cptInsuranceFee:{},
183 cptDepositFee:{},
184 cptCompatibleFee:{},
185 cptRegistrationFee:{}
186 });
187 const { billData, cpt,order,totalFee, billId,teamFee,otherFee,cptRegistrationFee,cptInsuranceFee,cptDepositFee,cptCompatibleFee} = toRefs(data)
188 onLoad((option)=>{
189 console.log(option)
190 if(option.id){
191 billId.value = option.id
192 getData(billId.value)
193 }
194 })
195
196 function getData(n){
197 match.getMyOrderDetail(n).then(res=>{
198 billData.value = res.data
199 cpt.value = res.data.cpt
200 order.value = res.data.order
201 totalFee.value = res.data.totalFee
202 teamFee.value = res.data.totalFee.teamFee
203 otherFee.value = res.data.totalFee.otherFee
204 cptInsuranceFee.value = res.data.totalFee.cptInsuranceFee
205 cptRegistrationFee.value = res.data.totalFee.cptRegistrationFee
206 cptDepositFee.value = res.data.totalFee.cptDepositFee
207 cptCompatibleFee.value = res.data.totalFee.cptCompatibleFee
208 })
209 }
210
211 </script>
212
213 <style scoped lang="scss">
214 .t{font-size: 30rpx; margin: 0 30rpx;}
215 .poKxBtn{position: absolute;top: -70rpx; right: 0;font-size: 24rpx;line-height: 2;}
216 :deep(.uni-group__content){padding: 0;}
217 .addBtn {
218 width: 700rpx;
219 height: 90rpx;
220 background: #ffffff;
221 border: 1rpx solid #1ec886;
222 color: #1ec886;
223 font-size: 30rpx;
224 border-radius: 15rpx;
225 }
226 .wBox {position: relative;background: #ffffff;border-radius: 15px;box-sizing: border-box; width: 700rpx; margin: 20rpx auto 36rpx; padding: 30rpx;
227 .t{margin: 0 0 20rpx;}
228 :deep(.uni-collapse-item){margin: 0;padding: 0;}
229 :deep(.uni-list-item__container){padding-left: 0!important;align-items: center;}
230 :deep(.uni-list-item__extra-text){white-space: nowrap;}
231 }
232
233 .avatarUrl{width: 200rpx;height:200rpx;}
234 .avatarUrl button{padding: 0;display: block;line-height: 1;}
235 .refreshIcon{width: 200rpx;height:200rpx;}
236 .rank-image{width: 90rpx;height: 90rpx; background: #f8f8f8; border-radius: 50%;}
237 .title{font-weight: 500;color: #2B3133; text-align: center; margin: 20rpx 0 40rpx;font-size: 36rpx; padding: 0 30rpx;}
238
239 .h2{ font-size: 28rpx;}
240 .soltbodyName{font-size:30rpx;}
241 .soltbodyText{font-size:26rpx;color: #999;}
242 </style>
1 <template>
2 <view>
3 <view class="wBox">
4 <view class="statusPo">
5 <!-- 阶段 0 未提交 1 已提交 2 已付款 3 审核未通过 4 被清除 5 审核已通过 6 被取消 -->
6 <text class="status s01" v-if="base.signInfo[0]?.stage=='0'">未提交</text>
7 <text class="status s01" v-if="base.signInfo[0]?.stage=='1'">已提交</text>
8 <text class="status s02" v-else-if="base.signInfo[0]?.stage=='5'">审核通过</text>
9 <text class="status s01" v-else-if="base.signInfo[0]?.stage=='2'">审核中</text>
10 <text class="status s03" v-else-if="base.signInfo[0]?.stage=='3'">审核拒绝</text>
11 <text class="status s04"
12 v-else-if="base.signInfo[0]?.stage=='6'||base.signInfo[0]?.stage=='4'">{{base.signInfo[0]?.stageStr}}</text>
13 </view>
14 <view class="title">{{base.signInfo[0]?.cptName}}</view>
15 <view>
16 <uni-tag :inverted="true" v-if="base.signInfo[0]?.cptSignType=='0'" text="个人报项" type="success" />
17 <uni-tag :inverted="true" v-if="base.signInfo[0]?.cptSignType=='1'" text="参赛队报项" type="primary" />
18 <uni-tag :inverted="true" v-if="base.signInfo[0]?.cptSignType=='2'" text="参赛队-队伍报项" type="warning" />
19 <text class="time">比赛时间:{{base.signInfo[0]?.cptBeginTime?.substring(0, 10)}} ~
20 {{base.signInfo[0]?.cptEndTime?.substring(0, 10)}}</text>
21 </view>
22 </view>
23
24 <view class="wBox" v-for="(t,index) in list" :key="index">
25 <uni-list :border='false'>
26 <uni-list-item :border="false" title="姓名">
27 <template v-slot:footer>
28 {{t.personInfo?.realName}}
29 <text style="font-size: 24rpx;" v-if="t.personInfo?.sex==0">(女)</text>
30 <text style="font-size: 24rpx;" v-if="t.personInfo?.sex==1">(男)</text>
31 </template>
32 </uni-list-item>
33 <uni-list-item :border="false" :title="t.personInfo.idcTypeStr" :rightText="t.personInfo.idcCode" />
34 <uni-list-item :border="false" v-if="t.signInfo[0]?.coachNames" title="教练" :rightText="t.signInfo[0]?.coachNames" />
35 <uni-list-item :border="false" v-if="t.signInfo[0]?.leaderNames" title="领队" :rightText="t.signInfo[0]?.leaderNames" />
36 <view v-if="t.extraformData">
37 <uni-list-item :border="false" v-show="ee.value" :title="ee.name"
38 v-for="(ee,index) in t.extraformData" :key="index">
39 <template v-slot:footer>
40 <text v-if="ee.type=='0'||ee.type=='1'||ee.type=='4'"
41 style="font-size: 24rpx;">{{ee.value}}</text>
42 <image v-if="ee.type=='3'&&ee.value!=null" :src="
43 ee.value?.url" mode='aspectFit'
44 style="width: 200rpx;height: 200rpx;" />
45 <view @click="goWebView(ee.value.url)" v-if="ee.type=='2'">
46 <uni-icons type="download" size="16"></uni-icons>
47 {{ee.value?.name}}
48 </view>
49 </template>
50 </uni-list-item>
51 </view>
52
53 <!-- <uni-list-item :border="false" title="参赛团体" v-if="t.groupName" :rightText="t.groupName" /> -->
54 <!-- <uni-list-item :border="false" title="队伍名称" v-if="t.teamName" :rightText="t.teamName" /> -->
55 <uni-list-item :border="false" :title="'报名项目'+ (index+1)" v-for="(s,index) in t.signInfo" :key="index">
56 <template v-slot:footer>
57 <text style="font-size: 26rpx;max-width: 60vw;display: inline-block;">{{s.cptProjectName}}
58 {{s.cptGroupName}}{{s.cptLevelName}} {{s.cptSonLevelName}} {{s.zu}}</text>
59 </template>
60 </uni-list-item>
61 </uni-list>
62 </view>
63
64
65 <view style="display: flex;justify-content: center;padding: 60rpx 0 100rpx;">
66 <button class="btn btn1" style="margin: 0 10px;" v-if="auditStatus!='0'" @click="download">下载凭证</button>
67
68 <button style="margin: 0 10px;" v-if="(auditStatus=='0'&&payStatus=='0')||auditStatus=='3'||auditStatus=='4'"
69 @click="goConti" class="btn btn1">继续报名</button>
70 </view>
71 </view>
72 </template>
73
74 <script setup>
75 import {
76 reactive,
77 toRefs
78 } from 'vue';
79 import * as match from '@/common/match.js';
80 import {
81 onLoad
82 } from '@dcloudio/uni-app';
83 const data = reactive({
84 list: {},
85 signId: '',
86 memberList: [],
87 isSign: false,
88 showForm: false,
89 auditStatus: '',
90 payStatus: '',
91 base: {}
92 });
93 const {
94 list,
95 signId,
96 memberList,
97 isSign,
98 showForm,
99 payStatus,
100 auditStatus,
101 base
102 } = toRefs(data)
103 let groupId
104 onLoad((option) => {
105 console.log('signdetail',option)
106 signId.value = option.id
107 groupId = option.groupId
108 auditStatus.value = option.auditStatus
109 payStatus.value = option.payStatus
110 getData()
111 })
112
113 function getData() {
114 match.getMySignListFromBaoXiang({
115 cptId: signId.value,
116 groupId: groupId
117 }).then(res => {
118 list.value = res.data
119 for (const p of list.value) {
120 if (p.extraPeronInfo?.personInfo) {
121 p.extraformData = JSON.parse(p.extraPeronInfo.personInfo) || [];
122 }
123 }
124 base.value = list.value[0]
125 })
126 }
127
128 function goConti() {
129 if (base.value.signInfo[0].cptSignType == '0') {
130 uni.navigateTo({
131 url: `/pages_match/match/choose_project?matchId=${signId.value}`
132 });
133 } else if (base.value.signInfo[0].cptSignType == '1') {
134 uni.navigateTo({
135 url: `/pages_match/match/choose_sportman?matchId=${signId.value}&groupId=${groupId}&signType=${base.value.signInfo[0].cptSignType}`
136 });
137 } else {
138 uni.navigateTo({
139 url: `/pages_match/match/add_rank?matchId=${signId.value}&groupId=${groupId}&signType=${base.value.signInfo[0].cptSignType}`
140 });
141 }
142
143 }
144 function download(){
145 match.downloadpz(signId.value,groupId).then(res=>{
146 goWebView(res.data)
147 })
148 }
149
150 function goWebView(url) {
151 url = url.replace("http://", "https://")
152 uni.showLoading({
153 title: '下载中'
154 });
155 uni.downloadFile({
156 url: url,
157 success: function(res) {
158 uni.hideLoading();
159 var filePath = res.tempFilePath;
160 uni.showLoading({
161 title: '正在打开'
162 });
163 uni.openDocument({
164 filePath: filePath,
165 showMenu: true,
166 success: function(res) {
167 uni.hideLoading();
168 },
169 fail: function(err) {
170 uni.hideLoading();
171 uni.showToast({
172 title: err,
173 icon: 'none',
174 duration: 2000
175 });
176 }
177 });
178 },
179 fail: function(error) {
180 uni.hideLoading();
181 uni.showToast({
182 title: `下载失败`,
183 icon: 'none',
184 duration: 2000
185 });
186 }
187 });
188 }
189 </script>
190
191 <style scoped lang="scss">
192 .poKxBtn {
193 position: absolute;
194 top: -70rpx;
195 right: 0;
196 font-size: 24rpx;
197 line-height: 2;
198 }
199
200 :deep(.uni-group__content) {
201 padding: 0;
202 }
203
204 .addBtn {
205 width: 700rpx;
206 height: 90rpx;
207 background: #ffffff;
208 border: 1rpx solid #1ec886;
209 color: #1ec886;
210 font-size: 30rpx;
211 border-radius: 15rpx;
212 }
213
214 .wBox {
215 position: relative;
216 background: #ffffff;
217 border-radius: 15px;
218 box-sizing: border-box;
219 width: 700rpx;
220 margin: 30rpx auto;
221 padding: 30rpx;
222
223 :deep(.uni-list-item__container) {
224 padding: 10rpx 0 !important;
225 padding-left: 0 !important;
226 }
227
228 :deep(.uni-list-item__extra-text) {
229 font-size: 28rpx;
230 color: #2B3133;
231 text-align: right;
232 }
233
234 :deep(.uni-list-item__content-title) {
235 font-size: 28rpx;
236 color: #7B7F83;
237 }
238
239 .title {
240 font-weight: 500;
241 color: #000000;
242 font-size: 32rpx;
243 line-height: 1.6;
244 margin: 0 0 20rpx;
245 }
246
247 .time {
248 font-size: 24rpx;
249 color: #7B7F83;
250 margin: 0 20rpx;
251 }
252 }
253
254 :deep(.uni-list-item__extra) {
255 width: 60%;
256 }
257
258 .avatarUrl {
259 width: 200rpx;
260 height: 200rpx;
261 }
262
263 .avatarUrl button {
264 padding: 0;
265 display: block;
266 line-height: 1;
267 }
268
269 .refreshIcon {
270 width: 200rpx;
271 height: 200rpx;
272 }
273
274 .rank-image {
275 width: 90rpx;
276 height: 90rpx;
277 background: #f8f8f8;
278 border-radius: 50%;
279 }
280
281 .statusPo {
282 position: absolute;
283 right: 0;
284 top: -15rpx;
285 color: #fff;
286
287 .status {
288 font-size: 30rpx;
289 padding: 6rpx 20rpx;
290 border-radius: 0 6rpx 0 6rpx;
291 }
292 }
293
294 .fileName {
295 font-size: 28rpx;
296 text-align: right;
297 color: #54e1b9;
298 white-space: nowrap;
299 width: 50vw;
300 overflow: hidden;
301 display: block;
302 text-overflow: ellipsis;
303 }
304 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view>
3 <view class="title">{{ order.trainName }}</view>
4
5 <view class="t">订单基本信息</view>
6 <view class="wBox">
7 <view>
8 <view class="pp">
9 订单编号:
10 <text>{{ order.id }}</text>
11 </view>
12 <!-- <view class="pp">
13 下单时间:
14 <text>{{ order.commitTime }}</text>
15 </view> -->
16 <view class="pp" v-if="order.groupName">
17 报名参赛队:
18 <text>{{ order.groupName }}</text>
19 </view>
20 <view class="pp" v-if="order.needPay != '0'">
21 支付方式:
22 <!-- 2 会员卡支付 0 微信支付 1 线下支付 -->
23 <text v-if="order.payType == '2'">会员卡支付</text>
24 <text v-if="order.payType == '0'">微信支付</text>
25 <text v-if="order.payType == '1'">线下支付</text>
26 </view>
27 <view class="pp" v-if="order.needPay != '0'">
28 订单状态:
29 <text v-if="order.auditStatus == '0'" class="orange">{{ order.auditStatusStr }}</text>
30 <text v-if="order.auditStatus == '1'" class="green">{{ order.auditStatusStr }}</text>
31 <text v-if="order.auditStatus == '2'">{{ order.auditStatusStr }}</text>
32 <text v-if="order.auditStatus == '3'" class="green">{{ order.auditStatusStr }}</text>
33 <text v-if="order.auditStatus == '4'" class="red">{{ order.auditStatusStr }}</text>
34 <text v-if="order.auditStatus == '5'" class="red">{{ order.auditStatusStr }}</text>
35 <text v-if="order.auditStatus == '6'">{{ order.auditStatusStr }}</text>
36 </view>
37 <view class="pp" v-if="order.payTime">
38 付款时间:
39 <text>{{ order.payTime }}</text>
40 </view>
41
42 <view class="pp" v-if="order.needPay != '0'">
43 订单金额:
44 <text>{{ order.payment }}</text>
45 </view>
46 <view class="pp" v-if="order.paymentd">
47 付款金额:
48 <text style="font-size: 34rpx;" class="orange">{{ order.payment }}</text>
49 </view>
50 </view>
51 </view>
52
53 <view class="t" v-if="order.payType == '1'">收款方</view>
54 <view class="wBox" v-if="order.payType == '1'">
55 <view>
56 <view class="pp">
57 收款账户:
58 <text>{{ billData.accountName }}</text>
59 </view>
60 <view class="pp">
61 开户银行:
62 <text>{{ billData.accountBank }}</text>
63 </view>
64 <view class="pp">
65 开户账号:
66 <text>{{ billData.accountNum }}</text>
67 </view>
68 </view>
69 </view>
70 <view>
71 <!-- //是否显示 -->
72 <view class="t">费用明细</view>
73
74 <view class="wBox" v-if="trainData.projectList?.length > 0">
75 <view>
76 <view class="t">培训科目</view>
77 <uni-collapse>
78 <uni-collapse-item :border="false" title-border="none">
79 <template v-slot:title>
80 <view class="h2">
81 合计:
82 <text class="orange">{{ trainData?.projectFee }}</text>
83 </view>
84 </template>
85 <!-- 科目列表 -->
86 <uni-list :border="false">
87 <view class=" uni-conter" v-for="(item, index) in trainData.projectList" :key="item.id">
88 <view class="uni-c-l">{{ item.projectName }}</view>
89 <view class="uni-c-r">¥{{ item.cost }}</view>
90 </view>
91 </uni-list>
92 </uni-collapse-item>
93 </uni-collapse>
94 </view>
95 </view>
96 <view class="wBox" v-if="trainData.examList?.length > 0">
97 <view>
98 <view class="t">考试科目</view>
99 <uni-collapse>
100 <uni-collapse-item :border="false" title-border="none">
101 <template v-slot:title>
102 <view class="h2">
103 合计:
104 <text class="orange">{{ trainData.examFee }}</text>
105 </view>
106 </template>
107 <!-- 人员列表 -->
108 <uni-list :border="false">
109 <view class=" uni-conter" v-for="(item, index) in trainData.examList" :key="item.id">
110 <view class="uni-c-l">{{ item.projectName }}</view>
111 <view class="uni-c-r">¥{{ item.cost }}</view>
112 </view>
113 </uni-list>
114 </uni-collapse-item>
115 </uni-collapse>
116 </view>
117 </view>
118 <view class="wBox" v-if="trainData.hotelList?.length > 0">
119 <view>
120 <view class="t">酒店费用</view>
121 <uni-collapse>
122 <uni-collapse-item :border="false" title-border="none">
123 <template v-slot:title>
124 <view class="h2">
125 合计:
126 <text class="orange">{{ trainData.hotelFee }}</text>
127 </view>
128 </template>
129 <!-- 人员列表 -->
130 <uni-list :border="false">
131 <view class=" uni-conter" v-for="(item, index) in trainData.hotelList" :key="item.id">
132 <view class="uni-c-l">{{ item.name }}</view>
133 <view class="uni-c-r">¥{{ item.cost }}</view>
134 </view>
135 </uni-list>
136 </uni-collapse-item>
137 </uni-collapse>
138 </view>
139 </view>
140 <view class="wBox" v-if="trainData.otherList?.length > 0">
141 <view>
142 <view class="t">其他费用</view>
143 <uni-collapse>
144 <uni-collapse-item :border="false" title-border="none">
145 <template v-slot:title>
146 <view class="h2">
147 合计:
148 <text class="orange">{{ trainData.otherFee }}</text>
149 </view>
150 </template>
151 <!-- 人员列表 -->
152 <uni-list :border="false">
153 <view class=" uni-conter" v-for="(item, index) in trainData.otherList" :key="item.id">
154 <view class="uni-c-l">{{ item.name }}</view>
155 <view class="uni-c-r">¥{{ item.spend }}</view>
156 </view>
157 </uni-list>
158 </uni-collapse-item>
159 </uni-collapse>
160 </view>
161 </view>
162 </view>
163 <view class="fBottom">
164 <view class="pp" v-if="trainData.projectCost > 0">
165 培训科目:
166 <text>{{ trainData.projectCost }}元</text>
167 </view>
168 <view class="pp" v-if="trainData.examCost > 0">
169 考试科目:
170 <text>{{ trainData.examCost }}元</text>
171 </view>
172
173 <view class="pp" v-if="trainData.accommodationCost > 0">
174 酒店费用:
175 <text>{{ trainData.accommodationCost }}元</text>
176 </view>
177 <view class="pp" v-if="trainData.otherCost > 0">
178 其他费用:
179 <text>{{ trainData.otherCost }}元</text>
180 </view>
181 <!-- <view class="pp" v-if="teamFee.totalFee > 0">
182 {{ teamFee.name }}:
183 <text>{{ teamFee.totalFee }}元</text>
184 </view>
185 <view class="pp" v-if="cptDepositFee.totalFee > 0">
186 {{ cptDepositFee.name }}:
187 <text>{{ cptDepositFee.totalFee }}元</text>
188 </view>
189 <view class="pp" v-if="order.totalPayAmount">
190 已缴纳费用:
191 <text>{{ order.totalPayAmount }}元</text>
192 </view> -->
193 <view class="txr">
194 合计:
195 <text class="orange">{{ trainData.totalAmount }}元</text>
196 </view>
197 </view>
198 </view>
199 </template>
200
201 <script setup>
202 import { reactive, toRefs } from 'vue';
203 import * as train from '@/common/train.js';
204 import { onLoad } from '@dcloudio/uni-app';
205 const data = reactive({
206 id: '',
207 trainData: {},
208 order: {},
209 billData: {}
210 });
211 const { billData, id, trainData, order } = toRefs(data);
212 onLoad(option => {
213 if (option) {
214 id.value = option.id;
215 order.value = JSON.parse(option.order);
216 getData();
217 getBank();
218 }
219 });
220
221 async function getData() {
222 let res = await train.getOrderDetail({ orderId: order.value.id });
223 trainData.value = res.data;
224 }
225
226 async function getBank() {
227 let res = await train.bankSlip({ id: order.value.id });
228 billData.value = res.data;
229 }
230
231 // 订单详情
232 async function getOrder() {
233 let res = await train.getOrderDetail({ id: order.value.id });
234 }
235 </script>
236
237 <style scoped lang="scss">
238 .uni-conter {
239 display: flex;
240 justify-content: space-between;
241 margin-top: 20rpx;
242 .uni-c-r: {
243 color: #999;
244 font-size: 12px;
245 }
246 .uni-c-l: {
247 font-size: 14px;
248 color: #3b4144;
249 overflow: hidden;
250 }
251 }
252
253 .t {
254 font-size: 30rpx;
255 margin: 0 30rpx;
256 }
257 .poKxBtn {
258 position: absolute;
259 top: -70rpx;
260 right: 0;
261 font-size: 24rpx;
262 line-height: 2;
263 }
264 :deep(.uni-group__content) {
265 padding: 0;
266 }
267 .addBtn {
268 width: 700rpx;
269 height: 90rpx;
270 background: #ffffff;
271 border: 1rpx solid #1ec886;
272 color: #1ec886;
273 font-size: 30rpx;
274 border-radius: 15rpx;
275 }
276 .wBox {
277 position: relative;
278 background: #ffffff;
279 border-radius: 15px;
280 box-sizing: border-box;
281 width: 700rpx;
282 margin: 20rpx auto 36rpx;
283 padding: 30rpx;
284 .t {
285 margin: 0 0 20rpx;
286 }
287 :deep(.uni-collapse-item) {
288 margin: 0;
289 padding: 0;
290 }
291 :deep(.uni-list-item__container) {
292 padding-left: 0 !important;
293 align-items: center;
294 }
295 :deep(.uni-list-item__extra-text) {
296 white-space: nowrap;
297 }
298 }
299
300 .avatarUrl {
301 width: 200rpx;
302 height: 200rpx;
303 }
304 .avatarUrl button {
305 padding: 0;
306 display: block;
307 line-height: 1;
308 }
309 .refreshIcon {
310 width: 200rpx;
311 height: 200rpx;
312 }
313 .rank-image {
314 width: 90rpx;
315 height: 90rpx;
316 background: #f8f8f8;
317 border-radius: 50%;
318 }
319 .title {
320 font-weight: 500;
321 color: #2b3133;
322 text-align: center;
323 margin: 20rpx 0 40rpx;
324 font-size: 36rpx;
325 padding: 0 30rpx;
326 }
327
328 .h2 {
329 font-size: 28rpx;
330 }
331 .soltbodyName {
332 font-size: 30rpx;
333 }
334 .soltbodyText {
335 font-size: 26rpx;
336 color: #999;
337 }
338 </style>
1 <template>
2 <view>
3 <view class="wBox">
4 <view class="statusPo">
5 <text class="status s01" v-if="str == '0'">未支付</text>
6 <text class="status s01" v-else-if="str == '1'">支付待核销</text>
7 <text class="status s02" v-else-if="str == '2'">付款中</text>
8 <text class="status s01" v-else-if="str == '3'">已支付</text>
9 <text class="status s03" v-else-if="str == '4'">退款中</text>
10 <text class="status s04" v-else-if="str == '5'">已退款</text>
11 <text class="status s04" v-else-if="str == '6'">退款待核销</text>
12 <text class="status s01" v-else-if="str == null">{{ base.statusStr }}</text>
13 </view>
14 <view class="title">{{ trainName }}</view>
15 <view>
16 <text class="time">比赛时间:{{ base.trainTimeStr }}</text>
17 </view>
18 </view>
19
20 <view class="wBox">
21 <uni-list :border="false">
22 <uni-list-item :border="false" title="姓名">
23 <template v-slot:footer>
24 {{ base.name }}
25 <text style="font-size: 24rpx;" v-if="base.sex == 0">(女)</text>
26 <text style="font-size: 24rpx;" v-if="base.sex == 1">(男)</text>
27 </template>
28 </uni-list-item>
29 <uni-list-item :border="false" title="身份证" :rightText="base.idcCode" />
30 <uni-list-item :border="false" title="已报科目" />
31 <uni-list-item
32 :border="false"
33 v-for="item in projectList"
34 :key="item.id"
35 :title="item.projectName"
36 :rightText="item.isNecessary == 1 ? '必选' : '非必选'"
37 />
38 </uni-list>
39 </view>
40
41 <!-- <view style="padding: 60rpx 0 100rpx;">
42 <button style="margin: auto;" v-if="str == 0" @click="goConti" class="btn btn1">继续报名</button>
43 </view> -->
44 </view>
45 </template>
46
47 <script setup>
48 import { reactive, toRefs } from 'vue';
49 import * as match from '@/common/match.js';
50 import * as train from '@/common/train.js';
51 import { onLoad } from '@dcloudio/uni-app';
52 const data = reactive({
53 list: {},
54 signId: '',
55 memberList: [],
56 isSign: false,
57 showForm: false,
58 auditStatus: '',
59 payStatus: '',
60 base: {},
61 str: '',
62 trainName: '',
63 projectList: [],
64 orderId: ''
65 });
66 const {
67 projectList,
68 trainName,
69 str,
70 list,
71 signId,
72 memberList,
73 isSign,
74 showForm,
75 payStatus,
76 auditStatus,
77 base
78 } = toRefs(data);
79
80 onLoad(option => {
81 signId.value = option.id;
82 trainName.value = option.trainName;
83 getData();
84 });
85
86 async function getData() {
87 let res = await train.signDetail({ id: signId.value });
88 base.value = res.data;
89 str.value = res.data.payStatus;
90 projectList.value = res.data.projectList;
91 }
92
93 // 继续报名
94 function goConti() {
95 // 培训id
96 // 订单id
97 let path = `/pages/train/costBreakdown/costBreakdown?trainId=${base.value.trainId}&orderNumber=${base.value.order}`;
98 wx.navigateTo({
99 url: path
100 });
101 }
102
103 function goWebView(url) {
104 url = url.replace('http://', 'https://');
105 uni.showLoading({
106 title: '下载中'
107 });
108 uni.downloadFile({
109 url: url,
110 success: function(res) {
111 uni.hideLoading();
112 var filePath = res.tempFilePath;
113 uni.showLoading({
114 title: '正在打开'
115 });
116 uni.openDocument({
117 filePath: filePath,
118 showMenu: true,
119 success: function(res) {
120 uni.hideLoading();
121 },
122 fail: function(err) {
123 uni.hideLoading();
124 uni.showToast({
125 title: err,
126 icon: 'none',
127 duration: 2000
128 });
129 }
130 });
131 },
132 fail: function(error) {
133 uni.hideLoading();
134 uni.showToast({
135 title: `下载失败`,
136 icon: 'none',
137 duration: 2000
138 });
139 }
140 });
141 }
142 </script>
143
144 <style scoped lang="scss">
145 .poKxBtn {
146 position: absolute;
147 top: -70rpx;
148 right: 0;
149 font-size: 24rpx;
150 line-height: 2;
151 }
152
153 :deep(.uni-group__content) {
154 padding: 0;
155 }
156
157 .addBtn {
158 width: 700rpx;
159 height: 90rpx;
160 background: #ffffff;
161 border: 1rpx solid #1ec886;
162 color: #1ec886;
163 font-size: 30rpx;
164 border-radius: 15rpx;
165 }
166
167 .wBox {
168 position: relative;
169 background: #ffffff;
170 border-radius: 15px;
171 box-sizing: border-box;
172 width: 700rpx;
173 margin: 30rpx auto;
174 padding: 30rpx;
175
176 :deep(.uni-list-item__container) {
177 padding: 10rpx 0 !important;
178 padding-left: 0 !important;
179 }
180
181 :deep(.uni-list-item__extra-text) {
182 font-size: 28rpx;
183 color: #2b3133;
184 text-align: right;
185 }
186
187 :deep(.uni-list-item__content-title) {
188 font-size: 28rpx;
189 color: #7b7f83;
190 }
191
192 .title {
193 font-weight: 500;
194 color: #000000;
195 font-size: 32rpx;
196 line-height: 1.6;
197 margin: 0 0 20rpx;
198 }
199
200 .time {
201 font-size: 24rpx;
202 color: #7b7f83;
203 margin: 0 20rpx;
204 }
205 }
206
207 :deep(.uni-list-item__extra) {
208 width: 60%;
209 }
210
211 .avatarUrl {
212 width: 200rpx;
213 height: 200rpx;
214 }
215
216 .avatarUrl button {
217 padding: 0;
218 display: block;
219 line-height: 1;
220 }
221
222 .refreshIcon {
223 width: 200rpx;
224 height: 200rpx;
225 }
226
227 .rank-image {
228 width: 90rpx;
229 height: 90rpx;
230 background: #f8f8f8;
231 border-radius: 50%;
232 }
233
234 .statusPo {
235 position: absolute;
236 right: 45rpx;
237 top: 58rpx;
238 color: #fff;
239
240 .status {
241 font-size: 30rpx;
242 padding: 6rpx 20rpx;
243 border-radius: 20rpx;
244 }
245 }
246
247 .fileName {
248 font-size: 28rpx;
249 text-align: right;
250 color: #54e1b9;
251 white-space: nowrap;
252 width: 50vw;
253 overflow: hidden;
254 display: block;
255 text-overflow: ellipsis;
256 }
257 </style>
1 <template>
2 <view>
3 <view class="vipBox" v-if="card.isVip">
4 <image class="fm" :src="vTypeImg"></image>
5 <image class="vv" src="/static/vip.png"></image>
6 <view class="poInfo">
7 <view class="flexline">
8 <view class="typeStr">{{card.info.cardTypeStr}}</view>
9 <view class="cardCode">{{card.info.cardCode}}</view>
10 </view>
11 <view class="flexline mt40">
12 <view class="ye">
13 余额(元)
14 <text>{{card.info.balance}}</text>
15 </view>
16
17 <view class="zk">
18 折扣
19 <view>
20 <text>{{(100 - card.info.discountPercent)/10}}</text>
21
22 </view>
23 </view>
24 </view>
25 </view>
26
27 <view class="cardBottom">
28 <text>有效期至{{card.info.expirationTime}}</text>
29 <text class="renewBtn" @click="goRenew">立即续费</text>
30 </view>
31 </view>
32
33 <view class="uni-padding-wrap uni-common-mt">
34 <uni-segmented-control :current="current" :values="items" style-type="text" active-color="#16C682"
35 @clickItem="onClickItem" />
36 </view>
37 <view class="bill-content">
38 <view v-if="current === 0">
39 <view>
40 <view class="billItem" v-for="(item,index) in list1" :key="index">
41 <view>订单编号: <text>{{item.dataId}}</text></view>
42 <view>消费类型: <text>{{item.consumeTypeStr}}</text></view>
43 <view>消费时间:
44 <text v-if="item.siteOrder?.payTime">{{item.siteOrder.payTime}}</text>
45 <text v-else-if="item.cptSignOrder?.payTime">{{item.cptSignOrder?.payTime}}</text>
46 <text v-else>{{item.orderTime}}</text>
47 </view>
48 <view v-if="item.siteOrder?.verificationCode">验证码:
49 <text>{{item.siteOrder.verificationCode}}</text>
50 </view>
51 <view v-if="item.siteOrder">预订项目: <text>{{item.siteOrder.siteName}}</text></view>
52 <view class="billFoot">
53 <view class="status">支付</view>
54 <!-- <view class="status warning" v-else>{{item.siteOrder.payStatusStr}}</view> -->
55 <!-- 退钱 -->
56 <view class="price" style="display: block;">
57 <text class="success" style="white-space: nowrap;">{{item.dataValue}}
58 <text class="danger" v-if="item.siteOrder?.refundAmount">(已退款¥{{item.siteOrder.refundAmount}}</text>
59 <text class="danger" v-if="item.cptSignOrder?.payStatus=='5'">(已退款¥{{item.cptSignOrder.organizerRefundAmount}}</text>
60 </text>
61 </view>
62 </view>
63 </view>
64
65 <view class="nodata" v-if="list1.length==0">
66 <image mode="aspectFit" src="/static/nodata.png"></image>
67 </view>
68 </view>
69
70 </view>
71 <view v-if="current === 1">
72 <view class="billItem" v-for="(item,index) in list2" :key="index">
73 <view>订单编号: <text>{{item.orderCode}}</text></view>
74 <view v-if="item.payTime">充值日期: <text>{{item.payTime}} </text></view>
75 <view>充值方式: <text>{{item.payTypeStr}}</text></view>
76 <view class="billFoot">
77 <view class="status">充值金额</view>
78 <view class="price">{{item.orderValue}}</view>
79 </view>
80 </view>
81 <view class="nodata" v-if="list2.length==0">
82 <image mode="aspectFit" src="/static/nodata.png"></image>
83 </view>
84 </view>
85 </view>
86 </view>
87 </template>
88
89 <script setup>
90 import {
91 onLoad,onPullDownRefresh
92 } from '@dcloudio/uni-app'
93 import {
94 ref
95 } from 'vue'
96 import * as api from '@/common/api.js'
97 const vTypeImg = ref('/static/v1.png')
98 const items = ref(['消费记录', '充值记录'])
99 const current = ref(0)
100 const card = ref({})
101 const list1 = ref([])
102 const list2 = ref([])
103 const currUser = uni.getStorageSync('currUser');
104 onLoad(() => {
105 api.getOwnMemberInfo().then((res) => {
106 card.value = res.data
107 getxfList()
108 })
109 })
110 onPullDownRefresh(()=>{
111 api.getOwnMemberInfo().then((res) => {
112 card.value = res.data
113 getxfList()
114 })
115 })
116 function onClickItem(e) {
117 console.log(e)
118 if (e.currentIndex === 0) {
119 getxfList()
120 } else if (e.currentIndex === 1) {
121 getxzList()
122 }
123 if (current.value !== e.currentIndex) {
124 current.value = e.currentIndex;
125 }
126 }
127
128 function getxfList() {
129 if (card.value.isVip) {
130 // 消费
131 api.xfList({
132 memberId: card.value.info.id
133 }).then((res) => {
134 list1.value = res.rows
135 })
136 }
137 }
138
139 function getxzList() {
140 if (card.value.isVip) {
141 // 充值
142 api.czList({
143 memberId: card.value.info.id
144 }).then((res) => {
145 list2.value = res.rows
146 })
147 }
148 }
149
150 function goRenew() {
151 let path = '/pages/usercenter/mycard/renew';
152 uni.navigateTo({
153 url: path
154 });
155 }
156 </script>
157
158 <style scoped>
159 .vipBox {
160 margin-bottom: 30rpx
161 }
162 .billItem {
163 padding-bottom: 1rpx;
164 margin: 0 0 30rpx;
165 }
166 .billItem view text text{float: none;}
167 .billFoot {
168 padding: 22rpx 35rpx;
169 margin-bottom: 20rpx
170 }
171 .success{color: #16C682;}
172 .danger{color: #da2a2a;}
173 </style>
1 <template>
2 <view class="graybg">
3 <view class="rrcard">
4 <view class="t">充值账号</view>
5 <view class="box">
6 <view class="custom"><input v-model="telNo" placeholder="请输入手机号" /></view>
7 </view>
8 </view>
9 <view class="rrcard">
10 <view class="t">会员姓名</view>
11 <view class="box">
12 <view class="custom"><input v-model="userName" placeholder="请输入会员姓名" /></view>
13 </view>
14 </view>
15 <view class="rrcard">
16 <view class="t">充值金额</view>
17 <view class="box">
18 <view class="plist">
19 <view v-for="(p,index) in priceList" :key="index" :class="isActive == index ? 'active' : ''"
20 @click="changePrice(p, index)">
21 <text>{{p}}</text>
22 </view>
23 </view>
24 <view class="custom">
25 <text></text>
26 <input type="number" @change="changeMyAmount" v-model="myAmount" placeholder="输入充值金额(只能大于最低金额)" />
27 </view>
28 </view>
29 </view>
30 <view class="rrcard" v-if="card.isVip">
31 <view class="t">会员卡</view>
32
33 <view class="vipBox">
34 <image class="fm" :src="vTypeImg"></image>
35 <image class="vv" src="/static/vip.png"></image>
36 <view class="poInfo">
37 <view class="flexline">
38 <view class="typeStr">{{ card.vipInfo.name }}</view>
39 <view class="cardCode">{{ card.info.cardCode }}</view>
40 </view>
41 <view class="flexline mt40">
42 <view class="ye">
43 余额(元)
44 <text>{{ card.info.balance }}</text>
45 </view>
46
47 <view class="zk">
48 折扣
49 <view>
50 <text>{{ (100 - card.info.discountPercent) / 10 }}</text>
51
52 </view>
53 </view>
54 </view>
55 </view>
56
57 <view class="cardBottom">
58 <text>有效期至{{ card.info.expirationTime }}</text>
59 </view>
60 </view>
61 </view>
62
63 <view class="rrcard">
64 <view class="t">支付方式</view>
65 <view class="whitebg">
66 <radio-group @change="payChange">
67 <label class="uni-list-cell uni-list-cell-pd">
68 <view>微信支付</view>
69 <view>
70 <radio checked="checked" />
71 </view>
72 </label>
73 </radio-group>
74 </view>
75 </view>
76 <view class="payBtn" @click="goPay" v-if="card.isVip">立即支付</view>
77 <view class="payBtn" @click="goPay" v-else>立即充值成为会员</view>
78 </view>
79 <uni-popup ref="alertPayOk" type="dialog">
80 <uni-popup-dialog type="success" confirmText="查看会员卡" content="充值成功" @confirm="goCardDetail">
81 </uni-popup-dialog>
82 </uni-popup>
83 <view v-if="popNotice" class="popContent">
84 <view class="textbody">
85 <!-- 充值提示 -->
86 <view class="h3">充值提示</view>
87 <view class="texts">{{content}}</view>
88 <view class="button" @click="closepopNotice">我已知晓</view>
89 </view>
90 </view>
91 </template>
92
93 <script setup>
94 import {
95 ref
96 } from 'vue';
97 import {
98 onLoad,
99 onShow
100 } from '@dcloudio/uni-app';
101 import * as api from '@/common/api.js';
102 const app = getApp();
103 const vTypeImg = ref('/static/v1.png');
104 const card = ref({});
105 // const projectList = ref([]);
106 // const projectArr = ref([]);
107 const orderId = ref('');
108 const telNo = ref('');
109 const userName = ref('');
110 const alertPayOk = ref(null);
111 const isActive = ref(null);
112 const amount = ref(0);
113 const myAmount = ref(null);
114 const priceList = ref(['500', '1000', '2000', '3000', '5000', '10000']);
115 const popNotice = ref(false);
116 const content = ref('');
117
118 onLoad(() => {
119 content.value = app.globalData.venue.rechargeNotice
120 popNotice.value = true
121 })
122
123 onShow(() => {
124 // api.listCanUse().then(res => {
125 // projectList.value = res.rows
126 // for (var p of projectList.value) {
127 // projectArr.value.push({
128 // value: p.projectId,
129 // text: p.projectName
130 // })
131 // }
132 // })
133 api.getOwnMemberInfo().then(res => {
134 card.value = res.data;
135 if (card.value.isVip) {
136 telNo.value = card.value.info.memberTelno
137 userName.value = card.value.info.memberName
138 } else {
139 telNo.value = uni.getStorageSync('currUser').realTelno
140 userName.value = ""
141 }
142 });
143
144 });
145 function closepopNotice(){
146 popNotice.value = false
147 }
148 function goPay() {
149 if (!telNo.value) {
150 uni.showToast({
151 title: `请填写充值手机号`,
152 icon: 'none'
153 });
154 return
155 }
156 if (!userName.value) {
157 uni.showToast({
158 title: `请填写姓名`,
159 icon: 'none'
160 });
161 return
162 }
163 if (myAmount.value) {
164 amount.value = myAmount.value
165 }
166 if (amount.value == 0) {
167 uni.showToast({
168 title: `请选择或填写充值金额`,
169 icon: 'none'
170 });
171 return
172 }
173 api.getMemberLevelTip(telNo.value,amount.value).then(res=>{
174 console.log(res)
175 if(res.data.name != card.value.vipInfo.name){
176 if(res.data.discountPercent<card.value.vipInfo.discountPercent){
177 var changeDis = "降级"
178 } else {
179 var changeDis = "升级"
180 }
181 uni.showModal({
182 title: '温馨提示',
183 content: `充值成功后,您将${changeDis}${res.data.name},新的会员折扣为${(100-res.data.discountPercent)/10}折`,
184 success: function (res) {
185 if (res.confirm) {
186 goRecharge()
187 } else if (res.cancel) {
188 console.log('取消充值');
189 }
190 }
191 })
192 }else{
193 goRecharge()
194 }
195 })
196
197 }
198 function goRecharge(){
199 const currUser = uni.getStorageSync('currUser');
200 api.rechargeCard({
201 telNo: telNo.value,
202 amount: amount.value,
203 userName: userName.value
204 }).then(res => {
205 wePay(res.data.weixinData)
206 orderId.value = res.data.orderId
207 })
208 }
209
210 function wePay(configdata) {
211 console.log(configdata)
212 // 微信支付
213 uni.requestPayment({
214 "provider": "wxpay",
215 "appId": configdata.appId,
216 "nonceStr": configdata.nonceStr,
217 "package": configdata.packageValue, // 随机字符串
218 "timeStamp": configdata.timeStamp, // 时间戳(单位:秒)
219 "signType": configdata.signType, // 签名,这里用的 MD5/RSA 签名
220 "paySign": configdata.paySign,
221 success(res) {
222 // 支付成功跳转订单详情
223 console.log(res)
224 api.maRechargeConfirm({
225 orderId: orderId.value,
226 successFlag:true
227 }).then(response => {
228 console.log(response)
229 })
230 alertPayOk.value.open()
231 },
232 fail(e) {
233 console.log(e)
234 uni.showToast({
235 title: '支付取消',
236 icon: 'none'
237 });
238 api.maRechargeConfirm({
239 orderId: orderId.value,
240 successFlag:false
241 }).then(response => {
242 console.log(response)
243 })
244 }
245 })
246 }
247
248 function goCardDetail() {
249 uni.redirectTo({
250 url: `/pages/usercenter/mycard/mycard`
251 })
252 }
253
254 function changePrice(item, index) {
255 if (isActive.value == index) {
256 isActive.value = null
257 amount.value = 0
258 } else {
259 isActive.value = index
260 amount.value = item
261 }
262
263 myAmount.value = null
264 }
265
266 function changeMyAmount(val) {
267 if (myAmount.value) {
268 isActive.value = -1
269 }
270 }
271
272 function bindPickerChange(e) {
273 console.log(e)
274 projectId.value = e
275 }
276 </script>
277
278 <style scoped>
279 .graybg {
280 background: #f7f8fa;
281 height: 100vh;
282 padding: 0 0 100rpx;
283 width: 100vw;
284 overflow: auto;
285 }
286
287 .whitebg {
288 background: #fff;
289 margin-top: 15rpx;
290 border-radius: 20rpx;
291 margin-bottom: 90rpx;
292 }
293 .payBtn {
294 width: 750rpx;
295 line-height: 90rpx;
296 height: 120rpx;
297 text-align: center;
298 background: #ff8124;
299 color: #ffffff;
300 font-size: 36rpx;
301 border-radius: 20rpx 20rpx 0px 0px;
302 position: fixed;
303 bottom: 0;
304 }
305 .uni-list-cell::after {display: none;}
306 .button{ width: 120rpx; margin: 20rpx auto; font-size: 24rpx; color: #fff; background: linear-gradient(90deg, #00C176, #3ed89b); padding: 6rpx 15rpx;text-align: center; border-radius: 6rpx;}
307 .popContent{background:#fff; height: auto; position: fixed; width: 80vw; max-height: 50vh; top: 20%; left: 0; right: 0; border-radius: 10rpx;margin: auto;z-index: 99; box-shadow: 0 0 0 100vh rgba(0,0,0,0.4);}
308 .textbody{padding: 40rpx;}
309 .textbody .h3{ text-align: center;font-size: 32rpx;}
310 .textbody .texts{ overflow: auto; line-height: 1.6; text-indent: 2em; color: #666; max-height: 30vh; text-align: justify; margin: 20rpx 0 0; font-size: 28rpx;}
311
312 </style>
1 <template>
2 <view class="fixedbody">
3 <uni-group mode="card" title="我的参赛队" top="20">
4 <view class="wBox">
5 <button class="poKxBtn" type="primary" plain="true" @click="newGroup">+新建参赛队</button>
6 <view class="matchItem" v-for="(g,index) in dataList" :key="index">
7 <view class="leftImg">
8 <image :src="g.imgUrl" mode="aspectFill"></image>
9 </view>
10 <view class="rightWen">
11 <view class="name">{{g.name}}</view>
12 <view class="pp">地区:
13 {{g.regionStr}}
14 </view>
15 <view class="pp">类型:{{g.typeStr}}</view>
16 </view>
17 <view class="bottomFunc">
18 <view class="textButtom" @click="view(g)">查看</view>
19 <text class="greenline">|</text>
20 <view class="textButtom" @click="del(g)">删除</view>
21 </view>
22 </view>
23 <view class="nodata" v-if="dataList.length==0">
24 <image mode="aspectFit" src="/static/nodata.png"></image>
25 <text>还没有参赛队,点击新建参赛队立即创建吧~</text>
26 </view>
27 </view>
28 </uni-group>
29
30
31 </view>
32 </template>
33
34 <script setup>
35 import { ref } from 'vue';
36 import * as match from '@/common/match.js'
37 import { onShow } from '@dcloudio/uni-app'
38 const baseFormData = ref({});
39 const dataList = ref([]);
40 const memberList = ref([{id:1},{id:2}]);
41 const avatarUrl = ref('');
42 const kindList = ref(['全部','运动员','教练','领队','其他']);
43 const tagList = ref([{text: '运动员',value: 0},{text: '教练',value: 1},{text: '领队',value: 2},{text: '其他',value: 3},]);
44 const typeList = ref([{text: '学校',value: 0}, {text: '场馆',value: 1}, {text: '俱乐部',value: 2}, {text: '机构',value: 3}]);
45 const regionsList = ref([]);
46 const current = ref(0);
47 const editIng = ref(false);
48 const showEditForm = ref(false);
49 const query = ref({
50 type: 0
51 })
52
53 onShow(()=>{
54 getRegionsList()
55 getList()
56 })
57
58 function getList(){
59 match.getMyGroupList(query).then(res => {
60 dataList.value = res.data
61 })
62 }
63 function newGroup() {
64 uni.navigateTo({
65 url: `/pages/usercenter/teamInfo`
66 });
67 }
68 function getRegionsList(){
69 match.regionsList().then(res => {
70 regionsList.value = res.data
71 })
72 }
73 function onchange(){
74
75 }
76 function onnodeclick(){
77
78 }
79 function onClickItem(e){
80 console.log(current.value)
81 if (current.value != e.currentIndex) {
82 current.value = e.currentIndex;
83 }
84 }
85 function goNext() {
86 baseFormData.value.src = avatarUrl.value
87
88 }
89 function onChooseavatar(e) {
90 if(editIng.value){
91 match.uploadFile(e).then(data => {
92 avatarUrl.value = data.data
93 })
94 } else {
95 return
96 }
97
98 }
99 function editTeamInfo(){
100 editIng.value = true
101 }
102 function goChooseCoach(n){
103 uni.navigateTo({
104 url: `/pages_match/match/choose_coach?id=${n||0}`
105 });
106 }
107 function goEditCoach(n){
108 uni.navigateTo({
109 url: `/pages_match/match/add_coach?id=${n||0}`
110 });
111 }
112 function view(g){
113 uni.navigateTo({
114 url: `/pages/usercenter/teamInfo?groupId=${g.id}`
115 });
116 }
117 function del(g){
118 // 删除团
119 uni.showModal({
120 title: '提示',
121 content: '确定删除吗',
122 success: function (res) {
123 if (res.confirm) {
124 match.deleteMyGroup(g.id).then(res=>{
125 uni.showToast({
126 icon:'none',
127 title: res.msg
128 })
129 getList()
130 })
131 } else if (res.cancel) {
132 console.log('用户点击取消');
133 }
134 }
135 });
136 }
137 function saveMyteam() {
138 match.saveMyGroup(baseFormData.value).then(res=>{
139 uni.showToast({
140 title: '保存成功',
141 duration: 2000
142 });
143 editIng.value = false
144 })
145 }
146 </script>
147
148 <style scope lang="scss">
149 .wBox {position: relative;background: #ffffff;border-radius: 15px;box-sizing: border-box;}
150 .avatarUrl{width: 200rpx;height:200rpx;}
151 .avatarUrl button{padding: 0;display: block;line-height: 1;}
152 .refreshIcon{width: 200rpx;height:200rpx;}
153
154 .matchItem{background: #FBFCFD; margin: 0 0 90rpx;padding:20rpx;border: #eee solid 1rpx;
155 .bottomFunc{background: #FBFCFD;border: #eee solid 1rpx;}
156 }
157 .poKxBtn{position: absolute; top: -100rpx;
158 right: 0;
159 font-size: 24rpx;
160 line-height: 2;
161 }
162 .pp{display: flex;
163 .uni-data-tree{font-size: 24rpx;
164 .selected-list{padding: 0;}
165 .input-value{line-height:normal;padding: 0;}
166 }
167 }
168 .matchItem .leftImg image{width: 200rpx;height: 150rpx;border-radius: 4px;}
169 </style>
1 <template>
2 <view style="height: calc(100vh - 160rpx);overflow: auto;">
3 <uni-forms>
4 <view class="colorfulBg">
5 <view>
6 <label>接站地点</label>
7 <text>{{detail.name?.split('——')[0]}}</text>
8 </view>
9 <view><image src="./img/cargo.png" style="width: 100rpx;height: 100rpx;"></image></view>
10 <view>
11 <label>送站地点</label>
12 <text>{{detail.name?.split('——')[1]}}</text>
13 </view>
14 </view>
15 <view class="whiteItem" v-if="form.pickUpBo?.carsList&&form.pickUpBo.carsList.length>0&&form.pickUpBo.total>0">
16 <uni-forms-item label="接站时间">
17 {{form.pickUpBo.revTime}}
18 </uni-forms-item>
19
20 <view class="carLine" v-for="(car,index) in form.pickUpBo.carsList" :key="index">
21 <view v-if="car.num > 0">
22 <label>{{car.name}}</label>
23 <view class="tagline">
24 <text class="tag" v-if="car.carSeat == '0'">四座以下</text>
25 <text class="tag" v-if="car.carSeat == '1'">4-5座</text>
26 <text class="tag" v-if="car.carSeat == '2'">6-7座</text>
27 <text class="tag" v-if="car.carSeat == '3'">其他</text>
28 <text class="tag">{{car.carColor}} </text>
29 <text class="tag" v-if="car.checkOut==1">可送站 </text>
30 <text class="tag" v-if="car.checkIn==1">可接站 </text>
31 </view>
32 </view>
33
34 <text v-if="car.num > 0">{{car.num}}辆 * ¥{{car.price}}</text>
35 </view>
36
37 <uni-forms-item label="联系人">
38 {{form.pickUpBo.contacts}}
39 </uni-forms-item>
40 <uni-forms-item label="联系电话" >
41 {{form.pickUpBo.phone}}
42 </uni-forms-item>
43 <uni-forms-item label="人数" >
44 {{form.pickUpBo.count}}
45 </uni-forms-item>
46 <uni-forms-item label="航班/火车班次" >
47 {{form.pickUpBo.no}}
48 </uni-forms-item>
49 <uni-forms-item label="接机/接站地点" >
50 {{form.pickUpBo.noAddress}}
51 </uni-forms-item>
52 <uni-forms-item label="送达地点" >
53 {{form.pickUpBo.deliveryAddress}}
54 </uni-forms-item>
55
56 <uni-forms-item label="备注" v-if="form.pickUpBo.remarks">
57 {{form.pickUpBo.remarks}}
58 </uni-forms-item>
59 </view>
60
61 <view class="whiteItem" v-if="form.dropOffBo?.carsList&&form.dropOffBo.carsList.length>0&&form.dropOffBo.total>0">
62 <uni-forms-item label="用车时间">
63 {{form.dropOffBo.revTime}}
64 </uni-forms-item>
65
66 <view class="carLine" v-for="(car,index) in form.dropOffBo.carsList" :key="index">
67 <view v-if="car.num > 0">
68 <label>{{car.name}}</label>
69 <view class="tagline">
70 <text class="tag">{{car.carSeat}}</text>
71 <text class="tag">{{car.carColor}}</text>
72 <text class="tag" v-if="car.checkOut==1">可送站 </text>
73 <text class="tag" v-if="car.checkIn==1">可接站 </text>
74 </view>
75 </view>
76
77 <text v-if="car.num > 0"> {{car.num}}辆 * ¥{{car.price}}</text>
78 </view>
79 <uni-forms-item label="联系人" >
80 {{form.dropOffBo.contacts}}
81 </uni-forms-item>
82 <uni-forms-item label="联系电话" >
83 {{form.dropOffBo.phone}}
84 </uni-forms-item>
85 <uni-forms-item label="备注" v-if="form.dropOffBo.remarks">
86 {{form.dropOffBo.remarks}}
87 </uni-forms-item>
88 </view>
89
90 <view style="height: 80rpx;"></view>
91
92 </uni-forms>
93 </view>
94 <view class="bbfix">
95 <!-- 底部提交 -->
96 <view class="price">
97 总价:
98 <text>{{ detail.total }}</text>
99 </view>
100 <!-- 0 未支付 1 支付成功 2 已取消 3 已退订 -->
101 <view class="subBtn" @click="cancel" v-if="form.viewStatus == '5'"> 退订</view>
102 <view class="subBtn gray" v-else disabled> 退订</view>
103 </view>
104
105
106 </template>
107
108 <script setup>
109 import {reactive,toRefs} from 'vue';
110 import {onLoad,onShow} from '@dcloudio/uni-app';
111 import * as hotel from '@/common/hotel.js';
112 const data = reactive({
113 form: {
114 messageObj:{},
115 pickUpBo: {
116 total:0,
117 carsList:[]
118 },
119 dropOffBo: {
120 total:0,
121 carsList:[]
122 }
123 },
124 detail:{}
125 })
126 const {
127 form,detail
128 } = toRefs(data);
129
130 let orderId = ''
131 onLoad((options)=>{
132 if('detail' in options){
133 detail.value = JSON.parse(decodeURIComponent(options.detail));
134 }
135 console.log(detail.value)
136 orderId = options.orderId
137 init()
138 })
139 function init(){
140 getData()
141 }
142 function getData(){
143 hotel.getCarBilldetailbyId(orderId).then(res=>{
144 form.value = res.data
145 // form.value.messageObj = JSON.parse(form.value.message)
146 var m1 = 0
147 var m2 = 0
148 if(form.value.pickUpBo){
149 for(var car of form.value.pickUpBo.carsList){
150 car.total = car.num*car.price
151 m1 += car.total
152 }
153 }
154 if(form.value.dropOffBo){
155 for(var car of form.value.dropOffBo.carsList){
156 car.total = car.num*car.price
157 m2 += car.total
158 }
159 }
160 form.value.pickUpBo.total = m1
161 form.value.dropOffBo.total = m2
162 })
163 }
164 function cancel(){
165 uni.showModal({
166 title: '提示',
167 content: ' 确定退订吗?',
168 showCancel: true,
169 success: function(res) {
170 if (res.confirm) {
171 uni.showLoading({
172 title: '退订中...'
173 });
174 hotel.cancelOrder(orderId).then(respon=>{
175 uni.hideLoading()
176 if(respon.data){
177 uni.showToast({
178 title: '已退订',
179 icon: 'none',
180 duration: 2000
181 })
182 init()
183 } else {
184 uni.showToast({
185 title: '退订失败,请稍候重试',
186 icon: 'none',
187 duration: 2000
188 })
189 }
190 })
191 }
192 }
193 })
194
195
196 }
197 </script>
198
199 <style lang="scss" scoped>
200 :deep(.uni-forms-item__inner){padding-bottom: 10rpx;}
201 :deep(.uni-forms-item__content){line-height: 36px;}
202 .t{padding: 20rpx;}
203 .hotel {
204 }
205 .whiteItem{ width: 700rpx;
206 box-sizing: border-box;
207 margin: 0 auto 26rpx;
208 padding: 26rpx;
209 background: #FFFFFF;
210 box-shadow: 0rpx 0rpx 27rpx 0rpx #DEDEDE;
211 border-radius: 15rpx;}
212 .roomType{color: #4C5359;font-size: 28rpx;margin:10rpx 0;}
213 .roomInfo{color: #4C5359;font-size: 28rpx;}
214 .tip{font-size: 28rpx;color: #E60012;}
215
216 .bbfix {
217 background: #fff;
218 height: 150rpx;
219 display: flex;
220 position: fixed;
221 z-index: 89;
222 width: 100%;
223 bottom: 0;
224 align-items: baseline;
225 justify-content: space-between;
226 border-top: 1rpx solid #dcdcdc;
227
228 .price {
229 padding-left: 20rpx;
230
231 text {
232 font-weight: bold;
233 font-size: 45rpx;
234 color: #ff8124;
235 }
236 }
237 .subBtn {
238 font-size: 32rpx;
239 color: #1EC886;border: 1px solid #1EC886;
240 background: transparent;
241 height: 60rpx;margin: 15rpx;
242 line-height: 60rpx;
243 padding: 0 30rpx;
244 }
245 .subBtn.gray{color: #999;border: 1px solid #999;}
246 }
247 .ccitem{display: flex;justify-content: space-between;font-size: 28rpx;
248 color: #666;margin: 0 0 10rpx;
249 label{font-size: 32rpx;color: #000;}
250 text{color: #1EC886;}
251 }
252 .colorfulBg {display: flex;justify-content: space-around;align-items: center;
253 background: #1EC886;
254 padding: 30rpx 10rpx 20rpx;
255 color: #fff;text-align: center;
256 label{display: block;font-size: 26rpx;margin: 0 0 10rpx;}
257 margin: 0 0 30rpx;
258 }
259 .carLine{display: flex;justify-content: space-between;margin:0 0 20rpx;align-items: top;
260 background: #f8f8f8; padding: 20rpx 0 20rpx 20rpx;
261 &>text{font-size: 26rpx;color: #333;}
262 label{font-size: 28rpx;}
263 .tagline{margin: 0;
264 .tag{font-size: 20rpx;display: inline-block;padding: 2rpx 8rpx;}
265 }
266 // text{font-size: 30rpx;}
267 }
268 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view class="carPage">
3 <uni-collapse accordion v-model="nowOpen" @change="changeCollapse">
4 <uni-collapse-item open="true" :name="item.id" v-for="(item,index) in list" :key="index"
5 v-show="item.carVoList.length>0">
6 <template v-slot:title>
7 <view class="flexTop">
8 <view>
9 <view class="greenSmall">路线{{index+1}}</view>
10 <view class="qq">{{item.checkIn}} </view>
11 </view>
12 <view>
13 <image src="./img/wf.png" style="width:64rpx;height: 64rpx;"></image>
14 </view>
15 <view>
16 <view class="qq" style="margin-top: 52rpx;">{{item.checkOut}} </view>
17 </view>
18 </view>
19 </template>
20 <view class="roomList">
21 <view class="room" v-for="r in item.carVoList" :key="r.id">
22 <view class="ff">
23 <view>
24 <image class="roomCover" mode="aspectFill" :src="r.photos?.split(',')[0]"></image>
25 </view>
26 <view style="width: calc(100% - 180rpx);">
27 <view class="name"> {{r.carType}}
28 <view class="price">
29 ¥<text>{{r.inPrice > r.checkOut?r.checkOut:r.inPrice}}</text>
30 </view>
31 </view>
32 <view class="flexinline">
33 <text>座位数:{{r.carSeat}}</text>
34 <text style="color: #D8DDDE;">|</text>
35 <text>运营时间:{{r.operStart}} - {{r.operEnd}}</text>
36 </view>
37 <view class="tagline">
38 <text class="tag">{{r.carColor}}</text>
39 <text class="tag" v-show="r.checkOut==1">可送车</text>
40 <text class="tag" v-show="r.checkIn==1">可接车</text>
41 </view>
42 <view class="flexinline" style="justify-content: flex-end;">
43 <button @click="goNext(r)">立即预定</button>
44 </view>
45 </view>
46 </view>
47
48
49
50 <!-- <view class="carFlex" v-if="r.checkIn==1">
51 <text class="price">¥{{r.inPrice}}</text>
52 <view>
53 接站车辆数
54 <uni-number-box @change="changecarNum" :min="0" v-model="r.inNum">
55 </uni-number-box>
56 </view>
57 </view>
58 <view class="carFlex" v-if="r.checkOut==1">
59 <text class="price">¥{{r.outPrice}}</text>
60 <view>
61 送站车辆数
62 <uni-number-box @change="changecarNum" :min="0" v-model="r.outNum">
63 </uni-number-box>
64 </view>
65 </view>
66 -->
67 </view>
68 </view>
69
70
71 </uni-collapse-item>
72 </uni-collapse>
73
74 <view class="nodata" v-if="list.length==0">
75 <image mode="aspectFit" src="/static/nodata.png"></image>
76 <text> 暂无可订车辆 </text>
77 </view>
78
79
80 <!-- <view class="bbfix">
81 <view class="subBtn" style="filter: grayscale(1);" v-if="nowOpen==''"> 去下单 </view>
82 <view class="subBtn" @click="submit" v-else> 去下单 </view>
83 </view> -->
84 </view>
85 </template>
86
87 <script setup>
88 import {
89 reactive,
90 toRefs,
91 getCurrentInstance
92 } from 'vue';
93 import * as hotel from '@/common/hotel.js';
94 import {
95 onLoad,
96 onShareAppMessage,
97 onShareTimeline,
98 onPullDownRefresh
99 } from '@dcloudio/uni-app';
100 import _ from 'lodash';
101 const app = getApp();
102 const {
103 proxy
104 } = getCurrentInstance();
105 const data = reactive({
106 nowOpen: '',
107 money: 0,
108 list: []
109 });
110 const {
111 list,
112 nowOpen,
113 money
114 } = toRefs(data);
115 let activeId = null
116 let ccitem = {}
117 onLoad(option => {
118 activeId = option.activeId
119 getList()
120 uni.showLoading({
121 title: '加载中'
122 });
123 })
124
125 function getList() {
126 hotel.getActivityCarList({
127 activityId: activeId
128 }).then(res => {
129 list.value = res.rows
130 nowOpen.value = list.value[0]?.id
131 ccitem = list.value[0]
132 console.log(nowOpen.value)
133 for (var item of list.value) {
134 for (var car of item.carVoList) {
135 car.inNum = 0
136 car.outNum = 0
137 }
138 }
139 uni.hideLoading();
140 })
141 }
142
143 function changecarNum(e) {
144 // 算钱
145 for (var car of ccitem.carVoList) {
146 money.value = car.inNum * car.inPrice + car.outNum * (car.outPrice || 0)
147 }
148 }
149
150 function changeCollapse(e) {
151 console.log(e)
152 if (e !== nowOpen.value) {
153
154 }
155 for (var cc of list.value) {
156 if (cc.id == e) {
157 ccitem = cc
158 }
159 }
160 }
161
162 function checkCarNum() {
163 return _.some(ccitem.carVoList, function(car) {
164 return car.inNum || car.outNum
165 })
166 }
167
168 function submit() {
169 if (checkCarNum()) {
170 const obj = encodeURIComponent(JSON.stringify(ccitem))
171 let path = `/pages_hotel/car/order?carList=${obj}`;
172 uni.navigateTo({
173 url: path
174 });
175 } else {
176 uni.showToast({
177 title: '请选择车辆',
178 icon: 'none',
179 duration: 2000
180 })
181 return
182 }
183 }
184
185 function goNext(car) {
186 const obj = encodeURIComponent(JSON.stringify(ccitem))
187 const detail = encodeURIComponent(JSON.stringify(car))
188 let path = `/pages_hotel/car/order?detail=${detail}&carList=${obj}`;
189 uni.navigateTo({
190 url: path
191 });
192 }
193 </script>
194
195 <style scoped lang="scss">
196 :deep(.uni-collapse-item__title-arrow) {
197 position: absolute;
198 right: 0;
199 top: 10rpx;
200 padding: 10rpx 30rpx;
201 background: #F7F8FA;
202 border-radius: 20px;
203 }
204
205 :deep(.uni-collapse-item__title) {
206 position: relative;
207 }
208
209 .carPage {
210 :deep(.uni-collapse-item) {
211 margin: 0;
212 padding: 0;
213 }
214 }
215
216 .flexTop {
217 display: flex;
218 padding: 20rpx 0;
219 align-items: center;
220
221 &>view {
222 width: 30%;
223 text-align: center;
224 padding: 0 30rpx;
225 }
226
227 &>view:first-child {
228 text-align: left;
229 }
230
231 &>view:last-child {
232 text-align: right;
233 }
234
235 .tt {
236 color: #1EC886;
237 font-size: 28rpx;
238 padding: 30rpx;
239 }
240
241 .qq {
242 font-size: 30rpx;
243 margin-top: 24rpx;
244 }
245
246 .greenSmall {
247 font-size: 24rpx;
248 color: #1EC886;
249 }
250 }
251
252 .roomList {
253 padding: 20rpx;
254 box-sizing: border-box;
255 }
256
257 .room {
258 .ff {
259 display: flex;
260 }
261
262 position: relative;
263 padding: 30rpx 0;
264 border-bottom: 1px solid #DCDCDC;
265
266 &:last-child {
267 border-bottom: none;
268 }
269
270 .name {
271 font-size: 34rpx;
272 width: 100%;
273
274 .price {
275 float: right;
276 }
277 }
278
279 .orange {
280 font-size: 24rpx;
281 }
282
283 .po {
284 position: absolute;
285 right: 0;
286 bottom: 15rpx;
287 display: flex;
288 align-items: flex-end;
289 }
290
291 .price {
292 margin-right: 10rpx;
293 }
294 }
295
296 .roomCover {
297 width: 160rpx;
298 margin-right: 20rpx;
299 height: 170rpx;
300 border-radius: 15rpx;
301 }
302
303 .price {
304 display: flex;
305 align-items: baseline;
306 color: #1EC886;
307
308 text {
309 color: #1EC886;
310 font-size: 55rpx;
311 }
312 }
313
314 .flexinline {
315 display: flex;
316 font-size: 24rpx;
317 color: #5E5E5E;
318 width: 100%;
319
320 text {
321 margin-right: 15rpx;
322 }
323
324 .price {
325 text {
326 margin: 0;
327 }
328 }
329
330 button {
331 color: #fff;
332 width: 180rpx;
333 margin: 0;
334 height: 50rpx;
335 line-height: 50rpx;
336 font-size: 26rpx;
337 border-radius: 25rpx;
338 background: linear-gradient(270deg, #54E1B9, #00CAA6);
339 }
340 }
341
342 .carFlex {
343 display: flex;
344 font-size: 24rpx;
345 color: #5E5E5E;
346 width: 100%;
347 justify-content: space-between;
348 align-items: center;
349
350 .price {
351 display: block;
352 width: 160rpx;
353 text-align: center;
354 }
355
356 view {
357 display: flex;
358 align-items: center;
359 }
360
361 :deep(.uni-numbox) {
362 margin-left: 20rpx;
363 }
364 }
365
366 .bbfix {
367 background: #fff;
368 height: 150rpx;
369 display: flex;
370 position: fixed;
371 z-index: 89;
372 width: 100%;
373 bottom: 0;
374 align-items: baseline;
375 justify-content: space-between;
376 border-top: 1rpx solid #dcdcdc;
377
378 .price {
379 padding-left: 20rpx;
380
381 text {
382 font-weight: bold;
383 font-size: 45rpx;
384 color: #ff8124;
385 }
386 }
387
388 .subBtn {
389 font-size: 36rpx;
390 color: #ffffff;
391 background: #ff8124;
392 height: 120rpx;
393 line-height: 100rpx;
394 padding: 0 30rpx;
395 }
396 }
397 </style>
...\ No newline at end of file ...\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!