37e8b001 by 杨炀

no message

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