2025-08-29 17:33:30 +08:00
|
|
|
|
import { resolveComponent, openBlock, createElementBlock, createElementVNode, createVNode } from "vue";
|
2025-09-09 17:44:16 +08:00
|
|
|
|
function requireNativePlugin(name) {
|
|
|
|
|
|
return weex.requireModule(name);
|
|
|
|
|
|
}
|
|
|
|
|
|
function formatAppLog(type, filename, ...args) {
|
|
|
|
|
|
if (uni.__log__) {
|
|
|
|
|
|
uni.__log__(type, filename, ...args);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console[type].apply(console, [...args, filename]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
const _style_0 = { "center-column": { "": { "width": 630, "height": 510, "overflow": "hidden" } } };
|
|
|
|
|
|
const _export_sfc = (sfc, props) => {
|
|
|
|
|
|
const target = sfc.__vccOpts || sfc;
|
|
|
|
|
|
for (const [key, val] of props) {
|
|
|
|
|
|
target[key] = val;
|
|
|
|
|
|
}
|
|
|
|
|
|
return target;
|
|
|
|
|
|
};
|
2025-08-29 17:33:30 +08:00
|
|
|
|
const _sfc_main = {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
phoneNumber: "1234567890",
|
|
|
|
|
|
isAlarming: false,
|
|
|
|
|
|
isRecording: false,
|
|
|
|
|
|
// 录屏状态
|
|
|
|
|
|
isTalking: false,
|
|
|
|
|
|
// 对讲状态
|
|
|
|
|
|
// 内部 pending 请求队列,用于在 native 事件到达时把结果返回给特定 reqId
|
|
|
|
|
|
// 结构: { snapshot: [reqId,...], record: [reqId,...], talk: [reqId,...] }
|
|
|
|
|
|
// 注意:这仅用于在 native 事件没有直接 callback 时仍能把结果回传给请求方。
|
|
|
|
|
|
_pendingRequests: {
|
|
|
|
|
|
snapshot: [],
|
|
|
|
|
|
record: [],
|
|
|
|
|
|
talk: []
|
2025-09-09 17:44:16 +08:00
|
|
|
|
},
|
|
|
|
|
|
suo: true
|
2025-08-29 17:33:30 +08:00
|
|
|
|
};
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad() {
|
|
|
|
|
|
const globalEvent = requireNativePlugin && requireNativePlugin("globalEvent");
|
|
|
|
|
|
if (globalEvent && globalEvent.addEventListener) {
|
|
|
|
|
|
globalEvent.addEventListener("myEvent", (e) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:40", 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;
|
|
|
|
|
|
}
|
2025-08-29 17:33:30 +08:00
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
uni.$on("monitor:doSnapshot", this.doSnapshot);
|
|
|
|
|
|
uni.$on("monitor:startRecord", this.doStartRecord);
|
|
|
|
|
|
uni.$on("monitor:stopRecord", this.doStopRecord);
|
|
|
|
|
|
uni.$on("monitor:openTalk", this.doOpenTalk);
|
|
|
|
|
|
uni.$on("monitor:stopTalk", this.doStopTalk);
|
|
|
|
|
|
uni.$on("monitor:switchDisplay", (payload) => this.switchDisplay(payload));
|
|
|
|
|
|
uni.$on("monitor:startAlarm", this.startAlarm);
|
|
|
|
|
|
uni.$on("monitor:stopAlarm", this.stopAlarm);
|
|
|
|
|
|
uni.$on("monitor:flipImage", (payload) => this.flipImage(payload));
|
|
|
|
|
|
uni.$on("monitor:resumeOrPause", this.resumeOrPause);
|
|
|
|
|
|
uni.$on("monitor:changeQuality", this.changeQuality);
|
2025-09-02 16:48:59 +08:00
|
|
|
|
uni.$on("monitor:toggleVolume", this.toggleVolume);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
uni.$on("monitor:test", this.test);
|
|
|
|
|
|
},
|
|
|
|
|
|
onUnload() {
|
|
|
|
|
|
uni.$off("monitor:doSnapshot", this.doSnapshot);
|
|
|
|
|
|
uni.$off("monitor:startRecord", this.doStartRecord);
|
|
|
|
|
|
uni.$off("monitor:stopRecord", this.doStopRecord);
|
|
|
|
|
|
uni.$off("monitor:openTalk", this.doOpenTalk);
|
|
|
|
|
|
uni.$off("monitor:stopTalk", this.doStopTalk);
|
|
|
|
|
|
uni.$off("monitor:switchDisplay", (payload) => this.switchDisplay(payload));
|
|
|
|
|
|
uni.$off("monitor:startAlarm", this.startAlarm);
|
|
|
|
|
|
uni.$off("monitor:stopAlarm", this.stopAlarm);
|
|
|
|
|
|
uni.$off("monitor:flipImage", (payload) => this.flipImage(payload));
|
|
|
|
|
|
uni.$off("monitor:resumeOrPause", this.resumeOrPause);
|
|
|
|
|
|
uni.$off("monitor:changeQuality", this.changeQuality);
|
2025-09-02 16:48:59 +08:00
|
|
|
|
uni.$off("monitor:toggleVolume", this.toggleVolume);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
uni.$off("monitor:test", this.test);
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
/* ------------------ 原有功能 ------------------ */
|
|
|
|
|
|
handleTelEvent(event) {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:102", "Tel event detail:", event.detail);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
},
|
|
|
|
|
|
switchDisplay(mode) {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:107", "zzzzz", mode);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
this.$refs.monitor && this.$refs.monitor.switchDisplayModeFragment(mode);
|
|
|
|
|
|
},
|
|
|
|
|
|
startAlarm() {
|
|
|
|
|
|
this.isAlarming = true;
|
|
|
|
|
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:114", "startAlarm callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
stopAlarm() {
|
|
|
|
|
|
this.isAlarming = false;
|
|
|
|
|
|
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:120", "stopAlarm callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
flipImage(type) {
|
|
|
|
|
|
this.$refs.monitor.changeImageSwitch(type, (res) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:126", "flipImage callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
resumeOrPause() {
|
|
|
|
|
|
this.$refs.monitor.resumeOrPause && this.$refs.monitor.resumeOrPause();
|
|
|
|
|
|
},
|
|
|
|
|
|
changeQuality() {
|
|
|
|
|
|
this.$refs.monitor.changeQuality && this.$refs.monitor.changeQuality();
|
|
|
|
|
|
},
|
2025-09-02 16:48:59 +08:00
|
|
|
|
toggleVolume() {
|
|
|
|
|
|
this.$refs.monitor.toggleVolume && this.$refs.monitor.toggleVolume();
|
|
|
|
|
|
},
|
2025-08-29 17:33:30 +08:00
|
|
|
|
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(`monitor: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) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:166", "snapShot callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
this._handleSnapshotResultFromNative(res, payload.reqId);
|
|
|
|
|
|
});
|
|
|
|
|
|
uni.showToast({ title: "正在截屏...", icon: "none", duration: 800 });
|
|
|
|
|
|
} catch (err) {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("error", "at pages/camera.nvue:171", "snapShot 调用失败", err);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
uni.showToast({ title: "snapShot 调用失败", icon: "none" });
|
|
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor: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(`monitor:response:${payload.reqId}`, { ok: false, error: "startRecord_not_supported" });
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
|
|
|
this.$refs.monitor.startRecord((res) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:191", "startRecord callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor:response:${payload.reqId}`, { ok: true, res });
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
this.isRecording = true;
|
|
|
|
|
|
uni.showToast({ title: "录屏已开始", icon: "none" });
|
|
|
|
|
|
} catch (err) {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("error", "at pages/camera.nvue:200", "startRecord 调用失败", err);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
uni.showToast({ title: "startRecord 调用失败", icon: "none" });
|
|
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor: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(`monitor: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) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:226", "stopRecord callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
this._handleRecordResultFromNative(res, payload.reqId);
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (err) {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("error", "at pages/camera.nvue:231", "stopRecord 调用失败", err);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
uni.showToast({ title: "stopRecord 调用失败", icon: "none" });
|
|
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor: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(`monitor: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) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:255", "openTalk callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor:response:${payload.reqId}`, { ok: true, res });
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
this.isTalking = true;
|
|
|
|
|
|
uni.showToast({ title: "尝试建立对讲连接...", icon: "none" });
|
|
|
|
|
|
} catch (err) {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("error", "at pages/camera.nvue:264", "openTalk 调用失败", err);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
uni.showToast({ title: "openTalk 调用失败", icon: "none" });
|
|
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor: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(`monitor:response:${payload.reqId}`, { ok: false, error: "stopTalk_not_supported" });
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
|
|
|
this.$refs.monitor.stopTalk((res) => {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:284", "stopTalk callback:", res);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor:response:${payload.reqId}`, { ok: true, res });
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
this.isTalking = false;
|
|
|
|
|
|
} catch (err) {
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("error", "at pages/camera.nvue:291", "stopTalk 调用失败", err);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
uni.showToast({ title: "stopTalk 调用失败", icon: "none" });
|
|
|
|
|
|
if (payload.reqId) {
|
|
|
|
|
|
uni.$emit(`monitor: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;
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:304", "onSnapShot event:", payload);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
this._handleSnapshotResultFromNative(payload);
|
|
|
|
|
|
},
|
|
|
|
|
|
// 处理来自模板 @onRecord 的事件(event.detail)
|
|
|
|
|
|
handleRecordEvent(event) {
|
|
|
|
|
|
const payload = event && event.detail ? event.detail : event;
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:312", "onRecord event:", payload);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
this._handleRecordResultFromNative(payload);
|
|
|
|
|
|
},
|
|
|
|
|
|
// 处理来自模板 @onTalkStatus 的事件
|
|
|
|
|
|
handleTalkEvent(event) {
|
|
|
|
|
|
const payload = event && event.detail ? event.detail : event;
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:319", "onTalkStatus event:", payload);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
const status = payload && payload.talkStatus;
|
|
|
|
|
|
const tips = payload && payload.tips;
|
|
|
|
|
|
uni.$emit("monitor:talk:status", payload);
|
|
|
|
|
|
if (this._pendingRequests.talk && this._pendingRequests.talk.length) {
|
|
|
|
|
|
while (this._pendingRequests.talk.length) {
|
|
|
|
|
|
const reqId = this._pendingRequests.talk.shift();
|
|
|
|
|
|
uni.$emit(`monitor: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(`monitor:response:${reqIdFromCallback}`, { ok: false, error: "no_data" });
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
let payload = res;
|
|
|
|
|
|
if (res.detail)
|
|
|
|
|
|
payload = res.detail;
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:372", "snapshot payload normalized:", payload);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
if (reqIdFromCallback) {
|
|
|
|
|
|
uni.$emit(`monitor: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(`monitor:response:${rid}`, { ok: !!payload.snapShotResult, payload });
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
uni.$emit("monitor: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 });
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("warn", "at pages/camera.nvue:399", "snapshot failed reason:", err, payload);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
_handleRecordResultFromNative(res, reqIdFromCallback = null) {
|
|
|
|
|
|
if (!res) {
|
|
|
|
|
|
uni.showToast({ title: "录屏没有返回数据", icon: "none" });
|
|
|
|
|
|
this.isRecording = false;
|
|
|
|
|
|
if (reqIdFromCallback) {
|
|
|
|
|
|
uni.$emit(`monitor:response:${reqIdFromCallback}`, { ok: false, error: "no_data" });
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
let payload = res;
|
|
|
|
|
|
if (res.detail)
|
|
|
|
|
|
payload = res.detail;
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:415", "record payload normalized:", payload);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
if (reqIdFromCallback) {
|
|
|
|
|
|
uni.$emit(`monitor: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(`monitor:response:${rid}`, { ok: !!(payload.recordUrl || payload.snapShotResult), payload });
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
uni.$emit("monitor:record:done", payload);
|
|
|
|
|
|
if (payload.recordUrl) {
|
|
|
|
|
|
uni.showToast({ title: "录屏完成", icon: "success", duration: 1400 });
|
|
|
|
|
|
this.isRecording = false;
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("log", "at pages/camera.nvue:436", "录屏地址:", payload.recordUrl);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
} else if (payload.recordFailedReason) {
|
|
|
|
|
|
uni.showToast({ title: "录屏失败: " + payload.recordFailedReason, icon: "none", duration: 2e3 });
|
|
|
|
|
|
this.isRecording = false;
|
2025-09-09 17:44:16 +08:00
|
|
|
|
formatAppLog("warn", "at pages/camera.nvue:440", "record failed reason:", payload.recordFailedReason);
|
2025-08-29 17:33:30 +08:00
|
|
|
|
} 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" }, [
|
|
|
|
|
|
createVNode(_component_MonitorView, {
|
|
|
|
|
|
ref: "monitor",
|
|
|
|
|
|
init: "5",
|
2025-09-09 17:44:16 +08:00
|
|
|
|
style: { "width": "630px", "height": "510px" },
|
2025-08-29 17:33:30 +08:00
|
|
|
|
onOnTel: $options.handleTelEvent,
|
|
|
|
|
|
onOnSnapShot: $options.handleSnapShotEvent,
|
|
|
|
|
|
onOnRecord: $options.handleRecordEvent,
|
|
|
|
|
|
onOnTalkStatus: $options.handleTalkEvent
|
|
|
|
|
|
}, null, 8, ["onOnTel", "onOnSnapShot", "onOnRecord", "onOnTalkStatus"])
|
|
|
|
|
|
])
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
const camera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]]]);
|
|
|
|
|
|
export {
|
|
|
|
|
|
camera as default
|
|
|
|
|
|
};
|