|
|
@@ -124,6 +124,13 @@ const socketStore = useWebSocketStore();
|
|
|
|
|
|
const isWsReady = () => socketStore.isSocketOpen();
|
|
|
|
|
|
+/** 接口与 WebSocket:相关 id 需带 store_ 前缀(已带则不变) */
|
|
|
+const ensureStoreSenderId = (id: string) => {
|
|
|
+ const s = String(id ?? "").trim();
|
|
|
+ if (!s) return s;
|
|
|
+ return /^store_/i.test(s) ? s : `store_${s}`;
|
|
|
+};
|
|
|
+
|
|
|
// 会话信息
|
|
|
const sendId = ref("");
|
|
|
const receiverId = ref("");
|
|
|
@@ -185,8 +192,8 @@ const handleSend = async () => {
|
|
|
const ok = await socketStore.sendMessage({
|
|
|
category: "message",
|
|
|
type: 1,
|
|
|
- receiverId: receiverId.value,
|
|
|
- senderId: sendId.value,
|
|
|
+ receiverId: ensureStoreSenderId(receiverId.value),
|
|
|
+ senderId: ensureStoreSenderId(sendId.value),
|
|
|
text
|
|
|
});
|
|
|
sending.value = false;
|
|
|
@@ -197,8 +204,8 @@ const handleSend = async () => {
|
|
|
id: `temp_${Date.now()}`,
|
|
|
type: 1,
|
|
|
content: text,
|
|
|
- senderId: sendId.value,
|
|
|
- receiverId: receiverId.value,
|
|
|
+ senderId: ensureStoreSenderId(sendId.value),
|
|
|
+ receiverId: ensureStoreSenderId(receiverId.value),
|
|
|
createdTime: formatTime(new Date())
|
|
|
}
|
|
|
];
|
|
|
@@ -246,8 +253,8 @@ const handleImageSelect = async (e: Event) => {
|
|
|
const ok = await socketStore.sendMessage({
|
|
|
category: "message",
|
|
|
type: 2,
|
|
|
- receiverId: receiverId.value,
|
|
|
- senderId: sendId.value,
|
|
|
+ receiverId: ensureStoreSenderId(receiverId.value),
|
|
|
+ senderId: ensureStoreSenderId(sendId.value),
|
|
|
text: fileUrl
|
|
|
});
|
|
|
if (ok) {
|
|
|
@@ -257,8 +264,8 @@ const handleImageSelect = async (e: Event) => {
|
|
|
id: `temp_${Date.now()}`,
|
|
|
type: 2,
|
|
|
content: fileUrl,
|
|
|
- senderId: sendId.value,
|
|
|
- receiverId: receiverId.value,
|
|
|
+ senderId: ensureStoreSenderId(sendId.value),
|
|
|
+ receiverId: ensureStoreSenderId(receiverId.value),
|
|
|
createdTime: formatTime(new Date())
|
|
|
}
|
|
|
];
|
|
|
@@ -296,8 +303,8 @@ const handleVideoSelect = async (e: Event) => {
|
|
|
const ok = await socketStore.sendMessage({
|
|
|
category: "message",
|
|
|
type: 8,
|
|
|
- receiverId: receiverId.value,
|
|
|
- senderId: sendId.value,
|
|
|
+ receiverId: ensureStoreSenderId(receiverId.value),
|
|
|
+ senderId: ensureStoreSenderId(sendId.value),
|
|
|
text: fileUrl
|
|
|
});
|
|
|
if (ok) {
|
|
|
@@ -307,8 +314,8 @@ const handleVideoSelect = async (e: Event) => {
|
|
|
id: `temp_${Date.now()}`,
|
|
|
type: 8,
|
|
|
content: fileUrl,
|
|
|
- senderId: sendId.value,
|
|
|
- receiverId: receiverId.value,
|
|
|
+ senderId: ensureStoreSenderId(sendId.value),
|
|
|
+ receiverId: ensureStoreSenderId(receiverId.value),
|
|
|
createdTime: formatTime(new Date())
|
|
|
}
|
|
|
];
|
|
|
@@ -330,7 +337,7 @@ const readMessage = async () => {
|
|
|
try {
|
|
|
await messageRead({
|
|
|
receiverId: sendId.value,
|
|
|
- senderId: receiverId.value
|
|
|
+ senderId: ensureStoreSenderId(receiverId.value)
|
|
|
});
|
|
|
} catch (e) {
|
|
|
console.error("消息已读接口调用失败", e);
|
|
|
@@ -347,7 +354,7 @@ const loadChatRecord = async () => {
|
|
|
await readMessage();
|
|
|
const res: any = await getChatRecord({
|
|
|
receiverId: sendId.value,
|
|
|
- senderId: receiverId.value
|
|
|
+ senderId: ensureStoreSenderId(receiverId.value)
|
|
|
});
|
|
|
const list = res?.data?.messageList || res?.messageList || [];
|
|
|
list.forEach((item: any) => {
|
|
|
@@ -369,7 +376,7 @@ const initWebSocket = async () => {
|
|
|
ElMessage.warning("未获取到商家信息,无法连接");
|
|
|
return;
|
|
|
}
|
|
|
- sendId.value = `store_${phone}`;
|
|
|
+ sendId.value = ensureStoreSenderId(String(phone));
|
|
|
// 与打包 mode 无关:HTTPS 走 wss://当前域名/alienStore/socket,避免 .env.production 仍为 ws 导致混合内容拦截
|
|
|
const WS_BASE = getWebSocketBase();
|
|
|
const wsUrl =
|