改了护理单元-设备页面

This commit is contained in:
Teng 2025-10-27 17:16:52 +08:00
parent c62a479744
commit fd3b47f9b8
188 changed files with 2338 additions and 182 deletions

View File

@ -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>

View File

@ -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" : {

View File

@ -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": {

View File

@ -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'
})
}

File diff suppressed because it is too large Load Diff

View File

@ -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)

627
pages/smallcarmera.nvue Normal file
View File

@ -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>

View File

@ -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
}
}

View File

@ -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: "",

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because one or more lines are too long

View File

@ -7,8 +7,8 @@
"id": "__UNI__FB2D473",
"name": "护理单元",
"version": {
"name": "1.7.0",
"code": 170
"name": "1.7.2",
"code": 172
},
"description": "护理单元",
"developer": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -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(() => {
});

View File

@ -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
};

File diff suppressed because one or more lines are too long

View File

@ -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;;;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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;"}

Some files were not shown because too many files have changed in this diff Show More