feat:跟新密码加密 共享白板功能

This commit is contained in:
leilei
2025-10-11 17:28:20 +08:00
parent e429e4286a
commit db72ea9f33
18 changed files with 1434 additions and 412 deletions

View File

@@ -2,6 +2,7 @@ import { mqttClient } from "./mqtt";
import { getWhiteboardShapes, getWhiteboardHistory } from "@/views/custom/api";
import { useMeterStore } from '@/stores/modules/meter';
import { encode, decode } from '@msgpack/msgpack'
import { ElMessage } from 'element-plus';
const meterStore = useMeterStore();
meterStore.initUdid();
@@ -11,7 +12,7 @@ let canvasInstance = null;
// 获取本地缓存 userData
function getLocalUserData() {
const dataStr = localStorage.getItem('userData');
const dataStr = sessionStorage.getItem('userData');
if (!dataStr) return null;
try {
return JSON.parse(dataStr);
@@ -28,8 +29,7 @@ export const WhiteboardSync = {
canvasInstance = canvas;
const localUser = getLocalUserData();
const localUid = localUser?.user?.uid;
const localUid = localUser?.uid;
try {
// 先连接 MQTT
await mqttClient.connect(meterStore.getSudid());
@@ -43,18 +43,19 @@ export const WhiteboardSync = {
// 订阅当前房间
const topic = `xSynergy/ROOM/${roomUid}/whiteboard/#`;
mqttClient.subscribe(topic, async (shapeData) => {
// console.log(shapeData, 'shapeData++格式装换')
const shapeDataNew = decode(shapeData);
mqttClient.subscribe(topic, async (shapeData) => {
const shapeDataNew = JSON.parse(shapeData.toString())
// const shapeDataNew = decode(message);
// console.log(shapeDataNew, '格式解码')
try {
isRemote = true;
// 如果 shape 来自本地用户,则跳过
if (shapeDataNew.user_uid === localUid) return;
// 如果 shape 来自本地用户,则跳过
if (shapeDataNew.user_uid === localUid) return;
const res = await getWhiteboardHistory({ after_timestamp: shapeDataNew.created_at }, roomUid);
if (res.meta.code === 200) {
canvasInstance.addShape(res.data.shapes);
} else {
ElMessage.error("获取历史数据失败");
console.error("获取历史数据失败");
}
} catch (e) {
@@ -71,7 +72,7 @@ export const WhiteboardSync = {
}
// 监听画布事件:新增图形
canvas.on('drawingEnd', async (shape) => {
canvas.on('drawingEnd', async (shape) => {
// 如果来自远程,或不是需要同步的类型,跳过
if (isRemote || !['pencil', 'line', 'rectangle', 'circle', 'eraser'].includes(shape.type)) return;
@@ -82,6 +83,7 @@ export const WhiteboardSync = {
try {
await getWhiteboardShapes(shape, roomUid);
} catch (err) {
ElMessage.error("提交形状失败");
console.error("提交形状失败:", err);
}
});