摄像头预览模块和护理单元设备模块画完
28
pages.json
|
|
@ -48,19 +48,20 @@
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom",
|
"navigationStyle": "custom",
|
||||||
"app-plus": {
|
"app-plus": {
|
||||||
// "subNVues": [{
|
"subNVues": [
|
||||||
// "id": "monitorSub",
|
{
|
||||||
// "path": "pages/camera",
|
"id": "monitorSub",
|
||||||
// "style": {
|
"path": "pages/fullcamera",
|
||||||
// "position": "absolute",
|
"style": {
|
||||||
// "left": "230px",
|
"position": "absolute",
|
||||||
// "top": "105px",
|
"left": "20px",
|
||||||
// "width": "680px",
|
"top": "40px",
|
||||||
// "height": "520px",
|
"width": "900px",
|
||||||
// "background": "transparent"
|
"height": "600px",
|
||||||
// }
|
"background": "transparent"
|
||||||
// }
|
}
|
||||||
// ]
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -103,6 +104,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 仓储
|
// 仓储
|
||||||
{
|
{
|
||||||
"path": "pages/Warehousing/index",
|
"path": "pages/Warehousing/index",
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,9 @@
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<view v-for="(item,index) in typeArray" :key="index"
|
<view v-for="(item,index) in typeArray" :key="index"
|
||||||
:class="{zerotarget: movetype===0 && zeroIndex===index}" class="menu" :style="{backgroundColor: movetype===0 && zeroIndex===index?`#ddf0ff`:``}" @click="typeNow=index;zeroIndex=index">
|
:class="{zerotarget: movetype===0 && zeroIndex===index}" class="menu"
|
||||||
|
:style="{backgroundColor: movetype===0 && zeroIndex===index?`#ddf0ff`:``}"
|
||||||
|
@click="typeNow=index;zeroIndex=index;clean();movetype=0;">
|
||||||
|
|
||||||
<donghua :links="item.url" :playing="typeNow===index" />
|
<donghua :links="item.url" :playing="typeNow===index" />
|
||||||
<text class="menu-font" :class="{ zoom: typeNow===index }"
|
<text class="menu-font" :class="{ zoom: typeNow===index }"
|
||||||
|
|
@ -115,7 +117,8 @@
|
||||||
</view>
|
</view>
|
||||||
<view v-for="(item,index) in rightMenu" :class="{secondtarget: movetype===2 && zeroIndex===index}"
|
<view v-for="(item,index) in rightMenu" :class="{secondtarget: movetype===2 && zeroIndex===index}"
|
||||||
style="margin: 20rpx auto;width: 110rpx;">
|
style="margin: 20rpx auto;width: 110rpx;">
|
||||||
<view class="white-circle" :style="{backgroundColor: movetype===2 && zeroIndex===index?`#ddf0ff`:``}">
|
<view class="white-circle"
|
||||||
|
:style="{backgroundColor: movetype===2 && zeroIndex===index?`#ddf0ff`:``}">
|
||||||
<image class="right-menu-img" :src="item.url" />
|
<image class="right-menu-img" :src="item.url" />
|
||||||
<view class="right-menu-name">
|
<view class="right-menu-name">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
|
|
@ -164,6 +167,14 @@
|
||||||
// 仅在 isShow 为 true 时生效
|
// 仅在 isShow 为 true 时生效
|
||||||
if (!props.isShow) return
|
if (!props.isShow) return
|
||||||
|
|
||||||
|
if (lanjie.value) {
|
||||||
|
lanjie.value = false
|
||||||
|
console.log("!!!!!!!", movetype.value,
|
||||||
|
zeroIndex.value,
|
||||||
|
typeNow.value)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (oldVal === true && newVal === false) {
|
if (oldVal === true && newVal === false) {
|
||||||
movetype.value = 0;
|
movetype.value = 0;
|
||||||
zeroIndex.value = 0;
|
zeroIndex.value = 0;
|
||||||
|
|
@ -173,11 +184,13 @@
|
||||||
movetype.value = -1
|
movetype.value = -1
|
||||||
zeroIndex.value = -1
|
zeroIndex.value = -1
|
||||||
typeNow.value = 0
|
typeNow.value = 0
|
||||||
|
console.log("?????")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
const zeroIndex = ref(-1)
|
const zeroIndex = ref(-1)
|
||||||
const emit = defineEmits(['back'])
|
const emit = defineEmits(['back', 'cleanmain'])
|
||||||
|
const savetopindex = ref(0)
|
||||||
watch(
|
watch(
|
||||||
() => props.propsmove,
|
() => props.propsmove,
|
||||||
() => {
|
() => {
|
||||||
|
|
@ -201,6 +214,7 @@
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
savetopindex.value = zeroIndex.value;
|
||||||
movetype.value = 1
|
movetype.value = 1
|
||||||
zeroIndex.value = 0
|
zeroIndex.value = 0
|
||||||
break;
|
break;
|
||||||
|
|
@ -233,8 +247,10 @@
|
||||||
zeroIndex.value--
|
zeroIndex.value--
|
||||||
} else {
|
} else {
|
||||||
movetype.value = 0
|
movetype.value = 0
|
||||||
zeroIndex.value = 0
|
// zeroIndex.value = 0
|
||||||
typeNow.value = zeroIndex.value;
|
// typeNow.value = zeroIndex.value;
|
||||||
|
zeroIndex.value = savetopindex.value
|
||||||
|
typeNow.value = savetopindex.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -253,6 +269,7 @@
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
|
||||||
movetype.value = -1
|
movetype.value = -1
|
||||||
zeroIndex.value = -1
|
zeroIndex.value = -1
|
||||||
emit("back")
|
emit("back")
|
||||||
|
|
@ -269,8 +286,10 @@
|
||||||
zeroIndex.value--
|
zeroIndex.value--
|
||||||
} else {
|
} else {
|
||||||
movetype.value = 0
|
movetype.value = 0
|
||||||
zeroIndex.value = 0
|
// zeroIndex.value = 0
|
||||||
typeNow.value = zeroIndex.value;
|
// typeNow.value = zeroIndex.value;
|
||||||
|
zeroIndex.value = savetopindex.value
|
||||||
|
typeNow.value = savetopindex.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -565,6 +584,14 @@
|
||||||
// setInterval(updateTime, 1000);
|
// setInterval(updateTime, 1000);
|
||||||
photoplay.value = true;
|
photoplay.value = true;
|
||||||
})
|
})
|
||||||
|
const lanjie = ref(false);
|
||||||
|
const clean = () => {
|
||||||
|
if(movetype.value==-1){
|
||||||
|
lanjie.value = true;
|
||||||
|
emit("cleanmain")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
|
|
||||||
|
|
@ -61,10 +61,16 @@
|
||||||
</view> -->
|
</view> -->
|
||||||
</view>
|
</view>
|
||||||
<!-- 主页 -->
|
<!-- 主页 -->
|
||||||
<index :isShow="menuIndexshow" v-if="!menuIndex" :propsmove="propsmove" :isMain="isMain" @back="movecard(5)" />
|
<index :isShow="menuIndexshow" v-if="!menuIndex" :propsmove="propsmove" :isMain="isMain" @back="movecard(5)" @cleanmain="movecard(1)" />
|
||||||
|
<!-- 设备页 -->
|
||||||
<nurse :isold="isOld===2" :liang="indexNumber" :isshow="menuIndexshowsecond" v-if="menuIndex==1&&isOld===2&&uni.getStorageSync('customerId')&&uni.getStorageSync('nuId')"
|
<equipment :isShow="menuIndexshowfifth" v-if="menuIndex==4" :propsmove="propsmove" :isMain="isMain"
|
||||||
|
@back="movecard(5)" @cleanmain="movecard(1)" />
|
||||||
|
<!-- 户嘱页 -->
|
||||||
|
<nurse :isold="isOld===2" :liang="indexNumber" :isshow="menuIndexshowsecond"
|
||||||
|
v-if="menuIndex==1&&isOld===2&&uni.getStorageSync('customerId')&&uni.getStorageSync('nuId')"
|
||||||
:propsmove="propsmove" :isMain="isMain" @vip="canmoveit" />
|
:propsmove="propsmove" :isMain="isMain" @vip="canmoveit" />
|
||||||
|
|
||||||
|
|
||||||
<arrowkeys @movecard="movecard" />
|
<arrowkeys @movecard="movecard" />
|
||||||
<!-- 超凶表格 -->
|
<!-- 超凶表格 -->
|
||||||
<!-- 旧表格 -->
|
<!-- 旧表格 -->
|
||||||
|
|
@ -86,6 +92,7 @@
|
||||||
import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue';
|
import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue';
|
||||||
import type { Link } from "./index";
|
import type { Link } from "./index";
|
||||||
import index from "./component/index.vue"
|
import index from "./component/index.vue"
|
||||||
|
import equipment from "./component/equipment.vue"
|
||||||
import nurse from "./component/nurse/index.vue"
|
import nurse from "./component/nurse/index.vue"
|
||||||
import { onShow } from '@dcloudio/uni-app';
|
import { onShow } from '@dcloudio/uni-app';
|
||||||
|
|
||||||
|
|
@ -195,6 +202,7 @@
|
||||||
const menuIndex = ref<number>(-1);
|
const menuIndex = ref<number>(-1);
|
||||||
const menuIndexshow = ref<boolean>(false);
|
const menuIndexshow = ref<boolean>(false);
|
||||||
const menuIndexshowsecond = ref<boolean>(false);
|
const menuIndexshowsecond = ref<boolean>(false);
|
||||||
|
const menuIndexshowfifth = ref<boolean>(false);
|
||||||
// 暗黑模式
|
// 暗黑模式
|
||||||
const darkFans = ref<boolean>(false);
|
const darkFans = ref<boolean>(false);
|
||||||
//旧表格还是新表格
|
//旧表格还是新表格
|
||||||
|
|
@ -208,7 +216,7 @@
|
||||||
const secondcurrentIndex = ref<number>(0);
|
const secondcurrentIndex = ref<number>(0);
|
||||||
const thirdcurrentIndex = ref<number>(0);
|
const thirdcurrentIndex = ref<number>(0);
|
||||||
|
|
||||||
function testAsyncFunc(){
|
function testAsyncFunc() {
|
||||||
// 获取 module
|
// 获取 module
|
||||||
var testModule = uni.requireNativePlugin("TestModule")
|
var testModule = uni.requireNativePlugin("TestModule")
|
||||||
// String deviceId =options.getString("deviceId");
|
// String deviceId =options.getString("deviceId");
|
||||||
|
|
@ -232,6 +240,7 @@
|
||||||
menuIndex.value = index;
|
menuIndex.value = index;
|
||||||
menuIndexshow.value = false
|
menuIndexshow.value = false
|
||||||
menuIndexshowsecond.value = false
|
menuIndexshowsecond.value = false
|
||||||
|
menuIndexshowfifth.value = false
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|
@ -240,6 +249,9 @@
|
||||||
case 1:
|
case 1:
|
||||||
menuIndexshowsecond.value = true
|
menuIndexshowsecond.value = true
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
menuIndexshowfifth.value = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
@ -255,6 +267,7 @@
|
||||||
menuIndex.value = index;
|
menuIndex.value = index;
|
||||||
menuIndexshow.value = false
|
menuIndexshow.value = false
|
||||||
menuIndexshowsecond.value = false
|
menuIndexshowsecond.value = false
|
||||||
|
menuIndexshowfifth.value = false
|
||||||
if (index === 5) {
|
if (index === 5) {
|
||||||
uni.navigateBack()
|
uni.navigateBack()
|
||||||
return
|
return
|
||||||
|
|
@ -267,6 +280,9 @@
|
||||||
case 1:
|
case 1:
|
||||||
menuIndexshowsecond.value = true
|
menuIndexshowsecond.value = true
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
menuIndexshowfifth.value = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
// this.$refs.monitor.killView
|
// this.$refs.monitor.killView
|
||||||
this.$refs.monitor.initAutoPlay(number)
|
this.$refs.monitor.initAutoPlay(number)
|
||||||
uni.setStorageSync('saveinit', number);
|
uni.setStorageSync('saveinit', number);
|
||||||
console.log("?????",number)
|
console.log("saveinit",number)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
uni.$on('monitor:isshow', (bool) => this.isshow = bool);
|
uni.$on('monitor:isshow', (bool) => this.isshow = bool);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,621 @@
|
||||||
|
<template>
|
||||||
|
<div class="center-column" :style="{ height: isshow ? '600px' : '0px' }">
|
||||||
|
<!-- 视频播放组件 -->
|
||||||
|
<MonitorView ref="monitor" init="5" style="width: 900px;height: 600px;" @onTel="handleTelEvent"
|
||||||
|
@onSnapShot="handleSnapShotEvent" @onRecord="handleRecordEvent" @onTalkStatus="handleTalkEvent" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
phoneNumber: "1234567890",
|
||||||
|
initnumber: 5,
|
||||||
|
isAlarming: false,
|
||||||
|
isRecording: false, // 录屏状态
|
||||||
|
isTalking: false, // 对讲状态
|
||||||
|
_pendingRequests: {
|
||||||
|
snapshot: [],
|
||||||
|
record: [],
|
||||||
|
talk: []
|
||||||
|
},
|
||||||
|
suo: true,
|
||||||
|
isshow: true,
|
||||||
|
globalEvent:''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
console.log("???加载")
|
||||||
|
// 保留你的 globalEvent 监听
|
||||||
|
this.globalEvent = uni.requireNativePlugin && uni.requireNativePlugin("globalEvent");
|
||||||
|
if (this.globalEvent && this.globalEvent.addEventListener) {
|
||||||
|
this.globalEvent.addEventListener("myEvent", (e) => {
|
||||||
|
// console.log(e)
|
||||||
|
|
||||||
|
if (e.recordUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '录屏成功',
|
||||||
|
icon: 'success', // 'success' | 'loading' | 'none'
|
||||||
|
duration: 1500
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (e.snapShotUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '截屏成功',
|
||||||
|
icon: 'success', // 'success' | 'loading' | 'none'
|
||||||
|
duration: 1500
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// console.log("00000",e.onVolumeChange)
|
||||||
|
if (this.suo && e.onVolumeChange) {
|
||||||
|
if (e.onVolumeChange) {
|
||||||
|
this.toggleVolume();
|
||||||
|
}
|
||||||
|
this.suo = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
uni.setStorageSync('saveinit', 5);
|
||||||
|
uni.$on('fullmonitor:changeinit', (number) => {
|
||||||
|
this.$refs.monitor.initAutoPlay(number)
|
||||||
|
uni.setStorageSync('saveinit', number);
|
||||||
|
console.log("saveinit", number)
|
||||||
|
});
|
||||||
|
uni.$on('fullmonitor:isshow', (bool) => this.isshow = bool);
|
||||||
|
uni.$on('fullmonitor:killView', this.killView);
|
||||||
|
// 在页面生命周期注册 uni.$on 事件,暴露给其他页面调用
|
||||||
|
uni.$on('fullmonitor:doSnapshot', this.doSnapshot);
|
||||||
|
uni.$on('fullmonitor:startRecord', this.doStartRecord);
|
||||||
|
uni.$on('fullmonitor:stopRecord', this.doStopRecord);
|
||||||
|
uni.$on('fullmonitor:openTalk', this.doOpenTalk);
|
||||||
|
uni.$on('fullmonitor:stopTalk', this.doStopTalk);
|
||||||
|
|
||||||
|
uni.$on('fullmonitor:switchDisplay', (payload) => this.switchDisplay(payload));
|
||||||
|
uni.$on('fullmonitor:startAlarm', this.startAlarm);
|
||||||
|
uni.$on('fullmonitor:stopAlarm', this.stopAlarm);
|
||||||
|
uni.$on('fullmonitor:flipImage', (payload) => this.flipImage(payload));
|
||||||
|
uni.$on('fullmonitor:resumeOrPause', this.resumeOrPause);
|
||||||
|
uni.$on('fullmonitor:changeQuality', this.changeQuality);
|
||||||
|
uni.$on('fullmonitor:toggleVolume', this.toggleVolume);
|
||||||
|
uni.$on('fullmonitor:test', this.test);
|
||||||
|
},
|
||||||
|
onUnload() {
|
||||||
|
console.log('fullcamera 卸载,清理事件');
|
||||||
|
|
||||||
|
// 确保 globalEvent 有才清除
|
||||||
|
if (this.globalEvent && this.globalEvent.removeEventListener) {
|
||||||
|
this.globalEvent.removeEventListener("myEvent");
|
||||||
|
}
|
||||||
|
|
||||||
|
const events = [
|
||||||
|
'fullmonitor:killView',
|
||||||
|
'fullmonitor:changeinit',
|
||||||
|
'fullmonitor:isshow',
|
||||||
|
'fullmonitor:doSnapshot',
|
||||||
|
'fullmonitor:startRecord',
|
||||||
|
'fullmonitor:stopRecord',
|
||||||
|
'fullmonitor:openTalk',
|
||||||
|
'fullmonitor:stopTalk',
|
||||||
|
'fullmonitor:switchDisplay',
|
||||||
|
'fullmonitor:startAlarm',
|
||||||
|
'fullmonitor:stopAlarm',
|
||||||
|
'fullmonitor:flipImage',
|
||||||
|
'fullmonitor:resumeOrPause',
|
||||||
|
'fullmonitor:changeQuality',
|
||||||
|
'fullmonitor:toggleVolume',
|
||||||
|
'fullmonitor:test'
|
||||||
|
];
|
||||||
|
|
||||||
|
events.forEach(ev => uni.$off(ev)); // 💥这样会解绑当前页面注册的所有监听
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/* ------------------ 原有功能 ------------------ */
|
||||||
|
handleTelEvent(event) {
|
||||||
|
console.log("Tel event detail:", event.detail);
|
||||||
|
// 如果需要解析电话事件,在这里处理
|
||||||
|
},
|
||||||
|
killView() {
|
||||||
|
|
||||||
|
this.$refs.monitor.killView && this.$refs.monitor.killView();
|
||||||
|
},
|
||||||
|
switchDisplay(mode) {
|
||||||
|
console.log("zzzzz", mode)
|
||||||
|
this.$refs.monitor && this.$refs.monitor.switchDisplayModeFragment(mode);
|
||||||
|
},
|
||||||
|
|
||||||
|
startAlarm() {
|
||||||
|
this.isAlarming = true;
|
||||||
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
||||||
|
console.log("startAlarm callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
stopAlarm() {
|
||||||
|
this.isAlarming = false;
|
||||||
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
||||||
|
console.log("stopAlarm callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
flipImage(type) {
|
||||||
|
this.$refs.monitor.changeImageSwitch(type, (res) => {
|
||||||
|
console.log("flipImage callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
resumeOrPause() {
|
||||||
|
this.$refs.monitor.resumeOrPause && this.$refs.monitor.resumeOrPause();
|
||||||
|
},
|
||||||
|
|
||||||
|
changeQuality() {
|
||||||
|
this.$refs.monitor.changeQuality && this.$refs.monitor.changeQuality();
|
||||||
|
},
|
||||||
|
toggleVolume() {
|
||||||
|
this.$refs.monitor.toggleVolume && this.$refs.monitor.toggleVolume();
|
||||||
|
},
|
||||||
|
test() {
|
||||||
|
this.$refs.monitor && this.$refs.monitor.test && this.$refs.monitor.test();
|
||||||
|
},
|
||||||
|
|
||||||
|
/* ------------------ 新增:截图/录屏/对讲 调用方法(支持 payload.reqId) ------------------ */
|
||||||
|
|
||||||
|
// 1. 截图(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doSnapshot(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.snapShot) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 snapShot()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
// 直接给请求方回错
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'snapShot_not_supported'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果 caller 传了 reqId,就把 reqId 放入 pending(以备 native 事件回调时匹配)
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.snapshot.push(payload.reqId);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.snapShot((res) => {
|
||||||
|
// 这个 callback 优先使用,直接回传结果给请求方(如果有)
|
||||||
|
console.log("snapShot callback:", res);
|
||||||
|
this._handleSnapshotResultFromNative(res, payload.reqId);
|
||||||
|
});
|
||||||
|
uni.showToast({
|
||||||
|
title: "正在截屏...",
|
||||||
|
icon: "none",
|
||||||
|
duration: 800
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error("snapShot 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "snapShot 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'snapShot_call_failed',
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 2. 开始录屏(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStartRecord(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.startRecord) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 startRecord()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'startRecord_not_supported'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.startRecord((res) => {
|
||||||
|
console.log("startRecord callback:", res);
|
||||||
|
// 有些实现会在 start 的 callback 里返回启动结果;如果 caller 传了 reqId 则回传
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isRecording = true;
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏已开始",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error("startRecord 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "startRecord 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'startRecord_call_failed',
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 3. 停止录屏(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStopRecord(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.stopRecord) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 stopRecord()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'stopRecord_not_supported'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 记录 pending(以便 native 的 onRecord 事件回传可匹配)
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.record.push(payload.reqId);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.stopRecord((res) => {
|
||||||
|
console.log("stopRecord callback:", res);
|
||||||
|
this._handleRecordResultFromNative(res, payload.reqId);
|
||||||
|
});
|
||||||
|
// 状态会在回调或事件里最终设置
|
||||||
|
} catch (err) {
|
||||||
|
console.error("stopRecord 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "stopRecord 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'stopRecord_call_failed',
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 4. 开始对讲(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doOpenTalk(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.openTalk) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 openTalk()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'openTalk_not_supported'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// pending 用于当 native 发来 talk 状态事件时回传
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.talk.push(payload.reqId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.openTalk((res) => {
|
||||||
|
console.log("openTalk callback:", res);
|
||||||
|
// 如果 callback 里有最终状态可以直接回传
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
uni.showToast({
|
||||||
|
title: "尝试建立对讲连接...",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error("openTalk 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "openTalk 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'openTalk_call_failed',
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 5. 停止对讲(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStopTalk(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.stopTalk) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 stopTalk()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'stopTalk_not_supported'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.stopTalk((res) => {
|
||||||
|
console.log("stopTalk callback:", res);
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
} catch (err) {
|
||||||
|
console.error("stopTalk 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "stopTalk 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'stopTalk_call_failed',
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* ------------------ 事件回调处理(来自原生推送的事件) ------------------ */
|
||||||
|
|
||||||
|
// 处理来自模板 @onSnapShot 的事件(event.detail)
|
||||||
|
handleSnapShotEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
console.log("onSnapShot event:", payload);
|
||||||
|
// 统一处理并尝试把结果回给 pending 请求者
|
||||||
|
this._handleSnapshotResultFromNative(payload);
|
||||||
|
},
|
||||||
|
|
||||||
|
// 处理来自模板 @onRecord 的事件(event.detail)
|
||||||
|
handleRecordEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
console.log("onRecord event:", payload);
|
||||||
|
this._handleRecordResultFromNative(payload);
|
||||||
|
},
|
||||||
|
|
||||||
|
// 处理来自模板 @onTalkStatus 的事件
|
||||||
|
handleTalkEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
console.log("onTalkStatus event:", payload);
|
||||||
|
|
||||||
|
const status = payload && payload.talkStatus;
|
||||||
|
const tips = payload && payload.tips;
|
||||||
|
|
||||||
|
// 通知调用方(通用事件)
|
||||||
|
uni.$emit('fullmonitor:talk:status', payload);
|
||||||
|
|
||||||
|
// 如果有 pending talk 请求,回传结果
|
||||||
|
if (this._pendingRequests.talk && this._pendingRequests.talk.length) {
|
||||||
|
while (this._pendingRequests.talk.length) {
|
||||||
|
const reqId = this._pendingRequests.talk.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ((status || "").toLowerCase()) {
|
||||||
|
case "loading":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲连接中...",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
break;
|
||||||
|
case "playing":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲已连接",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
break;
|
||||||
|
case "stopped":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲已停止",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
break;
|
||||||
|
case "failed":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || ("对讲状态: " + (status || "unknown")),
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* ------------------ 原生结果的内部处理函数(统一处理 callback / event) ------------------ */
|
||||||
|
|
||||||
|
_handleSnapshotResultFromNative(res, reqIdFromCallback = null) {
|
||||||
|
if (!res) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "截图没有返回数据",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
// 回传失败
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'no_data'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let payload = res;
|
||||||
|
if (res.detail) payload = res.detail;
|
||||||
|
|
||||||
|
console.log("snapshot payload normalized:", payload);
|
||||||
|
|
||||||
|
// 优先判断 callback 里直接传进来的 reqId
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: !!payload.snapShotResult,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果没有 callback reqId,但有 pending 列表,则把结果分发给所有 pending reqId(典型场景:调用方只发了 reqId,但 native 最终通过 onSnapShot 事件推回)
|
||||||
|
if ((!reqIdFromCallback) && this._pendingRequests.snapshot && this._pendingRequests.snapshot.length) {
|
||||||
|
while (this._pendingRequests.snapshot.length) {
|
||||||
|
const rid = this._pendingRequests.snapshot.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${rid}`, {
|
||||||
|
ok: !!payload.snapShotResult,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 无论如何,都发一个通用完成事件,方便只监听通用事件的页面
|
||||||
|
uni.$emit('fullmonitor:snapshot:done', payload);
|
||||||
|
|
||||||
|
if (payload.snapShotResult === true || payload.snapShotResult === "true") {
|
||||||
|
const url = payload.snapShotUrl || payload.snapShotPath || payload.url;
|
||||||
|
uni.showToast({
|
||||||
|
title: "截图成功",
|
||||||
|
icon: "success",
|
||||||
|
duration: 1200
|
||||||
|
});
|
||||||
|
if (url) {
|
||||||
|
uni.previewImage({
|
||||||
|
urls: [url]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const err = payload.snapShotErrorCode || payload.error || "unknown";
|
||||||
|
uni.showToast({
|
||||||
|
title: "截图失败: " + err,
|
||||||
|
icon: "none",
|
||||||
|
duration: 2000
|
||||||
|
});
|
||||||
|
console.warn("snapshot failed reason:", err, payload);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleRecordResultFromNative(res, reqIdFromCallback = null) {
|
||||||
|
if (!res) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏没有返回数据",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: false,
|
||||||
|
error: 'no_data'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let payload = res;
|
||||||
|
if (res.detail) payload = res.detail;
|
||||||
|
|
||||||
|
console.log("record payload normalized:", payload);
|
||||||
|
|
||||||
|
// 优先用 callback 的 reqId 回传
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果没有 callback reqId,但有 pending,则回传给 pending 列表
|
||||||
|
if ((!reqIdFromCallback) && this._pendingRequests.record && this._pendingRequests.record.length) {
|
||||||
|
while (this._pendingRequests.record.length) {
|
||||||
|
const rid = this._pendingRequests.record.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${rid}`, {
|
||||||
|
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通用事件
|
||||||
|
uni.$emit('fullmonitor:record:done', payload);
|
||||||
|
|
||||||
|
if (payload.recordUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏完成",
|
||||||
|
icon: "success",
|
||||||
|
duration: 1400
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
console.log("录屏地址:", payload.recordUrl);
|
||||||
|
} else if (payload.recordFailedReason) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏失败: " + payload.recordFailedReason,
|
||||||
|
icon: "none",
|
||||||
|
duration: 2000
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
console.warn("record failed reason:", payload.recordFailedReason);
|
||||||
|
} else {
|
||||||
|
if (payload.snapShotResult === true) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏操作已完成(返回未知)",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.isRecording = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.center-column {
|
||||||
|
width: 900px;
|
||||||
|
height: 600px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -394,9 +394,9 @@
|
||||||
})
|
})
|
||||||
const changeLeftMenu = (item : any, index : number) => {
|
const changeLeftMenu = (item : any, index : number) => {
|
||||||
|
|
||||||
if (item.elderServerEntityList) {
|
if (item?.elderServerEntityList) {
|
||||||
//给屏幕右侧数据用的
|
//给屏幕右侧数据用的
|
||||||
const nearest = findClosestItem(item.elderServerEntityList, time.value)
|
const nearest = findClosestItem(item?.elderServerEntityList, time.value)
|
||||||
// console.log("zzzzaaa", item)
|
// console.log("zzzzaaa", item)
|
||||||
if (!nearest) {
|
if (!nearest) {
|
||||||
serveritem.value = {
|
serveritem.value = {
|
||||||
|
|
@ -419,12 +419,12 @@
|
||||||
}
|
}
|
||||||
cleanAll()
|
cleanAll()
|
||||||
uni.$emit('monitor:killView');
|
uni.$emit('monitor:killView');
|
||||||
if (item.cameraInfo !== null && item.cameraInfo[0].deviceName) {
|
if (item?.cameraInfo !== null && item?.cameraInfo[0].deviceName) {
|
||||||
uni.$emit('monitor:isshow', true);
|
uni.$emit('monitor:isshow', true);
|
||||||
|
|
||||||
// 加点延迟吧
|
// 加点延迟吧
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
uni.$emit('monitor:changeinit', item.cameraInfo[0].deviceIndex);
|
uni.$emit('monitor:changeinit', item?.cameraInfo[0].deviceIndex);
|
||||||
}, 100)
|
}, 100)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 490 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
|
@ -0,0 +1,23 @@
|
||||||
|
import "vue";
|
||||||
|
function requireNativePlugin(name) {
|
||||||
|
return weex.requireModule(name);
|
||||||
|
}
|
||||||
|
function formatAppLog(type, filename, ...args) {
|
||||||
|
if (uni.__log__) {
|
||||||
|
uni.__log__(type, filename, ...args);
|
||||||
|
} else {
|
||||||
|
console[type].apply(console, [...args, filename]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const _export_sfc = (sfc, props) => {
|
||||||
|
const target = sfc.__vccOpts || sfc;
|
||||||
|
for (const [key, val] of props) {
|
||||||
|
target[key] = val;
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
};
|
||||||
|
export {
|
||||||
|
_export_sfc as _,
|
||||||
|
formatAppLog as f,
|
||||||
|
requireNativePlugin as r
|
||||||
|
};
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
Promise.resolve("./pages/camera.js").then((res) => {
|
Promise.resolve("./pages/camera.js").then((res) => {
|
||||||
res();
|
res();
|
||||||
});
|
});
|
||||||
|
Promise.resolve("./pages/fullcamera.js").then((res) => {
|
||||||
|
res();
|
||||||
|
});
|
||||||
Promise.resolve("./app.css.js").then(() => {
|
Promise.resolve("./app.css.js").then(() => {
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,6 @@
|
||||||
|
import { _ as _export_sfc, r as requireNativePlugin, f as formatAppLog } from "../_plugin-vue_export-helper.js";
|
||||||
import { resolveComponent, openBlock, createElementBlock, createElementVNode, normalizeStyle, createCommentVNode, createVNode } from "vue";
|
import { resolveComponent, openBlock, createElementBlock, createElementVNode, normalizeStyle, createCommentVNode, createVNode } from "vue";
|
||||||
function requireNativePlugin(name) {
|
|
||||||
return weex.requireModule(name);
|
|
||||||
}
|
|
||||||
function formatAppLog(type, filename, ...args) {
|
|
||||||
if (uni.__log__) {
|
|
||||||
uni.__log__(type, filename, ...args);
|
|
||||||
} else {
|
|
||||||
console[type].apply(console, [...args, filename]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const _style_0 = { "center-column": { "": { "width": 680, "height": 520, "borderRadius": 30, "overflow": "hidden" } } };
|
const _style_0 = { "center-column": { "": { "width": 680, "height": 520, "borderRadius": 30, "overflow": "hidden" } } };
|
||||||
const _export_sfc = (sfc, props) => {
|
|
||||||
const target = sfc.__vccOpts || sfc;
|
|
||||||
for (const [key, val] of props) {
|
|
||||||
target[key] = val;
|
|
||||||
}
|
|
||||||
return target;
|
|
||||||
};
|
|
||||||
const _sfc_main = {
|
const _sfc_main = {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -74,7 +58,7 @@ const _sfc_main = {
|
||||||
(number) => {
|
(number) => {
|
||||||
this.$refs.monitor.initAutoPlay(number);
|
this.$refs.monitor.initAutoPlay(number);
|
||||||
uni.setStorageSync("saveinit", number);
|
uni.setStorageSync("saveinit", number);
|
||||||
formatAppLog("log", "at pages/camera.nvue:66", "?????", number);
|
formatAppLog("log", "at pages/camera.nvue:66", "saveinit", number);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
uni.$on("monitor:isshow", (bool) => this.isshow = bool);
|
uni.$on("monitor:isshow", (bool) => this.isshow = bool);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,583 @@
|
||||||
|
import { _ as _export_sfc, f as formatAppLog, r as requireNativePlugin } from "../_plugin-vue_export-helper.js";
|
||||||
|
import { resolveComponent, openBlock, createElementBlock, createElementVNode, normalizeStyle, createCommentVNode, createVNode } from "vue";
|
||||||
|
const _style_0 = { "center-column": { "": { "width": 900, "height": 600, "overflow": "hidden" } } };
|
||||||
|
const _sfc_main = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
phoneNumber: "1234567890",
|
||||||
|
initnumber: 5,
|
||||||
|
isAlarming: false,
|
||||||
|
isRecording: false,
|
||||||
|
// 录屏状态
|
||||||
|
isTalking: false,
|
||||||
|
// 对讲状态
|
||||||
|
_pendingRequests: {
|
||||||
|
snapshot: [],
|
||||||
|
record: [],
|
||||||
|
talk: []
|
||||||
|
},
|
||||||
|
suo: true,
|
||||||
|
isshow: true,
|
||||||
|
globalEvent: ""
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:29", "???加载");
|
||||||
|
this.globalEvent = requireNativePlugin && requireNativePlugin("globalEvent");
|
||||||
|
if (this.globalEvent && this.globalEvent.addEventListener) {
|
||||||
|
this.globalEvent.addEventListener("myEvent", (e) => {
|
||||||
|
if (e.recordUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏成功",
|
||||||
|
icon: "success",
|
||||||
|
// 'success' | 'loading' | 'none'
|
||||||
|
duration: 1500
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (e.snapShotUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "截屏成功",
|
||||||
|
icon: "success",
|
||||||
|
// 'success' | 'loading' | 'none'
|
||||||
|
duration: 1500
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (this.suo && e.onVolumeChange) {
|
||||||
|
if (e.onVolumeChange) {
|
||||||
|
this.toggleVolume();
|
||||||
|
}
|
||||||
|
this.suo = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
uni.setStorageSync("saveinit", 5);
|
||||||
|
uni.$on("fullmonitor:changeinit", (number) => {
|
||||||
|
this.$refs.monitor.initAutoPlay(number);
|
||||||
|
uni.setStorageSync("saveinit", number);
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:63", "saveinit", number);
|
||||||
|
});
|
||||||
|
uni.$on("fullmonitor:isshow", (bool) => this.isshow = bool);
|
||||||
|
uni.$on("fullmonitor:killView", this.killView);
|
||||||
|
uni.$on("fullmonitor:doSnapshot", this.doSnapshot);
|
||||||
|
uni.$on("fullmonitor:startRecord", this.doStartRecord);
|
||||||
|
uni.$on("fullmonitor:stopRecord", this.doStopRecord);
|
||||||
|
uni.$on("fullmonitor:openTalk", this.doOpenTalk);
|
||||||
|
uni.$on("fullmonitor:stopTalk", this.doStopTalk);
|
||||||
|
uni.$on("fullmonitor:switchDisplay", (payload) => this.switchDisplay(payload));
|
||||||
|
uni.$on("fullmonitor:startAlarm", this.startAlarm);
|
||||||
|
uni.$on("fullmonitor:stopAlarm", this.stopAlarm);
|
||||||
|
uni.$on("fullmonitor:flipImage", (payload) => this.flipImage(payload));
|
||||||
|
uni.$on("fullmonitor:resumeOrPause", this.resumeOrPause);
|
||||||
|
uni.$on("fullmonitor:changeQuality", this.changeQuality);
|
||||||
|
uni.$on("fullmonitor:toggleVolume", this.toggleVolume);
|
||||||
|
uni.$on("fullmonitor:test", this.test);
|
||||||
|
},
|
||||||
|
onUnload() {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:84", "fullcamera 卸载,清理事件");
|
||||||
|
if (this.globalEvent && this.globalEvent.removeEventListener) {
|
||||||
|
this.globalEvent.removeEventListener("myEvent");
|
||||||
|
}
|
||||||
|
const events = [
|
||||||
|
"fullmonitor:killView",
|
||||||
|
"fullmonitor:changeinit",
|
||||||
|
"fullmonitor:isshow",
|
||||||
|
"fullmonitor:doSnapshot",
|
||||||
|
"fullmonitor:startRecord",
|
||||||
|
"fullmonitor:stopRecord",
|
||||||
|
"fullmonitor:openTalk",
|
||||||
|
"fullmonitor:stopTalk",
|
||||||
|
"fullmonitor:switchDisplay",
|
||||||
|
"fullmonitor:startAlarm",
|
||||||
|
"fullmonitor:stopAlarm",
|
||||||
|
"fullmonitor:flipImage",
|
||||||
|
"fullmonitor:resumeOrPause",
|
||||||
|
"fullmonitor:changeQuality",
|
||||||
|
"fullmonitor:toggleVolume",
|
||||||
|
"fullmonitor:test"
|
||||||
|
];
|
||||||
|
events.forEach((ev) => uni.$off(ev));
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/* ------------------ 原有功能 ------------------ */
|
||||||
|
handleTelEvent(event) {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:115", "Tel event detail:", event.detail);
|
||||||
|
},
|
||||||
|
killView() {
|
||||||
|
this.$refs.monitor.killView && this.$refs.monitor.killView();
|
||||||
|
},
|
||||||
|
switchDisplay(mode) {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:123", "zzzzz", mode);
|
||||||
|
this.$refs.monitor && this.$refs.monitor.switchDisplayModeFragment(mode);
|
||||||
|
},
|
||||||
|
startAlarm() {
|
||||||
|
this.isAlarming = true;
|
||||||
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:130", "startAlarm callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
stopAlarm() {
|
||||||
|
this.isAlarming = false;
|
||||||
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:136", "stopAlarm callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
flipImage(type) {
|
||||||
|
this.$refs.monitor.changeImageSwitch(type, (res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:142", "flipImage callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
resumeOrPause() {
|
||||||
|
this.$refs.monitor.resumeOrPause && this.$refs.monitor.resumeOrPause();
|
||||||
|
},
|
||||||
|
changeQuality() {
|
||||||
|
this.$refs.monitor.changeQuality && this.$refs.monitor.changeQuality();
|
||||||
|
},
|
||||||
|
toggleVolume() {
|
||||||
|
this.$refs.monitor.toggleVolume && this.$refs.monitor.toggleVolume();
|
||||||
|
},
|
||||||
|
test() {
|
||||||
|
this.$refs.monitor && this.$refs.monitor.test && this.$refs.monitor.test();
|
||||||
|
},
|
||||||
|
/* ------------------ 新增:截图/录屏/对讲 调用方法(支持 payload.reqId) ------------------ */
|
||||||
|
// 1. 截图(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doSnapshot(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.snapShot) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 snapShot()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "snapShot_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.snapshot.push(payload.reqId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.snapShot((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:188", "snapShot callback:", res);
|
||||||
|
this._handleSnapshotResultFromNative(res, payload.reqId);
|
||||||
|
});
|
||||||
|
uni.showToast({
|
||||||
|
title: "正在截屏...",
|
||||||
|
icon: "none",
|
||||||
|
duration: 800
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:197", "snapShot 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "snapShot 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "snapShot_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 2. 开始录屏(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStartRecord(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.startRecord) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 startRecord()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "startRecord_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.startRecord((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:230", "startRecord callback:", res);
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isRecording = true;
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏已开始",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:245", "startRecord 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "startRecord 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "startRecord_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 3. 停止录屏(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStopRecord(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.stopRecord) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 stopRecord()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopRecord_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.record.push(payload.reqId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.stopRecord((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:284", "stopRecord callback:", res);
|
||||||
|
this._handleRecordResultFromNative(res, payload.reqId);
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:289", "stopRecord 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "stopRecord 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopRecord_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 4. 开始对讲(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doOpenTalk(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.openTalk) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 openTalk()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "openTalk_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.talk.push(payload.reqId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.openTalk((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:326", "openTalk callback:", res);
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
uni.showToast({
|
||||||
|
title: "尝试建立对讲连接...",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:341", "openTalk 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "openTalk 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "openTalk_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 5. 停止对讲(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStopTalk(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.stopTalk) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "组件不支持 stopTalk()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopTalk_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.stopTalk((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:374", "stopTalk callback:", res);
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:384", "stopTalk 调用失败", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "stopTalk 调用失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopTalk_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* ------------------ 事件回调处理(来自原生推送的事件) ------------------ */
|
||||||
|
// 处理来自模板 @onSnapShot 的事件(event.detail)
|
||||||
|
handleSnapShotEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:404", "onSnapShot event:", payload);
|
||||||
|
this._handleSnapshotResultFromNative(payload);
|
||||||
|
},
|
||||||
|
// 处理来自模板 @onRecord 的事件(event.detail)
|
||||||
|
handleRecordEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:412", "onRecord event:", payload);
|
||||||
|
this._handleRecordResultFromNative(payload);
|
||||||
|
},
|
||||||
|
// 处理来自模板 @onTalkStatus 的事件
|
||||||
|
handleTalkEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:419", "onTalkStatus event:", payload);
|
||||||
|
const status = payload && payload.talkStatus;
|
||||||
|
const tips = payload && payload.tips;
|
||||||
|
uni.$emit("fullmonitor:talk:status", payload);
|
||||||
|
if (this._pendingRequests.talk && this._pendingRequests.talk.length) {
|
||||||
|
while (this._pendingRequests.talk.length) {
|
||||||
|
const reqId = this._pendingRequests.talk.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch ((status || "").toLowerCase()) {
|
||||||
|
case "loading":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲连接中...",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
break;
|
||||||
|
case "playing":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲已连接",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
break;
|
||||||
|
case "stopped":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲已停止",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
break;
|
||||||
|
case "failed":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲失败",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "对讲状态: " + (status || "unknown"),
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* ------------------ 原生结果的内部处理函数(统一处理 callback / event) ------------------ */
|
||||||
|
_handleSnapshotResultFromNative(res, reqIdFromCallback = null) {
|
||||||
|
if (!res) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "截图没有返回数据",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "no_data"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let payload = res;
|
||||||
|
if (res.detail)
|
||||||
|
payload = res.detail;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:496", "snapshot payload normalized:", payload);
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: !!payload.snapShotResult,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!reqIdFromCallback && this._pendingRequests.snapshot && this._pendingRequests.snapshot.length) {
|
||||||
|
while (this._pendingRequests.snapshot.length) {
|
||||||
|
const rid = this._pendingRequests.snapshot.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${rid}`, {
|
||||||
|
ok: !!payload.snapShotResult,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uni.$emit("fullmonitor:snapshot:done", payload);
|
||||||
|
if (payload.snapShotResult === true || payload.snapShotResult === "true") {
|
||||||
|
const url = payload.snapShotUrl || payload.snapShotPath || payload.url;
|
||||||
|
uni.showToast({
|
||||||
|
title: "截图成功",
|
||||||
|
icon: "success",
|
||||||
|
duration: 1200
|
||||||
|
});
|
||||||
|
if (url) {
|
||||||
|
uni.previewImage({
|
||||||
|
urls: [url]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const err = payload.snapShotErrorCode || payload.error || "unknown";
|
||||||
|
uni.showToast({
|
||||||
|
title: "截图失败: " + err,
|
||||||
|
icon: "none",
|
||||||
|
duration: 2e3
|
||||||
|
});
|
||||||
|
formatAppLog("warn", "at pages/fullcamera.nvue:539", "snapshot failed reason:", err, payload);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_handleRecordResultFromNative(res, reqIdFromCallback = null) {
|
||||||
|
if (!res) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏没有返回数据",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "no_data"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let payload = res;
|
||||||
|
if (res.detail)
|
||||||
|
payload = res.detail;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:561", "record payload normalized:", payload);
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!reqIdFromCallback && this._pendingRequests.record && this._pendingRequests.record.length) {
|
||||||
|
while (this._pendingRequests.record.length) {
|
||||||
|
const rid = this._pendingRequests.record.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${rid}`, {
|
||||||
|
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uni.$emit("fullmonitor:record:done", payload);
|
||||||
|
if (payload.recordUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏完成",
|
||||||
|
icon: "success",
|
||||||
|
duration: 1400
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:592", "录屏地址:", payload.recordUrl);
|
||||||
|
} else if (payload.recordFailedReason) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏失败: " + payload.recordFailedReason,
|
||||||
|
icon: "none",
|
||||||
|
duration: 2e3
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
formatAppLog("warn", "at pages/fullcamera.nvue:600", "record failed reason:", payload.recordFailedReason);
|
||||||
|
} else {
|
||||||
|
if (payload.snapShotResult === true) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "录屏操作已完成(返回未知)",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.isRecording = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
|
const _component_MonitorView = resolveComponent("MonitorView");
|
||||||
|
return openBlock(), createElementBlock("scroll-view", {
|
||||||
|
scrollY: true,
|
||||||
|
showScrollbar: true,
|
||||||
|
enableBackToTop: true,
|
||||||
|
bubble: "true",
|
||||||
|
style: { flexDirection: "column" }
|
||||||
|
}, [
|
||||||
|
createElementVNode(
|
||||||
|
"div",
|
||||||
|
{
|
||||||
|
class: "center-column",
|
||||||
|
style: normalizeStyle({ height: $data.isshow ? "600px" : "0px" })
|
||||||
|
},
|
||||||
|
[
|
||||||
|
createCommentVNode(" 视频播放组件 "),
|
||||||
|
createVNode(_component_MonitorView, {
|
||||||
|
ref: "monitor",
|
||||||
|
init: "5",
|
||||||
|
style: { "width": "900px", "height": "600px" },
|
||||||
|
onOnTel: $options.handleTelEvent,
|
||||||
|
onOnSnapShot: $options.handleSnapShotEvent,
|
||||||
|
onOnRecord: $options.handleRecordEvent,
|
||||||
|
onOnTalkStatus: $options.handleTalkEvent
|
||||||
|
}, null, 8, ["onOnTel", "onOnSnapShot", "onOnRecord", "onOnTalkStatus"])
|
||||||
|
],
|
||||||
|
4
|
||||||
|
/* STYLE */
|
||||||
|
)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
const fullcamera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/hldy_app/pages/fullcamera.nvue"]]);
|
||||||
|
export {
|
||||||
|
fullcamera as default
|
||||||
|
};
|
||||||
|
|
@ -374,6 +374,421 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.index-content-other[data-v-11f2c598] {
|
||||||
|
width: calc(100% - 12.71875rem);
|
||||||
|
height: 100%;
|
||||||
|
transition: opacity 1s ease;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.index-content-other .abs-time[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
right: 0.625rem;
|
||||||
|
top: 4.6875rem;
|
||||||
|
}
|
||||||
|
.index-content-other .abs-time .big-time[data-v-11f2c598] {
|
||||||
|
font-size: 2.8125rem;
|
||||||
|
font-weight: 600;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.right-container-title-nav[data-v-11f2c598] {
|
||||||
|
margin-top: 1.875rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 1.875rem;
|
||||||
|
position: relative;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
.right-container-title-nav .new-weight[data-v-11f2c598] {
|
||||||
|
margin-left: 0.9375rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.right-container-title-nav .right-icons[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
right: 0.9375rem;
|
||||||
|
top: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 1.875rem;
|
||||||
|
}
|
||||||
|
.right-container-title-nav .right-icons-img[data-v-11f2c598] {
|
||||||
|
width: 1.875rem;
|
||||||
|
height: 1.875rem;
|
||||||
|
margin-left: 0.625rem;
|
||||||
|
margin-right: 0.625rem;
|
||||||
|
}
|
||||||
|
.scroll-vi[data-v-11f2c598] {
|
||||||
|
height: 3.75rem;
|
||||||
|
width: 95%;
|
||||||
|
margin-left: 0.625rem;
|
||||||
|
margin-top: 0.625rem;
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
}
|
||||||
|
.scroll-vi .menu[data-v-11f2c598] {
|
||||||
|
margin-top: 0.46875rem;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
height: 2.8125rem;
|
||||||
|
width: 7.5rem;
|
||||||
|
border-radius: 1.5625rem;
|
||||||
|
margin-right: 0.625rem;
|
||||||
|
background-color: #fff;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 0.28125rem;
|
||||||
|
}
|
||||||
|
.scroll-vi .menu .menu-img[data-v-11f2c598] {
|
||||||
|
width: 1.71875rem;
|
||||||
|
height: 1.71875rem;
|
||||||
|
margin-right: 0.46875rem;
|
||||||
|
}
|
||||||
|
.scroll-vi .menu .menu-font[data-v-11f2c598] {
|
||||||
|
margin-top: 0.5625rem;
|
||||||
|
font-size: 0.78125rem;
|
||||||
|
}
|
||||||
|
.date[data-v-11f2c598] {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
margin-top: 0.3125rem;
|
||||||
|
}
|
||||||
|
.right-container-tem[data-v-11f2c598] {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.right-container-tem .right-container-tem-text[data-v-11f2c598] {
|
||||||
|
font-size: 0.9375rem;
|
||||||
|
margin-right: 0.625rem;
|
||||||
|
}
|
||||||
|
.right-container-tem .right-container-tem-img[data-v-11f2c598] {
|
||||||
|
width: 1.1875rem;
|
||||||
|
height: 1.1875rem;
|
||||||
|
}
|
||||||
|
.photo-father[data-v-11f2c598] {
|
||||||
|
width: 100%;
|
||||||
|
height: 34.375rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.juzhong[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
top: 0%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -10%);
|
||||||
|
}
|
||||||
|
.weight-time[data-v-11f2c598] {
|
||||||
|
font-weight: 800;
|
||||||
|
font-size: 3.125rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-left: -1.5625rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.weight-time .big-font-right[data-v-11f2c598] {
|
||||||
|
font-size: 1.09375rem;
|
||||||
|
font-weight: 500;
|
||||||
|
color: black;
|
||||||
|
margin-left: 0.9375rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.weight-time .big-font-right .right-kuai[data-v-11f2c598] {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #42A5F6;
|
||||||
|
color: #fff;
|
||||||
|
width: 3.4375rem;
|
||||||
|
height: 1.5625rem;
|
||||||
|
border-radius: 0.46875rem;
|
||||||
|
font-size: 0.78125rem;
|
||||||
|
}
|
||||||
|
.big-img[data-v-11f2c598] {
|
||||||
|
width: 18.75rem;
|
||||||
|
height: 18.75rem;
|
||||||
|
margin: 1.5625rem 0;
|
||||||
|
}
|
||||||
|
.server-name[data-v-11f2c598] {
|
||||||
|
font-size: 1.40625rem;
|
||||||
|
margin-right: 0.3125rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.server-bgc[data-v-11f2c598] {
|
||||||
|
width: 5rem;
|
||||||
|
height: 1.5625rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.bgc-img[data-v-11f2c598] {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.bgc-font[data-v-11f2c598] {
|
||||||
|
color: #fff;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.down-img[data-v-11f2c598] {
|
||||||
|
width: 1.09375rem;
|
||||||
|
height: 1.09375rem;
|
||||||
|
}
|
||||||
|
.states-father[data-v-11f2c598] {
|
||||||
|
display: flex;
|
||||||
|
margin: 0 0.625rem;
|
||||||
|
}
|
||||||
|
.icon-img[data-v-11f2c598] {
|
||||||
|
width: 1.71875rem;
|
||||||
|
height: 1.71875rem;
|
||||||
|
}
|
||||||
|
.start-button[data-v-11f2c598] {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(to bottom, #009DEF, #0076FF);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 1.25rem;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 0.9375rem;
|
||||||
|
}
|
||||||
|
.end-button[data-v-11f2c598] {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(to bottom, #FFFFFF, #C8D0D9);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 1.25rem;
|
||||||
|
font-size: 0.9375rem;
|
||||||
|
}
|
||||||
|
.left-menu[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 4.6875rem;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
.zoom[data-v-11f2c598] {
|
||||||
|
transform: scale(1.2);
|
||||||
|
transform-origin: bottom left;
|
||||||
|
transition: transform 1s ease;
|
||||||
|
}
|
||||||
|
.left-ball[data-v-11f2c598] {
|
||||||
|
width: 3.125rem;
|
||||||
|
height: 3.125rem;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #fff;
|
||||||
|
margin-bottom: 0.3125rem;
|
||||||
|
}
|
||||||
|
.left-ball .left-menu-img[data-v-11f2c598] {
|
||||||
|
width: 1.5625rem;
|
||||||
|
height: 1.5625rem;
|
||||||
|
}
|
||||||
|
.right-menu[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
right: 4.6875rem;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
.right-menu .right-scroll[data-v-11f2c598] {
|
||||||
|
width: 100%;
|
||||||
|
height: 23.4375rem;
|
||||||
|
}
|
||||||
|
.right-menu .white-circle[data-v-11f2c598] {
|
||||||
|
height: 6.25rem;
|
||||||
|
border-radius: 1.875rem;
|
||||||
|
background-color: #fff;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction: column;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.right-menu .white-circle .right-menu-img[data-v-11f2c598] {
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
}
|
||||||
|
.right-menu .white-circle .right-menu-name[data-v-11f2c598] {
|
||||||
|
width: 2.5rem;
|
||||||
|
}
|
||||||
|
.zhezhao-top[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
top: 3.28125rem;
|
||||||
|
left: 0%;
|
||||||
|
width: 120%;
|
||||||
|
height: 3.75rem;
|
||||||
|
background: linear-gradient(to bottom, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
||||||
|
z-index: 4;
|
||||||
|
}
|
||||||
|
.zhezhao-bottom[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 3.28125rem;
|
||||||
|
left: 0%;
|
||||||
|
width: 120%;
|
||||||
|
height: 3.75rem;
|
||||||
|
background: linear-gradient(to top, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
||||||
|
z-index: 4;
|
||||||
|
}
|
||||||
|
.zhezhao-left[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0%;
|
||||||
|
height: 100%;
|
||||||
|
width: 3.75rem;
|
||||||
|
background: linear-gradient(to right, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
||||||
|
z-index: 4;
|
||||||
|
}
|
||||||
|
.zhezhao-right[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0%;
|
||||||
|
height: 100%;
|
||||||
|
width: 3.75rem;
|
||||||
|
background: linear-gradient(to left, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
||||||
|
z-index: 4;
|
||||||
|
}
|
||||||
|
.zerotarget[data-v-11f2c598] {
|
||||||
|
--color: #99C9FD;
|
||||||
|
--thick: 2px;
|
||||||
|
--radius: 1.5625rem;
|
||||||
|
--outline-offset: 0;
|
||||||
|
/* 外扩多少 */
|
||||||
|
/* 内层虚线(你现在用的) */
|
||||||
|
border-radius: var(--radius);
|
||||||
|
background-color: white;
|
||||||
|
/* 内部背景 */
|
||||||
|
animation: scalePulse-11f2c598 360ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
||||||
|
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||||||
|
outline: var(--thick) dashed var(--color);
|
||||||
|
outline-offset: var(--outline-offset);
|
||||||
|
/* 保证文本 / 子元素在最上层 */
|
||||||
|
position: relative;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
.firsttarget[data-v-11f2c598] {
|
||||||
|
--color: #99C9FD;
|
||||||
|
--thick: 2px;
|
||||||
|
--radius: 50%;
|
||||||
|
--outline-offset: 0;
|
||||||
|
/* 外扩多少 */
|
||||||
|
/* 内层虚线(你现在用的) */
|
||||||
|
border-radius: var(--radius);
|
||||||
|
background-color: white;
|
||||||
|
/* 内部背景 */
|
||||||
|
animation: scalePulse-11f2c598 360ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
||||||
|
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||||||
|
outline: var(--thick) dashed var(--color);
|
||||||
|
outline-offset: var(--outline-offset);
|
||||||
|
/* 保证文本 / 子元素在最上层 */
|
||||||
|
position: relative;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
.secondtarget[data-v-11f2c598] {
|
||||||
|
--color: #99C9FD;
|
||||||
|
--thick: 2px;
|
||||||
|
--radius: 1.875rem;
|
||||||
|
--outline-offset: 0;
|
||||||
|
/* 外扩多少 */
|
||||||
|
/* 内层虚线(你现在用的) */
|
||||||
|
border-radius: var(--radius);
|
||||||
|
background-color: white;
|
||||||
|
/* 内部背景 */
|
||||||
|
animation: scalePulse-11f2c598 360ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
||||||
|
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||||||
|
outline: var(--thick) dashed var(--color);
|
||||||
|
outline-offset: var(--outline-offset);
|
||||||
|
/* 保证文本 / 子元素在最上层 */
|
||||||
|
position: relative;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
.thirdtarget[data-v-11f2c598] {
|
||||||
|
--color: #99C9FD;
|
||||||
|
--thick: 2px;
|
||||||
|
--radius: 1.25rem;
|
||||||
|
--outline-offset: 0;
|
||||||
|
/* 外扩多少 */
|
||||||
|
/* 内层虚线(你现在用的) */
|
||||||
|
border-radius: var(--radius);
|
||||||
|
background-color: white;
|
||||||
|
/* 内部背景 */
|
||||||
|
animation: scalePulse-11f2c598 360ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
||||||
|
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||||||
|
outline: var(--thick) dashed var(--color);
|
||||||
|
outline-offset: var(--outline-offset);
|
||||||
|
/* 保证文本 / 子元素在最上层 */
|
||||||
|
position: relative;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
@keyframes scalePulse-11f2c598 {
|
||||||
|
0% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
25% {
|
||||||
|
/* 先收缩一点点 */
|
||||||
|
transform: scale(0.94);
|
||||||
|
}
|
||||||
|
65% {
|
||||||
|
/* 再放大到略超出的感觉 */
|
||||||
|
transform: scale(1.08);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.buttons-father[data-v-11f2c598] {
|
||||||
|
margin: 0.9375rem 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.biga-img[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
right: -0.46875rem;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
width: 0.875rem;
|
||||||
|
height: 0.875rem;
|
||||||
|
}
|
||||||
|
.bottom-father[data-v-11f2c598] {
|
||||||
|
width: 100%;
|
||||||
|
padding-left: 5rem;
|
||||||
|
padding-top: 1.5625rem;
|
||||||
|
}
|
||||||
|
.bottom-father .status-button[data-v-11f2c598] {
|
||||||
|
color: #fff;
|
||||||
|
width: 3.75rem;
|
||||||
|
height: 1.5625rem;
|
||||||
|
border-radius: 0.9375rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #47ADF5;
|
||||||
|
}
|
||||||
|
.bottom-father .status-font[data-v-11f2c598] {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 1.1875rem;
|
||||||
|
margin-top: 0.625rem;
|
||||||
|
}
|
||||||
|
.bottom-father .status-time[data-v-11f2c598] {
|
||||||
|
color: #666666;
|
||||||
|
margin-top: 0.625rem;
|
||||||
|
}
|
||||||
|
.donghua-number[data-v-11f2c598] {
|
||||||
|
position: absolute;
|
||||||
|
right: 31.5625rem;
|
||||||
|
top: 8.28125rem;
|
||||||
|
z-index: 3;
|
||||||
|
font-size: 1.09375rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
.super-card[data-v-c3fbc13d] {
|
.super-card[data-v-c3fbc13d] {
|
||||||
display: flex;
|
display: flex;
|
||||||
/* justify-content: center; */
|
/* justify-content: center; */
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ if (typeof uni !== 'undefined' && uni && uni.requireGlobal) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// ../../../../hldy_app/unpackage/dist/dev/.nvue/pages/camera.js
|
// ../../../../hldy_app/unpackage/dist/dev/.nvue/_plugin-vue_export-helper.js
|
||||||
var import_vue = __toESM(require_vue());
|
var import_vue = __toESM(require_vue());
|
||||||
function requireNativePlugin(name) {
|
function requireNativePlugin(name) {
|
||||||
return weex.requireModule(name);
|
return weex.requireModule(name);
|
||||||
|
|
@ -75,7 +75,6 @@ if (typeof uni !== 'undefined' && uni && uni.requireGlobal) {
|
||||||
console[type].apply(console, [...args, filename]);
|
console[type].apply(console, [...args, filename]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var _style_0 = { "center-column": { "": { "width": 680, "height": 520, "borderRadius": 30, "overflow": "hidden" } } };
|
|
||||||
var _export_sfc = (sfc, props) => {
|
var _export_sfc = (sfc, props) => {
|
||||||
const target = sfc.__vccOpts || sfc;
|
const target = sfc.__vccOpts || sfc;
|
||||||
for (const [key, val] of props) {
|
for (const [key, val] of props) {
|
||||||
|
|
@ -83,6 +82,10 @@ if (typeof uni !== 'undefined' && uni && uni.requireGlobal) {
|
||||||
}
|
}
|
||||||
return target;
|
return target;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ../../../../hldy_app/unpackage/dist/dev/.nvue/pages/camera.js
|
||||||
|
var import_vue2 = __toESM(require_vue());
|
||||||
|
var _style_0 = { "center-column": { "": { "width": 680, "height": 520, "borderRadius": 30, "overflow": "hidden" } } };
|
||||||
var _sfc_main = {
|
var _sfc_main = {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -140,7 +143,7 @@ if (typeof uni !== 'undefined' && uni && uni.requireGlobal) {
|
||||||
(number) => {
|
(number) => {
|
||||||
this.$refs.monitor.initAutoPlay(number);
|
this.$refs.monitor.initAutoPlay(number);
|
||||||
uni.setStorageSync("saveinit", number);
|
uni.setStorageSync("saveinit", number);
|
||||||
formatAppLog("log", "at pages/camera.nvue:66", "?????", number);
|
formatAppLog("log", "at pages/camera.nvue:66", "saveinit", number);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
uni.$on("monitor:isshow", (bool) => this.isshow = bool);
|
uni.$on("monitor:isshow", (bool) => this.isshow = bool);
|
||||||
|
|
@ -626,23 +629,23 @@ if (typeof uni !== 'undefined' && uni && uni.requireGlobal) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
const _component_MonitorView = (0, import_vue.resolveComponent)("MonitorView");
|
const _component_MonitorView = (0, import_vue2.resolveComponent)("MonitorView");
|
||||||
return (0, import_vue.openBlock)(), (0, import_vue.createElementBlock)("scroll-view", {
|
return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("scroll-view", {
|
||||||
scrollY: true,
|
scrollY: true,
|
||||||
showScrollbar: true,
|
showScrollbar: true,
|
||||||
enableBackToTop: true,
|
enableBackToTop: true,
|
||||||
bubble: "true",
|
bubble: "true",
|
||||||
style: { flexDirection: "column" }
|
style: { flexDirection: "column" }
|
||||||
}, [
|
}, [
|
||||||
(0, import_vue.createElementVNode)(
|
(0, import_vue2.createElementVNode)(
|
||||||
"div",
|
"div",
|
||||||
{
|
{
|
||||||
class: "center-column",
|
class: "center-column",
|
||||||
style: (0, import_vue.normalizeStyle)({ height: $data.isshow ? "520px" : "0px" })
|
style: (0, import_vue2.normalizeStyle)({ height: $data.isshow ? "520px" : "0px" })
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
(0, import_vue.createCommentVNode)(" \u89C6\u9891\u64AD\u653E\u7EC4\u4EF6 "),
|
(0, import_vue2.createCommentVNode)(" \u89C6\u9891\u64AD\u653E\u7EC4\u4EF6 "),
|
||||||
(0, import_vue.createVNode)(_component_MonitorView, {
|
(0, import_vue2.createVNode)(_component_MonitorView, {
|
||||||
ref: "monitor",
|
ref: "monitor",
|
||||||
init: "5",
|
init: "5",
|
||||||
style: { "width": "680px", "height": "520px" },
|
style: { "width": "680px", "height": "520px" },
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,682 @@
|
||||||
|
"use weex:vue";
|
||||||
|
|
||||||
|
if (typeof Promise !== 'undefined' && !Promise.prototype.finally) {
|
||||||
|
Promise.prototype.finally = function(callback) {
|
||||||
|
const promise = this.constructor
|
||||||
|
return this.then(
|
||||||
|
value => promise.resolve(callback()).then(() => value),
|
||||||
|
reason => promise.resolve(callback()).then(() => {
|
||||||
|
throw reason
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof uni !== 'undefined' && uni && uni.requireGlobal) {
|
||||||
|
const global = uni.requireGlobal()
|
||||||
|
ArrayBuffer = global.ArrayBuffer
|
||||||
|
Int8Array = global.Int8Array
|
||||||
|
Uint8Array = global.Uint8Array
|
||||||
|
Uint8ClampedArray = global.Uint8ClampedArray
|
||||||
|
Int16Array = global.Int16Array
|
||||||
|
Uint16Array = global.Uint16Array
|
||||||
|
Int32Array = global.Int32Array
|
||||||
|
Uint32Array = global.Uint32Array
|
||||||
|
Float32Array = global.Float32Array
|
||||||
|
Float64Array = global.Float64Array
|
||||||
|
BigInt64Array = global.BigInt64Array
|
||||||
|
BigUint64Array = global.BigUint64Array
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
(() => {
|
||||||
|
var __create = Object.create;
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __getProtoOf = Object.getPrototypeOf;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __commonJS = (cb, mod) => function __require() {
|
||||||
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||||
|
// If the importer is in node compatibility mode or this is not an ESM
|
||||||
|
// file that has been converted to a CommonJS file using a Babel-
|
||||||
|
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||||
|
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||||
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||||
|
mod
|
||||||
|
));
|
||||||
|
|
||||||
|
// vue-ns:vue
|
||||||
|
var require_vue = __commonJS({
|
||||||
|
"vue-ns:vue"(exports, module) {
|
||||||
|
module.exports = Vue;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// ../../../../hldy_app/unpackage/dist/dev/.nvue/_plugin-vue_export-helper.js
|
||||||
|
var import_vue = __toESM(require_vue());
|
||||||
|
function requireNativePlugin(name) {
|
||||||
|
return weex.requireModule(name);
|
||||||
|
}
|
||||||
|
function formatAppLog(type, filename, ...args) {
|
||||||
|
if (uni.__log__) {
|
||||||
|
uni.__log__(type, filename, ...args);
|
||||||
|
} else {
|
||||||
|
console[type].apply(console, [...args, filename]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var _export_sfc = (sfc, props) => {
|
||||||
|
const target = sfc.__vccOpts || sfc;
|
||||||
|
for (const [key, val] of props) {
|
||||||
|
target[key] = val;
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ../../../../hldy_app/unpackage/dist/dev/.nvue/pages/fullcamera.js
|
||||||
|
var import_vue2 = __toESM(require_vue());
|
||||||
|
var _style_0 = { "center-column": { "": { "width": 900, "height": 600, "overflow": "hidden" } } };
|
||||||
|
var _sfc_main = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
phoneNumber: "1234567890",
|
||||||
|
initnumber: 5,
|
||||||
|
isAlarming: false,
|
||||||
|
isRecording: false,
|
||||||
|
// 录屏状态
|
||||||
|
isTalking: false,
|
||||||
|
// 对讲状态
|
||||||
|
_pendingRequests: {
|
||||||
|
snapshot: [],
|
||||||
|
record: [],
|
||||||
|
talk: []
|
||||||
|
},
|
||||||
|
suo: true,
|
||||||
|
isshow: true,
|
||||||
|
globalEvent: ""
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:29", "???\u52A0\u8F7D");
|
||||||
|
this.globalEvent = requireNativePlugin && requireNativePlugin("globalEvent");
|
||||||
|
if (this.globalEvent && this.globalEvent.addEventListener) {
|
||||||
|
this.globalEvent.addEventListener("myEvent", (e) => {
|
||||||
|
if (e.recordUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u5F55\u5C4F\u6210\u529F",
|
||||||
|
icon: "success",
|
||||||
|
// 'success' | 'loading' | 'none'
|
||||||
|
duration: 1500
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (e.snapShotUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u622A\u5C4F\u6210\u529F",
|
||||||
|
icon: "success",
|
||||||
|
// 'success' | 'loading' | 'none'
|
||||||
|
duration: 1500
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (this.suo && e.onVolumeChange) {
|
||||||
|
if (e.onVolumeChange) {
|
||||||
|
this.toggleVolume();
|
||||||
|
}
|
||||||
|
this.suo = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
uni.setStorageSync("saveinit", 5);
|
||||||
|
uni.$on("fullmonitor:changeinit", (number) => {
|
||||||
|
this.$refs.monitor.initAutoPlay(number);
|
||||||
|
uni.setStorageSync("saveinit", number);
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:63", "saveinit", number);
|
||||||
|
});
|
||||||
|
uni.$on("fullmonitor:isshow", (bool) => this.isshow = bool);
|
||||||
|
uni.$on("fullmonitor:killView", this.killView);
|
||||||
|
uni.$on("fullmonitor:doSnapshot", this.doSnapshot);
|
||||||
|
uni.$on("fullmonitor:startRecord", this.doStartRecord);
|
||||||
|
uni.$on("fullmonitor:stopRecord", this.doStopRecord);
|
||||||
|
uni.$on("fullmonitor:openTalk", this.doOpenTalk);
|
||||||
|
uni.$on("fullmonitor:stopTalk", this.doStopTalk);
|
||||||
|
uni.$on("fullmonitor:switchDisplay", (payload) => this.switchDisplay(payload));
|
||||||
|
uni.$on("fullmonitor:startAlarm", this.startAlarm);
|
||||||
|
uni.$on("fullmonitor:stopAlarm", this.stopAlarm);
|
||||||
|
uni.$on("fullmonitor:flipImage", (payload) => this.flipImage(payload));
|
||||||
|
uni.$on("fullmonitor:resumeOrPause", this.resumeOrPause);
|
||||||
|
uni.$on("fullmonitor:changeQuality", this.changeQuality);
|
||||||
|
uni.$on("fullmonitor:toggleVolume", this.toggleVolume);
|
||||||
|
uni.$on("fullmonitor:test", this.test);
|
||||||
|
},
|
||||||
|
onUnload() {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:84", "fullcamera \u5378\u8F7D\uFF0C\u6E05\u7406\u4E8B\u4EF6");
|
||||||
|
if (this.globalEvent && this.globalEvent.removeEventListener) {
|
||||||
|
this.globalEvent.removeEventListener("myEvent");
|
||||||
|
}
|
||||||
|
const events = [
|
||||||
|
"fullmonitor:killView",
|
||||||
|
"fullmonitor:changeinit",
|
||||||
|
"fullmonitor:isshow",
|
||||||
|
"fullmonitor:doSnapshot",
|
||||||
|
"fullmonitor:startRecord",
|
||||||
|
"fullmonitor:stopRecord",
|
||||||
|
"fullmonitor:openTalk",
|
||||||
|
"fullmonitor:stopTalk",
|
||||||
|
"fullmonitor:switchDisplay",
|
||||||
|
"fullmonitor:startAlarm",
|
||||||
|
"fullmonitor:stopAlarm",
|
||||||
|
"fullmonitor:flipImage",
|
||||||
|
"fullmonitor:resumeOrPause",
|
||||||
|
"fullmonitor:changeQuality",
|
||||||
|
"fullmonitor:toggleVolume",
|
||||||
|
"fullmonitor:test"
|
||||||
|
];
|
||||||
|
events.forEach((ev) => uni.$off(ev));
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/* ------------------ 原有功能 ------------------ */
|
||||||
|
handleTelEvent(event) {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:115", "Tel event detail:", event.detail);
|
||||||
|
},
|
||||||
|
killView() {
|
||||||
|
this.$refs.monitor.killView && this.$refs.monitor.killView();
|
||||||
|
},
|
||||||
|
switchDisplay(mode) {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:123", "zzzzz", mode);
|
||||||
|
this.$refs.monitor && this.$refs.monitor.switchDisplayModeFragment(mode);
|
||||||
|
},
|
||||||
|
startAlarm() {
|
||||||
|
this.isAlarming = true;
|
||||||
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:130", "startAlarm callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
stopAlarm() {
|
||||||
|
this.isAlarming = false;
|
||||||
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:136", "stopAlarm callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
flipImage(type) {
|
||||||
|
this.$refs.monitor.changeImageSwitch(type, (res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:142", "flipImage callback:", res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
resumeOrPause() {
|
||||||
|
this.$refs.monitor.resumeOrPause && this.$refs.monitor.resumeOrPause();
|
||||||
|
},
|
||||||
|
changeQuality() {
|
||||||
|
this.$refs.monitor.changeQuality && this.$refs.monitor.changeQuality();
|
||||||
|
},
|
||||||
|
toggleVolume() {
|
||||||
|
this.$refs.monitor.toggleVolume && this.$refs.monitor.toggleVolume();
|
||||||
|
},
|
||||||
|
test() {
|
||||||
|
this.$refs.monitor && this.$refs.monitor.test && this.$refs.monitor.test();
|
||||||
|
},
|
||||||
|
/* ------------------ 新增:截图/录屏/对讲 调用方法(支持 payload.reqId) ------------------ */
|
||||||
|
// 1. 截图(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doSnapshot(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.snapShot) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u7EC4\u4EF6\u4E0D\u652F\u6301 snapShot()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "snapShot_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.snapshot.push(payload.reqId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.snapShot((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:188", "snapShot callback:", res);
|
||||||
|
this._handleSnapshotResultFromNative(res, payload.reqId);
|
||||||
|
});
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u6B63\u5728\u622A\u5C4F...",
|
||||||
|
icon: "none",
|
||||||
|
duration: 800
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:197", "snapShot \u8C03\u7528\u5931\u8D25", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "snapShot \u8C03\u7528\u5931\u8D25",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "snapShot_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 2. 开始录屏(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStartRecord(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.startRecord) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u7EC4\u4EF6\u4E0D\u652F\u6301 startRecord()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "startRecord_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.startRecord((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:230", "startRecord callback:", res);
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isRecording = true;
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u5F55\u5C4F\u5DF2\u5F00\u59CB",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:245", "startRecord \u8C03\u7528\u5931\u8D25", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "startRecord \u8C03\u7528\u5931\u8D25",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "startRecord_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 3. 停止录屏(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStopRecord(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.stopRecord) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u7EC4\u4EF6\u4E0D\u652F\u6301 stopRecord()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopRecord_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.record.push(payload.reqId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.stopRecord((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:284", "stopRecord callback:", res);
|
||||||
|
this._handleRecordResultFromNative(res, payload.reqId);
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:289", "stopRecord \u8C03\u7528\u5931\u8D25", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "stopRecord \u8C03\u7528\u5931\u8D25",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopRecord_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 4. 开始对讲(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doOpenTalk(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.openTalk) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u7EC4\u4EF6\u4E0D\u652F\u6301 openTalk()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "openTalk_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (payload.reqId) {
|
||||||
|
this._pendingRequests.talk.push(payload.reqId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.openTalk((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:326", "openTalk callback:", res);
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u5C1D\u8BD5\u5EFA\u7ACB\u5BF9\u8BB2\u8FDE\u63A5...",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:341", "openTalk \u8C03\u7528\u5931\u8D25", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "openTalk \u8C03\u7528\u5931\u8D25",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "openTalk_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 5. 停止对讲(调用)
|
||||||
|
// payload 可选:{ reqId: number }
|
||||||
|
doStopTalk(payload = {}) {
|
||||||
|
if (!this.$refs.monitor || !this.$refs.monitor.stopTalk) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u7EC4\u4EF6\u4E0D\u652F\u6301 stopTalk()",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopTalk_not_supported"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.$refs.monitor.stopTalk((res) => {
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:374", "stopTalk callback:", res);
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
} catch (err) {
|
||||||
|
formatAppLog("error", "at pages/fullcamera.nvue:384", "stopTalk \u8C03\u7528\u5931\u8D25", err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "stopTalk \u8C03\u7528\u5931\u8D25",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (payload.reqId) {
|
||||||
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "stopTalk_call_failed",
|
||||||
|
detail: String(err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* ------------------ 事件回调处理(来自原生推送的事件) ------------------ */
|
||||||
|
// 处理来自模板 @onSnapShot 的事件(event.detail)
|
||||||
|
handleSnapShotEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:404", "onSnapShot event:", payload);
|
||||||
|
this._handleSnapshotResultFromNative(payload);
|
||||||
|
},
|
||||||
|
// 处理来自模板 @onRecord 的事件(event.detail)
|
||||||
|
handleRecordEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:412", "onRecord event:", payload);
|
||||||
|
this._handleRecordResultFromNative(payload);
|
||||||
|
},
|
||||||
|
// 处理来自模板 @onTalkStatus 的事件
|
||||||
|
handleTalkEvent(event) {
|
||||||
|
const payload = event && event.detail ? event.detail : event;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:419", "onTalkStatus event:", payload);
|
||||||
|
const status = payload && payload.talkStatus;
|
||||||
|
const tips = payload && payload.tips;
|
||||||
|
uni.$emit("fullmonitor:talk:status", payload);
|
||||||
|
if (this._pendingRequests.talk && this._pendingRequests.talk.length) {
|
||||||
|
while (this._pendingRequests.talk.length) {
|
||||||
|
const reqId = this._pendingRequests.talk.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${reqId}`, {
|
||||||
|
ok: true,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch ((status || "").toLowerCase()) {
|
||||||
|
case "loading":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "\u5BF9\u8BB2\u8FDE\u63A5\u4E2D...",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
break;
|
||||||
|
case "playing":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "\u5BF9\u8BB2\u5DF2\u8FDE\u63A5",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = true;
|
||||||
|
break;
|
||||||
|
case "stopped":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "\u5BF9\u8BB2\u5DF2\u505C\u6B62",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
break;
|
||||||
|
case "failed":
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "\u5BF9\u8BB2\u5931\u8D25",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isTalking = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
uni.showToast({
|
||||||
|
title: tips || "\u5BF9\u8BB2\u72B6\u6001: " + (status || "unknown"),
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* ------------------ 原生结果的内部处理函数(统一处理 callback / event) ------------------ */
|
||||||
|
_handleSnapshotResultFromNative(res, reqIdFromCallback = null) {
|
||||||
|
if (!res) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u622A\u56FE\u6CA1\u6709\u8FD4\u56DE\u6570\u636E",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "no_data"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let payload = res;
|
||||||
|
if (res.detail)
|
||||||
|
payload = res.detail;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:496", "snapshot payload normalized:", payload);
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: !!payload.snapShotResult,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!reqIdFromCallback && this._pendingRequests.snapshot && this._pendingRequests.snapshot.length) {
|
||||||
|
while (this._pendingRequests.snapshot.length) {
|
||||||
|
const rid = this._pendingRequests.snapshot.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${rid}`, {
|
||||||
|
ok: !!payload.snapShotResult,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uni.$emit("fullmonitor:snapshot:done", payload);
|
||||||
|
if (payload.snapShotResult === true || payload.snapShotResult === "true") {
|
||||||
|
const url = payload.snapShotUrl || payload.snapShotPath || payload.url;
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u622A\u56FE\u6210\u529F",
|
||||||
|
icon: "success",
|
||||||
|
duration: 1200
|
||||||
|
});
|
||||||
|
if (url) {
|
||||||
|
uni.previewImage({
|
||||||
|
urls: [url]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const err = payload.snapShotErrorCode || payload.error || "unknown";
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u622A\u56FE\u5931\u8D25: " + err,
|
||||||
|
icon: "none",
|
||||||
|
duration: 2e3
|
||||||
|
});
|
||||||
|
formatAppLog("warn", "at pages/fullcamera.nvue:539", "snapshot failed reason:", err, payload);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_handleRecordResultFromNative(res, reqIdFromCallback = null) {
|
||||||
|
if (!res) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u5F55\u5C4F\u6CA1\u6709\u8FD4\u56DE\u6570\u636E",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: false,
|
||||||
|
error: "no_data"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let payload = res;
|
||||||
|
if (res.detail)
|
||||||
|
payload = res.detail;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:561", "record payload normalized:", payload);
|
||||||
|
if (reqIdFromCallback) {
|
||||||
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
|
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!reqIdFromCallback && this._pendingRequests.record && this._pendingRequests.record.length) {
|
||||||
|
while (this._pendingRequests.record.length) {
|
||||||
|
const rid = this._pendingRequests.record.shift();
|
||||||
|
uni.$emit(`fullmonitor:response:${rid}`, {
|
||||||
|
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uni.$emit("fullmonitor:record:done", payload);
|
||||||
|
if (payload.recordUrl) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u5F55\u5C4F\u5B8C\u6210",
|
||||||
|
icon: "success",
|
||||||
|
duration: 1400
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:592", "\u5F55\u5C4F\u5730\u5740\uFF1A", payload.recordUrl);
|
||||||
|
} else if (payload.recordFailedReason) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u5F55\u5C4F\u5931\u8D25: " + payload.recordFailedReason,
|
||||||
|
icon: "none",
|
||||||
|
duration: 2e3
|
||||||
|
});
|
||||||
|
this.isRecording = false;
|
||||||
|
formatAppLog("warn", "at pages/fullcamera.nvue:600", "record failed reason:", payload.recordFailedReason);
|
||||||
|
} else {
|
||||||
|
if (payload.snapShotResult === true) {
|
||||||
|
uni.showToast({
|
||||||
|
title: "\u5F55\u5C4F\u64CD\u4F5C\u5DF2\u5B8C\u6210\uFF08\u8FD4\u56DE\u672A\u77E5\uFF09",
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.isRecording = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
|
const _component_MonitorView = (0, import_vue2.resolveComponent)("MonitorView");
|
||||||
|
return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("scroll-view", {
|
||||||
|
scrollY: true,
|
||||||
|
showScrollbar: true,
|
||||||
|
enableBackToTop: true,
|
||||||
|
bubble: "true",
|
||||||
|
style: { flexDirection: "column" }
|
||||||
|
}, [
|
||||||
|
(0, import_vue2.createElementVNode)(
|
||||||
|
"div",
|
||||||
|
{
|
||||||
|
class: "center-column",
|
||||||
|
style: (0, import_vue2.normalizeStyle)({ height: $data.isshow ? "600px" : "0px" })
|
||||||
|
},
|
||||||
|
[
|
||||||
|
(0, import_vue2.createCommentVNode)(" \u89C6\u9891\u64AD\u653E\u7EC4\u4EF6 "),
|
||||||
|
(0, import_vue2.createVNode)(_component_MonitorView, {
|
||||||
|
ref: "monitor",
|
||||||
|
init: "5",
|
||||||
|
style: { "width": "900px", "height": "600px" },
|
||||||
|
onOnTel: $options.handleTelEvent,
|
||||||
|
onOnSnapShot: $options.handleSnapShotEvent,
|
||||||
|
onOnRecord: $options.handleRecordEvent,
|
||||||
|
onOnTalkStatus: $options.handleTalkEvent
|
||||||
|
}, null, 8, ["onOnTel", "onOnSnapShot", "onOnRecord", "onOnTalkStatus"])
|
||||||
|
],
|
||||||
|
4
|
||||||
|
/* STYLE */
|
||||||
|
)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
var fullcamera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/hldy_app/pages/fullcamera.nvue"]]);
|
||||||
|
|
||||||
|
// <stdin>
|
||||||
|
var webview = plus.webview.currentWebview();
|
||||||
|
if (webview) {
|
||||||
|
const __pageId = parseInt(webview.id);
|
||||||
|
const __pagePath = "pages/fullcamera";
|
||||||
|
let __pageQuery = {};
|
||||||
|
try {
|
||||||
|
__pageQuery = JSON.parse(webview.__query__);
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
fullcamera.mpType = "page";
|
||||||
|
const app = Vue.createPageApp(fullcamera, { $store: getApp({ allowDefault: true }).$store, __pageId, __pagePath, __pageQuery });
|
||||||
|
app.provide("__globalStyles", Vue.useCssStyles([...__uniConfig.styles, ...fullcamera.styles || []]));
|
||||||
|
app.mount("#root");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
@ -127,52 +127,11 @@
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
.view .view-left[data-v-d96776e5] {
|
|
||||||
height: 100%;
|
|
||||||
width: 23%;
|
|
||||||
}
|
|
||||||
.view .view-left .title-father[data-v-d96776e5] {
|
|
||||||
padding-top: 3.125rem;
|
|
||||||
padding-bottom: 1.5625rem;
|
|
||||||
padding-left: 1.875rem;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
.view .view-left .title-father .title-img[data-v-d96776e5] {
|
|
||||||
width: 1.71875rem;
|
|
||||||
height: 1.71875rem;
|
|
||||||
margin-right: 0.625rem;
|
|
||||||
}
|
|
||||||
.view .view-left .title-father .title-font[data-v-d96776e5] {
|
|
||||||
font-size: 1rem;
|
|
||||||
font-weight: 800;
|
|
||||||
}
|
|
||||||
.view .view-left .menus-father[data-v-d96776e5] {
|
|
||||||
width: 100%;
|
|
||||||
height: 28.125rem;
|
|
||||||
}
|
|
||||||
.view .view-left .menus-father .menu[data-v-d96776e5] {
|
|
||||||
margin: 1.40625rem 0;
|
|
||||||
margin-left: 0.9375rem;
|
|
||||||
height: 3.4375rem;
|
|
||||||
width: 12.5rem;
|
|
||||||
border-radius: 1.875rem;
|
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.view .view-left .menus-father .menu .menu-img[data-v-d96776e5] {
|
|
||||||
width: 2.03125rem;
|
|
||||||
height: 2.03125rem;
|
|
||||||
margin-left: 0.78125rem;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
border-radius: 50%;
|
|
||||||
}
|
|
||||||
.view .view-right[data-v-d96776e5] {
|
.view .view-right[data-v-d96776e5] {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 90%;
|
width: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
padding: 1.875rem;
|
||||||
}
|
}
|
||||||
.view .view-right .scroll-vi[data-v-d96776e5] {
|
.view .view-right .scroll-vi[data-v-d96776e5] {
|
||||||
height: 3.125rem;
|
height: 3.125rem;
|
||||||
|
|
@ -203,16 +162,11 @@
|
||||||
margin-top: 0.5625rem;
|
margin-top: 0.5625rem;
|
||||||
font-size: 0.78125rem;
|
font-size: 0.78125rem;
|
||||||
}
|
}
|
||||||
.new-weight[data-v-d96776e5] {
|
|
||||||
margin: 0 0.9375rem;
|
|
||||||
margin-top: 1.25rem;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
.big-bgc[data-v-d96776e5] {
|
.big-bgc[data-v-d96776e5] {
|
||||||
margin-left: -0.3125rem;
|
margin-left: -0.46875rem;
|
||||||
margin-top: 0.9375rem;
|
margin-top: 0.625rem;
|
||||||
width: 42.1875rem;
|
width: 56.25rem;
|
||||||
height: 32.5rem;
|
height: 37.5rem;
|
||||||
border-radius: 1.71875rem;
|
border-radius: 1.71875rem;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -232,7 +186,7 @@
|
||||||
.right-right[data-v-d96776e5] {
|
.right-right[data-v-d96776e5] {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: -0.625rem;
|
right: -0.625rem;
|
||||||
top: 6.5625rem;
|
top: 2.5rem;
|
||||||
height: calc(100% - 7.8125rem);
|
height: calc(100% - 7.8125rem);
|
||||||
width: 17.8125rem;
|
width: 17.8125rem;
|
||||||
}
|
}
|
||||||
|
|
@ -265,34 +219,11 @@
|
||||||
.right-right .red-kuang .font-small[data-v-d96776e5] {
|
.right-right .red-kuang .font-small[data-v-d96776e5] {
|
||||||
font-size: 0.6875rem;
|
font-size: 0.6875rem;
|
||||||
}
|
}
|
||||||
.states-father[data-v-d96776e5] {
|
|
||||||
display: flex;
|
|
||||||
margin-top: 0.625rem;
|
|
||||||
margin-left: 2.8125rem;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.states-father .states[data-v-d96776e5] {
|
|
||||||
width: 4.21875rem;
|
|
||||||
margin-right: 0.46875rem;
|
|
||||||
height: 1.875rem;
|
|
||||||
border-radius: 1.875rem;
|
|
||||||
background-color: rgba(226, 227, 231, 0.5);
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.states-father .phone-number[data-v-d96776e5] {
|
|
||||||
width: 100%;
|
|
||||||
height: 2.5rem;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.bottom-view[data-v-d96776e5] {
|
.bottom-view[data-v-d96776e5] {
|
||||||
margin-left: 2.8125rem;
|
margin-left: 2.8125rem;
|
||||||
margin-top: 0.625rem;
|
margin-top: 0.625rem;
|
||||||
width: 13.75rem;
|
width: 13.75rem;
|
||||||
height: 21.5625rem;
|
height: 25.625rem;
|
||||||
border-radius: 1.5625rem;
|
border-radius: 1.5625rem;
|
||||||
background-color: rgba(226, 227, 231, 0.5);
|
background-color: rgba(226, 227, 231, 0.5);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -319,169 +250,11 @@
|
||||||
border-radius: 1.09375rem;
|
border-radius: 1.09375rem;
|
||||||
margin-bottom: 0.15625rem;
|
margin-bottom: 0.15625rem;
|
||||||
}
|
}
|
||||||
.big-view[data-v-d96776e5] {
|
|
||||||
margin-left: 2.8125rem;
|
|
||||||
margin-top: 0.625rem;
|
|
||||||
width: 13.75rem;
|
|
||||||
height: 10.625rem;
|
|
||||||
border-radius: 1.5625rem;
|
|
||||||
background-color: rgba(226, 227, 231, 0.5);
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.big-view .font-weight[data-v-d96776e5] {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
margin-top: 1.5625rem;
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
.big-view .pao[data-v-d96776e5] {
|
|
||||||
position: absolute;
|
|
||||||
right: 1.25rem;
|
|
||||||
top: 0.625rem;
|
|
||||||
width: 2.65625rem;
|
|
||||||
height: 1.25rem;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.small-button[data-v-d96776e5] {
|
|
||||||
margin-top: 0.3125rem;
|
|
||||||
height: 2.1875rem;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
.small-button .gray-ball[data-v-d96776e5] {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
background-color: #F8F9FA;
|
|
||||||
width: 1.875rem;
|
|
||||||
height: 1.875rem;
|
|
||||||
border-radius: 50%;
|
|
||||||
margin: 0 0.3125rem;
|
|
||||||
}
|
|
||||||
.small-button .gray-ball .laba-img[data-v-d96776e5] {
|
|
||||||
width: 1.09375rem;
|
|
||||||
height: 1.09375rem;
|
|
||||||
}
|
|
||||||
.right-bottom[data-v-d96776e5] {
|
|
||||||
margin-left: 1.5625rem;
|
|
||||||
margin-top: 0.9375rem;
|
|
||||||
width: 17.1875rem;
|
|
||||||
height: 7.5rem;
|
|
||||||
border-radius: 1.5625rem;
|
|
||||||
background-color: rgba(226, 227, 231, 0.5);
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.right-bottom .bottom-img[data-v-d96776e5] {
|
|
||||||
width: 1.875rem;
|
|
||||||
height: 1.875rem;
|
|
||||||
margin-bottom: 0.9375rem;
|
|
||||||
}
|
|
||||||
.right-bottom .people-card[data-v-d96776e5] {
|
|
||||||
width: 7.65625rem;
|
|
||||||
height: 3.125rem;
|
|
||||||
border-radius: 0.78125rem;
|
|
||||||
background-color: rgba(248, 249, 250, 0.5);
|
|
||||||
margin-left: 0.625rem;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.right-father[data-v-d96776e5] {
|
|
||||||
width: 15.625rem;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.warning[data-v-d96776e5] {
|
|
||||||
animation: glowFlash-d96776e5 1.2s infinite ease-in-out;
|
|
||||||
border: 0.03125rem solid #ff5757;
|
|
||||||
background-color: rgba(239, 240, 244, 0.5);
|
|
||||||
}
|
|
||||||
.zoom[data-v-d96776e5] {
|
|
||||||
transform: scale(1.2);
|
|
||||||
transform-origin: bottom left;
|
|
||||||
transition: transform 1s ease;
|
|
||||||
}
|
|
||||||
.juzhong[data-v-d96776e5] {
|
|
||||||
position: absolute;
|
|
||||||
top: 0%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
}
|
|
||||||
.zhezhao-left[data-v-d96776e5] {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0%;
|
|
||||||
height: 100%;
|
|
||||||
width: 3.75rem;
|
|
||||||
background: linear-gradient(to right, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
|
||||||
z-index: 4;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.zhezhao-right[data-v-d96776e5] {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 34%;
|
|
||||||
height: 100%;
|
|
||||||
width: 3.75rem;
|
|
||||||
background: linear-gradient(to left, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
|
||||||
z-index: 4;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.zhezhao-top[data-v-d96776e5] {
|
|
||||||
position: absolute;
|
|
||||||
top: 6.25rem;
|
|
||||||
left: 0%;
|
|
||||||
width: 14.0625rem;
|
|
||||||
height: 3.75rem;
|
|
||||||
background: linear-gradient(to bottom, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
|
||||||
z-index: 4;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.zhezhao-bottom[data-v-d96776e5] {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 11.875rem;
|
|
||||||
left: 0%;
|
|
||||||
width: 14.0625rem;
|
|
||||||
height: 3.75rem;
|
|
||||||
background: linear-gradient(to top, #eff0f4 0%, /* #eff0f4 全不透明 */ rgba(239, 240, 244, 0) 100% /* #eff0f4 完全透明 */);
|
|
||||||
z-index: 4;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.bgc-image[data-v-d96776e5] {
|
|
||||||
width: 15.625rem;
|
|
||||||
height: 6.25rem;
|
|
||||||
position: absolute;
|
|
||||||
top: -1.5625rem;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
.font-phone[data-v-d96776e5] {
|
|
||||||
font-size: 1.09375rem;
|
|
||||||
font-weight: 600;
|
|
||||||
margin-left: 0.9375rem;
|
|
||||||
}
|
|
||||||
.phone-ball[data-v-d96776e5] {
|
|
||||||
width: 1.5625rem;
|
|
||||||
height: 1.5625rem;
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
right: 4.0625rem;
|
|
||||||
}
|
|
||||||
.target[data-v-d96776e5] {
|
.target[data-v-d96776e5] {
|
||||||
--color: #99C9FD;
|
--color: #99C9FD;
|
||||||
--thick: 2px;
|
--thick: 2px;
|
||||||
--radius: 1.875rem;
|
--radius: 1.875rem;
|
||||||
--outline-offset: 0;
|
--outline-offset: 0;
|
||||||
/* 外扩多少 */
|
|
||||||
/* 内层虚线(你现在用的) */
|
/* 内层虚线(你现在用的) */
|
||||||
border-radius: var(--radius);
|
border-radius: var(--radius);
|
||||||
background-color: #ddf0ff;
|
background-color: #ddf0ff;
|
||||||
|
|
@ -494,23 +267,6 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
.targetbutton[data-v-d96776e5] {
|
|
||||||
--color: #99C9FD;
|
|
||||||
--thick: 2px;
|
|
||||||
--radius: 1.875rem;
|
|
||||||
--outline-offset: 0.3125rem;
|
|
||||||
/* 外扩多少 */
|
|
||||||
/* 内层虚线(你现在用的) */
|
|
||||||
border-radius: var(--radius);
|
|
||||||
/* 内部背景 */
|
|
||||||
animation: scalePulse 360ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
||||||
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
|
||||||
outline: var(--thick) dashed var(--color);
|
|
||||||
outline-offset: var(--outline-offset);
|
|
||||||
/* 保证文本 / 子元素在最上层 */
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
.picture[data-v-d96776e5] {
|
.picture[data-v-d96776e5] {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-top: 1.25rem;
|
margin-top: 1.25rem;
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 490 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |