|
|
@@ -533,9 +533,14 @@ import {
|
|
|
|
|
|
// import { uploadImg } from "@/api/modules/upload";
|
|
|
import { useUserStore } from "@/stores/modules/user";
|
|
|
+import { useWebSocketStore } from "@/stores/modules/websocket";
|
|
|
|
|
|
const router = useRouter();
|
|
|
const userStore = useUserStore();
|
|
|
+const socketStore = useWebSocketStore();
|
|
|
+
|
|
|
+// WebSocket 基础地址(与商家端一致,分享前连接)
|
|
|
+const WS_BASE = import.meta.env.VITE_WS_BASE || "ws://192.168.10.80:8000/alienStore/socket/";
|
|
|
|
|
|
// 举报原因到违规类型的映射
|
|
|
const violationTypeMap: Record<string, number> = {
|
|
|
@@ -1142,8 +1147,24 @@ const handleCancelReply = () => {
|
|
|
commentInput.value = "";
|
|
|
};
|
|
|
|
|
|
-// 分享
|
|
|
+// 分享(参考商家端 newDetail:分享前先连接 WebSocket)
|
|
|
const handleShare = async () => {
|
|
|
+ const phone = userStore.userInfo?.phone || "";
|
|
|
+ const senderId = phone.startsWith("store_") ? phone : `store_${phone}`;
|
|
|
+ const wsUrl = `${WS_BASE.replace(/\/$/, "")}/${senderId}`;
|
|
|
+ try {
|
|
|
+ if (!socketStore.isConnected || socketStore.lastConnectedUrl !== wsUrl) {
|
|
|
+ const connected = await socketStore.connect(wsUrl);
|
|
|
+ if (!connected) {
|
|
|
+ ElMessage.warning("连接失败,请稍后重试");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.error("WebSocket 连接失败:", e);
|
|
|
+ ElMessage.warning("连接失败,请稍后重试");
|
|
|
+ return;
|
|
|
+ }
|
|
|
shareDialogVisible.value = true;
|
|
|
await loadShareFriendList();
|
|
|
};
|
|
|
@@ -1204,7 +1225,7 @@ const handleRemoveFriend = (friendId: number) => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-// 确认分享
|
|
|
+// 确认分享(参考商家端 newDetail:通过 WebSocket sendMessage 发送给每位好友,再调 addTransferCount)
|
|
|
const handleConfirmShare = async () => {
|
|
|
if (selectedFriends.value.length === 0) {
|
|
|
ElMessage.warning("请选择要分享的好友");
|
|
|
@@ -1216,10 +1237,34 @@ const handleConfirmShare = async () => {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ const phone = userStore.userInfo?.phone || "";
|
|
|
+ const senderId = phone.startsWith("store_") ? phone : `store_${phone}`;
|
|
|
+ const detailPayload = {
|
|
|
+ ...currentDetail.value,
|
|
|
+ imageList: currentDetail.value.imagePath.split(","),
|
|
|
+ cover: currentDetail.value.imagePath.split(",")[0]
|
|
|
+ };
|
|
|
try {
|
|
|
shareSubmitting.value = true;
|
|
|
|
|
|
- // 调用 addTransferCount 接口,传递动态 id
|
|
|
+ // 先通过 WebSocket 给每位选中好友发送动态分享消息(与商家端 sendMessage 格式一致)
|
|
|
+ for (const friendId of selectedFriends.value) {
|
|
|
+ const friend = shareFriendList.value.find(f => f.id === friendId);
|
|
|
+ const receiverId = friend?.phoneId || friend?.id;
|
|
|
+ if (!receiverId) continue;
|
|
|
+ await socketStore.sendMessage({
|
|
|
+ category: "message",
|
|
|
+ receiverId,
|
|
|
+ senderId,
|
|
|
+ type: 3,
|
|
|
+ text: {
|
|
|
+ sendType: "dynamicShare",
|
|
|
+ url: JSON.stringify(detailPayload)
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 再调用 addTransferCount 接口,传递动态 id(与商家端一致)
|
|
|
const res: any = await addTransferCount({
|
|
|
id: currentDetail.value.id
|
|
|
});
|
|
|
@@ -1227,9 +1272,10 @@ const handleConfirmShare = async () => {
|
|
|
if (res.code === 200) {
|
|
|
ElMessage.success(`已分享给 ${selectedFriends.value.length} 位好友`);
|
|
|
shareDialogVisible.value = false;
|
|
|
-
|
|
|
- // 可以在这里更新动态的分享数(如果需要的话)
|
|
|
- console.log("分享成功,动态ID:", currentDetail.value.id);
|
|
|
+ // 更新当前详情的分享数
|
|
|
+ if (typeof (currentDetail.value as any).transferCount === "number") {
|
|
|
+ (currentDetail.value as any).transferCount += selectedFriends.value.length;
|
|
|
+ }
|
|
|
} else {
|
|
|
ElMessage.error(res.message || "分享失败");
|
|
|
}
|