Merge branch 'Branch_1' of https://git.u8t.cn/tangxinyue/alipay-emulator into Branch_1

This commit is contained in:
小李 2026-06-26 11:00:13 +08:00
commit 76a25d329b
13 changed files with 116 additions and 63 deletions

View File

@ -73,7 +73,7 @@
auto-blur :placeholder="showInfo.placeholder" v-model="content" @input="onInput" auto-blur :placeholder="showInfo.placeholder" v-model="content" @input="onInput"
@focus="onFocus" @blur="onBlur"></textarea> --> @focus="onFocus" @blur="onBlur"></textarea> -->
<editor id="chat-layout-editor" class="input flex-1" :placeholder="showInfo.placeholder" <editor id="chat-layout-editor" class="input flex-1" :placeholder="showInfo.placeholder"
@input="onInput"></editor> @input="onInput" style="word-break: break-all; word-wrap: break-word;"></editor>
<image v-if="phone == 'iphone' && !isSend" class="right-icon" <image v-if="phone == 'iphone' && !isSend" class="right-icon"
src="/static/image/phone-message/iphone/mic.png"></image> src="/static/image/phone-message/iphone/mic.png"></image>
<image v-if="phone == 'iphone' && isSend" class="right-send-icon" <image v-if="phone == 'iphone' && isSend" class="right-send-icon"

View File

@ -29,7 +29,7 @@ export function createApp() {
app.config.globalProperties.$system = plus.os.name; app.config.globalProperties.$system = plus.os.name;
// #endif // #endif
app.config.globalProperties.$systemInfo = systemInfo app.config.globalProperties.$systemInfo = systemInfo
uni.setStorageSync('version', '1.0.6.sp13') uni.setStorageSync('version', '1.0.6.sp15')
app.config.globalProperties.$version = uni.getStorageSync('version') app.config.globalProperties.$version = uni.getStorageSync('version')
app.use(globalMethods); app.use(globalMethods);
return { return {

View File

@ -27,7 +27,7 @@
<!-- 转账状态信息 --> <!-- 转账状态信息 -->
<view class="success-info"> <view class="success-info">
<view class="amount-box"> <view class="amount-box" @click="openEditPopup()">
<text class="symbol">¥</text> <text class="symbol">¥</text>
<text class="amount alipay-font">{{ Number(transferData.amount).toFixed(2) }}</text> <text class="amount alipay-font">{{ Number(transferData.amount).toFixed(2) }}</text>
</view> </view>
@ -55,16 +55,16 @@
</view> </view>
<view class="card-item-bg"> <view class="card-item-bg">
<view class="user-info"> <view class="user-info">
<view class="avatar-box"> <view class="avatar-box" @click="openEditPopup()">
<image v-if="transferData.avatar" class="avatar" :src="transferData.avatar" <image v-if="transferData.avatar" class="avatar" :src="transferData.avatar"
mode="aspectFill"> mode="aspectFill">
</image> </image>
<image v-else class="avatar" src="/static/image/balance/transfer/add-img.png" <image v-else class="avatar" src="/static/image/balance/transfer/add-img.png"
mode="aspectFill" @click="openEditPopup"> mode="aspectFill">
</image> </image>
</view> </view>
<view class="user-details"> <view class="user-details">
<view class="name-box"> <view class="name-box" @click="openEditPopup()">
<text class="name">{{ transferData.recipient }}</text> <text class="name">{{ transferData.recipient }}</text>
<text class="remark-link">备注</text> <text class="remark-link">备注</text>
</view> </view>
@ -83,7 +83,7 @@
mode="aspectFill"></image> mode="aspectFill"></image>
</view> </view>
<view class="promo-right"> <view class="promo-right">
<view class="promo-content"> <view class="promo-content" >
<text class="promo-title">{{ transferData.promoTitle }}</text> <text class="promo-title">{{ transferData.promoTitle }}</text>
<view class="promo-tags"> <view class="promo-tags">
<text class="tag">{{ transferData.promoTag }}</text> <text class="tag">{{ transferData.promoTag }}</text>

View File

@ -115,7 +115,7 @@
<image class="title-img" src="/static/image/index/qita.png"></image> <image class="title-img" src="/static/image/index/qita.png"></image>
<view class="video-help-box"> <view class="video-help-box">
<template v-for="item in otherList" :key="item.id"> <template v-for="item in otherList" :key="item.id">
<view class="video-help-item" :style="{ width: (windowWidth - 32) / 4 + 'px' }" <view class="video-help-item" :style="{ width: (windowWidth - 36) / 4 + 'px' }"
@click="clickMenu(item)" v-if="isShowBankIdCard(item)"> @click="clickMenu(item)" v-if="isShowBankIdCard(item)">
<image class="video-help-img" :src="item.icon"></image> <image class="video-help-img" :src="item.icon"></image>
<text class="video-help-title">{{ item.name }}</text> <text class="video-help-title">{{ item.name }}</text>
@ -277,7 +277,7 @@ const otherList = [{
}, },
{ {
icon: "/static/image/index/qita/danliao.png", icon: "/static/image/index/qita/danliao.png",
name: "视频聊", name: "视频聊",
path: "/pages/other/video-chat/video-chat" path: "/pages/other/video-chat/video-chat"
}, },
{ {
@ -416,19 +416,19 @@ onShow(() => {
// #endif // #endif
}) })
function isShowBankIdCard(item) { function isShowBankIdCard(item) {
if (item.name != '银行卡' && item.name != '身份证' && item.name != '工资条' && item.name != '高考') { if (item.name != '银行卡' && item.name != '身份证' && item.name != '工资条' && item.name != '高考') {
return true return true
} else if (item.name == '银行卡' && data.bank) { } else if (item.name == '银行卡' && data.bank) {
return true return true
} else if (item.name == '身份证' && data.idcard) { } else if (item.name == '身份证' && data.idcard) {
return true return true
} else if (item.name == '工资条' && data.payslip) { } else if (item.name == '工资条' && data.payslip) {
return true return true
} else if (item.name == '高考' && data.score) { } else if (item.name == '高考' && data.score) {
return true return true
} else { } else {
return false return false
} }
} }
/** /**
* 获取用户数据(从服务器) * 获取用户数据(从服务器)

View File

@ -1,4 +1,6 @@
<template> <template>
<view class="shadow-up"></view>
<view class="shadow-down"></view>
<!-- 水印 --> <!-- 水印 -->
<view v-if="$isVip()"> <view v-if="$isVip()">
<watermark dark="light" source="uni_alipay_other_videoChat" /> <watermark dark="light" source="uni_alipay_other_videoChat" />
@ -22,8 +24,8 @@
</view> </view>
<view class="top-view"> <view class="top-view">
<image style="height: 136rpx;width:136rpx;object-fit: cover;" :src="videoData.chat.other.avatar" <image style="height: 136rpx;width:136rpx;object-fit: cover;border-radius: 12rpx;"
mode="aspectFill"> :src="videoData.chat.other.avatar" mode="aspectFill">
</image> </image>
<text class="nickname">{{ videoData.chat.other.name }}</text> <text class="nickname">{{ videoData.chat.other.name }}</text>
<view class="dot-view"> <view class="dot-view">
@ -72,35 +74,27 @@
<!-- 麦克风 --> <!-- 麦克风 -->
<view class="control-item"> <view class="control-item">
<image class="control-btn" :class="{ active: videoData.micOn }" @click="changeInfo('micOn')" <image class="control-btn" :class="{ active: videoData.micOn }" @click="changeInfo('micOn')"
:src="videoData.micOn ? '/static/image/other/video-call/mic-on.png' : '/static/image/other/video-call/mic-off.png'"> :src="videoData.micOn ? '/static/image/other/video-call/mic-on.png' : '/static/image/other/video-call/unMic.png'">
</image> </image>
<!-- <view class="" :class="{ active: videoData.micOn }" >
</view> -->
<text class="control-label">{{ videoData.micOn ? '麦克风已开' : '麦克风已关' }}</text> <text class="control-label">{{ videoData.micOn ? '麦克风已开' : '麦克风已关' }}</text>
</view> </view>
<!-- 摄像头 --> <!-- 摄像头 -->
<view class="control-item"> <view class="control-item">
<image class="control-btn" :class="{ active: videoData.cameraOn }" @click="changeInfo('cameraOn')" <image class="control-btn" :class="{ active: videoData.cameraOn }" @click="changeInfo('cameraOn')"
:src="videoData.cameraOn ? '/static/image/other/video-call/camera-on.png' : '/static/image/other/video-call/camera-off.png'"> :src="videoData.cameraOn ? '/static/image/other/video-call/camera-on.png' : '/static/image/other/video-call/unCamera.png'">
</image> </image>
<!-- <view class="control-btn" :class="{ active: videoData.cameraOn }" @click="changeInfo('cameraOn')">
</view> -->
<text class="control-label">{{ videoData.cameraOn ? '摄像头已开' : '摄像头已关' }}</text> <text class="control-label">{{ videoData.cameraOn ? '摄像头已开' : '摄像头已关' }}</text>
</view> </view>
<!-- 背景模糊 --> <!-- 背景模糊 -->
<view class="control-item"> <view class="control-item">
<image class="control-btn" style="background: #00000080;" <image class="control-btn" src="/static/image/other/video-call/xvnibeijing.png">
src="/static/image/other/video-call/xvnibeijing.png">
</image> </image>
<text class="control-label">背景模糊</text> <text class="control-label">背景模糊</text>
</view> </view>
<!-- 旋转摄像头 --> <!-- 旋转摄像头 -->
<view class="control-item"> <view class="control-item">
<image class="control-btn" style="background: #00000080;" <image class="control-btn" src="/static/image/other/video-call/xuanzhuan.png">
src="/static/image/other/video-call/xuanzhuan.png">
</image> </image>
<text class="control-label">翻转</text> <text class="control-label">翻转</text>
</view> </view>
@ -112,8 +106,8 @@
src="/static/image/other/video-call/hangup.png"> src="/static/image/other/video-call/hangup.png">
</image> </image>
<image class="hangup-btn" style="margin: 0; background: #00000080;" <image class="hangup-btn" style="margin: 0;" src="/static/image/other/video-call/jieting.png"
src="/static/image/other/video-call/jieting.png" @click="answerCall"> @click="answerCall">
</image> </image>
</view> </view>
</view> </view>
@ -224,7 +218,7 @@
<!-- 麦克风 --> <!-- 麦克风 -->
<view class="control-item"> <view class="control-item">
<image class="control-btn" :class="{ active: videoData.micOn }" @click="changeInfo('micOn')" <image class="control-btn" :class="{ active: videoData.micOn }" @click="changeInfo('micOn')"
:src="videoData.micOn ? '/static/image/other/video-call/mic-on.png' : '/static/image/other/video-call/mic-off.png'"> :src="videoData.micOn ? '/static/image/other/video-call/mic-on.png' : '/static/image/other/video-call/unMic.png'">
</image> </image>
<!-- <view class="" :class="{ active: videoData.micOn }" > <!-- <view class="" :class="{ active: videoData.micOn }" >
@ -235,35 +229,27 @@
<!-- 扬声器 --> <!-- 扬声器 -->
<view class="control-item"> <view class="control-item">
<image class="control-btn" :class="{ active: videoData.speakerOn }" @click="changeInfo('speakerOn')" <image class="control-btn" :class="{ active: videoData.speakerOn }" @click="changeInfo('speakerOn')"
:src="videoData.speakerOn ? '/static/image/other/video-call/speaker-on.png' : '/static/image/other/video-call/speaker-off.png'"> :src="videoData.speakerOn ? '/static/image/other/video-call/speaker-on.png' : '/static/image/other/video-call/unSpeaker.png'">
</image> </image>
<!-- <view class="" :class="{ active: videoData.speakerOn }" @click="changeInfo('speakerOn')">
</view> -->
<text class="control-label">{{ videoData.speakerOn ? '扬声器已开' : '扬声器已关' }}</text> <text class="control-label">{{ videoData.speakerOn ? '扬声器已开' : '扬声器已关' }}</text>
</view> </view>
<!-- 摄像头 --> <!-- 摄像头 -->
<view class="control-item"> <view class="control-item">
<image class="control-btn" :class="{ active: videoData.cameraOn }" @click="changeInfo('cameraOn')" <image class="control-btn" :class="{ active: videoData.cameraOn }" @click="changeInfo('cameraOn')"
:src="videoData.cameraOn ? '/static/image/other/video-call/camera-on.png' : '/static/image/other/video-call/camera-off.png'"> :src="videoData.cameraOn ? '/static/image/other/video-call/camera-on.png' : '/static/image/other/video-call/unCamera.png'">
</image> </image>
<!-- <view class="control-btn" :class="{ active: videoData.cameraOn }" @click="changeInfo('cameraOn')">
</view> -->
<text class="control-label">{{ videoData.cameraOn ? '摄像头已开' : '摄像头已关' }}</text> <text class="control-label">{{ videoData.cameraOn ? '摄像头已开' : '摄像头已关' }}</text>
</view> </view>
</view> </view>
<view class="control-buttons" style="margin-bottom: 0;"> <view class="control-buttons" style="margin-bottom: 0;">
<image class="hangup-btn" style="background: #00000080;" <image class="hangup-btn" src="/static/image/other/video-call/xvnibeijing.png">
src="/static/image/other/video-call/xvnibeijing.png">
</image> </image>
<!-- 挂断按钮 --> <!-- 挂断按钮 -->
<image class="hangup-btn" @click="hangup" src="/static/image/other/video-call/hangup.png"></image> <image class="hangup-btn" @click="hangup" src="/static/image/other/video-call/hangup.png"></image>
<image class="hangup-btn" style="background: #00000080;" <image class="hangup-btn" src="/static/image/other/video-call/xuanzhuan.png">
src="/static/image/other/video-call/xuanzhuan.png">
</image> </image>
</view> </view>
</view> </view>
@ -333,7 +319,7 @@
<view style="display: flex; align-items: center; justify-content: space-between;"> <view style="display: flex; align-items: center; justify-content: space-between;">
<text <text
style="font-size: 24rpx; color: #999; flex: 1; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; margin-right: 20rpx;">{{ style="font-size: 24rpx; color: #999; flex: 1; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; margin-right: 20rpx;">{{
videoData.chat.me.videoUrl }}</text> getFileName(videoData.chat.me.videoUrl) }}</text>
<button size="mini" style="margin: 0; background: #187AFF; color: #fff;" <button size="mini" style="margin: 0; background: #187AFF; color: #fff;"
@click="uploadMedia('me', 'video')">上传</button> @click="uploadMedia('me', 'video')">上传</button>
</view> </view>
@ -344,7 +330,7 @@
<view style="display: flex; align-items: center; justify-content: space-between;"> <view style="display: flex; align-items: center; justify-content: space-between;">
<text <text
style="font-size: 24rpx; color: #999; flex: 1; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; margin-right: 20rpx;">{{ style="font-size: 24rpx; color: #999; flex: 1; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; margin-right: 20rpx;">{{
videoData.chat.other.videoUrl }}</text> getFileName(videoData.chat.other.videoUrl) }}</text>
<button size="mini" style="margin: 0; background: #187AFF; color: #fff;" <button size="mini" style="margin: 0; background: #187AFF; color: #fff;"
@click="uploadMedia('other', 'video')">上传</button> @click="uploadMedia('other', 'video')">上传</button>
</view> </view>
@ -404,6 +390,13 @@ const getVideoUrl = (url) => {
return url return url
} }
//
const getFileName = (path) => {
if (!path) return ''
//
return path.split('/').pop().split('\\').pop()
}
const buttonGroup = computed(() => [ const buttonGroup = computed(() => [
{ {
name: "编辑时间", name: "编辑时间",
@ -629,6 +622,12 @@ onShow(() => {
// #ifdef APP-PLUS // #ifdef APP-PLUS
util.setAndroidSystemBarColor('#FFFFFF') util.setAndroidSystemBarColor('#FFFFFF')
//
// if (plus.navigator.hideSystemNavigation) {
// plus.navigator.hideSystemNavigation()
// }
// 便 // 便
statusBarTimer = setTimeout(() => { statusBarTimer = setTimeout(() => {
plus.navigator.setStatusBarStyle("light"); plus.navigator.setStatusBarStyle("light");
@ -636,6 +635,31 @@ onShow(() => {
// #endif // #endif
}) })
// #ifdef APP-PLUS
// const restoreSystemNavigation = () => {
// if (plus.os.name === 'Android') {
// try {
// const main = plus.android.runtimeMainActivity();
// if (main) {
// const window = main.getWindow();
// const decorView = window.getDecorView();
// const View = plus.android.importClass("android.view.View");
// const uiOptions = decorView.getSystemUiVisibility();
// // flag
// const newUiOptions = uiOptions & ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION & ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
// decorView.setSystemUiVisibility(newUiOptions);
// // pages.json
// const Color = plus.android.importClass("android.graphics.Color");
// window.setNavigationBarColor(Color.TRANSPARENT);
// }
// } catch (e) {
// console.log(':', e);
// }
// }
// }
// #endif
// //
onHide(() => { onHide(() => {
// //
@ -656,6 +680,11 @@ onHide(() => {
stopTimer() // stopTimer() //
// #ifdef APP-PLUS
// restoreSystemNavigation()
// #endif
console.log('🚪 页面隐藏,已清理定时器和状态') console.log('🚪 页面隐藏,已清理定时器和状态')
}) })
@ -674,6 +703,10 @@ onUnmounted(() => {
data.dragState.longPressTimer = null data.dragState.longPressTimer = null
} }
// #ifdef APP-PLUS
// restoreSystemNavigation()
// #endif
console.log('🧹 页面卸载,已清理所有定时器') console.log('🧹 页面卸载,已清理所有定时器')
}) })
@ -1390,7 +1423,6 @@ const stopTimer = () => {
width: 120rpx; width: 120rpx;
height: 120rpx; height: 120rpx;
border-radius: 50%; border-radius: 50%;
background-color: #4a4a4a;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -1604,6 +1636,7 @@ const stopTimer = () => {
width: 92rpx; width: 92rpx;
height: 92rpx; height: 92rpx;
position: absolute; position: absolute;
border-radius: 12rpx;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
@ -1673,4 +1706,26 @@ const stopTimer = () => {
height: 410rpx; height: 410rpx;
border-radius: 20rpx; border-radius: 20rpx;
} }
.shadow-up {
position: fixed;
top: 0;
left: 0;
width: 750rpx;
height: 240rpx;
background: linear-gradient(180deg, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 100%);
border-radius: 0rpx 0rpx 0rpx 0rpx;
z-index: 2;
}
.shadow-down {
position: fixed;
bottom: 0;
left: 0;
width: 750rpx;
height: 240rpx;
background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.5) 100%);
border-radius: 0rpx 0rpx 0rpx 0rpx;
z-index: 2;
}
</style> </style>

View File

@ -1027,7 +1027,6 @@ const stopTimer = () => {
width: 120rpx; width: 120rpx;
height: 120rpx; height: 120rpx;
border-radius: 50%; border-radius: 50%;
background-color: #4a4a4a;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;

View File

@ -9,7 +9,7 @@
</template> </template>
</nav-bar> </nav-bar>
<view class="content-box flex-column flex-cneter" @click="editPaymentInfo"> <view class="content-box flex-column flex-cneter" @click="editPaymentInfo">
<image v-if="paymetInfo.userImg" class="user-img" :src="paymetInfo.userImg"></image> <image v-if="paymetInfo.userImg" class="user-img" :src="paymetInfo.userImg" mode="aspectFill"></image>
<text class="product-name">{{ paymetInfo.productName }}</text> <text class="product-name">{{ paymetInfo.productName }}</text>
<view class="money flex wx-font-medium" :style="{ 'margin-top': paymetInfo.userImg ? '78rpx' : '46rpx' }"> <view class="money flex wx-font-medium" :style="{ 'margin-top': paymetInfo.userImg ? '78rpx' : '46rpx' }">
<image class="symbol" src="/static/image/other/payment-success/symbol-yuan.png"></image>{{ <image class="symbol" src="/static/image/other/payment-success/symbol-yuan.png"></image>{{
@ -140,13 +140,6 @@ const paymetInfo = ref({
}); });
onShow(() => { onShow(() => {
const cachedInfo = storage.get('wx_payment_success_info');
if (cachedInfo) {
paymetInfo.value = cachedInfo;
} else {
paymetInfo.value = { productName: '王者荣耀', money: 168 };
}
// #ifdef APP-PLUS&&!APP-HARMONY // #ifdef APP-PLUS&&!APP-HARMONY
util.setAndroidSystemBarColor('#FFFFFF') util.setAndroidSystemBarColor('#FFFFFF')
setTimeout(() => { setTimeout(() => {
@ -156,6 +149,12 @@ onShow(() => {
}) })
onLoad(async () => { onLoad(async () => {
const cachedInfo = storage.get('wx_payment_success_info');
if (cachedInfo) {
paymetInfo.value = cachedInfo;
} else {
paymetInfo.value = { productName: '王者荣耀', money: 168 };
}
// //
proxy.$apiUserEvent('all', { proxy.$apiUserEvent('all', {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB