From c6dcc7ab4d61d1a291b720cec75776333aea1aff Mon Sep 17 00:00:00 2001
From: tangxinyue <524779910@qq.com>
Date: Thu, 12 Feb 2026 18:43:48 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=90=BA=E7=A8=8B=E6=9C=BA?=
=?UTF-8?q?=E7=A5=A8=E4=BF=AE=E6=94=B9=E8=A7=86=E9=A2=91=E8=81=8A=E5=A4=A9?=
=?UTF-8?q?=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
components/nav-bar/nav-bar.vue | 6 +-
components/watermark/watermark.vue | 122 +-
main.js | 2 +-
pages/common/recharge/index.vue | 3868 ++++++++---------
.../ctrip-air-tickets/ctrip-air-tickets.vue | 103 +-
pages/other/air-tickets/edit/edit.vue | 4 +-
.../fliggy-air-tickets/fliggy-air-tickets.vue | 33 +-
.../qunar-air-tickets/qunar-air-tickets.vue | 28 +-
.../video-group-chat/video-group-chat.vue | 82 +-
.../other/air-tickets/ctrip-air/level-1.png | Bin 5132 -> 2780 bytes
.../other/air-tickets/ctrip-air/level-2.png | Bin 4344 -> 2930 bytes
.../other/air-tickets/ctrip-air/level-3.png | Bin 4938 -> 2730 bytes
.../other/air-tickets/ctrip-air/level-4.png | Bin 4536 -> 3030 bytes
utils/common.js | 14 +
utils/globalMethods.js | 1 +
15 files changed, 2196 insertions(+), 2067 deletions(-)
diff --git a/components/nav-bar/nav-bar.vue b/components/nav-bar/nav-bar.vue
index 921290b..1525ee8 100644
--- a/components/nav-bar/nav-bar.vue
+++ b/components/nav-bar/nav-bar.vue
@@ -1,9 +1,11 @@
-
+
-
+
+
+
-->
-
+
\ No newline at end of file
diff --git a/main.js b/main.js
index edbce97..477ed6f 100644
--- a/main.js
+++ b/main.js
@@ -27,7 +27,7 @@ export function createApp() {
const systemInfo = uni.getStorageSync('systemInfo') || {}
app.config.globalProperties.$system = systemInfo.platform == 'ios' ? 'iOS' : 'Android'
app.config.globalProperties.$systemInfo = systemInfo
- uni.setStorageSync('version', '1.0.1.sp5')
+ uni.setStorageSync('version', '1.0.2.sp4')
app.config.globalProperties.$version = uni.getStorageSync('version')
app.use(globalMethods);
diff --git a/pages/common/recharge/index.vue b/pages/common/recharge/index.vue
index 090ff64..b612fa2 100644
--- a/pages/common/recharge/index.vue
+++ b/pages/common/recharge/index.vue
@@ -260,545 +260,253 @@
\ No newline at end of file
diff --git a/pages/other/air-tickets/ctrip-air-tickets/ctrip-air-tickets.vue b/pages/other/air-tickets/ctrip-air-tickets/ctrip-air-tickets.vue
index ebe9044..5282e0a 100644
--- a/pages/other/air-tickets/ctrip-air-tickets/ctrip-air-tickets.vue
+++ b/pages/other/air-tickets/ctrip-air-tickets/ctrip-air-tickets.vue
@@ -1,5 +1,12 @@
-
+
+
+
+
+
+
+
+
@@ -8,7 +15,7 @@
-
+
@@ -20,7 +27,8 @@
订单详情
+ :src="`/static/image/other/air-tickets/ctrip-air/level-${airTicketsInfo.ctripOrderInfo.level}.png`"
+ mode="widthFix">
@@ -110,7 +118,8 @@
总计
- ¥{{ airTicketsInfo.orderInfo.price }}
+ ¥{{ airTicketsInfo.orderInfo.price
+ }}
@@ -136,7 +145,7 @@
-
+
{{
@@ -157,7 +166,7 @@
{{ flightInfo.year }} 年 {{ flightInfo.date }} {{
flightInfo.week
}}
-
+
@@ -180,20 +189,30 @@
style="flex-wrap: wrap; flex: 1; width: 100%;">
- {{ airlineInfo.name }}
- {{ airTicketsInfo.flightInfo.flightNumber }}
-
- {{ airTicketsInfo.flightInfo.seatCategory }}
-
- {{ airTicketsInfo.flightInfo.aircraftType }}
-
- {{
- airTicketsInfo.flightInfo.meal
- }}
-
- {{
- airTicketsInfo.flightInfo.luggageCheckInQuota
- }}
+ {{
+ airlineInfo.name }}
+ {{ airTicketsInfo.flightInfo.flightNumber }}
+
+
+ {{
+ airTicketsInfo.flightInfo.seatCategory }}
+
+
+ {{
+ airTicketsInfo.flightInfo.aircraftType }}
+
+
+ {{
+ airTicketsInfo.flightInfo.meal
+ }}
+
+ {{
+ airTicketsInfo.flightInfo.luggageCheckInQuota
+ }}
已购 / 赠送服务
-
+
优惠券
@@ -228,12 +247,12 @@
color="#C7C8CC">
- 旅游专享券
+ 旅游专享券
-
+
机场美食券
@@ -250,8 +269,8 @@
出行人
- {{
+ {{
value.name }}
查看证件、航司预订号、修改姓名/证件
@@ -264,8 +283,9 @@
联系手机
- +86 {{ airTicketsInfo.ticketNumber.replace(/(\d{3})\d{4}(\d{4})/,
- '$1****$2')
+ +86 {{
+ airTicketsInfo.ticketNumber.replace(/(\d{3})\d{4}(\d{4})/,
+ '$1****$2')
}}
@@ -355,10 +375,14 @@ import airlineJson from '@/static/json/air-line.json';
const buttonGroup = [{
name: "编辑机票信息",
click: () => {
- util.goPage(`/pages/other/air-tickets/edit/edit?ticketsApp=ctrip&storageKey=${data.STORAGE_KEY}`)
+ goEdit()
}
}]
+function goEdit() {
+ util.goPage(`/pages/other/air-tickets/edit/edit?ticketsApp=ctrip&storageKey=${data.STORAGE_KEY}`)
+}
+
const data = reactive({
navBar: {
bgColor: 'transparent'
@@ -496,6 +520,8 @@ onPageScroll((e) => {
display: flex;
align-items: center;
justify-content: center;
+ padding-top: 16rpx;
+ padding-bottom: 32rpx;
}
::v-deep .uni-navbar__header-btns-right {
@@ -599,7 +625,7 @@ onPageScroll((e) => {
.text_5 {
color: #ffffff;
font-size: 44rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
line-height: 40.48rpx;
letter-spacing: 2.2rpx;
}
@@ -689,7 +715,7 @@ onPageScroll((e) => {
.text_13 {
color: #f2740d;
font-size: 20rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
line-height: 18.38rpx;
}
}
@@ -762,7 +788,7 @@ onPageScroll((e) => {
.font_4 {
font-size: 28rpx;
line-height: 24.72rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
color: #1a1a1a;
}
}
@@ -770,7 +796,7 @@ onPageScroll((e) => {
.font_3 {
font-size: 24rpx;
line-height: 22.24rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
color: #ffffff;
}
}
@@ -894,7 +920,6 @@ onPageScroll((e) => {
background-color: #ffffff;
border-radius: 16rpx 16rpx 0 0;
margin-top: -16rpx;
- z-index: 99;
.group_8 {
border-radius: 24rpx 24rpx 0 0;
@@ -1050,7 +1075,7 @@ onPageScroll((e) => {
.font_10 {
font-size: 32rpx;
line-height: 36rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
color: #1a1a1a;
}
@@ -1070,7 +1095,7 @@ onPageScroll((e) => {
border: solid 2rpx #0177d4;
.text_40 {
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
line-height: 22.36rpx;
}
}
@@ -1079,7 +1104,7 @@ onPageScroll((e) => {
.font_7 {
font-size: 36rpx;
line-height: 24.72rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
color: #1a1a1a;
}
}
@@ -1384,7 +1409,7 @@ onPageScroll((e) => {
.font_6 {
font-size: 36rpx;
line-height: 33.26rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
color: #1a1a1a;
}
@@ -1399,7 +1424,7 @@ onPageScroll((e) => {
bottom: 0;
left: 0;
right: 0;
- z-index: 999;
+ z-index: 9;
}
@@ -1474,7 +1499,7 @@ onPageScroll((e) => {
.font {
font-size: 28rpx;
line-height: 24.72rpx;
- font-weight: 700;
+ font-weight: var(--font-weight-bold);
color: #ffffff;
}
}
diff --git a/pages/other/air-tickets/edit/edit.vue b/pages/other/air-tickets/edit/edit.vue
index e45e07a..512c9ec 100644
--- a/pages/other/air-tickets/edit/edit.vue
+++ b/pages/other/air-tickets/edit/edit.vue
@@ -455,7 +455,7 @@ onLoad((options) => {
Object.assign(data.ticketsInfo, mergedData)
// 再次检查 tips 是否存在,如果不存在(比如 stored 是旧数据且 defaultData 也没这个字段 - 虽然 defaultData 应该有),初始化为空数组
- if (data.storageKey === 'fligggyAirTicketsInfo' && !data.ticketsInfo.fligggyOrderInfo.tips) {
+ if (data.storageKey === 'fliggyAirTicketsInfo' && !data.ticketsInfo.fligggyOrderInfo.tips) {
data.ticketsInfo.fligggyOrderInfo.tips = []
}
if (data.storageKey === 'ctripAirTicketsInfo' && !data.ticketsInfo.ctripOrderInfo.tips) {
@@ -486,7 +486,7 @@ const handleRightButtonClick = () => {
}
if (data.storageKey === 'ctripAirTicketsInfo') {
delete data.ticketsInfo.fligggyOrderInfo
- } else if (data.storageKey === 'fligggyAirTicketsInfo') {
+ } else if (data.storageKey === 'fliggyAirTicketsInfo') {
delete data.ticketsInfo.ctripOrderInfo
} else {
delete data.ticketsInfo.fligggyOrderInfo
diff --git a/pages/other/air-tickets/fliggy-air-tickets/fliggy-air-tickets.vue b/pages/other/air-tickets/fliggy-air-tickets/fliggy-air-tickets.vue
index fa11333..d22b73d 100644
--- a/pages/other/air-tickets/fliggy-air-tickets/fliggy-air-tickets.vue
+++ b/pages/other/air-tickets/fliggy-air-tickets/fliggy-air-tickets.vue
@@ -112,7 +112,7 @@
总价
¥
- {{ airTickrtInfo.orderInfo.price }}
+ {{ airTickrtInfo.orderInfo.price }}
@@ -140,7 +140,7 @@
-
+
{{ airTickrtInfo.flightInfo.startTime }}
@@ -202,13 +202,16 @@
:class="{ 'last-passenger': index === airTickrtInfo.passengersInfo.length - 1 }"
v-for="(item, index) in airTickrtInfo.passengersInfo" :key="index">
乘机人
-
+
{{ item.name }}
- {{ item.idType }}:{{ item.idNumber }}
+ {{ item.idType }}:{{ item.idType === '身份证' ?
+ stringUtil.maskIdCard(item.idNumber) : (item.idType === '护照' ?
+ stringUtil.maskPassport(item.idNumber) : item.idNumber) }}
票号:{{ item.ticketNo }}
-
+
复制
({{ airTickrtInfo.flightInfo.startCity }}-{{
airTickrtInfo.flightInfo.endCity }})
@@ -299,15 +302,20 @@ import { ref, onMounted, reactive, toRefs, computed } from 'vue';
import { onShow } from '@dcloudio/uni-app';
import defualtData from '@/pages/other/air-tickets/commom/defualt.json';
import airlineJson from '@/static/json/air-line.json';
-import { util, numberUtil } from '@/utils/common.js';
+import { util, numberUtil, stringUtil } from '@/utils/common.js';
const buttonGroup = [{
name: "编辑机票信息",
click: () => {
- util.goPage(`/pages/other/air-tickets/edit/edit?ticketsApp=fliggy&storageKey=${data.STORAGE_KEY}`)
+ goEdit()
}
}]
+
+function goEdit() {
+ util.goPage(`/pages/other/air-tickets/edit/edit?ticketsApp=fliggy&storageKey=${data.STORAGE_KEY}`)
+}
+
const data = reactive({
STORAGE_KEY: 'fliggyAirTicketsInfo',
navBar: {
@@ -988,28 +996,31 @@ const onBack = () => {
.ticket-row {
display: flex;
align-items: center;
- gap: 8rpx;
font-size: 24rpx;
line-height: 24rpx;
color: #1A1A1A;
margin-bottom: 50rpx;
.action-text {
+ flex-shrink: 0;
color: #6F66D9;
font-weight: 500;
+ margin-left: 8rpx;
}
.copy-icon-sm {
- width: 20rpx;
- height: 20rpx;
+ flex-shrink: 0;
+ margin-left: 8rpx;
}
.sub-text {
+ flex-shrink: 0;
color: #999;
margin-left: 8rpx;
}
.ticket-no {
+ flex-shrink: 0;
color: #333;
}
}
diff --git a/pages/other/air-tickets/qunar-air-tickets/qunar-air-tickets.vue b/pages/other/air-tickets/qunar-air-tickets/qunar-air-tickets.vue
index d131678..e1cb0a7 100644
--- a/pages/other/air-tickets/qunar-air-tickets/qunar-air-tickets.vue
+++ b/pages/other/air-tickets/qunar-air-tickets/qunar-air-tickets.vue
@@ -83,8 +83,11 @@
{{ ticketData.flightInfo.startTime }}
{{ ticketData.flightInfo.startAirport }}
-
+
+
+
@@ -111,8 +114,11 @@
{{ ticketData.flightInfo.endTime }}
{{ ticketData.flightInfo.endAirport }}
-
+
+
+
@@ -120,19 +126,19 @@
+ mode="widthFix" style="width: 12px;margin-right: 4rpx;flex-shrink: 0;">
{{ ticketData.flightInfo.aircraftType }}
|
+ mode="widthFix" style="width: 12px;margin-right: 4rpx;flex-shrink: 0;">
{{ ticketData.flightInfo.seatCategory }}
|
+ mode="widthFix" style="width: 12px;margin-right: 4rpx; flex-shrink: 0;">
准点率{{ ticketData.flightInfo.onTimeRate }}
|
+ style="width: 12px;margin-right: 4rpx;flex-shrink: 0;">
{{ ticketData.flightInfo.meal }}
@@ -192,7 +198,9 @@
{{ p.name }}
- {{ p.idType }}: {{ p.idNumber }}
+ {{ p.idType }}: {{ p.idType === '身份证' ?
+ stringUtil.maskIdCard(p.idNumber) : (p.idType === '护照' ?
+ stringUtil.maskPassport(p.idNumber) : p.idNumber) }}
票号:{{ p.ticketNo }}
- {{ videoData.timeText }}
+ {{ data.timing }}
完成
@@ -169,7 +169,7 @@ const data = reactive({
videoData: {
micOn: true,
speakerOn: true,
- cameraOn: false,
+ cameraOn: true,
mainVideoIndex: 0,
timeText: '125:22',
videoList: [
@@ -178,9 +178,10 @@ const data = reactive({
{ preview: '/static/image/other/video-call/defualt/voice_chat_3.jpg', videoUrl: '', savedVideoUrl: '', iconType: 0 },
{ preview: '/static/image/other/video-call/defualt/voice_chat_4.jpg', videoUrl: '', savedVideoUrl: '', iconType: 0 },
{ preview: '/static/image/other/video-call/defualt/voice_chat_5.jpg', videoUrl: '', savedVideoUrl: '', iconType: 0 },
- { preview: '/static/image/other/video-call/defualt/voice_chat_me.jpg', videoUrl: '', savedVideoUrl: '', iconType: 1 }
+ { preview: '/static/image/other/video-call/defualt/voice_chat_me.jpg', videoUrl: '', savedVideoUrl: '', iconType: 0 }
]
},
+ timing: 0,
videoDataBackup: null, // 编辑模式备份
isEdit: false,
statusBarHeight: 0,
@@ -205,6 +206,7 @@ const data = reactive({
// 定时器引用,用于页面卸载时清理
let statusBarTimer = null
+let timingTimer = null // 计时定时器
let { videoData, statusBarHeight } = toRefs(data)
@@ -261,11 +263,13 @@ onLoad(() => {
console.log('videoData1', videoData)
const videoDataNew = {
...videoData,
+ iconType: videoData.onMic ? videoData.iconType : 1,
videoList: videoData.videoList.map((item) => {
item.videoUrl = plus.io.convertLocalFileSystemURL(item.savedVideoUrl)
return item
})
}
+ data.timing = videoData.timeText
data.videoData = videoDataNew
console.log('videoData2', data.videoData)
@@ -279,6 +283,13 @@ onLoad(() => {
})
onShow(() => {
+ // 恢复计时
+ const videoData = uni.getStorageSync('videoData')
+ if (videoData && videoData.timeText) {
+ data.timing = videoData.timeText
+ }
+ startTimer()
+
// #ifdef APP-PLUS
util.setAndroidSystemBarColor('#232323')
// 保存定时器引用,以便在页面卸载时清理
@@ -306,6 +317,13 @@ onHide(() => {
data.dragState.isDragging = false
data.dragState.draggingIndex = -1
+ // 保存当前计时
+ if (data.timing) {
+ data.videoData.timeText = data.timing
+ uni.setStorageSync('videoData', data.videoData)
+ }
+
+ stopTimer() // 停止计时
console.log('🚪 页面隐藏,已清理定时器和状态')
})
@@ -317,6 +335,14 @@ onUnmounted(() => {
statusBarTimer = null
}
+ // 保存当前计时
+ if (data.timing) {
+ data.videoData.timeText = data.timing
+ uni.setStorageSync('videoData', data.videoData)
+ }
+
+ stopTimer() // 停止计时
+
// 清理长按定时器
if (data.dragState.longPressTimer) {
clearTimeout(data.dragState.longPressTimer)
@@ -329,7 +355,7 @@ onUnmounted(() => {
// 打开时间编辑弹窗
const openTimeEditPopup = () => {
// 解析当前时间 (格式: "125:22")
- const parts = data.videoData.timeText.split(':')
+ const parts = data.timing.split(':')
data.tempMinutes = parts[0] || '0'
data.tempSeconds = parts[1] || '00'
data.showTimeEditPopup = true
@@ -353,6 +379,10 @@ const saveTimeEdit = () => {
// 保存到storage
uni.setStorageSync('videoData', data.videoData)
+ // 更新当前计时显示并重启计时器以确保同步
+ data.timing = data.videoData.timeText
+ startTimer()
+
// 关闭弹窗
data.showTimeEditPopup = false
}
@@ -448,11 +478,10 @@ const saveImage = async () => {
const changeIconType = (item, index) => {
- if (index == data.videoData.videoList.length - 1) {
- item.iconType = item.iconType == 2 ? 0 : item.iconType + 1
- } else {
- item.iconType = item.iconType == 2 ? 0 : 2
+ if (index == data.videoData.videoList.length - 1 && !data.videoData.micOn) {
+ return
}
+ item.iconType = item.iconType == 2 ? 0 : 2
uni.setStorageSync('videoData', data.videoData)
}
@@ -610,6 +639,13 @@ const chooseImage = () => {
// 改变信息
const changeInfo = (key) => {
data.videoData[key] = !data.videoData[key]
+ if (key == 'micOn') {
+ if (!data.videoData[key]) {
+ data.videoData.videoList[data.videoData.videoList.length - 1].iconType = 1
+ } else {
+ data.videoData.videoList[data.videoData.videoList.length - 1].iconType = 0
+ }
+ }
uni.setStorageSync('videoData', data.videoData)
}
@@ -772,6 +808,36 @@ const handleTouchEnd = (event, index) => {
const hangup = () => {
uni.navigateBack()
}
+
+// 开始计时
+const startTimer = () => {
+ stopTimer()
+ timingTimer = setInterval(() => {
+ if (!data.timing) return
+ let timeStr = String(data.timing)
+ if (timeStr.indexOf(':') === -1) return
+
+ let parts = timeStr.split(':')
+ let minutes = parseInt(parts[0]) || 0
+ let seconds = parseInt(parts[1]) || 0
+
+ seconds++
+ if (seconds >= 60) {
+ seconds = 0
+ minutes++
+ }
+
+ data.timing = `${minutes}:${seconds.toString().padStart(2, '0')}`
+ }, 1000)
+}
+
+// 停止计时
+const stopTimer = () => {
+ if (timingTimer) {
+ clearInterval(timingTimer)
+ timingTimer = null
+ }
+}