改了护理单元-设备页面
|
|
@ -20,7 +20,7 @@
|
|||
<text>{{update_tips}}</text>
|
||||
</scroll-view>
|
||||
<view class="zy-progress radius striped active" v-if="update_flag">
|
||||
<view :class="'bg-'+theme" :style="'width: '+update_process+'%;'">
|
||||
<view :class="'bg-'+theme" style="background-color: royalblue;" :style="'width: '+update_process+'%;'">
|
||||
{{update_process}}
|
||||
</view>
|
||||
</view>
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
"name" : "护理单元",
|
||||
"appid" : "__UNI__FB2D473",
|
||||
"description" : "护理单元",
|
||||
"versionName" : "1.7.1",
|
||||
"versionCode" : 171,
|
||||
"versionName" : "1.7.2",
|
||||
"versionCode" : 172,
|
||||
"transformPx" : false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus" : {
|
||||
|
|
|
|||
85
pages.json
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "pages/login/login",
|
||||
"style": {
|
||||
"navigationStyle": "custom"
|
||||
|
|
@ -28,18 +27,17 @@
|
|||
"navigationStyle": "custom",
|
||||
"app-plus": {
|
||||
"subNVues": [{
|
||||
"id": "monitorSub",
|
||||
"path": "pages/camera",
|
||||
"style": {
|
||||
"position": "absolute",
|
||||
"left": "230px",
|
||||
"top": "105px",
|
||||
"width": "680px",
|
||||
"height": "520px",
|
||||
"background": "transparent"
|
||||
}
|
||||
"id": "monitorSub",
|
||||
"path": "pages/camera",
|
||||
"style": {
|
||||
"position": "absolute",
|
||||
"left": "230px",
|
||||
"top": "105px",
|
||||
"width": "680px",
|
||||
"height": "520px",
|
||||
"background": "transparent"
|
||||
}
|
||||
]
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -48,20 +46,18 @@
|
|||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"app-plus": {
|
||||
"subNVues": [
|
||||
{
|
||||
"id": "monitorSub",
|
||||
"path": "pages/fullcamera",
|
||||
"style": {
|
||||
"position": "absolute",
|
||||
"left": "20px",
|
||||
"top": "40px",
|
||||
"width": "900px",
|
||||
"height": "600px",
|
||||
"background": "transparent"
|
||||
}
|
||||
"subNVues": [{
|
||||
"id": "monitorSub",
|
||||
"path": "pages/fullcamera",
|
||||
"style": {
|
||||
"position": "absolute",
|
||||
"left": "20px",
|
||||
"top": "40px",
|
||||
"width": "900px",
|
||||
"height": "600px",
|
||||
"background": "transparent"
|
||||
}
|
||||
]
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -100,11 +96,25 @@
|
|||
{
|
||||
"path": "pages/NursingNew/index",
|
||||
"style": {
|
||||
"navigationStyle": "custom"
|
||||
"navigationStyle": "custom",
|
||||
"app-plus": {
|
||||
"subNVues": [{
|
||||
"id": "monitorSub",
|
||||
"path": "pages/smallcarmera",
|
||||
"style": {
|
||||
"position": "absolute",
|
||||
"left": "230px",
|
||||
"top": "150px",
|
||||
"width": "680px",
|
||||
"height": "520px",
|
||||
"background": "transparent"
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
// 仓储
|
||||
{
|
||||
"path": "pages/Warehousing/index",
|
||||
|
|
@ -150,16 +160,19 @@
|
|||
"style": {
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
{
|
||||
"path" : "pages/Warehouse/procurement"
|
||||
"path": "pages/Warehouse/procurement",
|
||||
"style": {
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
|
||||
},
|
||||
{
|
||||
"path" : "pages/Warehouse/procurecart",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : ""
|
||||
"path": "pages/Warehouse/procurecart",
|
||||
"style": {
|
||||
"navigationBarTitleText": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -167,9 +180,9 @@
|
|||
"style": {
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// {
|
||||
// "path": "pages/somethingmove/index",
|
||||
// "style": {
|
||||
|
|
|
|||
|
|
@ -78,4 +78,40 @@ export const waterwaterRead = (cid,address) => {
|
|||
url: `${uni.getStorageSync('serverUrl')}/api/iot/water/waterRead?cid=${cid}&address=${address}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// ===============================================
|
||||
// 智能水表设备信息清零
|
||||
// export const waterwaterReset = (cid,address) => {
|
||||
// return request({
|
||||
// url: `${uni.getStorageSync('serverUrl')}/api/iot/water/waterReset?cid=${cid}&address=${address}`,
|
||||
// method: 'get'
|
||||
// })
|
||||
// }
|
||||
|
||||
// 智能水表设备拉闸合闸
|
||||
// export const waterwaterControl = (cid,address,type) => {
|
||||
// return request({
|
||||
// url: `${uni.getStorageSync('serverUrl')}/api/iot/water/waterControl?cid=${cid}&address=${address}&type=${type}`,
|
||||
// method: 'get'
|
||||
// })
|
||||
// }
|
||||
|
||||
// 温湿度计保修
|
||||
export const humidDevicebaoxiu = (id) => {
|
||||
return request({
|
||||
url: `${uni.getStorageSync('serverUrl')}/api/iot/humidDevice/baoxiu`,
|
||||
method: 'post',
|
||||
data: {
|
||||
id:id
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// 温湿度计抄表
|
||||
export const updateDeviceRealTime = (sn) => {
|
||||
return request({
|
||||
url: `${uni.getStorageSync('serverUrl')}/api/iot/humidDevice/updateDeviceRealTime?sn=${sn}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
|
@ -259,9 +259,7 @@
|
|||
}
|
||||
// 变更菜单
|
||||
const changeMenu = (index : number) => {
|
||||
// if (menuIndex.value === index) {
|
||||
// return
|
||||
// }
|
||||
uni.$emit('smallmonitor:isshow', false);
|
||||
isMain.value = true;
|
||||
targetIndex.value = index
|
||||
menuIndex.value = index;
|
||||
|
|
@ -459,9 +457,11 @@
|
|||
}
|
||||
// 生命周期钩子
|
||||
onShow(() => {
|
||||
|
||||
//首次加载和跳转回来需要重新做个动画
|
||||
setTimeout(() => {
|
||||
changeMenu(menuIndex.value)
|
||||
|
||||
}, 50)
|
||||
|
||||
menuIndexshow.value = false
|
||||
|
|
@ -534,6 +534,7 @@
|
|||
break
|
||||
|
||||
}
|
||||
uni.$emit('smallmonitor:isshow', false);
|
||||
} else {
|
||||
propsmove.value = -1
|
||||
nextTick(() => propsmove.value = where)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,627 @@
|
|||
<template>
|
||||
<div class="center-column" :style="{ height: isshow ? '675px' : '0px' }">
|
||||
<!-- 视频播放组件 -->
|
||||
<MonitorView ref="monitor" init="5" style="width: 675px;height: 475px;" @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: false,
|
||||
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('smallmonitor:changeinit', (number) => {
|
||||
this.$refs.monitor.initAutoPlay(number)
|
||||
uni.setStorageSync('saveinit', number);
|
||||
console.log("saveinit", number)
|
||||
});
|
||||
uni.$on('smallmonitor:isshow', (bool) => {
|
||||
this.isshow = bool;
|
||||
})
|
||||
uni.$on('smallmonitor:killView', this.killView);
|
||||
// 在页面生命周期注册 uni.$on 事件,暴露给其他页面调用
|
||||
uni.$on('smallmonitor:doSnapshot', this.doSnapshot);
|
||||
uni.$on('smallmonitor:startRecord', this.doStartRecord);
|
||||
uni.$on('smallmonitor:stopRecord', this.doStopRecord);
|
||||
uni.$on('smallmonitor:openTalk', this.doOpenTalk);
|
||||
uni.$on('smallmonitor:stopTalk', this.doStopTalk);
|
||||
|
||||
uni.$on('smallmonitor:switchDisplay', (payload) => this.switchDisplay(payload));
|
||||
uni.$on('smallmonitor:startAlarm', this.startAlarm);
|
||||
uni.$on('smallmonitor:stopAlarm', this.stopAlarm);
|
||||
uni.$on('smallmonitor:flipImage', (payload) => this.flipImage(payload));
|
||||
uni.$on('smallmonitor:resumeOrPause', this.resumeOrPause);
|
||||
uni.$on('smallmonitor:changeQuality', this.changeQuality);
|
||||
uni.$on('smallmonitor:toggleVolume', this.toggleVolume);
|
||||
uni.$on('smallmonitor:test', this.test);
|
||||
},
|
||||
onUnload() {
|
||||
console.log('fullcamera 卸载,清理事件');
|
||||
|
||||
// 确保 globalEvent 有才清除
|
||||
if (this.globalEvent && this.globalEvent.removeEventListener) {
|
||||
this.globalEvent.removeEventListener("myEvent");
|
||||
}
|
||||
|
||||
const events = [
|
||||
'smallmonitor:killView',
|
||||
'smallmonitor:changeinit',
|
||||
'smallmonitor:isshow',
|
||||
'smallmonitor:doSnapshot',
|
||||
'smallmonitor:startRecord',
|
||||
'smallmonitor:stopRecord',
|
||||
'smallmonitor:openTalk',
|
||||
'smallmonitor:stopTalk',
|
||||
'smallmonitor:switchDisplay',
|
||||
'smallmonitor:startAlarm',
|
||||
'smallmonitor:stopAlarm',
|
||||
'smallmonitor:flipImage',
|
||||
'smallmonitor:resumeOrPause',
|
||||
'smallmonitor:changeQuality',
|
||||
'smallmonitor:toggleVolume',
|
||||
'smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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('smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor:response:${rid}`, {
|
||||
ok: !!payload.snapShotResult,
|
||||
payload
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 无论如何,都发一个通用完成事件,方便只监听通用事件的页面
|
||||
uni.$emit('smallmonitor: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(`smallmonitor: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(`smallmonitor: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(`smallmonitor:response:${rid}`, {
|
||||
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||
payload
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 通用事件
|
||||
uni.$emit('smallmonitor: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: 680px;
|
||||
height: 520px; */
|
||||
width: 675px;
|
||||
height: 475px;
|
||||
border-radius: 30px;
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
</style>
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
<view class="bottom-button"
|
||||
:style="{backgroundColor:cameratarget.includes(index)?`#DDE9F0`:`` }">
|
||||
<image style="width: 70%;height: 70%"
|
||||
:src="`/static/index/camera/${index}${cameratarget.includes(index)?1:0}.png`" />
|
||||
:src="`/static/index/camera/${index==9?5:(index>4?index+1:index)}${cameratarget.includes(index)?1:0}.png`" />
|
||||
</view>
|
||||
<view style="font-size: 25rpx;" :style="{color:cameratarget.includes(index)?`#0E86EA`:`` }">
|
||||
{{item}}
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<joysticknew @movecard="movecamera" v-show="!cameratarget.includes(5)" />
|
||||
<joysticknew @movecard="movecamera" />
|
||||
</view>
|
||||
|
||||
</template>
|
||||
|
|
@ -165,11 +165,11 @@
|
|||
"对讲",
|
||||
"静音",
|
||||
"预警",
|
||||
"返回",
|
||||
"图片",
|
||||
"视频",
|
||||
"清晰度",
|
||||
"翻转",
|
||||
"返回",
|
||||
]
|
||||
const cameraSmall = [
|
||||
"截图",
|
||||
|
|
@ -340,10 +340,13 @@
|
|||
cameratarget.value.push(index)
|
||||
}
|
||||
break
|
||||
|
||||
case 5:
|
||||
|
||||
jumpopen.value = false;
|
||||
uni.navigateBack()
|
||||
if (cameratarget.value.includes(index)) {
|
||||
removeIndexOnce(index)
|
||||
} else {
|
||||
cameratarget.value.push(index)
|
||||
}
|
||||
break
|
||||
case 6:
|
||||
if (cameratarget.value.includes(index)) {
|
||||
|
|
@ -354,22 +357,20 @@
|
|||
break
|
||||
case 7:
|
||||
if (cameratarget.value.includes(index)) {
|
||||
uni.$emit('fullmonitor:changeQuality');
|
||||
removeIndexOnce(index)
|
||||
} else {
|
||||
uni.$emit('fullmonitor:changeQuality');
|
||||
cameratarget.value.push(index)
|
||||
}
|
||||
break
|
||||
case 8:
|
||||
if (cameratarget.value.includes(index)) {
|
||||
uni.$emit('fullmonitor:changeQuality');
|
||||
removeIndexOnce(index)
|
||||
} else {
|
||||
uni.$emit('fullmonitor:changeQuality');
|
||||
cameratarget.value.push(index)
|
||||
}
|
||||
jumpopen.value = true
|
||||
break
|
||||
case 9:
|
||||
jumpopen.value = true
|
||||
|
||||
jumpopen.value = false;
|
||||
uni.navigateBack()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 解决margin重叠问题 -->
|
||||
<view style="height: 45rpx;"></view>
|
||||
</scroll-view>
|
||||
|
||||
|
|
@ -179,18 +178,7 @@
|
|||
<image style="width: 100rpx;height: 100rpx;"
|
||||
:src="`https://www.focusnu.com/nursingunit101/sys/common/static/${serveritem.immediateFile}`" />
|
||||
</view>
|
||||
<!-- <view style="height: 150rpx;">
|
||||
|
||||
</view> -->
|
||||
<!-- <view class="juzhong" style="top: -120rpx;">
|
||||
<donghua :width="`600rpx`" :height="`500rpx`" :links="blueArray" :playing="photoplay"
|
||||
:loop="true" :interval="120" />
|
||||
</view>
|
||||
<view class="juzhong" style="z-index: 2;margin-top: 50rpx;">
|
||||
<donghua :width="`300rpx`" :height="`200rpx`" :links="bluesmallArray" :playing="photoplay"
|
||||
:loop="true" :interval="120" />
|
||||
</view> -->
|
||||
<!-- <image style="width: 300rpx;height: 200rpx;" src="/static/index/newindex/wendu/2.png" /> -->
|
||||
<view style="font-size: 25rpx;padding-top: 150rpx;">
|
||||
{{ serveritem.typeName }}
|
||||
</view>
|
||||
|
|
@ -397,7 +385,7 @@
|
|||
if (item?.elderServerEntityList) {
|
||||
//给屏幕右侧数据用的
|
||||
const nearest = findClosestItem(item?.elderServerEntityList, time.value)
|
||||
// console.log("zzzzaaa", item)
|
||||
console.log("zzzzaaa", item)
|
||||
if (!nearest) {
|
||||
serveritem.value = {
|
||||
startTime: "",
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 41 KiB |
|
|
@ -7,8 +7,8 @@
|
|||
"id": "__UNI__FB2D473",
|
||||
"name": "护理单元",
|
||||
"version": {
|
||||
"name": "1.7.0",
|
||||
"code": 170
|
||||
"name": "1.7.2",
|
||||
"code": 172
|
||||
},
|
||||
"description": "护理单元",
|
||||
"developer": {
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.1 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.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 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.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: 2.1 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.1 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.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 57 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl0.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl1.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl2.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl3.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl4.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl5.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl6.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl7.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
unpackage/dist/build/app-plus/static/index/warehouse/procurement/ctrl/Ctrl8.png
vendored
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
|
|
@ -4,5 +4,8 @@ Promise.resolve("./pages/camera.js").then((res) => {
|
|||
Promise.resolve("./pages/fullcamera.js").then((res) => {
|
||||
res();
|
||||
});
|
||||
Promise.resolve("./pages/smallcarmera.js").then((res) => {
|
||||
res();
|
||||
});
|
||||
Promise.resolve("./app.css.js").then(() => {
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,585 @@
|
|||
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": 675, "height": 475, "borderRadius": 30, "overflow": "hidden" } } };
|
||||
const _sfc_main = {
|
||||
data() {
|
||||
return {
|
||||
phoneNumber: "1234567890",
|
||||
initnumber: 5,
|
||||
isAlarming: false,
|
||||
isRecording: false,
|
||||
// 录屏状态
|
||||
isTalking: false,
|
||||
// 对讲状态
|
||||
_pendingRequests: {
|
||||
snapshot: [],
|
||||
record: [],
|
||||
talk: []
|
||||
},
|
||||
suo: true,
|
||||
isshow: false,
|
||||
globalEvent: ""
|
||||
};
|
||||
},
|
||||
onLoad() {
|
||||
formatAppLog("log", "at pages/smallcarmera.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("smallmonitor:changeinit", (number) => {
|
||||
this.$refs.monitor.initAutoPlay(number);
|
||||
uni.setStorageSync("saveinit", number);
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:63", "saveinit", number);
|
||||
});
|
||||
uni.$on("smallmonitor:isshow", (bool) => {
|
||||
this.isshow = bool;
|
||||
});
|
||||
uni.$on("smallmonitor:killView", this.killView);
|
||||
uni.$on("smallmonitor:doSnapshot", this.doSnapshot);
|
||||
uni.$on("smallmonitor:startRecord", this.doStartRecord);
|
||||
uni.$on("smallmonitor:stopRecord", this.doStopRecord);
|
||||
uni.$on("smallmonitor:openTalk", this.doOpenTalk);
|
||||
uni.$on("smallmonitor:stopTalk", this.doStopTalk);
|
||||
uni.$on("smallmonitor:switchDisplay", (payload) => this.switchDisplay(payload));
|
||||
uni.$on("smallmonitor:startAlarm", this.startAlarm);
|
||||
uni.$on("smallmonitor:stopAlarm", this.stopAlarm);
|
||||
uni.$on("smallmonitor:flipImage", (payload) => this.flipImage(payload));
|
||||
uni.$on("smallmonitor:resumeOrPause", this.resumeOrPause);
|
||||
uni.$on("smallmonitor:changeQuality", this.changeQuality);
|
||||
uni.$on("smallmonitor:toggleVolume", this.toggleVolume);
|
||||
uni.$on("smallmonitor:test", this.test);
|
||||
},
|
||||
onUnload() {
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:86", "fullcamera 卸载,清理事件");
|
||||
if (this.globalEvent && this.globalEvent.removeEventListener) {
|
||||
this.globalEvent.removeEventListener("myEvent");
|
||||
}
|
||||
const events = [
|
||||
"smallmonitor:killView",
|
||||
"smallmonitor:changeinit",
|
||||
"smallmonitor:isshow",
|
||||
"smallmonitor:doSnapshot",
|
||||
"smallmonitor:startRecord",
|
||||
"smallmonitor:stopRecord",
|
||||
"smallmonitor:openTalk",
|
||||
"smallmonitor:stopTalk",
|
||||
"smallmonitor:switchDisplay",
|
||||
"smallmonitor:startAlarm",
|
||||
"smallmonitor:stopAlarm",
|
||||
"smallmonitor:flipImage",
|
||||
"smallmonitor:resumeOrPause",
|
||||
"smallmonitor:changeQuality",
|
||||
"smallmonitor:toggleVolume",
|
||||
"smallmonitor:test"
|
||||
];
|
||||
events.forEach((ev) => uni.$off(ev));
|
||||
},
|
||||
methods: {
|
||||
/* ------------------ 原有功能 ------------------ */
|
||||
handleTelEvent(event) {
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:117", "Tel event detail:", event.detail);
|
||||
},
|
||||
killView() {
|
||||
this.$refs.monitor.killView && this.$refs.monitor.killView();
|
||||
},
|
||||
switchDisplay(mode) {
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:125", "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/smallcarmera.nvue:132", "startAlarm callback:", res);
|
||||
});
|
||||
},
|
||||
stopAlarm() {
|
||||
this.isAlarming = false;
|
||||
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:138", "stopAlarm callback:", res);
|
||||
});
|
||||
},
|
||||
flipImage(type) {
|
||||
this.$refs.monitor.changeImageSwitch(type, (res) => {
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:144", "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(`smallmonitor: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/smallcarmera.nvue:190", "snapShot callback:", res);
|
||||
this._handleSnapshotResultFromNative(res, payload.reqId);
|
||||
});
|
||||
uni.showToast({
|
||||
title: "正在截屏...",
|
||||
icon: "none",
|
||||
duration: 800
|
||||
});
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/smallcarmera.nvue:199", "snapShot 调用失败", err);
|
||||
uni.showToast({
|
||||
title: "snapShot 调用失败",
|
||||
icon: "none"
|
||||
});
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor: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(`smallmonitor:response:${payload.reqId}`, {
|
||||
ok: false,
|
||||
error: "startRecord_not_supported"
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
try {
|
||||
this.$refs.monitor.startRecord((res) => {
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:232", "startRecord callback:", res);
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor:response:${payload.reqId}`, {
|
||||
ok: true,
|
||||
res
|
||||
});
|
||||
}
|
||||
});
|
||||
this.isRecording = true;
|
||||
uni.showToast({
|
||||
title: "录屏已开始",
|
||||
icon: "none"
|
||||
});
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/smallcarmera.nvue:247", "startRecord 调用失败", err);
|
||||
uni.showToast({
|
||||
title: "startRecord 调用失败",
|
||||
icon: "none"
|
||||
});
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor: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(`smallmonitor: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/smallcarmera.nvue:286", "stopRecord callback:", res);
|
||||
this._handleRecordResultFromNative(res, payload.reqId);
|
||||
});
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/smallcarmera.nvue:291", "stopRecord 调用失败", err);
|
||||
uni.showToast({
|
||||
title: "stopRecord 调用失败",
|
||||
icon: "none"
|
||||
});
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor: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(`smallmonitor: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/smallcarmera.nvue:328", "openTalk callback:", res);
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor:response:${payload.reqId}`, {
|
||||
ok: true,
|
||||
res
|
||||
});
|
||||
}
|
||||
});
|
||||
this.isTalking = true;
|
||||
uni.showToast({
|
||||
title: "尝试建立对讲连接...",
|
||||
icon: "none"
|
||||
});
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/smallcarmera.nvue:343", "openTalk 调用失败", err);
|
||||
uni.showToast({
|
||||
title: "openTalk 调用失败",
|
||||
icon: "none"
|
||||
});
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor: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(`smallmonitor:response:${payload.reqId}`, {
|
||||
ok: false,
|
||||
error: "stopTalk_not_supported"
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
try {
|
||||
this.$refs.monitor.stopTalk((res) => {
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:376", "stopTalk callback:", res);
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor:response:${payload.reqId}`, {
|
||||
ok: true,
|
||||
res
|
||||
});
|
||||
}
|
||||
});
|
||||
this.isTalking = false;
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/smallcarmera.nvue:386", "stopTalk 调用失败", err);
|
||||
uni.showToast({
|
||||
title: "stopTalk 调用失败",
|
||||
icon: "none"
|
||||
});
|
||||
if (payload.reqId) {
|
||||
uni.$emit(`smallmonitor: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/smallcarmera.nvue:406", "onSnapShot event:", payload);
|
||||
this._handleSnapshotResultFromNative(payload);
|
||||
},
|
||||
// 处理来自模板 @onRecord 的事件(event.detail)
|
||||
handleRecordEvent(event) {
|
||||
const payload = event && event.detail ? event.detail : event;
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:414", "onRecord event:", payload);
|
||||
this._handleRecordResultFromNative(payload);
|
||||
},
|
||||
// 处理来自模板 @onTalkStatus 的事件
|
||||
handleTalkEvent(event) {
|
||||
const payload = event && event.detail ? event.detail : event;
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:421", "onTalkStatus event:", payload);
|
||||
const status = payload && payload.talkStatus;
|
||||
const tips = payload && payload.tips;
|
||||
uni.$emit("smallmonitor:talk:status", payload);
|
||||
if (this._pendingRequests.talk && this._pendingRequests.talk.length) {
|
||||
while (this._pendingRequests.talk.length) {
|
||||
const reqId = this._pendingRequests.talk.shift();
|
||||
uni.$emit(`smallmonitor: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(`smallmonitor:response:${reqIdFromCallback}`, {
|
||||
ok: false,
|
||||
error: "no_data"
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
let payload = res;
|
||||
if (res.detail)
|
||||
payload = res.detail;
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:498", "snapshot payload normalized:", payload);
|
||||
if (reqIdFromCallback) {
|
||||
uni.$emit(`smallmonitor: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(`smallmonitor:response:${rid}`, {
|
||||
ok: !!payload.snapShotResult,
|
||||
payload
|
||||
});
|
||||
}
|
||||
}
|
||||
uni.$emit("smallmonitor: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/smallcarmera.nvue:541", "snapshot failed reason:", err, payload);
|
||||
}
|
||||
},
|
||||
_handleRecordResultFromNative(res, reqIdFromCallback = null) {
|
||||
if (!res) {
|
||||
uni.showToast({
|
||||
title: "录屏没有返回数据",
|
||||
icon: "none"
|
||||
});
|
||||
this.isRecording = false;
|
||||
if (reqIdFromCallback) {
|
||||
uni.$emit(`smallmonitor:response:${reqIdFromCallback}`, {
|
||||
ok: false,
|
||||
error: "no_data"
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
let payload = res;
|
||||
if (res.detail)
|
||||
payload = res.detail;
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:563", "record payload normalized:", payload);
|
||||
if (reqIdFromCallback) {
|
||||
uni.$emit(`smallmonitor: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(`smallmonitor:response:${rid}`, {
|
||||
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||
payload
|
||||
});
|
||||
}
|
||||
}
|
||||
uni.$emit("smallmonitor:record:done", payload);
|
||||
if (payload.recordUrl) {
|
||||
uni.showToast({
|
||||
title: "录屏完成",
|
||||
icon: "success",
|
||||
duration: 1400
|
||||
});
|
||||
this.isRecording = false;
|
||||
formatAppLog("log", "at pages/smallcarmera.nvue:594", "录屏地址:", payload.recordUrl);
|
||||
} else if (payload.recordFailedReason) {
|
||||
uni.showToast({
|
||||
title: "录屏失败: " + payload.recordFailedReason,
|
||||
icon: "none",
|
||||
duration: 2e3
|
||||
});
|
||||
this.isRecording = false;
|
||||
formatAppLog("warn", "at pages/smallcarmera.nvue:602", "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 ? "675px" : "0px" })
|
||||
},
|
||||
[
|
||||
createCommentVNode(" 视频播放组件 "),
|
||||
createVNode(_component_MonitorView, {
|
||||
ref: "monitor",
|
||||
init: "5",
|
||||
style: { "width": "675px", "height": "475px" },
|
||||
onOnTel: $options.handleTelEvent,
|
||||
onOnSnapShot: $options.handleSnapShotEvent,
|
||||
onOnRecord: $options.handleRecordEvent,
|
||||
onOnTalkStatus: $options.handleTalkEvent
|
||||
}, null, 8, ["onOnTel", "onOnSnapShot", "onOnRecord", "onOnTalkStatus"])
|
||||
],
|
||||
4
|
||||
/* STYLE */
|
||||
)
|
||||
]);
|
||||
}
|
||||
const smallcarmera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/hldy_app/pages/smallcarmera.nvue"]]);
|
||||
export {
|
||||
smallcarmera as default
|
||||
};
|
||||
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t@import \"./uni_modules/vk-uview-ui/index.scss\";\r\n\t/*每个页面公共css */\r\n\t\r\n</style>\n","import App from './App'\r\n// 引入 uView UI\r\nimport uView from './uni_modules/vk-uview-ui';\r\n\r\n\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nimport './uni.promisify.adaptor'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n\t...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport {\r\n\tcreateSSRApp\r\n} from 'vue'\r\nimport donghua from '@/component/public/donghua.vue'\r\nimport arrowkeys from '@/component/public/newgame/arrowkeys.vue'\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\r\n\t// 使用 uView UI\r\n\tapp.use(uView)\r\n\tapp.component('donghua', donghua)\r\n\tapp.component('arrowkeys', arrowkeys)\r\n\treturn {\r\n\t\tapp\r\n\t}\r\n}\r\n// #endif"],"names":["uni","createSSRApp","App","uView"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACSD,MAAM,UAAU,MAAW;AAC3B,MAAM,YAAY,MAAW;AACtB,SAAS,YAAY;AAC3B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAG5B,MAAI,IAAIC,iCAAK;AACb,MAAI,UAAU,WAAW,OAAO;AAChC,MAAI,UAAU,aAAa,SAAS;AACpC,SAAO;AAAA,IACN;AAAA,EACA;AACF;;;"}
|
||||
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t@import \"./uni_modules/vk-uview-ui/index.scss\";\r\n\t/*每个页面公共css */\r\n\t\r\n</style>\n","import App from './App'\r\n// 引入 uView UI\r\nimport uView from './uni_modules/vk-uview-ui';\r\n\r\n\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nimport './uni.promisify.adaptor'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n\t...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport {\r\n\tcreateSSRApp\r\n} from 'vue'\r\nimport donghua from '@/component/public/donghua.vue'\r\nimport arrowkeys from '@/component/public/newgame/arrowkeys.vue'\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\r\n\t// 使用 uView UI\r\n\tapp.use(uView)\r\n\tapp.component('donghua', donghua)\r\n\tapp.component('arrowkeys', arrowkeys)\r\n\treturn {\r\n\t\tapp\r\n\t}\r\n}\r\n// #endif"],"names":["uni","createSSRApp","App","uView"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACSD,MAAM,UAAU,MAAW;AAC3B,MAAM,YAAY,MAAW;AACtB,SAAS,YAAY;AAC3B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAG5B,MAAI,IAAIC,iCAAK;AACb,MAAI,UAAU,WAAW,OAAO;AAChC,MAAI,UAAU,aAAa,SAAS;AACpC,SAAO;AAAA,IACN;AAAA,EACA;AACF;;;"}
|
||||
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"exit.js","sources":["component/public/exit.vue","../Hbuilder/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovaGxkeV9hcHAvY29tcG9uZW50L3B1YmxpYy9leGl0LnZ1ZQ"],"sourcesContent":["<template>\r\n\t<!-- 通过 v-show 控制显隐,并根据 show 添加 is-active 类触发 CSS 过渡 -->\r\n\t<view :class=\"['neuro-wrapper', donghua ? 'is-active' : '']\" v-show=\"show\">\r\n\t\t<!-- 遮罩层,点击触发关闭 -->\r\n\t\t<view class=\"neuro-mask\" @click=\"handleClose\"></view>\r\n\t\t<!-- 拟态框,阻止冒泡点击 -->\r\n\t\t<view class=\"neuro-box\" @click.stop>\r\n\r\n\t\t\t<view class=\"button-father\">\r\n\t\t\t\t<view class=\"button-white\" @click=\"handleClose\">取消</view>\r\n\t\t\t\t<view class=\"button\" @click=\"go\">确定</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<view class=\"title\">退出登录</view>\r\n\t\t\t<view class=\"card-font\">\r\n\t\t\t\t确定要注销130******31账户吗\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref,\r\n\t\twatch\r\n\t} from 'vue'\r\n\r\n\t// 接收 show 属性并支持 update:show 事件\r\n\tconst props = defineProps({\r\n\t\tshow: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: true\r\n\t\t},\r\n\r\n\t});\r\n\t// 区分首次渲染与动态添加\r\n\tconst donghua = ref(false);\r\n\twatch(\r\n\t\t() => props.show,\r\n\t\t(newVal, oldVal) => {\r\n\t\t\tif (!oldVal && newVal) {\r\n\t\t\t\tdonghua.value = false\r\n\t\t\t\tsetTimeout(()=>donghua.value = true,50)\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t)\r\n\tconst emit = defineEmits([\"close\"]);\r\n\r\n\t// 关闭方法,通知父组件更新 show\r\n\tfunction handleClose() {\r\n\t\temit('close');\r\n\t}\r\n\tconst go = () => {\r\n\t\tuni.setStorageSync('token', 1);\r\n\t\t// plus.runtime.quit();\r\n\t\t\r\n\t\tuni.redirectTo({\r\n\t\t\turl: '/pages/login/login'\r\n\t\t});\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\t/* 容器默认隐藏,透明度为 0,不接受点击 */\r\n\t.neuro-wrapper {\r\n\t\tposition: fixed;\r\n\t\tinset: 0;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tz-index: 999;\r\n\t\topacity: 0;\r\n\t\tpointer-events: none;\r\n\t\ttransition: opacity 0.3s ease;\r\n\t}\r\n\r\n\t/* 显示时透明度过渡到 1,可接受点击 */\r\n\t.neuro-wrapper.is-active {\r\n\t\topacity: 1;\r\n\t\tpointer-events: auto;\r\n\t}\r\n\r\n\t/* 遮罩层,半透明黑色 */\r\n\t.neuro-mask {\r\n\t\tposition: absolute;\r\n\t\tinset: 0;\r\n\t\tbackground-color: rgba(0, 0, 0, 0.3);\r\n\t}\r\n\r\n\t/* 拟态框 固定尺寸 + 阴影样式 + 相对定位于 wrapper */\r\n\t.neuro-box {\r\n\t\tposition: relative;\r\n\t\twidth: 600rpx;\r\n\t\theight: 450rpx;\r\n\t\tborder-radius: 30rpx;\r\n\t\tbackground-color: #fff;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\t// justify-content: center;\r\n\t\talign-items: center;\r\n\t\t\r\n\t\t// background-image: url('https://www.focusnu.com/media/directive/index/whitepeople.png');\r\n\t\t// // background-size: 100% auto;\r\n\t\t// background-position: top center;\r\n\t\t// background-repeat: no-repeat;\r\n\t\tz-index: 1;\r\n\t\tpadding: 0 10%;\r\n\t}\r\n\r\n\t.button {\r\n\t\twidth: 47%;\r\n\t\t// background: linear-gradient(to left, #00C9FF, #0076FF);\r\n\t\tbackground-color: #ddf0ff;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\t// color: #fff;\r\n\t\tcolor: #007CFF;\r\n\t\tborder: 1rpx solid #007CFF;\r\n\t\tfont-size: 25rpx;\r\n\t\tborder-radius: 30rpx;\r\n\t}\r\n\r\n\t.title {\r\n\t\tmargin-top: 70rpx;\r\n\t}\r\n\r\n\t.card-font {\r\n\t\tmargin-top: 70rpx;\r\n\t\twidth: 600rpx;\r\n\t\tjustify-content: center;\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.button-white {\r\n\t\twidth: 47%;\r\n\t\tborder: 2rpx solid #c3cacd;\r\n\t\tbackground: linear-gradient(to bottom, #f3f3f5, #dee4e9);\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tfont-size: 25rpx;\r\n\t\tborder-radius: 30rpx;\r\n\t}\r\n\r\n\t.button-father {\r\n\t\tposition: absolute;\r\n\t\tbottom: 60rpx;\r\n\t\tleft: 50%;\r\n\t\ttransform: translateX(-50%);\r\n\t\twidth: 100%;\r\n\t\theight: 70rpx;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\tpadding: 0 50rpx;\r\n\t}\r\n</style>","import Component from 'D:/hldy_app/component/public/exit.vue'\nwx.createComponent(Component)"],"names":["ref","watch","uni"],"mappings":";;;;;;;;;;;;AA4BC,UAAM,QAAQ;AAQd,UAAM,UAAUA,kBAAI,KAAK;AACzBC,kBAAK;AAAA,MACJ,MAAM,MAAM;AAAA,MACZ,CAAC,QAAQ,WAAW;AACnB,YAAI,CAAC,UAAU,QAAQ;AACtB,kBAAQ,QAAQ;AAChB,qBAAW,MAAI,QAAQ,QAAQ,MAAK,EAAE;AAAA,QAEtC;AAAA,MACD;AAAA,IACD;AACD,UAAM,OAAO;AAGb,aAAS,cAAc;AACtB,WAAK,OAAO;AAAA,IACZ;AACD,UAAM,KAAK,MAAM;AAChBC,oBAAAA,MAAI,eAAe,SAAS,CAAC;AAG7BA,oBAAAA,MAAI,WAAW;AAAA,QACd,KAAK;AAAA,MACR,CAAG;AAAA,IACD;;;;;;;;;;;;;;;AC3DF,GAAG,gBAAgB,SAAS;"}
|
||||
{"version":3,"file":"exit.js","sources":["component/public/exit.vue","../Hbuilder/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovaGxkeV9hcHAvY29tcG9uZW50L3B1YmxpYy9leGl0LnZ1ZQ"],"sourcesContent":["<template>\r\n\t<!-- 通过 v-show 控制显隐,并根据 show 添加 is-active 类触发 CSS 过渡 -->\r\n\t<view :class=\"['neuro-wrapper', donghua ? 'is-active' : '']\" v-show=\"show\">\r\n\t\t<!-- 遮罩层,点击触发关闭 -->\r\n\t\t<view class=\"neuro-mask\" @click=\"handleClose\"></view>\r\n\t\t<!-- 拟态框,阻止冒泡点击 -->\r\n\t\t<view class=\"neuro-box\" @click.stop>\r\n\r\n\t\t\t<view class=\"button-father\">\r\n\t\t\t\t<view class=\"button-white\" @click=\"handleClose\">取消</view>\r\n\t\t\t\t<view class=\"button\" @click=\"go\">确定</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<view class=\"title\">退出登录</view>\r\n\t\t\t<view class=\"card-font\">\r\n\t\t\t\t确定要注销账户吗\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup>\r\n\timport {\r\n\t\tref,\r\n\t\twatch\r\n\t} from 'vue'\r\n\r\n\t// 接收 show 属性并支持 update:show 事件\r\n\tconst props = defineProps({\r\n\t\tshow: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: true\r\n\t\t},\r\n\r\n\t});\r\n\t// 区分首次渲染与动态添加\r\n\tconst donghua = ref(false);\r\n\twatch(\r\n\t\t() => props.show,\r\n\t\t(newVal, oldVal) => {\r\n\t\t\tif (!oldVal && newVal) {\r\n\t\t\t\tdonghua.value = false\r\n\t\t\t\tsetTimeout(()=>donghua.value = true,50)\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t)\r\n\tconst emit = defineEmits([\"close\"]);\r\n\r\n\t// 关闭方法,通知父组件更新 show\r\n\tfunction handleClose() {\r\n\t\temit('close');\r\n\t}\r\n\tconst go = () => {\r\n\t\tuni.setStorageSync('token', 1);\r\n\t\t\r\n\t\tuni.redirectTo({\r\n\t\t\turl: '/pages/login/login'\r\n\t\t});\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\t/* 容器默认隐藏,透明度为 0,不接受点击 */\r\n\t.neuro-wrapper {\r\n\t\tposition: fixed;\r\n\t\tinset: 0;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tz-index: 999;\r\n\t\topacity: 0;\r\n\t\tpointer-events: none;\r\n\t\ttransition: opacity 0.3s ease;\r\n\t}\r\n\r\n\t/* 显示时透明度过渡到 1,可接受点击 */\r\n\t.neuro-wrapper.is-active {\r\n\t\topacity: 1;\r\n\t\tpointer-events: auto;\r\n\t}\r\n\r\n\t/* 遮罩层,半透明黑色 */\r\n\t.neuro-mask {\r\n\t\tposition: absolute;\r\n\t\tinset: 0;\r\n\t\tbackground-color: rgba(0, 0, 0, 0.3);\r\n\t}\r\n\r\n\t/* 拟态框 固定尺寸 + 阴影样式 + 相对定位于 wrapper */\r\n\t.neuro-box {\r\n\t\tposition: relative;\r\n\t\twidth: 600rpx;\r\n\t\theight: 450rpx;\r\n\t\tborder-radius: 30rpx;\r\n\t\tbackground-color: #fff;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tz-index: 1;\r\n\t\tpadding: 0 10%;\r\n\t}\r\n\r\n\t.button {\r\n\t\twidth: 47%;\r\n\t\tbackground-color: #ddf0ff;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tcolor: #007CFF;\r\n\t\tborder: 1rpx solid #007CFF;\r\n\t\tfont-size: 25rpx;\r\n\t\tborder-radius: 30rpx;\r\n\t}\r\n\r\n\t.title {\r\n\t\tmargin-top: 70rpx;\r\n\t}\r\n\r\n\t.card-font {\r\n\t\tmargin-top: 70rpx;\r\n\t\twidth: 600rpx;\r\n\t\tjustify-content: center;\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.button-white {\r\n\t\twidth: 47%;\r\n\t\tborder: 2rpx solid #c3cacd;\r\n\t\tbackground: linear-gradient(to bottom, #f3f3f5, #dee4e9);\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tfont-size: 25rpx;\r\n\t\tborder-radius: 30rpx;\r\n\t}\r\n\r\n\t.button-father {\r\n\t\tposition: absolute;\r\n\t\tbottom: 60rpx;\r\n\t\tleft: 50%;\r\n\t\ttransform: translateX(-50%);\r\n\t\twidth: 100%;\r\n\t\theight: 70rpx;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\tpadding: 0 50rpx;\r\n\t}\r\n</style>","import Component from 'D:/hldy_app/component/public/exit.vue'\nwx.createComponent(Component)"],"names":["ref","watch","uni"],"mappings":";;;;;;;;;;;;AA4BC,UAAM,QAAQ;AAQd,UAAM,UAAUA,kBAAI,KAAK;AACzBC,kBAAK;AAAA,MACJ,MAAM,MAAM;AAAA,MACZ,CAAC,QAAQ,WAAW;AACnB,YAAI,CAAC,UAAU,QAAQ;AACtB,kBAAQ,QAAQ;AAChB,qBAAW,MAAI,QAAQ,QAAQ,MAAK,EAAE;AAAA,QAEtC;AAAA,MACD;AAAA,IACD;AACD,UAAM,OAAO;AAGb,aAAS,cAAc;AACtB,WAAK,OAAO;AAAA,IACZ;AACD,UAAM,KAAK,MAAM;AAChBC,oBAAAA,MAAI,eAAe,SAAS,CAAC;AAE7BA,oBAAAA,MAAI,WAAW;AAAA,QACd,KAAK;AAAA,MACR,CAAG;AAAA,IACD;;;;;;;;;;;;;;;AC1DF,GAAG,gBAAgB,SAAS;"}
|
||||
1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/NursingNew/component/api.js.map
vendored
Normal file
1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/NursingNew/component/equipment.js.map
vendored
Normal file
1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/Warehouse/components/ShadowView.js.map
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"ShadowView.js","sources":["pages/Warehouse/components/ShadowView.vue","../Hbuilder/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovaGxkeV9hcHAvcGFnZXMvV2FyZWhvdXNlL2NvbXBvbmVudHMvU2hhZG93Vmlldy52dWU"],"sourcesContent":["<template>\r\n\t<view>\r\n\t\t <view class=\"shadow guodu\" :class=\"opacity?'heig':''\" ></view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\texport default {\r\n\t\t props: {\r\n\t\t opacity: {\r\n\t\t type: Boolean,\r\n\t\t default: false, // 初始不显示阴影\r\n\t\t }\r\n\t\t },\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\t\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.shadow {\r\n width: 100%;\r\n height: 0;\r\n position: absolute;\r\n left: 0;\r\n bottom: 0vw;\r\n border-radius: 50%;\r\n filter: blur(15rpx);\r\n background: linear-gradient(to top, RGBA(239, 240, 244, 1), RGBA(239, 240, 244, .1)); /* 根据需要调整 */\r\n}\r\n.guodu{\r\n\ttransition: .4s;\r\n\t-webkit-transform-style: preserve-3d;\r\n\t-webkit-overflow-scrolling: touch;\r\n}\r\n.heig{\r\n\theight: 16vw !important;\r\n}\r\n</style>","import Component from 'D:/hldy_app/pages/Warehouse/components/ShadowView.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;AAOC,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACJ,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IACX;AAAA,EACD;AAAA,EACH,OAAO;AACN,WAAO;EAGR;AACD;;;;;;;AClBD,GAAG,gBAAgB,SAAS;"}
|
||||