refactor(bookTicket): 优化日期选择和支付数量逻辑

优化了bookTicket组件中日期选择和支付数量逻辑。修复了选择日期后购买数量未重置的问题,确保在选择日期时能够正确更新可购买数量。另外,调整了支付数量的校验逻辑,确保在数量变化时进行正确的有效性检查。
lu_quan_dev
Tuzki 1 year ago
parent 13c5d27f41
commit 821b026fd6
  1. 103
      common/pay.js
  2. 2
      common/share.js
  3. 2
      pages/personcenter/personcenter.vue
  4. 2
      static/css/common.css
  5. 13
      subPageA/scenic/scenicdetial/scenicdetial.vue
  6. 93
      subPageB/suggest/sug_from.vue
  7. 7
      subPageB/suggest/sug_list.vue
  8. 63
      subPageC/bookTicket/bookTicket.vue
  9. 21
      subPageC/components/f-pay/f-pay.vue
  10. 47
      subPageC/order/order.vue
  11. 31
      subPageC/order/orderDetail.vue

@ -3,57 +3,61 @@ import { isWechat } from './util';
import HttpRequest from '@/common/httpRequest'
import HttpConfig from '@/common/config'
// 支付(app、小程序)
function setPay(payInfo, callback) {
let userInfo = uni.getStorageSync('userInfo')
let httpData = {
// userId: userInfo.userId || '',
// sessionId: userInfo.sessionId || '',
// openid: userInfo.openId,
// tradeNo: payInfo.tradeNo, // 创建支付订单时返回的 订单号
async function setPay(payInfo, callback) {
try {
const userInfo = uni.getStorageSync('userInfo');
const httpData = {
id: payInfo.tradeNo,
channelCode: "wx_lite",
channelExtras: {
openid: userInfo.openid,
}
}
HttpRequest.post(HttpConfig.payOrder, httpData, 'json', false, false).then((res) => {
console.log(res, '请求结果')
let payData = {}
// success: function (res) {
// var flag = true
// // #ifdef MP-ALIPAY
// if (res.code == 0) {
// flag = true
// } else {
// flag = false
// }
// #endif
// callback && callback({
// success: flag,
};
// 调用预支付函数并等待结果
const res = await prePayOrder(httpData);
console.log(res, '请求结果');
if (res.data == null) {
callback && callback({
success: false,
data: res.msg
})
});
return;
}
console.log(JSON.parse(res.data.displayContent))
const data = JSON.parse(res.data.displayContent)
// });
// console.log('success:' + JSON.stringify(res));
// },
// fail: function (err) {
// callback && callback({
// success: false,
// data: err
// });
// console.log('fail:' + JSON.stringify(err));
// }
// };
console.log(JSON.parse(res.data.displayContent));
const data = JSON.parse(res.data.displayContent);
// 根据支付类型设置支付参数
const payData = preparePayData(payInfo, data);
console.log("支付参数", payData);
// 进行支付请求
await processPayment(payData, callback);
} catch (error) {
callback && callback({
success: false,
data: error.message
});
console.error('支付过程出错:', error);
}
}
// 预支付函数
function prePayOrder(httpData) {
return HttpRequest.post(HttpConfig.payOrder, httpData, 'json', false, false);
}
// 准备支付参数
function preparePayData(payInfo, data) {
const payData = {};
if (payInfo.type == 'mpwxpay') {
console.log('微信小程序支付')
// 微信小程序
console.log('微信小程序支付');
payData.provider = 'wxpay';
payData.timeStamp = data.timeStamp;
payData.nonceStr = data.nonceStr;
@ -61,7 +65,6 @@ function setPay(payInfo, callback) {
payData.signType = data.signType;
payData.paySign = data.paySign;
} else if (payInfo.type == 'wxpay') {
// app微信
payData.provider = 'wxpay';
payData.orderInfo = data.tradeNo;
} else if (payInfo.type == 'alipay') {
@ -72,34 +75,40 @@ function setPay(payInfo, callback) {
payData.orderInfo = data.tradeNo;
} else if (payInfo.type == 'toutiao') {
payData.provider = 'toutiao';
payData.service = 5; // 5:拉起小程序收银台 其他:不拉起字节跳动小程序收银台
payData.service = 5; // 5:拉起小程序收银台
payData._debug = 1;
// payData.payChannel = {
// default_pay_channel: 'wx' // wx|| alipay
// };
payData.orderInfo = {
order_id: data.order_id,
order_token: data.order_token
};
}
console.log("支付参数", payData);
return payData;
}
// 处理支付请求的函数
function processPayment(payData, callback) {
return new Promise((resolve, reject) => {
uni.requestPayment({
...payData,
success: success => {
success: (success) => {
callback && callback({
success: true,
data: success
});
resolve(success);
},
fail: fail => {
fail: (fail) => {
callback && callback({
success: false,
data: fail
});
reject(fail);
}
});
});
}
//公众号微信支付
function wxPublicPay(payInfo, callback) {
if (!isWechat()) {

@ -3,7 +3,7 @@ export default {
return {
//设置默认的分享参数
share: {
title: 'E游',
title: 'E鹿悦游',
path: '/pages/index/index',
imageUrl: '',
desc: '“E”站式游景区',

@ -119,7 +119,7 @@
console.log(res.target)
}
return {
title: 'E码游鹿泉',
title: 'E鹿悦游',
path: '/pages/index/index'
}
},

@ -842,7 +842,7 @@ page{ background: #f5f5f5;}
.lst_sug_warp .lst_sug_unit:last-child{ border: none;}
.zhed_gao{ height: 160rpx; overflow: hidden; position: relative; margin-bottom: 15rpx;}
.zhed_gao:after{ display: block; width: 70rpx; height: 51rpx; content: '...'; background: #fff; font-size: 32rpx; color: #999; position: absolute; right: 50rpx; bottom: -15rpx; text-align: center; }
/* .zhed_gao:after{ display: block; width: 70rpx; height: 51rpx; content: '...'; background: #fff; font-size: 32rpx; color: #999; position: absolute; right: 50rpx; bottom: -15rpx; text-align: center; } */
/* 投诉form表单页 */

@ -166,6 +166,7 @@ export default {
onUnload() { },
onShow() {
this.param.page = 1;
this.detailInfo(this.guid)
},
onReady() {
// setTimeout(function() {
@ -304,16 +305,6 @@ export default {
}
});
},
//
getTicketSortList(val) {
this.$Request
.get(this.$config.getTicketSortList, { tenantId: val }, null, null, false, false)
.then((res) => {
console.log(res, "门票分类");
this.ticketSortList = res.data;
this.getTicketList(val);
});
},
//
getTicketList(val) {
this.$Request
@ -335,7 +326,7 @@ export default {
//
goJianJie() {
const obj = {
playtime: this.info.playtime,
playtime: this.info.businesstime,
smobile: this.info.smobile,
tips: this.info.tips,
sdescribe: this.info.sdescribe,

@ -59,9 +59,7 @@
<view class="sug_form_line">
<view class="sug_dly_flex">
<view class="sug_sgu where">这件事发生在哪里<text class="chel_t_s"></text></view>
<!-- <view @tap="getLocation()" class="sug_r">
<view class="sug_dwei">事件发生地必填<text>></text></view>
</view> -->
</view>
<view>
<input type="text" @input="inputVerify" name="address" :value="address" placeholder="手动输入"
@ -299,7 +297,7 @@ export default {
cimages: filePath,//
// lat: that.latitude,
// lng: that.longitude,
appid: that.$param.userkey,// openid
appid: uni.getStorageSync("userInfo").openid,// openid
dataType: that.type//1:2:
}
this.$Request.post(this.$config.createComplaintinfo, data, "json", null, false).then(res => {
@ -309,12 +307,9 @@ export default {
content: "提交成功",
showCancel: false,
success() {
uni.redirectTo({
url: "/subPageA/suggest/sug_list?type=" + that.type
uni.navigateBack({
delta: 1
})
// uni.navigateBack({
// delta: 1
// })
}
})
} else {
@ -345,21 +340,7 @@ export default {
url = "kong";
}
}
switch (uni.getSystemInfoSync().platform) {
case 'android':
console.log('运行Android上')
this.$util.bindGpsObj(that);
Android.gotoDetial("ImageFrom", "camera");
Android.gotoDetial('SVGLINE', url);
break;
case 'ios':
console.log('运行iOS上')
this.$util.bindGpsObj(that);
window.location.href = "https://www.baidu.com?url=svg&value=" + url;
break;
default:
break;
}
});
uni.showLoading({
title: "开启相机中...",
@ -403,7 +384,7 @@ export default {
uni.chooseImage({
count: 9, // 9
sizeType: ['original', 'compressed'], // original compressed
sourceType: ['album', 'camera'], // album camera 使
sourceType: ['album'], // album camera 使
success: function (res) {
uni.showLoading({
mask: true,
@ -452,68 +433,6 @@ export default {
delImg: function (index) {
this.pics.splice(index, 1);
},
getLocation: function () {
var that = this;
uni.showLoading({
title: "定位中",
mask: true
})
this.$util.bindGpsObj(that);
this.$util.getLocation(
function (res) {
if (that.$wechat.isWechat()) {
that.latitude = res.latitude;
that.longitude = res.longitude;
}
var data = {
lat: res.latitude,
lng: res.longitude,
poi: "0",
key: "Z2IBZ-6BRKG-Z52QT-IU3J2-6P3QO-WIBII"
}
that.$Request.post(that.$config.getAddressByLatLng, data).then(res => {
if (res.status == 0) {
that.address = res.result.address;
}
});
uni.hideLoading();
},
function () {
console.log('location error---');
uni.hideLoading();
}
);
},
callGpsSuccess: function (lat, lng) {
var that = this;
var data = {
lat: lat,
lng: lng,
poi: "0",
key: "Z2IBZ-6BRKG-Z52QT-IU3J2-6P3QO-WIBII"
}
that.$Request.post(that.$config.getAddressByLatLng, data).then(res => {
if (res.status == 0) {
that.address = res.result.address;
}
});
uni.hideLoading();
},
callGpsFail: function () {
var that = this;
var data = {
lat: this.$param.lat,
lng: this.$param.lng,
poi: "0",
key: "Z2IBZ-6BRKG-Z52QT-IU3J2-6P3QO-WIBII"
}
that.$Request.post(that.$config.getAddressByLatLng, data).then(res => {
if (res.status == 0) {
that.address = res.result.address;
}
});
uni.hideLoading();
},
}
}
</script>

@ -106,6 +106,11 @@ export default {
type: 1
}
},
onShow() {
this.controlList = [];
this.page = 1;
this.getUserMsg();
},
onLoad: function (options) {
var that = this;
this.$util.getNetworkType(
@ -132,7 +137,7 @@ export default {
}
this.$util.hideLoadingByTime();
this.type = options.type;
this.getUserMsg();
// this.getUserMsg();
},
methods: {
onReachScroll: function (t) {

@ -55,7 +55,7 @@
<view class="m-ticket-count">
<view class="m-ticket-count-label">购票数量</view>
<view class="m-ticket-count-value" v-if="ticket && ticket.qmxId == null">
<uni-number-box v-if="maxNum == -1" :min="0" v-model="ticket.num" :disabled="!ticket.date"
<uni-number-box v-if="maxNum == -1" :min="0" :max="maxBuyNums" v-model="ticket.num" :disabled="!ticket.date"
@change="changeCount($event, ticket)" />
<uni-number-box v-else :min="0" :max="maxNum" v-model="ticket.num" :disabled="!ticket.date"
@change="changeCount($event, ticket)" />
@ -124,10 +124,13 @@
<view class="m-title-tips">需填 {{ ticket.touristInformation == 2 ? 1 : peopleNums() }} </view>
</view>
<view class="m-two-first-row">
<view class="m-user-list" :class="item.selected ? 'active' : ''" v-for="item in navUserList"
<view class="user-list-box">
<view class="m-user-list m-user-list-left" :class="item.selected ? 'active' : ''" v-for="item in navUserList"
@click="selectUser(item)">
{{ item.name }}
</view>
</view>
<view class="m-user-list m-more-user" @click="openAddress">
<span class="m-span">
新增
@ -172,7 +175,8 @@
{{ item.name || '暂无' }}
</view>
<!-- <view v-if="item.idtype && item.idtype == ticketIdType" class="m-middle-user-idCode m-gray m-m-font">{{ -->
<view class="m-middle-user-idCode m-gray m-m-font">{{ labelName(item.idtype) }}:{{ item.idCardNumber || '暂无' }}
<view class="m-middle-user-idCode m-gray m-m-font">{{ labelName(item.idtype) }}:{{ item.idCardNumber ||
'暂无' }}
</view>
<view v-if="item.phoneNumber" class="m-middle-user-tel m-gray m-m-font">手机号 {{ item.phoneNumber || '暂无'
}}
@ -285,7 +289,7 @@
<view class="m-table-head">费用包含</view>
<view class="m-table-th">
<view class="m-table-td">门票</view>
<view class="m-table-td">{{ ticketInfos.ticketname || "-" }}</view>
<view class="m-table-td">{{ ticket.ticketname || "-" }}</view>
</view>
</view>
<view class="m-driver"></view>
@ -477,6 +481,7 @@ export default {
data() {
return {
maxNum: -1,
maxBuyNums:300,
tentId: null,
selected: null, //
startDate: parseTime(new Date()),
@ -587,7 +592,7 @@ export default {
// }
// if (val.qmxId == null) {
this.$nextTick(() => {
this.sumPrice = val.settlementPrice * val.num;
this.sumPrice = Number(val.settlementPrice) * Number(val.num);
})
// }
},
@ -596,7 +601,7 @@ export default {
'dataList': {
handler(val) {
console.log(val);
this.navUserList = val.slice(0, 3)
this.navUserList = val
},
deep: true
}
@ -612,6 +617,7 @@ export default {
fullDate: this.getFullDate(i),
isAvailable: true,
price: "0元",
inventory:0,
});
}
console.log(options);
@ -780,6 +786,7 @@ export default {
selectedDates.forEach((item, index) => {
that.dates[index].isAvailable = item.disable;
that.dates[index].price = item.topInfo;
that.dates[index].inventory = -1
});
console.log(this.dates);
@ -803,9 +810,9 @@ export default {
res.data.forEach(items => {
const obj = {
date: items.date,
info: items.isAvailable || items.inventory == 0? "库存:" + items.inventory:'',
info: items.isAvailable || items.inventory != 0 ? "库存:" + items.inventory : '',
infoColor: "#666",
topInfo: items.isAvailable || items.inventory == 0 ? items.settlementPrice + '元':'',
topInfo: items.isAvailable || items.inventory != 0 ? items.settlementPrice + '元' : '',
topInfoColor: "",
badgeColor: "",
disable: !items.isAvailable || items.inventory == 0, //
@ -816,6 +823,7 @@ export default {
selectedDates.forEach((item, index) => {
that.dates[index].isAvailable = item.disable;
that.dates[index].price = item.topInfo;
that.dates[index].inventory = item.inventory == -1 ? -1: item.inventory;
});
console.log(this.dates);
@ -854,6 +862,7 @@ export default {
selectedDates.forEach((item, index) => {
that.dates[index].isAvailable = item.disable;
that.dates[index].price = item.topInfo;
that.dates[index].inventory = item.inventory==-1?-1:item.inventory;
});
console.log(this.dates);
@ -1032,6 +1041,7 @@ export default {
this.ticket.settlementPrice = parseFloat(date.price.replace("元", "").trim());
this.ticket.num = 1
this.sumPrice = this.ticket.settlementPrice * this.ticket.num;
this.maxBuyNums = date.inventory == -1 ? 300 : date.inventory
this.$forceUpdate();
console.log(this.ticket, "this.ticket");
@ -1278,8 +1288,9 @@ export default {
item.phoneNumber = "";
}
if (that.ticket.ischeckedIdcard == 0) {
item.idCardName = "";
item.idCardNumber = "";
}
console.log(item, '当前访客信息');
})
console.log(arr, 'arrarrarr', that.ticket.ischeckedMobile, that.ticket.ischeckedIdcard)
if (allValid && allValids && allValidtel) {
@ -1411,7 +1422,7 @@ export default {
item.phoneNumber = "";
}
if (that.ticketIdType == null) {
item.idCardName = "";
item.idCardNumber = "";
}
})
if (allValid && allValids && allValidtel) {
@ -1512,6 +1523,7 @@ export default {
that.nowIndex = -1
}
})
this.maxBuyNums = e.info == "" ? 300 : Number(e.info.split(":")[1])
this.ticket.date = e.fulldate;
this.ticket.settlementPrice = parseFloat(
e.extraInfo.topInfo.replace("元", "").trim()
@ -1534,9 +1546,9 @@ export default {
},
//
changeCount(val, ticket) {
console.log(val);
console.log(val, ticket);
this.ticket.num = val;
this.sumPrice = ticket.settlementPrice * val;
this.sumPrice = Number(ticket.settlementPrice) * val;
},
//
selectUser(val, boo) {
@ -1559,19 +1571,7 @@ export default {
}
})
this_.selectUserList.push(val);
// if (boo == true) {
// const index = this.navUserList.findIndex(user => user.selected == false);
// //
// if (index !== -1) {
// this.$nextTick(() => {
// this.navUserList.splice(index, 1, val);
// })
// console.log(this.navUserList, 'this.navUserList')
// } else {
// console.log(' select false ');
// }
// }
}
} else {
val.selected = false;
@ -1867,6 +1867,19 @@ export default {
margin-left: 10rpx;
}
.user-list-box {
width: 75%;
display: flex;
align-items: center;
overflow-x: scroll;
.m-user-list-left {
width: fit-content;
flex: none;
}
}
.m-user-list.active {
background: #ebf5ff;
border-radius: 12rpx;

@ -39,9 +39,9 @@
<view class="order-list">
<view class="list-item1">
<view class="list-item1-label">订单详情</view>
<view class="list-item1-value"><span>{{ order.orderInfo.ticketList[0].ticketname
|| order.ticketList[0].ticketname }}</span> x <span>{{
order.orderInfo.ticketList[0].ticketNums || order.ticketList[0].ticketNums }}</span>
<view class="list-item1-value"><span class="ticket-name">{{ order.orderInfo.ticketList[0].ticketname
|| order.ticketList[0].ticketname }}</span> <span class="ticket-nums"> x{{
order.orderInfo.ticketNums || order.ticketNums }}</span>
</view>
</view>
<view class="list-item1">
@ -544,6 +544,21 @@ export default {
/* padding-right: 20px; */
overflow: hidden;
text-overflow: ellipsis;
display: flex;
align-items: center;
justify-content: space-between;
.ticket-name{
width: 80%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.ticket-nums{
flex: 1;
margin-left: auto;
}
}
&:not(:last-child) {

@ -38,10 +38,7 @@
<view class="m-card-content">
<view class="m-ticket-item">
<view class="m-ticket-inf">
<!-- <view class="m-ticket-img-box">
<image @error="imageErr($event)" class="m-ticket-img"
:src="item.ticketList[0].ticketCoverImg" mode=""></image>
</view> -->
<view class="m-ticket-name">
<view>{{ item.ticketList[0].ticketname }}</view>
<view class="m-ticket-status">
@ -133,9 +130,13 @@
<view class="m-middle-list-item">
<view class="m-item-label">退款清单</view>
<view class="m-item-value-box">
<view class="m-item-value" v-for="item in orderInfo.ticketList">{{ item.ticketname }} *{{
<view class="m-item-value m-item-value-item" v-for="item in orderInfo.ticketList"><span
class="ticket-name">{{
item.ticketname }}</span>
<span class="ticket-num">*{{
item.ticketNums
}}</view>
}}</span>
</view>
</view>
</view>
<view class="m-middle-list-item">
@ -408,7 +409,14 @@ export default {
},
//退
refund(val) {
this.orderInfo = val
console.log(val, 'val')
if (val && Array.isArray(val.ticketList)) {
const filteredList = val.ticketList.filter(item => item.ticketStatus == 1);
val.ticketList = filteredList; // ticketList
}
this.orderInfo = val; // orderInfo
console.log(this.orderInfo);
// backOrder
this.$refs.refundPopup.open();
},
@ -717,7 +725,7 @@ export default {
padding: 30rpx;
background: #fff;
border-radius: 15rpx;
box-shadow: 0 0 8px 2px #dedede;
box-shadow: 0 0 8px 2px #e0efff;
.m-pop-title {
text-align: center;
@ -726,8 +734,7 @@ export default {
.m-pop-middle {
margin: 30rpx 0;
padding: 20rpx;
background: #eee;
box-shadow: inset 0 0 10px 2px #e2e2e2;
background: #fbfbfb;
border-radius: 15rpx;
.m-middle-list {
@ -751,6 +758,8 @@ export default {
font-size: 24rpx;
color: #111;
}
}
}
@ -785,4 +794,22 @@ export default {
.m-prime:not(:last-child) {
margin-right: 20rpx;
}
.m-item-value-item {
display: flex;
align-items: center;
justify-content: space-between;
.ticket-name {
width: 75%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ticket-num {
flex: 1;
margin-left: auto;
}
}
</style>

@ -19,15 +19,10 @@
<view class="m-label big-font">应付金额</view>
<view class="m-value">¥{{ formData.settlementAmount }}</view>
</view>
<view class="m-row right" v-if="formData.orderStatus == 1">
<view class="m-label big-font">{{ formData.ticketList[0].ticketname }}</view>
<view class="m-value">{{ formData.ticketList.length }} x
{{ formData.ticketList[0].settlementAmount }}
</view>
</view>
<view class="m-row right" v-if="formData.orderStatus == 2 || formData.orderStatus == 3">
<view class="m-row right">
<view class="m-label big-font">{{ formData.ticketList[0].ticketname }}</view>
<view class="m-value"> x {{ formData.ticketList.length }}
<view class="m-value">{{ formData.ticketNums }}
{{ formData.settlementAmount }}
</view>
</view>
<view class="m-row">
@ -49,11 +44,9 @@
<view class="qr" v-for="(item, index) in formData.ticketList"
:class="formData.ticketList.length == 1 ? 'alone' : ''">
<view class="user-info" v-if="item.tickeTourtList.length > 0 && item.tickeTourtList">
<view>{{ item.tickeTourtList[0].username }}</view>
<view v-if="item.tickeTourtList[0].idcard">{{ item.tickeTourtList[0].idcard }}</view>
<view v-if="item.tickeTourtList[0].mobile">{{ item.tickeTourtList[0].mobile }}</view>
<view class="user-info-left-c"></view>
<view class="user-info-right-c"></view>
<view> :{{ item.tickeTourtList[0].username }}</view>
<view v-if="item.tickeTourtList[0].idcard">证件号:{{ item.tickeTourtList[0].idcard }}</view>
<view v-if="item.tickeTourtList[0].mobile">电话号:{{ item.tickeTourtList[0].mobile }}</view>
</view>
<view class="qr-box">
<view v-if="item.qmxSnUrl == null">
@ -63,13 +56,13 @@
<view v-if="item.qmxSnUrl != null" style="width: 170px; height: 170px;">
<image style="width: 170px; height: 170px; background-color: #eeeeee;" :src="item.qmxSnUrl"></image>
</view>
<view class="chect-time">已检票次数:{{ item.ticketCheckedNums }}/{{ item.ticketChecksNums }}
<view class="chect-time" v-if="item.ticketStatus!=null">已检票次数:{{ item.ticketCheckedNums }}/{{ item.ticketChecksNums }}
</view>
<view class="refond-btn" v-if="item.ticketStatus == 1 && item.refundRules != 1"
hover-class="refond-btn-hover" @click="toRefund(item)">
单票退款</view>
<view class="cover" v-if="item.ticketStatus != 1 || item.ticketCheckedNums == item.ticketChecksNums">{{
item.ticketStatusName }}</view>
<view class="cover" v-if="item.ticketStatus == 2 && item.ticketCheckedNums == item.ticketChecksNums || item.ticketStatus == 3 || item.ticketStatus == 4 || item.ticketStatus == 5 || item.ticketStatus == 6 || item.ticketStatus == 7||item.ticketStatus == null">{{
item.ticketStatusName||'暂无' }}</view>
</view>
<uqrcode v-show="false" @complete="completeQr($event, index)" ref="uqrcode" canvas-id="qrcode"
:value="item.ticketEwm" :options="options"></uqrcode>
@ -248,8 +241,8 @@ export default {
let httpData = {
orderNumber: this_.formData.orderNumber,
}
this.$Request
.get(this.$config.cancelOrder, httpData, null, null, false, false)
this_.$Request
.get(this_.$config.cancelOrder, httpData, null, null, false, false)
.then((res) => {
if (res.code == 0) {
uni.showToast({
@ -567,6 +560,8 @@ export default {
position: relative;
padding: 40rpx 80rpx;
border-bottom: 1px dashed #fff;
text-align: left;
font-size: 24rpx;
&::before {
content: "游客";

Loading…
Cancel
Save