From c5958812cfe88a8ec1b31fa4b585526a197a1262 Mon Sep 17 00:00:00 2001 From: YiLin <482244139@qq.com> Date: Tue, 28 Jul 2026 17:48:57 +0800 Subject: [PATCH 1/5] =?UTF-8?q?WYXD=E5=B7=A6=E5=8F=B3=E6=BB=91=E5=8A=A8?= =?UTF-8?q?=E7=BF=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/Chat/Chat.vue | 4 - pages/WYXD/WYXD.vue | 22 ++- unpackage/dist/dev/app-plus/app-service.js | 134 ++++++++++-------- .../dist/dev/app-plus/pages/WYXD/WYXD.css | 4 + 4 files changed, 98 insertions(+), 66 deletions(-) diff --git a/pages/Chat/Chat.vue b/pages/Chat/Chat.vue index b8f91d5..8e10779 100644 --- a/pages/Chat/Chat.vue +++ b/pages/Chat/Chat.vue @@ -210,10 +210,6 @@ - diff --git a/pages/WYXD/WYXD.vue b/pages/WYXD/WYXD.vue index 402eb4f..81dd446 100644 --- a/pages/WYXD/WYXD.vue +++ b/pages/WYXD/WYXD.vue @@ -32,9 +32,14 @@ - - - + + + + + + + @@ -89,10 +94,12 @@ const statusText = computed(() => { const displayName = computed(() => fileName.value || '未命名文档') -const currentSlide = computed(() => slides.value[currentIndex.value] || { html: '' }) - const pad = (n) => String(n).padStart(2, '0') +const onSwiperChange = (e) => { + currentIndex.value = e.detail.current +} + const goBack = () => { uni.navigateBack() } @@ -247,6 +254,11 @@ onLoad((options) => { /* padding: 20rpx; */ } +.wyxd-swiper { + width: 100%; + height: 100%; +} + .wyxd-slide-scroll { height: 100%; background: #fff; diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index f26bb30..5184a0b 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -5639,7 +5639,7 @@ This will fail in production.`); if (friendSocketStore.isConnected) return; if (!userToken.value || !UserId.value) { - formatAppLog("warn", "at pages/Chat/Chat.vue:349", "Token或UserId未准备好"); + formatAppLog("warn", "at pages/Chat/Chat.vue:345", "Token或UserId未准备好"); return; } friendSocketStore.connect({ @@ -5725,7 +5725,7 @@ This will fail in production.`); ); return html; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:475", "解析失败", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:471", "解析失败", e2); return content; } }; @@ -5784,7 +5784,7 @@ This will fail in production.`); files }; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:552", "解析文件信息失败:", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:548", "解析文件信息失败:", e2); return { textContent: content, files: [] @@ -5822,7 +5822,7 @@ This will fail in production.`); closeNewChatModal(); takeUserConversations(); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:598", "新建普通会话失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:594", "新建普通会话失败:", error); uni.showToast({ title: "创建会话失败,请重试", icon: "none" @@ -5860,7 +5860,7 @@ This will fail in production.`); }; const previewFileArray = vue.ref([]); const uploadPhoto = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:647", "点击了拍照上传"); + formatAppLog("log", "at pages/Chat/Chat.vue:643", "点击了拍照上传"); uni.chooseImage({ count: 1, sourceType: ["camera", "album"], @@ -5883,7 +5883,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:665", "选择图片失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:661", "选择图片失败", err); } }); }; @@ -5892,12 +5892,12 @@ This will fail in production.`); }; const fileList = vue.ref([]); const uploadFile = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:676", "点击了上传文件"); + formatAppLog("log", "at pages/Chat/Chat.vue:672", "点击了上传文件"); chooseFile({ count: 5, type: "all", success: (res) => { - formatAppLog("log", "at pages/Chat/Chat.vue:681", "成功了"); + formatAppLog("log", "at pages/Chat/Chat.vue:677", "成功了"); fileList.value = res.tempFiles; previewFileArray.value.push(...res.tempFiles); uni.showToast({ @@ -5906,7 +5906,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:692", "选择失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:688", "选择失败:", err); uni.showToast({ title: "选择失败", icon: "error" @@ -6108,7 +6108,7 @@ This will fail in production.`); previewFileArray.value = []; } catch (err) { uni.hideLoading(); - formatAppLog("error", "at pages/Chat/Chat.vue:927", "文件上传失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:923", "文件上传失败:", err); uni.showToast({ title: "文件上传失败,请重试", icon: "error" @@ -6242,15 +6242,15 @@ This will fail in production.`); } }; const stopConversation = async () => { - formatAppLog("log", "at pages/Chat/Chat.vue:1097", "中断对话 - 当前会话ID:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1093", "中断对话 - 当前会话ID:", currentSessionId.value); try { await socketStore.send({ type: "stop", conversation_id: currentSessionId.value }); - formatAppLog("log", "at pages/Chat/Chat.vue:1103", "中断指令已发送成功"); + formatAppLog("log", "at pages/Chat/Chat.vue:1099", "中断指令已发送成功"); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1105", "中断指令发送失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1101", "中断指令发送失败:", err); } if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); @@ -6268,9 +6268,9 @@ This will fail in production.`); }); }; vue.watch(() => socketStore.isThinking, (newVal, oldVal) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1129", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); + formatAppLog("log", "at pages/Chat/Chat.vue:1125", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); if (!oldVal && newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1132", "AI开始回复(跨设备同步),锁定输入框"); + formatAppLog("log", "at pages/Chat/Chat.vue:1128", "AI开始回复(跨设备同步),锁定输入框"); isThinking.value = true; if (!streamingMessageId.value) { streamingMessageId.value = "streaming-" + Date.now(); @@ -6284,7 +6284,7 @@ This will fail in production.`); return; } if (oldVal && !newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1148", "AI回复结束(正常/中断),解锁并刷新消息列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1144", "AI回复结束(正常/中断),解锁并刷新消息列表"); if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); streamingMessageId.value = null; @@ -6336,15 +6336,15 @@ This will fail in production.`); UserData.value = await getUserInfo(userToken.value); UserId.value = UserData.value._id; UserAvatar.value = UserData.value.avatar || ""; - formatAppLog("log", "at pages/Chat/Chat.vue:1212", "用户信息已加载:", UserId.value, UserAvatar.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1208", "用户信息已加载:", UserId.value, UserAvatar.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1214", "获取用户信息失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1210", "获取用户信息失败:", error); } }; const takeUserConversations = async () => { try { userToken.value = getToken(); - formatAppLog("log", "at pages/Chat/Chat.vue:1222", "token:", userToken.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1218", "token:", userToken.value); UserConversations.value = await getUserConversations(userToken.value) || []; const savedSessionId = getCurrentSessionId(); if (savedSessionId && UserConversations.value.some((c) => c._id === savedSessionId)) { @@ -6354,7 +6354,7 @@ This will fail in production.`); } else { currentSessionId.value = ""; } - formatAppLog("log", "at pages/Chat/Chat.vue:1234", "保存会话id:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1230", "保存会话id:", currentSessionId.value); uni.setStorageSync("currentSessionId", currentSessionId.value); } catch (error) { uni.showToast({ @@ -6366,17 +6366,17 @@ This will fail in production.`); const FriendInfoList = vue.ref([]); const takeFriendList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1249", "开始获取好友列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1245", "开始获取好友列表"); const friendList = await getChatFriend(UserId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1252", "friendList:", friendList); + formatAppLog("log", "at pages/Chat/Chat.vue:1248", "friendList:", friendList); if (friendList && friendList.length) { FriendInfoList.value = await takeUserAvatar(friendList); } else { FriendInfoList.value = []; - formatAppLog("log", "at pages/Chat/Chat.vue:1257", "好友列表为空"); + formatAppLog("log", "at pages/Chat/Chat.vue:1253", "好友列表为空"); } } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1260", "获取好友列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1256", "获取好友列表失败:", error); FriendInfoList.value = []; } finally { UserConversations.value = FriendInfoList.value; @@ -6403,17 +6403,17 @@ This will fail in production.`); }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1290", "获取好友头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1286", "获取好友头像失败", err); return friendList; } }; const GroupList = vue.ref([]); const takeGroupList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1300", "开始获取群聊列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1296", "开始获取群聊列表"); GroupList.value = await getGroup(UserId.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1305", "获取群聊列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1301", "获取群聊列表失败:", error); GroupList.value = []; } finally { UserConversations.value = GroupList.value; @@ -6425,22 +6425,22 @@ This will fail in production.`); return []; try { const memberIds = memberList.map((item) => item.groupContactId); - formatAppLog("log", "at pages/Chat/Chat.vue:1319", "请求头像的ID列表:", memberIds); + formatAppLog("log", "at pages/Chat/Chat.vue:1315", "请求头像的ID列表:", memberIds); const memberAvatarList = await getUserAvatar(userToken.value, memberIds); - formatAppLog("log", "at pages/Chat/Chat.vue:1321", "头像接口返回数据:", memberAvatarList); + formatAppLog("log", "at pages/Chat/Chat.vue:1317", "头像接口返回数据:", memberAvatarList); const userMap = new Map(memberAvatarList.map((user) => [user.user_id, user]) || []); - formatAppLog("log", "at pages/Chat/Chat.vue:1324", "userMap的keys:", Array.from(userMap.keys())); + formatAppLog("log", "at pages/Chat/Chat.vue:1320", "userMap的keys:", Array.from(userMap.keys())); return memberList.map((member) => { const memberId = member.groupContactId; const userInfo = userMap.get(memberId); - formatAppLog("log", "at pages/Chat/Chat.vue:1329", `查找 ${memberId} 的头像:`, userInfo); + formatAppLog("log", "at pages/Chat/Chat.vue:1325", `查找 ${memberId} 的头像:`, userInfo); return { ...member, avatar: (userInfo == null ? void 0 : userInfo.avatar) || null }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1336", "获取群成员头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1332", "获取群成员头像失败", err); return memberList; } }; @@ -6487,12 +6487,12 @@ This will fail in production.`); const takeGroupMessages = async () => { try { allmessages.value = await getGroupMessages(currentSessionId.value) || []; - formatAppLog("log", "at pages/Chat/Chat.vue:1400", "群聊消息:", allmessages.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1396", "群聊消息:", allmessages.value); const memberList = await getGroupMemberList(currentSessionId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1403", "获取到的群成员列表:", memberList); + formatAppLog("log", "at pages/Chat/Chat.vue:1399", "获取到的群成员列表:", memberList); if (memberList && memberList.length) { groupMemberList.value = await takeGroupMemberAvatar(memberList); - formatAppLog("log", "at pages/Chat/Chat.vue:1406", "群成员列表(带头像):", groupMemberList.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1402", "群成员列表(带头像):", groupMemberList.value); } else { groupMemberList.value = []; } @@ -6516,9 +6516,9 @@ This will fail in production.`); } }; vue.watch(() => friendSocketStore.MessageReceived, (newId) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1453", "收到了好友消息"); + formatAppLog("log", "at pages/Chat/Chat.vue:1449", "收到了好友消息"); if (newId) { - formatAppLog("log", "at pages/Chat/Chat.vue:1455", "ChatType:", ChatType.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1451", "ChatType:", ChatType.value); switch (ChatType.value) { case 0: takeConversationMessages(); @@ -6533,7 +6533,7 @@ This will fail in production.`); friendSocketStore.MessageReceived = false; break; default: - formatAppLog("log", "at pages/Chat/Chat.vue:1471", "default 分支"); + formatAppLog("log", "at pages/Chat/Chat.vue:1467", "default 分支"); friendSocketStore.MessageReceived = false; break; } @@ -18033,8 +18033,10 @@ This will fail in production.`); return map[status.value] || "处理中..."; }); const displayName = vue.computed(() => fileName.value || "未命名文档"); - const currentSlide = vue.computed(() => slides.value[currentIndex.value] || { html: "" }); const pad = (n2) => String(n2).padStart(2, "0"); + const onSwiperChange = (e2) => { + currentIndex.value = e2.detail.current; + }; const goBack = () => { uni.navigateBack(); }; @@ -18070,18 +18072,18 @@ This will fail in production.`); slides.value = []; currentIndex.value = 0; status.value = "downloading"; - formatAppLog("log", "at pages/WYXD/WYXD.vue:134", "userToken.value", userToken.value); - formatAppLog("log", "at pages/WYXD/WYXD.vue:135", "workspaceId.value", workspaceId.value); - formatAppLog("log", "at pages/WYXD/WYXD.vue:136", "filePath.value", filePath.value); + formatAppLog("log", "at pages/WYXD/WYXD.vue:141", "userToken.value", userToken.value); + formatAppLog("log", "at pages/WYXD/WYXD.vue:142", "workspaceId.value", workspaceId.value); + formatAppLog("log", "at pages/WYXD/WYXD.vue:143", "filePath.value", filePath.value); const tempPath = await downloadWyxdAsZip( userToken.value, workspaceId.value, filePath.value ); - formatAppLog("log", "at pages/WYXD/WYXD.vue:140", "获取到的下载地址:", tempPath); + formatAppLog("log", "at pages/WYXD/WYXD.vue:147", "获取到的下载地址:", tempPath); status.value = "extracting"; const extracted = await extractWyxd(tempPath); - formatAppLog("log", "at pages/WYXD/WYXD.vue:144", "extracted", extracted); + formatAppLog("log", "at pages/WYXD/WYXD.vue:151", "extracted", extracted); status.value = "parsing"; const slideList = parseSlides(extracted.html, extracted.header, extracted.images); if (!slideList || slideList.length === 0) { @@ -18100,7 +18102,7 @@ This will fail in production.`); status.value = "error"; const msg = typeof err === "string" ? err : err.message || "下载失败"; errorMsg.value = msg; - formatAppLog("error", "at pages/WYXD/WYXD.vue:167", "[WYXD] download error:", err); + formatAppLog("error", "at pages/WYXD/WYXD.vue:174", "[WYXD] download error:", err); } }; onLoad((options) => { @@ -18108,8 +18110,8 @@ This will fail in production.`); filePath.value = (options == null ? void 0 : options.filePath) ? decodeURIComponent(options.filePath) : ""; fileName.value = (options == null ? void 0 : options.fileName) ? decodeURIComponent(options.fileName) : "未命名文档"; userToken.value = (options == null ? void 0 : options.userToken) ?? uni.getStorageSync("user_token") ?? ""; - formatAppLog("log", "at pages/WYXD/WYXD.vue:176", "页面接收options原始参数:", options); - formatAppLog("log", "at pages/WYXD/WYXD.vue:177", "最终赋值变量:", { + formatAppLog("log", "at pages/WYXD/WYXD.vue:183", "页面接收options原始参数:", options); + formatAppLog("log", "at pages/WYXD/WYXD.vue:184", "最终赋值变量:", { workspaceId: workspaceId.value, filePath: filePath.value, fileName: fileName.value, @@ -18121,7 +18123,7 @@ This will fail in production.`); startDownload(); } }); - const __returned__ = { workspaceId, filePath, fileName, userToken, slides, currentIndex, status, loading, errorMsg, statusText, displayName, currentSlide, pad, goBack, prevSlide, nextSlide, loadFromCache, startDownload, ref: vue.ref, computed: vue.computed, get onLoad() { + const __returned__ = { workspaceId, filePath, fileName, userToken, slides, currentIndex, status, loading, errorMsg, statusText, displayName, pad, onSwiperChange, goBack, prevSlide, nextSlide, loadFromCache, startDownload, ref: vue.ref, computed: vue.computed, get onLoad() { return onLoad; }, get isWyxdCached() { return isWyxdCached; @@ -18201,16 +18203,34 @@ This will fail in production.`); key: 2, class: "wyxd-slide-area" }, [ - vue.createElementVNode("scroll-view", { - class: "wyxd-slide-scroll", - "scroll-y": "", - "show-scrollbar": false + vue.createElementVNode("swiper", { + class: "wyxd-swiper", + current: $setup.currentIndex, + onChange: $setup.onSwiperChange, + duration: 250, + "easing-function": "easeOutCubic" }, [ - vue.createElementVNode("view", { - class: "wyxd-slide-card", - innerHTML: $setup.currentSlide.html - }, null, 8, ["innerHTML"]) - ]) + (vue.openBlock(true), vue.createElementBlock( + vue.Fragment, + null, + vue.renderList($setup.slides, (slide, idx) => { + return vue.openBlock(), vue.createElementBlock("swiper-item", { key: idx }, [ + vue.createElementVNode("scroll-view", { + class: "wyxd-slide-scroll", + "scroll-y": "", + "show-scrollbar": false + }, [ + vue.createElementVNode("view", { + class: "wyxd-slide-card", + innerHTML: slide.html + }, null, 8, ["innerHTML"]) + ]) + ]); + }), + 128 + /* KEYED_FRAGMENT */ + )) + ], 40, ["current"]) ])) ]), $setup.slides.length > 1 ? (vue.openBlock(), vue.createElementBlock("view", { diff --git a/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css b/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css index 8404fd2..0060a56 100644 --- a/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css +++ b/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css @@ -380,6 +380,10 @@ min-height: 0; /* padding: 20rpx; */ } +.wyxd-swiper[data-v-507487c4] { + width: 100%; + height: 100%; +} .wyxd-slide-scroll[data-v-507487c4] { height: 100%; background: #fff; From 09f4d3ba52176969cec5bffdf1b9ec0b0c807dc8 Mon Sep 17 00:00:00 2001 From: YiLin <482244139@qq.com> Date: Fri, 31 Jul 2026 10:24:55 +0800 Subject: [PATCH 2/5] =?UTF-8?q?wyxd=E4=B8=8E=E8=81=8A=E5=A4=A9=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E5=88=87=E6=8D=A2=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/ChatSidebar.vue | 2 +- manifest.json | 2 +- pages/Chat/Chat.css | 58 +++++ pages/Chat/Chat.vue | 40 ++++ pages/WYXD/WYXD.vue | 3 +- pages/WorkSpace/WorkSpace.vue | 48 +++- .../dist/build/app-plus/app-config-service.js | 4 +- unpackage/dist/build/app-plus/app-service.js | 15 +- unpackage/dist/build/app-plus/manifest.json | 2 +- .../dist/build/app-plus/pages/Chat/Chat.css | 2 +- .../dist/build/app-plus/pages/WYXD/WYXD.css | 1 + .../app-plus/pages/WorkSpace/WorkSpace.css | 2 +- .../dist/build/app-plus/pages/text/text.css | 2 +- unpackage/dist/dev/app-plus/app-service.js | 213 ++++++++++++------ .../dist/dev/app-plus/pages/Chat/Chat.css | 51 +++++ .../dist/dev/app-plus/pages/text/text.css | 51 +++++ 16 files changed, 400 insertions(+), 96 deletions(-) create mode 100644 unpackage/dist/build/app-plus/pages/WYXD/WYXD.css diff --git a/components/ChatSidebar.vue b/components/ChatSidebar.vue index 13c2ab2..ede9aec 100644 --- a/components/ChatSidebar.vue +++ b/components/ChatSidebar.vue @@ -24,7 +24,7 @@ - + 聊天列表 + + 更多聊天列表 diff --git a/manifest.json b/manifest.json index 2812c1e..298fdd7 100644 --- a/manifest.json +++ b/manifest.json @@ -1,5 +1,5 @@ { - "name" : "test1", + "name" : "宇恒一号", "appid" : "__UNI__923FD9E", "description" : "", "versionName" : "1.1.1", diff --git a/pages/Chat/Chat.css b/pages/Chat/Chat.css index 63021be..9280a21 100644 --- a/pages/Chat/Chat.css +++ b/pages/Chat/Chat.css @@ -105,11 +105,13 @@ font-size: 36rpx; font-weight: 700; color: #1a1a2e; + align-items: center; } .ncd-header uni-icons { display: flex; flex-shrink: 0; + align-items: center; } .ncd-options { @@ -325,6 +327,62 @@ color: #ff4d4f; } +/* ==========WYXD 文件入口横幅========== */ +.wyxd-banner { + display: flex; + align-items: center; + padding: 14rpx 24rpx; + margin: 6rpx 20rpx; + background: linear-gradient(135deg, #e8f4fd, #f0e6ff); + border: 1.5rpx solid rgba(120, 120, 220, 0.25); + border-radius: 16rpx; + box-shadow: 0 2rpx 8rpx rgba(100, 100, 200, 0.08); +} + +.wyxd-banner:active { + background: linear-gradient(135deg, #d8eafb, #e6d8ff); + transform: scale(0.98); +} + +.wyxd-banner-icon { + font-size: 32rpx; + color: #6c6ce0; + margin-right: 12rpx; +} + +.wyxd-banner-text { + flex: 1; + font-size: 26rpx; + font-weight: 600; + color: #4a4ab8; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.wyxd-banner-arrow { + font-size: 24rpx; + color: #9999cc; +} + +.wyxd-banner-close { + width: 36rpx; + height: 36rpx; + line-height: 36rpx; + text-align: center; + font-size: 28rpx; + color: #9999cc; + border-radius: 50%; + background: rgba(100, 100, 200, 0.08); + margin-left: 8rpx; + flex-shrink: 0; +} + +.wyxd-banner-close:active { + background: rgba(100, 100, 200, 0.18); + color: #6c6ce0; +} + /* ==========聊天主体部分========== */ .main-chat { display: flex; diff --git a/pages/Chat/Chat.vue b/pages/Chat/Chat.vue index 8e10779..0cbf474 100644 --- a/pages/Chat/Chat.vue +++ b/pages/Chat/Chat.vue @@ -64,6 +64,15 @@ + + + + + 查看: {{ wyxdFileName }} + + × + + @@ -293,6 +302,7 @@ watch } from 'vue'; import { + onLoad, onShow, onUnload } from '@dcloudio/uni-app'; @@ -356,6 +366,13 @@ // 聊天类型(ai,好友,群聊) const ChatType = ref(0) + // WYXD 关联数据(从 WorkSpace 的「AI修改」进入时携带) + const wyxdWorkspaceId = ref('') + const wyxdFilePath = ref('') + const wyxdFileName = ref('') + const wyxdUserToken = ref('') + const hasWyxdFile = ref(false) + // marked.setOptions({ // breaks: true, // 自动把换行符转成
换行 @@ -621,6 +638,17 @@ }) } + // 跳转到 WYXD 查看器(强制重新下载,不走缓存) + const goWyxdViewer = () => { + uni.navigateTo({ + url: '/pages/WYXD/WYXD?workspaceId=' + encodeURIComponent(wyxdWorkspaceId.value) + + '&filePath=' + encodeURIComponent(wyxdFilePath.value) + + '&fileName=' + encodeURIComponent(wyxdFileName.value) + + '&userToken=' + encodeURIComponent(wyxdUserToken.value) + + '&forceDownload=1' + }) + } + // 跳转到云端数据库 const goCloudDatabase = () => { // 保存当前会话id,确保从工作区返回时能恢复 @@ -1480,6 +1508,7 @@ if (oldId && oldId !== newId) { isLoadingMessages.value = true allmessages.value = [] + hasWyxdFile.value = false } switch (ChatType.value) { case 0: @@ -1503,6 +1532,17 @@ immediate: true }) + // 接收 WYXD 参数(从工作区「AI修改」进入时由 navigateTo 传入) + onLoad((options) => { + if (options.wyxdFilePath) { + wyxdWorkspaceId.value = options.wyxdWorkspaceId ? decodeURIComponent(options.wyxdWorkspaceId) : '' + wyxdFilePath.value = decodeURIComponent(options.wyxdFilePath) + wyxdFileName.value = options.wyxdFileName ? decodeURIComponent(options.wyxdFileName) : '未命名文档' + wyxdUserToken.value = options.wyxdUserToken ? decodeURIComponent(options.wyxdUserToken) : '' + hasWyxdFile.value = true + } + }) + onMounted(() => { // currentSessionId.value = getCurrentSessionId() }) diff --git a/pages/WYXD/WYXD.vue b/pages/WYXD/WYXD.vue index 81dd446..2f78bf9 100644 --- a/pages/WYXD/WYXD.vue +++ b/pages/WYXD/WYXD.vue @@ -188,7 +188,8 @@ onLoad((options) => { userToken: userToken.value }) - if (isWyxdCached(workspaceId.value, filePath.value)) { + // forceDownload 强制重新下载不走缓存 + if (options.forceDownload !== '1' && isWyxdCached(workspaceId.value, filePath.value)) { loadFromCache() } else { startDownload() diff --git a/pages/WorkSpace/WorkSpace.vue b/pages/WorkSpace/WorkSpace.vue index 13b431b..9477c83 100644 --- a/pages/WorkSpace/WorkSpace.vue +++ b/pages/WorkSpace/WorkSpace.vue @@ -284,20 +284,35 @@ const handleLongPress = (folder) => { if (isSelectFolder.value) return; const isWyxd = folder.name && folder.name.toLowerCase().endsWith('.wyxd'); - const itemList = isWyxd ? ['下载', '删除', 'WYXD查看器'] : ['下载', '删除']; + const itemList = isWyxd ? ['下载', '删除', 'WYXD查看器', 'AI修改'] : ['下载', '删除']; uni.showActionSheet({ + title: folder.name, itemList: itemList, success: (res) => { - switch (res.tapIndex) { - case 0: - handleDownload(folder); - break; - case 1: - handleDelete(folder); - break; - case 2: - if (isWyxd) openWyxdViewer(folder); - break; + if (isWyxd) { + switch (res.tapIndex) { + case 0: + handleDownload(folder); + break; + case 1: + handleDelete(folder); + break; + case 2: + openWyxdViewer(folder); + break; + case 3: // 'AI修改', + handleAiModify(folder); + break; + } + } else { + switch (res.tapIndex) { + case 0: + handleDownload(folder); + break; + case 1: + handleDelete(folder); + break; + } } } }) @@ -472,6 +487,17 @@ }); }; + // AI修改入口:跳转对话页并传入 WYXD 信息 + const handleAiModify = (folder) => { + const filePath = folder.path.startsWith('./') ? folder.path.slice(2) : folder.path; + uni.navigateTo({ + url: '/pages/Chat/Chat?wyxdWorkspaceId=' + encodeURIComponent(workspaceId.value) + + '&wyxdFilePath=' + encodeURIComponent(filePath) + + '&wyxdFileName=' + encodeURIComponent(folder.name) + + '&wyxdUserToken=' + encodeURIComponent(UserToken.value) + }); + }; + // 删除 const handleDelete = (folder) => { uni.showModal({ diff --git a/unpackage/dist/build/app-plus/app-config-service.js b/unpackage/dist/build/app-plus/app-config-service.js index 7333a4e..a92dbeb 100644 --- a/unpackage/dist/build/app-plus/app-config-service.js +++ b/unpackage/dist/build/app-plus/app-config-service.js @@ -1,8 +1,8 @@ ;(function(){ let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[]; - const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"test1","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"5.07","entryPagePath":"pages/Login/Login","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}}; - const __uniRoutes = [{"path":"pages/Login/Login","meta":{"isQuit":true,"isEntry":true,"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"登录页面","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/Chat/Chat","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"聊天页面(主页面)","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/WorkSpace/WorkSpace","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"工作区文件管理","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/UserProfileModal/UserProfileModal","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/ContactPages/ContactPages","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/WorkSpace/TemplateSpace/TemplateSpace","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/CloudDatabase/CloudDatabase","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"云端数据","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/CloudDbDetail/CloudDbDetail","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"数据库详情","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/text/text","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}},{"path":"pages/text/IntuitiveAipptViewer","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute)); + const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"宇恒一号","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"5.07","entryPagePath":"pages/Login/Login","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}}; + const __uniRoutes = [{"path":"pages/Login/Login","meta":{"isQuit":true,"isEntry":true,"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"登录页面","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/Chat/Chat","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"聊天页面(主页面)","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/WorkSpace/WorkSpace","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"工作区文件管理","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/UserProfileModal/UserProfileModal","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/ContactPages/ContactPages","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/WorkSpace/TemplateSpace/TemplateSpace","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/CloudDatabase/CloudDatabase","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"云端数据","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/CloudDbDetail/CloudDbDetail","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"数据库详情","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/text/text","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}},{"path":"pages/text/IntuitiveAipptViewer","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}},{"path":"pages/WYXD/WYXD","meta":{"titleNView":false,"bounce":"none","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute)); __uniConfig.styles=[];//styles __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); __uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); diff --git a/unpackage/dist/build/app-plus/app-service.js b/unpackage/dist/build/app-plus/app-service.js index 41c8bd9..1b4beb1 100644 --- a/unpackage/dist/build/app-plus/app-service.js +++ b/unpackage/dist/build/app-plus/app-service.js @@ -1,7 +1,18 @@ -if("undefined"==typeof Promise||Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then((a=>t.resolve(e()).then((()=>a))),(a=>t.resolve(e()).then((()=>{throw a}))))}),"undefined"!=typeof uni&&uni&&uni.requireGlobal){const e=uni.requireGlobal();ArrayBuffer=e.ArrayBuffer,Int8Array=e.Int8Array,Uint8Array=e.Uint8Array,Uint8ClampedArray=e.Uint8ClampedArray,Int16Array=e.Int16Array,Uint16Array=e.Uint16Array,Int32Array=e.Int32Array,Uint32Array=e.Uint32Array,Float32Array=e.Float32Array,Float64Array=e.Float64Array,BigInt64Array=e.BigInt64Array,BigUint64Array=e.BigUint64Array}uni.restoreGlobal&&uni.restoreGlobal(Vue,weex,plus,setTimeout,clearTimeout,setInterval,clearInterval),function(e){"use strict";function t(e,t,...a){uni.__log__?uni.__log__(e,t,...a):console[e].apply(console,[...a,t])}function a(e,t){return"string"==typeof e?t:e}const n=(t,a=0)=>(a,n=e.getCurrentInstance())=>{!e.isInSSRComponentSetup&&e.injectHook(t,a,n)},l=n("onShow",3),o=n("onUnload",2),s="https://cloud.yuxindazhineng.com",i=async e=>new Promise(((t,a)=>{uni.request({url:`${s}/get_user_conversations`,method:"POST",data:{access_token:e},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const a=e.data.conversations;t(a)}else a(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),c=async(e,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/get_conversation_messages`,method:"POST",data:{access_token:e,login_type:"phone",conversation_id:a},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const a=e.data;if(a){t("log","at utils/cloud-api.js:93","工作区id为:",a.workspace_id||"(无)"),a.workspace_id&&uni.setStorageSync("workspace_id",a.workspace_id);const e=(a.messages||[]).filter((e=>"tool"!==e.role));n(e)}else{const t=e.data.error||"获取消息出错啦";l(t)}}else l(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})),r=async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/create_workspace`,method:"POST",data:{access_token:e,name:t},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.workspace_id;if(t)a(t);else{const t=e.data.error||"创建工作区id出错啦";n(t)}}else n(`创建工作区id失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),u=async(e,t,a,n)=>new Promise(((l,o)=>{uni.request({url:`${s}/create_conversation`,method:"POST",data:{access_token:e,workspace_id:t,title:a,sender:n},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.conversation_id;if(t)l(t);else{const t=e.data.error||"创建新对话id出错啦";o(t)}}else o(`创建新对话失败:${e.statusCode}`)}})})),d=async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/delete_conversation`,method:"POST",data:{access_token:e,conversation_ids:t},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)a(t.message);else{const e=t.failed_ids.error||"删除对话出错啦";n(e)}}else n(`删除对话失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),p=async e=>new Promise(((t,a)=>{uni.request({url:`${s}/get_user_info`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e},success:e=>{var n,l;if(200===e.statusCode){const o=e.data;if(null==o?void 0:o._id)uni.setStorageSync("userId",o._id),t(o);else{const e=(null==(l=null==(n=null==o?void 0:o.detail)?void 0:n[0])?void 0:l.msg)||"获取用户信息出错啦";a(e)}}else a(`获取用户信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),m=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/get_user_avatar`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,user_ids:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"获取用户头像出错啦";n(e)}}else n(`获取用户头像失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),v=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/search_users`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,keyword:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"通过用户名或邮箱来去查询用户出错啦";n(e)}}else n(`通过用户名或邮箱来去查询用户失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),h=(e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/phone/workspace/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,file_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"删除工作区文件出错啦";l(e)}}else l(`删除工作区文件失败:${e.statusCode}`)}})})),g=(e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/phone/workspace/create`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,dir_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"创建工作区文件夹出错啦";l(e)}}else l(`创建工作区文件夹失败:${e.statusCode}`)}})})),f=(e,t,a="/",n="")=>new Promise(((l,o)=>{uni.request({url:`${s}/cloud_api/file/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,path:a,type:t,team_id:n},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)l(t.data);else{const e=(null==t?void 0:t.error)||"获取工作区文件目录出错啦";o(e)}}else o(`获取工作区文件目录失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})),w=async e=>new Promise(((t,a)=>{uni.request({url:`${s}/cloud_api/team/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_name:""},success:e=>{if(200===e.statusCode){const n=e.data;if(n.success){const e=n.teams.slice(1);t(e)}else{const t=e.data.error||"获取用户可访问的团队列表出错啦";a(t)}}else a(`获取用户可访问的团队列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),k=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/team/get_all_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t},success:e=>{var t;if(200===e.statusCode){const l=e.data;if(l.success){const e=(null==(t=l.team)?void 0:t.result)||[];a(e)}else{const e=(null==l?void 0:l.error)||"获取团队全部成员出错啦";n(e)}}else n(`获取团队全部成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),y=(e,t,a,n)=>new Promise(((l,o)=>{const i={access_token:e,database_id:t};"user_id"===a?i.user_id=n:"team_id"===a&&(i.team_id=n),uni.request({url:`${s}/cloud_api/database/permission/info`,method:"POST",data:i,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)l(t.data);else if(Array.isArray(t))l(t);else{const e=(null==t?void 0:t.error)||"查看 个人/团队 数据库权限信息出错啦";o(e)}}else o(`查看 个人/团队 数据库权限信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})),E=(e,a,n)=>new Promise(((l,o)=>{uni.request({url:`${s}/cloud_api/phone/conversation/message/download`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspace_id:a,url:n},success:e=>{if(200===e.statusCode){const a=e.data;if(t("log","at utils/cloud-api.js:1703",a),a.local_success)l(a.url||a.download_url||a.data||a);else{o("下载消息文件出错啦")}}else o(`下载消息文件失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})),C=(e,t)=>{const a=e.__vccOpts||e;for(const[n,l]of t)a[n]=l;return a},N=C({__name:"Login",setup(a){const n=e.ref(""),l=e.ref(!1),o=e.ref(!1),i=()=>{l.value=!0,f.value=!1},c=()=>{l.value=!1},r=()=>{},u=e.ref(""),d=e.ref(!1),p=e.ref(!1),m=()=>{d.value=!0,f.value=!1},v=()=>{d.value=!1},h=e.reactive({username:e.computed((()=>n.value)),password:e.computed((()=>u.value)),remember:!0}),g=e.ref(!1),f=e.ref(!1),w=async()=>{if(k(),!f.value){g.value=!0;try{t("log","at pages/Login/Login.vue:119","有返回token:",await(async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/login`,method:"POST",data:{username:e,password:t,login_type:"phone"},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.access_token;if(t)uni.setStorageSync("token",t),a(t);else{const t=e.data.error||"检查用户名和密码";n(t)}}else String(e.statusCode).startsWith("5")?n({serverError:!0,code:e.statusCode,message:"服务器升级中,请稍后再试"}):n(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(n.value,u.value)),y(),uni.reLaunch({url:"/pages/Chat/Chat"})}catch(e){t("log","at pages/Login/Login.vue:125","登录失败",e),e&&"object"==typeof e&&e.serverError?uni.showModal({title:"提示",content:e.message,showCancel:!1,confirmText:"知道了"}):uni.showToast({title:(null==e?void 0:e.message)||e||"失败",icon:"error"})}finally{g.value=!1}}},k=()=>{n.value&&u.value||(f.value=!0)},y=()=>{if(h.remember){const e={username:h.username,password:h.password,remember:!0};uni.setStorageSync("login_info",e),uni.setStorageSync("chatType",0)}else uni.removeStorageSync("login_info")};return e.onMounted((()=>{(()=>{try{const e=uni.getStorageSync("login_info");e&&(n.value=e.username||"",u.value=e.password||"",h.remember=e.remember??!0)}catch(e){t("error","at pages/Login/Login.vue:178","读取登录信息失败",e)}})()})),(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"login-container page-container"},[e.createElementVNode("view",{class:"login-card"},[e.createElementVNode("view",{class:"login-header"},[e.createElementVNode("view",{class:"login-header-logo"},[e.createElementVNode("view",{class:"icon-wrapper"},[e.createElementVNode("view",{class:"iconfont icon-brain-2-fill danao-style"})]),e.createElementVNode("text",null,"YXD")]),e.createElementVNode("view",{class:"sub-title"},"File Handling Chat")]),e.createElementVNode("view",{class:"form-wrapper"},[e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"用户名")]),e.withDirectives(e.createElementVNode("input",{class:e.normalizeClass(["form-input",{focused:l.value,error:o.value}]),"onUpdate:modelValue":a[0]||(a[0]=e=>n.value=e),onFocus:i,onBlur:c,onInput:r,placeholder:"请输入用户名"},null,34),[[e.vModelText,n.value]])]),e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"密码")]),e.withDirectives(e.createElementVNode("input",{type:"password",class:e.normalizeClass(["form-input",{focused:d.value,error:p.value}]),"onUpdate:modelValue":a[1]||(a[1]=e=>u.value=e),onFocus:m,onBlur:v,placeholder:"请输入密码"},null,34),[[e.vModelText,u.value]])]),f.value?(e.openBlock(),e.createElementBlock("text",{key:0,class:"error-info"},"用户名或密码不能为空")):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"form-option"},[e.createElementVNode("view",{class:"checkbox-wrapper",onClick:a[2]||(a[2]=e=>h.remember=!h.remember)},[e.createElementVNode("view",{class:e.normalizeClass(["checkbox",{checked:h.remember}])},[h.remember?(e.openBlock(),e.createElementBlock("text",{key:0},"✓")):e.createCommentVNode("",!0)],2),e.createElementVNode("text",{class:"checkbox-text"},"记住密码")]),e.createElementVNode("text",{class:"forget-pwd"},"忘记密码?")]),e.createElementVNode("button",{class:"login-btn",disabled:g.value,loading:g.value,onClick:w},e.toDisplayString(g.value?"Loading...":"登录"),9,["disabled","loading"])])])])],64))}},[["__scopeId","data-v-1f1e3d89"]]),V=[{font_class:"arrow-down",unicode:""},{font_class:"arrow-left",unicode:""},{font_class:"arrow-right",unicode:""},{font_class:"arrow-up",unicode:""},{font_class:"auth",unicode:""},{font_class:"auth-filled",unicode:""},{font_class:"back",unicode:""},{font_class:"bars",unicode:""},{font_class:"calendar",unicode:""},{font_class:"calendar-filled",unicode:""},{font_class:"camera",unicode:""},{font_class:"camera-filled",unicode:""},{font_class:"cart",unicode:""},{font_class:"cart-filled",unicode:""},{font_class:"chat",unicode:""},{font_class:"chat-filled",unicode:""},{font_class:"chatboxes",unicode:""},{font_class:"chatboxes-filled",unicode:""},{font_class:"chatbubble",unicode:""},{font_class:"chatbubble-filled",unicode:""},{font_class:"checkbox",unicode:""},{font_class:"checkbox-filled",unicode:""},{font_class:"checkmarkempty",unicode:""},{font_class:"circle",unicode:""},{font_class:"circle-filled",unicode:""},{font_class:"clear",unicode:""},{font_class:"close",unicode:""},{font_class:"closeempty",unicode:""},{font_class:"cloud-download",unicode:""},{font_class:"cloud-download-filled",unicode:""},{font_class:"cloud-upload",unicode:""},{font_class:"cloud-upload-filled",unicode:""},{font_class:"color",unicode:""},{font_class:"color-filled",unicode:""},{font_class:"compose",unicode:""},{font_class:"contact",unicode:""},{font_class:"contact-filled",unicode:""},{font_class:"down",unicode:""},{font_class:"bottom",unicode:""},{font_class:"download",unicode:""},{font_class:"download-filled",unicode:""},{font_class:"email",unicode:""},{font_class:"email-filled",unicode:""},{font_class:"eye",unicode:""},{font_class:"eye-filled",unicode:""},{font_class:"eye-slash",unicode:""},{font_class:"eye-slash-filled",unicode:""},{font_class:"fire",unicode:""},{font_class:"fire-filled",unicode:""},{font_class:"flag",unicode:""},{font_class:"flag-filled",unicode:""},{font_class:"folder-add",unicode:""},{font_class:"folder-add-filled",unicode:""},{font_class:"font",unicode:""},{font_class:"forward",unicode:""},{font_class:"gear",unicode:""},{font_class:"gear-filled",unicode:""},{font_class:"gift",unicode:""},{font_class:"gift-filled",unicode:""},{font_class:"hand-down",unicode:""},{font_class:"hand-down-filled",unicode:""},{font_class:"hand-up",unicode:""},{font_class:"hand-up-filled",unicode:""},{font_class:"headphones",unicode:""},{font_class:"heart",unicode:""},{font_class:"heart-filled",unicode:""},{font_class:"help",unicode:""},{font_class:"help-filled",unicode:""},{font_class:"home",unicode:""},{font_class:"home-filled",unicode:""},{font_class:"image",unicode:""},{font_class:"image-filled",unicode:""},{font_class:"images",unicode:""},{font_class:"images-filled",unicode:""},{font_class:"info",unicode:""},{font_class:"info-filled",unicode:""},{font_class:"left",unicode:""},{font_class:"link",unicode:""},{font_class:"list",unicode:""},{font_class:"location",unicode:""},{font_class:"location-filled",unicode:""},{font_class:"locked",unicode:""},{font_class:"locked-filled",unicode:""},{font_class:"loop",unicode:""},{font_class:"mail-open",unicode:""},{font_class:"mail-open-filled",unicode:""},{font_class:"map",unicode:""},{font_class:"map-filled",unicode:""},{font_class:"map-pin",unicode:""},{font_class:"map-pin-ellipse",unicode:""},{font_class:"medal",unicode:""},{font_class:"medal-filled",unicode:""},{font_class:"mic",unicode:""},{font_class:"mic-filled",unicode:""},{font_class:"micoff",unicode:""},{font_class:"micoff-filled",unicode:""},{font_class:"minus",unicode:""},{font_class:"minus-filled",unicode:""},{font_class:"more",unicode:""},{font_class:"more-filled",unicode:""},{font_class:"navigate",unicode:""},{font_class:"navigate-filled",unicode:""},{font_class:"notification",unicode:""},{font_class:"notification-filled",unicode:""},{font_class:"paperclip",unicode:""},{font_class:"paperplane",unicode:""},{font_class:"paperplane-filled",unicode:""},{font_class:"person",unicode:""},{font_class:"person-filled",unicode:""},{font_class:"personadd",unicode:""},{font_class:"personadd-filled",unicode:""},{font_class:"personadd-filled-copy",unicode:""},{font_class:"phone",unicode:""},{font_class:"phone-filled",unicode:""},{font_class:"plus",unicode:""},{font_class:"plus-filled",unicode:""},{font_class:"plusempty",unicode:""},{font_class:"pulldown",unicode:""},{font_class:"pyq",unicode:""},{font_class:"qq",unicode:""},{font_class:"redo",unicode:""},{font_class:"redo-filled",unicode:""},{font_class:"refresh",unicode:""},{font_class:"refresh-filled",unicode:""},{font_class:"refreshempty",unicode:""},{font_class:"reload",unicode:""},{font_class:"right",unicode:""},{font_class:"scan",unicode:""},{font_class:"search",unicode:""},{font_class:"settings",unicode:""},{font_class:"settings-filled",unicode:""},{font_class:"shop",unicode:""},{font_class:"shop-filled",unicode:""},{font_class:"smallcircle",unicode:""},{font_class:"smallcircle-filled",unicode:""},{font_class:"sound",unicode:""},{font_class:"sound-filled",unicode:""},{font_class:"spinner-cycle",unicode:""},{font_class:"staff",unicode:""},{font_class:"staff-filled",unicode:""},{font_class:"star",unicode:""},{font_class:"star-filled",unicode:""},{font_class:"starhalf",unicode:""},{font_class:"trash",unicode:""},{font_class:"trash-filled",unicode:""},{font_class:"tune",unicode:""},{font_class:"tune-filled",unicode:""},{font_class:"undo",unicode:""},{font_class:"undo-filled",unicode:""},{font_class:"up",unicode:""},{font_class:"top",unicode:""},{font_class:"upload",unicode:""},{font_class:"upload-filled",unicode:""},{font_class:"videocam",unicode:""},{font_class:"videocam-filled",unicode:""},{font_class:"vip",unicode:""},{font_class:"vip-filled",unicode:""},{font_class:"wallet",unicode:""},{font_class:"wallet-filled",unicode:""},{font_class:"weibo",unicode:""},{font_class:"weixin",unicode:""}];const b=C({name:"UniIcons",emits:["click"],props:{type:{type:String,default:""},color:{type:String,default:"#333333"},size:{type:[Number,String],default:16},customPrefix:{type:String,default:""},fontFamily:{type:String,default:""}},data:()=>({icons:V}),computed:{unicode(){let e=this.icons.find((e=>e.font_class===this.type));return e?e.unicode:""},iconSize(){return"number"==typeof(e=this.size)||/^[0-9]*$/g.test(e)?e+"px":e;var e},styleObj(){return""!==this.fontFamily?`color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`:`color: ${this.color}; font-size: ${this.iconSize};`}},methods:{_onClick(e){this.$emit("click",e)}}},[["render",function(t,a,n,l,o,s){return e.openBlock(),e.createElementBlock("text",{style:e.normalizeStyle(s.styleObj),class:e.normalizeClass(["uni-icons",["uniui-"+n.type,n.customPrefix,n.customPrefix?n.type:""]]),onClick:a[0]||(a[0]=(...e)=>s._onClick&&s._onClick(...e))},[e.renderSlot(t.$slots,"default",{},void 0,!0)],6)}],["__scopeId","data-v-b25a9929"]]),_=()=>uni.getStorageSync("token"),B=()=>{const e=uni.getStorageSync("currentSessionId");return isNaN(Number(e))?e.replace(/-/g,""):e},S=()=>(t("log","at utils/user-info.js:50","用户Id(UserId)",uni.getStorageSync("userId")),uni.getStorageSync("userId")),x=()=>uni.getStorageSync("chatType"),T=()=>uni.getStorageSync("receiverId"),D=C(Object.assign({name:"ChatSidebar"},{__name:"ChatSidebar",props:{chatList:{type:Array,required:!0},showNewChatModal:{type:Boolean,default:!1},currentSessionId:{type:[String,Number],required:!0},chatType:{type:Number,required:!0}},emits:["update:showNewChatModal","update:currentSessionId","refresh-conversations","update:chatType"],setup(n,{emit:l}){const o=n,s=l,i=e.toRef(o,"chatList");e.toRef(o,"showNewChatModal");const c=e.toRef(o,"chatType"),r=()=>{uni.navigateTo({url:"/pages/UserProfileModal/UserProfileModal"})},u=e.ref(!1),m=e.ref([]),v=()=>{0!==m.value.length&&uni.showModal({title:"确认删除",content:`确定要删除全部 ${m.value.length} 个对话吗?此操作不可恢复。`,confirmText:"确认删除",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=_();await d(e,m.value),uni.showToast({title:"删除成功",icon:"success"}),m.value=[],u.value=!1,s("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:209","删除会话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}})},h=()=>{i.value.length?uni.showModal({title:"确认删除",content:`确定要删除全部 ${i.value.length} 个对话吗?此操作不可恢复。`,confirmText:"删除全部",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=_(),t=i.value.map((e=>e._id));await d(e,t),uni.showToast({title:"已删除全部对话",icon:"success"}),s("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:241","清空全部对话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}}):uni.showToast({title:"没有可删除的会话",icon:"none"})},g=e.computed((()=>i.value.length>0&&m.value.length===i.value.length)),f=e.toRef(o,"currentSessionId"),w=(e,a="")=>{t("log","at components/ChatSidebar.vue:259","选择的id是:",e),a&&uni.setStorageSync("receiverId",a),uni.setStorageSync("currentSessionId",e),s("update:currentSessionId",e)},k=()=>{t("log","at components/ChatSidebar.vue:270","点击了新建会话"),s("update:showNewChatModal",!0)},y=()=>{uni.navigateTo({url:"/pages/ContactPages/ContactPages"})},E=e.ref(""),C=e.ref(!1),N=()=>{u.value=!u.value,u.value||(m.value=[])},V=e=>{const t=m.value.indexOf(e);-1===t?m.value.push(e):m.value.splice(t,1)},B=()=>{g.value?m.value=[]:m.value=i.value.map((e=>e._id))},S=e.ref(""),x=e.ref(""),T=e.ref(""),D=(e,t=20)=>e?e.length>t?e.substring(0,t)+"...":e:"";return e.onMounted((async()=>{S.value=_();const e=await p(S.value);x.value=e.avatar||"",T.value=e.username||"",t("log","at components/ChatSidebar.vue:326","菜单收到的会话列表:",i.value)})),(t,n)=>{const l=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock("view",{class:"chat-sidebar-container"},[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"sidebar-header"},[e.createElementVNode("view",{class:"user-profile-card",onClick:r},[e.createElementVNode("view",{class:"left"},[x.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"avatar-preview"},[e.createElementVNode("image",{src:x.value,mode:"aspectFill"},null,8,["src"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"avatar-placeholder"},[e.createVNode(l,{type:"contact-filled",size:"50",color:"#007aff"})]))]),e.createElementVNode("view",{class:"center"},[e.createElementVNode("text",null,"欢迎回来"),e.createElementVNode("text",null,e.toDisplayString(T.value),1)]),e.createElementVNode("view",{class:"right"},[e.createElementVNode("view",{class:"status-dot"}),e.createElementVNode("view",{class:"status-text"},[e.createElementVNode("text",null,"在线")])])]),e.createElementVNode("view",{class:"new-chat-btn",onClick:y},[e.createElementVNode("text",null,"+ 聊天列表")])]),e.createElementVNode("view",{class:"chat-history"},[e.createElementVNode("view",{class:"history-header"},[e.createElementVNode("view",{class:"history-title-section"},[e.createElementVNode("text",null,"历史会话"),e.createElementVNode("text",null,e.toDisplayString(i.value.length)+"个对话",1)]),e.createElementVNode("view",{class:"history-management"},[u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-management-btn iconfont icon-jia icon-jia-style",onClick:k})),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:1,class:"history-management-btn iconfont icon-duoxuan icon-duoxuan-style",onClick:N})),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:2,class:"history-management-btn iconfont icon-saochu icon-saochu-style",onClick:h})),u.value&&m.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:3,class:"history-management-btn iconfont icon-shanchu icon-shanchu-style",onClick:v})):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:e.normalizeClass(["history-management-btn iconfont icon-total_selection icon-total_selection-style",{active:g.value}]),onClick:B},null,2)):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("view",{key:5,class:"history-management-btn iconfont icon-quxiao icon-quxiao-style",onClick:N})):e.createCommentVNode("",!0)])]),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-search-wrap"},[e.createElementVNode("view",{class:e.normalizeClass(["history-search-inner",{"has-value":E.value||C.value}])},[e.createVNode(l,{type:"search",class:e.normalizeClass([E.value||C.value?"chat-search-icon":"search-icon"])},null,8,["class"]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[0]||(n[0]=e=>E.value=e),onFocus:n[1]||(n[1]=e=>C.value=!0),onBlur:n[2]||(n[2]=e=>C.value=!1),type:"text",placeholder:"搜索会话..."},null,544),[[e.vModelText,E.value]])],2)])),e.createElementVNode("view",{class:"chat-history-list"},[0===c.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,(t=>{var a;return e.openBlock(),e.createElementBlock("view",{key:t._id,"data-chat-id":t._id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":f.value===t._id||m.value.includes(t._id)}]),onClick:e=>u.value?V(t._id):w(t._id)},[u.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[m.value.includes(t._id)?(e.openBlock(),e.createBlock(l,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createVNode(l,{type:"chat-filled",size:"26",color:"#007aff"})]),t.agent_id?(e.openBlock(),e.createElementBlock("view",{key:1},e.toDisplayString(D(null==(a=t.agent_data)?void 0:a.title)||"加载中"),1)):(e.openBlock(),e.createElementBlock("view",{key:2},e.toDisplayString(D(t.title)),1))],10,["data-chat-id","onClick"])})),128)):e.createCommentVNode("",!0),1===c.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(i.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.sessionId,"data-chat-id":t.sessionId,class:e.normalizeClass(["chat-history-card",{"is-select-chat":f.value===t.sessionId||m.value.includes(t.sessionId)}]),onClick:e=>u.value?V(t.sessionId):w(t.sessionId,t.receiver)},[u.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[m.value.includes(t.sessionId)?(e.openBlock(),e.createBlock(l,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("view",null,e.toDisplayString(t.friendNickName),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0),2===c.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(i.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.id,"data-chat-id":t.id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":f.value===t.id||m.value.includes(t.id)}]),onClick:e=>u.value?V(t.id):w(t.id)},[u.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[m.value.includes(t.id)?(e.openBlock(),e.createBlock(l,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createElementVNode("view",{class:"iconfont icon-qunliao",style:{"font-size":"80rpx",color:"#fff"}})]),e.createElementVNode("view",null,e.toDisplayString(t.name),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0)])])])}}}),[["__scopeId","data-v-eed4c646"]]);var P={"":["",""],_:["",""],"*":["",""],"~":["",""],"\n":["
"]," ":["
"],"-":["
"]};function $(e){return e.replace(RegExp("^"+(e.match(/^(\t| )+/)||"")[0],"gm"),"")}function j(e){return(e+"").replace(/"/g,""").replace(//g,">")}function M(e,t){var a,n,l,o,s,i=/((?:^|\n+)(?:\n---+|\* \*(?: \*)+)\n)|(?:^``` *(\w*)\n([\s\S]*?)\n```$)|((?:(?:^|\n+)(?:\t| {2,}).+)+\n*)|((?:(?:^|\n)([>*+-]|\d+\.)\s+.*)+)|(?:!\[([^\]]*?)\]\(([^)]+?)\))|(\[)|(\](?:\(([^)]+?)\))?)|(?:(?:^|\n+)([^\s].*)\n(-{3,}|={3,})(?:\n+|$))|(?:(?:^|\n+)(#{1,6})\s*(.+)(?:\n+|$))|(?:`([^`].*?)`)|( \n\n*|\n{2,}|__|\*\*|[_*]|~~)/gm,c=[],r="",u=t||{},d=0;function p(e){var t=P[e[1]||""],a=c[c.length-1]==e;return t?t[1]?(a?c.pop():c.push(e),t[0|a]):t[0]:e}function m(){for(var e="";c.length;)e+=p(c[c.length-1]);return e}for(e=e.replace(/^\[(.+?)\]:\s*(.+)$/gm,(function(e,t,a){return u[t.toLowerCase()]=a,""})).replace(/^\n+|\n+$/g,"");l=i.exec(e);)n=e.substring(d,l.index),d=i.lastIndex,a=l[0],n.match(/[^\\](\\\\)*\\$/)||((s=l[3]||l[4])?a='
"+$(j(s).replace(/^\n+|\n+$/g,""))+"
":(s=l[6])?(s.match(/\./)&&(l[5]=l[5].replace(/^\d+/gm,"")),o=M($(l[5].replace(/^\s*[>*+.-]/gm,""))),">"==s?s="blockquote":(s=s.match(/\./)?"ol":"ul",o=o.replace(/^(.*)(\n|$)/gm,"
  • $1
  • ")),a="<"+s+">"+o+""):l[8]?a=''+j(l[7])+'':l[10]?(r=r.replace("",''),a=m()+""):l[9]?a="":l[12]||l[14]?a="<"+(s="h"+(l[14]?l[14].length:l[13]>"="?1:2))+">"+M(l[12]||l[15],u)+"":l[16]?a=""+j(l[16])+"":(l[17]||l[1])&&(a=p(l[17]||"--"))),r+=n,r+=a;return(r+e.substring(d)+m()).replace(/^\n+|\n+$/g,"")} +if("undefined"==typeof Promise||Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then((a=>t.resolve(e()).then((()=>a))),(a=>t.resolve(e()).then((()=>{throw a}))))}),"undefined"!=typeof uni&&uni&&uni.requireGlobal){const e=uni.requireGlobal();ArrayBuffer=e.ArrayBuffer,Int8Array=e.Int8Array,Uint8Array=e.Uint8Array,Uint8ClampedArray=e.Uint8ClampedArray,Int16Array=e.Int16Array,Uint16Array=e.Uint16Array,Int32Array=e.Int32Array,Uint32Array=e.Uint32Array,Float32Array=e.Float32Array,Float64Array=e.Float64Array,BigInt64Array=e.BigInt64Array,BigUint64Array=e.BigUint64Array}uni.restoreGlobal&&uni.restoreGlobal(Vue,weex,plus,setTimeout,clearTimeout,setInterval,clearInterval),function(e){"use strict";function t(e,t,...a){uni.__log__?uni.__log__(e,t,...a):console[e].apply(console,[...a,t])}function a(e,t){return"string"==typeof e?t:e}const n=(t,a=0)=>(a,n=e.getCurrentInstance())=>{!e.isInSSRComponentSetup&&e.injectHook(t,a,n)},s=n("onShow",3),o=n("onLoad",2),i=n("onUnload",2),r="https://cloud.yuxindazhineng.com",l=async e=>new Promise(((t,a)=>{uni.request({url:`${r}/get_user_conversations`,method:"POST",data:{access_token:e},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const a=e.data.conversations;t(a)}else a(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),c=async(e,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/get_conversation_messages`,method:"POST",data:{access_token:e,login_type:"phone",conversation_id:a},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const a=e.data;if(a){t("log","at utils/cloud-api.js:93","工作区id为:",a.workspace_id||"(无)"),a.workspace_id&&uni.setStorageSync("workspace_id",a.workspace_id);const e=(a.messages||[]).filter((e=>"tool"!==e.role));n(e)}else{const t=e.data.error||"获取消息出错啦";s(t)}}else s(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})),u=async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/create_workspace`,method:"POST",data:{access_token:e,name:t},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.workspace_id;if(t)a(t);else{const t=e.data.error||"创建工作区id出错啦";n(t)}}else n(`创建工作区id失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),d=async(e,t,a,n)=>new Promise(((s,o)=>{uni.request({url:`${r}/create_conversation`,method:"POST",data:{access_token:e,workspace_id:t,title:a,sender:n},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.conversation_id;if(t)s(t);else{const t=e.data.error||"创建新对话id出错啦";o(t)}}else o(`创建新对话失败:${e.statusCode}`)}})})),p=async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/delete_conversation`,method:"POST",data:{access_token:e,conversation_ids:t},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)a(t.message);else{const e=t.failed_ids.error||"删除对话出错啦";n(e)}}else n(`删除对话失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),h=async e=>new Promise(((t,a)=>{uni.request({url:`${r}/get_user_info`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e},success:e=>{var n,s;if(200===e.statusCode){const o=e.data;if(null==o?void 0:o._id)uni.setStorageSync("userId",o._id),t(o);else{const e=(null==(s=null==(n=null==o?void 0:o.detail)?void 0:n[0])?void 0:s.msg)||"获取用户信息出错啦";a(e)}}else a(`获取用户信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),m=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/cloud_api/get_user_avatar`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,user_ids:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"获取用户头像出错啦";n(e)}}else n(`获取用户头像失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),f=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/cloud_api/search_users`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,keyword:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"通过用户名或邮箱来去查询用户出错啦";n(e)}}else n(`通过用户名或邮箱来去查询用户失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),v=(e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/phone/workspace/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,file_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"删除工作区文件出错啦";s(e)}}else s(`删除工作区文件失败:${e.statusCode}`)}})})),g=(e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/phone/workspace/create`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,dir_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"创建工作区文件夹出错啦";s(e)}}else s(`创建工作区文件夹失败:${e.statusCode}`)}})})),w=(e,t,a="/",n="")=>new Promise(((s,o)=>{uni.request({url:`${r}/cloud_api/file/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,path:a,type:t,team_id:n},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)s(t.data);else{const e=(null==t?void 0:t.error)||"获取工作区文件目录出错啦";o(e)}}else o(`获取工作区文件目录失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})),y=async e=>new Promise(((t,a)=>{uni.request({url:`${r}/cloud_api/team/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_name:""},success:e=>{if(200===e.statusCode){const n=e.data;if(n.success){const e=n.teams.slice(1);t(e)}else{const t=e.data.error||"获取用户可访问的团队列表出错啦";a(t)}}else a(`获取用户可访问的团队列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),k=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/cloud_api/team/get_all_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t},success:e=>{var t;if(200===e.statusCode){const s=e.data;if(s.success){const e=(null==(t=s.team)?void 0:t.result)||[];a(e)}else{const e=(null==s?void 0:s.error)||"获取团队全部成员出错啦";n(e)}}else n(`获取团队全部成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),_=(e,t,a,n)=>new Promise(((s,o)=>{const i={access_token:e,database_id:t};"user_id"===a?i.user_id=n:"team_id"===a&&(i.team_id=n),uni.request({url:`${r}/cloud_api/database/permission/info`,method:"POST",data:i,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)s(t.data);else if(Array.isArray(t))s(t);else{const e=(null==t?void 0:t.error)||"查看 个人/团队 数据库权限信息出错啦";o(e)}}else o(`查看 个人/团队 数据库权限信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})),b=(e,a,n)=>new Promise(((s,o)=>{uni.request({url:`${r}/cloud_api/phone/conversation/message/download`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspace_id:a,url:n},success:e=>{if(200===e.statusCode){const a=e.data;if(t("log","at utils/cloud-api.js:1703",a),a.local_success)s(a.url||a.download_url||a.data||a);else{o("下载消息文件出错啦")}}else o(`下载消息文件失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})),E=(e,t)=>{const a=e.__vccOpts||e;for(const[n,s]of t)a[n]=s;return a},C=E({__name:"Login",setup(a){const n=e.ref(""),s=e.ref(!1),o=e.ref(!1),i=()=>{s.value=!0,g.value=!1},l=()=>{s.value=!1},c=()=>{},u=e.ref(""),d=e.ref(!1),p=e.ref(!1),h=()=>{d.value=!0,g.value=!1},m=()=>{d.value=!1},f=e.reactive({username:e.computed((()=>n.value)),password:e.computed((()=>u.value)),remember:!0}),v=e.ref(!1),g=e.ref(!1),w=async()=>{if(y(),!g.value){v.value=!0;try{t("log","at pages/Login/Login.vue:119","有返回token:",await(async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/login`,method:"POST",data:{username:e,password:t,login_type:"phone"},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.access_token;if(t)uni.setStorageSync("token",t),a(t);else{const t=e.data.error||"检查用户名和密码";n(t)}}else String(e.statusCode).startsWith("5")?n({serverError:!0,code:e.statusCode,message:"服务器升级中,请稍后再试"}):n(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(n.value,u.value)),k(),uni.reLaunch({url:"/pages/Chat/Chat"})}catch(e){t("log","at pages/Login/Login.vue:125","登录失败",e),e&&"object"==typeof e&&e.serverError?uni.showModal({title:"提示",content:e.message,showCancel:!1,confirmText:"知道了"}):uni.showToast({title:(null==e?void 0:e.message)||e||"失败",icon:"error"})}finally{v.value=!1}}},y=()=>{n.value&&u.value||(g.value=!0)},k=()=>{if(f.remember){const e={username:f.username,password:f.password,remember:!0};uni.setStorageSync("login_info",e),uni.setStorageSync("chatType",0)}else uni.removeStorageSync("login_info")};return e.onMounted((()=>{(()=>{try{const e=uni.getStorageSync("login_info");e&&(n.value=e.username||"",u.value=e.password||"",f.remember=e.remember??!0)}catch(e){t("error","at pages/Login/Login.vue:178","读取登录信息失败",e)}})()})),(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"login-container page-container"},[e.createElementVNode("view",{class:"login-card"},[e.createElementVNode("view",{class:"login-header"},[e.createElementVNode("view",{class:"login-header-logo"},[e.createElementVNode("view",{class:"icon-wrapper"},[e.createElementVNode("view",{class:"iconfont icon-brain-2-fill danao-style"})]),e.createElementVNode("text",null,"YXD")]),e.createElementVNode("view",{class:"sub-title"},"File Handling Chat")]),e.createElementVNode("view",{class:"form-wrapper"},[e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"用户名")]),e.withDirectives(e.createElementVNode("input",{class:e.normalizeClass(["form-input",{focused:s.value,error:o.value}]),"onUpdate:modelValue":a[0]||(a[0]=e=>n.value=e),onFocus:i,onBlur:l,onInput:c,placeholder:"请输入用户名"},null,34),[[e.vModelText,n.value]])]),e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"密码")]),e.withDirectives(e.createElementVNode("input",{type:"password",class:e.normalizeClass(["form-input",{focused:d.value,error:p.value}]),"onUpdate:modelValue":a[1]||(a[1]=e=>u.value=e),onFocus:h,onBlur:m,placeholder:"请输入密码"},null,34),[[e.vModelText,u.value]])]),g.value?(e.openBlock(),e.createElementBlock("text",{key:0,class:"error-info"},"用户名或密码不能为空")):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"form-option"},[e.createElementVNode("view",{class:"checkbox-wrapper",onClick:a[2]||(a[2]=e=>f.remember=!f.remember)},[e.createElementVNode("view",{class:e.normalizeClass(["checkbox",{checked:f.remember}])},[f.remember?(e.openBlock(),e.createElementBlock("text",{key:0},"✓")):e.createCommentVNode("",!0)],2),e.createElementVNode("text",{class:"checkbox-text"},"记住密码")]),e.createElementVNode("text",{class:"forget-pwd"},"忘记密码?")]),e.createElementVNode("button",{class:"login-btn",disabled:v.value,loading:v.value,onClick:w},e.toDisplayString(v.value?"Loading...":"登录"),9,["disabled","loading"])])])])],64))}},[["__scopeId","data-v-1f1e3d89"]]),N=[{font_class:"arrow-down",unicode:""},{font_class:"arrow-left",unicode:""},{font_class:"arrow-right",unicode:""},{font_class:"arrow-up",unicode:""},{font_class:"auth",unicode:""},{font_class:"auth-filled",unicode:""},{font_class:"back",unicode:""},{font_class:"bars",unicode:""},{font_class:"calendar",unicode:""},{font_class:"calendar-filled",unicode:""},{font_class:"camera",unicode:""},{font_class:"camera-filled",unicode:""},{font_class:"cart",unicode:""},{font_class:"cart-filled",unicode:""},{font_class:"chat",unicode:""},{font_class:"chat-filled",unicode:""},{font_class:"chatboxes",unicode:""},{font_class:"chatboxes-filled",unicode:""},{font_class:"chatbubble",unicode:""},{font_class:"chatbubble-filled",unicode:""},{font_class:"checkbox",unicode:""},{font_class:"checkbox-filled",unicode:""},{font_class:"checkmarkempty",unicode:""},{font_class:"circle",unicode:""},{font_class:"circle-filled",unicode:""},{font_class:"clear",unicode:""},{font_class:"close",unicode:""},{font_class:"closeempty",unicode:""},{font_class:"cloud-download",unicode:""},{font_class:"cloud-download-filled",unicode:""},{font_class:"cloud-upload",unicode:""},{font_class:"cloud-upload-filled",unicode:""},{font_class:"color",unicode:""},{font_class:"color-filled",unicode:""},{font_class:"compose",unicode:""},{font_class:"contact",unicode:""},{font_class:"contact-filled",unicode:""},{font_class:"down",unicode:""},{font_class:"bottom",unicode:""},{font_class:"download",unicode:""},{font_class:"download-filled",unicode:""},{font_class:"email",unicode:""},{font_class:"email-filled",unicode:""},{font_class:"eye",unicode:""},{font_class:"eye-filled",unicode:""},{font_class:"eye-slash",unicode:""},{font_class:"eye-slash-filled",unicode:""},{font_class:"fire",unicode:""},{font_class:"fire-filled",unicode:""},{font_class:"flag",unicode:""},{font_class:"flag-filled",unicode:""},{font_class:"folder-add",unicode:""},{font_class:"folder-add-filled",unicode:""},{font_class:"font",unicode:""},{font_class:"forward",unicode:""},{font_class:"gear",unicode:""},{font_class:"gear-filled",unicode:""},{font_class:"gift",unicode:""},{font_class:"gift-filled",unicode:""},{font_class:"hand-down",unicode:""},{font_class:"hand-down-filled",unicode:""},{font_class:"hand-up",unicode:""},{font_class:"hand-up-filled",unicode:""},{font_class:"headphones",unicode:""},{font_class:"heart",unicode:""},{font_class:"heart-filled",unicode:""},{font_class:"help",unicode:""},{font_class:"help-filled",unicode:""},{font_class:"home",unicode:""},{font_class:"home-filled",unicode:""},{font_class:"image",unicode:""},{font_class:"image-filled",unicode:""},{font_class:"images",unicode:""},{font_class:"images-filled",unicode:""},{font_class:"info",unicode:""},{font_class:"info-filled",unicode:""},{font_class:"left",unicode:""},{font_class:"link",unicode:""},{font_class:"list",unicode:""},{font_class:"location",unicode:""},{font_class:"location-filled",unicode:""},{font_class:"locked",unicode:""},{font_class:"locked-filled",unicode:""},{font_class:"loop",unicode:""},{font_class:"mail-open",unicode:""},{font_class:"mail-open-filled",unicode:""},{font_class:"map",unicode:""},{font_class:"map-filled",unicode:""},{font_class:"map-pin",unicode:""},{font_class:"map-pin-ellipse",unicode:""},{font_class:"medal",unicode:""},{font_class:"medal-filled",unicode:""},{font_class:"mic",unicode:""},{font_class:"mic-filled",unicode:""},{font_class:"micoff",unicode:""},{font_class:"micoff-filled",unicode:""},{font_class:"minus",unicode:""},{font_class:"minus-filled",unicode:""},{font_class:"more",unicode:""},{font_class:"more-filled",unicode:""},{font_class:"navigate",unicode:""},{font_class:"navigate-filled",unicode:""},{font_class:"notification",unicode:""},{font_class:"notification-filled",unicode:""},{font_class:"paperclip",unicode:""},{font_class:"paperplane",unicode:""},{font_class:"paperplane-filled",unicode:""},{font_class:"person",unicode:""},{font_class:"person-filled",unicode:""},{font_class:"personadd",unicode:""},{font_class:"personadd-filled",unicode:""},{font_class:"personadd-filled-copy",unicode:""},{font_class:"phone",unicode:""},{font_class:"phone-filled",unicode:""},{font_class:"plus",unicode:""},{font_class:"plus-filled",unicode:""},{font_class:"plusempty",unicode:""},{font_class:"pulldown",unicode:""},{font_class:"pyq",unicode:""},{font_class:"qq",unicode:""},{font_class:"redo",unicode:""},{font_class:"redo-filled",unicode:""},{font_class:"refresh",unicode:""},{font_class:"refresh-filled",unicode:""},{font_class:"refreshempty",unicode:""},{font_class:"reload",unicode:""},{font_class:"right",unicode:""},{font_class:"scan",unicode:""},{font_class:"search",unicode:""},{font_class:"settings",unicode:""},{font_class:"settings-filled",unicode:""},{font_class:"shop",unicode:""},{font_class:"shop-filled",unicode:""},{font_class:"smallcircle",unicode:""},{font_class:"smallcircle-filled",unicode:""},{font_class:"sound",unicode:""},{font_class:"sound-filled",unicode:""},{font_class:"spinner-cycle",unicode:""},{font_class:"staff",unicode:""},{font_class:"staff-filled",unicode:""},{font_class:"star",unicode:""},{font_class:"star-filled",unicode:""},{font_class:"starhalf",unicode:""},{font_class:"trash",unicode:""},{font_class:"trash-filled",unicode:""},{font_class:"tune",unicode:""},{font_class:"tune-filled",unicode:""},{font_class:"undo",unicode:""},{font_class:"undo-filled",unicode:""},{font_class:"up",unicode:""},{font_class:"top",unicode:""},{font_class:"upload",unicode:""},{font_class:"upload-filled",unicode:""},{font_class:"videocam",unicode:""},{font_class:"videocam-filled",unicode:""},{font_class:"vip",unicode:""},{font_class:"vip-filled",unicode:""},{font_class:"wallet",unicode:""},{font_class:"wallet-filled",unicode:""},{font_class:"weibo",unicode:""},{font_class:"weixin",unicode:""}];const x=E({name:"UniIcons",emits:["click"],props:{type:{type:String,default:""},color:{type:String,default:"#333333"},size:{type:[Number,String],default:16},customPrefix:{type:String,default:""},fontFamily:{type:String,default:""}},data:()=>({icons:N}),computed:{unicode(){let e=this.icons.find((e=>e.font_class===this.type));return e?e.unicode:""},iconSize(){return"number"==typeof(e=this.size)||/^[0-9]*$/g.test(e)?e+"px":e;var e},styleObj(){return""!==this.fontFamily?`color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`:`color: ${this.color}; font-size: ${this.iconSize};`}},methods:{_onClick(e){this.$emit("click",e)}}},[["render",function(t,a,n,s,o,i){return e.openBlock(),e.createElementBlock("text",{style:e.normalizeStyle(i.styleObj),class:e.normalizeClass(["uni-icons",["uniui-"+n.type,n.customPrefix,n.customPrefix?n.type:""]]),onClick:a[0]||(a[0]=(...e)=>i._onClick&&i._onClick(...e))},[e.renderSlot(t.$slots,"default",{},void 0,!0)],6)}],["__scopeId","data-v-b25a9929"]]),V=()=>uni.getStorageSync("token"),S=()=>{const e=uni.getStorageSync("currentSessionId");return isNaN(Number(e))?e.replace(/-/g,""):e},B=()=>(t("log","at utils/user-info.js:50","用户Id(UserId)",uni.getStorageSync("userId")),uni.getStorageSync("userId")),T=()=>uni.getStorageSync("chatType"),D=()=>uni.getStorageSync("receiverId"),z=E(Object.assign({name:"ChatSidebar"},{__name:"ChatSidebar",props:{chatList:{type:Array,required:!0},showNewChatModal:{type:Boolean,default:!1},currentSessionId:{type:[String,Number],required:!0},chatType:{type:Number,required:!0}},emits:["update:showNewChatModal","update:currentSessionId","refresh-conversations","update:chatType","select-chat"],setup(n,{emit:s}){const o=n,i=s,r=e.toRef(o,"chatList");e.toRef(o,"showNewChatModal");const l=e.toRef(o,"chatType"),c=()=>{uni.navigateTo({url:"/pages/UserProfileModal/UserProfileModal"})},u=e.ref(!1),d=e.ref([]),m=()=>{0!==d.value.length&&uni.showModal({title:"确认删除",content:`确定要删除全部 ${d.value.length} 个对话吗?此操作不可恢复。`,confirmText:"确认删除",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=V();await p(e,d.value),uni.showToast({title:"删除成功",icon:"success"}),d.value=[],u.value=!1,i("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:210","删除会话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}})},f=()=>{r.value.length?uni.showModal({title:"确认删除",content:`确定要删除全部 ${r.value.length} 个对话吗?此操作不可恢复。`,confirmText:"删除全部",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=V(),t=r.value.map((e=>e._id));await p(e,t),uni.showToast({title:"已删除全部对话",icon:"success"}),i("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:242","清空全部对话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}}):uni.showToast({title:"没有可删除的会话",icon:"none"})},v=e.computed((()=>r.value.length>0&&d.value.length===r.value.length)),g=e.toRef(o,"currentSessionId"),w=(e,a="")=>{t("log","at components/ChatSidebar.vue:260","选择的id是:",e),a&&uni.setStorageSync("receiverId",a),uni.setStorageSync("currentSessionId",e),i("update:currentSessionId",e),i("select-chat")},y=()=>{t("log","at components/ChatSidebar.vue:272","点击了新建会话"),i("update:showNewChatModal",!0)},k=()=>{uni.navigateTo({url:"/pages/ContactPages/ContactPages"})},_=e.ref(""),b=e.ref(!1),E=()=>{u.value=!u.value,u.value||(d.value=[])},C=e=>{const t=d.value.indexOf(e);-1===t?d.value.push(e):d.value.splice(t,1)},N=()=>{v.value?d.value=[]:d.value=r.value.map((e=>e._id))},S=e.ref(""),B=e.ref(""),T=e.ref(""),D=(e,t=20)=>e?e.length>t?e.substring(0,t)+"...":e:"";return e.onMounted((async()=>{S.value=V();const e=await h(S.value);B.value=e.avatar||"",T.value=e.username||"",t("log","at components/ChatSidebar.vue:328","菜单收到的会话列表:",r.value)})),(t,n)=>{const s=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock("view",{class:"chat-sidebar-container"},[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"sidebar-header"},[e.createElementVNode("view",{class:"user-profile-card",onClick:c},[e.createElementVNode("view",{class:"left"},[B.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"avatar-preview"},[e.createElementVNode("image",{src:B.value,mode:"aspectFill"},null,8,["src"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"avatar-placeholder"},[e.createVNode(s,{type:"contact-filled",size:"50",color:"#007aff"})]))]),e.createElementVNode("view",{class:"center"},[e.createElementVNode("text",null,"欢迎回来"),e.createElementVNode("text",null,e.toDisplayString(T.value),1)]),e.createElementVNode("view",{class:"right"},[e.createElementVNode("view",{class:"status-dot"}),e.createElementVNode("view",{class:"status-text"},[e.createElementVNode("text",null,"在线")])])]),e.createElementVNode("view",{class:"new-chat-btn",onClick:k},[e.createElementVNode("text",null,"+ 更多聊天列表")])]),e.createElementVNode("view",{class:"chat-history"},[e.createElementVNode("view",{class:"history-header"},[e.createElementVNode("view",{class:"history-title-section"},[e.createElementVNode("text",null,"历史会话"),e.createElementVNode("text",null,e.toDisplayString(r.value.length)+"个对话",1)]),e.createElementVNode("view",{class:"history-management"},[u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-management-btn iconfont icon-jia icon-jia-style",onClick:y})),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:1,class:"history-management-btn iconfont icon-duoxuan icon-duoxuan-style",onClick:E})),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:2,class:"history-management-btn iconfont icon-saochu icon-saochu-style",onClick:f})),u.value&&d.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:3,class:"history-management-btn iconfont icon-shanchu icon-shanchu-style",onClick:m})):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:e.normalizeClass(["history-management-btn iconfont icon-total_selection icon-total_selection-style",{active:v.value}]),onClick:N},null,2)):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("view",{key:5,class:"history-management-btn iconfont icon-quxiao icon-quxiao-style",onClick:E})):e.createCommentVNode("",!0)])]),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-search-wrap"},[e.createElementVNode("view",{class:e.normalizeClass(["history-search-inner",{"has-value":_.value||b.value}])},[e.createVNode(s,{type:"search",class:e.normalizeClass([_.value||b.value?"chat-search-icon":"search-icon"])},null,8,["class"]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[0]||(n[0]=e=>_.value=e),onFocus:n[1]||(n[1]=e=>b.value=!0),onBlur:n[2]||(n[2]=e=>b.value=!1),type:"text",placeholder:"搜索会话..."},null,544),[[e.vModelText,_.value]])],2)])),e.createElementVNode("view",{class:"chat-history-list"},[0===l.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(r.value,(t=>{var a;return e.openBlock(),e.createElementBlock("view",{key:t._id,"data-chat-id":t._id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t._id||d.value.includes(t._id)}]),onClick:e=>u.value?C(t._id):w(t._id)},[u.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[d.value.includes(t._id)?(e.openBlock(),e.createBlock(s,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createVNode(s,{type:"chat-filled",size:"26",color:"#007aff"})]),t.agent_id?(e.openBlock(),e.createElementBlock("view",{key:1},e.toDisplayString(D(null==(a=t.agent_data)?void 0:a.title)||"加载中"),1)):(e.openBlock(),e.createElementBlock("view",{key:2},e.toDisplayString(D(t.title)),1))],10,["data-chat-id","onClick"])})),128)):e.createCommentVNode("",!0),1===l.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(r.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.sessionId,"data-chat-id":t.sessionId,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t.sessionId||d.value.includes(t.sessionId)}]),onClick:e=>u.value?C(t.sessionId):w(t.sessionId,t.receiver)},[u.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[d.value.includes(t.sessionId)?(e.openBlock(),e.createBlock(s,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("view",null,e.toDisplayString(t.friendNickName),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0),2===l.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(r.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.id,"data-chat-id":t.id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t.id||d.value.includes(t.id)}]),onClick:e=>u.value?C(t.id):w(t.id)},[u.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[d.value.includes(t.id)?(e.openBlock(),e.createBlock(s,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createElementVNode("view",{class:"iconfont icon-qunliao",style:{"font-size":"80rpx",color:"#fff"}})]),e.createElementVNode("view",null,e.toDisplayString(t.name),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0)])])])}}}),[["__scopeId","data-v-7630767e"]]);var I={"":["",""],_:["",""],"*":["",""],"~":["",""],"\n":["
    "]," ":["
    "],"-":["
    "]};function P(e){return e.replace(RegExp("^"+(e.match(/^(\t| )+/)||"")[0],"gm"),"")}function A(e){return(e+"").replace(/"/g,""").replace(//g,">")}function j(e,t){var a,n,s,o,i,r=/((?:^|\n+)(?:\n---+|\* \*(?: \*)+)\n)|(?:^``` *(\w*)\n([\s\S]*?)\n```$)|((?:(?:^|\n+)(?:\t| {2,}).+)+\n*)|((?:(?:^|\n)([>*+-]|\d+\.)\s+.*)+)|(?:!\[([^\]]*?)\]\(([^)]+?)\))|(\[)|(\](?:\(([^)]+?)\))?)|(?:(?:^|\n+)([^\s].*)\n(-{3,}|={3,})(?:\n+|$))|(?:(?:^|\n+)(#{1,6})\s*(.+)(?:\n+|$))|(?:`([^`].*?)`)|( \n\n*|\n{2,}|__|\*\*|[_*]|~~)/gm,l=[],c="",u=t||{},d=0;function p(e){var t=I[e[1]||""],a=l[l.length-1]==e;return t?t[1]?(a?l.pop():l.push(e),t[0|a]):t[0]:e}function h(){for(var e="";l.length;)e+=p(l[l.length-1]);return e}for(e=e.replace(/^\[(.+?)\]:\s*(.+)$/gm,(function(e,t,a){return u[t.toLowerCase()]=a,""})).replace(/^\n+|\n+$/g,"");s=r.exec(e);)n=e.substring(d,s.index),d=r.lastIndex,a=s[0],n.match(/[^\\](\\\\)*\\$/)||((i=s[3]||s[4])?a='
    "+P(A(i).replace(/^\n+|\n+$/g,""))+"
    ":(i=s[6])?(i.match(/\./)&&(s[5]=s[5].replace(/^\d+/gm,"")),o=j(P(s[5].replace(/^\s*[>*+.-]/gm,""))),">"==i?i="blockquote":(i=i.match(/\./)?"ol":"ul",o=o.replace(/^(.*)(\n|$)/gm,"
  • $1
  • ")),a="<"+i+">"+o+""):s[8]?a=''+A(s[7])+'':s[10]?(c=c.replace("
    ",''),a=h()+""):s[9]?a="":s[12]||s[14]?a="<"+(i="h"+(s[14]?s[14].length:s[13]>"="?1:2))+">"+j(s[12]||s[15],u)+"":s[16]?a=""+A(s[16])+"":(s[17]||s[1])&&(a=p(s[17]||"--"))),c+=n,c+=a;return(c+e.substring(d)+h()).replace(/^\n+|\n+$/g,"")} /*! * pinia v2.1.7 * (c) 2023 Eduardo San Martin Morote * @license MIT */ -let I;const L=e=>I=e,z=Symbol();function F(e){return e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&"function"!=typeof e.toJSON}var O,A;(A=O||(O={})).direct="direct",A.patchObject="patch object",A.patchFunction="patch function";const U=()=>{};function q(t,a,n,l=U){t.push(a);const o=()=>{const e=t.indexOf(a);e>-1&&(t.splice(e,1),l())};return!n&&e.getCurrentScope()&&e.onScopeDispose(o),o}function R(e,...t){e.slice().forEach((e=>{e(...t)}))}const W=e=>e();function J(t,a){t instanceof Map&&a instanceof Map&&a.forEach(((e,a)=>t.set(a,e))),t instanceof Set&&a instanceof Set&&a.forEach(t.add,t);for(const n in a){if(!a.hasOwnProperty(n))continue;const l=a[n],o=t[n];F(o)&&F(l)&&t.hasOwnProperty(n)&&!e.isRef(l)&&!e.isReactive(l)?t[n]=J(o,l):t[n]=l}return t}const H=Symbol();const{assign:X}=Object;function K(t,a,n={},l,o,s){let i;const c=X({actions:{}},n),r={deep:!0};let u,d,p,m=[],v=[];const h=l.state.value[t];let g;function f(a){let n;u=d=!1,"function"==typeof a?(a(l.state.value[t]),n={type:O.patchFunction,storeId:t,events:p}):(J(l.state.value[t],a),n={type:O.patchObject,payload:a,storeId:t,events:p});const o=g=Symbol();e.nextTick().then((()=>{g===o&&(u=!0)})),d=!0,R(m,n,l.state.value[t])}s||h||(l.state.value[t]={}),e.ref({});const w=s?function(){const{state:e}=n,t=e?e():{};this.$patch((e=>{X(e,t)}))}:U;function k(e,a){return function(){L(l);const n=Array.from(arguments),o=[],s=[];function i(e){o.push(e)}function c(e){s.push(e)}let r;R(v,{args:n,name:e,store:E,after:i,onError:c});try{r=a.apply(this&&this.$id===t?this:E,n)}catch(u){throw R(s,u),u}return r instanceof Promise?r.then((e=>(R(o,e),e))).catch((e=>(R(s,e),Promise.reject(e)))):(R(o,r),r)}}const y={_p:l,$id:t,$onAction:q.bind(null,v),$patch:f,$reset:w,$subscribe(a,n={}){const o=q(m,a,n.detached,(()=>s())),s=i.run((()=>e.watch((()=>l.state.value[t]),(e=>{("sync"===n.flush?d:u)&&a({storeId:t,type:O.direct,events:p},e)}),X({},r,n))));return o},$dispose:function(){i.stop(),m=[],v=[],l._s.delete(t)}},E=e.reactive(y);l._s.set(t,E);const C=(l._a&&l._a.runWithContext||W)((()=>l._e.run((()=>(i=e.effectScope()).run(a)))));for(const b in C){const a=C[b];if(e.isRef(a)&&(V=a,!e.isRef(V)||!V.effect)||e.isReactive(a))s||(!h||F(N=a)&&N.hasOwnProperty(H)||(e.isRef(a)?a.value=h[b]:J(a,h[b])),l.state.value[t][b]=a);else if("function"==typeof a){const e=k(b,a);C[b]=e,c.actions[b]=a}}var N,V;return X(E,C),X(e.toRaw(E),C),Object.defineProperty(E,"$state",{get:()=>l.state.value[t],set:e=>{f((t=>{X(t,e)}))}}),l._p.forEach((e=>{X(E,i.run((()=>e({store:E,app:l._a,pinia:l,options:c}))))})),h&&s&&n.hydrate&&n.hydrate(E.$state,h),u=!0,d=!0,E}function G(t,a,n){let l,o;const s="function"==typeof a;function i(t,n){const i=e.hasInjectionContext();(t=t||(i?e.inject(z,null):null))&&L(t),(t=I)._s.has(l)||(s?K(l,a,o,t):function(t,a,n,l){const{state:o,actions:s,getters:i}=a,c=n.state.value[t];let r;r=K(t,(function(){c||(n.state.value[t]=o?o():{});const a=e.toRefs(n.state.value[t]);return X(a,s,Object.keys(i||{}).reduce(((a,l)=>(a[l]=e.markRaw(e.computed((()=>{L(n);const e=n._s.get(t);return i[l].call(e,e)}))),a)),{}))}),a,n,0,!0)}(l,o,t));return t._s.get(l)}return"string"==typeof t?(l=t,o=s?n:a):(o=t,l=t.id),i.$id=l,i}const Y=new class{constructor(){this.ws=null,this.url="ws://cloud.yuxindazhineng.com/cloud_api/phone/app_ws",this.options={token:"",conversationId:"",onMessage:null,onError:null,onReconnect:null,onOpen:null,onClose:null},this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=3e3,this.reconnectTimer=null,this.heartbeatTimer=null,this.isManualClose=!1}connect(e={}){this.options={...this.options,...e},this.isManualClose=!1,this.ws&&this.close();try{this.ws=uni.connectSocket({url:this.url,success:()=>{t("log","at utils/socket.js:44","WebSocket 连接请求已发送")},fail:e=>{t("error","at utils/socket.js:47","WebSocket 连接失败:",e),this.handleError(e)}}),this.initEventHandlers()}catch(a){this.handleError(a)}}initEventHandlers(){this.ws&&(this.ws.onOpen((e=>{var a,n,l,o;t("log","at utils/socket.js:74","WebSocket 已连接"),this.reconnectAttempts>0&&(null==(n=(a=this.options).onReconnect)||n.call(a)),null==(o=(l=this.options).onOpen)||o.call(l,e),this.reconnectAttempts=0})),this.ws.onMessage((e=>{try{const a=JSON.parse(e.data);t("log","at utils/socket.js:87","收到了返回消息:",a),this.handleMessage(a)}catch(a){t("error","at utils/socket.js:91","消息解析失败:",a),uni.setStorageSync("currentSessionId",e.data.task_call_id)}})),this.ws.onError((e=>{t("error","at utils/socket.js:96","WebSocket 错误:",e),this.handleError(e)})),this.ws.onClose((e=>{var a,n;t("log","at utils/socket.js:100","WebSocket 已关闭:",e.code,e.reason),null==(n=(a=this.options).onClose)||n.call(a,e),this.stopHeartbeat(),!this.isManualClose&&this.reconnectAttempts{if(!this.isConnected())return void n(new Error("WebSocket 未连接"));const l=JSON.stringify(e);t("log","at utils/socket.js:199","发送的消息是:",l),this.ws.send({data:l,success:()=>a(),fail:e=>{t("error","at utils/socket.js:207","发送消息失败:",e),n(e)}})}))}reconnect(){this.reconnectTimer||(this.reconnectAttempts++,t("log","at utils/socket.js:233",`尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),this.reconnectTimer=setTimeout((()=>{this.reconnectTimer=null,this.isManualClose||this.connect(this.options)}),this.reconnectDelay*this.reconnectAttempts))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval((()=>{this.isConnected()?this.send({ws_event:"ping"}).catch((()=>{t("log","at utils/socket.js:255","心跳发送失败,准备重连"),this.reconnectTimer||this.isManualClose||this.reconnect()})):!this.isManualClose&&this.reconnectAttemptst("log","at utils/socket.js:341","连接已关闭"),fail:e=>t("error","at utils/socket.js:342","关闭失败:",e)})}catch(e){t("error","at utils/socket.js:350","关闭连接出错:",e)}this.ws=null}this.reconnectAttempts=0}updateOptions(e){this.options={...this.options,...e}}},Q=G("socket",(()=>{const a=e.ref("disconnected"),n=e.ref([]),l=e.ref(""),o=e.ref(!1),s=e.ref({token:"",conversationId:""});e.ref("");const i=e.ref([]),c=e.ref(20),r=e.ref(""),u=e.computed((()=>"connected"===a.value)),d=e.computed((()=>"connecting"===a.value)),p=e.computed((()=>"disconnected"===a.value)),m=e.computed((()=>"error"===a.value)),v=e.computed((()=>n.value[n.value.length-1]));function h(e,a){const n=new Date,l=`${n.getHours().toString().padStart(2,"0")}:${n.getMinutes().toString().padStart(2,"0")}:${n.getSeconds().toString().padStart(2,"0")}`;i.value.push({type:e,connect:a,time:l}),i.value.length>c.value&&(i.value=i.value.slice(-c.value)),t("log","at stores/socket.js:54",`[${e.toUpperCase()}] ${a}`)}function g(){a.value="connected",h("success","连接成功!发送auth"),t("log","at stores/socket.js:117","连接成功!发送auth"),s.value.token,Y.send({type:"auth",access_token:s.value.token})}function f(){"disconnected"!==a.value&&(a.value="disconnected",h("warn","连接已断开"))}function w(e){h("error",`Socket错误: ${JSON.stringify(e)}`),a.value="error"}function k(e){a.value="connecting",h("warn",`重连中... (${e}/5)`)}function y(e){h("receive",`收到: ${JSON.stringify(e)}`);const{type:a,conversation_id:n,message_id:s,data:i}=e||{};switch(t("log","at stores/socket.js:162",`[handleMessage] type = ${a}, data = ${JSON.stringify(i)}`),a){case"auth_ok":h("success","连接成功");break;case"auth_fail":o.value=!1,r.value=(null==i?void 0:i.reason)||(null==e?void 0:e.reason)||"unknown",h("error",`认证失败: ${r.value}`);break;case"chat_ack":h("warn","AI成功收到用户发送的消息");break;case"render":h("warn","AI正在回复信息"),function(e){if("exit"===e)return t("log","at stores/socket.js:224","ai结束思考"),void(o.value=!1);if(!e||"object"!=typeof e)return;if("event_callback"===e.cmd&&"中断成功"===e.info)return t("log","at stores/socket.js:234","后端确认中断成功"),h("warn",`中断确认: ${e.info}`),void(o.value=!1);const{role:a,chunk:n,message_role:s,meaasge_uuid:i,message_type:c,task_call_id:r}=e;o.value||!n&&"assistant"!==s||(t("log","at stores/socket.js:251","ai开始思考"),l.value="",o.value=!0);n&&(l.value+=n,o.value||(t("log","at stores/socket.js:260","修改状态为开始思考"),o.value=!0))}(i);break;case"pc_offline":h("warn","PC 端已离线");break;default:h("info",`未知事件类型: ${a}`)}}return{connectionStatus:a,messageString:l,isThinking:o,logs:i,config:s,authFailReason:r,isConnected:u,isConnecting:d,isDisconnected:p,isError:m,lastMessage:v,connect:function(e={}){n.value=[],l.value="",s.value={...s.value,...e},h("info",`准备连接WebSocket。Token:${s.value.token||"未设置"}。ConversationId: ${s.value.conversationId||"未设置"}`),s.value.token&&s.value.conversationId?(a.value="connecting",Y.connect({token:s.value.token,conversationId:s.value.conversationId,onMessage:y,onError:w,onOpen:g,onClose:f,onReconnect:k}),setTimeout((()=>{"connecting"===a.value&&(a.value="error",h("error","连接超时(10s)"))}),1e4)):h("error","Token和ConversationId都不能为空")},disconnect:function(){Y.close(),a.value="disconnected",h("warn","已主动断开连接")},send:async function(e){if(t("log","at stores/socket.js:98","检查到要发生消息为:",e),!u.value)throw h("error","发送失败: 连接未建立"),new Error("连接未建立");try{return await Y.send(e),h("send","string"==typeof e?e:JSON.stringify(e)),!0}catch(a){throw h("error",`发送失败: ${a.message||a}`),a}},addLog:h,clearLogs:function(){i.value=[]},getStatusText:function(){return{connecting:"连接中",connected:"已连接",disconnected:"未连接",error:"连接错误"}[a.value]||"未知状态"}}})),Z="http://chat.yuxindazhineng.com",ee=async e=>new Promise(((a,n)=>{uni.request({url:`${Z}/api/chatList/getChatFriend`,method:"POST",header:{"Content-Type":"application/json"},data:{size:500,current:1,sendId:e},success:e=>{var l;if(200===e.statusCode){const o=e.data;if(t("log","at utils/friend-api.js:20","获取到的好友列表消息",o),0===(null==o?void 0:o.code)||"成功"===(null==o?void 0:o.msg)){const e=null==(l=o.data)?void 0:l.records;if(e.length>0){const t=e[0].receiver;t&&uni.setStorageSync("receiverId",t)}a(e)}else{const t=e.data.error||"获取好友列表出错啦";n(t)}}else n(`获取好友列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),te=async e=>new Promise(((t,a)=>{uni.request({url:`${Z}/api/group/getGroup`,method:"POST",header:{"Content-Type":"application/json"},data:{size:500,current:1,contactId:e},success:e=>{var n;if(200===e.statusCode){const l=e.data;if(0===(null==l?void 0:l.code)||"成功"===(null==l?void 0:l.msg)){const e=null==(n=l.data)?void 0:n.records;t(e)}else{const t=e.data.error||"获取群聊列表出错啦";a(t)}}else a(`获取群聊列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),ae=async(e,a=1)=>(t("log","at utils/friend-api.js:88","请求的好友消息id:",e),new Promise(((t,n)=>{uni.request({url:`${Z}/api/message/list`,method:"POST",data:{sessionId:e,size:100,current:a,beginTime:"",endTime:""},header:{"Content-Type":"application/json"},success:e=>{var a;if(200===e.statusCode){const l=e.data;if(0===l.code){const e=((null==(a=null==l?void 0:l.data)?void 0:a.records)||[]).reverse();t(e)}else{const t=e.data.error||"获取好友消息出错啦";n(t)}}else n(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})}))),ne=async(e,a=1)=>(t("log","at utils/friend-api.js:134","请求的群聊消息id:",e),new Promise(((n,l)=>{uni.request({url:`${Z}/api/group/getGroupList`,method:"POST",data:{current:a,size:100,groupId:e,beginTime:"",endTime:""},header:{"Content-Type":"application/json"},success:e=>{var a;if(200===e.statusCode){const o=e.data;if(t("log","at utils/friend-api.js:152","获取到的群聊信息:",o),0===o.code){const e=((null==(a=null==o?void 0:o.data)?void 0:a.records)||[]).reverse();n(e)}else{const t=e.data.error||"获取群聊消息出错啦";l(t)}}else l(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})}))),le=async e=>new Promise(((t,a)=>{uni.request({url:`${Z}/api/group/getGroupMemberList`,method:"POST",header:{"Content-Type":"application/json"},data:{groupId:e,current:1,size:100},success:e=>{if(200===e.statusCode){const n=e.data;if(0===n.code){const e=n.data.records;t(e)}else{const t=e.data.error||"获取群成员出错啦";a(t)}}else a(`请求群成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),oe=e=>new Promise(((t,a)=>{uni.uploadFile({url:`${Z}/api/file/upload`,filePath:e,name:"file",success:e=>{const n=JSON.parse(e.data);0===n.code?t(n.data):a(n.msg||"上传失败")},fail:e=>{a(e.errMsg||"网络错误")}})}));const se=new class{constructor(){this.ws=null,this.url="wss://wss.yuxindazhineng.com/ws",this.options={token:"",UserId:"",onMessage:null,onError:null,onReconnect:null,onOpen:null,onClose:null},this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=3e3,this.reconnectTimer=null,this.heartbeatTimer=null,this.isManualClose=!1}connect(e={}){this.options={...this.options,...e},this.isManualClose=!1,this.ws&&(t("log","at utils/friend-socket.js:37","关闭现有连接"),this.close());try{this.ws=uni.connectSocket({url:this.url,success:()=>{t("log","at utils/friend-socket.js:45","WebSocket 连接请求已发送")},fail:e=>{t("error","at utils/friend-socket.js:48","WebSocket 连接失败:",e),this.handleError(e)}}),this.initEventHandlers()}catch(a){this.handleError(a)}}initEventHandlers(){this.ws&&(this.ws.onOpen((e=>{var a,n,l,o;t("log","at utils/friend-socket.js:75","WebSocket 已连接"),this.reconnectAttempts>0&&(null==(n=(a=this.options).onReconnect)||n.call(a)),null==(o=(l=this.options).onOpen)||o.call(l,e),this.reconnectAttempts=0})),this.ws.onMessage((e=>{try{const a=JSON.parse(e.data);t("log","at utils/friend-socket.js:88","收到了返回消息:",a),this.handleMessage(a)}catch(a){t("error","at utils/friend-socket.js:91","消息解析失败:",a),uni.setStorageSync("currentSessionId",e.data.task_call_id)}})),this.ws.onError((e=>{t("error","at utils/friend-socket.js:96","WebSocket 错误:",JSON.stringify(e)),this.handleError(e)})),this.ws.onClose((e=>{var a,n;t("log","at utils/friend-socket.js:100","WebSocket 已关闭:",e.code,e.reason),null==(n=(a=this.options).onClose)||n.call(a,e),!this.isManualClose&&this.reconnectAttempts{if(!this.isConnected())return void n(new Error("WebSocket 未连接"));const l=JSON.stringify(e);t("log","at utils/friend-socket.js:171","发送的消息是:",l),this.ws.send({data:l,success:()=>a(),fail:e=>{t("error","at utils/friend-socket.js:179","发送消息失败:",e),n(e)}})}))}reconnect(){this.reconnectTimer||(this.reconnectAttempts++,t("log","at utils/friend-socket.js:205",`尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),this.reconnectTimer=setTimeout((()=>{this.reconnectTimer=null,this.isManualClose||this.connect(this.options)}),this.reconnectDelay*this.reconnectAttempts))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval((()=>{this.isConnected()?this.send({ws_event:"ping"}).catch((()=>{t("log","at utils/friend-socket.js:227","心跳发送失败,准备重连"),this.reconnectTimer||this.isManualClose||this.reconnect()})):!this.isManualClose&&this.reconnectAttempts{})),this.ws.onMessage((()=>{})),this.ws.onError((()=>{})),this.ws.onClose((()=>{}));try{this.ws.close({success:()=>t("log","at utils/friend-socket.js:314","连接已关闭"),fail:e=>t("error","at utils/friend-socket.js:315","关闭失败:",e)})}catch(e){t("error","at utils/friend-socket.js:323","关闭连接出错:",e)}this.ws=null}this.reconnectAttempts=0}updateOptions(e){this.options={...this.options,...e}}},ie=G("friendSocket",(()=>{const a=e.ref("disconnected"),n=e.ref([]),l=e.ref(""),o=e.ref({token:"",UserId:""});e.ref("");const s=e.ref(null),i=e.ref(null),c=e.ref(!1),r=e.ref([]),u=e.ref(20),d=e.computed((()=>"connected"===a.value)),p=e.computed((()=>"connecting"===a.value)),m=e.computed((()=>"disconnected"===a.value)),v=e.computed((()=>"error"===a.value)),h=e.computed((()=>n.value[n.value.length-1]));function g(e,a){const n=new Date,l=`${n.getHours().toString().padStart(2,"0")}:${n.getMinutes().toString().padStart(2,"0")}:${n.getSeconds().toString().padStart(2,"0")}`;r.value.push({type:e,connect:a,time:l}),r.value.length>u.value&&(r.value=r.value.slice(-u.value)),t("log","at stores/friend-socket.js:57",`[${e.toUpperCase()}] ${a}`)}function f(){a.value="connected",g("success","连接成功!"),async function(){const e={version:"1.1",body:{command:7,sender:S(),avatar:"",sessionId:"",message:"",callBackMessage:!1}};try{await se.send(e),g("send","string"==typeof e?e:JSON.stringify(e))}catch(t){throw g("error",`发送验证失败: ${t.message||t}`),t}}()}function w(){"disconnected"!==a.value&&(a.value="disconnected",g("warn","连接已断开"))}function k(e){g("error",`Socket错误: ${JSON.stringify(e)}`),a.value="error"}function y(e){a.value="connecting",g("warn",`重连中... (${e}/5)`)}function E(e){g("receive",`收到: ${JSON.stringify(e)}`);const a=e.body||e,{callBackMessage:n,groupName:l,command:o,groupId:r}=a||{};switch(o){case 3:s.value=o,i.value=r;break;case 7:s.value=o;break;case 1:t("log","at stores/friend-socket.js:199","有好友消息"),c.value=!0;break;case 9:t("log","at stores/friend-socket.js:204","群消息发送成功/有新群消息"),c.value=!0;break;default:g("info","未知事件类型")}}return{connectionStatus:a,messageString:l,logs:r,config:o,command:s,groupId:i,MessageReceived:c,isConnected:d,isConnecting:p,isDisconnected:m,isError:v,lastMessage:h,connect:function(e={}){n.value=[],l.value="",o.value={...o.value,...e},g("info",`准备连接FriendsWebSocket。Token:${o.value.token||"未设置"}。UserId: ${o.value.UserId||"未设置"}`),o.value.token&&o.value.UserId?(a.value="connecting",se.connect({token:o.value.token,UserId:o.value.UserId,onMessage:E,onError:k,onOpen:f,onClose:w,onReconnect:y}),setTimeout((()=>{"connecting"===a.value&&(a.value="error",g("error","连接超时(10s)"))}),1e4)):g("error","Token和UserId都不能为空")},disconnect:function(){se.close(),a.value="disconnected",g("warn","已主动断开连接")},send:async function(e){if(!d.value)throw g("error","发送失败: 连接未建立"),new Error("连接未建立");try{return await se.send(e),g("send","string"==typeof e?e:JSON.stringify(e)),!0}catch(t){throw g("error",`发送失败: ${t.message||t}`),t}},addLog:g,clearLogs:function(){r.value=[]},getStatusText:function(){return{connecting:"连接中",connected:"已连接",disconnected:"未连接",error:"连接错误"}[a.value]||"未知状态"}}})),{registerUTSInterface:ce,initUTSProxyClass:re,initUTSProxyFunction:ue,initUTSPackageName:de,initUTSIndexClassName:pe,initUTSClassName:me}=uni,ve="limeChooseFile",he=ue(!1,{moduleName:"lime-choose-file 文件选择",moduleType:"",errMsg:"",main:!0,package:de(ve,true),class:pe(ve,true),name:"chooseFileByJs",keepAlive:!1,params:[{name:"options",type:"UTSSDKModulesLimeChooseFileChooseFileOptionJSONObject"}],return:""}),ge=C({__name:"Chat",setup(n){const s=ie(),d=()=>{s.isConnected||(ye.value&&Ee.value?s.connect({token:ye.value,UserId:Ee.value}):t("warn","at pages/Chat/Chat.vue:334","Token或UserId未准备好"))},v=Q(),h=e.ref(0),g=(e,t)=>{let a='';return e.forEach(((e,n)=>{const l=0===n?"th":"td",o=e.split("|").filter((e=>""!==e.trim()));a+="",o.forEach(((e,n)=>{const o=t[n]?` style="text-align:${t[n]}"`:"";let s=e.trim();s=s.replace(/\*\*(.+?)\*\*/g,"$1"),s=s.replace(/\*(.+?)\*/g,"$1"),s=s.replace(/_/g,"_").replace(/\*/g,"*"),a+=`<${l}${o} style="padding:6px 10px;border:1px solid #ddd">${s}`})),a+=""})),a+="
    ",a},f=e=>{if(!e)return"";e=w(e);try{let t=M(e=(e=>{const t=e.split("\n");let a=[],n=!1,l=[],o=[];for(let s=0;se.trim())).map((e=>e.trim().startsWith(":")&&e.trim().endsWith(":")?"center":e.trim().endsWith(":")?"right":"left"));continue}l.push(e),n=!0}else n&&l.length>0&&(a.push(g(l,o)),l=[],o=[],n=!1),a.push(e)}return n&&l.length>0&&a.push(g(l,o)),a.join("\n")})(e=e.replace(/__/g,"\0\0").replace(/_/g,"_").replace(/\x00\x00/g,"__")));return t=t.replace(/]*>(.*?)<\/a>/gi,'$2'),t}catch(a){return t("error","at pages/Chat/Chat.vue:460","解析失败",a),e}},w=e=>{const t=/]*>([\s\S]*?)<\/script>/i.test(e),a=/<(form|input|select|textarea|button)\b[^>]*>/i.test(e);let n=e.replace(/]*>([\s\S]*?)<\/script>/gi,"");if(n=n.replace(/<\/?minimax:tool_call>/g,(e=>e.replace(//g,">"))).replace(/<\|[\w]+?\|>/g,(e=>e.replace(//g,">"))),t||a){return'

    表单仅预览,不可操作!!!

    '+n}return n},k=e=>{uni.previewImage({urls:[e]})},y=e=>{uni.downloadFile({url:e,success:e=>{uni.openDocument({filePath:e.tempFilePath,showMenu:!0})}})},C=e=>e?e<1?(1024*e).toFixed(0)+"KB":e.toFixed(2)+"MB":"0KB",N=e=>{if(!e||"string"!=typeof e)return{textContent:e||"",files:[]};const a=e.match(/\[文件信息:(\[.*?\])\]/);if(!a)return{textContent:e,files:[]};try{const t=JSON.parse(a[1]);return{textContent:e.replace(a[0],"").trim(),files:t}}catch(n){return t("error","at pages/Chat/Chat.vue:537","解析文件信息失败:",n),{textContent:e,files:[]}}},V=async()=>{try{const e="0123456789abcdef";let t="";for(let o=0;o<24;o++)t+=e[Math.floor(Math.random()*e.length)];const a=await r(ye.value,t);if(!a)return void uni.showToast({title:"工作区创建失败",icon:"none"});const n=uni.getStorageSync("yxd_login_info");let l="";n&&(l=n.username||"");if(!(await u(ye.value,a,"新会话",l)))return void uni.showToast({title:"新会话创建失败",icon:"none"});Ve()}catch(e){t("error","at pages/Chat/Chat.vue:582","新建普通会话失败:",e),uni.showToast({title:"创建会话失败,请重试",icon:"none"})}},S=e.ref(!1),P=()=>{S.value=!1},$=e.ref(!1),j=()=>{$.value=!$.value},I=()=>{ke.value&&uni.setStorageSync("currentSessionId",ke.value),uni.navigateTo({url:"/pages/WorkSpace/WorkSpace"})},L=()=>{ke.value&&uni.setStorageSync("currentSessionId",ke.value),uni.navigateTo({url:"/pages/CloudDatabase/CloudDatabase"})},z=()=>{uni.reLaunch({url:"/pages/Login/Login"})},F=e.ref([]),O=e.ref([]),A=()=>new Promise(((t,a)=>{if(v.isConnected)return t();const n=e.watch((()=>v.isConnected),(e=>{e&&(n(),t())})),l=e.watch((()=>v.connectionStatus),(e=>{"error"===e&&(n(),l(),a(new Error("连接失败")))}));v.connect({token:ye.value,conversationId:ke.value})})),U=e.ref(!1),q=e.ref(!1),R=e.ref(!1),W=e.ref([]),J=e.ref(null),H=e.ref(!1),X=e.ref([]),K=(e,t)=>{let a=e.target;for(;a&&a.classList;){if(a.classList.contains("chat-inline-link")){const e=a.getAttribute("data-url")||a.dataset&&a.dataset.url;return void(e&&ue(e))}a=a.parentElement}t.role&&Y(t)},G=e=>{try{const t=new URL(e).pathname.split("/").filter((e=>e));if(t.length>0)return decodeURIComponent(t[t.length-1])}catch(a){}const t=e.split("/").filter((e=>e));if(t.length>0){const e=t[t.length-1],a=e.indexOf("?");return a>-1?e.substring(0,a):e}return e},Y=e=>{X.value=(e=>{const t=new Set,a=[],n=/\[([^\]]*)\]\((https?:\/\/[^\s<>"{}|\\^`\[\]()]+)\)/gi;[...e.matchAll(n)].forEach((e=>{const n=e[1].trim(),l=e[2];t.has(l)||(t.add(l),a.push({url:l,name:n||l}))}));const l=e.replace(n,"").match(/https?:\/\/[^\s<>"{}|\\^`\[\]()]+/gi);return l&&l.forEach((e=>{t.has(e)||(t.add(e),a.push({url:e,name:G(e)}))})),a})(e.content||""),H.value=!0},Z=()=>{H.value=!1,X.value=[]},se=e.ref({show:!1,type:"loading",message:""});let ce=null;const re=(e,t,a)=>{ce&&clearTimeout(ce),se.value={show:!0,type:e,message:t},a>0&&(ce=setTimeout((()=>{se.value={show:!1,type:"loading",message:""}}),a))},ue=e=>{de(e)},de=async e=>{try{re("loading","下载中...",0);const t=uni.getStorageSync("workspace_id")||"",a=await E(ye.value,t,e),n="string"==typeof a?a:(null==a?void 0:a.url)||(null==a?void 0:a.download_url)||"";if(!n)return void re("error","获取下载地址失败",2500);uni.downloadFile({url:n,success:e=>{200===e.statusCode?(ce&&clearTimeout(ce),se.value={show:!1,type:"loading",message:""},uni.openDocument({filePath:e.tempFilePath,showMenu:!0,fail:()=>{re("error","无法打开此文件",2500)}})):re("error","下载失败",2500)},fail:()=>{re("error","下载失败",2500)}})}catch(t){re("error","下载失败: "+(t.message||t),2500)}},pe=async()=>{s.isConnecting||await d();const e=T(),t=W.value.length>0,a={command:1,sender:Ee.value,receiver:e,avatar:"",sessionId:ke.value,message:fe.value,callBackMessage:!1};t&&(a.contentType=1,a.uploadVos=W.value);const n={version:"1.1",body:a};s.send(n);const l={sender:Ee.value,receiver:e,content:fe.value,taskId:null,avatar:null,createTime:"",messageType:"null",contentJson:t?JSON.stringify(W.value):"null"};De.value=[...De.value,l],fe.value="",W.value=[],setTimeout((()=>{Ie()}),1e3)},me=async()=>{s.isConnecting||await d();const e=W.value.length>0,t={command:9,groupId:ke.value,message:fe.value||"",callBackMessage:!e,messageType:e?1:0,sender:Ee.value};e&&(t.uploadVos=W.value);const a={version:"1.1",body:t};s.send(a);const n={id:De.value.length+1,message:fe.value,messageType:e?1:0,groupId:null,createTime:"",contentJson:e?JSON.stringify(W.value):"",sender:Ee.value};De.value=[...De.value,n],fe.value="",W.value=[],setTimeout((()=>{Le()}),1e3)},ve=async()=>{try{await A();let e=fe.value;if(W.value.length){const t=JSON.stringify(W.value);e=e?`${e}\n[文件信息:${t}]`:`[文件信息:${t}]`}const t={type:"chat",conversation_id:ke.value,content:e};v.send(t),U.value=!0,q.value=!0,De.value=[...De.value,{role:"user",content:e}],J.value="streaming-"+Date.now(),De.value=[...De.value,{role:"assistant",content:"",_streaming:!0,_id:J.value}],fe.value="",W.value=[],Fe()}catch(e){U.value=!1,uni.showToast({title:`用户发送消息失败${e}`,icon:"error"})}},ge=async()=>{t("log","at pages/Chat/Chat.vue:1069","中断对话 - 当前会话ID:",ke.value);try{await v.send({type:"stop",conversation_id:ke.value}),t("log","at pages/Chat/Chat.vue:1075","中断指令已发送成功")}catch(e){t("error","at pages/Chat/Chat.vue:1077","中断指令发送失败:",e)}J.value&&(De.value=De.value.filter((e=>e._id!==J.value)),J.value=null),U.value=!1,v.isThinking=!1,q.value=!1,fe.value="",W.value=[],uni.showToast({title:"已中断",icon:"none",duration:1500})};e.watch((()=>v.isThinking),((e,a)=>{if(t("log","at pages/Chat/Chat.vue:1101","isThinking 变化:",a,"→",e,"messageString:",v.messageString),!a&&e)return t("log","at pages/Chat/Chat.vue:1104","AI开始回复(跨设备同步),锁定输入框"),U.value=!0,void(J.value||(J.value="streaming-"+Date.now(),De.value=[...De.value,{role:"assistant",content:"",_streaming:!0,_id:J.value}]));a&&!e&&(t("log","at pages/Chat/Chat.vue:1120","AI回复结束(正常/中断),解锁并刷新消息列表"),J.value&&(De.value=De.value.filter((e=>e._id!==J.value)),J.value=null),Me(),U.value=!1,q.value=!1,fe.value="",W.value=[])})),e.watch((()=>v.authFailReason),(t=>{"pc offline"===t&&(U.value=!1,v.authFailReason="",e.nextTick((()=>{uni.showModal({title:"提示",content:"PC端不在线,不可聊天",showCancel:!1,confirmText:"知道了"})})))})),e.watch((()=>v.messageString),(e=>{if(!J.value||!v.isThinking)return;const t=De.value.findIndex((e=>e._id===J.value));if(t>=0){const a={...De.value[t],content:e};De.value.splice(t,1,a),Fe()}}));const fe=e.ref(""),we=e.ref([]),ke=e.ref(""),ye=e.ref(""),Ee=e.ref(""),Ce=e.ref(""),Ne=e.ref(null),Ve=async()=>{try{ye.value=_(),t("log","at pages/Chat/Chat.vue:1194","token:",ye.value),we.value=await i(ye.value)||[];const e=B();e&&we.value.some((t=>t._id===e))?ke.value=e:we.value.length>0?ke.value=we.value[0]._id:ke.value="",t("log","at pages/Chat/Chat.vue:1206","保存会话id:",ke.value),uni.setStorageSync("currentSessionId",ke.value)}catch(e){uni.showToast({title:`获取会话列表失败${e}`,icon:"error"})}},be=e.ref([]),_e=e=>{if(!e)return null;const t=be.value.find((t=>t.receiver===e));return(null==t?void 0:t.avatar)||null},Be=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.receiver)),a=await m(ye.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.receiver);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/Chat/Chat.vue:1262","获取好友头像失败",a),e}},Se=e.ref([]),xe=e.ref([]),Te=e=>{if(!e)return null;const t=xe.value.find((t=>t.groupContactId===e));return(null==t?void 0:t.avatar)||null},De=e.ref([]),Pe=e.ref(""),$e=e.ref(!1);e.ref(!1),e.ref(1);const je=e.computed((()=>De.value)),Me=async()=>{try{De.value=await c(ye.value,ke.value)||[],Fe()}catch(e){uni.showToast({title:`获取ai会话内容失败${e}`,icon:"none"})}},Ie=async()=>{try{De.value=await ae(ke.value)||[],Fe()}catch(e){uni.showToast({title:`获取好友会话消息失败${e}`,icon:"none"})}},Le=async()=>{try{De.value=await ne(ke.value)||[],t("log","at pages/Chat/Chat.vue:1368","群聊消息:",De.value);const e=await le(ke.value);t("log","at pages/Chat/Chat.vue:1371","获取到的群成员列表:",e),e&&e.length?(xe.value=await(async e=>{if(!(null==e?void 0:e.length))return[];try{const a=e.map((e=>e.groupContactId));t("log","at pages/Chat/Chat.vue:1291","请求头像的ID列表:",a);const n=await m(ye.value,a);t("log","at pages/Chat/Chat.vue:1293","头像接口返回数据:",n);const l=new Map(n.map((e=>[e.user_id,e]))||[]);return t("log","at pages/Chat/Chat.vue:1296","userMap的keys:",Array.from(l.keys())),e.map((e=>{const a=e.groupContactId,n=l.get(a);return t("log","at pages/Chat/Chat.vue:1301",`查找 ${a} 的头像:`,n),{...e,avatar:(null==n?void 0:n.avatar)||null}}))}catch(a){return t("error","at pages/Chat/Chat.vue:1308","获取群成员头像失败",a),e}})(e),t("log","at pages/Chat/Chat.vue:1374","群成员列表(带头像):",xe.value)):xe.value=[],Fe()}catch(e){uni.showToast({title:`获取群聊会话失败${e}`,icon:"none"})}},ze=e=>{},Fe=async()=>{await e.nextTick(),je.value.length>0&&($e.value=!$e.value,Pe.value=$e.value?"chat-bottom-a":"chat-bottom-b")};return e.watch((()=>s.MessageReceived),(e=>{if(t("log","at pages/Chat/Chat.vue:1419","收到了好友消息"),e)switch(t("log","at pages/Chat/Chat.vue:1421","ChatType:",h.value),h.value){case 0:Me(),s.MessageReceived=!1;break;case 1:Ie(),s.MessageReceived=!1;break;case 2:Le(),s.MessageReceived=!1;break;default:t("log","at pages/Chat/Chat.vue:1437","default 分支"),s.MessageReceived=!1}}),{immediate:!0}),e.watch(ke,(e=>{if(e)switch(uni.setStorageSync("currentSessionId",ke.value),h.value){case 0:Me(),v.disconnect(),A();break;case 1:Ie();break;case 2:Le();break;default:Me()}}),{immediate:!0}),e.onMounted((()=>{})),l((async()=>{await(async()=>{try{ye.value=_(),Ne.value=await p(ye.value),Ee.value=Ne.value._id,Ce.value=Ne.value.avatar||"",t("log","at pages/Chat/Chat.vue:1184","用户信息已加载:",Ee.value,Ce.value)}catch(e){t("error","at pages/Chat/Chat.vue:1186","获取用户信息失败:",e)}})();const e=x();h.value=e;const a=B();a&&(ke.value=a),0===e?(await Ve(),ke.value&&Me(),ye.value&&ke.value&&!v.isConnected&&A()):1===e?(await(async()=>{try{t("log","at pages/Chat/Chat.vue:1221","开始获取好友列表");const e=await ee(Ee.value);t("log","at pages/Chat/Chat.vue:1224","friendList:",e),e&&e.length?be.value=await Be(e):(be.value=[],t("log","at pages/Chat/Chat.vue:1229","好友列表为空"))}catch(e){t("error","at pages/Chat/Chat.vue:1232","获取好友列表失败:",e),be.value=[]}finally{we.value=be.value}})(),Ie(),d()):2===e&&(await(async()=>{try{t("log","at pages/Chat/Chat.vue:1272","开始获取群聊列表"),Se.value=await te(Ee.value)}catch(e){t("error","at pages/Chat/Chat.vue:1277","获取群聊列表失败:",e),Se.value=[]}finally{we.value=Se.value}})(),await d(),await Le())})),o((()=>{v.disconnect()})),(n,l)=>{const o=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),S.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"ncd-overlay",onClick:P},[e.createElementVNode("view",{class:"ncd-card",onClick:l[0]||(l[0]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("view",{class:"ncd-title-eng"},[e.createElementVNode("text",null,"NEW")]),e.createElementVNode("text",{class:"ncd-title-zh"},"创建对话"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:P})]),e.createElementVNode("text",null,"选择对话类型,开启全新会话体验"),e.createElementVNode("view",{class:"ncd-options"},[e.createElementVNode("view",{class:"ncd-option ncd-normal"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"chat",color:"#000000",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title",onClick:V},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"普通会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"与AI自由对话,探索任何话题")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})]),e.createElementVNode("view",{class:"ncd-option ncd-intelligence"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"star",color:"#ffffff",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title"},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"智能体会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"选择专属智能体,获得精准专业服务")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})])])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"chat-page page-container"},[$.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"mask",onClick:j})):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-sidebar",{"sidebar-show":$.value}])},[e.createVNode(D,{chatList:we.value,showNewChatModal:S.value,"onUpdate:showNewChatModal":l[1]||(l[1]=e=>S.value=e),currentSessionId:ke.value,"onUpdate:currentSessionId":l[2]||(l[2]=e=>ke.value=e),chatType:h.value,"onUpdate:chatType":l[3]||(l[3]=e=>h.value=e),onRefreshConversations:Ve},null,8,["chatList","showNewChatModal","currentSessionId","chatType"])],2),e.createElementVNode("view",{class:"chat-wrapper"},[e.createElementVNode("view",{class:"chat-hearder"},[e.createElementVNode("view",{class:"chat-btn-group"},[e.createElementVNode("view",{class:"head-btn",onClick:j},[e.createElementVNode("view",{class:"iconfont icon-caidan"})]),e.createElementVNode("view",{class:"head-btn",onClick:I},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"})]),e.createElementVNode("view",{class:"head-btn",onClick:L},[e.createElementVNode("view",{class:"iconfont icon-cloud"})]),e.createElementVNode("view",{class:"head-btn log-out",onClick:z},[e.createElementVNode("view",{class:"iconfont icon-tuichu"})])])]),e.createElementVNode("view",{class:"main-chat"},[e.createElementVNode("scroll-view",{class:"chat-messages",direction:"vertical","scroll-y":"","scroll-into-view":Pe.value,"upper-threshold":0,"scroll-with-animation":!0,onScroll:ze},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(je.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock(e.Fragment,{key:a},[0===h.value&&"tool"!==t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-message",{"message-user":"user"===t.role}]),id:"msg-"+a},["user"===t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":"user"===t.role}])},["user"===t.role&&(null==(n=Ne.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ne.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"iconfont icon-yonghuziliao"}))],2)):e.createCommentVNode("",!0),t.content&&""!==String(t.content).trim()||t._streaming?(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["chat-content",{"chat-content-user":"user"===t.role,"chat-content-assistant":"assistant"===t.role}]),onClick:e=>K(e,t)},[!t._streaming||t.content&&""!==String(t.content).trim()?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"bubble-loading-dots"},[e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"})])),N(t.content).textContent?(e.openBlock(),e.createElementBlock("view",{key:1,innerHTML:f(N(t.content).textContent)},null,8,["innerHTML"])):e.createCommentVNode("",!0),N(t.content).files.length>0?(e.openBlock(),e.createElementBlock("view",{key:2,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N(t.content).files,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>k(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>y(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(C(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])):e.createCommentVNode("",!0)],10,["id"])):e.createCommentVNode("",!0)],64)})),128)),1===h.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(je.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===Ee.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===Ee.value}])},[t.sender===Ee.value&&(null==(n=Ne.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ne.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):_e(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:_e(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===Ee.value}]),onClick:e=>K(e,t)},[t.content&&""!==String(t.content).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:f(t.content)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>k(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>y(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(C(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),2===h.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(je.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===Ee.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===Ee.value}])},[t.sender===Ee.value&&(null==(n=Ne.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ne.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):xe.value.length>0&&Te(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:Te(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===Ee.value}]),onClick:e=>K(e,t)},[t.message&&""!==String(t.message).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:f(t.message)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>k(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>y(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(C(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),e.createElementVNode("view",{id:"chat-bottom-a",style:{height:"1rpx"}}),e.createElementVNode("view",{id:"chat-bottom-b",style:{height:"1rpx"}})],40,["scroll-into-view"]),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-container",{"interactive-disabled":U.value}])},[e.createElementVNode("view",{class:"chat-interactive-group"},[e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:U.value}]),onClick:l[4]||(l[4]=e=>!U.value&&(t("log","at pages/Chat/Chat.vue:631","点击了拍照上传"),void uni.chooseImage({count:1,sourceType:["camera","album"],success:e=>{const t=e.tempFiles,a=e.tempFilePaths;t.forEach(((e,t)=>{F.value.push({path:a[t],name:e.name||`photo_${Date.now()}_${t}.jpg`,size:e.size,type:"image",tempFile:e})}))},fail:e=>{t("error","at pages/Chat/Chat.vue:649","选择图片失败",e)}})))},"拍照上传",2),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:U.value}]),onClick:l[5]||(l[5]=e=>!U.value&&(t("log","at pages/Chat/Chat.vue:660","点击了上传文件"),void he({count:5,type:"all",success:e=>{t("log","at pages/Chat/Chat.vue:665","成功了"),O.value=e.tempFiles,F.value.push(...e.tempFiles),uni.showToast({title:`已选择 ${e.tempFiles.length} 个文件`,icon:"success"})},fail:e=>{t("error","at pages/Chat/Chat.vue:676","选择失败:",e),uni.showToast({title:"选择失败",icon:"error"})}})))},"上传文件",2)]),F.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"image-list"},[e.createElementVNode("view",{class:"image-tags"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"image-tag",key:a},[e.createElementVNode("text",{class:"tag-name"},e.toDisplayString(t.name),1),e.createElementVNode("text",{class:"tag-close",onClick:e.withModifiers((e=>(e=>{F.value.splice(e,1)})(a)),["stop"])},"×",8,["onClick"])])))),128))])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-input-container",{"input-disabled":U.value}])},[e.withDirectives(e.createElementVNode("textarea",{class:"message-input",placeholder:U.value?q.value?"AI 正在回复中...":"电脑正在运行,请稍后":"输入消息...",disabled:U.value,"onUpdate:modelValue":l[6]||(l[6]=e=>fe.value=e),"auto-height":""},null,8,["placeholder","disabled"]),[[e.vModelText,fe.value]]),U.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"input-btn-group stop-message-btn",onClick:ge},[e.createElementVNode("view",{class:"iconfont icon-tingzhi"})])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"input-btn-group send-message-btn",onClick:l[7]||(l[7]=e=>(async()=>{if(fe.value.trim()||0!==F.value.length){if(F.value.length>0){R.value=!0,uni.showLoading({title:"上传文件中...",mask:!0});try{const e=[];for(const t of F.value){const a=await oe(t.path);e.push(a)}W.value=e,F.value=[]}catch(e){return uni.hideLoading(),t("error","at pages/Chat/Chat.vue:900","文件上传失败:",e),uni.showToast({title:"文件上传失败,请重试",icon:"error"}),void(R.value=!1)}uni.hideLoading(),R.value=!1}0===h.value&&ve(),1===h.value&&pe(),2===h.value&&me()}})())},[e.createElementVNode("view",{class:"iconfont icon-fasong"})]))],2)],2)])])]),H.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"ncd-overlay",onClick:Z},[e.createElementVNode("view",{class:"ncd-card message-detail-card",onClick:l[8]||(l[8]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("text",{class:"ncd-title-zh"},"消息详情"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:Z})]),e.createElementVNode("scroll-view",{class:"message-detail-content","scroll-y":""},[X.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"detail-links-section"},[e.createElementVNode("view",{class:"detail-links-title"},"文件 ("+e.toDisplayString(X.value.length)+")",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(X.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"detail-link-item",onClick:e=>ue(t.url)},[e.createElementVNode("text",{class:"link-text"},e.toDisplayString(t.name),1)],8,["onClick"])))),128))])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"detail-empty"},[e.createElementVNode("text",null,"无可下载文件")]))])])])):e.createCommentVNode("",!0),se.value.show?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["download-toast-overlay",(se.value.show,"")])},[e.createElementVNode("view",{class:e.normalizeClass(["download-toast-card","download-toast-"+se.value.type])},["loading"===se.value.type?(e.openBlock(),e.createElementBlock("view",{key:0,class:"download-toast-icon"},[e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"})])):(e.openBlock(),e.createElementBlock("text",{key:1,class:"download-toast-icon"},e.toDisplayString("success"===se.value.type?"✓":"✕"),1)),e.createElementVNode("text",{class:"download-toast-text"},e.toDisplayString(se.value.message),1)],2)],2)):e.createCommentVNode("",!0)],64)}}},[["__scopeId","data-v-efd33b40"]]),fe=C({__name:"WorkSpace",setup(n){const l=e.ref(""),o=e.ref(""),i=e.ref(""),c=e.ref("工作区"),r=e.ref(!1),u=e.ref([]),d=e.ref(!1),p=e.ref(!1),m=e.ref(""),v=()=>{d.value=!1,m.value=""},f=()=>{he({count:10,type:"all",success:async e=>{const t=e.tempFiles||[];0!==t.length?await w(t):uni.showToast({title:"未选择文件",icon:"none"})},fail:e=>{t("error","at pages/WorkSpace/WorkSpace.vue:176","选择文件失败:",e)}})},w=async e=>{uni.showLoading({title:"上传中..."});try{const a=$.value.length>0?"./"+$.value.map((e=>e.name)).join("/")+"/":"/",n=await((e,a,n)=>new Promise(((l,o)=>{const i=(Array.isArray(a)?a:[a]).map((e=>({name:"files",uri:"string"==typeof e?e:e.tempFilePath||e.path||e})));t("log","at utils/cloud-api.js:595","uploadFileToShortStorage 参数:",{workspacesId:e,fileCount:i.length,filePath:n}),uni.uploadFile({url:`${s}/cloud_api/file/temp/upload`,method:"POST",formData:{workspaces_id:e,file_path:n||"/",overwrite:"true"},files:i,success:e=>{if(t("log","at utils/cloud-api.js:607","uploadFileToShortStorage 响应状态:",e.statusCode,"数据:",e.data),200===e.statusCode)try{const t=JSON.parse(e.data);if(Array.isArray(t)&&t.length>0)l(t);else if(t.success)l([{url:t.url||t.message,success:!0}]);else{const e=(null==t?void 0:t.error)||(null==t?void 0:t.message)||"上传文件(到短存云端)获取URL出错啦";o(e)}}catch(a){o("接口返回数据格式异常: "+e.data)}else o(`上传文件(到短存云端)获取URL失败:${e.statusCode} - ${e.data}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(o.value,e,a),i=n.filter((e=>e.success)).map((e=>e.url));if(0===i.length){const e=n.filter((e=>!e.success)).map((e=>e.error)).join("; ");throw new Error(e||"所有文件上传失败")}await((e,t,a,n)=>new Promise(((l,o)=>{const i=Array.isArray(a)?a:a?[a]:[];uni.request({url:`${s}/cloud_api/phone/workspace/upload`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,dir_path:n||"/",urls:i},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)l(t);else{const e=(t.results||[]).filter((e=>!e.success)).map((e=>e.error||"未知错误")),a=e.length>0?`上传失败 ${t.failed_count}/${t.total_files}:${e[0]}`:t.summary||(null==t?void 0:t.error)||"上传文件到工作区出错啦";o(a)}}else o(`上传文件到工作区失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(l.value,o.value,i,a),uni.hideLoading();const c=e.length,r=c-i.length,u=r>0?`上传完成:成功 ${i.length},失败 ${r}`:`成功上传 ${c} 个文件`;uni.showToast({title:u,icon:i.length>0?"success":"error"}),I()}catch(a){uni.hideLoading(),t("error","at pages/WorkSpace/WorkSpace.vue:229","上传文件失败:",a),uni.showToast({title:"string"==typeof a?a:"上传失败,请重试",icon:"error"})}},k=e.computed((()=>0===$.value.length?"根目录":"/"+$.value.map((e=>e.name)).join("/"))),y=e.computed((()=>{const e=$.value.map((e=>e.name)).join("/"),t=m.value.trim();return t?e?`./${e}/${t}`:`./${t}`:e?`./${e}/`:"./"})),E=async()=>{const e=m.value.trim();if(e)try{const t=$.value.map((e=>e.name)).join("/"),a=t?`./${t}/${e}`:`./${e}`;await g(l.value,o.value,a),uni.showToast({title:"创建成功",icon:"success"}),v(),I()}catch(a){t("error","at pages/WorkSpace/WorkSpace.vue:275","创建文件夹失败:",a),uni.showToast({title:"创建失败,请重试",icon:"error"})}else uni.showToast({title:"请输入目录名称",icon:"none"})},C=async e=>{var a,n,i;if("directory"!==e.type)try{uni.showLoading({title:"获取下载链接..."});const c=e.path.startsWith("./")?e.path.slice(2):e.path,r=await(a=l.value,n=o.value,i=c,new Promise(((e,t)=>{uni.request({url:`${s}/cloud_api/phone/workspace/downloadFile`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:a,workspaces_id:n,file_path:i},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.message||n.data);else if(Array.isArray(n))e(n);else{const e=(null==n?void 0:n.error)||"获取工作区文URL出错啦";t(e)}}else t(`获取工作区文URL失败:${a.statusCode}`)}})})));uni.hideLoading();const u=Array.isArray(r)?r[0]:r;if(!u||!u.url)return void uni.showToast({title:"获取下载链接失败",icon:"error"});const d=u.url,p=e.name;uni.showLoading({title:"下载中..."}),uni.downloadFile({url:d,name:p,success:e=>{if(uni.hideLoading(),200===e.statusCode){const t=e.tempFilePath;N(t)}else uni.showToast({title:"下载失败",icon:"error"})},fail:e=>{uni.hideLoading(),t("error","at pages/WorkSpace/WorkSpace.vue:406","下载文件失败:",e),uni.showToast({title:"下载失败,请重试",icon:"error"})}})}catch(c){uni.hideLoading(),t("error","at pages/WorkSpace/WorkSpace.vue:415","获取下载链接失败:",c),uni.showToast({title:"获取下载链接失败,请重试",icon:"error"})}else uni.showToast({title:"暂不支持下载目录",icon:"none"})},N=e=>{uni.openDocument({filePath:e,success:()=>uni.showToast({title:"打开成功",icon:"success"}),fail:e=>{t("error","at pages/WorkSpace/WorkSpace.vue:432","打开文件失败:",e),uni.showToast({title:"无法打开此文件",icon:"error"})}})},V=e=>{uni.showModal({title:"提示",content:`确定要删除"${e.name}"吗?`,success:async a=>{if(a.confirm)try{const a=`./${e.path}`;t("log","at pages/WorkSpace/WorkSpace.vue:470","删除的是:",a),await h(l.value,o.value,a),uni.showToast({title:"删除成功",icon:"success"}),I()}catch(n){t("error","at pages/WorkSpace/WorkSpace.vue:478","删除失败:",n),uni.showToast({title:"删除失败,请重试",icon:"error"})}}})},B=e.ref(!1),S=()=>{B.value=!B.value},x=e.ref(""),T=e.ref(!1),D=()=>{T.value=!T.value},P=e.ref({}),$=e.ref([]),j=e.ref([]),M=()=>{var e,a;t("log","at pages/WorkSpace/WorkSpace.vue:559","当前路径为:",JSON.stringify($.value));const n=$.value.length>0?$.value[$.value.length-1].path:".";if("."===n)return(null==(e=P.value)?void 0:e.children)||[];const l=(e,t)=>{var a;for(const n of e){if(n.path===t)return n;if("directory"===n.type&&(null==(a=n.children)?void 0:a.length)){const e=l(n.children,t);if(e)return e}}return null},o=l((null==(a=P.value)?void 0:a.children)||[],n);return o?o.children:[]},I=async()=>{var e,a;o.value=uni.getStorageSync("workspace_id"),l.value=_(),t("log","at pages/WorkSpace/WorkSpace.vue:586","getWorkspaceId:",o.value),P.value=await(e=l.value,a=o.value,new Promise(((t,n)=>{uni.request({url:`${s}/cloud_api/phone/workspace/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:a,format:"tree",parent_path:"",filter_type:""},success:e=>{if(200===e.statusCode){const a=e.data;if(a.success)t(a.data);else{const e=(null==a?void 0:a.error)||"获取工作区文件目录出错啦";n(e)}}else n(`获取工作区文件目录失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})}))),j.value=M()},L=()=>{r.value?u.value.length===j.value.length?u.value=[]:u.value=j.value.map((e=>e.path)):$.value.length>0?($.value.pop(),0===$.value.length?(c.value="工作区",i.value=null):(c.value=$.value[$.value.length-1].name,i.value=$.value.length>1?$.value[$.value.length-2].name:"工作区"),I(),x.value="",T.value=!1):uni.navigateBack({delta:1,fail(){t("log","at pages/WorkSpace/WorkSpace.vue:643","返回失败,进入兜底跳转"),uni.reLaunch({url:"/pages/Chat/Chat"})}})};return e.onMounted((()=>{I()})),(t,n)=>{const l=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),d.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay",onClick:v},[e.createElementVNode("view",{class:"popup-card",onClick:n[3]||(n[3]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:v},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"新建工作区目录"),e.createElementVNode("view",{class:"new-folder-name"},"目录名称"),e.createElementVNode("view",{class:e.normalizeClass(["create-folder-name",{"has-value":p.value||m.value}])},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[0]||(n[0]=e=>m.value=e),onFocus:n[1]||(n[1]=e=>p.value=!0),onBlur:n[2]||(n[2]=e=>p.value=!1),type:"text",placeholder:"输入目录名称,如:项目资料/设计图"},null,544),[[e.vModelText,m.value]])],2),e.createElementVNode("view",{class:"nf-path-label"},"当前路径"),e.createElementVNode("view",{class:"nf-path-display"},e.toDisplayString(k.value),1),e.createElementVNode("view",{class:"nf-path-label"},"路径预览"),e.createElementVNode("view",{class:"nf-path-preview"},e.toDisplayString(y.value),1),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:v},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:E},"确认")])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"workspace-container page-container"},[e.createElementVNode("view",{class:"workspace-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:n[4]||(n[4]=(...e)=>L&&L(...e))},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"}),e.createElementVNode("view",{class:"navbar-before-title workspace-text"},e.toDisplayString(r.value?"全选":i.value),1)]),e.createElementVNode("view",{class:"navbar-title workspace-text"},e.toDisplayString(c.value),1),e.createElementVNode("view",{class:"navbar-right"},[r.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-right-text workspace-text",onClick:n[5]||(n[5]=e=>(r.value&&(u.value=[]),void(r.value=!r.value)))}," 完成")):(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["iconfont icon-gengduo",B.value?"menu-open":"custom-navbar-icon"]),onClick:S},null,2))]),B.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:n[6]||(n[6]=e=>{f(),S()})},"上传文件"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item",onClick:n[7]||(n[7]=e=>{d.value=!0,S()})},"新建文件夹")])):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"search-file-warpper"},[e.createElementVNode("view",{class:"search-file"},[e.createElementVNode("view",{class:"iconfont icon-sousuo"}),e.withDirectives(e.createElementVNode("input",{class:"search-file-input",placeholder:"搜索",onFocus:D,"onUpdate:modelValue":n[8]||(n[8]=e=>x.value=e)},null,544),[[e.vModelText,x.value]])]),T.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"cancel-search",onClick:D},"取消")):e.createCommentVNode("",!0)])]),e.createElementVNode("view",{class:"workspace-content"},[0===j.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createTextVNode(" 文件夹为空 ")])):e.createCommentVNode("",!0),j.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:1,class:"folder-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,(t=>{return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["folder-item",{"select-folder":u.value.includes(t.path)}]),key:t.path,onClick:e=>r.value?(e=>{const t=u.value.indexOf(e);-1!==t?u.value.splice(t,1):u.value.push(e)})(t.path):(e=>{"directory"===e.type&&($.value.push({path:e.path,name:e.name}),c.value=e.name,i.value=$.value.length>1?$.value[$.value.length-2].name:"工作区",j.value=M(),x.value="",T.value=!1)})(t),onLongpress:e=>(e=>{r.value||uni.showActionSheet({itemList:["下载","删除"],success:t=>{switch(t.tapIndex){case 0:C(e);break;case 1:V(e)}}})})(t)},["directory"===t.type?(e.openBlock(),e.createElementBlock("view",{key:0,class:"iconfont icon-a-wenjianjiawenjian folder-item-style"})):(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["iconfont folder-item-style",(a=t.extension,{".png":"icon-wenjiantupian",".jpg":"icon-wenjiantupian",".jpeg":"icon-wenjiantupian",".gif":"icon-wenjiantupian",".svg":"icon-SVG",".bmp":"icon-wenjiantupian",".webp":"icon-wenjiantupian",".mp4":"icon-wenjianshipin",".avi":"icon-wenjianshipin",".mov":"icon-wenjianshipin",".wmv":"icon-wenjianshipin",".flv":"icon-wenjianshipin",".mkv":"icon-wenjianshipin",".mp3":"icon-wenjianyinpin",".wav":"icon-wenjianyinpin",".flac":"icon-wenjianyinpin",".aac":"icon-wenjianyinpin",".pdf":"icon-PDF1",".doc":"icon-word",".docx":"icon-word",".xls":"icon-execl",".xlsx":"icon-execl",".ppt":"icon-PPT1",".pptx":"icon-PPT1",".txt":"icon-TXT1",".md":"icon-file-markdown-fill",".zip":"icon-wenjianyasuo",".rar":"icon-wenjianyasuo",".7z":"icon-wenjianyasuo",".tar":"icon-wenjianyasuo",".gz":"icon-wenjianyasuo",".js":"icon-JS",".ts":"icon-daimawenjia",".vue":"icon-daimawenjia",".html":"icon-HTML",".css":"icon-CSS",".py":"icon-daima",".java":"icon-daima",".json":"icon-JSON"}[null==a?void 0:a.toLowerCase()]||"icon-qitalingyu")])},null,2)),e.createElementVNode("view",{class:"folder-name"},e.toDisplayString(t.name),1),r.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["folder-checkbox",{"select-folder":u.value.includes(t.path)}])},[u.value.includes(t.path)?(e.openBlock(),e.createBlock(l,{key:0,type:"checkmarkempty",color:"#fff"})):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0)],42,["onClick","onLongpress"]);var a})),128))])):e.createCommentVNode("",!0)]),r.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["workspace-footer",{"folder-actions":u.value.length>0}])},[e.createElementVNode("view",{class:"iconfont icon-shangchuan",onClick:f}),e.createElementVNode("view",{class:"iconfont icon-del"})],2)):e.createCommentVNode("",!0)])],64)}}},[["__scopeId","data-v-3653111e"]]),we=C({__name:"UserProfileModal",setup(n){const l=()=>{t("log","at pages/UserProfileModal/UserProfileModal.vue:55","点击了返回"),uni.navigateBack({delta:1,fail(){uni.reLaunch({url:"/pages/Chat/Chat"})}})},o=async()=>{if(u.value.trim()){uni.showLoading({title:"保存中...",mask:!0});try{await(e=i.value,a=c.value,n=u.value.trim(),o=d.value.trim(),p=r.value,new Promise(((t,l)=>{uni.request({url:`${s}/cloud_api/update_user_profile`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,user_id:a,username:n,"email:":o,avatar:p},success:e=>{if(200===e.statusCode){const a=e.data;if(a.success)t(a.message);else{const e=(null==a?void 0:a.error)||"修改用户信息出错啦";l(e)}}else l(`修改用户信息失败:${e.statusCode}`)}})}))),uni.hideLoading(),uni.showToast({title:"保存成功",icon:"success"}),setTimeout((()=>{l()}),800)}catch(m){uni.hideLoading();const e="string"==typeof m?m:"保存失败,请稍后重试";uni.showToast({title:e,icon:"none"}),t("error","at pages/UserProfileModal/UserProfileModal.vue:93","保存用户信息失败:",m)}var e,a,n,o,p}else uni.showToast({title:"用户名不能为空",icon:"none"})},i=e.ref(""),c=e.ref(""),r=e.ref(""),u=e.ref(""),d=e.ref(""),m=e.ref(!1),v=e.ref(!1),h=()=>{uni.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:e=>{const t=e.tempFilePaths[0];g(t)},fail:e=>{t("log","at pages/UserProfileModal/UserProfileModal.vue:116","选择图片失败",e)}})},g=e=>{r.value=e};return e.onMounted((async()=>{i.value=_();try{const e=await p(i.value);c.value=e._id||"",r.value=e.avatar||"",u.value=e.username||"",d.value=e.email||""}catch(e){t("error","at pages/UserProfileModal/UserProfileModal.vue:135","获取用户信息失败:",e),uni.showToast({title:"加载用户信息失败",icon:"none"})}})),(t,n)=>{const s=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"user-profile page-container"},[e.createElementVNode("view",{class:"modal-header"},[e.createElementVNode("view",{class:"modal-left",onClick:l},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"})]),e.createElementVNode("view",{class:"modal-title"},[e.createElementVNode("view",{class:"title-text"},"编辑资料")]),e.createElementVNode("view",{class:"modal-right",onClick:o},[e.createElementVNode("view",{class:"save-btn"},"保存")])]),e.createElementVNode("view",{class:"modal-body"},[e.createElementVNode("view",{class:"avatar-upload-section",onClick:h},[e.createElementVNode("view",{class:"avatar-upload-container"},[r.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"avatar-preview"},[e.createElementVNode("image",{src:r.value,mode:"aspectFill"},null,8,["src"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"avatar-placeholder"},[e.createVNode(s,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))])]),e.createElementVNode("view",{class:"form-card"},[e.createElementVNode("view",{class:"form-field"},[e.createElementVNode("view",{class:"form-text"},"用户名"),e.withDirectives(e.createElementVNode("input",{"adjust-position":"false",class:e.normalizeClass(["form-field-input form-field-username",{"edit-input-focus":m.value}]),"onUpdate:modelValue":n[0]||(n[0]=e=>u.value=e),onFocus:n[1]||(n[1]=e=>m.value=!0),onBlur:n[2]||(n[2]=e=>m.value=!1)},null,34),[[e.vModelText,u.value]])]),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"form-field"},[e.createElementVNode("view",{class:"form-text"},"邮箱"),e.withDirectives(e.createElementVNode("input",{"adjust-position":"false",class:e.normalizeClass(["form-field-input form-field-emile",{"edit-input-focus":v.value}]),"onUpdate:modelValue":n[3]||(n[3]=e=>d.value=e),onFocus:n[4]||(n[4]=e=>v.value=!0),onBlur:n[5]||(n[5]=e=>v.value=!1)},null,34),[[e.vModelText,d.value]])])]),e.createElementVNode("view",{class:"prompt-content"},"*保存后再返回哟")])])],64)}}},[["__scopeId","data-v-8fad524d"]]),ke=C({__name:"ContactPages",setup(n){const l=ie(),o=()=>{uni.navigateBack({delta:1,fail(){uni.reLaunch({url:"/pages/Chat/Chat"})}})},s=(e,t="")=>{uni.setStorageSync("chatType",e),t&&uni.setStorageSync("currentSessionId",t),uni.reLaunch({url:"/pages/Chat/Chat"})},i=e.ref(0),c=e.reactive([{name:"contacts",label:"通讯录",icon:"📞"},{name:"createGroup",label:"新建群聊",icon:"👥"},{name:"addFriend",label:"添加好友",icon:"➕"},{name:"friendRequest",label:"好友申请",icon:"📨"}]),r=e=>{i.value=e.detail.current},u=e.ref(""),d=e.ref(""),h="宇恒一号",g=e.ref([]),f=async()=>{try{t("log","at pages/ContactPages/ContactPages.vue:442","开始获取好友列表"),u.value=_();const e=await p(u.value);d.value=e._id,t("log","at pages/ContactPages/ContactPages.vue:446","UserId.value:",d.value);const a=await ee(d.value);t("log","at pages/ContactPages/ContactPages.vue:448","friendList:",a),a&&a.length?g.value=await w(a):(g.value=[],t("log","at pages/ContactPages/ContactPages.vue:453","好友列表为空"))}catch(e){t("error","at pages/ContactPages/ContactPages.vue:456","获取好友列表失败:",e),g.value=[]}},w=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.receiver)),a=await m(u.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.receiver);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/ContactPages/ContactPages.vue:477","获取好友头像失败",a),e}};e.onMounted((async()=>{await f(),await y(),await z(),l.isConnected||(u.value&&d.value?l.connect({token:u.value,UserId:d.value}):t("warn","at pages/ContactPages/ContactPages.vue:341","Token或UserId未准备好"))}));const k=e.ref([]),y=async()=>{try{t("log","at pages/ContactPages/ContactPages.vue:494","开始获取群聊列表"),u.value=_();const e=await p(u.value);d.value=e._id,t("log","at pages/ContactPages/ContactPages.vue:498","UserId.value:",d.value),k.value=await te(d.value)}catch(e){t("error","at pages/ContactPages/ContactPages.vue:501","获取群聊列表失败:",e),k.value=[]}},E=e.ref(""),C=e.ref(),N=async()=>{try{if(!E.value)return void uni.showToast({title:"群名称不能为空",icon:"none"});if(0===B.value.length)return void uni.showToast({title:"请选择群成员",icon:"none"});await new Promise(((e,a)=>{if(l.isConnected)return void e();if(!u.value||!d.value)return void a(new Error("Token或UserId未准备好"));t("log","at pages/ContactPages/ContactPages.vue:522","friendSocket 未连接,正在建立连接..."),l.connect({token:u.value,UserId:d.value});const n=setInterval((()=>{l.isConnected&&(clearInterval(n),t("log","at pages/ContactPages/ContactPages.vue:531","friendSocket 连接已建立"),e())}),100);setTimeout((()=>{clearInterval(n),l.isConnected||a(new Error("连接超时"))}),1e4)}));const e=B.value.map((e=>e.id));C.value={version:"1.1",body:{command:3,userIds:e,message:"我来邀请你们了",sender:d.value,callBackMessage:!0,groupName:E.value,teamCreateReq:{access_token:u.value}}};await l.send(C.value)?await V():t("log","at pages/ContactPages/ContactPages.vue:587","发送新建群聊消息失败")}catch(e){t("log","at pages/ContactPages/ContactPages.vue:590",e),uni.showToast({title:`新建群聊失败${e}`,icon:"none"})}},V=()=>new Promise(((a,n)=>{const o=setTimeout((()=>{n(new Error("超时未返回群聊创建结果"))}),18e4),s=e.watch((()=>l.command),(async e=>{if(t("log","at pages/ContactPages/ContactPages.vue:609","创建一个一次性监听器"),e&&3===l.command){t("log","at pages/ContactPages/ContactPages.vue:611","监听到command的值是3,检查群聊是否创建成功",l.command);try{await y();const e=k.value.find((e=>e.id===l.groupId));e?(t("log","at pages/ContactPages/ContactPages.vue:618","✅ 新建群聊成功",e),B.value=[],i.value=0):t("log","at pages/ContactPages/ContactPages.vue:623","❌ 新建群聊失败 / 群组不存在")}catch(a){t("error","at pages/ContactPages/ContactPages.vue:627","保存AI回复失败:",a),n(a)}finally{l.command=null,l.groupId=null,s(),clearTimeout(o)}}}))})),B=e.ref([]),S=e.ref(!1),x=e.ref(""),T=e.ref([]),D=async()=>{if(!x.value.trim())return void(T.value=[]);const e=x.value.toLowerCase().trim();T.value=await v(u.value,e),t("log","at pages/ContactPages/ContactPages.vue:676","searchResultList.value:",JSON.stringify(T.value))},P=()=>{S.value=!S.value},$=e.ref(null),j=()=>{$.value=null,I.value=!1},M=e.ref("");e.ref(!1),e.ref(!1);const I=e.ref(!1),L=e.ref([]),z=async()=>{try{if(!d.value)return;const e=await(async e=>new Promise(((t,a)=>{uni.request({url:`${Z}/api/friendship/getFriendship`,method:"POST",data:{current:1,size:100,sendId:e},success:e=>{var n;if(200===e.statusCode){const l=e.data;if(0===(null==l?void 0:l.code)||"成功"===(null==l?void 0:l.msg)){const e=(null==(n=null==l?void 0:l.data)?void 0:n.records)||[];t(e)}else{const t=e.data.msg||"获取添加我的好友出错啦";a(t)}}else a(`获取添加我的好友失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})))(d.value);e&&e.length?L.value=await F(e):L.value=[]}catch(e){t("error","at pages/ContactPages/ContactPages.vue:732","获取好友申请列表失败:",e),L.value=[]}},F=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.sendId)),a=await m(u.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.sendId);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/ContactPages/ContactPages.vue:751","获取申请人头像失败",a),e}},O=async()=>{if(I.value)try{const e=$.value.sendId,t=M.value||$.value.friendNickName||"",a=$.value.sessionId||Date.now(),n=$.value.id;await(async e=>new Promise(((t,a)=>{uni.request({url:`${Z}/api/chatList/save`,method:"POST",header:{"Content-Type":"application/json"},data:e,success:e=>{if(200===e.statusCode){const n=e.data;if(0===(null==n?void 0:n.code)||"成功"===(null==n?void 0:n.msg))t("保存好友成功");else{const e=(null==n?void 0:n.msg)||"保存好友出错啦";a(e)}}else a(`保存好友失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})))([{friendNickName:t,sender:d.value,receiver:e,sessionId:a,friendRelationshipId:n},{friendNickName:"",sender:e,receiver:d.value,sessionId:a,friendRelationshipId:n}]),uni.showToast({title:"已同意好友申请",icon:"none"});const l=L.value.find((t=>t.sendId===e));l&&(l.status=1),j(),await f()}catch(e){t("error","at pages/ContactPages/ContactPages.vue:795","同意好友申请失败:",e),uni.showToast({title:"操作失败",icon:"none"})}else try{const e=$.value._id,a=await(async(e,a,n)=>new Promise(((l,o)=>{t("log","at utils/friend-api.js:239","进入sendFriendRequest"),uni.request({url:`${Z}/api/friendship/saveShip`,method:"POST",data:{sendId:e,friendNickName:a,recipientId:n},success:e=>{if(200===e.statusCode){const t=e.data;if(0===(null==t?void 0:t.code)||"成功"===(null==t?void 0:t.msg))l("已成功发送好友申请");else{const t=e.data.msg||"发送好友申请出错啦";o(t)}}else o(`发送好友申请失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(d.value,M.value,e);uni.showToast({title:a,icon:"none"}),j()}catch(e){t("error","at pages/ContactPages/ContactPages.vue:806","发送好友申请失败:",e),uni.showToast({title:"发送申请失败",icon:"none"})}};return(n,l)=>{const u=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),$.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay"},[e.createElementVNode("view",{class:"popup-card"},[e.createElementVNode("view",{class:"close-popup-card",onClick:j},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},e.toDisplayString(I.value?"通过好友申请":"申请添加朋友"),1),e.createElementVNode("view",{class:"friend-card"},[e.createElementVNode("view",{class:"friend-card-left"},[$.value.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:$.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString($.value.username),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString($.value.sessionId),1)])]),e.createElementVNode("view",{class:"nickname-wrapper"},[e.createElementVNode("view",null,"好友备注"),e.withDirectives(e.createElementVNode("input",{class:"input-nickname",placeholder:"请输入好友名称","onUpdate:modelValue":l[0]||(l[0]=e=>M.value=e)},null,512),[[e.vModelText,M.value]])]),e.createElementVNode("view",{class:"text-btn confirm-btn",onClick:O},e.toDisplayString(I.value?"确认通过":"发送申请"),1)])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"tabbar-page page-container"},[e.createElementVNode("swiper",{class:"content-swiper",current:i.value,duration:300,onChange:r},[e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"通讯录")]),e.createElementVNode("view",{class:"tabpage-body"},[e.createElementVNode("scroll-view",{class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[e.createElementVNode("view",{class:"friend-card",onClick:l[1]||(l[1]=e=>s(0))},[e.createElementVNode("view",{class:"friend-card-left"},[e.createElementVNode("view",{class:"friend-avatar",style:{"background-color":"#38bdf8"}},[e.createElementVNode("view",{class:"iconfont icon-Robot",style:{"font-size":"80rpx",color:"#fff"}})])]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(h),1),e.createElementVNode("view",{class:"friend-label"})]),e.createElementVNode("view",{class:"friend-card-right"},[e.createVNode(u,{type:"right"})])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:t.sessionId,onClick:e=>s(t.type,t.sessionId)},[e.createElementVNode("view",{class:"friend-card-left"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(t.friendNickName),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(t.sessionId),1)]),e.createElementVNode("view",{class:"friend-card-right"},[e.createVNode(u,{type:"right"})])],8,["onClick"])))),128)),e.createElementVNode("view",null,"群聊"),e.createElementVNode("view",{class:"solid-line"}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:t.id,onClick:e=>s(t.type,t.id)},[e.createElementVNode("view",{class:"friend-card-left"},[e.createElementVNode("view",{class:"friend-avatar",style:{"background-color":"#ffaaff"}},[e.createElementVNode("view",{class:"iconfont icon-qunliao",style:{"font-size":"80rpx",color:"#fff"}})])]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(t.createTime),1)]),e.createElementVNode("view",{class:"friend-card-right"},[e.createVNode(u,{type:"right"})])],8,["onClick"])))),128))])])])])]),e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"新建群聊")]),e.createElementVNode("view",{class:"tabpage-body"},[e.createElementVNode("view",{class:"group-info"},[e.createElementVNode("view",{class:"group-name"},[e.createElementVNode("view",null,"群名称"),e.withDirectives(e.createElementVNode("input",{class:"input",placeholder:"请输入群名称","onUpdate:modelValue":l[2]||(l[2]=e=>E.value=e)},null,512),[[e.vModelText,E.value]])]),e.createElementVNode("view",{class:"group-member-wrapper"},[e.createElementVNode("view",{class:"member-title"},"群成员"),e.createElementVNode("view",{class:"group-ismember-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"group-ismember-info",key:a},[e.createElementVNode("view",{class:"group-ismember-name"},e.toDisplayString(t.friendNickName),1)])))),128))])]),e.createElementVNode("view",{class:"create-group-btn",onClick:N},"创建群聊")]),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("scroll-view",{class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,(a=>{var n;return e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:a.receiver},[e.createElementVNode("view",{class:"friend-card-left"},[a.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:a.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(a.friendNickName),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(a.email),1)]),e.createElementVNode("view",{class:"friend-card-right",onClick:e=>(e=>{t("log","at pages/ContactPages/ContactPages.vue:648","选择的好友id:",e),t("log","at pages/ContactPages/ContactPages.vue:649","selectGroupMember.value=",JSON.stringify(B.value));const a=B.value.findIndex((t=>t.id===e));if(-1===a){const t=g.value.find((t=>t.receiver===e));t&&B.value.push({id:t.receiver,friendNickName:t.friendNickName})}else B.value.splice(a,1)})(a.receiver)},[e.createElementVNode("view",{class:"friend-checkbox"},[(null==(n=B.value)?void 0:n.find((e=>e.id===a.receiver)))?(e.openBlock(),e.createBlock(u,{key:0,type:"checkmarkempty"})):e.createCommentVNode("",!0)])],8,["onClick"])])})),128))])])])])]),e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"添加好友")]),e.createElementVNode("view",{class:"tabpage-body"},[e.createElementVNode("view",{class:"search-warpper"},[e.withDirectives(e.createElementVNode("input",{class:e.normalizeClass(["search-file-input",{active:S.value}]),onFocus:P,onBlur:P,"onUpdate:modelValue":l[3]||(l[3]=e=>x.value=e),"confirm-type":"search",onConfirm:D},null,34),[[e.vModelText,x.value]]),e.createElementVNode("view",{class:"iconfont icon-sousuo",onClick:D})]),x.value?T.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"search-result"},[e.createElementVNode("scroll-view",{class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,(a=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:a.id},[e.createElementVNode("view",{class:"friend-card-left"},[e.createElementVNode("view",{class:"friend-avatar"},[e.createElementVNode("image",{class:"friend-avatar",src:a.avatar,mode:"aspectFill"},null,8,["src"])])]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(a.nickname),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(a.email),1)]),e.createElementVNode("view",{class:"friend-card-right",onClick:e=>(e=>{const a=T.value.find((t=>t._id===e));a?$.value={...a}:(t("warn","at pages/ContactPages/ContactPages.vue:697","未找到该好友"),$.value=null)})(a._id)},[e.createElementVNode("view",{class:"add-btn text-btn"},"添加")],8,["onClick"])])))),128))])])])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"no-result"},"未找到相关用户,请尝试其他关键词")):(e.openBlock(),e.createElementBlock("view",{key:0,class:"search-tip"},"请输入用户名或邮箱进行搜索"))])])]),e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"好友申请")]),e.createElementVNode("view",{class:"tabpage-body"},[L.value.length?(e.openBlock(),e.createElementBlock("scroll-view",{key:1,class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:t.id},[e.createElementVNode("view",{class:"friend-card-left"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(t.friendNickName||t.sendId),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(t.message||"请求添加你为好友"),1)]),e.createElementVNode("view",{class:"friend-card-right"},[0===t.state?(e.openBlock(),e.createElementBlock("view",{key:0,class:"friend-option"},[e.createElementVNode("view",{class:"agree-btn text-btn",onClick:e=>(e=>{I.value=!0,$.value={...e,username:e.friendNickName||e.sendId}})(t)},"同意",8,["onClick"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-status agreed"},"已同意"))])])))),128))])])):(e.openBlock(),e.createElementBlock("view",{key:0,class:"no-result"},"暂无好友申请"))])])])],40,["current"]),e.createElementVNode("view",{class:"bottom-tabbar"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:t.name,onClick:e=>(e=>{i.value=e})(a),class:"tab-item"},[e.createElementVNode("view",{class:"tab-icon"},e.toDisplayString(t.icon),1),e.createElementVNode("view",{class:"tab-label"},e.toDisplayString(t.label),1)],8,["onClick"])))),128))])])],64)}}},[["__scopeId","data-v-d6fd7c06"]]),ye=C({__name:"TemplateSpace",setup(a){const n=e=>{if(!e)return"";const t=Math.floor(e),a=new Date(1e3*t);return`${a.getFullYear()}-${(a.getMonth()+1).toString().padStart(2,"0")}-${a.getDate().toString().padStart(2,"0")} ${a.getHours().toString().padStart(2,"0")}:${a.getMinutes().toString().padStart(2,"0")}:${a.getSeconds().toString().padStart(2,"0")}`},l=e=>{if(!e||0===e)return"0 B";const t=["B","KB","MB","GB","TB"];let a=e,n=0;for(;a>=1024&&n{t("log","at pages/WorkSpace/TemplateSpace/TemplateSpace.vue:188","点击了编辑模板")},i=e.ref(""),c=e.ref([]),r=e=>{i.value=e,"all"===e&&(d.value="全部模板",c.value=y.value),"like"===e&&(d.value="收藏模板",c.value=y.value.filter((e=>!0===e.is_favorite)))},u=e.ref(""),d=e.ref("模板区"),p=e.ref(!1),m=e.ref([]),v=()=>{p.value&&(m.value=[]),p.value=!p.value},h=e.ref(!1),g=()=>{h.value=!h.value},f=e.ref(""),w=e.ref(!1),k=()=>{w.value=!w.value},y=e.ref([{name:"SKILL.md",type:"file",path:"SKILL.md",children:[],file_count:0,directory_count:0,size:4768,modified_time:1776827361.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"该回家看了的法国红酒看来法帝国海军快来尝尝v吧给v复仇计划曝光vi计划日方提供与i哦的风格和健康"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"的法国红酒看来法帝国海军快来尝尝v吧给"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:""},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"}]),E=()=>{p.value?m.value.length===c.value.length?m.value=[]:m.value=c.value.map((e=>e.id)):(!p.value&&c.value&&(c.value=[],i.value="",d.value="模板区"),p.value||c.value||uni.navigateBack({delta:1,fail(){t("log","at pages/WorkSpace/TemplateSpace/TemplateSpace.vue:468","返回失败,进入兜底跳转"),uni.reLaunch({url:"/pages/Chat/Chat"})}}))};return(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"popup-overlay"},[e.createElementVNode("view",{class:"popup-card"},[e.createElementVNode("view",{class:"close-popup-card"},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"编辑模板"),e.createElementVNode("view",{class:"edit-template-wrapper"},[e.createElementVNode("view",{class:"edit-template-name"},[e.createElementVNode("view",null,"模板名称"),e.withDirectives(e.createElementVNode("input",{"placeholder-style":"请输入模板名称","onUpdate:modelValue":a[0]||(a[0]=e=>o.value=e)},null,512),[[e.vModelText,o.value]])]),e.createElementVNode("view",{class:"edit-template-name"},[e.createElementVNode("view",null,"模板内容"),e.createElementVNode("view",{class:"markdown-editor-pane"},[e.createElementVNode("view",{class:"markdown-pane-header"}," 编辑 "),e.createElementVNode("textarea")]),e.createElementVNode("view",{class:"markdown-preview-pane"},[e.createElementVNode("view",{class:"markdown-pane-header"}," 预览 "),e.createElementVNode("view")])])])])]),e.createElementVNode("view",{class:"workspace-container page-container"},[e.createElementVNode("view",{class:"workspace-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:a[1]||(a[1]=(...e)=>E&&E(...e))},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"}),e.createElementVNode("view",{class:"navbar-before-title workspace-text"},e.toDisplayString(p.value?"全选":u.value),1)]),e.createElementVNode("view",{class:"navbar-title workspace-text"},e.toDisplayString(d.value),1),i.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-right"},[p.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-right-text workspace-text",onClick:a[2]||(a[2]=e=>v())}," 完成")):(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["iconfont icon-gengduo",h.value?"menu-open":"custom-navbar-icon"]),onClick:g},null,2))])):e.createCommentVNode("",!0),h.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:a[3]||(a[3]=e=>{v(),g()})},"选择"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item"},"新建模板"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item"},"上传模板")])):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"search-file-warpper"},[e.createElementVNode("view",{class:"search-file"},[e.createElementVNode("view",{class:"iconfont icon-sousuo"}),e.withDirectives(e.createElementVNode("input",{class:"search-file-input",placeholder:"搜索",onFocus:k,"onUpdate:modelValue":a[4]||(a[4]=e=>f.value=e)},null,544),[[e.vModelText,f.value]])]),w.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"cancel-search",onClick:k},"取消")):e.createCommentVNode("",!0)])]),i.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-grid"},[e.createElementVNode("view",{class:"folder-item",onClick:a[5]||(a[5]=e=>r("all"))},[e.createElementVNode("view",{class:"iconfont icon-a-wenjianjiawenjian folder-item-style"}),e.createElementVNode("view",{class:"folder-name"},"全部模板")]),e.createElementVNode("view",{class:"folder-item",onClick:a[6]||(a[6]=e=>r("like"))},[e.createElementVNode("view",{class:"iconfont icon-a-wenjianjiawenjian folder-item-style"}),e.createElementVNode("view",{class:"folder-name"},"收藏模板")])])),i.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"workspace-content"},[0===c.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createTextVNode(" 暂无模板 ")])):e.createCommentVNode("",!0),c.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:1,class:"template-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"template-card",key:a},[e.createElementVNode("view",{class:"template-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"template-content"},[e.createElementVNode("view",{class:"template-content-text"},e.toDisplayString(t.content),1)]),e.createElementVNode("view",{class:"template-info-wrapper"},[e.createElementVNode("view",{class:"template-item"},[e.createElementVNode("view",{class:"template-time background-style"},e.toDisplayString(n(t.modified_time)),1),e.createElementVNode("view",{class:"template-cache background-style"},e.toDisplayString(l(t.size)),1)]),e.createElementVNode("view",{class:"template-option"},[e.createElementVNode("view",{class:e.normalizeClass(["iconfont",t.is_favorite?"icon-favorite-fill":"icon-favorite"]),onClick:e=>(e=>{let t;"all"===i.value?t=y.value[e]:"like"===i.value&&(t=y.value.filter((e=>e.is_favorite))[e]);t&&(t.is_favorite=!t.is_favorite),"all"===i.value?c.value=[...y.value]:c.value=y.value.filter((e=>e.is_favorite))})(a)},null,10,["onClick"]),e.createElementVNode("view",{class:"iconfont icon-edit-fill",onClick:s}),e.createElementVNode("view",{class:"iconfont icon-choose-fill"})])])])))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["workspace-footer",{"folder-actions":m.value.length>0}])},[e.createElementVNode("view",{class:"iconfont icon-shangchuan"}),e.createElementVNode("view",{class:"iconfont icon-fuzhi"}),e.createElementVNode("view",{class:"iconfont icon-wenjian"}),e.createElementVNode("view",{class:"iconfont icon-del"}),e.createElementVNode("view",{class:"iconfont icon-gengduo"})],2)):e.createCommentVNode("",!0)])],64))}},[["__scopeId","data-v-2acd55d4"]]),Ee=C({__name:"CloudDatabase",setup(n){const l=e.ref(""),o=e.ref(""),i=e.ref(""),c=e.ref("user"),r=e=>{c.value=e,T.value=[],I()},u=e.ref("云端数据"),d=e.ref(!1),m=e.ref(!1),y=e.ref([]),E=()=>{d.value=!d.value},C=e.computed((()=>{var e;return 0===T.value.length?"":1===T.value.length?"云端数据":(null==(e=T.value[T.value.length-2])?void 0:e.name)||"云端数据"})),N=()=>{T.value.length>0?(T.value.pop(),u.value=T.value.length>0?T.value[T.value.length-1].name:"云端数据",I()):uni.navigateBack({delta:1,fail(){uni.reLaunch({url:"/pages/Chat/Chat"})}})},V=e.ref([]),B=e.ref([]),S=e.ref([]),x=e.ref([]),T=e.ref([]),D=e=>"folder"===e.type,P=e=>{if(D(e))return"icon-a-wenjianjiawenjian";const t=(e=>{if(D(e))return"folder";const t=e.name||"",a=t.lastIndexOf(".");return-1===a?"":t.slice(a).toLowerCase()})(e),a=(e.type||"").toLowerCase(),n={".png":"icon-wenjiantupian",".jpg":"icon-wenjiantupian",".jpeg":"icon-wenjiantupian",".gif":"icon-wenjiantupian",".svg":"icon-SVG",".bmp":"icon-wenjiantupian",".webp":"icon-wenjiantupian",".mp4":"icon-wenjianshipin",".avi":"icon-wenjianshipin",".mov":"icon-wenjianshipin",".wmv":"icon-wenjianshipin",".flv":"icon-wenjianshipin",".mkv":"icon-wenjianshipin",".mp3":"icon-wenjianyinpin",".wav":"icon-wenjianyinpin",".flac":"icon-wenjianyinpin",".aac":"icon-wenjianyinpin",".pdf":"icon-PDF",".doc":"icon-DOC",".docx":"icon-DOC",".xls":"icon-XLS",".xlsx":"icon-XLS",".ppt":"icon-PPT",".pptx":"icon-PPT",".txt":"icon-TXT",".md":"icon-file-markdown-fill",".zip":"icon-wenjianyasuo",".rar":"icon-wenjianyasuo",".7z":"icon-wenjianyasuo",".tar":"icon-wenjianyasuo",".gz":"icon-wenjianyasuo",".js":"icon-JS",".ts":"icon-daimawenjia",".vue":"icon-daimawenjia",".html":"icon-HTML",".css":"icon-CSS",".py":"icon-daimawenjian",".java":"icon-daimawenjian",".json":"icon-JSON"};return t&&n[t]?n[t]:a.startsWith("image/")?"icon-wenjiantupian":a.startsWith("video/")?"icon-wenjianshipin":a.startsWith("audio/")?"icon-wenjianyinpin":a.includes("spreadsheet")||a.includes("excel")?"icon-XLS":a.includes("document")||a.includes("word")?"icon-DOC":a.includes("presentation")||a.includes("powerpoint")?"icon-PPT":a.includes("pdf")?"icon-PDF":a.includes("zip")||a.includes("rar")||a.includes("tar")||a.includes("gzip")?"icon-wenjianyasuo":"icon-qitawenjian"},$=e=>e?e<1024?e+" B":e<1048576?(e/1024).toFixed(1)+" KB":(e/1048576).toFixed(1)+" MB":"",j=e.computed((()=>0===T.value.length?"根目录 (/)":"/"+T.value.map((e=>e.name)).join("/"))),M=e.computed((()=>V.value.length)),I=()=>{const e="user"===c.value?V.value:B.value;if(0===T.value.length)"user"===c.value?S.value=e:x.value=e;else{const e=T.value[T.value.length-1].children||[];"user"===c.value?S.value=e:x.value=e}},L=async()=>{try{l.value=_();const e=await p(l.value);o.value=e._id,i.value=uni.getStorageSync("workspace_id")||"";const t=await f(l.value,"user");V.value=t||[],"user"===c.value&&(S.value=t||[])}catch(e){t("error","at pages/CloudDatabase/CloudDatabase.vue:689","获取文件列表失败:",e),V.value=[],S.value=[]}},z=async e=>{try{e=null==e?"":String(e);const a=await f(l.value,"team","/",e);t("log","at pages/CloudDatabase/CloudDatabase.vue:700","团队云端文件:",JSON.stringify(a)),B.value=a||[],x.value=a||[]}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:704","获取团队文件列表失败:",a),B.value=[],x.value=[]}},F=e=>{D(e)?(T.value.push({path:e.path,name:e.name,children:e.children||[]}),u.value=e.name,I()):A(e)},O=e=>{if(m.value){const t=y.value.indexOf(e.id);return void(-1!==t?y.value.splice(t,1):y.value.push(e.id))}const t=D(e)?["重命名","删除"]:["下载","重命名","删除"];uni.showActionSheet({itemList:t,success:t=>{if(D(e))switch(t.tapIndex){case 0:R(e);break;case 1:W(e)}else switch(t.tapIndex){case 0:A(e);break;case 1:R(e);break;case 2:W(e)}}})},A=async e=>{var a,n;if(D(e))uni.showToast({title:"暂不支持下载目录",icon:"none"});else try{uni.showLoading({title:"获取下载链接..."});const t=await(a=l.value,n=e.id,new Promise(((e,t)=>{uni.request({url:`${s}/cloud_api/file/download`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:a,file_id:n},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.data.download_url);else{const e=(null==n?void 0:n.error)||"获取云端文件url出错啦";t(e)}}else t(`获取云端文件url失败:${a.statusCode}`)},fail:e=>{const a=e.errMsg||"网络错误";t(a)}})})));if(uni.hideLoading(),!t)return void uni.showToast({title:"获取下载链接失败",icon:"error"});uni.showLoading({title:"下载中..."}),uni.downloadFile({url:t,success:e=>{if(uni.hideLoading(),200===e.statusCode){const t=e.tempFilePath;U(t)}else uni.showToast({title:"下载失败",icon:"error"})},fail:()=>{uni.hideLoading(),uni.showToast({title:"下载失败,请重试",icon:"error"})}})}catch(o){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:821","下载失败:",o),uni.showToast({title:"下载失败,请重试",icon:"error"})}},U=e=>{uni.openDocument({filePath:e,success:()=>uni.showToast({title:"打开成功",icon:"success"}),fail:a=>{t("error","at pages/CloudDatabase/CloudDatabase.vue:838","打开文件失败:",a),q(e)}})},q=e=>{plus.runtime.openFile(e,{},(e=>{t("log","at pages/CloudDatabase/CloudDatabase.vue:850","文件打开成功")}))},R=e=>{uni.showModal({title:"重命名",content:"请输入新名称",editable:!0,placeholderText:e.name,success:e=>{e.confirm&&e.content&&(uni.showToast({title:"重命名成功",icon:"success"}),J())}})},W=e=>{const a=D(e)?`确定要删除目录"${e.name}"吗?目录内所有文件将被一并删除。`:`确定要删除文件"${e.name}"吗?`;uni.showModal({title:"删除确认",content:a,confirmText:"删除",confirmColor:"#e74c3c",success:async a=>{if(a.confirm){uni.showLoading({title:"删除中..."});try{await(n=l.value,o=e.id,new Promise(((e,t)=>{uni.request({url:`${s}/cloud_api/file/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:n,file_id:o},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.message);else{const e=(null==n?void 0:n.error)||"删除云端文件出错啦";t(e)}}else t(`删除云端文件失败:${a.statusCode}`)},fail:e=>{const a=e.errMsg||"网络错误";t(a)}})}))),uni.hideLoading(),uni.showToast({title:"删除成功",icon:"success"}),J()}catch(c){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:916","deleteCloudFile 失败,尝试 daleteWorkspace:",c);try{const t=e.path||"/"+e.name;i.value&&await h(l.value,i.value,t),uni.showToast({title:"删除成功",icon:"success"}),J()}catch(r){t("error","at pages/CloudDatabase/CloudDatabase.vue:928","删除失败:",r),uni.showToast({title:"删除失败,请重试",icon:"error"})}}}var n,o}})},J=async()=>{"user"===c.value?await L():await z(Se.value)},H=e.ref(!1),X=e.ref(""),K=()=>{H.value=!1,X.value=""},G=async()=>{const e=X.value.trim();if(e)try{if(i.value){const t=("根目录 (/)"===j.value?"/":j.value)+e;await g(l.value,i.value,t)}uni.showToast({title:"创建成功",icon:"success"}),K(),J()}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:985","创建文件夹失败:",a),uni.showToast({title:"创建失败,请重试",icon:"error"})}else uni.showToast({title:"请输入目录名称",icon:"none"})},Y=e.ref(!1),Q=e.ref("/"),Z=()=>{Y.value=!0,Q.value="/"},ee=()=>{Y.value=!1},te=()=>{Q.value.trim()||(Q.value="/"),Y.value=!1,ae()},ae=()=>{he({count:10,type:"all",success:e=>{const t=(e.tempFiles||[]).map((e=>({tempFilePath:e.path||e.tempFilePath,name:e.name})));0!==t.length?ne(t):uni.showToast({title:"未选择文件",icon:"none"})},fail:e=>{t("error","at pages/CloudDatabase/CloudDatabase.vue:1035","选择文件失败:",e)}})},ne=async e=>{uni.showLoading({title:"上传中..."});try{const t=Q.value.trim()||"/",a="user"===c.value?"user":"team",n="team"===c.value?Se.value:"";await((e,t,a,n,l)=>new Promise(((o,i)=>{const c=null==l?"":String(l);uni.uploadFile({url:`${s}/cloud_api/file/upload`,method:"POST",header:{},formData:{access_token:e,path:a||"/",type:t,team_id:c},files:n.map((e=>({uri:e.tempFilePath,name:"files"}))),success:e=>{if(200===e.statusCode)try{const t=JSON.parse(e.data);if(t.success)o(t.message);else{const e=(null==t?void 0:t.error)||"获取云端文件url出错啦";i(e)}}catch(t){i("接口返回数据格式异常")}else i(`获取云端文件url失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(l.value,a,t,e,n),uni.hideLoading(),uni.showToast({title:"上传成功",icon:"success"}),J()}catch(a){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1061","上传文件失败:",a),uni.showToast({title:"上传失败,请重试",icon:"error"})}},le=e.ref([]),oe=e.ref(!1),se=e.computed((()=>le.value)),ie=e.computed((()=>le.value.filter((e=>e.team_id&&String(e.team_id)===String(Se.value))))),ce=e.ref(!1),re=e.ref(""),ue=async()=>{oe.value=!0;try{const e=_(),t=await(e=>new Promise(((t,a)=>{uni.request({url:`${s}/cloud_api/database/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e},success:e=>{if(200===e.statusCode){const n=e.data;if(n.success)t(n.databases);else{const e=(null==n?void 0:n.error)||"获取用户可访问的数据库列表出错啦";a(e)}}else a(`获取用户可访问的数据库列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})))(e);le.value=t||[]}catch(e){t("error","at pages/CloudDatabase/CloudDatabase.vue:1087","获取数据库列表失败:",e),le.value=[]}finally{oe.value=!1}},de=()=>{ce.value=!0,re.value=""},pe=()=>{ce.value=!1,re.value=""},me=async()=>{const e=re.value.trim();if(e){uni.showLoading({title:"创建中..."});try{const t=_();await((e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/database/create`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_name:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.message);else{const e=(null==t?void 0:t.error)||"创建数据库出错啦";n(e)}}else n(`创建数据库失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(t,e),uni.hideLoading(),uni.showToast({title:"创建成功",icon:"success"}),pe(),await ue()}catch(a){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1118","创建数据库失败:",a),uni.showToast({title:"创建失败,请重试",icon:"error"})}}else uni.showToast({title:"请输入数据库名称",icon:"none"})},ve=e.ref(!1),ge=e.ref(""),fe=e.ref(""),we=()=>{ve.value=!0,ge.value="",fe.value=""},ke=()=>{ve.value=!1},ye=()=>{he({count:1,type:"all",success:e=>{const t=e.tempFiles[0];ge.value=t.name||"unknown",fe.value=t.path},fail:e=>{t("error","at pages/CloudDatabase/CloudDatabase.vue:1147","选择文件失败:",e),uni.showToast({title:"选择文件失败",icon:"none"})}})},Ee=async()=>{var e;if(!fe.value)return void uni.showToast({title:"请选择数据库文件",icon:"none"});const a=null==(e=ge.value.split(".").pop())?void 0:e.toLowerCase();if(["db","sqlite","sqlite3"].includes(a)){uni.showLoading({title:"上传中..."});try{const e=_();await((e,t)=>new Promise(((a,n)=>{const l="string"==typeof t?t:t.tempFilePath||t.path||t,o="string"==typeof t?t.split("/").pop()||"database.db":t.name||"database.db";uni.uploadFile({url:`${s}/cloud_api/database/upload/db`,method:"POST",header:{},formData:{access_token:e},file:{name:o,uri:l},files:[{name:"file",uri:l}],success:e=>{if(200===e.statusCode)try{const t=JSON.parse(e.data);if(t.success)a(t.message);else{const e=(null==t?void 0:t.error)||"上传db出错啦";n(e)}}catch(t){n("接口返回数据格式异常")}else n(`上传db失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(e,fe.value),uni.hideLoading(),uni.showToast({title:"上传成功",icon:"success"}),ke(),await ue()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1175","上传数据库失败:",n),uni.showToast({title:"上传失败,请重试",icon:"error"})}}else uni.showToast({title:"仅支持 .db / .sqlite / .sqlite3 文件",icon:"none"})},Ce=e=>{uni.showModal({title:"删除数据库",content:`确定要删除数据库"${e.database_name}"吗?此操作不可恢复。`,success:async a=>{if(a.confirm){uni.showLoading({title:"删除中..."});try{const t=_();await((e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/database/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_id:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.message);else{const e=(null==t?void 0:t.error)||"删除数据库出错啦";n(e)}}else n(`删除数据库失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(t,e.database_id),uni.hideLoading(),uni.showToast({title:"删除成功",icon:"success"}),await ue()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1195","删除数据库失败:",n),uni.showToast({title:"删除失败,请重试",icon:"error"})}}}})},Ne=e=>{uni.navigateTo({url:`/pages/CloudDbDetail/CloudDbDetail?databaseId=${e.database_id}&databaseName=${encodeURIComponent(e.database_name)}&teamId=${e.team_id||""}`})},Ve=e=>{if(!e)return"";const t=new Date(1e3*e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`},be=e=>({0:"无权限",1:"只读",2:"读写",3:"管理"}[e]||"未知"),_e=e.ref(!1),Be=e.ref([]),Se=e.ref(""),xe=e.ref([]),Te=e.ref(""),De=e.computed((()=>{if(!Se.value)return"";const e=Be.value.find((e=>e.id===Se.value));return(null==e?void 0:e.description)||""})),Pe=e.computed((()=>{if(!Se.value)return"";const e=Be.value.find((e=>e.id===Se.value));return(null==e?void 0:e.type)||""})),$e=e.computed((()=>{if(!o.value||0===xe.value.length)return"member";const e=xe.value.find((e=>e.receiver===o.value||e.user_id===o.value));return(null==e?void 0:e.role)||"member"}));e.computed((()=>{const e=$e.value;return"admin"===e||"owner"===e}));const je=async()=>{try{const e=_(),t=await w(e);Be.value=t||[]}catch(e){t("error","at pages/CloudDatabase/CloudDatabase.vue:1264","获取团队列表失败:",e),Be.value=[]}},Me=async e=>{t("log","at pages/CloudDatabase/CloudDatabase.vue:1270","团队id为",e),Se.value=e;try{const t=_(),a=await k(t,e);xe.value=(a||[]).map((e=>{var t,a,n,l,o;return{id:e._id,receiver:e.user_id,user_id:e.user_id,friendNickName:(null==(t=e.user)?void 0:t.username)||"",username:(null==(a=e.user)?void 0:a.username)||"",avatar:(null==(n=e.user)?void 0:n.avatar)||"",email:(null==(l=e.user)?void 0:l.email)||"",role:e.role||(null==(o=e.user)?void 0:o.role)||"member"}}))}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:1287","获取团队成员失败:",a),xe.value=[]}T.value=[],u.value="云端数据",await z(e)},Ie=async()=>{if(Se.value)try{const e=_(),t=await k(e,Se.value),a=(t||[]).find((e=>e.user_id===o.value)),n=(null==a?void 0:a.role)||"member";if("admin"!==n&&"owner"!==n)return void uni.showToast({title:"仅管理员可管理团队",icon:"none"});xe.value=(t||[]).map((e=>{var t,a,n,l,o;return{id:e._id,receiver:e.user_id,user_id:e.user_id,friendNickName:(null==(t=e.user)?void 0:t.username)||"",username:(null==(a=e.user)?void 0:a.username)||"",avatar:(null==(n=e.user)?void 0:n.avatar)||"",email:(null==(l=e.user)?void 0:l.email)||"",role:e.role||(null==(o=e.user)?void 0:o.role)||"member"}}))}catch(e){return t("error","at pages/CloudDatabase/CloudDatabase.vue:1321","获取团队成员失败:",e),void uni.showToast({title:"获取团队信息失败",icon:"none"})}else if(Be.value.length>0){await Me(Be.value[0].id),_e.value=!0;const e=xe.value.find((e=>(e.receiver||e.user_id)===o.value)),t=(null==e?void 0:e.role)||"member";if("admin"!==t&&"owner"!==t)return _e.value=!1,void uni.showToast({title:"仅管理员可管理团队",icon:"none"})}_e.value=!0},Le=()=>{_e.value=!1,Te.value="",Xe.value=[],Ke.value=!1},ze=e.ref(!1),Fe=e.ref(""),Oe=e.ref(""),Ae=e.ref(""),Ue=()=>{const e=Be.value.find((e=>e.id===Se.value));e?(Fe.value=e.name||"",Oe.value=e.description||"",Ae.value=e.type||"",ze.value=!0):uni.showToast({title:"请先选择团队",icon:"none"})},qe=()=>{ze.value=!1},Re=async()=>{const e=Fe.value.trim();if(e){uni.showLoading({title:"修改中..."});try{const t=_();await((e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/team/update`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,...a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"修改团队信息出错啦";l(e)}}else l(`修改团队信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})))(t,Se.value,{team_name:e,team_description:Oe.value.trim(),team_type:Ae.value.trim()}),uni.hideLoading(),uni.showToast({title:"修改成功",icon:"success"}),qe(),await je(),Se.value=Se.value}catch(a){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1393","修改团队信息失败:",a),uni.showToast({title:"修改失败,请重试",icon:"error"})}}else uni.showToast({title:"请输入团队名称",icon:"none"})},We=async(e,a)=>{const n=e.friendNickName||e.username||e.name;uni.showModal({title:"admin"===a?"设为管理员":"降为成员",content:`确定将"${n}"${"admin"===a?"设为管理员":"降为普通成员"}吗?`,success:async n=>{if(n.confirm){uni.showLoading({title:"操作中..."});try{const t=_(),n=e.receiver||e.user_id;await((e,t,a,n)=>new Promise(((l,o)=>{uni.request({url:`${s}/cloud_api/team/adjust_member_role`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,user_id:a,role:n},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)l(t.message);else{const e=(null==t?void 0:t.error)||"调整团员身份出错啦";o(e)}}else o(`调整团员身份失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(t,Se.value,n,a),uni.hideLoading(),uni.showToast({title:"已"+("admin"===a?"设为管理员":"降为成员"),icon:"success"}),await He()}catch(l){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1418","调整成员身份失败:",l),uni.showToast({title:"操作失败,请重试",icon:"error"})}}}})},Je=async e=>{const a=e.friendNickName||e.username||e.name;uni.showModal({title:"移除成员",content:`确定要移除"${a}"吗?`,success:async a=>{if(a.confirm){uni.showLoading({title:"移除中..."});try{const t=_(),a=e.receiver||e.user_id;await((e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/team/remove_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,user_ids:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"移除团队成员出错啦";l(e)}}else l(`移除团队成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})))(t,Se.value,[a]),uni.hideLoading(),uni.showToast({title:"已移除",icon:"success"}),await He()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1444","移除团队成员失败:",n),uni.showToast({title:"移除失败,请重试",icon:"error"})}}}})},He=async()=>{const e=_(),t=await k(e,Se.value);xe.value=(t||[]).map((e=>{var t,a,n,l;return{id:e._id,receiver:e.user_id,user_id:e.user_id,friendNickName:(null==(t=e.user)?void 0:t.username)||"",username:(null==(a=e.user)?void 0:a.username)||"",avatar:(null==(n=e.user)?void 0:n.avatar)||"",email:(null==(l=e.user)?void 0:l.email)||"",role:e.role||"member"}}))},Xe=e.ref([]),Ke=e.ref(!1),Ge=async()=>{const e=Te.value.trim();if(e)try{const t=_(),a=await v(t,e);Xe.value=a||[],Ke.value=!0,Xe.value.length}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:1486","搜索用户失败:",a),Xe.value=[],Ke.value=!0}else uni.showToast({title:"请输入用户名或邮箱",icon:"none"})},Ye=e=>{uni.showModal({title:"添加成员",content:`确定将"${e.username}"添加到当前团队吗?`,success:async a=>{if(a.confirm){uni.showLoading({title:"添加中..."});try{const t=_();await((e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/team/add_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,user_ids:a,role:"admin"},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"添加团队成员出错啦";l(e)}}else l(`添加团队成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})))(t,Se.value,[e._id]),uni.hideLoading(),uni.showToast({title:"添加成功",icon:"success"}),Te.value="",Xe.value=[],Ke.value=!1,await He()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1512","添加团队成员失败:",n),uni.showToast({title:"添加失败,请重试",icon:"error"})}}}})},Qe=()=>{const e=Be.value.find((e=>e.id===Se.value)),a=e?e.name:"当前团队";uni.showModal({title:"删除团队",content:`确定要删除团队"${a}"吗?此操作不可撤销,团队内所有文件和数据将被永久删除。`,confirmText:"删除",confirmColor:"#e74c3c",success:async e=>{if(e.confirm){uni.showLoading({title:"删除中..."});try{await(a=l.value,n=Se.value,new Promise(((e,t)=>{uni.request({url:`${s}/cloud_api/team/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:a,team_id:n},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.message);else{const e=(null==n?void 0:n.error)||"删除团队出错啦";t(e)}}else t(`删除团队失败:${a.statusCode}`)},fail:e=>{const a=e.errMsg||"网络错误";t(a)}})}))),uni.hideLoading(),uni.showToast({title:"团队已删除",icon:"success"}),Se.value="",xe.value=[],x.value=[],T.value=[],u.value="云端数据",await je(),Le()}catch(o){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1546","删除团队失败:",o),uni.showToast({title:"删除失败,请重试",icon:"error"})}}var a,n}})};return e.onMounted((async()=>{await L(),await je(),await ue()})),(t,n)=>{const l=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),_e.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay",onClick:Le},[e.createElementVNode("view",{class:"popup-card",onClick:n[1]||(n[1]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:Le},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"团队管理"),e.createElementVNode("scroll-view",{class:"team-manage-body","scroll-y":""},[0===xe.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},"暂无团队成员")):(e.openBlock(),e.createElementBlock("view",{key:1,class:"member-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(xe.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"member-item",key:t._id||t.receiver},[e.createElementVNode("view",{class:"member-avatar"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"default-avatar"},[e.createVNode(l,{type:"person-filled",size:"60rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"member-info"},[e.createElementVNode("view",{class:"member-name"},e.toDisplayString(t.friendNickName||t.username||t.name),1),e.createElementVNode("view",{class:"member-label"},e.toDisplayString(t.email||t.sessionId||""),1)]),e.createElementVNode("view",{class:"member-actions"},[(t.receiver||t.user_id)===o.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["member-role",$e.value])},e.toDisplayString("owner"===$e.value?"创建者":"管理员"),3)):"owner"===t.role?(e.openBlock(),e.createElementBlock("view",{key:1,class:"member-role owner"},"创建者")):"admin"===t.role?(e.openBlock(),e.createElementBlock("view",{key:2,class:"member-actions-right"},[e.createElementVNode("view",{class:"member-action-btn demote-admin",onClick:e=>We(t,"member")},"降为成员",8,["onClick"]),e.createElementVNode("view",{class:"member-action-btn remove-member",onClick:e=>Je(t)},"移除",8,["onClick"])])):(e.openBlock(),e.createElementBlock("view",{key:3,class:"member-actions-right"},[e.createElementVNode("view",{class:"member-action-btn set-admin",onClick:e=>We(t,"admin")},"设为管理",8,["onClick"]),e.createElementVNode("view",{class:"member-action-btn remove-member",onClick:e=>Je(t)},"移除",8,["onClick"])]))])])))),128))]))]),e.createElementVNode("view",{class:"invite-section"},[e.createElementVNode("view",{class:"invite-input-wrapper"},[e.withDirectives(e.createElementVNode("input",{class:"invite-input",placeholder:"输入用户名或邮箱搜索","onUpdate:modelValue":n[0]||(n[0]=e=>Te.value=e),onConfirm:Ge},null,544),[[e.vModelText,Te.value]]),e.createElementVNode("view",{class:"invite-btn text-btn",onClick:Ge},"搜索")]),Xe.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"search-result-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Xe.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"search-result-item",key:t._id,onClick:e=>Ye(t)},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"result-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"result-default-avatar"},[e.createVNode(l,{type:"person-filled",size:"40rpx",color:"#fff"})])),e.createElementVNode("view",{class:"result-info"},[e.createElementVNode("text",{class:"result-name"},e.toDisplayString(t.username),1),e.createElementVNode("text",{class:"result-email"},e.toDisplayString(t.email),1)]),e.createElementVNode("view",{class:"result-add-btn"},"添加")],8,["onClick"])))),128))])):Te.value&&Ke.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"search-empty"},"未找到匹配用户")):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"edit-team-section"},[e.createElementVNode("view",{class:"edit-team-btn",onClick:Ue},"修改团队信息")]),e.createElementVNode("view",{class:"delete-team-section"},[e.createElementVNode("view",{class:"delete-team-btn",onClick:Qe},"删除团队")])])])):e.createCommentVNode("",!0),ze.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"popup-overlay",onClick:qe},[e.createElementVNode("view",{class:"popup-card",onClick:n[4]||(n[4]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:qe},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"修改团队信息"),e.createElementVNode("view",{class:"edit-team-form"},[e.createElementVNode("view",{class:"form-label"},"团队名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[2]||(n[2]=e=>Fe.value=e),type:"text",placeholder:"输入团队名称"},null,512),[[e.vModelText,Fe.value]])]),e.createElementVNode("view",{class:"form-label"},"团队描述"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[3]||(n[3]=e=>Oe.value=e),type:"text",placeholder:"输入团队描述"},null,512),[[e.vModelText,Oe.value]])])]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:qe},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:Re},"确认修改")])])])):e.createCommentVNode("",!0),H.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:"popup-overlay",onClick:K},[e.createElementVNode("view",{class:"popup-card",onClick:n[6]||(n[6]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:K},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"新建"+e.toDisplayString("user"===c.value?"个人":"团队")+"目录",1),e.createElementVNode("view",{class:"new-folder-name"},"目录名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[5]||(n[5]=e=>X.value=e),type:"text",placeholder:"输入目录名称"},null,512),[[e.vModelText,X.value]])]),e.createElementVNode("view",{class:"nf-path-label"},"当前路径"),e.createElementVNode("view",{class:"nf-path-display"},e.toDisplayString(j.value),1),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:K},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:G},"确认")])])])):e.createCommentVNode("",!0),Y.value?(e.openBlock(),e.createElementBlock("view",{key:3,class:"popup-overlay",onClick:ee},[e.createElementVNode("view",{class:"popup-card",onClick:n[8]||(n[8]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:ee},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"上传文件"),e.createElementVNode("view",{class:"upload-path-label"},"上传路径"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[7]||(n[7]=e=>Q.value=e),type:"text",placeholder:"输入上传路径,如:/myfolder"},null,512),[[e.vModelText,Q.value]])]),e.createElementVNode("view",{class:"upload-path-hint"},"默认为根目录 /,后端会自动创建不存在的文件夹"),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:ee},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:te},"确认上传")])])])):e.createCommentVNode("",!0),ce.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:"popup-overlay",onClick:pe},[e.createElementVNode("view",{class:"popup-card",onClick:n[10]||(n[10]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:pe},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"新建个人数据库"),e.createElementVNode("view",{class:"new-folder-name"},"数据库名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[9]||(n[9]=e=>re.value=e),type:"text",placeholder:"输入数据库名称"},null,512),[[e.vModelText,re.value]])]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:pe},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:me},"确认")])])])):e.createCommentVNode("",!0),ve.value?(e.openBlock(),e.createElementBlock("view",{key:5,class:"popup-overlay",onClick:ke},[e.createElementVNode("view",{class:"popup-card",onClick:n[11]||(n[11]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:ke},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"上传数据库文件"),e.createElementVNode("view",{class:"upload-db-hint"},"支持 .db / .sqlite / .sqlite3 格式的 SQLite 数据库文件"),e.createElementVNode("view",{class:"upload-file-area",onClick:ye},[ge.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"selected-file"},e.toDisplayString(ge.value),1)):(e.openBlock(),e.createElementBlock("view",{key:1,class:"upload-hint"},"点击选择数据库文件"))]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:ke},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:Ee},"确认上传")])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"cloud-db-container page-container"},[e.createElementVNode("view",{class:"cloud-db-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:N},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"}),T.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-before-title"},e.toDisplayString(C.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"navbar-title"},e.toDisplayString(u.value),1),e.createElementVNode("view",{class:"navbar-right"}),d.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:n[12]||(n[12]=e=>{m.value=!m.value,m.value||(y.value=[]),E()})},"选择"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item",onClick:n[13]||(n[13]=e=>{H.value=!0,X.value="",E()})},"新建文件夹")])):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"category-tabs"},[e.createElementVNode("view",{class:e.normalizeClass(["category-tab",{active:"user"===c.value}]),onClick:n[14]||(n[14]=e=>r("user"))}," 个人 ",2),e.createElementVNode("view",{class:e.normalizeClass(["category-tab",{active:"team"===c.value}]),onClick:n[15]||(n[15]=e=>r("team"))}," 团队 ",2)])]),e.createElementVNode("scroll-view",{class:"cloud-db-content","scroll-y":""},["user"===c.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("view",{class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"云端文件"),e.createElementVNode("text",{class:"file-count"},e.toDisplayString(M.value>0?"("+M.value+")":""),1)]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("view",{class:"action-btn",onClick:Z},[e.createVNode(l,{type:"upload",size:"16"}),e.createElementVNode("text",null,"上传文件")])])]),e.createElementVNode("view",{class:"section-body"},[0===S.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"暂无云端文件")])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"file-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"file-item",key:t.id,onClick:e=>F(t),onLongpress:e=>O(t)},[e.createElementVNode("view",{class:e.normalizeClass(["file-icon",D(t)?"is-directory":"is-file"])},[e.createElementVNode("view",{class:e.normalizeClass(["iconfont",P(t)])},null,2)],2),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-meta"},[e.createElementVNode("text",{class:"file-type-tag"},e.toDisplayString(D(t)?"目录":"文件"),1),t.size?(e.openBlock(),e.createElementBlock("text",{key:0,class:"file-size"},e.toDisplayString($(t.size)),1)):e.createCommentVNode("",!0)])],40,["onClick","onLongpress"])))),128))]))])]),e.createElementVNode("view",{class:"section-divider"}),e.createElementVNode("view",{class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"云端数据库"),e.createElementVNode("text",{class:"file-count"},e.toDisplayString(!oe.value&&se.value.length>0?"("+se.value.length+")":""),1)]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("view",{class:"action-btn",onClick:we},[e.createVNode(l,{type:"upload",size:"16"}),e.createElementVNode("text",null,"上传数据库")]),e.createElementVNode("view",{class:"action-btn",onClick:de},[e.createVNode(l,{type:"plus",size:"16"}),e.createElementVNode("text",null,"新建数据库")])])]),e.createElementVNode("view",{class:"section-body"},[oe.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"loading-area"},[e.createElementVNode("view",{class:"loading-spinner"}),e.createElementVNode("text",{class:"loading-text"},"加载中...")])):0===se.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"暂无数据库")])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"table-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(se.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"table-item",key:t.database_id,onClick:e=>Ne(t),onLongpress:e=>Ce(t)},[e.createElementVNode("view",{class:"table-icon"},[e.createVNode(l,{type:"compose",size:"22",color:"#3b86ff"})]),e.createElementVNode("view",{class:"table-info"},[e.createElementVNode("view",{class:"table-name"},[e.createTextVNode(e.toDisplayString(t.database_name)+" ",1),e.createElementVNode("text",{class:e.normalizeClass(["db-tag",t.team_id?"tag-team":"tag-personal"])},e.toDisplayString(t.team_id?"团队共享":"个人私有"),3)]),e.createElementVNode("view",{class:"table-desc"},e.toDisplayString(t.table_count||0)+" 张表 · "+e.toDisplayString(be(t.access_level)),1)]),e.createElementVNode("view",{class:"table-meta"},[e.createElementVNode("text",{class:"table-rows"},e.toDisplayString(Ve(t.modified_time)),1),e.createVNode(l,{type:"right",size:"14",color:"#999"})])],40,["onClick","onLongpress"])))),128))]))])])],64)):e.createCommentVNode("",!0),"team"===c.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("view",{class:"section-block team-manage-block",onClick:Ie},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-qunliao"}),e.createElementVNode("text",null,"团队管理")]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("text",{class:"team-count"},e.toDisplayString(Be.value.length)+" 个团队",1),e.createVNode(l,{type:"right",size:"14",color:"#999"})])])]),e.createElementVNode("view",{class:"section-divider"}),Be.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"team-selector"},[e.createElementVNode("scroll-view",{"scroll-x":"",class:"team-scroll"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Be.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["team-chip",{active:Se.value===t.id}]),key:t.id,onClick:e=>Me(t.id)},e.toDisplayString(t.name),11,["onClick"])))),128))]),Pe.value||De.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"team-info"},[Pe.value?(e.openBlock(),e.createElementBlock("text",{key:0,class:"team-type-tag"},e.toDisplayString(Pe.value),1)):e.createCommentVNode("",!0),De.value?(e.openBlock(),e.createElementBlock("text",{key:1,class:"team-desc-text"},e.toDisplayString(De.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),!Se.value&&Be.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip select-team-tip"},[e.createElementVNode("view",{class:"iconfont icon-qunliao"}),e.createElementVNode("text",null,"请选择一个团队")])):e.createCommentVNode("",!0),Se.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"团队云端文件")]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("view",{class:"action-btn",onClick:Z},[e.createVNode(l,{type:"upload",size:"16"}),e.createElementVNode("text",null,"上传文件")])])]),e.createElementVNode("view",{class:"section-body"},[0===x.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"暂无团队云端文件")])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"file-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"file-item",key:t.id,onClick:e=>F(t),onLongpress:e=>O(t)},[e.createElementVNode("view",{class:e.normalizeClass(["file-icon",D(t)?"is-directory":"is-file"])},[e.createElementVNode("view",{class:e.normalizeClass(["iconfont",P(t)])},null,2)],2),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-meta"},[e.createElementVNode("text",{class:"file-type-tag"},e.toDisplayString(D(t)?"目录":"文件"),1),t.size?(e.openBlock(),e.createElementBlock("text",{key:0,class:"file-size"},e.toDisplayString($(t.size)),1)):e.createCommentVNode("",!0)])],40,["onClick","onLongpress"])))),128))]))])])):e.createCommentVNode("",!0),Se.value?(e.openBlock(),e.createElementBlock("view",{key:3,class:"section-divider"})):e.createCommentVNode("",!0),Se.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"团队云端数据库")])]),e.createElementVNode("view",{class:"section-body"},[oe.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"loading-area"},[e.createElementVNode("view",{class:"loading-spinner"}),e.createElementVNode("text",{class:"loading-text"},"加载中...")])):0===ie.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"暂无团队数据库")])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"table-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ie.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"table-item",key:t.database_id,onClick:e=>Ne(t)},[e.createElementVNode("view",{class:"table-icon"},[e.createVNode(l,{type:"compose",size:"22",color:"#3b86ff"})]),e.createElementVNode("view",{class:"table-info"},[e.createElementVNode("view",{class:"table-name"},[e.createTextVNode(e.toDisplayString(t.database_name)+" ",1),e.createElementVNode("text",{class:"db-tag tag-team"},"团队共享")]),e.createElementVNode("view",{class:"table-desc"},e.toDisplayString(t.table_count||0)+" 张表 · "+e.toDisplayString(be(t.access_level)),1)]),e.createElementVNode("view",{class:"table-meta"},[e.createElementVNode("text",{class:"table-rows"},e.toDisplayString(Ve(t.modified_time)),1),e.createVNode(l,{type:"right",size:"14",color:"#999"})])],8,["onClick"])))),128))]))])])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0)])])],64)}}},[["__scopeId","data-v-512e8f2e"]]),Ce=C({__name:"CloudDbDetail",props:{databaseId:{type:String,default:""},databaseName:{type:String,default:""},teamId:{type:String,default:""}},setup(n){const l=n,o=e.ref(l.databaseId||""),i=e.ref(l.databaseName||""),c=e.ref(l.teamId||""),r=e.ref(2),u=e.ref(0),d=e.ref([]),p=e.ref(!1),m=e.ref(null),v=e.ref([]),h=e.computed((()=>{var e;if(v.value.length>0){const e=new Set;return v.value.forEach((t=>Object.keys(t).forEach((t=>e.add(t))))),Array.from(e).filter((e=>"_row_id"!==e&&"_id"!==e))}return(null==(e=m.value)?void 0:e.columns)?m.value.columns.map((e=>e.name)).filter((e=>"_row_id"!==e)):[]})),g=e.ref(!1),f=()=>{g.value=!g.value},k=()=>{uni.navigateBack()},E=async()=>{p.value=!0;try{const e=_(),t=await((e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/database/tables`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_id:t,is_detail:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.tables);else{const e=(null==t?void 0:t.error)||"获取用户可访问的数据库列表出错啦";l(e)}}else l(`获取用户可访问的数据库列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})))(e,o.value,!0);d.value=(t||[]).map((e=>({table_name:e.name,row_count:e.row_count||0,columns:e.columns||[]}))),u.value=d.value.length}catch(e){t("error","at pages/CloudDbDetail/CloudDbDetail.vue:282","获取表列表失败:",e),d.value=[]}finally{p.value=!1}},C=async e=>{m.value=e,v.value=[],uni.showLoading({title:"加载中..."});try{const t=_(),a=await((e,t,a,n="20",l="0")=>new Promise(((o,i)=>{uni.request({url:`${s}/cloud_api/database/table/data`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_id:t,table_name:a,limit:n,offset:l},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)o(t.data);else{const e=(null==t?void 0:t.error)||"获取表数据出错啦";i(e)}}else i(`获取表数据失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,o.value,e.table_name);v.value=a||[],uni.hideLoading()}catch(t){uni.hideLoading(),uni.showToast({title:"string"==typeof t?t:"加载表数据失败",icon:"none"}),v.value=[]}},N=e=>{uni.showModal({title:"删除表",content:`确定要删除表"${e.table_name}"吗?此操作不可恢复。`,success:async a=>{var n;if(a.confirm){uni.showLoading({title:"删除中..."});try{const t=_();await(async(e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/database/table/drop`,method:"POST",data:{access_token:e,database_id:t,table_name:a},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)n(t.message);else{const e=t.error||"删除数据库中的表出错啦";l(e)}}else l(`删除数据库中的表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})))(t,o.value,e.table_name),uni.hideLoading(),uni.showToast({title:"删除成功",icon:"success"}),(null==(n=m.value)?void 0:n.table_name)===e.table_name&&(m.value=null,v.value=[]),await E()}catch(l){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:335","删除表失败:",l),uni.showToast({title:"删除失败,请重试",icon:"error"})}}}})},V=e=>{const a=e._row_id||e._id;if(!a)return void uni.showToast({title:"无法识别该行",icon:"none"});const n=h.value;if(0===n.length)return void uni.showToast({title:"无可用列",icon:"none"});const l=n[0];uni.showModal({title:`编辑 ${l}`,editable:!0,placeholderText:e[l]||"",content:"",success:async n=>{if(n.confirm&&void 0!==n.content){uni.showLoading({title:"更新中..."});try{const t=_();await((e,t,a,n,l)=>new Promise(((o,i)=>{uni.request({url:`${s}/cloud_api/database/table/update/by/id`,method:"POST",data:{access_token:e,database_id:t,table_name:a,where_data:n,update_data:l},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)o(t.message);else{const e=t.error||"更新表数据出错啦";i(e)}}else i(`更新表数据失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,o.value,m.value.table_name,{_row_id:a},{[l]:n.content}),uni.hideLoading(),uni.showToast({title:"更新成功",icon:"success"}),e[l]=n.content}catch(i){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:397","更新失败:",i),uni.showToast({title:i,icon:"error"})}}}})},B=e.ref(!1),x=e.ref(""),T=e.ref(""),D=e.ref(""),P=()=>{B.value=!1},$=()=>{he({count:1,type:"all",success:e=>{const t=e.tempFiles[0];T.value=t.name||"unknown",D.value=t.path},fail:e=>{t("error","at pages/CloudDbDetail/CloudDbDetail.vue:434","选择文件失败:",e),uni.showToast({title:"选择文件失败",icon:"none"})}})},j=async()=>{const e=x.value.trim()||"";if(D.value){uni.showLoading({title:"导入中..."});try{const t=_();await((e,t,a,n,l)=>new Promise(((o,i)=>{const c="string"==typeof n?n:n.tempFilePath||n.path||n,r="string"==typeof n?n.split("/").pop()||"file":n.name||"file";uni.uploadFile({url:`${s}/cloud_api/database/import`,method:"POST",header:{},formData:{access_token:e,force_overwrite:t,database_id:a,table_name:l},file:{name:r,uri:c},files:[{name:"file",uri:c}],success:e=>{if(200===e.statusCode)try{const t=JSON.parse(e.data);if(t.success)o(t.message);else{const e=(null==t?void 0:t.error)||"导入文件到数据库出错啦";i(e)}}catch(t){i("接口返回数据格式异常")}else i(`导入文件到数据库失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,!1,o.value,D.value,e),uni.hideLoading(),uni.showToast({title:"导入成功",icon:"success"}),P(),await E()}catch(a){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:474","导入失败:",a),"table_exists"===a?uni.showToast({title:"文件已存在",icon:"error"}):uni.showToast({title:"导入失败,请重试",icon:"error"})}}else uni.showToast({title:"请选择文件",icon:"none"})},M=e.ref(!1),I=e.ref([]),L=async()=>{M.value=!0,uni.showLoading({title:"加载中..."});try{const e=_();let t;t=c.value?await y(e,o.value,"team_id",c.value):await y(e,o.value,"user_id",S());const a=Array.isArray(t)?t:[];I.value=a.map((e=>{var t,a,n;return e.team?{_id:e._id,database_id:e.database_id,access_level:e.access_level,permType:"team_id",id:e.team._id||e.team.id,name:e.team.name}:e.team_id?{database_id:e.database_id,access_level:e.access_level,permType:"team_id",id:e.team_id,name:(null==(t=e.database)?void 0:t.database_name)||""}:{database_id:e.database_id,access_level:e.access_level,permType:"user_id",id:e.user_id||(null==(a=e.database)?void 0:a.user_id)||S(),name:(null==(n=e.database)?void 0:n.database_name)||""}}))}catch(e){t("error","at pages/CloudDbDetail/CloudDbDetail.vue:544","获取权限失败:",e),I.value=[]}uni.hideLoading()},z=()=>{M.value=!1},F=(e,a)=>{if("delete"===a)uni.showModal({title:"移除权限",content:`确定要移除"${e.name}"的权限吗?`,success:async a=>{if(a.confirm){uni.showLoading({title:"移除中..."});try{const t=_();await((e,t,a,n)=>new Promise(((l,o)=>{const i={access_token:e,database_id:t};"user_id"===a?i.user_id=n:"team_id"===a&&(i.team_id=n),uni.request({url:`${s}/cloud_api/database/permission/delete`,method:"POST",data:i,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)l(t.message);else{const e=t.error||"删除 团队/用户 对数据库权限出错啦";o(e)}}else o(`删除 团队/用户 对数据库权限失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(t,o.value,e.permType,e.id),uni.hideLoading(),uni.showToast({title:"已移除",icon:"success"}),await L()}catch(n){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:574","移除权限失败:",n),uni.showToast({title:"操作失败,请重试",icon:"error"})}}}});else{const a=["无权限访问","仅访问","管理员完全控制","团队完全控制"],n=e.access_level||0;uni.showActionSheet({title:"选择权限级别",itemList:a.map(((e,t)=>`${t}. ${e}`)),success:async a=>{const l=a.tapIndex;if(l!==n){uni.showLoading({title:"更新中..."});try{const t=_();await((e,t,a,n,l)=>new Promise(((o,i)=>{const c={access_token:e,database_id:t,access_level:l};"user_id"===a?c.user_id=n:"team_id"===a&&(c.team_id=n),uni.request({url:`${s}/cloud_api/database/permission/update`,method:"POST",data:c,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)o(t.message);else{const e=t.error||"修改/增加 团队/用户 对数据库权限出错啦";i(e)}}else i(`修改/增加 团队/用户 对数据库权限失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,o.value,e.permType,e.id,l),uni.hideLoading(),uni.showToast({title:"已更新",icon:"success"}),await L()}catch(i){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:608","更新权限失败:",i),uni.showToast({title:"操作失败,请重试",icon:"error"})}}}})}},O=e.ref(!1),A=e.ref([]),U=e.ref(""),q=()=>{O.value=!1},R=async()=>{U.value?uni.showModal({title:"确认移交",content:"移交后数据库将归属于该团队,确定继续吗?",success:async e=>{if(e.confirm){uni.showLoading({title:"移交中..."});try{const e=_();await(async(e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${s}/cloud_api/database/transfer_to_team`,method:"POST",data:{access_token:e,database_id:t,team_id:a},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)n(t.message);else{const e=t.error||"个人数据库移交团队出错啦";l(e)}}else l(`个人数据库移交团队失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})))(e,o.value,U.value),uni.hideLoading(),uni.showToast({title:"移交成功",icon:"success"}),q(),setTimeout((()=>{uni.navigateBack()}),1e3)}catch(a){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:670","移交失败:",a),uni.showToast({title:"移交失败,请重试",icon:"error"})}}}}):uni.showToast({title:"请选择目标团队",icon:"none"})},W=e=>({0:"无权限访问",1:"仅访问",2:"管理员完全控制",3:"团队完全控制"}[e]||"未知");return e.onMounted((()=>{var e;const t=getCurrentPages(),a=t[t.length-1],n=(null==(e=a.$page)?void 0:e.options)||a.options||{};o.value=n.databaseId||"",i.value=decodeURIComponent(n.databaseName||"数据库详情"),c.value=n.teamId||"",o.value&&E()})),(n,l)=>{const o=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock("view",{class:"cloud-db-detail-wrapper"},[e.createElementVNode("view",{class:"status-bar"}),B.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay",onClick:P},[e.createElementVNode("view",{class:"popup-card",onClick:l[1]||(l[1]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:P},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"导入文件到数据库"),e.createElementVNode("view",{class:"new-folder-name"},"表名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":l[0]||(l[0]=e=>x.value=e),type:"text",placeholder:"输入表名称"},null,512),[[e.vModelText,x.value]])]),e.createElementVNode("view",{class:"new-folder-name"},"文件"),e.createElementVNode("view",{class:"upload-file-area",onClick:$},[T.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"selected-file"},e.toDisplayString(T.value),1)):(e.openBlock(),e.createElementBlock("view",{key:1,class:"upload-hint"},"点击选择文件(支持 CSV/Excel/SQLite)"))]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:P},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:j},"确认导入")])])])):e.createCommentVNode("",!0),M.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"popup-overlay",onClick:z},[e.createElementVNode("view",{class:"popup-card",onClick:l[2]||(l[2]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:z},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"权限管理"),e.createElementVNode("scroll-view",{class:"permission-body","scroll-y":""},[0===I.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},"暂无权限记录")):(e.openBlock(),e.createElementBlock("view",{key:1,class:"permission-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"permission-item",key:t._id||t.id},[e.createElementVNode("view",{class:"perm-info"},[e.createElementVNode("text",{class:"perm-type"},e.toDisplayString("team_id"===t.permType?"团队":"个人"),1)]),e.createElementVNode("view",{class:"perm-level"},e.toDisplayString(W(t.access_level)),1),e.createElementVNode("view",{class:"perm-actions"},[e.createElementVNode("view",{class:"perm-action-btn",onClick:e=>F(t,"change")},"修改",8,["onClick"]),e.createElementVNode("view",{class:"perm-action-btn delete",onClick:e=>F(t,"delete")},"移除",8,["onClick"])])])))),128))]))]),e.createElementVNode("view",{class:"close-permission-btn",onClick:z},"关闭")])])):e.createCommentVNode("",!0),O.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:"popup-overlay",onClick:q},[e.createElementVNode("view",{class:"popup-card",onClick:l[3]||(l[3]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:q},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"移交数据库到团队"),e.createElementVNode("scroll-view",{class:"transfer-body","scroll-y":""},[0===A.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},"暂无可用团队")):(e.openBlock(),e.createElementBlock("view",{key:1,class:"transfer-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["transfer-item",{active:U.value===t.id}]),key:t.id,onClick:e=>U.value=t.id},[e.createElementVNode("text",{class:"transfer-name"},e.toDisplayString(t.name),1),U.value===t.id?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#3b86ff"})):e.createCommentVNode("",!0)],10,["onClick"])))),128))]))]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:q},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:R},"确认移交")])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"cloud-db-detail page-container"},[e.createElementVNode("view",{class:"cloud-db-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:k},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"})]),e.createElementVNode("view",{class:"navbar-title"},e.toDisplayString(i.value),1),e.createElementVNode("view",{class:"navbar-right"},[e.createElementVNode("view",{class:"iconfont icon-gengduo custom-navbar-icon",onClick:f})])]),g.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:l[4]||(l[4]=e=>{B.value=!0,x.value="",T.value="",D.value="",f()})},"导入文件"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item",onClick:l[5]||(l[5]=e=>{L(),f()})},"权限管理"),c.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"solid-line"})),c.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:1,class:"menu-card-item",onClick:l[6]||(l[6]=e=>{(async()=>{O.value=!0,U.value="";try{const e=_(),t=await w(e);A.value=t||[]}catch(e){t("error","at pages/CloudDbDetail/CloudDbDetail.vue:632","获取团队列表失败:",e),A.value=[]}})(),f()})},"移交团队"))])):e.createCommentVNode("",!0)]),e.createElementVNode("scroll-view",{class:"cloud-db-content","scroll-y":""},[e.createElementVNode("view",{class:"db-info-bar"},[e.createElementVNode("text",{class:"db-info-text"},e.toDisplayString(u.value)+" 张表",1),e.createElementVNode("text",{class:"db-info-text"},"权限:"+e.toDisplayString(W(r.value)),1)]),e.createElementVNode("view",{class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-biaoge"}),e.createElementVNode("text",null,"数据表")])]),e.createElementVNode("view",{class:"section-body"},[p.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"loading-area"},[e.createElementVNode("view",{class:"loading-spinner"}),e.createElementVNode("text",{class:"loading-text"},"加载中...")])):0===d.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"暂无数据表")])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"table-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"table-item",key:t.table_name,onClick:e=>C(t),onLongpress:e=>N(t)},[e.createElementVNode("view",{class:"table-icon"},[e.createVNode(o,{type:"compose",size:"22",color:"#3b86ff"})]),e.createElementVNode("view",{class:"table-info"},[e.createElementVNode("view",{class:"table-name"},e.toDisplayString(t.table_name),1),e.createElementVNode("view",{class:"table-desc"},e.toDisplayString(t.row_count||0)+" 条记录",1)]),e.createElementVNode("view",{class:"table-meta"},[e.createVNode(o,{type:"right",size:"14",color:"#999"})])],40,["onClick","onLongpress"])))),128))]))])]),m.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"section-block"},[e.createElementVNode("view",{class:"section-divider"}),e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-biaoge"}),e.createElementVNode("text",null,e.toDisplayString(m.value.table_name),1)]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("text",{class:"row-count"},e.toDisplayString(v.value.length)+" / "+e.toDisplayString(m.value.row_count||0)+" 条",1)])]),e.createElementVNode("view",{class:"section-body"},[0===v.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"empty-tip"},[e.createElementVNode("text",null,"暂无数据")])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"data-table-wrapper"},[e.createElementVNode("scroll-view",{"scroll-x":"",class:"data-table-scroll"},[e.createElementVNode("view",{class:"data-table"},[e.createElementVNode("view",{class:"data-row data-header"},[e.createElementVNode("view",{class:"data-cell index-cell"},"#"),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t,class:"data-cell"},e.toDisplayString(t),1)))),128))]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"data-row",key:t._row_id||a,onClick:e=>V(t)},[e.createElementVNode("view",{class:"data-cell index-cell"},e.toDisplayString(a+1),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,(a=>{return e.openBlock(),e.createElementBlock("view",{key:a,class:"data-cell"},e.toDisplayString(null==(n=t[a])?"":"object"==typeof n?JSON.stringify(n):String(n)),1);var n})),128))],8,["onClick"])))),128))])])]))])])):e.createCommentVNode("",!0)])])])}}},[["__scopeId","data-v-144a6cf9"]]),Ne=C({__name:"text",setup(n){const s=ie(),d=()=>{s.isConnected||(ye.value&&Ee.value?s.connect({token:ye.value,UserId:Ee.value}):t("warn","at pages/text/text.vue:334","Token或UserId未准备好"))},v=Q(),h=e.ref(0),g=(e,t)=>{let a='';return e.forEach(((e,n)=>{const l=0===n?"th":"td",o=e.split("|").filter((e=>""!==e.trim()));a+="",o.forEach(((e,n)=>{const o=t[n]?` style="text-align:${t[n]}"`:"";let s=e.trim().replace(/_/g,"_").replace(/\*/g,"*");a+=`<${l}${o} style="padding:6px 10px;border:1px solid #ddd">${s}`})),a+=""})),a+="
    ",a},f=e=>{if(!e)return"";e=w(e);try{let t=M(e=(e=>{const t=e.split("\n");let a=[],n=!1,l=[],o=[];for(let s=0;se.trim())).map((e=>e.trim().startsWith(":")&&e.trim().endsWith(":")?"center":e.trim().endsWith(":")?"right":"left"));continue}l.push(e),n=!0}else n&&l.length>0&&(a.push(g(l,o)),l=[],o=[],n=!1),a.push(e)}return n&&l.length>0&&a.push(g(l,o)),a.join("\n")})(e=e.replace(/__/g,"\0\0").replace(/_/g,"_").replace(/\x00\x00/g,"__")));return t=t.replace(/]*>(.*?)<\/a>/gi,'$2'),t}catch(a){return t("error","at pages/text/text.vue:455","解析失败",a),e}},w=e=>{const t=/]*>([\s\S]*?)<\/script>/i.test(e),a=/<(form|input|select|textarea|button)\b[^>]*>/i.test(e);let n=e.replace(/]*>([\s\S]*?)<\/script>/gi,"");if(n=n.replace(/<\/?minimax:tool_call>/g,(e=>e.replace(//g,">"))).replace(/<\|[\w]+?\|>/g,(e=>e.replace(//g,">"))),t||a){return'

    表单仅预览,不可操作!!!

    '+n}return n},k=e=>{uni.previewImage({urls:[e]})},y=e=>{uni.downloadFile({url:e,success:e=>{uni.openDocument({filePath:e.tempFilePath,showMenu:!0})}})},C=e=>e?e<1?(1024*e).toFixed(0)+"KB":e.toFixed(2)+"MB":"0KB",N=e=>{if(!e||"string"!=typeof e)return{textContent:e||"",files:[]};const a=e.match(/\[文件信息:(\[.*?\])\]/);if(!a)return{textContent:e,files:[]};try{const t=JSON.parse(a[1]);return{textContent:e.replace(a[0],"").trim(),files:t}}catch(n){return t("error","at pages/text/text.vue:532","解析文件信息失败:",n),{textContent:e,files:[]}}},V=async()=>{try{const e="0123456789abcdef";let t="";for(let o=0;o<24;o++)t+=e[Math.floor(Math.random()*e.length)];const a=await r(ye.value,t);if(!a)return void uni.showToast({title:"工作区创建失败",icon:"none"});const n=uni.getStorageSync("yxd_login_info");let l="";n&&(l=n.username||"");if(!(await u(ye.value,a,"新会话",l)))return void uni.showToast({title:"新会话创建失败",icon:"none"});Ve()}catch(e){t("error","at pages/text/text.vue:577","新建普通会话失败:",e),uni.showToast({title:"创建会话失败,请重试",icon:"none"})}},S=e.ref(!1),P=()=>{S.value=!1},$=e.ref(!1),j=()=>{$.value=!$.value},I=()=>{ke.value&&uni.setStorageSync("currentSessionId",ke.value),uni.navigateTo({url:"/pages/WorkSpace/WorkSpace"})},L=()=>{ke.value&&uni.setStorageSync("currentSessionId",ke.value),uni.navigateTo({url:"/pages/CloudDatabase/CloudDatabase"})},z=()=>{uni.reLaunch({url:"/pages/Login/Login"})},F=e.ref([]),O=e.ref([]),A=()=>new Promise(((t,a)=>{if(v.isConnected)return t();const n=e.watch((()=>v.isConnected),(e=>{e&&(n(),t())})),l=e.watch((()=>v.connectionStatus),(e=>{"error"===e&&(n(),l(),a(new Error("连接失败")))}));v.connect({token:ye.value,conversationId:ke.value})})),U=e.ref(!1),q=e.ref(!1),R=e.ref(!1),W=e.ref([]),J=e.ref(null),H=e.ref(!1),X=e.ref([]),K=(e,t)=>{let a=e.target;for(;a&&a.classList;){if(a.classList.contains("chat-inline-link")){const e=a.getAttribute("data-url")||a.dataset&&a.dataset.url;return void(e&&ue(e))}a=a.parentElement}t.role&&Y(t)},G=e=>{try{const t=new URL(e).pathname.split("/").filter((e=>e));if(t.length>0)return decodeURIComponent(t[t.length-1])}catch(a){}const t=e.split("/").filter((e=>e));if(t.length>0){const e=t[t.length-1],a=e.indexOf("?");return a>-1?e.substring(0,a):e}return e},Y=e=>{X.value=(e=>{const t=new Set,a=[],n=/\[([^\]]*)\]\((https?:\/\/[^\s<>"{}|\\^`\[\]()]+)\)/gi;[...e.matchAll(n)].forEach((e=>{const n=e[1].trim(),l=e[2];t.has(l)||(t.add(l),a.push({url:l,name:n||l}))}));const l=e.replace(n,"").match(/https?:\/\/[^\s<>"{}|\\^`\[\]()]+/gi);return l&&l.forEach((e=>{t.has(e)||(t.add(e),a.push({url:e,name:G(e)}))})),a})(e.content||""),H.value=!0},Z=()=>{H.value=!1,X.value=[]},se=e.ref({show:!1,type:"loading",message:""});let ce=null;const re=(e,t,a)=>{ce&&clearTimeout(ce),se.value={show:!0,type:e,message:t},a>0&&(ce=setTimeout((()=>{se.value={show:!1,type:"loading",message:""}}),a))},ue=e=>{de(e)},de=async e=>{try{re("loading","下载中...",0);const t=uni.getStorageSync("workspace_id")||"",a=await E(ye.value,t,e),n="string"==typeof a?a:(null==a?void 0:a.url)||(null==a?void 0:a.download_url)||"";if(!n)return void re("error","获取下载地址失败",2500);uni.downloadFile({url:n,success:e=>{200===e.statusCode?(ce&&clearTimeout(ce),se.value={show:!1,type:"loading",message:""},uni.openDocument({filePath:e.tempFilePath,showMenu:!0,fail:()=>{re("error","无法打开此文件",2500)}})):re("error","下载失败",2500)},fail:()=>{re("error","下载失败",2500)}})}catch(t){re("error","下载失败: "+(t.message||t),2500)}},pe=async()=>{s.isConnecting||await d();const e=T(),t=W.value.length>0,a={command:1,sender:Ee.value,receiver:e,avatar:"",sessionId:ke.value,message:fe.value,callBackMessage:!1};t&&(a.contentType=1,a.uploadVos=W.value);const n={version:"1.1",body:a};s.send(n);const l={sender:Ee.value,receiver:e,content:fe.value,taskId:null,avatar:null,createTime:"",messageType:"null",contentJson:t?JSON.stringify(W.value):"null"};De.value=[...De.value,l],fe.value="",W.value=[],setTimeout((()=>{Ie()}),1e3)},me=async()=>{s.isConnecting||await d();const e=W.value.length>0,t={command:9,groupId:ke.value,message:fe.value||"",callBackMessage:!e,messageType:e?1:0,sender:Ee.value};e&&(t.uploadVos=W.value);const a={version:"1.1",body:t};s.send(a);const n={id:De.value.length+1,message:fe.value,messageType:e?1:0,groupId:null,createTime:"",contentJson:e?JSON.stringify(W.value):"",sender:Ee.value};De.value=[...De.value,n],fe.value="",W.value=[],setTimeout((()=>{Le()}),1e3)},ve=async()=>{try{await A();let e=fe.value;if(W.value.length){const t=JSON.stringify(W.value);e=e?`${e}\n[文件信息:${t}]`:`[文件信息:${t}]`}const t={type:"chat",conversation_id:ke.value,content:e};v.send(t),U.value=!0,q.value=!0,De.value=[...De.value,{role:"user",content:e}],J.value="streaming-"+Date.now(),De.value=[...De.value,{role:"assistant",content:"",_streaming:!0,_id:J.value}],fe.value="",W.value=[],Fe()}catch(e){U.value=!1,uni.showToast({title:`用户发送消息失败${e}`,icon:"error"})}},ge=async()=>{t("log","at pages/text/text.vue:1064","中断对话 - 当前会话ID:",ke.value);try{await v.send({type:"stop",conversation_id:ke.value}),t("log","at pages/text/text.vue:1070","中断指令已发送成功")}catch(e){t("error","at pages/text/text.vue:1072","中断指令发送失败:",e)}J.value&&(De.value=De.value.filter((e=>e._id!==J.value)),J.value=null),U.value=!1,v.isThinking=!1,q.value=!1,fe.value="",W.value=[],uni.showToast({title:"已中断",icon:"none",duration:1500})};e.watch((()=>v.isThinking),((e,a)=>{if(t("log","at pages/text/text.vue:1096","isThinking 变化:",a,"→",e,"messageString:",v.messageString),!a&&e)return t("log","at pages/text/text.vue:1099","AI开始回复(跨设备同步),锁定输入框"),U.value=!0,void(J.value||(J.value="streaming-"+Date.now(),De.value=[...De.value,{role:"assistant",content:"",_streaming:!0,_id:J.value}]));a&&!e&&(t("log","at pages/text/text.vue:1115","AI回复结束(正常/中断),解锁并刷新消息列表"),J.value&&(De.value=De.value.filter((e=>e._id!==J.value)),J.value=null),Me(),U.value=!1,q.value=!1,fe.value="",W.value=[])})),e.watch((()=>v.authFailReason),(t=>{"pc offline"===t&&(U.value=!1,v.authFailReason="",e.nextTick((()=>{uni.showModal({title:"提示",content:"PC端不在线,不可聊天",showCancel:!1,confirmText:"知道了"})})))})),e.watch((()=>v.messageString),(e=>{if(!J.value||!v.isThinking)return;const t=De.value.findIndex((e=>e._id===J.value));if(t>=0){const a={...De.value[t],content:e};De.value.splice(t,1,a),Fe()}}));const fe=e.ref(""),we=e.ref([]),ke=e.ref(""),ye=e.ref(""),Ee=e.ref(""),Ce=e.ref(""),Ne=e.ref(null),Ve=async()=>{try{ye.value=_(),t("log","at pages/text/text.vue:1189","token:",ye.value),we.value=await i(ye.value)||[];const e=B();e&&we.value.some((t=>t._id===e))?ke.value=e:we.value.length>0?ke.value=we.value[0]._id:ke.value="",t("log","at pages/text/text.vue:1201","保存会话id:",ke.value),uni.setStorageSync("currentSessionId",ke.value)}catch(e){uni.showToast({title:`获取会话列表失败${e}`,icon:"error"})}},be=e.ref([]),_e=e=>{if(!e)return null;const t=be.value.find((t=>t.receiver===e));return(null==t?void 0:t.avatar)||null},Be=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.receiver)),a=await m(ye.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.receiver);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/text/text.vue:1257","获取好友头像失败",a),e}},Se=e.ref([]),xe=e.ref([]),Te=e=>{if(!e)return null;const t=xe.value.find((t=>t.groupContactId===e));return(null==t?void 0:t.avatar)||null},De=e.ref([]),Pe=e.ref(""),$e=e.ref(!1);e.ref(!1),e.ref(1);const je=e.computed((()=>De.value)),Me=async()=>{try{De.value=await c(ye.value,ke.value)||[],Fe()}catch(e){uni.showToast({title:`获取ai会话内容失败${e}`,icon:"none"})}},Ie=async()=>{try{De.value=await ae(ke.value)||[],Fe()}catch(e){uni.showToast({title:`获取好友会话消息失败${e}`,icon:"none"})}},Le=async()=>{try{De.value=await ne(ke.value)||[],t("log","at pages/text/text.vue:1363","群聊消息:",De.value);const e=await le(ke.value);t("log","at pages/text/text.vue:1366","获取到的群成员列表:",e),e&&e.length?(xe.value=await(async e=>{if(!(null==e?void 0:e.length))return[];try{const a=e.map((e=>e.groupContactId));t("log","at pages/text/text.vue:1286","请求头像的ID列表:",a);const n=await m(ye.value,a);t("log","at pages/text/text.vue:1288","头像接口返回数据:",n);const l=new Map(n.map((e=>[e.user_id,e]))||[]);return t("log","at pages/text/text.vue:1291","userMap的keys:",Array.from(l.keys())),e.map((e=>{const a=e.groupContactId,n=l.get(a);return t("log","at pages/text/text.vue:1296",`查找 ${a} 的头像:`,n),{...e,avatar:(null==n?void 0:n.avatar)||null}}))}catch(a){return t("error","at pages/text/text.vue:1303","获取群成员头像失败",a),e}})(e),t("log","at pages/text/text.vue:1369","群成员列表(带头像):",xe.value)):xe.value=[],Fe()}catch(e){uni.showToast({title:`获取群聊会话失败${e}`,icon:"none"})}},ze=e=>{},Fe=async()=>{await e.nextTick(),je.value.length>0&&($e.value=!$e.value,Pe.value=$e.value?"chat-bottom-a":"chat-bottom-b")};return e.watch((()=>s.MessageReceived),(e=>{if(t("log","at pages/text/text.vue:1414","收到了好友消息"),e)switch(t("log","at pages/text/text.vue:1416","ChatType:",h.value),h.value){case 0:Me(),s.MessageReceived=!1;break;case 1:Ie(),s.MessageReceived=!1;break;case 2:Le(),s.MessageReceived=!1;break;default:t("log","at pages/text/text.vue:1432","default 分支"),s.MessageReceived=!1}}),{immediate:!0}),e.watch(ke,(e=>{if(e)switch(uni.setStorageSync("currentSessionId",ke.value),h.value){case 0:Me(),v.disconnect(),A();break;case 1:Ie();break;case 2:Le();break;default:Me()}}),{immediate:!0}),e.onMounted((()=>{})),l((async()=>{await(async()=>{try{ye.value=_(),Ne.value=await p(ye.value),Ee.value=Ne.value._id,Ce.value=Ne.value.avatar||"",t("log","at pages/text/text.vue:1179","用户信息已加载:",Ee.value,Ce.value)}catch(e){t("error","at pages/text/text.vue:1181","获取用户信息失败:",e)}})();const e=x();h.value=e;const a=B();a&&(ke.value=a),0===e?(await Ve(),ke.value&&Me(),ye.value&&ke.value&&!v.isConnected&&A()):1===e?(await(async()=>{try{t("log","at pages/text/text.vue:1216","开始获取好友列表");const e=await ee(Ee.value);t("log","at pages/text/text.vue:1219","friendList:",e),e&&e.length?be.value=await Be(e):(be.value=[],t("log","at pages/text/text.vue:1224","好友列表为空"))}catch(e){t("error","at pages/text/text.vue:1227","获取好友列表失败:",e),be.value=[]}finally{we.value=be.value}})(),Ie(),d()):2===e&&(await(async()=>{try{t("log","at pages/text/text.vue:1267","开始获取群聊列表"),Se.value=await te(Ee.value)}catch(e){t("error","at pages/text/text.vue:1272","获取群聊列表失败:",e),Se.value=[]}finally{we.value=Se.value}})(),await d(),await Le())})),o((()=>{v.disconnect()})),(n,l)=>{const o=a(e.resolveDynamicComponent("uni-icons"),b);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),S.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"ncd-overlay",onClick:P},[e.createElementVNode("view",{class:"ncd-card",onClick:l[0]||(l[0]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("view",{class:"ncd-title-eng"},[e.createElementVNode("text",null,"NEW")]),e.createElementVNode("text",{class:"ncd-title-zh"},"创建对话"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:P})]),e.createElementVNode("text",null,"选择对话类型,开启全新会话体验"),e.createElementVNode("view",{class:"ncd-options"},[e.createElementVNode("view",{class:"ncd-option ncd-normal"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"chat",color:"#000000",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title",onClick:V},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"普通会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"与AI自由对话,探索任何话题")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})]),e.createElementVNode("view",{class:"ncd-option ncd-intelligence"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"star",color:"#ffffff",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title"},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"智能体会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"选择专属智能体,获得精准专业服务")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})])])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"chat-page page-container"},[$.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"mask",onClick:j})):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-sidebar",{"sidebar-show":$.value}])},[e.createVNode(D,{chatList:we.value,showNewChatModal:S.value,"onUpdate:showNewChatModal":l[1]||(l[1]=e=>S.value=e),currentSessionId:ke.value,"onUpdate:currentSessionId":l[2]||(l[2]=e=>ke.value=e),chatType:h.value,"onUpdate:chatType":l[3]||(l[3]=e=>h.value=e),onRefreshConversations:Ve},null,8,["chatList","showNewChatModal","currentSessionId","chatType"])],2),e.createElementVNode("view",{class:"chat-wrapper"},[e.createElementVNode("view",{class:"chat-hearder"},[e.createElementVNode("view",{class:"chat-btn-group"},[e.createElementVNode("view",{class:"head-btn",onClick:j},[e.createElementVNode("view",{class:"iconfont icon-caidan"})]),e.createElementVNode("view",{class:"head-btn",onClick:I},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"})]),e.createElementVNode("view",{class:"head-btn",onClick:L},[e.createElementVNode("view",{class:"iconfont icon-cloud"})]),e.createElementVNode("view",{class:"head-btn log-out",onClick:z},[e.createElementVNode("view",{class:"iconfont icon-tuichu"})])])]),e.createElementVNode("view",{class:"main-chat"},[e.createElementVNode("scroll-view",{class:"chat-messages",direction:"vertical","scroll-y":"","scroll-into-view":Pe.value,"upper-threshold":0,"scroll-with-animation":!0,onScroll:ze},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(je.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock(e.Fragment,{key:a},[0===h.value&&"tool"!==t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-message",{"message-user":"user"===t.role}]),id:"msg-"+a},["user"===t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":"user"===t.role}])},["user"===t.role&&(null==(n=Ne.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ne.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"iconfont icon-yonghuziliao"}))],2)):e.createCommentVNode("",!0),t.content&&""!==String(t.content).trim()||t._streaming?(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["chat-content",{"chat-content-user":"user"===t.role,"chat-content-assistant":"assistant"===t.role}]),onClick:e=>K(e,t)},[!t._streaming||t.content&&""!==String(t.content).trim()?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"bubble-loading-dots"},[e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"})])),N(t.content).textContent?(e.openBlock(),e.createElementBlock("view",{key:1,innerHTML:f(N(t.content).textContent)},null,8,["innerHTML"])):e.createCommentVNode("",!0),N(t.content).files.length>0?(e.openBlock(),e.createElementBlock("view",{key:2,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N(t.content).files,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>k(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>y(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(C(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])):e.createCommentVNode("",!0)],10,["id"])):e.createCommentVNode("",!0)],64)})),128)),1===h.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(je.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===Ee.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===Ee.value}])},[t.sender===Ee.value&&(null==(n=Ne.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ne.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):_e(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:_e(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===Ee.value}]),onClick:e=>K(e,t)},[t.content&&""!==String(t.content).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:f(t.content)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>k(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>y(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(C(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),2===h.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(je.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===Ee.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===Ee.value}])},[t.sender===Ee.value&&(null==(n=Ne.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ne.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):xe.value.length>0&&Te(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:Te(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===Ee.value}]),onClick:e=>K(e,t)},[t.message&&""!==String(t.message).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:f(t.message)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>k(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>y(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(C(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),e.createElementVNode("view",{id:"chat-bottom-a",style:{height:"1rpx"}}),e.createElementVNode("view",{id:"chat-bottom-b",style:{height:"1rpx"}})],40,["scroll-into-view"]),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-container",{"interactive-disabled":U.value}])},[e.createElementVNode("view",{class:"chat-interactive-group"},[e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:U.value}]),onClick:l[4]||(l[4]=e=>!U.value&&(t("log","at pages/text/text.vue:626","点击了拍照上传"),void uni.chooseImage({count:1,sourceType:["camera","album"],success:e=>{const t=e.tempFiles,a=e.tempFilePaths;t.forEach(((e,t)=>{F.value.push({path:a[t],name:e.name||`photo_${Date.now()}_${t}.jpg`,size:e.size,type:"image",tempFile:e})}))},fail:e=>{t("error","at pages/text/text.vue:644","选择图片失败",e)}})))},"拍照上传",2),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:U.value}]),onClick:l[5]||(l[5]=e=>!U.value&&(t("log","at pages/text/text.vue:655","点击了上传文件"),void he({count:5,type:"all",success:e=>{t("log","at pages/text/text.vue:660","成功了"),O.value=e.tempFiles,F.value.push(...e.tempFiles),uni.showToast({title:`已选择 ${e.tempFiles.length} 个文件`,icon:"success"})},fail:e=>{t("error","at pages/text/text.vue:671","选择失败:",e),uni.showToast({title:"选择失败",icon:"error"})}})))},"上传文件",2)]),F.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"image-list"},[e.createElementVNode("view",{class:"image-tags"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"image-tag",key:a},[e.createElementVNode("text",{class:"tag-name"},e.toDisplayString(t.name),1),e.createElementVNode("text",{class:"tag-close",onClick:e.withModifiers((e=>(e=>{F.value.splice(e,1)})(a)),["stop"])},"×",8,["onClick"])])))),128))])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-input-container",{"input-disabled":U.value}])},[e.withDirectives(e.createElementVNode("textarea",{class:"message-input",placeholder:U.value?q.value?"AI 正在回复中...":"电脑正在运行,请稍后":"输入消息...",disabled:U.value,"onUpdate:modelValue":l[6]||(l[6]=e=>fe.value=e),"auto-height":""},null,8,["placeholder","disabled"]),[[e.vModelText,fe.value]]),U.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"input-btn-group stop-message-btn",onClick:ge},[e.createElementVNode("view",{class:"iconfont icon-tingzhi"})])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"input-btn-group send-message-btn",onClick:l[7]||(l[7]=e=>(async()=>{if(fe.value.trim()||0!==F.value.length){if(F.value.length>0){R.value=!0,uni.showLoading({title:"上传文件中...",mask:!0});try{const e=[];for(const t of F.value){const a=await oe(t.path);e.push(a)}W.value=e,F.value=[]}catch(e){return uni.hideLoading(),t("error","at pages/text/text.vue:895","文件上传失败:",e),uni.showToast({title:"文件上传失败,请重试",icon:"error"}),void(R.value=!1)}uni.hideLoading(),R.value=!1}0===h.value&&ve(),1===h.value&&pe(),2===h.value&&me()}})())},[e.createElementVNode("view",{class:"iconfont icon-fasong"})]))],2)],2)])])]),H.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"ncd-overlay",onClick:Z},[e.createElementVNode("view",{class:"ncd-card message-detail-card",onClick:l[8]||(l[8]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("text",{class:"ncd-title-zh"},"消息详情"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:Z})]),e.createElementVNode("scroll-view",{class:"message-detail-content","scroll-y":""},[X.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"detail-links-section"},[e.createElementVNode("view",{class:"detail-links-title"},"文件 ("+e.toDisplayString(X.value.length)+")",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(X.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"detail-link-item",onClick:e=>ue(t.url)},[e.createElementVNode("text",{class:"link-text"},e.toDisplayString(t.name),1)],8,["onClick"])))),128))])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"detail-empty"},[e.createElementVNode("text",null,"无可下载文件")]))])])])):e.createCommentVNode("",!0),se.value.show?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["download-toast-overlay",(se.value.show,"")])},[e.createElementVNode("view",{class:e.normalizeClass(["download-toast-card","download-toast-"+se.value.type])},["loading"===se.value.type?(e.openBlock(),e.createElementBlock("view",{key:0,class:"download-toast-icon"},[e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"})])):(e.openBlock(),e.createElementBlock("text",{key:1,class:"download-toast-icon"},e.toDisplayString("success"===se.value.type?"✓":"✕"),1)),e.createElementVNode("text",{class:"download-toast-text"},e.toDisplayString(se.value.message),1)],2)],2)):e.createCommentVNode("",!0)],64)}}},[["__scopeId","data-v-f61b4f79"]]);const Ve=C({name:"IntuitiveAipptViewer",props:{visible:{type:Boolean,default:!0},htmlContent:{type:String,default:'\n \n \n \n
    \n \x3c!-- 顶部装饰 --\x3e\n
    \n
    \n \x3c!-- 主标题 --\x3e\n

    \n 三國歷史\n

    \n \x3c!-- 副标题 --\x3e\n

    \n 從黃巾起義到三分歸晉\n

    \n \x3c!-- 分隔线 --\x3e\n
    \n
    \n \x3c!-- 简短描述 --\x3e\n

    \n 東漢末年 • 群雄並起 • 三分天下\n

    \n

    \n 公元184年 — 280年\n

    \n \x3c!-- 底部装饰 --\x3e\n
    \n
    \n
    \n \n
    \n

    \n 目 录\n

    \n
      \n
    • \n 第一章 东汉末年与黄巾起义3\n
    • \n
    • \n 第二章 群雄割据与董卓乱政5\n
    • \n
    • \n 第三章 曹操崛起与官渡之战8\n
    • \n
    • \n 第四章 孙刘联盟与赤壁之战12\n
    • \n
    • \n 第五章 三分天下格局的形成16\n
    • \n
    • \n 第六章 蜀汉政权的建立与发展20\n
    • \n
    • \n 第七章 曹魏政权的巩固与传承24\n
    • \n
    • \n 第八章 东吴政权的繁荣与衰落28\n
    • \n
    • \n 第九章 诸葛亮北伐与三国相持32\n
    • \n
    • \n 第十章 三国归晋与历史终结37\n
    • \n
    • \n 附录 三国主要人物简介42\n
    • \n
    • \n 附录 三国时期著名战役45\n
    • \n
    • \n 附录 三国疆域与行政区划48\n
    • \n
    \n
    \n \n

    \n 第一章 东汉末年与黄巾起义\n

    \n

    \n 东汉末年形势图\n

    \n

    \n 1.1 东汉王朝的衰落\n

    \n

    \n 东汉王朝自光武帝刘秀建立以来,历经明帝、章帝的盛世,至和帝以后,外戚与宦官交替专权,政治日趋腐败。东汉后期,皇帝的寿命普遍较短,多为幼年即位,导致太后临朝称制,外戚势力趁机掌控朝政。桓灵二帝时期,宦官势力达到顶峰“十常侍”把持朝政,卖官鬻爵,横征暴敛,导致民不聊生。\n

    \n

    \n 东汉末年,中央政府的统治力急剧衰落。地方官员各自为政,中央对地方的控制力减弱。土地兼并严重,大量农民失去土地,成为流民。赋税沉重,徭役频繁,加上自然灾害频发,百姓生活陷入绝境。这种局面为后来的农民起义和社会动荡埋下了伏笔。\n

    \n \n

    \n 此外,东汉的军事制度也出现了严重问题。边防军队逐渐废弛,地方军阀割据一方,中央对军队的控制力减弱。各州郡的太守、刺史不仅掌握行政权,还拥有相当规模的私人武装,形成了割据一方的势力。这些因素共同促成了东汉王朝的最终崩溃。\n

    \n

    \n 1.2 黄巾起义的爆发\n

    \n

    \n 中平元年(公元184年),张角、张梁、张宝三兄弟在冀州钜鹿(今河北巨鹿)发动了大规模农民起义。张角创立“太平道”,以道教为外衣,以治病救人为号召,在短短十余年间发展信徒数十万人,遍布东汉十三州。\n

    \n

    \n 黄巾军以“苍天已死,黄天当立,岁在甲子,天下大吉”为口号,头戴黄巾,象征对汉朝统治的否定。起义军分为十路,同时在全国各地发动进攻,短时间内攻克了许多郡县,东汉王朝的统治基础受到严重冲击。\n

    \n

    \n 面对来势汹汹的黄巾起义,东汉朝廷惊慌失措。灵帝急忙下诏各地募兵抵抗,并启用皇甫嵩、朱儁、卢植等名将率军镇压。同时,允许地方州郡自行组织军队,这为后来军阀割据提供了合法依据。\n

    \n

    \n 1.3 黄巾起义的历史影响\n

    \n

    \n 黄巾起义虽然最终被镇压,但它对东汉王朝的统治造成了致命打击。\n

    \n

    \n 首先,它彻底瓦解了东汉中央政府的权威,使得地方割据成为可能。其次,它消耗了东汉政府大量的军事和经济资源,国库空虚。再次,它打破了士族对仕途的垄断,为寒门子弟提供了上升通道。\n

    \n

    \n 更重要的是,黄巾起义锻炼出了一批军事人才。曹操、刘备、孙坚等人都是在镇压黄巾起义中崭露头角,逐渐成长为割据一方的军阀。可以说,没有黄巾起义,就没有后来的三国鼎立局面。\n

    \n

    \n 黄巾起义虽然失败了,但它揭开了三国时代的序幕,是中国历史上一次重要的农民起义。它的历史意义在于:打破了东汉末年的政治格局,为群雄逐鹿提供了舞台;促进了思想的解放,为各种政治势力的兴起创造了条件。\n

    \n

    \n 1.4 董卓进京与废立\n

    \n

    \n 中平六年(公元189年),汉灵帝刘辨去世,少帝刘辩即位。外戚何进与宦官十常侍的矛盾激化,双方展开激烈的权力斗争。何进为了对抗宦官,\n

    \n \n

    \n 密召凉州军阀董卓率军入京。\n

    \n

    \n 董卓率军进入洛阳后,立即控制了朝政。他先设计诛杀了宦官集团,随后废黜少帝刘辩,改立陈留王刘协为帝,是为汉献帝。董卓自任相国,总揽朝政,权倾朝野。为了巩固权力,董卓还纵容军队烧杀抢掠,洛阳城陷入一片混乱。\n

    \n

    \n 董卓的倒行逆施引起了天下诸侯的强烈不满。曹操、袁绍、袁术、公孙瓒等十八路诸侯联合讨伐董卓,推举袁绍为盟主。虽然联军最终未能消灭董卓,但董卓被迫迁都长安,洛阳城被付之一炬。这次讨董战争标志着东汉王朝的正式分裂,群雄割据的时代正式开始。\n

    \n

    \n 第二章 群雄割据与董卓乱政\n

    \n

    \n 2.1 董卓的暴政与灭亡\n

    \n

    \n 董卓迁都长安后,更加骄横跋扈。他自封为“太师”,地位在诸侯王之上,佩剑上殿,目中无人。为了镇压反对意见,董卓滥杀无辜,残害忠良,朝野上下敢怒而不敢言。\n

    \n

    \n 初平三年(公元192年),司徒王允利用董卓与吕布之间的矛盾,设计除掉了董卓。王允先是拉拢吕布为内应,然后趁董卓入宫朝拜之时,\n

    \n

    \n 让吕布将其刺杀。董卓死后,他的部将李傕、郭汜率军攻入长安,杀死王允,挟持汉献帝,关中地区再次陷入混乱。\n

    \n

    \n 董卓的灭亡并没有结束混乱局面,反而使局势更加复杂。李傕、郭汜之间互相攻杀,长安城遭到严重破坏,汉献帝沦为傀儡,各地割据势力更加嚣张,东汉王朝名存实亡。\n

    \n

    \n 2.2 曹操的初步崛起\n

    \n

    \n 曹操(字孟德,沛国谯县人)是三国时期最重要的政治家、军事家和文学家。曹操的祖父曹腾是东汉末年的宦官,父亲曹嵩是曹腾的养子,曾任太尉。曹操少年时期就表现出非凡的才干,他机智过人,胸有大志。\n

    \n

    \n 中平元年,曹操参加镇压黄巾起义,因功升任济南相。后来董卓进京,曹操逃出洛阳,在陈留起兵讨伐董卓。曹操是少数几个真正出击董卓的诸侯之一,虽然战败,但名声大振。\n

    \n \n

    \n 初平三年,曹操击破青州黄巾军,收降卒三十余万,人口百余万,创建了著名的“青州兵”。这是曹操第一支正规的私家军队,成为他逐鹿中原的主力。此后,曹操相继击败袁术、陶谦、吕布等割据势力,逐渐成为北方最强大的军阀。\n

    \n

    \n 2.3 刘备的艰难创业\n

    \n

    \n 刘备(字玄德,涿郡涿县人)是汉景帝之子中山靖王刘胜的后代,具有皇室血统。但到了刘备这一代,家道已经衰落,只能靠织席贩履为生。刘备仪表非凡,胸怀大志结交豪杰,在当地小有名气。\n

    \n

    \n 黄巾起义爆发后,刘备与关羽、张飞桃园结义,组成最早的创业团队。刘备率领义军参加镇压黄巾起义,因功被封为安喜县尉。此后,刘备先后依附于公孙瓒、陶谦、曹操、袁绍、刘表等诸侯,颠沛流离,寄人篱下。\n

    \n

    \n 建安六年(公元201年),刘备投奔荆州牧刘表,被安排在新野驻守。在荆州的七年里,刘备广招贤才,诸葛亮就在此时加入刘备集团。诸葛亮隆中对策,为刘备制定了夺取天下的大政方针,刘备的霸业从此开始起步。\n

    \n

    \n 2.4 孙坚与孙策的基业\n

    \n

    \n 孙坚(字文台,吴郡富春人)是东吴政权的奠基人之一。他出身寒门,但英勇善战,在镇压黄巾起义和讨伐董卓的战争中表现出色,\n

    \n

    \n 被封为长沙太守、乌程侯。\n

    \n

    \n 初平二年(公元191年),袁术派孙坚进攻荆州刘表。孙坚在襄阳之战中击败刘表部将黄祖,乘胜追击时中箭身亡,年仅三十七岁。孙坚死后,其部众由其侄孙贲率领,继续依附于袁术。\n

    \n

    \n 孙策(字伯符)是孙坚的长子,他继承父亲的遗志,在袁术麾下效力。建安五年(公元200年),孙策率军渡过长江,攻占江东地区,先后击败严白虎、王朗等地方势力,迅速占领了吴郡、会稽、豫章、庐江、丹阳等郡。孙策善用人才,周瑜、张昭等人纷纷来投,东吴基业初具规模。\n

    \n

    \n 2.5 官渡之战前的北方局势\n

    \n

    \n 建安五年(公元200年)前后,中国北方形成了曹操与袁绍两大集团对峙的局面。曹操占据兖州、豫州、徐州部分地区,挟天子以令诸侯,实力日益强盛。袁绍占据冀州、青州、并州、幽州,拥有精兵数十万,地广人多,\n

    \n \n

    \n 势力最强大。\n

    \n

    \n 袁绍手下的谋士郭图、审配等人主张早日发动对曹操的进攻,而田丰、沮授则认为应该先巩固后方,等待时机。袁绍最终采纳了主战派的建议,决定发兵南下。与此同时,曹操也积极备战,在官渡一线构筑防线。\n

    \n

    \n 官渡之战是三国时期最关键的战役之一,此战决定了北方的归属,也奠定了三国鼎立的基础。战争的胜负虽然取决于许多因素,但曹操的军事才能和战略眼光无疑是决定性的。\n

    \n

    \n 第三章 曹操崛起与官渡之战\n

    \n

    \n 3.1 曹操的政治举措\n

    \n

    \n 曹操之所以能够在群雄中脱颖而出,不仅仅依靠军事才能,更重要的是他的政治举措。建安元年(公元196年),曹操迎接汉献帝迁都许昌,开始了“挟天子以令诸侯”的政治策略。\n

    \n

    \n 曹操挟持汉献帝后,打着皇帝的旗号征讨四方,取得了政治上的主动权。他先后消灭了袁术、吕布、刘表等割据势力,又迫使韩遂、马超等西北军阀臣服。在军事胜利的基础上,曹操推行了一系列政治改革。\n

    \n

    \n 在用人方面,曹操打破门第观念,实行“唯才是举”的政策。他多次下诏求贤,只要有才能的人,无论出身高低,都能得到重用。\n

    \n

    \n 这使得曹操麾下聚集了大量人才,谋士如荀彧、郭嘉、贾诩、荀攸、程昱等,武将如张辽、徐晃、于禁、乐进、李典等。\n

    \n

    \n 3.2 曹操的经济与军事改革\n

    \n

    \n 曹操在经济方面推行“屯田制”,让士兵和流民开垦荒地,生产粮食。屯田制分为军屯和民屯两种,有效地解决了粮食问题,为军事行动提供了充足的物资保障。\n

    \n

    \n 在军事上,曹操改革兵制,建立了一支训练有素、纪律严明的军队。他重视军队的训练和装备,注重发挥各将领的特长,形成了一套完整的军事指挥体系。曹操还著有《孙子略解》《兵书接要》等军事著作,展现了他深厚的军事理论素养。\n

    \n

    \n 曹操还善于利用政治和外交手段瓦解对手。他分化瓦解敌对势力,\n

    \n \n

    \n 必要时使用离间计、反间计等计谋,以最小的代价换取最大的胜利。这些综合手段的运用,使曹操成为三国时期最杰出的政治家和军事家。\n

    \n

    \n 3.3 官渡之战的背景\n

    \n

    \n 建安五年(公元200年)二月,袁绍率十万大军南下攻打曹操。袁绍的军队人数众多,装备精良,士气旺盛。而曹操的兵力只有两三万,双方实力悬殊。\n

    \n

    \n 面对强敌,曹操采取了正确的战略战术。他先发制人,击败了刘备,消除了侧翼威胁,然后集中兵力在官渡一线设防。曹操知道自己的兵力不足以与袁绍正面对抗,因此采取了以逸待劳、坚壁不战的策略。\n

    \n

    \n 袁绍虽然兵力占优,但指挥失当,多次错失良机。他的谋士之间互相倾轧,不能形成统一的战略。而曹操则能够虚心纳谏,灵活应对战场变化。两军的对峙持续了半年多,战争进入相持阶段。\n

    \n

    \n 3.4 官渡之战的经过\n

    \n

    \n 建安五年八月,袁绍率军逼近官渡,两军在此展开决战。袁绍依仗兵力优势,采取强攻战术,但曹操防守严密,几次进攻都未能得逞。\n

    \n

    \n 九月,曹操率军袭击袁绍的运粮车队,烧毁了袁绍的大量粮草。十月,袁绍派淳于琼率万余人护送粮草,驻守在乌巢。曹操得知这一情报后,亲率五千精兵连夜突袭乌巢,一把火烧掉了袁绍的全部粮草。\n

    \n

    \n 乌巢失守后,袁绍军心动摇。曹操乘机发动总攻,大败袁绍。袁绍仓皇逃回冀州,其主力部队损失殆尽。这场战役,曹操以少胜多,创造了军事史上的经典战例。\n

    \n

    \n 3.5 官渡之战的结果与影响\n

    \n

    \n 官渡之战后,袁绍势力一蹶不振。建安七年(公元202年),袁绍病逝,他的两个儿子袁尚、袁谭互相攻击,最终被曹操各个击破。建安十二年(公元207年),曹操彻底平定北方,占据了幽州、冀州、青州、并州、兖州、豫州、徐州等广大地区。\n

    \n

    \n 官渡之战的胜利,使曹操成为北方实际的统治者,为他统一北方奠定了坚实基础。此战后,曹操将主要精力用于巩固后方、发展经济、扩充军队,为南下统一全国做准备。\n

    \n \n

    \n 从历史角度看,官渡之战是中国古代军事史上的经典战例。曹操以少胜多、以弱胜强的成功经验,为后世军事家提供了宝贵的借鉴。此战也确立了曹操在三国鼎立格局中的主导地位。\n

    \n

    \n 3.6 曹操统一北方\n

    \n

    \n 击败袁绍后,曹操开始了统一北方的战争。建安九年(公元204年),曹操攻占邺城,吞并了袁尚的势力。建安十年(公元205年),曹操击败袁谭,收取青州。建安十一年(公元206年),曹操攻占并州,消灭了高干。\n

    \n

    \n 建安十二年(公元207年),曹操率军北征乌桓,在白狼山之战中大败乌桓军队,斩首蹋顿单于,彻底平定了北方边境。此战过后,北方地区获得了相对稳定的和平环境。\n

    \n

    \n 在平定北方的过程中,曹操注意招抚当地人才,北方社会经济得到了恢复和发展。曹操的统治为后来的曹魏政权奠定了基础,也为中国南北朝的统一创造了条件。\n

    \n

    \n 第四章 孙刘联盟与赤壁之战\n

    \n

    \n 4.1 曹操南征与荆州之变\n

    \n

    \n 建安十三年(公元208年),曹操平定北方后,率大军南下,目标是荆州和江东。荆州的刘表年老多病,其子刘琮继位。曹操大军压境时,刘琮在蒯越、韩嵩等人的劝说下投降曹操。\n

    \n

    \n 刘备当时驻守在新野,得知曹操南下的消息后,仓促撤退。曹操亲率五千精兵追击,在当阳长坂坡大败刘备。刘备被迫弃妻小而逃,在赵云的护卫下才得以脱险。\n

    \n

    \n 诸葛亮建议刘备联合孙权,共同抵抗曹操。当时孙权占据江东已有九年时间,根基牢固,兵精粮足。刘备派诸葛亮前往柴桑(今江西九江)说服孙权,促成孙刘联盟的形成。\n

    \n

    \n 4.2 孙刘联盟的形成\n

    \n

    \n 孙权接到曹操的劝降书后,犹豫不决。他的谋士鲁肃主张联合刘备抵抗曹操,而张昭等文臣则主张投降。鲁肃建议孙权召回周瑜,共同商讨对策。\n

    \n

    \n 周瑜从鄱阳湖赶回柴桑,与诸葛亮一起分析形势。周瑜认为,\n

    \n \n

    \n 曹操虽然兵多,但北方军队不习水战,而且后方不稳,马超、韩遂等人还在关西虎视眈眈。孙刘联军有战胜的可能。\n

    \n

    \n 孙权采纳了周瑜的建议,决定联合刘备抵抗曹操。他任命周瑜为左都督,程普为右都督,鲁肃为赞军校尉,率三万大军与刘备汇合。孙刘联盟的建立,为赤壁之战的胜利奠定了基础。\n

    \n

    \n 4.3 赤壁之战的准备\n

    \n

    \n 建安十三年冬,周瑜率军与刘备在江夏汇合。两军加起来共有五万余人,在赤壁与曹操大军隔江对峙。曹操的北方军队不习水战,为了克服晕船问题,他们将战船用铁索连接起来,以减少风浪的颠簸。\n

    \n

    \n 周瑜的部将黄盖发现曹操战船相连的弱点,建议采用火攻。他亲自写信向曹操假投降,麻痹敌人。曹操信以为真,没有防备。\n

    \n

    \n 战前,周瑜进行了周密的部署。他派黄盖率十艘装满易燃物品的战船靠近曹军舰队,准备实施火攻。同时命令主力部队待命,随时准备出击。\n

    \n

    \n 4.4 赤壁之战的经过\n

    \n

    \n 建安十三年十一月的一个夜晚,江面上刮起了东南风。黄盖率领十艘满载柴草、油脂的战船,向曹军舰队驶去。接近曹军时,黄盖下令点火,然后率部跳上小船离开。\n

    \n

    \n 着火的战船顺风冲入曹军舰队,由于战船用铁索相连,无法分散,\n

    \n

    \n 火势迅速蔓延。曹操的战船和岸上营地陷入一片火海,士兵死伤无数。\n

    \n

    \n 周瑜趁势率军渡江发动总攻,曹操大军大败。曹操被迫率残部撤退,在华容道又遭到关羽的伏击,损失惨重。此战,曹操损失了大部分军队和战船,基本丧失了统一南方的能力。\n

    \n

    \n 4.5 赤壁之战的结果与影响\n

    \n

    \n 赤壁之战后,曹操退回北方,短期内无力南下。孙权和刘备各自发展势力,形成了三国鼎立的雏形。刘备趁机夺取了荆州的江南四郡有了立足之地。\n

    \n

    \n 赤壁之战是中国古代军事史上最著名的以少胜多的战例之一。周瑜和黄盖的火攻计策,成为军事史上的经典战例。此战改变了三国的历史走向,\n

    \n \n

    \n 奠定了三国鼎立的格局。\n

    \n

    \n 从政治角度看,赤壁之战的胜利孙刘联盟的胜利,也是曹操“挟天子以令诸侯”战略的失败。此战后曹操不得不调整战略,转而巩固北方经营西北,为日后篡汉建魏做准备。\n

    \n

    \n 4.6 赤壁之战后的局势\n

    \n

    \n 赤壁之战后,刘备向孙权借荆州南郡,开始了建立蜀汉政权的进程。建安十四年(公元209年),周瑜率军攻占江陵,刘备表荐刘表长子刘琦为荆州刺史,自己以军师中郎将的身份治理荆州。\n

    \n

    \n 建安十五年(公元210年),周瑜病逝,孙权任命鲁肃为都督。鲁肃主张将荆州借给刘备,以共同对抗曹操。刘备得到荆州后,实力大增,开始向益州发展。\n

    \n

    \n 建安十六年(公元211年),刘璋邀请刘备入蜀对抗张鲁。刘备趁机率军入益州,拉开了夺取益州的序幕。建安十九年(公元214年),刘备包围成都,刘璋投降,刘备占据了益州。\n

    \n

    \n 第五章 三分天下格局的形成\n

    \n

    \n 5.1 刘备取益州与汉中\n

    \n

    \n 建安十六年(公元211年),益州牧刘璋听说曹操要攻打汉中张鲁,心中恐惧。谋士张松建议刘璋邀请刘备入蜀,共同抵御曹操。\n

    \n

    \n 刘璋采纳了这个建议,派法正迎请刘备。\n

    \n

    \n 刘备率军入蜀后,与刘璋的关系逐渐恶化。建安十七年(公元212年),刘备在葭萌关起兵,进攻成都。双方在涪城、绵竹等地展开激战,刘备进展顺利。\n

    \n

    \n 建安十九年(公元214年),刘备包围成都,刘璋被迫投降。刘备自领益州牧,封诸葛亮为军师将军,负责治理益州。从此,刘备拥有了荆州和益州两块根据地,三分天下有其一。\n

    \n

    \n 建安二十三年(公元218年),刘备率军进攻汉中,与曹操展开激战。建安二十四年(公元219年),刘备在定军山击败曹操,杀死曹操部将夏候渊,攻占汉中。刘备自称汉中王,实现了“隆中对”中跨有荆益的战略目标。\n

    \n \n

    \n 5.2 关羽失荆州\n

    \n

    \n 建安二十四年(公元219年),关羽在刘备攻取汉中的同时,发动了北伐襄樊的战争。关羽率军围攻樊城的曹仁,曹操派于禁率七军前来救援。\n

    \n

    \n 秋天的连绵大雨导致汉水泛滥,于禁的七军被洪水淹没,于禁被迫投降。关羽乘势进攻,曹操的大将于禁被俘,庞德被杀,曹操震动。关羽威震华夏,曹操甚至一度考虑迁都以避其锋芒。\n

    \n

    \n 然而就在关羽北伐胜利之际,孙权派吕蒙白衣渡江,袭取了荆州。关羽得知后方失守后,仓促回撤,但为时已晚。关羽最终在麦城被孙权部将马忠擒杀,荆州落入东吴手中。\n

    \n

    \n 关羽失荆州是三国时期的重大事件,它打破了孙刘联盟,也使刘备失去了北伐的通道。蜀汉的势力范围从此被压缩在益州一地,难以对外发展。\n

    \n

    \n 5.3 曹丕篡汉与曹魏建立\n

    \n

    \n 建安二十五年(公元220年),曹操病逝于洛阳,终年六十五岁。曹操死后,其子曹丕继承魏王爵位,掌控了魏国的军政大权。\n

    \n

    \n 同年十月,曹丕迫使汉献帝禅让帝位,建立魏国,是为魏文帝。东汉王朝正式灭亡,三国时代正式开始。曹丕定都洛阳,改元黄初。\n

    \n

    \n 曹丕称帝后,追尊曹操为魏武帝,庙号太祖。曹魏政权控制了北方中原地区,拥有最广阔的土地和最多的人口,是三国中实力最强的政权。\n

    \n

    \n 5.4 刘备称帝与蜀汉建立\n

    \n

    \n 章武元年(公元221年),刘备在成都称帝,建立蜀汉政权,是为蜀汉昭烈帝。刘备定都成都,以诸葛亮为丞相,许靖为司徒。\n

    \n

    \n 刘备称帝后做的第一件事就是发兵伐吴,为关羽报仇。同年,刘备亲率大军进攻东吴,试图夺回荆州。孙权派陆逊率军抵御。\n

    \n

    \n 蜀汉与东吴的夷陵之战爆发于章武二年(公元222年)。刘备率军在夷陵一带扎营连营数百里,与吴军相持。陆逊采用火攻,大败蜀军。刘备逃回白帝城,蜀汉元气大伤。\n

    \n

    \n 5.5 三国鼎立格局的正式形成\n

    \n

    \n 夷陵之战后,刘备病逝于白帝城,终年六十三岁。诸葛亮辅佐后主刘禅,\n

    \n \n

    \n 继续治理蜀汉。蜀汉与东吴重新修好,恢复了孙刘联盟。\n

    \n

    \n 黄初二年(公元221年),孙权也称王,建都建业,国号吴,但未正式称帝。直到黄龙元年(公元229年),孙权才正式称帝,建立东吴政权。\n

    \n

    \n 至此,三国鼎立的格局正式形成:曹魏占据北方中原地区,拥有洛阳、长安等大城市,人口众多,经济发达;蜀汉占据益州和汉中,地势险要,易守难攻;东吴占据江东六郡,经济繁荣,水军强大。三国之间形成了相对稳定的对峙局面。\n

    \n

    \n 5.6 三国鼎立时期的特点\n

    \n

    \n 三国鼎立时期,各国都注重发展经济、整军经武。曹魏实行九品中正制,蜀汉推行依法治国,东吴则大力发展海外贸易。三个政权都在各自的统治区域内建立了一套相对完整的政治制度。\n

    \n

    \n 在军事方面,三国都面临外部威胁。曹魏需要防御蜀汉和东吴的进攻,同时还要应对北方少数民族的侵扰;蜀汉和东吴则需要联合起来共同对抗曹魏。这种军事对峙持续了四十多年。\n

    \n

    \n 在文化方面,三国时期出现了许多杰出的文学家、艺术家和科学家。曹植的文学成就极高,诸葛亮的智慧成为后世楷模,东吴的航海技术领先世界。三国文化成为中国传统文化的重要组成部分。\n

    \n

    \n 第六章 蜀汉政权的建立与发展\n

    \n

    \n 6.1 诸葛亮辅政\n

    \n

    \n 章武三年(公元223年),刘备病逝于白帝城,临终前托孤于诸葛亮。刘备对诸葛亮说:“君才十倍于曹丕,必能安国,终定大事。若嗣子可辅,辅之;如其不才,君可自取。”诸葛亮感激涕零,表示“臣敢竭股肱之力,效忠贞之节,继之以死”。\n

    \n

    \n 诸葛亮被后主刘禅封为武乡侯,开府治事。实际上,诸葛亮成为蜀汉政权的最高执政者,总揽军政大权。他内修政治,外整军务,殚精竭虑,维护蜀汉政权的生存和发展。\n

    \n

    \n 在政治上,诸葛亮推行法治,注重选拔人才。他制定蜀科,依法治国,使得蜀汉政治较为清明。在经济上,诸葛亮重视农业生产,鼓励蚕桑,发展蜀锦等手工业。在军事上,诸葛亮训练军队,改进武器,\n

    \n \n

    \n 提升蜀军的战斗力。\n

    \n

    \n 6.2 蜀汉的内政与经济\n

    \n

    \n 诸葛亮治理蜀汉期间,实行了一系列政治经济改革。在政治制度方面,诸葛亮完善了官制,建立了较为完整的官僚体系。他注重选拔人才,不看出身门第,只看才能德行。\n

    \n

    \n 在经济方面,诸葛亮推行屯田制,让士兵和民众开垦荒地,增加粮食产量。他重视水利建设,维护都江堰等水利工程,保障农业生产的顺利进行。蜀锦是蜀汉的重要特产,诸葛亮大力发展蜀锦生产,通过对外贸易换取曹魏和东吴的物资。\n

    \n

    \n 在民族政策方面,诸葛亮采取“以夷制夷”的策略,妥善处理与西南少数民族的关系。他七擒七纵孟获,获得了少数民族的拥护,确保了蜀汉后方的稳定。\n

    \n

    \n 6.3 蜀汉的对外关系\n

    \n

    \n 刘备去世后,诸葛亮派邓芝出使东吴,修复了孙刘联盟。邓芝不辱使命,说服孙权与蜀汉重新结盟,共同对抗曹魏。此后,蜀汉与东吴的关系一直保持良好,直到蜀汉灭亡。\n

    \n

    \n 对于曹魏,诸葛亮采取敌对态度,但同时也保持了表面的外交关系。他多次派人出使东吴和曹魏,了解两国情况,寻求有利的外交环境。\n

    \n

    \n 在处理与西南少数民族的关系方面,诸葛亮表现出了高超的政治智慧。他尊重少数民族的风俗习惯,任用当地首领为官,赢得了少数民族的拥护。这为蜀汉政权的稳定提供了重要保障。\n

    \n

    \n 6.4 蜀汉的著名人物\n

    \n

    \n 蜀汉政权人才济济,文武兼备。诸葛亮是蜀汉最重要的政治家和军事家,他上知天文,下知地理,足智多谋,被誉为“千古第一相”。\n

    \n

    \n 在文臣方面,蜀汉有法正、董和、蒋琬、费祎、姜维等人。法正善于奇谋,是刘备的得力谋士;蒋琬、费祎继承诸葛亮的事业,治理蜀汉;姜维是诸葛亮指定的接班人,继续坚持北伐。\n

    \n

    \n 在武将方面,蜀汉有关羽、张飞、赵云、马超、黄忠“五虎上将”,\n

    \n \n

    \n 以及魏延、王平、廖化、向宠等将领。关羽、张飞是刘备的结义兄弟,英勇善战;赵云是刘备的护卫,多次救主于危难之中;马超、黄忠是后来归降的猛将。\n

    \n

    \n 6.5 蜀汉的政治制度\n

    \n

    \n 蜀汉的政体基本沿袭汉制,但也有所创新。刘禅虽然是皇帝,但实际权力掌握在丞相手中。诸葛亮开府治事,有自己的丞相府僚属,形成了与皇帝并列的行政体系。\n

    \n

    \n 蜀汉的官制分为中央和地方两级。中央有丞相、太尉、司徒、司空等官职,地方有州、郡、县三级。诸葛亮实行依法治蜀,制定了蜀科,作为基本法律。\n

    \n

    \n 蜀汉的选拔制度主要是察举和考试相结合。诸葛亮注重人才的选拔和培养,建立了完善的官员考核制度。他推荐的人才,大都德才兼备,为蜀汉的发展做出了贡献。\n

    \n

    \n 6.6 蜀汉的社会文化\n

    \n

    \n 蜀汉时期,成都成为西南地区的文化中心。诸葛亮重视教育,设立学校,培养人才。蜀汉的学术氛围浓厚,出现了许多著名的学者和文人。\n

    \n

    \n 蜀汉的文学艺术也有较高成就。陈寿的《三国志》是史学名著,记载了三国时期的历史。诸葛亮的前后《出师表》是千古名文,表达了他对国家的忠诚。\n

    \n

    \n 蜀汉的科技也有一定发展。诸葛亮发明了木牛流马、连弩等军事器械,提高了蜀军的战斗力。他还将先进的农业技术传授给西南少数民族,促进了当地经济社会的发展。\n

    \n

    \n 第七章 曹魏政权的巩固与传承\n

    \n

    \n 7.1 曹丕的政治措施\n

    \n

    \n 曹丕继位魏王后,实行了一系列政治改革来巩固自己的统治。他推行九品中正制,兼顾了士族和寒门的利益,暂时缓解了统治阶级内部的矛盾。这一制度成为魏晋南北朝时期的主要选官制度。\n

    \n

    \n 在军事方面,曹丕继续推行曹操的军事政策,加强中央对军队的控制。\n

    \n \n

    \n 他多次率军伐吴,虽然没有取得重大胜利,但巩固了魏国在江淮地区的防线。\n

    \n

    \n 在经济方面,曹丕继续推行屯田制,重视农业生产。他下令兴修水利,鼓励垦荒,使得北方经济得到恢复和发展。曹丕还注重商业贸易,促进了物资流通。\n

    \n

    \n 7.2 曹丕的对外战争\n

    \n

    \n 黄初三年(公元222年),曹丕率军伐吴,发动了第一次濡须口之战。魏军与吴军相持数月,互有胜负,最终无功而返。\n

    \n

    \n 黄初五年(公元224年),曹丕第二次伐吴,这次他亲自率军进攻广陵(今江苏扬州),但因为长江水涨,无功而返。黄初六年(公元225年),曹丕第三次伐吴,再次失败。\n

    \n

    \n 三次伐吴的失败,使曹丕认识到短时间内无法消灭东吴。他调整了战略,将主要精力放在国内建设上,发展经济,整顿内政,为最终统一天下做准备。\n

    \n

    \n 7.3 曹叡继位与辅政\n

    \n

    \n 黄初七年(公元226年),曹丕病逝于洛阳,终年四十岁。曹丕死后,其子曹叡继位,是为魏明帝。曹叡继位时只有二十二岁,资历较浅,需要依靠老臣辅政。\n

    \n

    \n 曹叡继位后面临的主要问题是辅政大臣的选择。曹丕临终前指定曹真、\n

    \n

    \n 陈群、司马懿为辅政大臣,辅佐曹叡。这三人都是曹魏的重臣各有特长。\n

    \n

    \n 曹叡虽然年轻,但很有才能。他能够驾驭群臣,保持政局的稳定。在军事上,他多次击退蜀汉和东吴的进攻,保卫了魏国的安全。在内政上,他注重发展经济,使得魏国实力不断增强。\n

    \n

    \n 7.4 司马懿的崛起\n

    \n

    \n 司马懿(字仲达,河内温县人)是三国时期最重要的政治家和军事家之一,也是晋朝的奠基人。他出身于司马氏家族,是东汉末年的名士。\n

    \n

    \n 曹操时期,司马懿被征召为官,但长期得不到重用。曹丕继位后,司马懿开始受到重用,逐渐升任要职。曹叡时期,司马懿多次率军出征,\n

    \n \n

    \n 屡立战功,成为魏国最重要的军事统帅之一。\n

    \n

    \n 司马懿曾多次抵御诸葛亮的北伐,功绩卓著。他采取的正确战略战术,有效地消耗了蜀汉的国力。司马懿还率军平定辽东,消灭了公孙渊的割据势力,为魏国解除了后顾之忧。\n

    \n

    \n 7.5 曹魏后期的政治\n

    \n

    \n 曹叡去世后,其养子曹芳继位,年仅八岁。曹爽和司马懿被任命为辅政大臣,两人共同执掌朝政。曹爽是曹真的儿子,代表曹氏宗亲的利益;司马懿代表士族集团的利益。\n

    \n

    \n 曹爽与司马懿之间存在尖锐的矛盾。曹爽排挤司马懿,将他明升暗降,剥夺了军权。司马懿假装生病,不问政事,暗中积蓄力量准备反击。\n

    \n

    \n 正始十年(公元249年),司马懿乘曹爽陪同曹芳出祭高平陵之机,发动政变,诛杀曹爽及其党羽。从此,司马家族掌控了曹魏的朝政大权,为后来的司马氏代魏建立了基础。\n

    \n

    \n 7.6 曹魏的灭亡\n

    \n

    \n 司马懿死后,其子司马师、司马昭继续执掌朝政。司马师废黜曹芳,改立曹奂为帝。司马昭弑杀魏帝曹髦,另立曹奂为帝。曹魏政权已经名存实亡。\n

    \n

    \n 咸熙二年(公元265年),司马昭之子司马炎代魏称帝,建立晋朝,是为晋武帝。曹魏政权至此灭亡。从曹丕称帝到曹魏灭亡,历时四十五年。\n

    \n

    \n 曹魏虽然灭亡了,但它为晋朝的统一奠定了基础。曹操、曹丕、曹叡祖孙三代经营北方,使得中原地区经济繁荣,社会稳定,为晋朝灭吴统一全国创造了条件。\n

    \n

    \n 第八章 东吴政权的繁荣与衰落\n

    \n

    \n 8.1 孙权的统治政策\n

    \n

    \n 孙权(字仲谋,吴郡富春人)是三国时期在位时间最长的君主之一。他从建安五年(公元200年)继承兄业,到太元二年(公元252年)去世,执政长达五十二年。\n

    \n

    \n 孙权善于用人,能够发挥各人的长处。他重用周瑜、鲁肃、吕蒙、\n

    \n \n

    \n 陆逊等名将,形成了东吴的四大都督系统。在文臣方面,他重用张昭、顾雍、诸葛瑾等人,治理国家。\n

    \n

    \n 在经济方面,孙权大力发展江南经济,鼓励农民开垦荒地,推广先进的农业生产技术。他重视海上贸易,与辽东、东南亚等地有贸易往来。东吴的造船业和航海业在当时处于世界领先地位。\n

    \n

    \n 8.2 东吴的对外扩张\n

    \n

    \n 孙权在位期间,积极向外扩张领土。建安十三年(公元208年),东吴与刘备联军在赤壁击败曹操,解除了北方的威胁。此后,东吴开始向岭南地区扩张。\n

    \n

    \n 建安二十五年(公元220年),孙权派步骘率军平定岭南,占据了交州(今广东、广西、越南北部)。黄龙二年(公元230年),孙权派卫温、诸葛直率军一万出海,寻找夷洲(今台湾),虽然损失较大,但加强了对台湾的联系。\n

    \n

    \n 嘉禾六年(公元237年),东吴派陆胤率军平定海南岛的叛乱,将海南岛纳入东吴版图。东吴的疆域扩展到了极盛时期。\n

    \n

    \n 8.3 东吴与蜀魏的关系\n

    \n

    \n 东吴与蜀汉的关系经历了合作与冲突的过程。赤壁之战后,孙刘联盟共同抗曹,保持了较长时期的合作。但荆州问题一直是两国之间的矛盾焦点。\n

    \n

    \n 关羽失荆州后,刘备伐吴,夷陵之战爆发,东吴击败蜀汉。两败俱伤后,\n

    \n

    \n 双方重新修好。诸葛亮执政期间,蜀吴关系一直保持良好,共同对抗曹魏。\n

    \n

    \n 东吴与曹魏的关系则比较复杂。曹丕时期,东吴曾两次向魏称臣,接受魏国的封号。但孙权并不真正服从曹魏,只是利用魏国的支持来发展自己的势力。\n

    \n

    \n 8.4 东吴的四大都督\n

    \n

    \n 东吴历史上最著名的是四位都督:周瑜、鲁肃、吕蒙、陆逊。他们在不同的历史时期担任最高军事指挥官,为东吴的发展做出了重要贡献。\n

    \n

    \n 周瑜是东吴的开国元勋,他辅佐孙策平定江东,\n

    \n \n

    \n 又在赤壁之战中击败曹操,奠定了东吴的基业。鲁肃是东吴的战略家,他主张联合刘备共同抗曹,为东吴制定了正确的战略方针。\n

    \n

    \n 吕蒙是东吴的名将,他白衣渡江,袭取荆州,杀死关羽,为东吴夺得了梦寐以求的荆州。陆逊是东吴后期的支柱,他火烧连营,击败刘备,又多次抵御曹魏的进攻,保卫了东吴的安全。\n

    \n

    \n 8.5 东吴的经济与文化\n

    \n

    \n 东吴时期,江南经济得到了快速发展。孙权推行一系列发展农业的措施,使得粮食产量大幅提高。江南的丝织业、制瓷业、造船业都有较大发展。\n

    \n

    \n 东吴的造船业在当时处于世界领先地位。东吴拥有当时世界上最庞大的船队,能够制造大型海船。东吴的航海家曾到达夷洲、澶洲等地,与东南亚诸国建立了贸易关系。\n

    \n

    \n 在文化方面,东吴出现了许多著名的学者和文人。虞翻、王朗、张温等人是当时的经学大师。东吴的书法、绘画艺术也有较高成就,对后世产生了深远影响。\n

    \n

    \n 8.6 东吴的衰落与灭亡\n

    \n

    \n 孙权去世后,东吴的政治开始混乱。孙亮的继位引发了内部的权力斗争,诸葛恪、孙峻、孙綝等人先后专权,政治腐败严重。\n

    \n

    \n 孙皓继位后,实行暴政,残害忠良,荒淫无道。他多次发动对晋的战争,但都以失败告终。天纪四年(公元280年),晋军南下,东吴灭亡。\n

    \n

    \n 从孙权称王到东吴灭亡,东吴历时五十九年。\n

    \n

    \n 东吴的灭亡标志着三国时代的结束。晋朝完成了对全国的统一,结束了自黄巾起义以来近一百年的分裂局面。\n

    \n

    \n 第九章 诸葛亮北伐与三国相持\n

    \n

    \n 9.1 诸葛亮北伐的背景\n

    \n

    \n 蜀汉建立后,诸葛亮制定了“北伐中原,复兴汉室”的战略方针。他认为,如果不主动出击,只会导致蜀汉与曹魏的差距越来越大,最终会被消灭。只有通过北伐,才能实现刘备“兴复汉室”的遗愿。\n

    \n

    \n 从客观条件看,北伐也具有一定的可行性。\n

    \n \n

    \n 曹魏的主要敌人是蜀汉和东吴,需要两面作战。而蜀汉有汉中这个战略要地,可以威胁关中地区。诸葛亮认为,如果能够占领关中地区,就可以进而统一天下。\n

    \n

    \n 当然,北伐也面临着巨大的困难。蜀汉人口稀少,国力有限,难以支撑长期战争。从益州到关中道路险阻,运输困难。曹魏实力强大,不是轻易能够击败的。\n

    \n

    \n 9.2 第一次北伐\n

    \n

    \n 建兴六年(公元228年),诸葛亮发动了第一次北伐。他率军出祁山,攻击曹魏的陇右地区。蜀军进展顺利,天水、南安、安定三郡相继投降。\n

    \n

    \n 曹魏方面非常震惊,派出张郃率军抵御。诸葛亮派马谡驻守街亭,但马谡违反诸葛亮的部署,被张郃击败。街亭失守后,诸葛亮被迫退兵,第一次北伐失败。\n

    \n

    \n 第一次北伐虽然失败,但诸葛亮展示了自己的军事才能,也锻炼了蜀军。诸葛亮挥泪斩马谡,表明他执法严明,不徇私情。\n

    \n

    \n 9.3 后续北伐\n

    \n

    \n 建兴六年冬天,诸葛亮发动第二次北伐,攻击陈仓。但由于陈仓防守严密,蜀军久攻不下,最终退兵。建兴七年(公元229年),诸葛亮发动第三次北伐,攻占武都、阴平二郡。\n

    \n

    \n 建兴九年(公元231年),诸葛亮发动第四次北伐,包围祁山。司马懿率军抵御,但采取了守势,不与蜀军决战。诸葛亮因为粮尽退兵,\n

    \n

    \n 在退兵途中射杀了魏将张郃。\n

    \n

    \n 建兴十二年(公元234年),诸葛亮发动第五次北伐,这是他最后一次北伐。诸葛亮率军出斜谷,与司马懿相持于五丈原。诸葛亮积劳成疾,于同年八月病逝于五丈原,终年五十四岁。\n

    \n

    \n 9.4 姜维北伐\n

    \n

    \n 诸葛亮去世后,姜维继承了北伐的事业。姜维是蜀汉后期的军事统帅,他继承了诸葛亮的遗志,多次率军北伐。\n

    \n

    \n 从延熙十六年(公元253年)开始,姜维多次发动北伐战争,但胜少败多。\n

    \n \n

    \n 蜀汉国力有限,无法支撑长期的战争。姜维的北伐虽然没有取得重大胜利,但也牵制了曹魏的兵力。\n

    \n

    \n 景耀六年(公元263年),曹魏发动灭蜀之战,钟会、邓艾率军进攻蜀汉。姜维在剑阁抵御钟会,但邓艾偷渡阴平,逼近成都。后主刘禅投降,蜀汉灭亡。姜维试图复国,但最终失败被杀。\n

    \n

    \n 9.5 三国相持时期的战争\n

    \n

    \n 诸葛亮去世后,三国进入了相持阶段。各方虽然时有战争,但都没有能力消灭对方。这种相持局面持续了四十多年。\n

    \n

    \n 在东线,曹魏与东吴之间战争不断。曹爽曾率军伐吴,但失败而归。司马懿父子也多次进攻东吴,但都没有取得决定性胜利。\n

    \n

    \n 在西线,蜀汉的北伐虽然失败,但有效地牵制了曹魏的兵力。曹魏需要部署大量军队防守西部边境,消耗了大量资源。\n

    \n

    \n 9.6 三国相持时期的政治\n

    \n

    \n 三国相持时期,各国内部都出现了一些政治问题。蜀汉方面,诸葛亮去世后,蒋琬、费祎先后执政,政治较为稳定。但后主刘禅宠信黄皓,朝廷政治开始腐败。\n

    \n

    \n 曹魏方面,司马氏逐渐掌控了朝政。司马懿、司马师、司马昭父子三人相继执掌大权,曹魏皇帝成为傀儡。曹魏后期的政治腐败严重,阶级矛盾尖锐。\n

    \n

    \n 东吴方面,孙权晚年立储问题处理不当,引发了严重的宫廷斗争。\n

    \n

    \n 孙皓继位后,政治更加腐败,民不聊生。这为东吴的灭亡埋下了伏笔。\n

    \n

    \n 9.7 三国相持时期的经济\n

    \n

    \n 三国相持时期,各国都比较注重发展经济。曹魏继续推行屯田制,中原地区的农业得到恢复。司马氏掌权后,实行了一些改革,促进了经济发展。\n

    \n

    \n 蜀汉在诸葛亮的治理下,经济有所发展。但蜀汉人口较少,国力有限,难以支撑长期的战争消耗。后期连年北伐,加重了民众的负担。\n

    \n

    \n 东吴的经济发展较快,江南地区的农业和商业都有较大发展。但东吴的赋税较重,民众负担较大,影响了经济的可持续发展。\n

    \n \n

    \n 第十章 三国归晋与历史终结\n

    \n

    \n 10.1 晋朝的建立\n

    \n

    \n 司马懿发动高平陵政变后,司马氏逐渐掌控了曹魏的朝政大权。司马懿、司马师、司马昭父子三人相继执掌朝政,为代魏称帝做好了准备。\n

    \n

    \n 咸熙二年(公元265年),司马昭去世,其子司马炎继为晋王。同年十二月,司马炎代魏称帝,建立晋朝,是为晋武帝。晋朝定都洛阳,改元泰始。\n

    \n

    \n 晋武帝称帝后,追尊祖父司马懿为晋宣帝,父亲司马昭为晋文帝,伯父司马师为晋景帝。晋朝的建立,标志着三国时代的结束和中国历史上的西晋时期开始。\n

    \n

    \n 10.2 晋灭蜀汉\n

    \n

    \n 晋朝建立后,晋武帝开始准备统一天下。当时蜀汉已经衰落,后主刘禅宠信黄皓,朝廷政治腐败。姜维虽然多次北伐,但无功而返,国力消耗严重。\n

    \n

    \n 景耀六年(公元263年),晋武帝派钟会、邓艾率军伐蜀。钟会率主力进攻汉中,牵制姜维;邓艾率军偷渡阴平,直取成都。\n

    \n

    \n 姜维在剑阁抵御钟会,互有胜负。但邓艾偷渡阴平成功后,刘禅惊慌失措,不战而降。蜀汉灭亡,历时四十三年。姜维试图复国,但最终失败被杀。\n

    \n

    \n 10.3 晋灭东吴\n

    \n

    \n 蜀汉灭亡后,晋朝开始了灭吴的准备。晋武帝采纳羊祜的建议,积极准备灭吴战争。羊祜镇守荆州,与东吴名将陆抗相持,互有胜负。\n

    \n

    \n 羊祜去世后,杜预、张华等人继续推动灭吴战争。杜预镇守荆州,积极训练水军,准备渡江作战。天纪四年(公元280年),晋武帝下诏灭吴,派杜预、王浑率军进攻。\n

    \n

    \n 晋军分兵多路,全面进攻。王浑率军渡过长江,击败东吴主力。杜预率军攻占江陵,张悌率军渡江攻入建业。孙皓见大势已去,投降晋朝。东吴灭亡,历时五十九年。\n

    \n \n

    \n 10.4 三国归晋的历史意义\n

    \n

    \n 三国归晋,结束了自黄巾起义以来近一百年的分裂局面,实现了中国的统一。这是中国历史上又一次重要的大统一,对中国社会的发展产生了深远影响。\n

    \n

    \n 晋朝的统一,为社会经济的恢复和发展创造了条件。战乱结束,人民得以休养生息,中原地区和江南地区都得到了开发。晋朝初期出现了“太康盛世”,经济繁荣,社会安定。\n

    \n

    \n 然而,晋朝的统一并没有持续太久。晋武帝死后,发生了“八王之乱”,中原地区陷入混乱。随后是“五胡乱华”,西晋灭亡,中国再次陷入分裂。\n

    \n

    \n 10.5 三国时期的历史遗产\n

    \n

    \n 三国时期虽然只有短短的四十多年,但留下了丰富的历史遗产。在政治制度方面,三国时期的选官制度、法律制度等对后世产生了影响。曹魏的九品中正制成为魏晋南北朝时期的主要选官制度。\n

    \n

    \n 在文学艺术方面,三国时期出现了许多杰出的人才。曹操、曹植父子是文学史上重要的人物,“建安风骨”成为中国文学的典范。诸葛亮的智慧成为后世推崇的楷模。\n

    \n

    \n 在军事方面,三国时期的许多战例成为军事教材。官渡之战、赤壁之战、夷陵之战等都是经典的以少胜多的战例,为后世军事家所借鉴。\n

    \n

    \n 10.6 三国历史的后世影响\n

    \n

    \n 三国历史对后世产生了深远影响。《三国演义》是中国的四大名著之一,塑造了许多深入人心的人物形象。诸葛亮、关羽、曹操、周瑜等人物成为家喻户晓的历史人物。\n

    \n

    \n 三国的故事在民间广为流传,形成了丰富的文化传统。桃园结义、借东风、空城计等故事成为人们茶余饭后的谈资。三国文化已经成为中国传统文化的重要组成部分。\n

    \n

    \n 在海外,三国文化也有广泛影响。日本、韩国、东南亚等地区都有三国故事的传播。三国文化成为中国软实力的重要组成部分,在世界范围内产生了影响。\n

    \n \n

    \n 附录一 三国主要人物简介\n

    \n

    \n 魏国主要人物\n

    \n

    \n 曹操(155年-220年),字孟德,沛国谯县人。三国时期最杰出的政治家、军事家、文学家。曹操挟天子以令诸侯,统一北方,为曹魏政权的建立奠定了基础。曹操还是杰出的文学家,与儿子曹丕、曹植并称“三曹”。\n

    \n

    \n 曹丕(187年-226年),字子桓,曹操次子。220年代汉称帝,建立魏国,是为魏文帝。曹丕推行九品中正制,确立了魏晋南北朝时期的选官制度。\n

    \n

    \n 曹叡(204年-239年),字元仲,曹丕之子。魏明帝,在位期间多次击退蜀汉和东吴的进攻,保卫了魏国的安全。\n

    \n

    \n 司马懿(179年-251年),字仲达,河内温县人。三国时期最重要的政治家、军事家之一,晋朝的奠基人。司马懿辅佐曹魏四代,抵御诸葛亮北伐,平定辽东,最终掌握朝政大权。\n

    \n

    \n 张辽(169年-222年),字文远,雁门马邑人。曹操麾下著名将领,合肥之战中大败孙权,威震江东。\n

    \n

    \n 郭嘉(170年-207年),字奉孝,颍川阳翟人。曹操最重要的谋士之一,英年早逝,曹操曾感叹“郭奉孝在,不使孤至此”。\n

    \n

    \n 蜀汉主要人物\n

    \n

    \n 刘备(161年-223年),字玄德,涿郡涿县人。汉景帝之后,\n

    \n

    \n 三国时期蜀汉政权的建立者。刘备以仁德著称,三顾茅庐请诸葛亮,形成三国鼎立的局面。\n

    \n

    \n 诸葛亮(181年-234年),字孔明,琅琊阳都人。三国时期最杰出的政治家、军事家。诸葛亮辅佐刘备建立蜀汉,后又辅佐后主刘禅,实行依法治蜀,多次北伐。诸葛亮被誉为“千古第一相”。\n

    \n

    \n 关羽(162年或160年-220年),字云长,河东解人。刘备的结义兄弟,蜀汉著名将领。关羽忠义无双,被后人尊为“武圣”。\n

    \n

    \n 张飞(165年-221年),字益德,涿郡涿县人。刘备的结义兄弟,蜀汉著名将领。张飞勇猛异常,但性格暴躁。\n

    \n

    \n 赵云(?-229年),字子龙,常山真定人。刘备的护卫,蜀汉著名将领。\n

    \n \n

    \n 赵云英勇善战,多次救主于危难之中。\n

    \n

    \n 姜维(202年-264年),字伯约,天水冀县人。诸葛亮之后的蜀汉军事统帅,继承诸葛亮北伐的事业,但最终失败被杀。\n

    \n

    \n 东吴主要人物\n

    \n

    \n 孙权(182年-252年),字仲谋,吴郡富春人。三国时期东吴政权的建立者,在位五十三年,是三国时期在位时间最长的君主。\n

    \n

    \n 周瑜(175年-210年),字公瑾,庐江舒县人。东吴开国元勋,赤壁之战中击败曹操,奠定东吴基业。\n

    \n

    \n 鲁肃(172年-217年),字子敬,临淮东城人。东吴战略家,主张联合刘备共同抗曹,为东吴制定了正确的战略方针。\n

    \n

    \n 吕蒙(178年-220年),字子明,汝南富陂人。东吴名将,白衣渡江袭取荆州,杀死关羽。\n

    \n

    \n 陆逊(183年-245年),字伯言,吴郡吴县人。东吴后期支柱,火烧连营击败刘备,多次抵御曹魏进攻。\n

    \n

    \n 张昭(156年-236年),字子布,彭城人。东吴重臣,孙策的托孤大臣之一,长期辅佐孙权。\n

    \n

    \n 附录二 三国时期著名战役\n

    \n

    \n 官渡之战\n

    \n

    \n 官渡之战发生在建安五年(公元200年),是曹操与袁绍之间决定北方归属的战争。曹操以少胜多,击败袁绍的十万大军,奠定了统一北方的基础。此战是三国时期最经典的以少胜多的战例之一。\n

    \n

    \n 赤壁之战\n

    \n

    \n 赤壁之战发生在建安十三年(公元208年),是孙刘联军与曹操大军之间的战争。孙刘联军在周瑜的指挥下,采用火攻,大败曹军,奠定了三国鼎立的格局。此战是中国古代军事史上最著名的战例之一。\n

    \n

    \n 夷陵之战\n

    \n

    \n 夷陵之战发生在章武二年(公元222年),是刘备伐吴的战争。\n

    \n \n

    \n 陆逊采用火攻,大败刘备,蜀汉从此一蹶不振。此战与官渡之战、赤壁之战并称为三国三大战役。\n

    \n

    \n 街亭之战\n

    \n

    \n 街亭之战发生在建兴六年(公元228年),是诸葛亮第一次北伐中的关键战役。马谡违反诸葛亮的部署,被张郃击败,导致蜀军被迫退兵。此战成为诸葛亮挥泪斩马谡的典故。\n

    \n

    \n 合肥之战\n

    \n

    \n 合肥之战发生在建安二十年(公元215年),是孙权进攻曹操的战争。张辽以八百精兵大败孙权十万大军,差点活捉孙权。此战奠定了张辽“威震江东”的威名。\n

    \n

    \n 石亭之战\n

    \n

    \n 石亭之战发生在黄武七年(公元228年),是东吴与曹魏之间的战争。陆逊率军大败曹休,斩获万余人。此战巩固了东吴在江东的统治。\n

    \n

    \n 附录三 三国疆域与行政区划\n

    \n

    \n 魏国疆域\n

    \n

    \n 魏国占据北方中原地区,包括司隶、豫州、兖州、徐州、青州、冀州、幽州、并州、凉州、雍州等地区。魏国定都洛阳,后来迁都许昌,再迁回洛阳。魏国是三国中疆域最大、人口最多的政权。\n

    \n

    \n 蜀汉疆域\n

    \n

    \n 蜀汉占据益州和荆州部分地区,包括益州全境以及荆州的武陵、零陵、桂阳、长沙等郡。蜀汉定都成都。蜀汉是三国中疆域最小、人口最少的政权,但地势险要,易守难攻。\n

    \n

    \n 东吴疆域\n

    \n

    \n 东吴占据江东六郡以及荆州、扬州、交州等地,包括今江苏、浙江、安徽、江西、福建、广东、广西、海南以及越南北部等地区。东吴定都建业(今江苏南京)。东吴是三国中海岸线最长的政权,航海业发达。\n

    \n

    \n 三国行政区划比较\n

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n 政权\n \n 都城\n \n 主要州郡\n \n 人口(估计)\n
    \n 曹魏\n \n 洛阳/许昌\n \n 司隶、豫州、兖州等\n \n 约400万\n
    \n 蜀汉\n \n 成都\n \n 益州、荆州\n \n 约100万\n
    \n 东吴\n \n 建业\n \n 扬州、交州、荆州\n \n 约200万\n
    \n

    \n 三国时期的地理概念\n

    \n

    \n 三国时期的“州”与现代的省份概念不同,是一个较大的行政区划。三国时期的州数量比东汉时期有所减少,但每个州的管辖范围仍然很大。\n

    \n

    \n 三国时期,中原地区是经济最发达的地区,人口密集。江南地区虽然开发较晚,但在东吴的治理下,经济有了较大发展。西南地区地形复杂,交通不便,开发程度较低。\n

    \n

    \n 结语\n

    \n

    \n 三国时期是中国历史上一个非常重要的时期,从黄巾起义(184年)到东吴灭亡(280年),历时近百年。这段历史充满了英雄人物、经典战例和传奇故事,对后世产生了深远影响。\n

    \n

    \n 曹操、刘备、孙权三大枭雄在乱世中崛起各自建立了政权,形成了三国鼎立的局面。他们之间的政治斗争、军事较量、外交斡旋,构成了三国历史的主要内容。\n

    \n

    \n 诸葛亮、关羽、周瑜、司马懿等历史人物以其卓越的才能和高尚的品格,\n

    \n

    \n 成为后世楷模。他们的故事被后人传颂不衰,成为中国传统文化的重要组成部分。\n

    \n

    \n 《三国演义》是中国的四大名著之一,它以历史为素材,融入民间传说和文学创造,塑造了许多深入人心的人物形象。诸葛亮的多智近妖、关羽的忠义无双、曹操的奸雄形象,都对大众认知产生了深远影响。\n

    \n

    \n 三国历史虽然已经过去了一千多年,但它的影响仍在继续。三国文化已经成为中国文化的的重要组成部分,在文学、艺术、游戏、影视等各个领域都有广泛的应用。三国的故事将继续传承下去,影响着一代又一代的中国人。\n

    \n \n

    \n 回顾三国历史,我们可以看到:在乱世中,人才是决定性的因素;\n

    \n

    \n 在竞争中,战略眼光至关重要;在治理中,民心向背决定了政权的兴衰。这些历史经验对于今天仍然具有借鉴意义。\n

    \n

    \n —— 完 ——\n

    \n \n \n'},loading:{type:Boolean,default:!1},errorMessage:{type:String,default:""},filename:{type:String,default:""}},emits:["close","refresh"],data:()=>({currentSlideIndex:0,pageTurnDirection:1,slides:[],isParsing:!1,parseErrorMessage:"",parsedHeadContent:"",slideHtmlCache:{},_vietualData:{success:!0,message:"提取成功",html_content:'\n \n \n \n
    \n
    \n
    \n

    \n 三國歷史\n

    \n

    \n 從黃巾起義到三分歸晉\n

    \n
    \n
    \n

    \n 東漢末年 • 群雄並起 • 三分天下\n

    \n

    \n 公元184年 — 280年\n

    \n
    \n
    \n
    \n \n
    \n

    \n 目 录\n

    \n
      \n
    • \n 第一章 东汉末年与黄巾起义3\n
    • \n
    • \n 第二章 群雄割据与董卓乱政5\n
    • \n
    • \n 第三章 曹操崛起与官渡之战8\n
    • \n
    • \n 第四章 孙刘联盟与赤壁之战12\n
    • \n
    • \n 第五章 三分天下格局的形成16\n
    • \n
    • \n 第六章 蜀汉政权的建立与发展20\n
    • \n
    • \n 第七章 曹魏政权的巩固与传承24\n
    • \n
    • \n 第八章 东吴政权的繁荣与衰落28\n
    • \n
    • \n 第九章 诸葛亮北伐与三国相持32\n
    • \n
    • \n 第十章 三国归晋与历史终结37\n
    • \n
    • \n 附录 三国主要人物简介42\n
    • \n
    • \n 附录 三国时期著名战役45\n
    • \n
    • \n 附录 三国疆域与行政区划48\n
    • \n
    \n
    \n ',image_base_url:"/api/aippt/三"},touchStartX:0,touchStartY:0,touchEndX:0,touchEndY:0,slideAccents:["#2563eb","#23b9ad","#d7b56b","#4a93b8"],parseJobId:0,parseTimer:null,parseIdleTimer:null}),computed:{displayFilename(){return(this.filename||"未命名 AIPPT").replace(/\\/g,"/").split("/").pop()},totalSlides(){return Math.max(this.slides.length,1)},currentSlide(){return this.slides[this.currentSlideIndex]||this.slides[0]||null},currentSlideHtml(){if(!this.currentSlide)return"";const e=this.currentSlide.id||"slide-1";return this.slideHtmlCache[e]||(this.slideHtmlCache[e]=this.getSlideHtml(this.currentSlide)),this.slideHtmlCache[e]},currentPageNumber(){return Math.min(this.currentSlideIndex+1,this.totalSlides)},currentPageLabel(){return String(this.currentPageNumber).padStart(2,"0")},totalPageLabel(){return String(this.totalSlides).padStart(2,"0")},currentSlideTitle(){var e;return(null==(e=this.currentSlide)?void 0:e.title)||this.displayFilename||"AIPPT"},frameKey(){var e;return`${(null==(e=this.currentSlide)?void 0:e.id)||"empty"}-${this.pageTurnDirection}`},canPresent(){return!(!this.htmlContent||this.loading||this.errorMessage||this.isParsing||!this.currentSlideHtml)},canSwipe(){return this.slides.length>1},swipeHintText:()=>"← 左右滑动翻页 →",showEmptyState(){return!this.canPresent},emptyTitle(){return this.errorMessage?"AIPPT 加载失败":this.loading?"正在提取 AIPPT":this.isParsing?"正在准备第一页":this.parseErrorMessage?"AIPPT 解析失败":"暂无 AIPPT 内容"},emptyDescription(){return this.errorMessage?this.errorMessage:this.loading?"正在读取演示文件...":this.isParsing?"正在解析 PPT 内容...":this.parseErrorMessage?this.parseErrorMessage:"打开 .aippt 文件后会在这里显示预览。"},emptyIconText(){return this.errorMessage||this.parseErrorMessage?"⚠":this.loading||this.isParsing?"⏳":"📄"},slideStatusText(){var e;return this.errorMessage?"加载失败":this.loading?"正在提取...":this.isParsing?"正在准备...":this.htmlContent?(null==(e=this.currentSlide)?void 0:e.fullDocument)?"单页预览":`已识别 ${this.slides.length} 页`:"等待打开文件"}},watch:{visible(e){e&&this.$nextTick((()=>{this.loadVirtualData()}))},htmlContent:{immediate:!0,handler(e){e&&this.scheduleParseSlides(e)}},slides(){this.currentSlideIndex>this.slides.length-1&&(this.currentSlideIndex=0)}},mounted(){this.loadVirtualData()},beforeDestroy(){this.clearSchedules()},methods:{loadVirtualData(){!this.htmlContent&&this._vietualData.html_content&&this.scheduleParseSlides(this._vietualData.html_content)},handleTouchStart(e){const t=e.touches[0];this.touchStartX=t.clientX,this.touchStartY=t.clientY},handleTouchEnd(e){const t=e.changedTouches[0];this.touchEndX=t.clientX,this.touchEndY=t.clientY,this.handleSwipe()},handleSwipe(){const e=this.touchEndX-this.touchStartX,t=this.touchEndY-this.touchStartY;Math.abs(e)0?this.prevSlide():this.nextSlide())},getHeadContent(e=""){const t=String(e).match(/]*>([\s\S]*?)<\/head>/i);return t?t[1]:""},getBodyContent(e=""){const t=String(e).match(/]*>([\s\S]*?)<\/body>/i);return t?t[1]:e},getNodeTitle(e,t){const a=e.match(/]*>([\s\S]*?)<\/h[1-6]>/i);if(a){return a[1].replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim().slice(0,36)}return`第 ${t+1} 页`},isMeaningfulSlide:e=>e.replace(/<[^>]+>/g,"").replace(/\s+/g,"").length>8||/]*\/?>/gi;if(0===(t.match(n)||[]).length){const a=t.split(/(?=e.trim()));return a.length>1?a.map(((t,a)=>({id:`slide-${a+1}`,title:this.getNodeTitle(t,a),html:`
    ${t}
    `,headContent:e,fullDocument:!1}))):[{id:"slide-1",title:this.displayFilename,html:`
    ${t}
    `,headContent:e,fullDocument:!0}]}const l=t.split(n).filter((e=>e.trim())).map(((t,a)=>({id:`slide-${a+1}`,title:this.getNodeTitle(t,a),html:`
    ${t.trim()}
    `,headContent:e,fullDocument:!1}))),o=l.filter((e=>this.isMeaningfulSlide(e.html)));return o.length>0?o:l}catch(n){return t("warn","at pages/text/IntuitiveAipptViewer.vue:346","[AIPPT] slide parse failed:",n),this.parseErrorMessage=n.message||"AIPPT 解析失败",[{id:"slide-1",title:this.displayFilename,html:`
    ${a}
    `,headContent:this.getHeadContent(a),fullDocument:!0}]}},getSlideHtml(e){if(!e)return"";return`\n\t\t\t\t\t
    \n\t\t\t\t\t\t${e.headContent?``:""}\n\t\t\t\t\t\t${e.html||""}\n\t\t\t\t\t
    \n\t\t\t\t`},clearSchedules(){this.parseTimer&&(clearTimeout(this.parseTimer),this.parseTimer=null),this.parseIdleTimer&&(clearTimeout(this.parseIdleTimer),this.parseIdleTimer=null)},scheduleParseSlides(e=""){const a=String(e||""),n=++this.parseJobId;if(this.clearSchedules(),this.slideHtmlCache={},this.currentSlideIndex=0,this.parseErrorMessage="",!a.trim())return this.isParsing=!1,this.parsedHeadContent="",void(this.slides=[]);this.isParsing=!0,this.parsedHeadContent=this.getHeadContent(a),this.slides=[],this.parseTimer=setTimeout((()=>{var e;if(n===this.parseJobId)try{const t=this.parseSlides(a);if(n!==this.parseJobId)return;this.slides=t,this.parsedHeadContent=(null==(e=t[0])?void 0:e.headContent)||this.parsedHeadContent}catch(l){t("error","at pages/text/IntuitiveAipptViewer.vue:409","[AIPPT] parse error:",l)}finally{n===this.parseJobId&&(this.isParsing=!1)}}),100)},pulseStage(){this.pageTurnDirection=this.pageTurnDirection>=0?1:-1},goToSlide(e){if(!this.canPresent)return;const t=Math.max(0,Math.min(Number(e)||0,this.slides.length-1));t!==this.currentSlideIndex&&(this.pageTurnDirection=t>=this.currentSlideIndex?1:-1,this.currentSlideIndex=t,this.pulseStage())},prevSlide(){this.goToSlide(this.currentSlideIndex-1)},nextSlide(){this.goToSlide(this.currentSlideIndex+1)},onRefresh(){this.$emit("refresh")},onClose(){this.$emit("close")},exposedNextSlide(){this.nextSlide()},exposedPrevSlide(){this.prevSlide()}}},[["render",function(t,a,n,l,o,s){return e.withDirectives((e.openBlock(),e.createElementBlock("view",{class:"ia-root",onTouchstart:a[4]||(a[4]=(...e)=>s.handleTouchStart&&s.handleTouchStart(...e)),onTouchend:a[5]||(a[5]=(...e)=>s.handleTouchEnd&&s.handleTouchEnd(...e))},[e.createElementVNode("view",{class:"ia-toolbar"},[e.createElementVNode("view",{class:"ia-title"},[e.createElementVNode("text",{class:"ia-badge"},"PPT"),e.createElementVNode("view",{class:"ia-title-copy"},[e.createElementVNode("text",{class:"ia-title-strong"},e.toDisplayString(s.displayFilename),1),e.createElementVNode("text",{class:"ia-title-em"},e.toDisplayString(s.slideStatusText),1)])]),e.createElementVNode("view",{class:"ia-actions"},[e.createElementVNode("view",{class:"ia-icon-btn",onClick:a[0]||(a[0]=(...e)=>s.onRefresh&&s.onRefresh(...e))},[e.createElementVNode("text",{class:"ia-icon"},"↻")]),e.createElementVNode("view",{class:"ia-icon-btn ia-close-btn",onClick:a[1]||(a[1]=(...e)=>s.onClose&&s.onClose(...e))},[e.createElementVNode("text",{class:"ia-icon"},"✕")])])]),e.createElementVNode("view",{class:"ia-canvas"},[s.showEmptyState?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["ia-empty",{"is-loading":n.loading||o.isParsing,"is-error":!!n.errorMessage}])},[e.createElementVNode("text",{class:"ia-empty-icon"},e.toDisplayString(s.emptyIconText),1),e.createElementVNode("text",{class:"ia-empty-title"},e.toDisplayString(s.emptyTitle),1),e.createElementVNode("text",{class:"ia-empty-desc"},e.toDisplayString(s.emptyDescription),1)],2)):(e.openBlock(),e.createElementBlock("view",{key:1,class:"ia-slide-area"},[(e.openBlock(),e.createElementBlock("view",{class:"ia-frame-shell",key:s.frameKey},[e.createElementVNode("scroll-view",{class:"ia-frame-scroll","scroll-y":"","show-scrollbar":!1},[e.createElementVNode("view",{class:"ia-frame",innerHTML:s.currentSlideHtml},null,8,["innerHTML"])])])),s.canPresent&&o.slides.length>1?(e.openBlock(),e.createElementBlock("scroll-view",{key:0,class:"ia-thumb-strip","scroll-x":"","show-scrollbar":!1,"scroll-into-view":"thumb-"+o.currentSlideIndex},[e.createElementVNode("view",{class:"ia-thumb-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.slides,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:t.id,id:"thumb-"+a,class:e.normalizeClass(["ia-thumb-item",{active:a===o.currentSlideIndex}]),onClick:e=>s.goToSlide(a)},[e.createElementVNode("text",{class:"ia-thumb-num"},e.toDisplayString(String(a+1).padStart(2,"0")),1),e.createElementVNode("text",{class:"ia-thumb-title"},e.toDisplayString(t.title),1)],10,["id","onClick"])))),128))])],8,["scroll-into-view"])):e.createCommentVNode("",!0)]))]),s.canPresent?(e.openBlock(),e.createElementBlock("view",{key:0,class:"ia-pager"},[e.createElementVNode("view",{class:"ia-pager-shell"},[e.createElementVNode("view",{class:e.normalizeClass(["ia-page-btn",{disabled:o.currentSlideIndex<=0}]),onClick:a[2]||(a[2]=(...e)=>s.prevSlide&&s.prevSlide(...e))},[e.createElementVNode("text",{class:"ia-nav-icon"},"❮")],2),e.createElementVNode("view",{class:"ia-page-count"},[e.createElementVNode("text",{class:"ia-current-page"},e.toDisplayString(s.currentPageLabel),1),e.createElementVNode("text",{class:"ia-page-divider"},"/"),e.createElementVNode("text",{class:"ia-total-page"},e.toDisplayString(s.totalPageLabel),1)]),e.createElementVNode("view",{class:e.normalizeClass(["ia-page-btn ia-next-btn",{disabled:o.currentSlideIndex>=s.totalSlides-1}]),onClick:a[3]||(a[3]=(...e)=>s.nextSlide&&s.nextSlide(...e))},[e.createElementVNode("text",{class:"ia-nav-icon"},"❯")],2)])])):e.createCommentVNode("",!0)],544)),[[e.vShow,n.visible]])}],["__scopeId","data-v-ed3c3ae8"]]);__definePage("pages/Login/Login",N),__definePage("pages/Chat/Chat",ge),__definePage("pages/WorkSpace/WorkSpace",fe),__definePage("pages/UserProfileModal/UserProfileModal",we),__definePage("pages/ContactPages/ContactPages",ke),__definePage("pages/WorkSpace/TemplateSpace/TemplateSpace",ye),__definePage("pages/CloudDatabase/CloudDatabase",Ee),__definePage("pages/CloudDbDetail/CloudDbDetail",Ce),__definePage("pages/text/text",Ne),__definePage("pages/text/IntuitiveAipptViewer",Ve);const be={onLaunch:function(){t("log","at App.vue:4","App Launch")},onShow:function(){t("log","at App.vue:7","App Show")},onHide:function(){t("log","at App.vue:10","App Hide")}};const{app:_e,Vuex:Be,Pinia:Se}=function(){const t=e.createVueApp(be),a=function(){const t=e.effectScope(!0),a=t.run((()=>e.ref({})));let n=[],l=[];const o=e.markRaw({install(e){L(o),o._a=e,e.provide(z,o),e.config.globalProperties.$pinia=o,l.forEach((e=>n.push(e))),l=[]},use(e){return this._a?n.push(e):l.push(e),this},_p:n,_a:null,_e:t,_s:new Map,state:a});return o}();return t.use(a),{app:t,pinia:a}}();uni.Vuex=Be,uni.Pinia=Se,_e.provide("__globalStyles",__uniConfig.styles),_e._component.mpType="app",_e._component.render=()=>{},_e.mount("#app")}(Vue); +let F;const L=e=>F=e,O=Symbol();function M(e){return e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&"function"!=typeof e.toJSON}var $,R;(R=$||($={})).direct="direct",R.patchObject="patch object",R.patchFunction="patch function";const U=()=>{};function W(t,a,n,s=U){t.push(a);const o=()=>{const e=t.indexOf(a);e>-1&&(t.splice(e,1),s())};return!n&&e.getCurrentScope()&&e.onScopeDispose(o),o}function q(e,...t){e.slice().forEach((e=>{e(...t)}))}const H=e=>e();function Z(t,a){t instanceof Map&&a instanceof Map&&a.forEach(((e,a)=>t.set(a,e))),t instanceof Set&&a instanceof Set&&a.forEach(t.add,t);for(const n in a){if(!a.hasOwnProperty(n))continue;const s=a[n],o=t[n];M(o)&&M(s)&&t.hasOwnProperty(n)&&!e.isRef(s)&&!e.isReactive(s)?t[n]=Z(o,s):t[n]=s}return t}const J=Symbol();const{assign:X}=Object;function Y(t,a,n={},s,o,i){let r;const l=X({actions:{}},n),c={deep:!0};let u,d,p,h=[],m=[];const f=s.state.value[t];let v;function g(a){let n;u=d=!1,"function"==typeof a?(a(s.state.value[t]),n={type:$.patchFunction,storeId:t,events:p}):(Z(s.state.value[t],a),n={type:$.patchObject,payload:a,storeId:t,events:p});const o=v=Symbol();e.nextTick().then((()=>{v===o&&(u=!0)})),d=!0,q(h,n,s.state.value[t])}i||f||(s.state.value[t]={}),e.ref({});const w=i?function(){const{state:e}=n,t=e?e():{};this.$patch((e=>{X(e,t)}))}:U;function y(e,a){return function(){L(s);const n=Array.from(arguments),o=[],i=[];function r(e){o.push(e)}function l(e){i.push(e)}let c;q(m,{args:n,name:e,store:_,after:r,onError:l});try{c=a.apply(this&&this.$id===t?this:_,n)}catch(u){throw q(i,u),u}return c instanceof Promise?c.then((e=>(q(o,e),e))).catch((e=>(q(i,e),Promise.reject(e)))):(q(o,c),c)}}const k={_p:s,$id:t,$onAction:W.bind(null,m),$patch:g,$reset:w,$subscribe(a,n={}){const o=W(h,a,n.detached,(()=>i())),i=r.run((()=>e.watch((()=>s.state.value[t]),(e=>{("sync"===n.flush?d:u)&&a({storeId:t,type:$.direct,events:p},e)}),X({},c,n))));return o},$dispose:function(){r.stop(),h=[],m=[],s._s.delete(t)}},_=e.reactive(k);s._s.set(t,_);const b=(s._a&&s._a.runWithContext||H)((()=>s._e.run((()=>(r=e.effectScope()).run(a)))));for(const N in b){const a=b[N];if(e.isRef(a)&&(C=a,!e.isRef(C)||!C.effect)||e.isReactive(a))i||(!f||M(E=a)&&E.hasOwnProperty(J)||(e.isRef(a)?a.value=f[N]:Z(a,f[N])),s.state.value[t][N]=a);else if("function"==typeof a){const e=y(N,a);b[N]=e,l.actions[N]=a}}var E,C;return X(_,b),X(e.toRaw(_),b),Object.defineProperty(_,"$state",{get:()=>s.state.value[t],set:e=>{g((t=>{X(t,e)}))}}),s._p.forEach((e=>{X(_,r.run((()=>e({store:_,app:s._a,pinia:s,options:l}))))})),f&&i&&n.hydrate&&n.hydrate(_.$state,f),u=!0,d=!0,_}function G(t,a,n){let s,o;const i="function"==typeof a;function r(t,n){const r=e.hasInjectionContext();(t=t||(r?e.inject(O,null):null))&&L(t),(t=F)._s.has(s)||(i?Y(s,a,o,t):function(t,a,n,s){const{state:o,actions:i,getters:r}=a,l=n.state.value[t];let c;c=Y(t,(function(){l||(n.state.value[t]=o?o():{});const a=e.toRefs(n.state.value[t]);return X(a,i,Object.keys(r||{}).reduce(((a,s)=>(a[s]=e.markRaw(e.computed((()=>{L(n);const e=n._s.get(t);return r[s].call(e,e)}))),a)),{}))}),a,n,0,!0)}(s,o,t));return t._s.get(s)}return"string"==typeof t?(s=t,o=i?n:a):(o=t,s=t.id),r.$id=s,r}const K=new class{constructor(){this.ws=null,this.url="ws://cloud.yuxindazhineng.com/cloud_api/phone/app_ws",this.options={token:"",conversationId:"",onMessage:null,onError:null,onReconnect:null,onOpen:null,onClose:null},this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=3e3,this.reconnectTimer=null,this.heartbeatTimer=null,this.isManualClose=!1}connect(e={}){this.options={...this.options,...e},this.isManualClose=!1,this.ws&&this.close();try{this.ws=uni.connectSocket({url:this.url,success:()=>{t("log","at utils/socket.js:44","WebSocket 连接请求已发送")},fail:e=>{t("error","at utils/socket.js:47","WebSocket 连接失败:",e),this.handleError(e)}}),this.initEventHandlers()}catch(a){this.handleError(a)}}initEventHandlers(){this.ws&&(this.ws.onOpen((e=>{var a,n,s,o;t("log","at utils/socket.js:74","WebSocket 已连接"),this.reconnectAttempts>0&&(null==(n=(a=this.options).onReconnect)||n.call(a)),null==(o=(s=this.options).onOpen)||o.call(s,e),this.reconnectAttempts=0})),this.ws.onMessage((e=>{try{const a=JSON.parse(e.data);t("log","at utils/socket.js:87","收到了返回消息:",a),this.handleMessage(a)}catch(a){t("error","at utils/socket.js:91","消息解析失败:",a),uni.setStorageSync("currentSessionId",e.data.task_call_id)}})),this.ws.onError((e=>{t("error","at utils/socket.js:96","WebSocket 错误:",e),this.handleError(e)})),this.ws.onClose((e=>{var a,n;t("log","at utils/socket.js:100","WebSocket 已关闭:",e.code,e.reason),null==(n=(a=this.options).onClose)||n.call(a,e),this.stopHeartbeat(),!this.isManualClose&&this.reconnectAttempts{if(!this.isConnected())return void n(new Error("WebSocket 未连接"));const s=JSON.stringify(e);t("log","at utils/socket.js:199","发送的消息是:",s),this.ws.send({data:s,success:()=>a(),fail:e=>{t("error","at utils/socket.js:207","发送消息失败:",e),n(e)}})}))}reconnect(){this.reconnectTimer||(this.reconnectAttempts++,t("log","at utils/socket.js:233",`尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),this.reconnectTimer=setTimeout((()=>{this.reconnectTimer=null,this.isManualClose||this.connect(this.options)}),this.reconnectDelay*this.reconnectAttempts))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval((()=>{this.isConnected()?this.send({ws_event:"ping"}).catch((()=>{t("log","at utils/socket.js:255","心跳发送失败,准备重连"),this.reconnectTimer||this.isManualClose||this.reconnect()})):!this.isManualClose&&this.reconnectAttemptst("log","at utils/socket.js:341","连接已关闭"),fail:e=>t("error","at utils/socket.js:342","关闭失败:",e)})}catch(e){t("error","at utils/socket.js:350","关闭连接出错:",e)}this.ws=null}this.reconnectAttempts=0}updateOptions(e){this.options={...this.options,...e}}},Q=G("socket",(()=>{const a=e.ref("disconnected"),n=e.ref([]),s=e.ref(""),o=e.ref(!1),i=e.ref({token:"",conversationId:""});e.ref("");const r=e.ref([]),l=e.ref(20),c=e.ref(""),u=e.computed((()=>"connected"===a.value)),d=e.computed((()=>"connecting"===a.value)),p=e.computed((()=>"disconnected"===a.value)),h=e.computed((()=>"error"===a.value)),m=e.computed((()=>n.value[n.value.length-1]));function f(e,a){const n=new Date,s=`${n.getHours().toString().padStart(2,"0")}:${n.getMinutes().toString().padStart(2,"0")}:${n.getSeconds().toString().padStart(2,"0")}`;r.value.push({type:e,connect:a,time:s}),r.value.length>l.value&&(r.value=r.value.slice(-l.value)),t("log","at stores/socket.js:54",`[${e.toUpperCase()}] ${a}`)}function v(){a.value="connected",f("success","连接成功!发送auth"),t("log","at stores/socket.js:117","连接成功!发送auth"),i.value.token,K.send({type:"auth",access_token:i.value.token})}function g(){"disconnected"!==a.value&&(a.value="disconnected",f("warn","连接已断开"))}function w(e){f("error",`Socket错误: ${JSON.stringify(e)}`),a.value="error"}function y(e){a.value="connecting",f("warn",`重连中... (${e}/5)`)}function k(e){f("receive",`收到: ${JSON.stringify(e)}`);const{type:a,conversation_id:n,message_id:i,data:r}=e||{};switch(t("log","at stores/socket.js:162",`[handleMessage] type = ${a}, data = ${JSON.stringify(r)}`),a){case"auth_ok":f("success","连接成功");break;case"auth_fail":o.value=!1,c.value=(null==r?void 0:r.reason)||(null==e?void 0:e.reason)||"unknown",f("error",`认证失败: ${c.value}`);break;case"chat_ack":f("warn","AI成功收到用户发送的消息");break;case"render":f("warn","AI正在回复信息"),function(e){if("exit"===e)return t("log","at stores/socket.js:224","ai结束思考"),void(o.value=!1);if(!e||"object"!=typeof e)return;if("event_callback"===e.cmd&&"中断成功"===e.info)return t("log","at stores/socket.js:234","后端确认中断成功"),f("warn",`中断确认: ${e.info}`),void(o.value=!1);const{role:a,chunk:n,message_role:i,meaasge_uuid:r,message_type:l,task_call_id:c}=e;o.value||!n&&"assistant"!==i||(t("log","at stores/socket.js:251","ai开始思考"),s.value="",o.value=!0);n&&(s.value+=n,o.value||(t("log","at stores/socket.js:260","修改状态为开始思考"),o.value=!0))}(r);break;case"pc_offline":f("warn","PC 端已离线");break;default:f("info",`未知事件类型: ${a}`)}}return{connectionStatus:a,messageString:s,isThinking:o,logs:r,config:i,authFailReason:c,isConnected:u,isConnecting:d,isDisconnected:p,isError:h,lastMessage:m,connect:function(e={}){n.value=[],s.value="",i.value={...i.value,...e},f("info",`准备连接WebSocket。Token:${i.value.token||"未设置"}。ConversationId: ${i.value.conversationId||"未设置"}`),i.value.token&&i.value.conversationId?(a.value="connecting",K.connect({token:i.value.token,conversationId:i.value.conversationId,onMessage:k,onError:w,onOpen:v,onClose:g,onReconnect:y}),setTimeout((()=>{"connecting"===a.value&&(a.value="error",f("error","连接超时(10s)"))}),1e4)):f("error","Token和ConversationId都不能为空")},disconnect:function(){K.close(),a.value="disconnected",f("warn","已主动断开连接")},send:async function(e){if(t("log","at stores/socket.js:98","检查到要发生消息为:",e),!u.value)throw f("error","发送失败: 连接未建立"),new Error("连接未建立");try{return await K.send(e),f("send","string"==typeof e?e:JSON.stringify(e)),!0}catch(a){throw f("error",`发送失败: ${a.message||a}`),a}},addLog:f,clearLogs:function(){r.value=[]},getStatusText:function(){return{connecting:"连接中",connected:"已连接",disconnected:"未连接",error:"连接错误"}[a.value]||"未知状态"}}})),ee="http://chat.yuxindazhineng.com",te=async e=>new Promise(((a,n)=>{uni.request({url:`${ee}/api/chatList/getChatFriend`,method:"POST",header:{"Content-Type":"application/json"},data:{size:500,current:1,sendId:e},success:e=>{var s;if(200===e.statusCode){const o=e.data;if(t("log","at utils/friend-api.js:20","获取到的好友列表消息",o),0===(null==o?void 0:o.code)||"成功"===(null==o?void 0:o.msg)){const e=null==(s=o.data)?void 0:s.records;if(e.length>0){const t=e[0].receiver;t&&uni.setStorageSync("receiverId",t)}a(e)}else{const t=e.data.error||"获取好友列表出错啦";n(t)}}else n(`获取好友列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),ae=async e=>new Promise(((t,a)=>{uni.request({url:`${ee}/api/group/getGroup`,method:"POST",header:{"Content-Type":"application/json"},data:{size:500,current:1,contactId:e},success:e=>{var n;if(200===e.statusCode){const s=e.data;if(0===(null==s?void 0:s.code)||"成功"===(null==s?void 0:s.msg)){const e=null==(n=s.data)?void 0:n.records;t(e)}else{const t=e.data.error||"获取群聊列表出错啦";a(t)}}else a(`获取群聊列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),ne=async(e,a=1)=>(t("log","at utils/friend-api.js:88","请求的好友消息id:",e),new Promise(((t,n)=>{uni.request({url:`${ee}/api/message/list`,method:"POST",data:{sessionId:e,size:100,current:a,beginTime:"",endTime:""},header:{"Content-Type":"application/json"},success:e=>{var a;if(200===e.statusCode){const s=e.data;if(0===s.code){const e=((null==(a=null==s?void 0:s.data)?void 0:a.records)||[]).reverse();t(e)}else{const t=e.data.error||"获取好友消息出错啦";n(t)}}else n(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})}))),se=async(e,a=1)=>(t("log","at utils/friend-api.js:134","请求的群聊消息id:",e),new Promise(((n,s)=>{uni.request({url:`${ee}/api/group/getGroupList`,method:"POST",data:{current:a,size:100,groupId:e,beginTime:"",endTime:""},header:{"Content-Type":"application/json"},success:e=>{var a;if(200===e.statusCode){const o=e.data;if(t("log","at utils/friend-api.js:152","获取到的群聊信息:",o),0===o.code){const e=((null==(a=null==o?void 0:o.data)?void 0:a.records)||[]).reverse();n(e)}else{const t=e.data.error||"获取群聊消息出错啦";s(t)}}else s(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})}))),oe=async e=>new Promise(((t,a)=>{uni.request({url:`${ee}/api/group/getGroupMemberList`,method:"POST",header:{"Content-Type":"application/json"},data:{groupId:e,current:1,size:100},success:e=>{if(200===e.statusCode){const n=e.data;if(0===n.code){const e=n.data.records;t(e)}else{const t=e.data.error||"获取群成员出错啦";a(t)}}else a(`请求群成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),ie=e=>new Promise(((t,a)=>{uni.uploadFile({url:`${ee}/api/file/upload`,filePath:e,name:"file",success:e=>{const n=JSON.parse(e.data);0===n.code?t(n.data):a(n.msg||"上传失败")},fail:e=>{a(e.errMsg||"网络错误")}})}));const re=new class{constructor(){this.ws=null,this.url="wss://wss.yuxindazhineng.com/ws",this.options={token:"",UserId:"",onMessage:null,onError:null,onReconnect:null,onOpen:null,onClose:null},this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=3e3,this.reconnectTimer=null,this.heartbeatTimer=null,this.isManualClose=!1}connect(e={}){this.options={...this.options,...e},this.isManualClose=!1,this.ws&&(t("log","at utils/friend-socket.js:37","关闭现有连接"),this.close());try{this.ws=uni.connectSocket({url:this.url,success:()=>{t("log","at utils/friend-socket.js:45","WebSocket 连接请求已发送")},fail:e=>{t("error","at utils/friend-socket.js:48","WebSocket 连接失败:",e),this.handleError(e)}}),this.initEventHandlers()}catch(a){this.handleError(a)}}initEventHandlers(){this.ws&&(this.ws.onOpen((e=>{var a,n,s,o;t("log","at utils/friend-socket.js:75","WebSocket 已连接"),this.reconnectAttempts>0&&(null==(n=(a=this.options).onReconnect)||n.call(a)),null==(o=(s=this.options).onOpen)||o.call(s,e),this.reconnectAttempts=0})),this.ws.onMessage((e=>{try{const a=JSON.parse(e.data);t("log","at utils/friend-socket.js:88","收到了返回消息:",a),this.handleMessage(a)}catch(a){t("error","at utils/friend-socket.js:91","消息解析失败:",a),uni.setStorageSync("currentSessionId",e.data.task_call_id)}})),this.ws.onError((e=>{t("error","at utils/friend-socket.js:96","WebSocket 错误:",JSON.stringify(e)),this.handleError(e)})),this.ws.onClose((e=>{var a,n;t("log","at utils/friend-socket.js:100","WebSocket 已关闭:",e.code,e.reason),null==(n=(a=this.options).onClose)||n.call(a,e),!this.isManualClose&&this.reconnectAttempts{if(!this.isConnected())return void n(new Error("WebSocket 未连接"));const s=JSON.stringify(e);t("log","at utils/friend-socket.js:171","发送的消息是:",s),this.ws.send({data:s,success:()=>a(),fail:e=>{t("error","at utils/friend-socket.js:179","发送消息失败:",e),n(e)}})}))}reconnect(){this.reconnectTimer||(this.reconnectAttempts++,t("log","at utils/friend-socket.js:205",`尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),this.reconnectTimer=setTimeout((()=>{this.reconnectTimer=null,this.isManualClose||this.connect(this.options)}),this.reconnectDelay*this.reconnectAttempts))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval((()=>{this.isConnected()?this.send({ws_event:"ping"}).catch((()=>{t("log","at utils/friend-socket.js:227","心跳发送失败,准备重连"),this.reconnectTimer||this.isManualClose||this.reconnect()})):!this.isManualClose&&this.reconnectAttempts{})),this.ws.onMessage((()=>{})),this.ws.onError((()=>{})),this.ws.onClose((()=>{}));try{this.ws.close({success:()=>t("log","at utils/friend-socket.js:314","连接已关闭"),fail:e=>t("error","at utils/friend-socket.js:315","关闭失败:",e)})}catch(e){t("error","at utils/friend-socket.js:323","关闭连接出错:",e)}this.ws=null}this.reconnectAttempts=0}updateOptions(e){this.options={...this.options,...e}}},le=G("friendSocket",(()=>{const a=e.ref("disconnected"),n=e.ref([]),s=e.ref(""),o=e.ref({token:"",UserId:""});e.ref("");const i=e.ref(null),r=e.ref(null),l=e.ref(!1),c=e.ref([]),u=e.ref(20),d=e.computed((()=>"connected"===a.value)),p=e.computed((()=>"connecting"===a.value)),h=e.computed((()=>"disconnected"===a.value)),m=e.computed((()=>"error"===a.value)),f=e.computed((()=>n.value[n.value.length-1]));function v(e,a){const n=new Date,s=`${n.getHours().toString().padStart(2,"0")}:${n.getMinutes().toString().padStart(2,"0")}:${n.getSeconds().toString().padStart(2,"0")}`;c.value.push({type:e,connect:a,time:s}),c.value.length>u.value&&(c.value=c.value.slice(-u.value)),t("log","at stores/friend-socket.js:57",`[${e.toUpperCase()}] ${a}`)}function g(){a.value="connected",v("success","连接成功!"),async function(){const e={version:"1.1",body:{command:7,sender:B(),avatar:"",sessionId:"",message:"",callBackMessage:!1}};try{await re.send(e),v("send","string"==typeof e?e:JSON.stringify(e))}catch(t){throw v("error",`发送验证失败: ${t.message||t}`),t}}()}function w(){"disconnected"!==a.value&&(a.value="disconnected",v("warn","连接已断开"))}function y(e){v("error",`Socket错误: ${JSON.stringify(e)}`),a.value="error"}function k(e){a.value="connecting",v("warn",`重连中... (${e}/5)`)}function _(e){v("receive",`收到: ${JSON.stringify(e)}`);const a=e.body||e,{callBackMessage:n,groupName:s,command:o,groupId:c}=a||{};switch(o){case 3:i.value=o,r.value=c;break;case 7:i.value=o;break;case 1:t("log","at stores/friend-socket.js:199","有好友消息"),l.value=!0;break;case 9:t("log","at stores/friend-socket.js:204","群消息发送成功/有新群消息"),l.value=!0;break;default:v("info","未知事件类型")}}return{connectionStatus:a,messageString:s,logs:c,config:o,command:i,groupId:r,MessageReceived:l,isConnected:d,isConnecting:p,isDisconnected:h,isError:m,lastMessage:f,connect:function(e={}){n.value=[],s.value="",o.value={...o.value,...e},v("info",`准备连接FriendsWebSocket。Token:${o.value.token||"未设置"}。UserId: ${o.value.UserId||"未设置"}`),o.value.token&&o.value.UserId?(a.value="connecting",re.connect({token:o.value.token,UserId:o.value.UserId,onMessage:_,onError:y,onOpen:g,onClose:w,onReconnect:k}),setTimeout((()=>{"connecting"===a.value&&(a.value="error",v("error","连接超时(10s)"))}),1e4)):v("error","Token和UserId都不能为空")},disconnect:function(){re.close(),a.value="disconnected",v("warn","已主动断开连接")},send:async function(e){if(!d.value)throw v("error","发送失败: 连接未建立"),new Error("连接未建立");try{return await re.send(e),v("send","string"==typeof e?e:JSON.stringify(e)),!0}catch(t){throw v("error",`发送失败: ${t.message||t}`),t}},addLog:v,clearLogs:function(){c.value=[]},getStatusText:function(){return{connecting:"连接中",connected:"已连接",disconnected:"未连接",error:"连接错误"}[a.value]||"未知状态"}}})),{registerUTSInterface:ce,initUTSProxyClass:ue,initUTSProxyFunction:de,initUTSPackageName:pe,initUTSIndexClassName:he,initUTSClassName:me}=uni,fe="limeChooseFile",ve=de(!1,{moduleName:"lime-choose-file 文件选择",moduleType:"",errMsg:"",main:!0,package:pe(fe,true),class:he(fe,true),name:"chooseFileByJs",keepAlive:!1,params:[{name:"options",type:"UTSSDKModulesLimeChooseFileChooseFileOptionJSONObject"}],return:""}),ge=E({__name:"Chat",setup(n){const r=le(),p=()=>{r.isConnected||(Se.value&&Be.value?r.connect({token:Se.value,UserId:Be.value}):t("warn","at pages/Chat/Chat.vue:355","Token或UserId未准备好"))},f=Q(),v=e.ref(0),g=e.ref(""),w=e.ref(""),y=e.ref(""),k=e.ref(""),_=e.ref(!1),E=(e,t)=>{let a='';return e.forEach(((e,n)=>{const s=0===n?"th":"td",o=e.split("|").filter((e=>""!==e.trim()));a+="",o.forEach(((e,n)=>{const o=t[n]?` style="text-align:${t[n]}"`:"";let i=e.trim();i=i.replace(/\*\*(.+?)\*\*/g,"$1"),i=i.replace(/\*(.+?)\*/g,"$1"),i=i.replace(/_/g,"_").replace(/\*/g,"*"),a+=`<${s}${o} style="padding:6px 10px;border:1px solid #ddd">${i}`})),a+=""})),a+="
    ",a},C=e=>{if(!e)return"";e=N(e);try{let t=j(e=(e=>{const t=e.split("\n");let a=[],n=!1,s=[],o=[];for(let i=0;ie.trim())).map((e=>e.trim().startsWith(":")&&e.trim().endsWith(":")?"center":e.trim().endsWith(":")?"right":"left"));continue}s.push(e),n=!0}else n&&s.length>0&&(a.push(E(s,o)),s=[],o=[],n=!1),a.push(e)}return n&&s.length>0&&a.push(E(s,o)),a.join("\n")})(e=e.replace(/__/g,"\0\0").replace(/_/g,"_").replace(/\x00\x00/g,"__")));return t=t.replace(/]*>(.*?)<\/a>/gi,'$2'),t}catch(a){return t("error","at pages/Chat/Chat.vue:488","解析失败",a),e}},N=e=>{const t=/]*>([\s\S]*?)<\/script>/i.test(e),a=/<(form|input|select|textarea|button)\b[^>]*>/i.test(e);let n=e.replace(/]*>([\s\S]*?)<\/script>/gi,"");if(n=n.replace(/<\/?minimax:tool_call>/g,(e=>e.replace(//g,">"))).replace(/<\|[\w]+?\|>/g,(e=>e.replace(//g,">"))),t||a){return'

    表单仅预览,不可操作!!!

    '+n}return n},B=e=>{uni.previewImage({urls:[e]})},I=e=>{uni.downloadFile({url:e,success:e=>{uni.openDocument({filePath:e.tempFilePath,showMenu:!0})}})},P=e=>e?e<1?(1024*e).toFixed(0)+"KB":e.toFixed(2)+"MB":"0KB",A=e=>{if(!e||"string"!=typeof e)return{textContent:e||"",files:[]};const a=e.match(/\[文件信息:(\[.*?\])\]/);if(!a)return{textContent:e,files:[]};try{const t=JSON.parse(a[1]);return{textContent:e.replace(a[0],"").trim(),files:t}}catch(n){return t("error","at pages/Chat/Chat.vue:565","解析文件信息失败:",n),{textContent:e,files:[]}}},F=async()=>{try{const e="0123456789abcdef";let t="";for(let o=0;o<24;o++)t+=e[Math.floor(Math.random()*e.length)];const a=await u(Se.value,t);if(!a)return void uni.showToast({title:"工作区创建失败",icon:"none"});const n=uni.getStorageSync("yxd_login_info");let s="";n&&(s=n.username||"");if(!(await d(Se.value,a,"新会话",s)))return void uni.showToast({title:"新会话创建失败",icon:"none"});O(),ze()}catch(e){t("error","at pages/Chat/Chat.vue:611","新建普通会话失败:",e),uni.showToast({title:"创建会话失败,请重试",icon:"none"})}},L=e.ref(!1),O=()=>{L.value=!1},M=e.ref(!1),$=()=>{M.value=!M.value},R=()=>{Ve.value&&uni.setStorageSync("currentSessionId",Ve.value),uni.navigateTo({url:"/pages/WorkSpace/WorkSpace"})},U=()=>{uni.navigateTo({url:"/pages/WYXD/WYXD?workspaceId="+encodeURIComponent(g.value)+"&filePath="+encodeURIComponent(w.value)+"&fileName="+encodeURIComponent(y.value)+"&userToken="+encodeURIComponent(k.value)+"&forceDownload=1"})},W=()=>{Ve.value&&uni.setStorageSync("currentSessionId",Ve.value),uni.navigateTo({url:"/pages/CloudDatabase/CloudDatabase"})},q=()=>{uni.reLaunch({url:"/pages/Login/Login"})},H=e.ref([]),Z=e.ref([]),J=()=>new Promise(((t,a)=>{if(f.isConnected)return t();const n=e.watch((()=>f.isConnected),(e=>{e&&(n(),t())})),s=e.watch((()=>f.connectionStatus),(e=>{"error"===e&&(n(),s(),a(new Error("连接失败")))}));f.connect({token:Se.value,conversationId:Ve.value})})),X=e.ref(!1),Y=e.ref(!1),G=e.ref(!1),K=e.ref(!1),ee=e.ref([]),re=e.ref(null),ce=e.ref(!1),ue=e.ref([]),de=(e,t)=>{let a=e.target;for(;a&&a.classList;){if(a.classList.contains("chat-inline-link")){const e=a.getAttribute("data-url")||a.dataset&&a.dataset.url;return void(e&&ye(e))}a=a.parentElement}const n=t.content&&(t.content.includes("http://")||t.content.includes("https://")||/]*href\s*=\s*['"][^'"]*['"]/i.test(t.content)||/\[[^\]]*\]\([^)]*\)/i.test(t.content));t.role&&n&&he(t)},pe=e=>{try{const t=new URL(e).pathname.split("/").filter((e=>e));if(t.length>0)return decodeURIComponent(t[t.length-1])}catch(a){}const t=e.split("/").filter((e=>e));if(t.length>0){const e=t[t.length-1],a=e.indexOf("?");return a>-1?e.substring(0,a):e}return e},he=e=>{ue.value=(e=>{const t=new Set,a=[],n=/\[([^\]]*)\]\((https?:\/\/[^\s<>"{}|\\^`\[\]()]+)\)/gi;[...e.matchAll(n)].forEach((e=>{const n=e[1].trim(),s=e[2];t.has(s)||(t.add(s),a.push({url:s,name:n||s}))}));const s=e.replace(n,"").match(/https?:\/\/[^\s<>"{}|\\^`\[\]()]+/gi);return s&&s.forEach((e=>{t.has(e)||(t.add(e),a.push({url:e,name:pe(e)}))})),a})(e.content||""),ce.value=!0},me=()=>{ce.value=!1,ue.value=[]},fe=e.ref({show:!1,type:"loading",message:""});let ge=null;const we=(e,t,a)=>{ge&&clearTimeout(ge),fe.value={show:!0,type:e,message:t},a>0&&(ge=setTimeout((()=>{fe.value={show:!1,type:"loading",message:""}}),a))},ye=e=>{ke(e)},ke=async e=>{try{we("loading","下载中...",0);const t=uni.getStorageSync("workspace_id")||"",a=await b(Se.value,t,e),n="string"==typeof a?a:(null==a?void 0:a.url)||(null==a?void 0:a.download_url)||"";if(!n)return void we("error","获取下载地址失败",2500);uni.downloadFile({url:n,success:e=>{200===e.statusCode?(ge&&clearTimeout(ge),fe.value={show:!1,type:"loading",message:""},uni.openDocument({filePath:e.tempFilePath,showMenu:!0,fail:()=>{we("error","无法打开此文件",2500)}})):we("error","下载失败",2500)},fail:()=>{we("error","下载失败",2500)}})}catch(t){we("error","下载失败: "+(t.message||t),2500)}},_e=async()=>{const e={sender:Be.value,receiver:t,content:Ne.value,taskId:null,avatar:null,createTime:"",messageType:"null",contentJson:a?JSON.stringify(ee.value):"null"};Oe.value=[...Oe.value,e],r.isConnecting||await p();const t=D(),a=ee.value.length>0,n={command:1,sender:Be.value,receiver:t,avatar:"",sessionId:Ve.value,message:Ne.value,callBackMessage:!1};a&&(n.contentType=1,n.uploadVos=ee.value);const s={version:"1.1",body:n};r.send(s),Ne.value="",ee.value=[],setTimeout((()=>{We()}),1e3)},be=async()=>{const e={id:Oe.value.length+1,message:Ne.value,messageType:t?1:0,groupId:null,createTime:"",contentJson:t?JSON.stringify(ee.value):"",sender:Be.value};Oe.value=[...Oe.value,e],r.isConnecting||await p();const t=ee.value.length>0,a={command:9,groupId:Ve.value,message:Ne.value||"",callBackMessage:!t,messageType:t?1:0,sender:Be.value};t&&(a.uploadVos=ee.value);const n={version:"1.1",body:a};r.send(n),Ne.value="",ee.value=[],setTimeout((()=>{qe()}),1e3)},Ee=async()=>{try{let e=Ne.value;if(Oe.value=[...Oe.value,{role:"user",content:e}],await J(),ee.value.length){const t=JSON.stringify(ee.value);e=e?`${e}\n[文件信息:${t}]`:`[文件信息:${t}]`}const t={type:"chat",conversation_id:Ve.value,content:e};f.send(t),X.value=!0,Y.value=!0,re.value="streaming-"+Date.now(),Oe.value=[...Oe.value,{role:"assistant",content:"",_streaming:!0,_id:re.value}],Ne.value="",ee.value=[],Ze()}catch(e){X.value=!1,uni.showToast({title:`用户发送消息失败${e}`,icon:"error"})}},Ce=async()=>{t("log","at pages/Chat/Chat.vue:1121","中断对话 - 当前会话ID:",Ve.value);try{await f.send({type:"stop",conversation_id:Ve.value}),t("log","at pages/Chat/Chat.vue:1127","中断指令已发送成功")}catch(e){t("error","at pages/Chat/Chat.vue:1129","中断指令发送失败:",e)}re.value&&(Oe.value=Oe.value.filter((e=>e._id!==re.value)),re.value=null),X.value=!1,f.isThinking=!1,Y.value=!1,Ne.value="",ee.value=[],uni.showToast({title:"已中断",icon:"none",duration:1500})};e.watch((()=>f.isThinking),((e,a)=>{if(t("log","at pages/Chat/Chat.vue:1153","isThinking 变化:",a,"→",e,"messageString:",f.messageString),!a&&e)return t("log","at pages/Chat/Chat.vue:1156","AI开始回复(跨设备同步),锁定输入框"),X.value=!0,void(re.value||(re.value="streaming-"+Date.now(),Oe.value=[...Oe.value,{role:"assistant",content:"",_streaming:!0,_id:re.value}]));a&&!e&&(t("log","at pages/Chat/Chat.vue:1172","AI回复结束(正常/中断),解锁并刷新消息列表"),re.value&&(Oe.value=Oe.value.filter((e=>e._id!==re.value)),re.value=null),Ue(),X.value=!1,Y.value=!1,Ne.value="",ee.value=[])})),e.watch((()=>f.authFailReason),(t=>{"pc offline"===t&&(X.value=!1,f.authFailReason="",e.nextTick((()=>{uni.showModal({title:"提示",content:"PC端不在线,不可聊天",showCancel:!1,confirmText:"知道了"})})))})),e.watch((()=>f.messageString),(e=>{if(!re.value||!f.isThinking)return;const t=Oe.value.findIndex((e=>e._id===re.value));if(t>=0){const a={...Oe.value[t],content:e};Oe.value.splice(t,1,a),Ze()}}));const Ne=e.ref(""),xe=e.ref([]),Ve=e.ref(""),Se=e.ref(""),Be=e.ref(""),Te=e.ref(""),De=e.ref(null),ze=async()=>{try{Se.value=V(),t("log","at pages/Chat/Chat.vue:1246","token:",Se.value),xe.value=await l(Se.value)||[];const e=S();e&&xe.value.some((t=>t._id===e))?Ve.value=e:xe.value.length>0?Ve.value=xe.value[0]._id:Ve.value="",t("log","at pages/Chat/Chat.vue:1258","保存会话id:",Ve.value),uni.setStorageSync("currentSessionId",Ve.value)}catch(e){uni.showToast({title:`获取会话列表失败${e}`,icon:"error"})}},Ie=e.ref([]),Pe=e=>{if(!e)return null;const t=Ie.value.find((t=>t.receiver===e));return(null==t?void 0:t.avatar)||null},Ae=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.receiver)),a=await m(Se.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.receiver);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/Chat/Chat.vue:1314","获取好友头像失败",a),e}},je=e.ref([]),Fe=e.ref([]),Le=e=>{if(!e)return null;const t=Fe.value.find((t=>t.groupContactId===e));return(null==t?void 0:t.avatar)||null},Oe=e.ref([]),Me=e.ref(""),$e=e.ref(!1);e.ref(!1),e.ref(1);const Re=e.computed((()=>Oe.value)),Ue=async()=>{try{Oe.value=await c(Se.value,Ve.value)||[],Ze()}catch(e){uni.showToast({title:`获取ai会话内容失败${e}`,icon:"none"})}finally{K.value=!1}},We=async()=>{try{Oe.value=await ne(Ve.value)||[],Ze()}catch(e){uni.showToast({title:`获取好友会话消息失败${e}`,icon:"none"})}finally{K.value=!1}},qe=async()=>{try{Oe.value=await se(Ve.value)||[],t("log","at pages/Chat/Chat.vue:1424","群聊消息:",Oe.value);const e=await oe(Ve.value);t("log","at pages/Chat/Chat.vue:1427","获取到的群成员列表:",e),e&&e.length?(Fe.value=await(async e=>{if(!(null==e?void 0:e.length))return[];try{const a=e.map((e=>e.groupContactId));t("log","at pages/Chat/Chat.vue:1343","请求头像的ID列表:",a);const n=await m(Se.value,a);t("log","at pages/Chat/Chat.vue:1345","头像接口返回数据:",n);const s=new Map(n.map((e=>[e.user_id,e]))||[]);return t("log","at pages/Chat/Chat.vue:1348","userMap的keys:",Array.from(s.keys())),e.map((e=>{const a=e.groupContactId,n=s.get(a);return t("log","at pages/Chat/Chat.vue:1353",`查找 ${a} 的头像:`,n),{...e,avatar:(null==n?void 0:n.avatar)||null}}))}catch(a){return t("error","at pages/Chat/Chat.vue:1360","获取群成员头像失败",a),e}})(e),t("log","at pages/Chat/Chat.vue:1430","群成员列表(带头像):",Fe.value)):Fe.value=[],Ze()}catch(e){uni.showToast({title:`获取群聊会话失败${e}`,icon:"none"})}finally{K.value=!1}},He=e=>{},Ze=async()=>{await e.nextTick(),Re.value.length>0&&($e.value=!$e.value,Me.value=$e.value?"chat-bottom-a":"chat-bottom-b")};return e.watch((()=>r.MessageReceived),(e=>{if(t("log","at pages/Chat/Chat.vue:1477","收到了好友消息"),e)switch(t("log","at pages/Chat/Chat.vue:1479","ChatType:",v.value),v.value){case 0:Ue(),r.MessageReceived=!1;break;case 1:We(),r.MessageReceived=!1;break;case 2:qe(),r.MessageReceived=!1;break;default:t("log","at pages/Chat/Chat.vue:1495","default 分支"),r.MessageReceived=!1}}),{immediate:!0}),e.watch(Ve,(async(e,t)=>{if(e)switch(uni.setStorageSync("currentSessionId",Ve.value),t&&t!==e&&(K.value=!0,Oe.value=[],_.value=!1),v.value){case 0:Ue(),f.disconnect(),J();break;case 1:await We();break;case 2:await qe();break;default:Ue()}}),{immediate:!0}),o((e=>{e.wyxdFilePath&&(g.value=e.wyxdWorkspaceId?decodeURIComponent(e.wyxdWorkspaceId):"",w.value=decodeURIComponent(e.wyxdFilePath),y.value=e.wyxdFileName?decodeURIComponent(e.wyxdFileName):"未命名文档",k.value=e.wyxdUserToken?decodeURIComponent(e.wyxdUserToken):"",_.value=!0)})),e.onMounted((()=>{})),s((async()=>{await(async()=>{try{Se.value=V(),De.value=await h(Se.value),Be.value=De.value._id,Te.value=De.value.avatar||"",t("log","at pages/Chat/Chat.vue:1236","用户信息已加载:",Be.value,Te.value)}catch(e){t("error","at pages/Chat/Chat.vue:1238","获取用户信息失败:",e)}})();const e=T();v.value=e;const a=S();a&&(Ve.value=a),0===e?(await ze(),Ve.value&&(K.value=!0,Ue()),Se.value&&Ve.value&&!f.isConnected&&J()):1===e?(await(async()=>{try{t("log","at pages/Chat/Chat.vue:1273","开始获取好友列表");const e=await te(Be.value);t("log","at pages/Chat/Chat.vue:1276","friendList:",e),e&&e.length?Ie.value=await Ae(e):(Ie.value=[],t("log","at pages/Chat/Chat.vue:1281","好友列表为空"))}catch(e){t("error","at pages/Chat/Chat.vue:1284","获取好友列表失败:",e),Ie.value=[]}finally{xe.value=Ie.value}})(),K.value=!0,await We(),p()):2===e&&(await(async()=>{try{t("log","at pages/Chat/Chat.vue:1324","开始获取群聊列表"),je.value=await ae(Be.value)}catch(e){t("error","at pages/Chat/Chat.vue:1329","获取群聊列表失败:",e),je.value=[]}finally{xe.value=je.value}})(),await p(),K.value=!0,await qe())})),i((()=>{f.disconnect()})),(n,s)=>{const o=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),L.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"ncd-overlay",onClick:O},[e.createElementVNode("view",{class:"ncd-card",onClick:s[0]||(s[0]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("view",{class:"ncd-title-eng"},[e.createElementVNode("text",null,"NEW")]),e.createElementVNode("text",{class:"ncd-title-zh"},"创建对话"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:O})]),e.createElementVNode("text",null,"选择对话类型,开启全新会话体验"),e.createElementVNode("view",{class:"ncd-options"},[e.createElementVNode("view",{class:"ncd-option ncd-normal"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"chat",color:"#000000",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title",onClick:F},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"普通会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"与AI自由对话,探索任何话题")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})]),e.createElementVNode("view",{class:"ncd-option ncd-intelligence"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"star",color:"#ffffff",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title"},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"智能体会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"选择专属智能体,获得精准专业服务")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})])])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"chat-page page-container"},[M.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"mask",onClick:$})):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-sidebar",{"sidebar-show":M.value}])},[e.createVNode(z,{chatList:xe.value,showNewChatModal:L.value,"onUpdate:showNewChatModal":s[1]||(s[1]=e=>L.value=e),currentSessionId:Ve.value,"onUpdate:currentSessionId":s[2]||(s[2]=e=>Ve.value=e),chatType:v.value,"onUpdate:chatType":s[3]||(s[3]=e=>v.value=e),onRefreshConversations:ze,onSelectChat:s[4]||(s[4]=e=>M.value=!1)},null,8,["chatList","showNewChatModal","currentSessionId","chatType"])],2),e.createElementVNode("view",{class:"chat-wrapper"},[e.createElementVNode("view",{class:"chat-hearder"},[e.createElementVNode("view",{class:"chat-btn-group"},[e.createElementVNode("view",{class:"head-btn",onClick:$},[e.createElementVNode("view",{class:"iconfont icon-caidan"})]),e.createElementVNode("view",{class:"head-btn",onClick:R},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"})]),e.createElementVNode("view",{class:"head-btn",onClick:W},[e.createElementVNode("view",{class:"iconfont icon-cloud"})]),e.createElementVNode("view",{class:"head-btn log-out",onClick:q},[e.createElementVNode("view",{class:"iconfont icon-tuichu"})])])]),_.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"wyxd-banner"},[e.createElementVNode("view",{class:"wyxd-banner-icon iconfont icon-wenjian"}),e.createElementVNode("view",{class:"wyxd-banner-text",onClick:U},"查看: "+e.toDisplayString(y.value),1),e.createElementVNode("view",{class:"wyxd-banner-arrow",onClick:U},"›"),e.createElementVNode("view",{class:"wyxd-banner-close",onClick:s[5]||(s[5]=e.withModifiers((e=>_.value=!1),["stop"]))},"×")])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"main-chat"},[e.createElementVNode("scroll-view",{class:"chat-messages",direction:"vertical","scroll-y":"","scroll-into-view":Me.value,"upper-threshold":0,"scroll-with-animation":!X.value,onScroll:He},[K.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"messages-loading-overlay"},[e.createElementVNode("view",{class:"messages-loading-card"},[e.createElementVNode("view",{class:"bubble-loading-dots"},[e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"})]),e.createElementVNode("text",{class:"messages-loading-text"},"加载中...")])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Re.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock(e.Fragment,{key:a},[0===v.value&&"tool"!==t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-message",{"message-user":"user"===t.role}]),id:"msg-"+a},["user"===t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":"user"===t.role}])},["user"===t.role&&(null==(n=De.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:De.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"iconfont icon-yonghuziliao"}))],2)):e.createCommentVNode("",!0),t.content&&""!==String(t.content).trim()||t._streaming?(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["chat-content",{"chat-content-user":"user"===t.role,"chat-content-assistant":"assistant"===t.role}]),onClick:e=>de(e,t)},[!t._streaming||t.content&&""!==String(t.content).trim()?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"bubble-loading-dots"},[e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"})])),A(t.content).textContent?(e.openBlock(),e.createElementBlock("view",{key:1,innerHTML:C(A(t.content).textContent)},null,8,["innerHTML"])):e.createCommentVNode("",!0),A(t.content).files.length>0?(e.openBlock(),e.createElementBlock("view",{key:2,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A(t.content).files,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>B(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>I(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(P(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])):e.createCommentVNode("",!0)],10,["id"])):e.createCommentVNode("",!0)],64)})),128)),1===v.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(Re.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===Be.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===Be.value}])},[t.sender===Be.value&&(null==(n=De.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:De.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):Pe(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:Pe(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===Be.value}]),onClick:e=>de(e,t)},[t.content&&""!==String(t.content).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:C(t.content)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>B(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>I(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(P(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),2===v.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(Re.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===Be.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===Be.value}])},[t.sender===Be.value&&(null==(n=De.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:De.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):Fe.value.length>0&&Le(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:Le(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===Be.value}]),onClick:e=>de(e,t)},[t.message&&""!==String(t.message).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:C(t.message)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>B(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>I(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(P(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),e.createElementVNode("view",{id:"chat-bottom-a",style:{height:"1rpx"}}),e.createElementVNode("view",{id:"chat-bottom-b",style:{height:"1rpx"}})],40,["scroll-into-view","scroll-with-animation"]),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-container",{"interactive-disabled":X.value}])},[e.createElementVNode("view",{class:"chat-interactive-group"},[e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:X.value}]),onClick:s[6]||(s[6]=e=>!X.value&&(t("log","at pages/Chat/Chat.vue:671","点击了拍照上传"),void uni.chooseImage({count:1,sourceType:["camera","album"],success:e=>{const t=e.tempFiles,a=e.tempFilePaths;t.forEach(((e,t)=>{H.value.push({path:a[t],name:e.name||`photo_${Date.now()}_${t}.jpg`,size:e.size,type:"image",tempFile:e})}))},fail:e=>{t("error","at pages/Chat/Chat.vue:689","选择图片失败",e)}})))},"拍照上传",2),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:X.value}]),onClick:s[7]||(s[7]=e=>!X.value&&(t("log","at pages/Chat/Chat.vue:700","点击了上传文件"),void ve({count:5,type:"all",success:e=>{t("log","at pages/Chat/Chat.vue:705","成功了"),Z.value=e.tempFiles,H.value.push(...e.tempFiles),uni.showToast({title:`已选择 ${e.tempFiles.length} 个文件`,icon:"success"})},fail:e=>{t("error","at pages/Chat/Chat.vue:716","选择失败:",e),uni.showToast({title:"选择失败",icon:"error"})}})))},"上传文件",2)]),H.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"image-list"},[e.createElementVNode("view",{class:"image-tags"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(H.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"image-tag",key:a},[e.createElementVNode("text",{class:"tag-name"},e.toDisplayString(t.name),1),e.createElementVNode("text",{class:"tag-close",onClick:e.withModifiers((e=>(e=>{H.value.splice(e,1)})(a)),["stop"])},"×",8,["onClick"])])))),128))])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-input-container",{"input-disabled":X.value}])},[e.withDirectives(e.createElementVNode("textarea",{class:"message-input",placeholder:X.value?Y.value?"AI 正在回复中...":"电脑正在运行,请稍后":"输入消息...",disabled:X.value,"onUpdate:modelValue":s[8]||(s[8]=e=>Ne.value=e),"auto-height":""},null,8,["placeholder","disabled"]),[[e.vModelText,Ne.value]]),X.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"input-btn-group stop-message-btn",onClick:Ce},[e.createElementVNode("view",{class:"iconfont icon-tingzhi"})])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"input-btn-group send-message-btn",onClick:s[9]||(s[9]=e=>(async()=>{if(Ne.value.trim()||0!==H.value.length){if(H.value.length>0){G.value=!0,uni.showLoading({title:"上传文件中...",mask:!0});try{const e=[];for(const t of H.value){const a=await ie(t.path);e.push(a)}ee.value=e,H.value=[]}catch(e){return uni.hideLoading(),t("error","at pages/Chat/Chat.vue:951","文件上传失败:",e),uni.showToast({title:"文件上传失败,请重试",icon:"error"}),void(G.value=!1)}uni.hideLoading(),G.value=!1}0===v.value&&Ee(),1===v.value&&_e(),2===v.value&&be()}})())},[e.createElementVNode("view",{class:"iconfont icon-fasong"})]))],2)],2)])])]),ce.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"ncd-overlay",onClick:me},[e.createElementVNode("view",{class:"ncd-card message-detail-card",onClick:s[10]||(s[10]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("text",{class:"ncd-title-zh"},"消息详情"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:me})]),e.createElementVNode("scroll-view",{class:"message-detail-content","scroll-y":""},[ue.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"detail-links-section"},[e.createElementVNode("view",{class:"detail-links-title"},"文件 ("+e.toDisplayString(ue.value.length)+")",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ue.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"detail-link-item",onClick:e=>ye(t.url)},[e.createElementVNode("text",{class:"link-text"},e.toDisplayString(t.name),1)],8,["onClick"])))),128))])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"detail-empty"},[e.createElementVNode("text",null,"无可下载文件")]))])])])):e.createCommentVNode("",!0),fe.value.show?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["download-toast-overlay",(fe.value.show,"")])},[e.createElementVNode("view",{class:e.normalizeClass(["download-toast-card","download-toast-"+fe.value.type])},["loading"===fe.value.type?(e.openBlock(),e.createElementBlock("view",{key:0,class:"download-toast-icon"},[e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"})])):(e.openBlock(),e.createElementBlock("text",{key:1,class:"download-toast-icon"},e.toDisplayString("success"===fe.value.type?"✓":"✕"),1)),e.createElementVNode("text",{class:"download-toast-text"},e.toDisplayString(fe.value.message),1)],2)],2)):e.createCommentVNode("",!0)],64)}}},[["__scopeId","data-v-59ccb015"]]),we=E({__name:"WorkSpace",setup(n){const s=e.ref(""),o=e.ref(""),i=e.ref(""),l=e.ref("工作区"),c=e.ref(!1),u=e.ref([]),d=e.ref(!1),p=e.ref(!1),h=e.ref(""),m=()=>{d.value=!1,h.value=""},f=()=>{ve({count:10,type:"all",success:async e=>{const t=e.tempFiles||[];0!==t.length?await w(t):uni.showToast({title:"未选择文件",icon:"none"})},fail:e=>{t("error","at pages/WorkSpace/WorkSpace.vue:176","选择文件失败:",e)}})},w=async e=>{uni.showLoading({title:"上传中..."});try{const a=A.value.length>0?"./"+A.value.map((e=>e.name)).join("/")+"/":"/",n=await((e,a,n)=>new Promise(((s,o)=>{const i=(Array.isArray(a)?a:[a]).map((e=>({name:"files",uri:"string"==typeof e?e:e.tempFilePath||e.path||e})));t("log","at utils/cloud-api.js:595","uploadFileToShortStorage 参数:",{workspacesId:e,fileCount:i.length,filePath:n}),uni.uploadFile({url:`${r}/cloud_api/file/temp/upload`,method:"POST",formData:{workspaces_id:e,file_path:n||"/",overwrite:"true"},files:i,success:e=>{if(t("log","at utils/cloud-api.js:607","uploadFileToShortStorage 响应状态:",e.statusCode,"数据:",e.data),200===e.statusCode)try{const t=JSON.parse(e.data);if(Array.isArray(t)&&t.length>0)s(t);else if(t.success)s([{url:t.url||t.message,success:!0}]);else{const e=(null==t?void 0:t.error)||(null==t?void 0:t.message)||"上传文件(到短存云端)获取URL出错啦";o(e)}}catch(a){o("接口返回数据格式异常: "+e.data)}else o(`上传文件(到短存云端)获取URL失败:${e.statusCode} - ${e.data}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(o.value,e,a),i=n.filter((e=>e.success)).map((e=>e.url));if(0===i.length){const e=n.filter((e=>!e.success)).map((e=>e.error)).join("; ");throw new Error(e||"所有文件上传失败")}await((e,t,a,n)=>new Promise(((s,o)=>{const i=Array.isArray(a)?a:a?[a]:[];uni.request({url:`${r}/cloud_api/phone/workspace/upload`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,dir_path:n||"/",urls:i},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)s(t);else{const e=(t.results||[]).filter((e=>!e.success)).map((e=>e.error||"未知错误")),a=e.length>0?`上传失败 ${t.failed_count}/${t.total_files}:${e[0]}`:t.summary||(null==t?void 0:t.error)||"上传文件到工作区出错啦";o(a)}}else o(`上传文件到工作区失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(s.value,o.value,i,a),uni.hideLoading();const l=e.length,c=l-i.length,u=c>0?`上传完成:成功 ${i.length},失败 ${c}`:`成功上传 ${l} 个文件`;uni.showToast({title:u,icon:i.length>0?"success":"error"}),L()}catch(a){uni.hideLoading(),t("error","at pages/WorkSpace/WorkSpace.vue:229","上传文件失败:",a),uni.showToast({title:"string"==typeof a?a:"上传失败,请重试",icon:"error"})}},y=e.computed((()=>0===A.value.length?"根目录":"/"+A.value.map((e=>e.name)).join("/"))),k=e.computed((()=>{const e=A.value.map((e=>e.name)).join("/"),t=h.value.trim();return t?e?`./${e}/${t}`:`./${t}`:e?`./${e}/`:"./"})),_=async()=>{const e=h.value.trim();if(e)try{const t=A.value.map((e=>e.name)).join("/"),a=t?`./${t}/${e}`:`./${e}`;await g(s.value,o.value,a),uni.showToast({title:"创建成功",icon:"success"}),m(),L()}catch(a){t("error","at pages/WorkSpace/WorkSpace.vue:275","创建文件夹失败:",a),uni.showToast({title:"创建失败,请重试",icon:"error"})}else uni.showToast({title:"请输入目录名称",icon:"none"})},b=e=>{if(c.value)return;const t=e.name&&e.name.toLowerCase().endsWith(".wyxd"),a=t?["下载","删除","WYXD查看器"]:["下载","删除"];uni.showActionSheet({itemList:a,success:a=>{if(t)switch(a.tapIndex){case 0:E(e);break;case 1:S(e);break;case 2:N(e)}else switch(a.tapIndex){case 0:E(e);break;case 1:S(e)}}})},E=async e=>{var a,n,i;if("directory"!==e.type)try{uni.showLoading({title:"获取下载链接..."});const l=e.path.startsWith("./")?e.path.slice(2):e.path,c=await(a=s.value,n=o.value,i=l,new Promise(((e,t)=>{uni.request({url:`${r}/cloud_api/phone/workspace/downloadFile`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:a,workspaces_id:n,file_path:i},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.message||n.data);else if(Array.isArray(n))e(n);else{const e=(null==n?void 0:n.error)||"获取工作区文URL出错啦";t(e)}}else t(`获取工作区文URL失败:${a.statusCode}`)}})})));uni.hideLoading();const u=Array.isArray(c)?c[0]:c;if(!u||!u.url)return void uni.showToast({title:"获取下载链接失败",icon:"error"});const d=u.url,p=e.name;uni.showLoading({title:"下载中..."}),uni.downloadFile({url:d,name:p,success:e=>{if(uni.hideLoading(),200===e.statusCode){const a=e.tempFilePath;t("log","at pages/WorkSpace/WorkSpace.vue:409","// 下载成功,文件下载路径为:",a),C(a)}else uni.showToast({title:"下载失败",icon:"error"})},fail:e=>{uni.hideLoading(),t("error","at pages/WorkSpace/WorkSpace.vue:420","下载文件失败:",e),uni.showToast({title:"下载失败,请重试",icon:"error"})}})}catch(l){uni.hideLoading(),t("error","at pages/WorkSpace/WorkSpace.vue:429","获取下载链接失败:",l),uni.showToast({title:"获取下载链接失败,请重试",icon:"error"})}else uni.showToast({title:"暂不支持下载目录",icon:"none"})},C=e=>{uni.openDocument({filePath:e,success:()=>uni.showToast({title:"打开成功",icon:"success"}),fail:e=>{t("error","at pages/WorkSpace/WorkSpace.vue:446","打开文件失败:",e),uni.showToast({title:"无法打开此文件",icon:"error"})}})},N=e=>{const a=e.path.startsWith("./")?e.path.slice(2):e.path;t("log","at pages/WorkSpace/WorkSpace.vue:477","解析文件路径:",a),t("log","at pages/WorkSpace/WorkSpace.vue:478","folder",e),t("log","at pages/WorkSpace/WorkSpace.vue:479","encode",encodeURIComponent(a)),t("log","at pages/WorkSpace/WorkSpace.vue:480","encode",encodeURIComponent(e.name)),uni.navigateTo({url:"/pages/WYXD/WYXD?workspaceId="+encodeURIComponent(o.value)+"&filePath="+encodeURIComponent(a)+"&fileName="+encodeURIComponent(e.name)+"&userToken="+encodeURIComponent(s.value)})},S=e=>{uni.showModal({title:"提示",content:`确定要删除"${e.name}"吗?`,success:async a=>{if(a.confirm)try{const a=`./${e.path}`;t("log","at pages/WorkSpace/WorkSpace.vue:510","删除的是:",a),await v(s.value,o.value,a),uni.showToast({title:"删除成功",icon:"success"}),L()}catch(n){t("error","at pages/WorkSpace/WorkSpace.vue:518","删除失败:",n),uni.showToast({title:"删除失败,请重试",icon:"error"})}}})},B=e.ref(!1),T=()=>{B.value=!B.value},D=e.ref(""),z=e.ref(!1),I=()=>{z.value=!z.value},P=e.ref({}),A=e.ref([]),j=e.ref([]),F=()=>{var e,a;t("log","at pages/WorkSpace/WorkSpace.vue:599","当前路径为:",JSON.stringify(A.value));const n=A.value.length>0?A.value[A.value.length-1].path:".";if("."===n)return(null==(e=P.value)?void 0:e.children)||[];const s=(e,t)=>{var a;for(const n of e){if(n.path===t)return n;if("directory"===n.type&&(null==(a=n.children)?void 0:a.length)){const e=s(n.children,t);if(e)return e}}return null},o=s((null==(a=P.value)?void 0:a.children)||[],n);return o?o.children:[]},L=async()=>{var e,a;o.value=uni.getStorageSync("workspace_id"),s.value=V(),t("log","at pages/WorkSpace/WorkSpace.vue:626","getWorkspaceId:",o.value),P.value=await(e=s.value,a=o.value,new Promise(((t,n)=>{uni.request({url:`${r}/cloud_api/phone/workspace/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:a,format:"tree",parent_path:"",filter_type:""},success:e=>{if(200===e.statusCode){const a=e.data;if(a.success)t(a.data);else{const e=(null==a?void 0:a.error)||"获取工作区文件目录出错啦";n(e)}}else n(`获取工作区文件目录失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})}))),j.value=F()},O=()=>{c.value?u.value.length===j.value.length?u.value=[]:u.value=j.value.map((e=>e.path)):A.value.length>0?(A.value.pop(),0===A.value.length?(l.value="工作区",i.value=null):(l.value=A.value[A.value.length-1].name,i.value=A.value.length>1?A.value[A.value.length-2].name:"工作区"),L(),D.value="",z.value=!1):uni.navigateBack({delta:1,fail(){t("log","at pages/WorkSpace/WorkSpace.vue:686","返回失败,进入兜底跳转"),uni.reLaunch({url:"/pages/Chat/Chat"})}})};return e.onMounted((()=>{L()})),(t,n)=>{const s=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),d.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay",onClick:m},[e.createElementVNode("view",{class:"popup-card",onClick:n[3]||(n[3]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:m},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"新建工作区目录"),e.createElementVNode("view",{class:"new-folder-name"},"目录名称"),e.createElementVNode("view",{class:e.normalizeClass(["create-folder-name",{"has-value":p.value||h.value}])},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[0]||(n[0]=e=>h.value=e),onFocus:n[1]||(n[1]=e=>p.value=!0),onBlur:n[2]||(n[2]=e=>p.value=!1),type:"text",placeholder:"输入目录名称,如:项目资料/设计图"},null,544),[[e.vModelText,h.value]])],2),e.createElementVNode("view",{class:"nf-path-label"},"当前路径"),e.createElementVNode("view",{class:"nf-path-display"},e.toDisplayString(y.value),1),e.createElementVNode("view",{class:"nf-path-label"},"路径预览"),e.createElementVNode("view",{class:"nf-path-preview"},e.toDisplayString(k.value),1),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:m},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:_},"确认")])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"workspace-container page-container"},[e.createElementVNode("view",{class:"workspace-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:n[4]||(n[4]=(...e)=>O&&O(...e))},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"}),e.createElementVNode("view",{class:"navbar-before-title workspace-text"},e.toDisplayString(c.value?"全选":i.value),1)]),e.createElementVNode("view",{class:"navbar-title workspace-text"},e.toDisplayString(l.value),1),e.createElementVNode("view",{class:"navbar-right"},[c.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-right-text workspace-text",onClick:n[5]||(n[5]=e=>(c.value&&(u.value=[]),void(c.value=!c.value)))}," 完成")):(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["iconfont icon-gengduo",B.value?"menu-open":"custom-navbar-icon"]),onClick:T},null,2))]),B.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:n[6]||(n[6]=e=>{f(),T()})},"上传文件"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item",onClick:n[7]||(n[7]=e=>{d.value=!0,T()})},"新建文件夹")])):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"search-file-warpper"},[e.createElementVNode("view",{class:"search-file"},[e.createElementVNode("view",{class:"iconfont icon-sousuo"}),e.withDirectives(e.createElementVNode("input",{class:"search-file-input",placeholder:"搜索",onFocus:I,"onUpdate:modelValue":n[8]||(n[8]=e=>D.value=e)},null,544),[[e.vModelText,D.value]])]),z.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"cancel-search",onClick:I},"取消")):e.createCommentVNode("",!0)])]),e.createElementVNode("view",{class:"workspace-content"},[0===j.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createTextVNode(" 文件夹为空 ")])):e.createCommentVNode("",!0),j.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:1,class:"folder-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,(t=>{return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["folder-item",{"select-folder":u.value.includes(t.path)}]),key:t.path,onClick:e=>c.value?(e=>{const t=u.value.indexOf(e);-1!==t?u.value.splice(t,1):u.value.push(e)})(t.path):(e=>{"directory"===e.type?(A.value.push({path:e.path,name:e.name}),l.value=e.name,i.value=A.value.length>1?A.value[A.value.length-2].name:"工作区",j.value=F(),D.value="",z.value=!1):b(e)})(t),onLongpress:e=>b(t)},["directory"===t.type?(e.openBlock(),e.createElementBlock("view",{key:0,class:"iconfont icon-a-wenjianjiawenjian folder-item-style"})):(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["iconfont folder-item-style",(a=t.extension,{".png":"icon-wenjiantupian",".jpg":"icon-wenjiantupian",".jpeg":"icon-wenjiantupian",".gif":"icon-wenjiantupian",".svg":"icon-SVG",".bmp":"icon-wenjiantupian",".webp":"icon-wenjiantupian",".mp4":"icon-wenjianshipin",".avi":"icon-wenjianshipin",".mov":"icon-wenjianshipin",".wmv":"icon-wenjianshipin",".flv":"icon-wenjianshipin",".mkv":"icon-wenjianshipin",".mp3":"icon-wenjianyinpin",".wav":"icon-wenjianyinpin",".flac":"icon-wenjianyinpin",".aac":"icon-wenjianyinpin",".pdf":"icon-PDF1",".doc":"icon-word",".docx":"icon-word",".xls":"icon-execl",".xlsx":"icon-execl",".ppt":"icon-PPT1",".pptx":"icon-PPT1",".txt":"icon-TXT1",".md":"icon-file-markdown-fill",".zip":"icon-wenjianyasuo",".rar":"icon-wenjianyasuo",".7z":"icon-wenjianyasuo",".tar":"icon-wenjianyasuo",".gz":"icon-wenjianyasuo",".js":"icon-JS",".ts":"icon-daimawenjia",".vue":"icon-daimawenjia",".html":"icon-HTML",".css":"icon-CSS",".py":"icon-daima",".java":"icon-daima",".json":"icon-JSON"}[null==a?void 0:a.toLowerCase()]||"icon-qitalingyu")])},null,2)),e.createElementVNode("view",{class:"folder-name"},e.toDisplayString(t.name),1),c.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["folder-checkbox",{"select-folder":u.value.includes(t.path)}])},[u.value.includes(t.path)?(e.openBlock(),e.createBlock(s,{key:0,type:"checkmarkempty",color:"#fff"})):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0)],42,["onClick","onLongpress"]);var a})),128))])):e.createCommentVNode("",!0)]),c.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["workspace-footer",{"folder-actions":u.value.length>0}])},[e.createElementVNode("view",{class:"iconfont icon-shangchuan",onClick:f}),e.createElementVNode("view",{class:"iconfont icon-del"})],2)):e.createCommentVNode("",!0)])],64)}}},[["__scopeId","data-v-e158ea6d"]]),ye=E({__name:"UserProfileModal",setup(n){const s=()=>{t("log","at pages/UserProfileModal/UserProfileModal.vue:55","点击了返回"),uni.navigateBack({delta:1,fail(){uni.reLaunch({url:"/pages/Chat/Chat"})}})},o=async()=>{if(u.value.trim()){uni.showLoading({title:"保存中...",mask:!0});try{await(e=i.value,a=l.value,n=u.value.trim(),o=d.value.trim(),p=c.value,new Promise(((t,s)=>{uni.request({url:`${r}/cloud_api/update_user_profile`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,user_id:a,username:n,"email:":o,avatar:p},success:e=>{if(200===e.statusCode){const a=e.data;if(a.success)t(a.message);else{const e=(null==a?void 0:a.error)||"修改用户信息出错啦";s(e)}}else s(`修改用户信息失败:${e.statusCode}`)}})}))),uni.hideLoading(),uni.showToast({title:"保存成功",icon:"success"}),setTimeout((()=>{s()}),800)}catch(h){uni.hideLoading();const e="string"==typeof h?h:"保存失败,请稍后重试";uni.showToast({title:e,icon:"none"}),t("error","at pages/UserProfileModal/UserProfileModal.vue:93","保存用户信息失败:",h)}var e,a,n,o,p}else uni.showToast({title:"用户名不能为空",icon:"none"})},i=e.ref(""),l=e.ref(""),c=e.ref(""),u=e.ref(""),d=e.ref(""),p=e.ref(!1),m=e.ref(!1),f=()=>{uni.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:e=>{const t=e.tempFilePaths[0];v(t)},fail:e=>{t("log","at pages/UserProfileModal/UserProfileModal.vue:116","选择图片失败",e)}})},v=e=>{c.value=e};return e.onMounted((async()=>{i.value=V();try{const e=await h(i.value);l.value=e._id||"",c.value=e.avatar||"",u.value=e.username||"",d.value=e.email||""}catch(e){t("error","at pages/UserProfileModal/UserProfileModal.vue:135","获取用户信息失败:",e),uni.showToast({title:"加载用户信息失败",icon:"none"})}})),(t,n)=>{const i=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"user-profile page-container"},[e.createElementVNode("view",{class:"modal-header"},[e.createElementVNode("view",{class:"modal-left",onClick:s},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"})]),e.createElementVNode("view",{class:"modal-title"},[e.createElementVNode("view",{class:"title-text"},"编辑资料")]),e.createElementVNode("view",{class:"modal-right",onClick:o},[e.createElementVNode("view",{class:"save-btn"},"保存")])]),e.createElementVNode("view",{class:"modal-body"},[e.createElementVNode("view",{class:"avatar-upload-section",onClick:f},[e.createElementVNode("view",{class:"avatar-upload-container"},[c.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"avatar-preview"},[e.createElementVNode("image",{src:c.value,mode:"aspectFill"},null,8,["src"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"avatar-placeholder"},[e.createVNode(i,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))])]),e.createElementVNode("view",{class:"form-card"},[e.createElementVNode("view",{class:"form-field"},[e.createElementVNode("view",{class:"form-text"},"用户名"),e.withDirectives(e.createElementVNode("input",{"adjust-position":"false",class:e.normalizeClass(["form-field-input form-field-username",{"edit-input-focus":p.value}]),"onUpdate:modelValue":n[0]||(n[0]=e=>u.value=e),onFocus:n[1]||(n[1]=e=>p.value=!0),onBlur:n[2]||(n[2]=e=>p.value=!1)},null,34),[[e.vModelText,u.value]])]),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"form-field"},[e.createElementVNode("view",{class:"form-text"},"邮箱"),e.withDirectives(e.createElementVNode("input",{"adjust-position":"false",class:e.normalizeClass(["form-field-input form-field-emile",{"edit-input-focus":m.value}]),"onUpdate:modelValue":n[3]||(n[3]=e=>d.value=e),onFocus:n[4]||(n[4]=e=>m.value=!0),onBlur:n[5]||(n[5]=e=>m.value=!1)},null,34),[[e.vModelText,d.value]])])]),e.createElementVNode("view",{class:"prompt-content"},"*保存后再返回哟")])])],64)}}},[["__scopeId","data-v-8fad524d"]]),ke=E({__name:"ContactPages",setup(n){const s=le(),o=()=>{uni.navigateBack({delta:1,fail(){uni.reLaunch({url:"/pages/Chat/Chat"})}})},i=(e,t="")=>{uni.setStorageSync("chatType",e),t&&uni.setStorageSync("currentSessionId",t),uni.reLaunch({url:"/pages/Chat/Chat"})},r=e.ref(0),l=e.reactive([{name:"contacts",label:"通讯录",icon:"📞"},{name:"createGroup",label:"新建群聊",icon:"👥"},{name:"addFriend",label:"添加好友",icon:"➕"},{name:"friendRequest",label:"好友申请",icon:"📨"}]),c=e=>{r.value=e.detail.current},u=e.ref(""),d=e.ref(""),p="宇恒一号",v=e.ref([]),g=async()=>{try{t("log","at pages/ContactPages/ContactPages.vue:442","开始获取好友列表"),u.value=V();const e=await h(u.value);d.value=e._id,t("log","at pages/ContactPages/ContactPages.vue:446","UserId.value:",d.value);const a=await te(d.value);t("log","at pages/ContactPages/ContactPages.vue:448","friendList:",a),a&&a.length?v.value=await w(a):(v.value=[],t("log","at pages/ContactPages/ContactPages.vue:453","好友列表为空"))}catch(e){t("error","at pages/ContactPages/ContactPages.vue:456","获取好友列表失败:",e),v.value=[]}},w=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.receiver)),a=await m(u.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.receiver);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/ContactPages/ContactPages.vue:477","获取好友头像失败",a),e}};e.onMounted((async()=>{await g(),await k(),await L(),s.isConnected||(u.value&&d.value?s.connect({token:u.value,UserId:d.value}):t("warn","at pages/ContactPages/ContactPages.vue:341","Token或UserId未准备好"))}));const y=e.ref([]),k=async()=>{try{t("log","at pages/ContactPages/ContactPages.vue:494","开始获取群聊列表"),u.value=V();const e=await h(u.value);d.value=e._id,t("log","at pages/ContactPages/ContactPages.vue:498","UserId.value:",d.value),y.value=await ae(d.value)}catch(e){t("error","at pages/ContactPages/ContactPages.vue:501","获取群聊列表失败:",e),y.value=[]}},_=e.ref(""),b=e.ref(),E=async()=>{try{if(!_.value)return void uni.showToast({title:"群名称不能为空",icon:"none"});if(0===N.value.length)return void uni.showToast({title:"请选择群成员",icon:"none"});await new Promise(((e,a)=>{if(s.isConnected)return void e();if(!u.value||!d.value)return void a(new Error("Token或UserId未准备好"));t("log","at pages/ContactPages/ContactPages.vue:522","friendSocket 未连接,正在建立连接..."),s.connect({token:u.value,UserId:d.value});const n=setInterval((()=>{s.isConnected&&(clearInterval(n),t("log","at pages/ContactPages/ContactPages.vue:531","friendSocket 连接已建立"),e())}),100);setTimeout((()=>{clearInterval(n),s.isConnected||a(new Error("连接超时"))}),1e4)}));const e=N.value.map((e=>e.id));b.value={version:"1.1",body:{command:3,userIds:e,message:"我来邀请你们了",sender:d.value,callBackMessage:!0,groupName:_.value,teamCreateReq:{access_token:u.value}}};await s.send(b.value)?await C():t("log","at pages/ContactPages/ContactPages.vue:587","发送新建群聊消息失败")}catch(e){t("log","at pages/ContactPages/ContactPages.vue:590",e),uni.showToast({title:`新建群聊失败${e}`,icon:"none"})}},C=()=>new Promise(((a,n)=>{const o=setTimeout((()=>{n(new Error("超时未返回群聊创建结果"))}),18e4),i=e.watch((()=>s.command),(async e=>{if(t("log","at pages/ContactPages/ContactPages.vue:609","创建一个一次性监听器"),e&&3===s.command){t("log","at pages/ContactPages/ContactPages.vue:611","监听到command的值是3,检查群聊是否创建成功",s.command);try{await k();const e=y.value.find((e=>e.id===s.groupId));e?(t("log","at pages/ContactPages/ContactPages.vue:618","✅ 新建群聊成功",e),N.value=[],r.value=0):t("log","at pages/ContactPages/ContactPages.vue:623","❌ 新建群聊失败 / 群组不存在")}catch(a){t("error","at pages/ContactPages/ContactPages.vue:627","保存AI回复失败:",a),n(a)}finally{s.command=null,s.groupId=null,i(),clearTimeout(o)}}}))})),N=e.ref([]),S=e.ref(!1),B=e.ref(""),T=e.ref([]),D=async()=>{if(!B.value.trim())return void(T.value=[]);const e=B.value.toLowerCase().trim();T.value=await f(u.value,e),t("log","at pages/ContactPages/ContactPages.vue:676","searchResultList.value:",JSON.stringify(T.value))},z=()=>{S.value=!S.value},I=e.ref(null),P=()=>{I.value=null,j.value=!1},A=e.ref("");e.ref(!1),e.ref(!1);const j=e.ref(!1),F=e.ref([]),L=async()=>{try{if(!d.value)return;const e=await(async e=>new Promise(((t,a)=>{uni.request({url:`${ee}/api/friendship/getFriendship`,method:"POST",data:{current:1,size:100,sendId:e},success:e=>{var n;if(200===e.statusCode){const s=e.data;if(0===(null==s?void 0:s.code)||"成功"===(null==s?void 0:s.msg)){const e=(null==(n=null==s?void 0:s.data)?void 0:n.records)||[];t(e)}else{const t=e.data.msg||"获取添加我的好友出错啦";a(t)}}else a(`获取添加我的好友失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})))(d.value);e&&e.length?F.value=await O(e):F.value=[]}catch(e){t("error","at pages/ContactPages/ContactPages.vue:732","获取好友申请列表失败:",e),F.value=[]}},O=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.sendId)),a=await m(u.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.sendId);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/ContactPages/ContactPages.vue:751","获取申请人头像失败",a),e}},M=async()=>{if(j.value)try{const e=I.value.sendId,t=A.value||I.value.friendNickName||"",a=I.value.sessionId||Date.now(),n=I.value.id;await(async e=>new Promise(((t,a)=>{uni.request({url:`${ee}/api/chatList/save`,method:"POST",header:{"Content-Type":"application/json"},data:e,success:e=>{if(200===e.statusCode){const n=e.data;if(0===(null==n?void 0:n.code)||"成功"===(null==n?void 0:n.msg))t("保存好友成功");else{const e=(null==n?void 0:n.msg)||"保存好友出错啦";a(e)}}else a(`保存好友失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})))([{friendNickName:t,sender:d.value,receiver:e,sessionId:a,friendRelationshipId:n},{friendNickName:"",sender:e,receiver:d.value,sessionId:a,friendRelationshipId:n}]),uni.showToast({title:"已同意好友申请",icon:"none"});const s=F.value.find((t=>t.sendId===e));s&&(s.status=1),P(),await g()}catch(e){t("error","at pages/ContactPages/ContactPages.vue:795","同意好友申请失败:",e),uni.showToast({title:"操作失败",icon:"none"})}else try{const e=I.value._id,a=await(async(e,a,n)=>new Promise(((s,o)=>{t("log","at utils/friend-api.js:239","进入sendFriendRequest"),uni.request({url:`${ee}/api/friendship/saveShip`,method:"POST",data:{sendId:e,friendNickName:a,recipientId:n},success:e=>{if(200===e.statusCode){const t=e.data;if(0===(null==t?void 0:t.code)||"成功"===(null==t?void 0:t.msg))s("已成功发送好友申请");else{const t=e.data.msg||"发送好友申请出错啦";o(t)}}else o(`发送好友申请失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(d.value,A.value,e);uni.showToast({title:a,icon:"none"}),P()}catch(e){t("error","at pages/ContactPages/ContactPages.vue:806","发送好友申请失败:",e),uni.showToast({title:"发送申请失败",icon:"none"})}};return(n,s)=>{const u=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),I.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay"},[e.createElementVNode("view",{class:"popup-card"},[e.createElementVNode("view",{class:"close-popup-card",onClick:P},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},e.toDisplayString(j.value?"通过好友申请":"申请添加朋友"),1),e.createElementVNode("view",{class:"friend-card"},[e.createElementVNode("view",{class:"friend-card-left"},[I.value.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:I.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(I.value.username),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(I.value.sessionId),1)])]),e.createElementVNode("view",{class:"nickname-wrapper"},[e.createElementVNode("view",null,"好友备注"),e.withDirectives(e.createElementVNode("input",{class:"input-nickname",placeholder:"请输入好友名称","onUpdate:modelValue":s[0]||(s[0]=e=>A.value=e)},null,512),[[e.vModelText,A.value]])]),e.createElementVNode("view",{class:"text-btn confirm-btn",onClick:M},e.toDisplayString(j.value?"确认通过":"发送申请"),1)])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"tabbar-page page-container"},[e.createElementVNode("swiper",{class:"content-swiper",current:r.value,duration:300,onChange:c},[e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"通讯录")]),e.createElementVNode("view",{class:"tabpage-body"},[e.createElementVNode("scroll-view",{class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[e.createElementVNode("view",{class:"friend-card",onClick:s[1]||(s[1]=e=>i(0))},[e.createElementVNode("view",{class:"friend-card-left"},[e.createElementVNode("view",{class:"friend-avatar",style:{"background-color":"#38bdf8"}},[e.createElementVNode("view",{class:"iconfont icon-Robot",style:{"font-size":"80rpx",color:"#fff"}})])]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(p),1),e.createElementVNode("view",{class:"friend-label"})]),e.createElementVNode("view",{class:"friend-card-right"},[e.createVNode(u,{type:"right"})])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:t.sessionId,onClick:e=>i(t.type,t.sessionId)},[e.createElementVNode("view",{class:"friend-card-left"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(t.friendNickName),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(t.sessionId),1)]),e.createElementVNode("view",{class:"friend-card-right"},[e.createVNode(u,{type:"right"})])],8,["onClick"])))),128)),e.createElementVNode("view",null,"群聊"),e.createElementVNode("view",{class:"solid-line"}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:t.id,onClick:e=>i(t.type,t.id)},[e.createElementVNode("view",{class:"friend-card-left"},[e.createElementVNode("view",{class:"friend-avatar",style:{"background-color":"#ffaaff"}},[e.createElementVNode("view",{class:"iconfont icon-qunliao",style:{"font-size":"80rpx",color:"#fff"}})])]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(t.createTime),1)]),e.createElementVNode("view",{class:"friend-card-right"},[e.createVNode(u,{type:"right"})])],8,["onClick"])))),128))])])])])]),e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"新建群聊")]),e.createElementVNode("view",{class:"tabpage-body"},[e.createElementVNode("view",{class:"group-info"},[e.createElementVNode("view",{class:"group-name"},[e.createElementVNode("view",null,"群名称"),e.withDirectives(e.createElementVNode("input",{class:"input",placeholder:"请输入群名称","onUpdate:modelValue":s[2]||(s[2]=e=>_.value=e)},null,512),[[e.vModelText,_.value]])]),e.createElementVNode("view",{class:"group-member-wrapper"},[e.createElementVNode("view",{class:"member-title"},"群成员"),e.createElementVNode("view",{class:"group-ismember-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"group-ismember-info",key:a},[e.createElementVNode("view",{class:"group-ismember-name"},e.toDisplayString(t.friendNickName),1)])))),128))])]),e.createElementVNode("view",{class:"create-group-btn",onClick:E},"创建群聊")]),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("scroll-view",{class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,(a=>{var n;return e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:a.receiver},[e.createElementVNode("view",{class:"friend-card-left"},[a.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:a.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(a.friendNickName),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(a.email),1)]),e.createElementVNode("view",{class:"friend-card-right",onClick:e=>(e=>{t("log","at pages/ContactPages/ContactPages.vue:648","选择的好友id:",e),t("log","at pages/ContactPages/ContactPages.vue:649","selectGroupMember.value=",JSON.stringify(N.value));const a=N.value.findIndex((t=>t.id===e));if(-1===a){const t=v.value.find((t=>t.receiver===e));t&&N.value.push({id:t.receiver,friendNickName:t.friendNickName})}else N.value.splice(a,1)})(a.receiver)},[e.createElementVNode("view",{class:"friend-checkbox"},[(null==(n=N.value)?void 0:n.find((e=>e.id===a.receiver)))?(e.openBlock(),e.createBlock(u,{key:0,type:"checkmarkempty"})):e.createCommentVNode("",!0)])],8,["onClick"])])})),128))])])])])]),e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"添加好友")]),e.createElementVNode("view",{class:"tabpage-body"},[e.createElementVNode("view",{class:"search-warpper"},[e.withDirectives(e.createElementVNode("input",{class:e.normalizeClass(["search-file-input",{active:S.value}]),onFocus:z,onBlur:z,"onUpdate:modelValue":s[3]||(s[3]=e=>B.value=e),"confirm-type":"search",onConfirm:D},null,34),[[e.vModelText,B.value]]),e.createElementVNode("view",{class:"iconfont icon-sousuo",onClick:D})]),B.value?T.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"search-result"},[e.createElementVNode("scroll-view",{class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,(a=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:a.id},[e.createElementVNode("view",{class:"friend-card-left"},[e.createElementVNode("view",{class:"friend-avatar"},[e.createElementVNode("image",{class:"friend-avatar",src:a.avatar,mode:"aspectFill"},null,8,["src"])])]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(a.nickname),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(a.email),1)]),e.createElementVNode("view",{class:"friend-card-right",onClick:e=>(e=>{const a=T.value.find((t=>t._id===e));a?I.value={...a}:(t("warn","at pages/ContactPages/ContactPages.vue:697","未找到该好友"),I.value=null)})(a._id)},[e.createElementVNode("view",{class:"add-btn text-btn"},"添加")],8,["onClick"])])))),128))])])])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"no-result"},"未找到相关用户,请尝试其他关键词")):(e.openBlock(),e.createElementBlock("view",{key:0,class:"search-tip"},"请输入用户名或邮箱进行搜索"))])])]),e.createElementVNode("swiper-item",{class:"content-swiper-item"},[e.createElementVNode("view",{class:"tabpage-containner"},[e.createElementVNode("view",{class:"tabpage-header"},[e.createElementVNode("view",{class:"iconfont icon-fanhui",onClick:o}),e.createElementVNode("view",{class:"tabpage-title"},"好友申请")]),e.createElementVNode("view",{class:"tabpage-body"},[F.value.length?(e.openBlock(),e.createElementBlock("scroll-view",{key:1,class:"group-member",direction:"vertical","scroll-y":"true"},[e.createElementVNode("view",{class:"friend-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"friend-card",key:t.id},[e.createElementVNode("view",{class:"friend-card-left"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-avatar"},[e.createVNode(u,{type:"person-filled",size:"100rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"friend-card-middle"},[e.createElementVNode("view",{class:"friend-name"},e.toDisplayString(t.friendNickName||t.sendId),1),e.createElementVNode("view",{class:"friend-label"},e.toDisplayString(t.message||"请求添加你为好友"),1)]),e.createElementVNode("view",{class:"friend-card-right"},[0===t.state?(e.openBlock(),e.createElementBlock("view",{key:0,class:"friend-option"},[e.createElementVNode("view",{class:"agree-btn text-btn",onClick:e=>(e=>{j.value=!0,I.value={...e,username:e.friendNickName||e.sendId}})(t)},"同意",8,["onClick"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"friend-status agreed"},"已同意"))])])))),128))])])):(e.openBlock(),e.createElementBlock("view",{key:0,class:"no-result"},"暂无好友申请"))])])])],40,["current"]),e.createElementVNode("view",{class:"bottom-tabbar"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:t.name,onClick:e=>(e=>{r.value=e})(a),class:"tab-item"},[e.createElementVNode("view",{class:"tab-icon"},e.toDisplayString(t.icon),1),e.createElementVNode("view",{class:"tab-label"},e.toDisplayString(t.label),1)],8,["onClick"])))),128))])])],64)}}},[["__scopeId","data-v-d6fd7c06"]]),_e=E({__name:"TemplateSpace",setup(a){const n=e=>{if(!e)return"";const t=Math.floor(e),a=new Date(1e3*t);return`${a.getFullYear()}-${(a.getMonth()+1).toString().padStart(2,"0")}-${a.getDate().toString().padStart(2,"0")} ${a.getHours().toString().padStart(2,"0")}:${a.getMinutes().toString().padStart(2,"0")}:${a.getSeconds().toString().padStart(2,"0")}`},s=e=>{if(!e||0===e)return"0 B";const t=["B","KB","MB","GB","TB"];let a=e,n=0;for(;a>=1024&&n{t("log","at pages/WorkSpace/TemplateSpace/TemplateSpace.vue:188","点击了编辑模板")},r=e.ref(""),l=e.ref([]),c=e=>{r.value=e,"all"===e&&(d.value="全部模板",l.value=k.value),"like"===e&&(d.value="收藏模板",l.value=k.value.filter((e=>!0===e.is_favorite)))},u=e.ref(""),d=e.ref("模板区"),p=e.ref(!1),h=e.ref([]),m=()=>{p.value&&(h.value=[]),p.value=!p.value},f=e.ref(!1),v=()=>{f.value=!f.value},g=e.ref(""),w=e.ref(!1),y=()=>{w.value=!w.value},k=e.ref([{name:"SKILL.md",type:"file",path:"SKILL.md",children:[],file_count:0,directory_count:0,size:4768,modified_time:1776827361.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"该回家看了的法国红酒看来法帝国海军快来尝尝v吧给v复仇计划曝光vi计划日方提供与i哦的风格和健康"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"的法国红酒看来法帝国海军快来尝尝v吧给"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:""},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"},{name:"222.md",type:"file",path:"222.md",children:[],file_count:0,directory_count:0,size:5558,modified_time:1776827666.9123552,extension:".md",is_favorite:!1,usage_count:0,sort:0,content:"khgvshbbthvgbihepiubjhrviifdhiuhrviuehrviuawhiuvrhy"}]),_=()=>{p.value?h.value.length===l.value.length?h.value=[]:h.value=l.value.map((e=>e.id)):(!p.value&&l.value&&(l.value=[],r.value="",d.value="模板区"),p.value||l.value||uni.navigateBack({delta:1,fail(){t("log","at pages/WorkSpace/TemplateSpace/TemplateSpace.vue:468","返回失败,进入兜底跳转"),uni.reLaunch({url:"/pages/Chat/Chat"})}}))};return(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"popup-overlay"},[e.createElementVNode("view",{class:"popup-card"},[e.createElementVNode("view",{class:"close-popup-card"},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"编辑模板"),e.createElementVNode("view",{class:"edit-template-wrapper"},[e.createElementVNode("view",{class:"edit-template-name"},[e.createElementVNode("view",null,"模板名称"),e.withDirectives(e.createElementVNode("input",{"placeholder-style":"请输入模板名称","onUpdate:modelValue":a[0]||(a[0]=e=>o.value=e)},null,512),[[e.vModelText,o.value]])]),e.createElementVNode("view",{class:"edit-template-name"},[e.createElementVNode("view",null,"模板内容"),e.createElementVNode("view",{class:"markdown-editor-pane"},[e.createElementVNode("view",{class:"markdown-pane-header"}," 编辑 "),e.createElementVNode("textarea")]),e.createElementVNode("view",{class:"markdown-preview-pane"},[e.createElementVNode("view",{class:"markdown-pane-header"}," 预览 "),e.createElementVNode("view")])])])])]),e.createElementVNode("view",{class:"workspace-container page-container"},[e.createElementVNode("view",{class:"workspace-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:a[1]||(a[1]=(...e)=>_&&_(...e))},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"}),e.createElementVNode("view",{class:"navbar-before-title workspace-text"},e.toDisplayString(p.value?"全选":u.value),1)]),e.createElementVNode("view",{class:"navbar-title workspace-text"},e.toDisplayString(d.value),1),r.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-right"},[p.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-right-text workspace-text",onClick:a[2]||(a[2]=e=>m())}," 完成")):(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["iconfont icon-gengduo",f.value?"menu-open":"custom-navbar-icon"]),onClick:v},null,2))])):e.createCommentVNode("",!0),f.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:a[3]||(a[3]=e=>{m(),v()})},"选择"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item"},"新建模板"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item"},"上传模板")])):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"search-file-warpper"},[e.createElementVNode("view",{class:"search-file"},[e.createElementVNode("view",{class:"iconfont icon-sousuo"}),e.withDirectives(e.createElementVNode("input",{class:"search-file-input",placeholder:"搜索",onFocus:y,"onUpdate:modelValue":a[4]||(a[4]=e=>g.value=e)},null,544),[[e.vModelText,g.value]])]),w.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"cancel-search",onClick:y},"取消")):e.createCommentVNode("",!0)])]),r.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-grid"},[e.createElementVNode("view",{class:"folder-item",onClick:a[5]||(a[5]=e=>c("all"))},[e.createElementVNode("view",{class:"iconfont icon-a-wenjianjiawenjian folder-item-style"}),e.createElementVNode("view",{class:"folder-name"},"全部模板")]),e.createElementVNode("view",{class:"folder-item",onClick:a[6]||(a[6]=e=>c("like"))},[e.createElementVNode("view",{class:"iconfont icon-a-wenjianjiawenjian folder-item-style"}),e.createElementVNode("view",{class:"folder-name"},"收藏模板")])])),r.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"workspace-content"},[0===l.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createTextVNode(" 暂无模板 ")])):e.createCommentVNode("",!0),l.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:1,class:"template-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"template-card",key:a},[e.createElementVNode("view",{class:"template-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"template-content"},[e.createElementVNode("view",{class:"template-content-text"},e.toDisplayString(t.content),1)]),e.createElementVNode("view",{class:"template-info-wrapper"},[e.createElementVNode("view",{class:"template-item"},[e.createElementVNode("view",{class:"template-time background-style"},e.toDisplayString(n(t.modified_time)),1),e.createElementVNode("view",{class:"template-cache background-style"},e.toDisplayString(s(t.size)),1)]),e.createElementVNode("view",{class:"template-option"},[e.createElementVNode("view",{class:e.normalizeClass(["iconfont",t.is_favorite?"icon-favorite-fill":"icon-favorite"]),onClick:e=>(e=>{let t;"all"===r.value?t=k.value[e]:"like"===r.value&&(t=k.value.filter((e=>e.is_favorite))[e]);t&&(t.is_favorite=!t.is_favorite),"all"===r.value?l.value=[...k.value]:l.value=k.value.filter((e=>e.is_favorite))})(a)},null,10,["onClick"]),e.createElementVNode("view",{class:"iconfont icon-edit-fill",onClick:i}),e.createElementVNode("view",{class:"iconfont icon-choose-fill"})])])])))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["workspace-footer",{"folder-actions":h.value.length>0}])},[e.createElementVNode("view",{class:"iconfont icon-shangchuan"}),e.createElementVNode("view",{class:"iconfont icon-fuzhi"}),e.createElementVNode("view",{class:"iconfont icon-wenjian"}),e.createElementVNode("view",{class:"iconfont icon-del"}),e.createElementVNode("view",{class:"iconfont icon-gengduo"})],2)):e.createCommentVNode("",!0)])],64))}},[["__scopeId","data-v-2acd55d4"]]),be=E({__name:"CloudDatabase",setup(n){const s=e.ref(""),o=e.ref(""),i=e.ref(""),l=e.ref("user"),c=e=>{l.value=e,T.value=[],j()},u=e.ref("云端数据"),d=e.ref(!1),p=e.ref(!1),m=e.ref([]),_=()=>{d.value=!d.value},b=e.computed((()=>{var e;return 0===T.value.length?"":1===T.value.length?"云端数据":(null==(e=T.value[T.value.length-2])?void 0:e.name)||"云端数据"})),E=()=>{T.value.length>0?(T.value.pop(),u.value=T.value.length>0?T.value[T.value.length-1].name:"云端数据",j()):uni.navigateBack({delta:1,fail(){uni.reLaunch({url:"/pages/Chat/Chat"})}})},C=e.ref([]),N=e.ref([]),S=e.ref([]),B=e.ref([]),T=e.ref([]),D=e=>"folder"===e.type,z=e=>{if(D(e))return"icon-a-wenjianjiawenjian";const t=(e=>{if(D(e))return"folder";const t=e.name||"",a=t.lastIndexOf(".");return-1===a?"":t.slice(a).toLowerCase()})(e),a=(e.type||"").toLowerCase(),n={".png":"icon-wenjiantupian",".jpg":"icon-wenjiantupian",".jpeg":"icon-wenjiantupian",".gif":"icon-wenjiantupian",".svg":"icon-SVG",".bmp":"icon-wenjiantupian",".webp":"icon-wenjiantupian",".mp4":"icon-wenjianshipin",".avi":"icon-wenjianshipin",".mov":"icon-wenjianshipin",".wmv":"icon-wenjianshipin",".flv":"icon-wenjianshipin",".mkv":"icon-wenjianshipin",".mp3":"icon-wenjianyinpin",".wav":"icon-wenjianyinpin",".flac":"icon-wenjianyinpin",".aac":"icon-wenjianyinpin",".pdf":"icon-PDF",".doc":"icon-DOC",".docx":"icon-DOC",".xls":"icon-XLS",".xlsx":"icon-XLS",".ppt":"icon-PPT",".pptx":"icon-PPT",".txt":"icon-TXT",".md":"icon-file-markdown-fill",".zip":"icon-wenjianyasuo",".rar":"icon-wenjianyasuo",".7z":"icon-wenjianyasuo",".tar":"icon-wenjianyasuo",".gz":"icon-wenjianyasuo",".js":"icon-JS",".ts":"icon-daimawenjia",".vue":"icon-daimawenjia",".html":"icon-HTML",".css":"icon-CSS",".py":"icon-daimawenjian",".java":"icon-daimawenjian",".json":"icon-JSON"};return t&&n[t]?n[t]:a.startsWith("image/")?"icon-wenjiantupian":a.startsWith("video/")?"icon-wenjianshipin":a.startsWith("audio/")?"icon-wenjianyinpin":a.includes("spreadsheet")||a.includes("excel")?"icon-XLS":a.includes("document")||a.includes("word")?"icon-DOC":a.includes("presentation")||a.includes("powerpoint")?"icon-PPT":a.includes("pdf")?"icon-PDF":a.includes("zip")||a.includes("rar")||a.includes("tar")||a.includes("gzip")?"icon-wenjianyasuo":"icon-qitawenjian"},I=e=>e?e<1024?e+" B":e<1048576?(e/1024).toFixed(1)+" KB":(e/1048576).toFixed(1)+" MB":"",P=e.computed((()=>0===T.value.length?"根目录 (/)":"/"+T.value.map((e=>e.name)).join("/"))),A=e.computed((()=>C.value.length)),j=()=>{const e="user"===l.value?C.value:N.value;if(0===T.value.length)"user"===l.value?S.value=e:B.value=e;else{const e=T.value[T.value.length-1].children||[];"user"===l.value?S.value=e:B.value=e}},F=async()=>{try{s.value=V();const e=await h(s.value);o.value=e._id,i.value=uni.getStorageSync("workspace_id")||"";const t=await w(s.value,"user");C.value=t||[],"user"===l.value&&(S.value=t||[])}catch(e){t("error","at pages/CloudDatabase/CloudDatabase.vue:689","获取文件列表失败:",e),C.value=[],S.value=[]}},L=async e=>{try{e=null==e?"":String(e);const a=await w(s.value,"team","/",e);t("log","at pages/CloudDatabase/CloudDatabase.vue:700","团队云端文件:",JSON.stringify(a)),N.value=a||[],B.value=a||[]}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:704","获取团队文件列表失败:",a),N.value=[],B.value=[]}},O=e=>{D(e)?(T.value.push({path:e.path,name:e.name,children:e.children||[]}),u.value=e.name,j()):$(e)},M=e=>{if(p.value){const t=m.value.indexOf(e.id);return void(-1!==t?m.value.splice(t,1):m.value.push(e.id))}const t=D(e)?["重命名","删除"]:["下载","重命名","删除"];uni.showActionSheet({itemList:t,success:t=>{if(D(e))switch(t.tapIndex){case 0:W(e);break;case 1:q(e)}else switch(t.tapIndex){case 0:$(e);break;case 1:W(e);break;case 2:q(e)}}})},$=async e=>{var a,n;if(D(e))uni.showToast({title:"暂不支持下载目录",icon:"none"});else try{uni.showLoading({title:"获取下载链接..."});const t=await(a=s.value,n=e.id,new Promise(((e,t)=>{uni.request({url:`${r}/cloud_api/file/download`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:a,file_id:n},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.data.download_url);else{const e=(null==n?void 0:n.error)||"获取云端文件url出错啦";t(e)}}else t(`获取云端文件url失败:${a.statusCode}`)},fail:e=>{const a=e.errMsg||"网络错误";t(a)}})})));if(uni.hideLoading(),!t)return void uni.showToast({title:"获取下载链接失败",icon:"error"});uni.showLoading({title:"下载中..."}),uni.downloadFile({url:t,success:e=>{if(uni.hideLoading(),200===e.statusCode){const t=e.tempFilePath;R(t)}else uni.showToast({title:"下载失败",icon:"error"})},fail:()=>{uni.hideLoading(),uni.showToast({title:"下载失败,请重试",icon:"error"})}})}catch(o){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:821","下载失败:",o),uni.showToast({title:"下载失败,请重试",icon:"error"})}},R=e=>{uni.openDocument({filePath:e,success:()=>uni.showToast({title:"打开成功",icon:"success"}),fail:a=>{t("error","at pages/CloudDatabase/CloudDatabase.vue:838","打开文件失败:",a),U(e)}})},U=e=>{plus.runtime.openFile(e,{},(e=>{t("log","at pages/CloudDatabase/CloudDatabase.vue:850","文件打开成功")}))},W=e=>{uni.showModal({title:"重命名",content:"请输入新名称",editable:!0,placeholderText:e.name,success:e=>{e.confirm&&e.content&&(uni.showToast({title:"重命名成功",icon:"success"}),H())}})},q=e=>{const a=D(e)?`确定要删除目录"${e.name}"吗?目录内所有文件将被一并删除。`:`确定要删除文件"${e.name}"吗?`;uni.showModal({title:"删除确认",content:a,confirmText:"删除",confirmColor:"#e74c3c",success:async a=>{if(a.confirm){uni.showLoading({title:"删除中..."});try{await(n=s.value,o=e.id,new Promise(((e,t)=>{uni.request({url:`${r}/cloud_api/file/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:n,file_id:o},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.message);else{const e=(null==n?void 0:n.error)||"删除云端文件出错啦";t(e)}}else t(`删除云端文件失败:${a.statusCode}`)},fail:e=>{const a=e.errMsg||"网络错误";t(a)}})}))),uni.hideLoading(),uni.showToast({title:"删除成功",icon:"success"}),H()}catch(l){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:916","deleteCloudFile 失败,尝试 daleteWorkspace:",l);try{const t=e.path||"/"+e.name;i.value&&await v(s.value,i.value,t),uni.showToast({title:"删除成功",icon:"success"}),H()}catch(c){t("error","at pages/CloudDatabase/CloudDatabase.vue:928","删除失败:",c),uni.showToast({title:"删除失败,请重试",icon:"error"})}}}var n,o}})},H=async()=>{"user"===l.value?await F():await L(Se.value)},Z=e.ref(!1),J=e.ref(""),X=()=>{Z.value=!1,J.value=""},Y=async()=>{const e=J.value.trim();if(e)try{if(i.value){const t=("根目录 (/)"===P.value?"/":P.value)+e;await g(s.value,i.value,t)}uni.showToast({title:"创建成功",icon:"success"}),X(),H()}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:985","创建文件夹失败:",a),uni.showToast({title:"创建失败,请重试",icon:"error"})}else uni.showToast({title:"请输入目录名称",icon:"none"})},G=e.ref(!1),K=e.ref("/"),Q=()=>{G.value=!0,K.value="/"},ee=()=>{G.value=!1},te=()=>{K.value.trim()||(K.value="/"),G.value=!1,ae()},ae=()=>{ve({count:10,type:"all",success:e=>{const t=(e.tempFiles||[]).map((e=>({tempFilePath:e.path||e.tempFilePath,name:e.name})));0!==t.length?ne(t):uni.showToast({title:"未选择文件",icon:"none"})},fail:e=>{t("error","at pages/CloudDatabase/CloudDatabase.vue:1035","选择文件失败:",e)}})},ne=async e=>{uni.showLoading({title:"上传中..."});try{const t=K.value.trim()||"/",a="user"===l.value?"user":"team",n="team"===l.value?Se.value:"";await((e,t,a,n,s)=>new Promise(((o,i)=>{const l=null==s?"":String(s);uni.uploadFile({url:`${r}/cloud_api/file/upload`,method:"POST",header:{},formData:{access_token:e,path:a||"/",type:t,team_id:l},files:n.map((e=>({uri:e.tempFilePath,name:"files"}))),success:e=>{if(200===e.statusCode)try{const t=JSON.parse(e.data);if(t.success)o(t.message);else{const e=(null==t?void 0:t.error)||"获取云端文件url出错啦";i(e)}}catch(t){i("接口返回数据格式异常")}else i(`获取云端文件url失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(s.value,a,t,e,n),uni.hideLoading(),uni.showToast({title:"上传成功",icon:"success"}),H()}catch(a){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1061","上传文件失败:",a),uni.showToast({title:"上传失败,请重试",icon:"error"})}},se=e.ref([]),oe=e.ref(!1),ie=e.computed((()=>se.value)),re=e.computed((()=>se.value.filter((e=>e.team_id&&String(e.team_id)===String(Se.value))))),le=e.ref(!1),ce=e.ref(""),ue=async()=>{oe.value=!0;try{const e=V(),t=await(e=>new Promise(((t,a)=>{uni.request({url:`${r}/cloud_api/database/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e},success:e=>{if(200===e.statusCode){const n=e.data;if(n.success)t(n.databases);else{const e=(null==n?void 0:n.error)||"获取用户可访问的数据库列表出错啦";a(e)}}else a(`获取用户可访问的数据库列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})))(e);se.value=t||[]}catch(e){t("error","at pages/CloudDatabase/CloudDatabase.vue:1087","获取数据库列表失败:",e),se.value=[]}finally{oe.value=!1}},de=()=>{le.value=!0,ce.value=""},pe=()=>{le.value=!1,ce.value=""},he=async()=>{const e=ce.value.trim();if(e){uni.showLoading({title:"创建中..."});try{const t=V();await((e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/cloud_api/database/create`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_name:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.message);else{const e=(null==t?void 0:t.error)||"创建数据库出错啦";n(e)}}else n(`创建数据库失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(t,e),uni.hideLoading(),uni.showToast({title:"创建成功",icon:"success"}),pe(),await ue()}catch(a){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1118","创建数据库失败:",a),uni.showToast({title:"创建失败,请重试",icon:"error"})}}else uni.showToast({title:"请输入数据库名称",icon:"none"})},me=e.ref(!1),fe=e.ref(""),ge=e.ref(""),we=()=>{me.value=!0,fe.value="",ge.value=""},ye=()=>{me.value=!1},ke=()=>{ve({count:1,type:"all",success:e=>{const t=e.tempFiles[0];fe.value=t.name||"unknown",ge.value=t.path},fail:e=>{t("error","at pages/CloudDatabase/CloudDatabase.vue:1147","选择文件失败:",e),uni.showToast({title:"选择文件失败",icon:"none"})}})},_e=async()=>{var e;if(!ge.value)return void uni.showToast({title:"请选择数据库文件",icon:"none"});const a=null==(e=fe.value.split(".").pop())?void 0:e.toLowerCase();if(["db","sqlite","sqlite3"].includes(a)){uni.showLoading({title:"上传中..."});try{const e=V();await((e,t)=>new Promise(((a,n)=>{const s="string"==typeof t?t:t.tempFilePath||t.path||t,o="string"==typeof t?t.split("/").pop()||"database.db":t.name||"database.db";uni.uploadFile({url:`${r}/cloud_api/database/upload/db`,method:"POST",header:{},formData:{access_token:e},file:{name:o,uri:s},files:[{name:"file",uri:s}],success:e=>{if(200===e.statusCode)try{const t=JSON.parse(e.data);if(t.success)a(t.message);else{const e=(null==t?void 0:t.error)||"上传db出错啦";n(e)}}catch(t){n("接口返回数据格式异常")}else n(`上传db失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(e,ge.value),uni.hideLoading(),uni.showToast({title:"上传成功",icon:"success"}),ye(),await ue()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1175","上传数据库失败:",n),uni.showToast({title:"上传失败,请重试",icon:"error"})}}else uni.showToast({title:"仅支持 .db / .sqlite / .sqlite3 文件",icon:"none"})},be=e=>{uni.showModal({title:"删除数据库",content:`确定要删除数据库"${e.database_name}"吗?此操作不可恢复。`,success:async a=>{if(a.confirm){uni.showLoading({title:"删除中..."});try{const t=V();await((e,t)=>new Promise(((a,n)=>{uni.request({url:`${r}/cloud_api/database/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_id:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.message);else{const e=(null==t?void 0:t.error)||"删除数据库出错啦";n(e)}}else n(`删除数据库失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(t,e.database_id),uni.hideLoading(),uni.showToast({title:"删除成功",icon:"success"}),await ue()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1195","删除数据库失败:",n),uni.showToast({title:"删除失败,请重试",icon:"error"})}}}})},Ee=e=>{uni.navigateTo({url:`/pages/CloudDbDetail/CloudDbDetail?databaseId=${e.database_id}&databaseName=${encodeURIComponent(e.database_name)}&teamId=${e.team_id||""}`})},Ce=e=>{if(!e)return"";const t=new Date(1e3*e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`},Ne=e=>({0:"无权限",1:"只读",2:"读写",3:"管理"}[e]||"未知"),xe=e.ref(!1),Ve=e.ref([]),Se=e.ref(""),Be=e.ref([]),Te=e.ref(""),De=e.computed((()=>{if(!Se.value)return"";const e=Ve.value.find((e=>e.id===Se.value));return(null==e?void 0:e.description)||""})),ze=e.computed((()=>{if(!Se.value)return"";const e=Ve.value.find((e=>e.id===Se.value));return(null==e?void 0:e.type)||""})),Ie=e.computed((()=>{if(!o.value||0===Be.value.length)return"member";const e=Be.value.find((e=>e.receiver===o.value||e.user_id===o.value));return(null==e?void 0:e.role)||"member"}));e.computed((()=>{const e=Ie.value;return"admin"===e||"owner"===e}));const Pe=async()=>{try{const e=V(),t=await y(e);Ve.value=t||[]}catch(e){t("error","at pages/CloudDatabase/CloudDatabase.vue:1264","获取团队列表失败:",e),Ve.value=[]}},Ae=async e=>{t("log","at pages/CloudDatabase/CloudDatabase.vue:1270","团队id为",e),Se.value=e;try{const t=V(),a=await k(t,e);Be.value=(a||[]).map((e=>{var t,a,n,s,o;return{id:e._id,receiver:e.user_id,user_id:e.user_id,friendNickName:(null==(t=e.user)?void 0:t.username)||"",username:(null==(a=e.user)?void 0:a.username)||"",avatar:(null==(n=e.user)?void 0:n.avatar)||"",email:(null==(s=e.user)?void 0:s.email)||"",role:e.role||(null==(o=e.user)?void 0:o.role)||"member"}}))}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:1287","获取团队成员失败:",a),Be.value=[]}T.value=[],u.value="云端数据",await L(e)},je=async()=>{if(Se.value)try{const e=V(),t=await k(e,Se.value),a=(t||[]).find((e=>e.user_id===o.value)),n=(null==a?void 0:a.role)||"member";if("admin"!==n&&"owner"!==n)return void uni.showToast({title:"仅管理员可管理团队",icon:"none"});Be.value=(t||[]).map((e=>{var t,a,n,s,o;return{id:e._id,receiver:e.user_id,user_id:e.user_id,friendNickName:(null==(t=e.user)?void 0:t.username)||"",username:(null==(a=e.user)?void 0:a.username)||"",avatar:(null==(n=e.user)?void 0:n.avatar)||"",email:(null==(s=e.user)?void 0:s.email)||"",role:e.role||(null==(o=e.user)?void 0:o.role)||"member"}}))}catch(e){return t("error","at pages/CloudDatabase/CloudDatabase.vue:1321","获取团队成员失败:",e),void uni.showToast({title:"获取团队信息失败",icon:"none"})}else if(Ve.value.length>0){await Ae(Ve.value[0].id),xe.value=!0;const e=Be.value.find((e=>(e.receiver||e.user_id)===o.value)),t=(null==e?void 0:e.role)||"member";if("admin"!==t&&"owner"!==t)return xe.value=!1,void uni.showToast({title:"仅管理员可管理团队",icon:"none"})}xe.value=!0},Fe=()=>{xe.value=!1,Te.value="",Je.value=[],Xe.value=!1},Le=e.ref(!1),Oe=e.ref(""),Me=e.ref(""),$e=e.ref(""),Re=()=>{const e=Ve.value.find((e=>e.id===Se.value));e?(Oe.value=e.name||"",Me.value=e.description||"",$e.value=e.type||"",Le.value=!0):uni.showToast({title:"请先选择团队",icon:"none"})},Ue=()=>{Le.value=!1},We=async()=>{const e=Oe.value.trim();if(e){uni.showLoading({title:"修改中..."});try{const t=V();await((e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/team/update`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,...a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"修改团队信息出错啦";s(e)}}else s(`修改团队信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})))(t,Se.value,{team_name:e,team_description:Me.value.trim(),team_type:$e.value.trim()}),uni.hideLoading(),uni.showToast({title:"修改成功",icon:"success"}),Ue(),await Pe(),Se.value=Se.value}catch(a){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1393","修改团队信息失败:",a),uni.showToast({title:"修改失败,请重试",icon:"error"})}}else uni.showToast({title:"请输入团队名称",icon:"none"})},qe=async(e,a)=>{const n=e.friendNickName||e.username||e.name;uni.showModal({title:"admin"===a?"设为管理员":"降为成员",content:`确定将"${n}"${"admin"===a?"设为管理员":"降为普通成员"}吗?`,success:async n=>{if(n.confirm){uni.showLoading({title:"操作中..."});try{const t=V(),n=e.receiver||e.user_id;await((e,t,a,n)=>new Promise(((s,o)=>{uni.request({url:`${r}/cloud_api/team/adjust_member_role`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,user_id:a,role:n},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)s(t.message);else{const e=(null==t?void 0:t.error)||"调整团员身份出错啦";o(e)}}else o(`调整团员身份失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(t,Se.value,n,a),uni.hideLoading(),uni.showToast({title:"已"+("admin"===a?"设为管理员":"降为成员"),icon:"success"}),await Ze()}catch(s){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1418","调整成员身份失败:",s),uni.showToast({title:"操作失败,请重试",icon:"error"})}}}})},He=async e=>{const a=e.friendNickName||e.username||e.name;uni.showModal({title:"移除成员",content:`确定要移除"${a}"吗?`,success:async a=>{if(a.confirm){uni.showLoading({title:"移除中..."});try{const t=V(),a=e.receiver||e.user_id;await((e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/team/remove_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,user_ids:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"移除团队成员出错啦";s(e)}}else s(`移除团队成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})))(t,Se.value,[a]),uni.hideLoading(),uni.showToast({title:"已移除",icon:"success"}),await Ze()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1444","移除团队成员失败:",n),uni.showToast({title:"移除失败,请重试",icon:"error"})}}}})},Ze=async()=>{const e=V(),t=await k(e,Se.value);Be.value=(t||[]).map((e=>{var t,a,n,s;return{id:e._id,receiver:e.user_id,user_id:e.user_id,friendNickName:(null==(t=e.user)?void 0:t.username)||"",username:(null==(a=e.user)?void 0:a.username)||"",avatar:(null==(n=e.user)?void 0:n.avatar)||"",email:(null==(s=e.user)?void 0:s.email)||"",role:e.role||"member"}}))},Je=e.ref([]),Xe=e.ref(!1),Ye=async()=>{const e=Te.value.trim();if(e)try{const t=V(),a=await f(t,e);Je.value=a||[],Xe.value=!0,Je.value.length}catch(a){t("error","at pages/CloudDatabase/CloudDatabase.vue:1486","搜索用户失败:",a),Je.value=[],Xe.value=!0}else uni.showToast({title:"请输入用户名或邮箱",icon:"none"})},Ge=e=>{uni.showModal({title:"添加成员",content:`确定将"${e.username}"添加到当前团队吗?`,success:async a=>{if(a.confirm){uni.showLoading({title:"添加中..."});try{const t=V();await((e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/team/add_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t,user_ids:a,role:"admin"},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"添加团队成员出错啦";s(e)}}else s(`添加团队成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})))(t,Se.value,[e._id]),uni.hideLoading(),uni.showToast({title:"添加成功",icon:"success"}),Te.value="",Je.value=[],Xe.value=!1,await Ze()}catch(n){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1512","添加团队成员失败:",n),uni.showToast({title:"添加失败,请重试",icon:"error"})}}}})},Ke=()=>{const e=Ve.value.find((e=>e.id===Se.value)),a=e?e.name:"当前团队";uni.showModal({title:"删除团队",content:`确定要删除团队"${a}"吗?此操作不可撤销,团队内所有文件和数据将被永久删除。`,confirmText:"删除",confirmColor:"#e74c3c",success:async e=>{if(e.confirm){uni.showLoading({title:"删除中..."});try{await(a=s.value,n=Se.value,new Promise(((e,t)=>{uni.request({url:`${r}/cloud_api/team/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:a,team_id:n},success:a=>{if(200===a.statusCode){const n=a.data;if(n.success)e(n.message);else{const e=(null==n?void 0:n.error)||"删除团队出错啦";t(e)}}else t(`删除团队失败:${a.statusCode}`)},fail:e=>{const a=e.errMsg||"网络错误";t(a)}})}))),uni.hideLoading(),uni.showToast({title:"团队已删除",icon:"success"}),Se.value="",Be.value=[],B.value=[],T.value=[],u.value="云端数据",await Pe(),Fe()}catch(o){uni.hideLoading(),t("error","at pages/CloudDatabase/CloudDatabase.vue:1546","删除团队失败:",o),uni.showToast({title:"删除失败,请重试",icon:"error"})}}var a,n}})};return e.onMounted((async()=>{await F(),await Pe(),await ue()})),(t,n)=>{const s=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),xe.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay",onClick:Fe},[e.createElementVNode("view",{class:"popup-card",onClick:n[1]||(n[1]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:Fe},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"团队管理"),e.createElementVNode("scroll-view",{class:"team-manage-body","scroll-y":""},[0===Be.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},"暂无团队成员")):(e.openBlock(),e.createElementBlock("view",{key:1,class:"member-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Be.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"member-item",key:t._id||t.receiver},[e.createElementVNode("view",{class:"member-avatar"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"default-avatar"},[e.createVNode(s,{type:"person-filled",size:"60rpx",color:"#ffffff"})]))]),e.createElementVNode("view",{class:"member-info"},[e.createElementVNode("view",{class:"member-name"},e.toDisplayString(t.friendNickName||t.username||t.name),1),e.createElementVNode("view",{class:"member-label"},e.toDisplayString(t.email||t.sessionId||""),1)]),e.createElementVNode("view",{class:"member-actions"},[(t.receiver||t.user_id)===o.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["member-role",Ie.value])},e.toDisplayString("owner"===Ie.value?"创建者":"管理员"),3)):"owner"===t.role?(e.openBlock(),e.createElementBlock("view",{key:1,class:"member-role owner"},"创建者")):"admin"===t.role?(e.openBlock(),e.createElementBlock("view",{key:2,class:"member-actions-right"},[e.createElementVNode("view",{class:"member-action-btn demote-admin",onClick:e=>qe(t,"member")},"降为成员",8,["onClick"]),e.createElementVNode("view",{class:"member-action-btn remove-member",onClick:e=>He(t)},"移除",8,["onClick"])])):(e.openBlock(),e.createElementBlock("view",{key:3,class:"member-actions-right"},[e.createElementVNode("view",{class:"member-action-btn set-admin",onClick:e=>qe(t,"admin")},"设为管理",8,["onClick"]),e.createElementVNode("view",{class:"member-action-btn remove-member",onClick:e=>He(t)},"移除",8,["onClick"])]))])])))),128))]))]),e.createElementVNode("view",{class:"invite-section"},[e.createElementVNode("view",{class:"invite-input-wrapper"},[e.withDirectives(e.createElementVNode("input",{class:"invite-input",placeholder:"输入用户名或邮箱搜索","onUpdate:modelValue":n[0]||(n[0]=e=>Te.value=e),onConfirm:Ye},null,544),[[e.vModelText,Te.value]]),e.createElementVNode("view",{class:"invite-btn text-btn",onClick:Ye},"搜索")]),Je.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"search-result-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Je.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"search-result-item",key:t._id,onClick:e=>Ge(t)},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"result-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"result-default-avatar"},[e.createVNode(s,{type:"person-filled",size:"40rpx",color:"#fff"})])),e.createElementVNode("view",{class:"result-info"},[e.createElementVNode("text",{class:"result-name"},e.toDisplayString(t.username),1),e.createElementVNode("text",{class:"result-email"},e.toDisplayString(t.email),1)]),e.createElementVNode("view",{class:"result-add-btn"},"添加")],8,["onClick"])))),128))])):Te.value&&Xe.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"search-empty"},"未找到匹配用户")):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"edit-team-section"},[e.createElementVNode("view",{class:"edit-team-btn",onClick:Re},"修改团队信息")]),e.createElementVNode("view",{class:"delete-team-section"},[e.createElementVNode("view",{class:"delete-team-btn",onClick:Ke},"删除团队")])])])):e.createCommentVNode("",!0),Le.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"popup-overlay",onClick:Ue},[e.createElementVNode("view",{class:"popup-card",onClick:n[4]||(n[4]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:Ue},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"修改团队信息"),e.createElementVNode("view",{class:"edit-team-form"},[e.createElementVNode("view",{class:"form-label"},"团队名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[2]||(n[2]=e=>Oe.value=e),type:"text",placeholder:"输入团队名称"},null,512),[[e.vModelText,Oe.value]])]),e.createElementVNode("view",{class:"form-label"},"团队描述"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[3]||(n[3]=e=>Me.value=e),type:"text",placeholder:"输入团队描述"},null,512),[[e.vModelText,Me.value]])])]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:Ue},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:We},"确认修改")])])])):e.createCommentVNode("",!0),Z.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:"popup-overlay",onClick:X},[e.createElementVNode("view",{class:"popup-card",onClick:n[6]||(n[6]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:X},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"新建"+e.toDisplayString("user"===l.value?"个人":"团队")+"目录",1),e.createElementVNode("view",{class:"new-folder-name"},"目录名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[5]||(n[5]=e=>J.value=e),type:"text",placeholder:"输入目录名称"},null,512),[[e.vModelText,J.value]])]),e.createElementVNode("view",{class:"nf-path-label"},"当前路径"),e.createElementVNode("view",{class:"nf-path-display"},e.toDisplayString(P.value),1),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:X},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:Y},"确认")])])])):e.createCommentVNode("",!0),G.value?(e.openBlock(),e.createElementBlock("view",{key:3,class:"popup-overlay",onClick:ee},[e.createElementVNode("view",{class:"popup-card",onClick:n[8]||(n[8]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:ee},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"上传文件"),e.createElementVNode("view",{class:"upload-path-label"},"上传路径"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[7]||(n[7]=e=>K.value=e),type:"text",placeholder:"输入上传路径,如:/myfolder"},null,512),[[e.vModelText,K.value]])]),e.createElementVNode("view",{class:"upload-path-hint"},"默认为根目录 /,后端会自动创建不存在的文件夹"),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:ee},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:te},"确认上传")])])])):e.createCommentVNode("",!0),le.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:"popup-overlay",onClick:pe},[e.createElementVNode("view",{class:"popup-card",onClick:n[10]||(n[10]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:pe},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"新建个人数据库"),e.createElementVNode("view",{class:"new-folder-name"},"数据库名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[9]||(n[9]=e=>ce.value=e),type:"text",placeholder:"输入数据库名称"},null,512),[[e.vModelText,ce.value]])]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:pe},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:he},"确认")])])])):e.createCommentVNode("",!0),me.value?(e.openBlock(),e.createElementBlock("view",{key:5,class:"popup-overlay",onClick:ye},[e.createElementVNode("view",{class:"popup-card",onClick:n[11]||(n[11]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:ye},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"上传数据库文件"),e.createElementVNode("view",{class:"upload-db-hint"},"支持 .db / .sqlite / .sqlite3 格式的 SQLite 数据库文件"),e.createElementVNode("view",{class:"upload-file-area",onClick:ke},[fe.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"selected-file"},e.toDisplayString(fe.value),1)):(e.openBlock(),e.createElementBlock("view",{key:1,class:"upload-hint"},"点击选择数据库文件"))]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:ye},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:_e},"确认上传")])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"cloud-db-container page-container"},[e.createElementVNode("view",{class:"cloud-db-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:E},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"}),T.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"navbar-before-title"},e.toDisplayString(b.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"navbar-title"},e.toDisplayString(u.value),1),e.createElementVNode("view",{class:"navbar-right"}),d.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:n[12]||(n[12]=e=>{p.value=!p.value,p.value||(m.value=[]),_()})},"选择"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item",onClick:n[13]||(n[13]=e=>{Z.value=!0,J.value="",_()})},"新建文件夹")])):e.createCommentVNode("",!0)]),e.createElementVNode("view",{class:"category-tabs"},[e.createElementVNode("view",{class:e.normalizeClass(["category-tab",{active:"user"===l.value}]),onClick:n[14]||(n[14]=e=>c("user"))}," 个人 ",2),e.createElementVNode("view",{class:e.normalizeClass(["category-tab",{active:"team"===l.value}]),onClick:n[15]||(n[15]=e=>c("team"))}," 团队 ",2)])]),e.createElementVNode("scroll-view",{class:"cloud-db-content","scroll-y":""},["user"===l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("view",{class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"云端文件"),e.createElementVNode("text",{class:"file-count"},e.toDisplayString(A.value>0?"("+A.value+")":""),1)]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("view",{class:"action-btn",onClick:Q},[e.createVNode(s,{type:"upload",size:"16"}),e.createElementVNode("text",null,"上传文件")])])]),e.createElementVNode("view",{class:"section-body"},[0===S.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"暂无云端文件")])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"file-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"file-item",key:t.id,onClick:e=>O(t),onLongpress:e=>M(t)},[e.createElementVNode("view",{class:e.normalizeClass(["file-icon",D(t)?"is-directory":"is-file"])},[e.createElementVNode("view",{class:e.normalizeClass(["iconfont",z(t)])},null,2)],2),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-meta"},[e.createElementVNode("text",{class:"file-type-tag"},e.toDisplayString(D(t)?"目录":"文件"),1),t.size?(e.openBlock(),e.createElementBlock("text",{key:0,class:"file-size"},e.toDisplayString(I(t.size)),1)):e.createCommentVNode("",!0)])],40,["onClick","onLongpress"])))),128))]))])]),e.createElementVNode("view",{class:"section-divider"}),e.createElementVNode("view",{class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"云端数据库"),e.createElementVNode("text",{class:"file-count"},e.toDisplayString(!oe.value&&ie.value.length>0?"("+ie.value.length+")":""),1)]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("view",{class:"action-btn",onClick:we},[e.createVNode(s,{type:"upload",size:"16"}),e.createElementVNode("text",null,"上传数据库")]),e.createElementVNode("view",{class:"action-btn",onClick:de},[e.createVNode(s,{type:"plus",size:"16"}),e.createElementVNode("text",null,"新建数据库")])])]),e.createElementVNode("view",{class:"section-body"},[oe.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"loading-area"},[e.createElementVNode("view",{class:"loading-spinner"}),e.createElementVNode("text",{class:"loading-text"},"加载中...")])):0===ie.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"暂无数据库")])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"table-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ie.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"table-item",key:t.database_id,onClick:e=>Ee(t),onLongpress:e=>be(t)},[e.createElementVNode("view",{class:"table-icon"},[e.createVNode(s,{type:"compose",size:"22",color:"#3b86ff"})]),e.createElementVNode("view",{class:"table-info"},[e.createElementVNode("view",{class:"table-name"},[e.createTextVNode(e.toDisplayString(t.database_name)+" ",1),e.createElementVNode("text",{class:e.normalizeClass(["db-tag",t.team_id?"tag-team":"tag-personal"])},e.toDisplayString(t.team_id?"团队共享":"个人私有"),3)]),e.createElementVNode("view",{class:"table-desc"},e.toDisplayString(t.table_count||0)+" 张表 · "+e.toDisplayString(Ne(t.access_level)),1)]),e.createElementVNode("view",{class:"table-meta"},[e.createElementVNode("text",{class:"table-rows"},e.toDisplayString(Ce(t.modified_time)),1),e.createVNode(s,{type:"right",size:"14",color:"#999"})])],40,["onClick","onLongpress"])))),128))]))])])],64)):e.createCommentVNode("",!0),"team"===l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("view",{class:"section-block team-manage-block",onClick:je},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-qunliao"}),e.createElementVNode("text",null,"团队管理")]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("text",{class:"team-count"},e.toDisplayString(Ve.value.length)+" 个团队",1),e.createVNode(s,{type:"right",size:"14",color:"#999"})])])]),e.createElementVNode("view",{class:"section-divider"}),Ve.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"team-selector"},[e.createElementVNode("scroll-view",{"scroll-x":"",class:"team-scroll"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ve.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["team-chip",{active:Se.value===t.id}]),key:t.id,onClick:e=>Ae(t.id)},e.toDisplayString(t.name),11,["onClick"])))),128))]),ze.value||De.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"team-info"},[ze.value?(e.openBlock(),e.createElementBlock("text",{key:0,class:"team-type-tag"},e.toDisplayString(ze.value),1)):e.createCommentVNode("",!0),De.value?(e.openBlock(),e.createElementBlock("text",{key:1,class:"team-desc-text"},e.toDisplayString(De.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),!Se.value&&Ve.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip select-team-tip"},[e.createElementVNode("view",{class:"iconfont icon-qunliao"}),e.createElementVNode("text",null,"请选择一个团队")])):e.createCommentVNode("",!0),Se.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"团队云端文件")]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("view",{class:"action-btn",onClick:Q},[e.createVNode(s,{type:"upload",size:"16"}),e.createElementVNode("text",null,"上传文件")])])]),e.createElementVNode("view",{class:"section-body"},[0===B.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"}),e.createElementVNode("text",null,"暂无团队云端文件")])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"file-grid"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"file-item",key:t.id,onClick:e=>O(t),onLongpress:e=>M(t)},[e.createElementVNode("view",{class:e.normalizeClass(["file-icon",D(t)?"is-directory":"is-file"])},[e.createElementVNode("view",{class:e.normalizeClass(["iconfont",z(t)])},null,2)],2),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-meta"},[e.createElementVNode("text",{class:"file-type-tag"},e.toDisplayString(D(t)?"目录":"文件"),1),t.size?(e.openBlock(),e.createElementBlock("text",{key:0,class:"file-size"},e.toDisplayString(I(t.size)),1)):e.createCommentVNode("",!0)])],40,["onClick","onLongpress"])))),128))]))])])):e.createCommentVNode("",!0),Se.value?(e.openBlock(),e.createElementBlock("view",{key:3,class:"section-divider"})):e.createCommentVNode("",!0),Se.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"团队云端数据库")])]),e.createElementVNode("view",{class:"section-body"},[oe.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"loading-area"},[e.createElementVNode("view",{class:"loading-spinner"}),e.createElementVNode("text",{class:"loading-text"},"加载中...")])):0===re.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"暂无团队数据库")])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"table-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(re.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"table-item",key:t.database_id,onClick:e=>Ee(t)},[e.createElementVNode("view",{class:"table-icon"},[e.createVNode(s,{type:"compose",size:"22",color:"#3b86ff"})]),e.createElementVNode("view",{class:"table-info"},[e.createElementVNode("view",{class:"table-name"},[e.createTextVNode(e.toDisplayString(t.database_name)+" ",1),e.createElementVNode("text",{class:"db-tag tag-team"},"团队共享")]),e.createElementVNode("view",{class:"table-desc"},e.toDisplayString(t.table_count||0)+" 张表 · "+e.toDisplayString(Ne(t.access_level)),1)]),e.createElementVNode("view",{class:"table-meta"},[e.createElementVNode("text",{class:"table-rows"},e.toDisplayString(Ce(t.modified_time)),1),e.createVNode(s,{type:"right",size:"14",color:"#999"})])],8,["onClick"])))),128))]))])])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0)])])],64)}}},[["__scopeId","data-v-512e8f2e"]]),Ee=E({__name:"CloudDbDetail",props:{databaseId:{type:String,default:""},databaseName:{type:String,default:""},teamId:{type:String,default:""}},setup(n){const s=n,o=e.ref(s.databaseId||""),i=e.ref(s.databaseName||""),l=e.ref(s.teamId||""),c=e.ref(2),u=e.ref(0),d=e.ref([]),p=e.ref(!1),h=e.ref(null),m=e.ref([]),f=e.computed((()=>{var e;if(m.value.length>0){const e=new Set;return m.value.forEach((t=>Object.keys(t).forEach((t=>e.add(t))))),Array.from(e).filter((e=>"_row_id"!==e&&"_id"!==e))}return(null==(e=h.value)?void 0:e.columns)?h.value.columns.map((e=>e.name)).filter((e=>"_row_id"!==e)):[]})),v=e.ref(!1),g=()=>{v.value=!v.value},w=()=>{uni.navigateBack()},k=async()=>{p.value=!0;try{const e=V(),t=await((e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/database/tables`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_id:t,is_detail:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.tables);else{const e=(null==t?void 0:t.error)||"获取用户可访问的数据库列表出错啦";s(e)}}else s(`获取用户可访问的数据库列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})))(e,o.value,!0);d.value=(t||[]).map((e=>({table_name:e.name,row_count:e.row_count||0,columns:e.columns||[]}))),u.value=d.value.length}catch(e){t("error","at pages/CloudDbDetail/CloudDbDetail.vue:282","获取表列表失败:",e),d.value=[]}finally{p.value=!1}},b=async e=>{h.value=e,m.value=[],uni.showLoading({title:"加载中..."});try{const t=V(),a=await((e,t,a,n="20",s="0")=>new Promise(((o,i)=>{uni.request({url:`${r}/cloud_api/database/table/data`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,database_id:t,table_name:a,limit:n,offset:s},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)o(t.data);else{const e=(null==t?void 0:t.error)||"获取表数据出错啦";i(e)}}else i(`获取表数据失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,o.value,e.table_name);m.value=a||[],uni.hideLoading()}catch(t){uni.hideLoading(),uni.showToast({title:"string"==typeof t?t:"加载表数据失败",icon:"none"}),m.value=[]}},E=e=>{uni.showModal({title:"删除表",content:`确定要删除表"${e.table_name}"吗?此操作不可恢复。`,success:async a=>{var n;if(a.confirm){uni.showLoading({title:"删除中..."});try{const t=V();await(async(e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/database/table/drop`,method:"POST",data:{access_token:e,database_id:t,table_name:a},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)n(t.message);else{const e=t.error||"删除数据库中的表出错啦";s(e)}}else s(`删除数据库中的表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})))(t,o.value,e.table_name),uni.hideLoading(),uni.showToast({title:"删除成功",icon:"success"}),(null==(n=h.value)?void 0:n.table_name)===e.table_name&&(h.value=null,m.value=[]),await k()}catch(s){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:335","删除表失败:",s),uni.showToast({title:"删除失败,请重试",icon:"error"})}}}})},C=e=>{const a=e._row_id||e._id;if(!a)return void uni.showToast({title:"无法识别该行",icon:"none"});const n=f.value;if(0===n.length)return void uni.showToast({title:"无可用列",icon:"none"});const s=n[0];uni.showModal({title:`编辑 ${s}`,editable:!0,placeholderText:e[s]||"",content:"",success:async n=>{if(n.confirm&&void 0!==n.content){uni.showLoading({title:"更新中..."});try{const t=V();await((e,t,a,n,s)=>new Promise(((o,i)=>{uni.request({url:`${r}/cloud_api/database/table/update/by/id`,method:"POST",data:{access_token:e,database_id:t,table_name:a,where_data:n,update_data:s},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)o(t.message);else{const e=t.error||"更新表数据出错啦";i(e)}}else i(`更新表数据失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,o.value,h.value.table_name,{_row_id:a},{[s]:n.content}),uni.hideLoading(),uni.showToast({title:"更新成功",icon:"success"}),e[s]=n.content}catch(i){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:397","更新失败:",i),uni.showToast({title:i,icon:"error"})}}}})},N=e.ref(!1),S=e.ref(""),T=e.ref(""),D=e.ref(""),z=()=>{N.value=!1},I=()=>{ve({count:1,type:"all",success:e=>{const t=e.tempFiles[0];T.value=t.name||"unknown",D.value=t.path},fail:e=>{t("error","at pages/CloudDbDetail/CloudDbDetail.vue:434","选择文件失败:",e),uni.showToast({title:"选择文件失败",icon:"none"})}})},P=async()=>{const e=S.value.trim()||"";if(D.value){uni.showLoading({title:"导入中..."});try{const t=V();await((e,t,a,n,s)=>new Promise(((o,i)=>{const l="string"==typeof n?n:n.tempFilePath||n.path||n,c="string"==typeof n?n.split("/").pop()||"file":n.name||"file";uni.uploadFile({url:`${r}/cloud_api/database/import`,method:"POST",header:{},formData:{access_token:e,force_overwrite:t,database_id:a,table_name:s},file:{name:c,uri:l},files:[{name:"file",uri:l}],success:e=>{if(200===e.statusCode)try{const t=JSON.parse(e.data);if(t.success)o(t.message);else{const e=(null==t?void 0:t.error)||"导入文件到数据库出错啦";i(e)}}catch(t){i("接口返回数据格式异常")}else i(`导入文件到数据库失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,!1,o.value,D.value,e),uni.hideLoading(),uni.showToast({title:"导入成功",icon:"success"}),z(),await k()}catch(a){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:474","导入失败:",a),"table_exists"===a?uni.showToast({title:"文件已存在",icon:"error"}):uni.showToast({title:"导入失败,请重试",icon:"error"})}}else uni.showToast({title:"请选择文件",icon:"none"})},A=e.ref(!1),j=e.ref([]),F=async()=>{A.value=!0,uni.showLoading({title:"加载中..."});try{const e=V();let t;t=l.value?await _(e,o.value,"team_id",l.value):await _(e,o.value,"user_id",B());const a=Array.isArray(t)?t:[];j.value=a.map((e=>{var t,a,n;return e.team?{_id:e._id,database_id:e.database_id,access_level:e.access_level,permType:"team_id",id:e.team._id||e.team.id,name:e.team.name}:e.team_id?{database_id:e.database_id,access_level:e.access_level,permType:"team_id",id:e.team_id,name:(null==(t=e.database)?void 0:t.database_name)||""}:{database_id:e.database_id,access_level:e.access_level,permType:"user_id",id:e.user_id||(null==(a=e.database)?void 0:a.user_id)||B(),name:(null==(n=e.database)?void 0:n.database_name)||""}}))}catch(e){t("error","at pages/CloudDbDetail/CloudDbDetail.vue:544","获取权限失败:",e),j.value=[]}uni.hideLoading()},L=()=>{A.value=!1},O=(e,a)=>{if("delete"===a)uni.showModal({title:"移除权限",content:`确定要移除"${e.name}"的权限吗?`,success:async a=>{if(a.confirm){uni.showLoading({title:"移除中..."});try{const t=V();await((e,t,a,n)=>new Promise(((s,o)=>{const i={access_token:e,database_id:t};"user_id"===a?i.user_id=n:"team_id"===a&&(i.team_id=n),uni.request({url:`${r}/cloud_api/database/permission/delete`,method:"POST",data:i,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)s(t.message);else{const e=t.error||"删除 团队/用户 对数据库权限出错啦";o(e)}}else o(`删除 团队/用户 对数据库权限失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";o(t)}})})))(t,o.value,e.permType,e.id),uni.hideLoading(),uni.showToast({title:"已移除",icon:"success"}),await F()}catch(n){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:574","移除权限失败:",n),uni.showToast({title:"操作失败,请重试",icon:"error"})}}}});else{const a=["无权限访问","仅访问","管理员完全控制","团队完全控制"],n=e.access_level||0;uni.showActionSheet({title:"选择权限级别",itemList:a.map(((e,t)=>`${t}. ${e}`)),success:async a=>{const s=a.tapIndex;if(s!==n){uni.showLoading({title:"更新中..."});try{const t=V();await((e,t,a,n,s)=>new Promise(((o,i)=>{const l={access_token:e,database_id:t,access_level:s};"user_id"===a?l.user_id=n:"team_id"===a&&(l.team_id=n),uni.request({url:`${r}/cloud_api/database/permission/update`,method:"POST",data:l,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)o(t.message);else{const e=t.error||"修改/增加 团队/用户 对数据库权限出错啦";i(e)}}else i(`修改/增加 团队/用户 对数据库权限失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";i(t)}})})))(t,o.value,e.permType,e.id,s),uni.hideLoading(),uni.showToast({title:"已更新",icon:"success"}),await F()}catch(i){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:608","更新权限失败:",i),uni.showToast({title:"操作失败,请重试",icon:"error"})}}}})}},M=e.ref(!1),$=e.ref([]),R=e.ref(""),U=()=>{M.value=!1},W=async()=>{R.value?uni.showModal({title:"确认移交",content:"移交后数据库将归属于该团队,确定继续吗?",success:async e=>{if(e.confirm){uni.showLoading({title:"移交中..."});try{const e=V();await(async(e,t,a)=>new Promise(((n,s)=>{uni.request({url:`${r}/cloud_api/database/transfer_to_team`,method:"POST",data:{access_token:e,database_id:t,team_id:a},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)n(t.message);else{const e=t.error||"个人数据库移交团队出错啦";s(e)}}else s(`个人数据库移交团队失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})))(e,o.value,R.value),uni.hideLoading(),uni.showToast({title:"移交成功",icon:"success"}),U(),setTimeout((()=>{uni.navigateBack()}),1e3)}catch(a){uni.hideLoading(),t("error","at pages/CloudDbDetail/CloudDbDetail.vue:670","移交失败:",a),uni.showToast({title:"移交失败,请重试",icon:"error"})}}}}):uni.showToast({title:"请选择目标团队",icon:"none"})},q=e=>({0:"无权限访问",1:"仅访问",2:"管理员完全控制",3:"团队完全控制"}[e]||"未知");return e.onMounted((()=>{var e;const t=getCurrentPages(),a=t[t.length-1],n=(null==(e=a.$page)?void 0:e.options)||a.options||{};o.value=n.databaseId||"",i.value=decodeURIComponent(n.databaseName||"数据库详情"),l.value=n.teamId||"",o.value&&k()})),(n,s)=>{const o=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock("view",{class:"cloud-db-detail-wrapper"},[e.createElementVNode("view",{class:"status-bar"}),N.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"popup-overlay",onClick:z},[e.createElementVNode("view",{class:"popup-card",onClick:s[1]||(s[1]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:z},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"导入文件到数据库"),e.createElementVNode("view",{class:"new-folder-name"},"表名称"),e.createElementVNode("view",{class:"create-folder-name"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":s[0]||(s[0]=e=>S.value=e),type:"text",placeholder:"输入表名称"},null,512),[[e.vModelText,S.value]])]),e.createElementVNode("view",{class:"new-folder-name"},"文件"),e.createElementVNode("view",{class:"upload-file-area",onClick:I},[T.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"selected-file"},e.toDisplayString(T.value),1)):(e.openBlock(),e.createElementBlock("view",{key:1,class:"upload-hint"},"点击选择文件(支持 CSV/Excel/SQLite)"))]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:z},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:P},"确认导入")])])])):e.createCommentVNode("",!0),A.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"popup-overlay",onClick:L},[e.createElementVNode("view",{class:"popup-card",onClick:s[2]||(s[2]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:L},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"权限管理"),e.createElementVNode("scroll-view",{class:"permission-body","scroll-y":""},[0===j.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},"暂无权限记录")):(e.openBlock(),e.createElementBlock("view",{key:1,class:"permission-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"permission-item",key:t._id||t.id},[e.createElementVNode("view",{class:"perm-info"},[e.createElementVNode("text",{class:"perm-type"},e.toDisplayString("team_id"===t.permType?"团队":"个人"),1)]),e.createElementVNode("view",{class:"perm-level"},e.toDisplayString(q(t.access_level)),1),e.createElementVNode("view",{class:"perm-actions"},[e.createElementVNode("view",{class:"perm-action-btn",onClick:e=>O(t,"change")},"修改",8,["onClick"]),e.createElementVNode("view",{class:"perm-action-btn delete",onClick:e=>O(t,"delete")},"移除",8,["onClick"])])])))),128))]))]),e.createElementVNode("view",{class:"close-permission-btn",onClick:L},"关闭")])])):e.createCommentVNode("",!0),M.value?(e.openBlock(),e.createElementBlock("view",{key:2,class:"popup-overlay",onClick:U},[e.createElementVNode("view",{class:"popup-card",onClick:s[3]||(s[3]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"close-popup-card",onClick:U},[e.createElementVNode("view",{class:"iconfont icon-quxiao"})]),e.createElementVNode("view",{class:"popup-title"},"移交数据库到团队"),e.createElementVNode("scroll-view",{class:"transfer-body","scroll-y":""},[0===$.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"folder-null"},"暂无可用团队")):(e.openBlock(),e.createElementBlock("view",{key:1,class:"transfer-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["transfer-item",{active:R.value===t.id}]),key:t.id,onClick:e=>R.value=t.id},[e.createElementVNode("text",{class:"transfer-name"},e.toDisplayString(t.name),1),R.value===t.id?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#3b86ff"})):e.createCommentVNode("",!0)],10,["onClick"])))),128))]))]),e.createElementVNode("view",{class:"option-wrapper"},[e.createElementVNode("view",{class:"opt-btn opt-cancel",onClick:U},"取消"),e.createElementVNode("view",{class:"opt-btn opt-confirm",onClick:W},"确认移交")])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"cloud-db-detail page-container"},[e.createElementVNode("view",{class:"cloud-db-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:w},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"})]),e.createElementVNode("view",{class:"navbar-title"},e.toDisplayString(i.value),1),e.createElementVNode("view",{class:"navbar-right"},[e.createElementVNode("view",{class:"iconfont icon-gengduo custom-navbar-icon",onClick:g})])]),v.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"menu-card"},[e.createElementVNode("view",{class:"menu-card-item",onClick:s[4]||(s[4]=e=>{N.value=!0,S.value="",T.value="",D.value="",g()})},"导入文件"),e.createElementVNode("view",{class:"solid-line"}),e.createElementVNode("view",{class:"menu-card-item",onClick:s[5]||(s[5]=e=>{F(),g()})},"权限管理"),l.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"solid-line"})),l.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:1,class:"menu-card-item",onClick:s[6]||(s[6]=e=>{(async()=>{M.value=!0,R.value="";try{const e=V(),t=await y(e);$.value=t||[]}catch(e){t("error","at pages/CloudDbDetail/CloudDbDetail.vue:632","获取团队列表失败:",e),$.value=[]}})(),g()})},"移交团队"))])):e.createCommentVNode("",!0)]),e.createElementVNode("scroll-view",{class:"cloud-db-content","scroll-y":""},[e.createElementVNode("view",{class:"db-info-bar"},[e.createElementVNode("text",{class:"db-info-text"},e.toDisplayString(u.value)+" 张表",1),e.createElementVNode("text",{class:"db-info-text"},"权限:"+e.toDisplayString(q(c.value)),1)]),e.createElementVNode("view",{class:"section-block"},[e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-biaoge"}),e.createElementVNode("text",null,"数据表")])]),e.createElementVNode("view",{class:"section-body"},[p.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"loading-area"},[e.createElementVNode("view",{class:"loading-spinner"}),e.createElementVNode("text",{class:"loading-text"},"加载中...")])):0===d.value.length?(e.openBlock(),e.createElementBlock("view",{key:1,class:"empty-tip"},[e.createElementVNode("view",{class:"iconfont icon-shujuku"}),e.createElementVNode("text",null,"暂无数据表")])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"table-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(t=>(e.openBlock(),e.createElementBlock("view",{class:"table-item",key:t.table_name,onClick:e=>b(t),onLongpress:e=>E(t)},[e.createElementVNode("view",{class:"table-icon"},[e.createVNode(o,{type:"compose",size:"22",color:"#3b86ff"})]),e.createElementVNode("view",{class:"table-info"},[e.createElementVNode("view",{class:"table-name"},e.toDisplayString(t.table_name),1),e.createElementVNode("view",{class:"table-desc"},e.toDisplayString(t.row_count||0)+" 条记录",1)]),e.createElementVNode("view",{class:"table-meta"},[e.createVNode(o,{type:"right",size:"14",color:"#999"})])],40,["onClick","onLongpress"])))),128))]))])]),h.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"section-block"},[e.createElementVNode("view",{class:"section-divider"}),e.createElementVNode("view",{class:"section-header"},[e.createElementVNode("view",{class:"section-title"},[e.createElementVNode("view",{class:"iconfont icon-biaoge"}),e.createElementVNode("text",null,e.toDisplayString(h.value.table_name),1)]),e.createElementVNode("view",{class:"section-actions"},[e.createElementVNode("text",{class:"row-count"},e.toDisplayString(m.value.length)+" / "+e.toDisplayString(h.value.row_count||0)+" 条",1)])]),e.createElementVNode("view",{class:"section-body"},[0===m.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"empty-tip"},[e.createElementVNode("text",null,"暂无数据")])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"data-table-wrapper"},[e.createElementVNode("scroll-view",{"scroll-x":"",class:"data-table-scroll"},[e.createElementVNode("view",{class:"data-table"},[e.createElementVNode("view",{class:"data-row data-header"},[e.createElementVNode("view",{class:"data-cell index-cell"},"#"),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t,class:"data-cell"},e.toDisplayString(t),1)))),128))]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"data-row",key:t._row_id||a,onClick:e=>C(t)},[e.createElementVNode("view",{class:"data-cell index-cell"},e.toDisplayString(a+1),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(a=>{return e.openBlock(),e.createElementBlock("view",{key:a,class:"data-cell"},e.toDisplayString(null==(n=t[a])?"":"object"==typeof n?JSON.stringify(n):String(n)),1);var n})),128))],8,["onClick"])))),128))])])]))])])):e.createCommentVNode("",!0)])])])}}},[["__scopeId","data-v-144a6cf9"]]),Ce=E({__name:"text",setup(n){const o=le(),r=()=>{o.isConnected||(ke.value&&_e.value?o.connect({token:ke.value,UserId:_e.value}):t("warn","at pages/text/text.vue:334","Token或UserId未准备好"))},p=Q(),f=e.ref(0),v=(e,t)=>{let a='';return e.forEach(((e,n)=>{const s=0===n?"th":"td",o=e.split("|").filter((e=>""!==e.trim()));a+="",o.forEach(((e,n)=>{const o=t[n]?` style="text-align:${t[n]}"`:"";let i=e.trim().replace(/_/g,"_").replace(/\*/g,"*");a+=`<${s}${o} style="padding:6px 10px;border:1px solid #ddd">${i}`})),a+=""})),a+="
    ",a},g=e=>{if(!e)return"";e=w(e);try{let t=j(e=(e=>{const t=e.split("\n");let a=[],n=!1,s=[],o=[];for(let i=0;ie.trim())).map((e=>e.trim().startsWith(":")&&e.trim().endsWith(":")?"center":e.trim().endsWith(":")?"right":"left"));continue}s.push(e),n=!0}else n&&s.length>0&&(a.push(v(s,o)),s=[],o=[],n=!1),a.push(e)}return n&&s.length>0&&a.push(v(s,o)),a.join("\n")})(e=e.replace(/__/g,"\0\0").replace(/_/g,"_").replace(/\x00\x00/g,"__")));return t=t.replace(/]*>(.*?)<\/a>/gi,'$2'),t}catch(a){return t("error","at pages/text/text.vue:455","解析失败",a),e}},w=e=>{const t=/]*>([\s\S]*?)<\/script>/i.test(e),a=/<(form|input|select|textarea|button)\b[^>]*>/i.test(e);let n=e.replace(/]*>([\s\S]*?)<\/script>/gi,"");if(n=n.replace(/<\/?minimax:tool_call>/g,(e=>e.replace(//g,">"))).replace(/<\|[\w]+?\|>/g,(e=>e.replace(//g,">"))),t||a){return'

    表单仅预览,不可操作!!!

    '+n}return n},y=e=>{uni.previewImage({urls:[e]})},k=e=>{uni.downloadFile({url:e,success:e=>{uni.openDocument({filePath:e.tempFilePath,showMenu:!0})}})},_=e=>e?e<1?(1024*e).toFixed(0)+"KB":e.toFixed(2)+"MB":"0KB",E=e=>{if(!e||"string"!=typeof e)return{textContent:e||"",files:[]};const a=e.match(/\[文件信息:(\[.*?\])\]/);if(!a)return{textContent:e,files:[]};try{const t=JSON.parse(a[1]);return{textContent:e.replace(a[0],"").trim(),files:t}}catch(n){return t("error","at pages/text/text.vue:532","解析文件信息失败:",n),{textContent:e,files:[]}}},C=async()=>{try{const e="0123456789abcdef";let t="";for(let o=0;o<24;o++)t+=e[Math.floor(Math.random()*e.length)];const a=await u(ke.value,t);if(!a)return void uni.showToast({title:"工作区创建失败",icon:"none"});const n=uni.getStorageSync("yxd_login_info");let s="";n&&(s=n.username||"");if(!(await d(ke.value,a,"新会话",s)))return void uni.showToast({title:"新会话创建失败",icon:"none"});Ce()}catch(e){t("error","at pages/text/text.vue:577","新建普通会话失败:",e),uni.showToast({title:"创建会话失败,请重试",icon:"none"})}},N=e.ref(!1),B=()=>{N.value=!1},I=e.ref(!1),P=()=>{I.value=!I.value},A=()=>{ye.value&&uni.setStorageSync("currentSessionId",ye.value),uni.navigateTo({url:"/pages/WorkSpace/WorkSpace"})},F=()=>{ye.value&&uni.setStorageSync("currentSessionId",ye.value),uni.navigateTo({url:"/pages/CloudDatabase/CloudDatabase"})},L=()=>{uni.reLaunch({url:"/pages/Login/Login"})},O=e.ref([]),M=e.ref([]),$=()=>new Promise(((t,a)=>{if(p.isConnected)return t();const n=e.watch((()=>p.isConnected),(e=>{e&&(n(),t())})),s=e.watch((()=>p.connectionStatus),(e=>{"error"===e&&(n(),s(),a(new Error("连接失败")))}));p.connect({token:ke.value,conversationId:ye.value})})),R=e.ref(!1),U=e.ref(!1),W=e.ref(!1),q=e.ref([]),H=e.ref(null),Z=e.ref(!1),J=e.ref([]),X=(e,t)=>{let a=e.target;for(;a&&a.classList;){if(a.classList.contains("chat-inline-link")){const e=a.getAttribute("data-url")||a.dataset&&a.dataset.url;return void(e&&ue(e))}a=a.parentElement}t.role&&G(t)},Y=e=>{try{const t=new URL(e).pathname.split("/").filter((e=>e));if(t.length>0)return decodeURIComponent(t[t.length-1])}catch(a){}const t=e.split("/").filter((e=>e));if(t.length>0){const e=t[t.length-1],a=e.indexOf("?");return a>-1?e.substring(0,a):e}return e},G=e=>{J.value=(e=>{const t=new Set,a=[],n=/\[([^\]]*)\]\((https?:\/\/[^\s<>"{}|\\^`\[\]()]+)\)/gi;[...e.matchAll(n)].forEach((e=>{const n=e[1].trim(),s=e[2];t.has(s)||(t.add(s),a.push({url:s,name:n||s}))}));const s=e.replace(n,"").match(/https?:\/\/[^\s<>"{}|\\^`\[\]()]+/gi);return s&&s.forEach((e=>{t.has(e)||(t.add(e),a.push({url:e,name:Y(e)}))})),a})(e.content||""),Z.value=!0},K=()=>{Z.value=!1,J.value=[]},ee=e.ref({show:!1,type:"loading",message:""});let re=null;const ce=(e,t,a)=>{re&&clearTimeout(re),ee.value={show:!0,type:e,message:t},a>0&&(re=setTimeout((()=>{ee.value={show:!1,type:"loading",message:""}}),a))},ue=e=>{de(e)},de=async e=>{try{ce("loading","下载中...",0);const t=uni.getStorageSync("workspace_id")||"",a=await b(ke.value,t,e),n="string"==typeof a?a:(null==a?void 0:a.url)||(null==a?void 0:a.download_url)||"";if(!n)return void ce("error","获取下载地址失败",2500);uni.downloadFile({url:n,success:e=>{200===e.statusCode?(re&&clearTimeout(re),ee.value={show:!1,type:"loading",message:""},uni.openDocument({filePath:e.tempFilePath,showMenu:!0,fail:()=>{ce("error","无法打开此文件",2500)}})):ce("error","下载失败",2500)},fail:()=>{ce("error","下载失败",2500)}})}catch(t){ce("error","下载失败: "+(t.message||t),2500)}},pe=async()=>{o.isConnecting||await r();const e=D(),t=q.value.length>0,a={command:1,sender:_e.value,receiver:e,avatar:"",sessionId:ye.value,message:ge.value,callBackMessage:!1};t&&(a.contentType=1,a.uploadVos=q.value);const n={version:"1.1",body:a};o.send(n);const s={sender:_e.value,receiver:e,content:ge.value,taskId:null,avatar:null,createTime:"",messageType:"null",contentJson:t?JSON.stringify(q.value):"null"};De.value=[...De.value,s],ge.value="",q.value=[],setTimeout((()=>{je()}),1e3)},he=async()=>{o.isConnecting||await r();const e=q.value.length>0,t={command:9,groupId:ye.value,message:ge.value||"",callBackMessage:!e,messageType:e?1:0,sender:_e.value};e&&(t.uploadVos=q.value);const a={version:"1.1",body:t};o.send(a);const n={id:De.value.length+1,message:ge.value,messageType:e?1:0,groupId:null,createTime:"",contentJson:e?JSON.stringify(q.value):"",sender:_e.value};De.value=[...De.value,n],ge.value="",q.value=[],setTimeout((()=>{Fe()}),1e3)},me=async()=>{try{await $();let e=ge.value;if(q.value.length){const t=JSON.stringify(q.value);e=e?`${e}\n[文件信息:${t}]`:`[文件信息:${t}]`}const t={type:"chat",conversation_id:ye.value,content:e};p.send(t),R.value=!0,U.value=!0,De.value=[...De.value,{role:"user",content:e}],H.value="streaming-"+Date.now(),De.value=[...De.value,{role:"assistant",content:"",_streaming:!0,_id:H.value}],ge.value="",q.value=[],Oe()}catch(e){R.value=!1,uni.showToast({title:`用户发送消息失败${e}`,icon:"error"})}},fe=async()=>{t("log","at pages/text/text.vue:1064","中断对话 - 当前会话ID:",ye.value);try{await p.send({type:"stop",conversation_id:ye.value}),t("log","at pages/text/text.vue:1070","中断指令已发送成功")}catch(e){t("error","at pages/text/text.vue:1072","中断指令发送失败:",e)}H.value&&(De.value=De.value.filter((e=>e._id!==H.value)),H.value=null),R.value=!1,p.isThinking=!1,U.value=!1,ge.value="",q.value=[],uni.showToast({title:"已中断",icon:"none",duration:1500})};e.watch((()=>p.isThinking),((e,a)=>{if(t("log","at pages/text/text.vue:1096","isThinking 变化:",a,"→",e,"messageString:",p.messageString),!a&&e)return t("log","at pages/text/text.vue:1099","AI开始回复(跨设备同步),锁定输入框"),R.value=!0,void(H.value||(H.value="streaming-"+Date.now(),De.value=[...De.value,{role:"assistant",content:"",_streaming:!0,_id:H.value}]));a&&!e&&(t("log","at pages/text/text.vue:1115","AI回复结束(正常/中断),解锁并刷新消息列表"),H.value&&(De.value=De.value.filter((e=>e._id!==H.value)),H.value=null),Ae(),R.value=!1,U.value=!1,ge.value="",q.value=[])})),e.watch((()=>p.authFailReason),(t=>{"pc offline"===t&&(R.value=!1,p.authFailReason="",e.nextTick((()=>{uni.showModal({title:"提示",content:"PC端不在线,不可聊天",showCancel:!1,confirmText:"知道了"})})))})),e.watch((()=>p.messageString),(e=>{if(!H.value||!p.isThinking)return;const t=De.value.findIndex((e=>e._id===H.value));if(t>=0){const a={...De.value[t],content:e};De.value.splice(t,1,a),Oe()}}));const ge=e.ref(""),we=e.ref([]),ye=e.ref(""),ke=e.ref(""),_e=e.ref(""),be=e.ref(""),Ee=e.ref(null),Ce=async()=>{try{ke.value=V(),t("log","at pages/text/text.vue:1189","token:",ke.value),we.value=await l(ke.value)||[];const e=S();e&&we.value.some((t=>t._id===e))?ye.value=e:we.value.length>0?ye.value=we.value[0]._id:ye.value="",t("log","at pages/text/text.vue:1201","保存会话id:",ye.value),uni.setStorageSync("currentSessionId",ye.value)}catch(e){uni.showToast({title:`获取会话列表失败${e}`,icon:"error"})}},Ne=e.ref([]),xe=e=>{if(!e)return null;const t=Ne.value.find((t=>t.receiver===e));return(null==t?void 0:t.avatar)||null},Ve=async e=>{if(!(null==e?void 0:e.length))return[];try{const t=e.map((e=>e.receiver)),a=await m(ke.value,t),n=new Map(a.map((e=>[e.user_id,e]))||[]);return e.map((e=>{const t=n.get(e.receiver);return{...e,avatar:(null==t?void 0:t.avatar)||null}}))}catch(a){return t("error","at pages/text/text.vue:1257","获取好友头像失败",a),e}},Se=e.ref([]),Be=e.ref([]),Te=e=>{if(!e)return null;const t=Be.value.find((t=>t.groupContactId===e));return(null==t?void 0:t.avatar)||null},De=e.ref([]),ze=e.ref(""),Ie=e.ref(!1);e.ref(!1),e.ref(1);const Pe=e.computed((()=>De.value)),Ae=async()=>{try{De.value=await c(ke.value,ye.value)||[],Oe()}catch(e){uni.showToast({title:`获取ai会话内容失败${e}`,icon:"none"})}},je=async()=>{try{De.value=await ne(ye.value)||[],Oe()}catch(e){uni.showToast({title:`获取好友会话消息失败${e}`,icon:"none"})}},Fe=async()=>{try{De.value=await se(ye.value)||[],t("log","at pages/text/text.vue:1363","群聊消息:",De.value);const e=await oe(ye.value);t("log","at pages/text/text.vue:1366","获取到的群成员列表:",e),e&&e.length?(Be.value=await(async e=>{if(!(null==e?void 0:e.length))return[];try{const a=e.map((e=>e.groupContactId));t("log","at pages/text/text.vue:1286","请求头像的ID列表:",a);const n=await m(ke.value,a);t("log","at pages/text/text.vue:1288","头像接口返回数据:",n);const s=new Map(n.map((e=>[e.user_id,e]))||[]);return t("log","at pages/text/text.vue:1291","userMap的keys:",Array.from(s.keys())),e.map((e=>{const a=e.groupContactId,n=s.get(a);return t("log","at pages/text/text.vue:1296",`查找 ${a} 的头像:`,n),{...e,avatar:(null==n?void 0:n.avatar)||null}}))}catch(a){return t("error","at pages/text/text.vue:1303","获取群成员头像失败",a),e}})(e),t("log","at pages/text/text.vue:1369","群成员列表(带头像):",Be.value)):Be.value=[],Oe()}catch(e){uni.showToast({title:`获取群聊会话失败${e}`,icon:"none"})}},Le=e=>{},Oe=async()=>{await e.nextTick(),Pe.value.length>0&&(Ie.value=!Ie.value,ze.value=Ie.value?"chat-bottom-a":"chat-bottom-b")};return e.watch((()=>o.MessageReceived),(e=>{if(t("log","at pages/text/text.vue:1414","收到了好友消息"),e)switch(t("log","at pages/text/text.vue:1416","ChatType:",f.value),f.value){case 0:Ae(),o.MessageReceived=!1;break;case 1:je(),o.MessageReceived=!1;break;case 2:Fe(),o.MessageReceived=!1;break;default:t("log","at pages/text/text.vue:1432","default 分支"),o.MessageReceived=!1}}),{immediate:!0}),e.watch(ye,(e=>{if(e)switch(uni.setStorageSync("currentSessionId",ye.value),f.value){case 0:Ae(),p.disconnect(),$();break;case 1:je();break;case 2:Fe();break;default:Ae()}}),{immediate:!0}),e.onMounted((()=>{})),s((async()=>{await(async()=>{try{ke.value=V(),Ee.value=await h(ke.value),_e.value=Ee.value._id,be.value=Ee.value.avatar||"",t("log","at pages/text/text.vue:1179","用户信息已加载:",_e.value,be.value)}catch(e){t("error","at pages/text/text.vue:1181","获取用户信息失败:",e)}})();const e=T();f.value=e;const a=S();a&&(ye.value=a),0===e?(await Ce(),ye.value&&Ae(),ke.value&&ye.value&&!p.isConnected&&$()):1===e?(await(async()=>{try{t("log","at pages/text/text.vue:1216","开始获取好友列表");const e=await te(_e.value);t("log","at pages/text/text.vue:1219","friendList:",e),e&&e.length?Ne.value=await Ve(e):(Ne.value=[],t("log","at pages/text/text.vue:1224","好友列表为空"))}catch(e){t("error","at pages/text/text.vue:1227","获取好友列表失败:",e),Ne.value=[]}finally{we.value=Ne.value}})(),je(),r()):2===e&&(await(async()=>{try{t("log","at pages/text/text.vue:1267","开始获取群聊列表"),Se.value=await ae(_e.value)}catch(e){t("error","at pages/text/text.vue:1272","获取群聊列表失败:",e),Se.value=[]}finally{we.value=Se.value}})(),await r(),await Fe())})),i((()=>{p.disconnect()})),(n,s)=>{const o=a(e.resolveDynamicComponent("uni-icons"),x);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),N.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"ncd-overlay",onClick:B},[e.createElementVNode("view",{class:"ncd-card",onClick:s[0]||(s[0]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("view",{class:"ncd-title-eng"},[e.createElementVNode("text",null,"NEW")]),e.createElementVNode("text",{class:"ncd-title-zh"},"创建对话"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:B})]),e.createElementVNode("text",null,"选择对话类型,开启全新会话体验"),e.createElementVNode("view",{class:"ncd-options"},[e.createElementVNode("view",{class:"ncd-option ncd-normal"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"chat",color:"#000000",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title",onClick:C},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"普通会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"与AI自由对话,探索任何话题")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})]),e.createElementVNode("view",{class:"ncd-option ncd-intelligence"},[e.createElementVNode("view",{class:"ncd-opt-icon"},[e.createVNode(o,{type:"star",color:"#ffffff",size:"30"})]),e.createElementVNode("view",{class:"ncd-opt-title"},[e.createElementVNode("view",{class:"ncd-opt-title-1"},"智能体会话"),e.createElementVNode("view",{class:"ncd-opt-title-2"},"选择专属智能体,获得精准专业服务")]),e.createVNode(o,{type:"arrow-right",class:"arrow-right-style"})])])])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"chat-page page-container"},[I.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"mask",onClick:P})):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-sidebar",{"sidebar-show":I.value}])},[e.createVNode(z,{chatList:we.value,showNewChatModal:N.value,"onUpdate:showNewChatModal":s[1]||(s[1]=e=>N.value=e),currentSessionId:ye.value,"onUpdate:currentSessionId":s[2]||(s[2]=e=>ye.value=e),chatType:f.value,"onUpdate:chatType":s[3]||(s[3]=e=>f.value=e),onRefreshConversations:Ce},null,8,["chatList","showNewChatModal","currentSessionId","chatType"])],2),e.createElementVNode("view",{class:"chat-wrapper"},[e.createElementVNode("view",{class:"chat-hearder"},[e.createElementVNode("view",{class:"chat-btn-group"},[e.createElementVNode("view",{class:"head-btn",onClick:P},[e.createElementVNode("view",{class:"iconfont icon-caidan"})]),e.createElementVNode("view",{class:"head-btn",onClick:A},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia"})]),e.createElementVNode("view",{class:"head-btn",onClick:F},[e.createElementVNode("view",{class:"iconfont icon-cloud"})]),e.createElementVNode("view",{class:"head-btn log-out",onClick:L},[e.createElementVNode("view",{class:"iconfont icon-tuichu"})])])]),e.createElementVNode("view",{class:"main-chat"},[e.createElementVNode("scroll-view",{class:"chat-messages",direction:"vertical","scroll-y":"","scroll-into-view":ze.value,"upper-threshold":0,"scroll-with-animation":!0,onScroll:Le},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Pe.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock(e.Fragment,{key:a},[0===f.value&&"tool"!==t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-message",{"message-user":"user"===t.role}]),id:"msg-"+a},["user"===t.role?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":"user"===t.role}])},["user"===t.role&&(null==(n=Ee.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ee.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"iconfont icon-yonghuziliao"}))],2)):e.createCommentVNode("",!0),t.content&&""!==String(t.content).trim()||t._streaming?(e.openBlock(),e.createElementBlock("view",{key:1,class:e.normalizeClass(["chat-content",{"chat-content-user":"user"===t.role,"chat-content-assistant":"assistant"===t.role}]),onClick:e=>X(e,t)},[!t._streaming||t.content&&""!==String(t.content).trim()?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"bubble-loading-dots"},[e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"}),e.createElementVNode("view",{class:"bubble-dot"})])),E(t.content).textContent?(e.openBlock(),e.createElementBlock("view",{key:1,innerHTML:g(E(t.content).textContent)},null,8,["innerHTML"])):e.createCommentVNode("",!0),E(t.content).files.length>0?(e.openBlock(),e.createElementBlock("view",{key:2,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E(t.content).files,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>y(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>k(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(_(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])):e.createCommentVNode("",!0)],10,["id"])):e.createCommentVNode("",!0)],64)})),128)),1===f.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(Pe.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===_e.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===_e.value}])},[t.sender===_e.value&&(null==(n=Ee.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ee.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):xe(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:xe(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===_e.value}]),onClick:e=>X(e,t)},[t.content&&""!==String(t.content).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:g(t.content)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>y(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>k(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(_(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),2===f.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(Pe.value,((t,a)=>{var n;return e.openBlock(),e.createElementBlock("view",{class:e.normalizeClass(["chat-message",{"message-user":t.sender===_e.value}]),key:a,id:"msg-"+a},[e.createElementVNode("view",{class:e.normalizeClass(["chat-avatar",{"chat-avatar-user":t.sender===_e.value}])},[t.sender===_e.value&&(null==(n=Ee.value)?void 0:n.avatar)?(e.openBlock(),e.createElementBlock("image",{key:0,src:Ee.value.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):Be.value.length>0&&Te(t.sender)?(e.openBlock(),e.createElementBlock("image",{key:1,src:Te(t.sender),class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):(e.openBlock(),e.createElementBlock("view",{key:2,class:"iconfont icon-yonghuziliao"}))],2),e.createElementVNode("view",{class:e.normalizeClass(["chat-content",{"chat-content-user":t.sender===_e.value}]),onClick:e=>X(e,t)},[t.message&&""!==String(t.message).trim()?(e.openBlock(),e.createElementBlock("view",{key:0,innerHTML:g(t.message)},null,8,["innerHTML"])):e.createCommentVNode("",!0),t.contentJson?(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(JSON.parse(t.contentJson),((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"file-item"},[["jpg","jpeg","png","gif","webp","bmp"].includes(t.extendName.toLowerCase())?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.url,mode:"widthFix",class:"message-image",onClick:e=>y(t.url)},null,8,["src","onClick"])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"message-file",onClick:e=>k(t.url)},[e.createElementVNode("view",{class:"file-icon"},"📄"),e.createElementVNode("view",{class:"file-name"},e.toDisplayString(t.name),1),e.createElementVNode("view",{class:"file-size"},e.toDisplayString(_(t.fileSize)),1)],8,["onClick"]))])))),128))])):e.createCommentVNode("",!0)],10,["onClick"])],10,["id"])})),128)):e.createCommentVNode("",!0),e.createElementVNode("view",{id:"chat-bottom-a",style:{height:"1rpx"}}),e.createElementVNode("view",{id:"chat-bottom-b",style:{height:"1rpx"}})],40,["scroll-into-view"]),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-container",{"interactive-disabled":R.value}])},[e.createElementVNode("view",{class:"chat-interactive-group"},[e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:R.value}]),onClick:s[4]||(s[4]=e=>!R.value&&(t("log","at pages/text/text.vue:626","点击了拍照上传"),void uni.chooseImage({count:1,sourceType:["camera","album"],success:e=>{const t=e.tempFiles,a=e.tempFilePaths;t.forEach(((e,t)=>{O.value.push({path:a[t],name:e.name||`photo_${Date.now()}_${t}.jpg`,size:e.size,type:"image",tempFile:e})}))},fail:e=>{t("error","at pages/text/text.vue:644","选择图片失败",e)}})))},"拍照上传",2),e.createElementVNode("view",{class:e.normalizeClass(["chat-interactive-btn",{disabled:R.value}]),onClick:s[5]||(s[5]=e=>!R.value&&(t("log","at pages/text/text.vue:655","点击了上传文件"),void ve({count:5,type:"all",success:e=>{t("log","at pages/text/text.vue:660","成功了"),M.value=e.tempFiles,O.value.push(...e.tempFiles),uni.showToast({title:`已选择 ${e.tempFiles.length} 个文件`,icon:"success"})},fail:e=>{t("error","at pages/text/text.vue:671","选择失败:",e),uni.showToast({title:"选择失败",icon:"error"})}})))},"上传文件",2)]),O.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:0,class:"image-list"},[e.createElementVNode("view",{class:"image-tags"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{class:"image-tag",key:a},[e.createElementVNode("text",{class:"tag-name"},e.toDisplayString(t.name),1),e.createElementVNode("text",{class:"tag-close",onClick:e.withModifiers((e=>(e=>{O.value.splice(e,1)})(a)),["stop"])},"×",8,["onClick"])])))),128))])])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:e.normalizeClass(["chat-input-container",{"input-disabled":R.value}])},[e.withDirectives(e.createElementVNode("textarea",{class:"message-input",placeholder:R.value?U.value?"AI 正在回复中...":"电脑正在运行,请稍后":"输入消息...",disabled:R.value,"onUpdate:modelValue":s[6]||(s[6]=e=>ge.value=e),"auto-height":""},null,8,["placeholder","disabled"]),[[e.vModelText,ge.value]]),R.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"input-btn-group stop-message-btn",onClick:fe},[e.createElementVNode("view",{class:"iconfont icon-tingzhi"})])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"input-btn-group send-message-btn",onClick:s[7]||(s[7]=e=>(async()=>{if(ge.value.trim()||0!==O.value.length){if(O.value.length>0){W.value=!0,uni.showLoading({title:"上传文件中...",mask:!0});try{const e=[];for(const t of O.value){const a=await ie(t.path);e.push(a)}q.value=e,O.value=[]}catch(e){return uni.hideLoading(),t("error","at pages/text/text.vue:895","文件上传失败:",e),uni.showToast({title:"文件上传失败,请重试",icon:"error"}),void(W.value=!1)}uni.hideLoading(),W.value=!1}0===f.value&&me(),1===f.value&&pe(),2===f.value&&he()}})())},[e.createElementVNode("view",{class:"iconfont icon-fasong"})]))],2)],2)])])]),Z.value?(e.openBlock(),e.createElementBlock("view",{key:1,class:"ncd-overlay",onClick:K},[e.createElementVNode("view",{class:"ncd-card message-detail-card",onClick:s[8]||(s[8]=e.withModifiers((()=>{}),["stop"]))},[e.createElementVNode("view",{class:"ncd-header"},[e.createElementVNode("text",{class:"ncd-title-zh"},"消息详情"),e.createVNode(o,{type:"closeempty",color:"#ff0000",size:"24",onClick:K})]),e.createElementVNode("scroll-view",{class:"message-detail-content","scroll-y":""},[J.value.length?(e.openBlock(),e.createElementBlock("view",{key:0,class:"detail-links-section"},[e.createElementVNode("view",{class:"detail-links-title"},"文件 ("+e.toDisplayString(J.value.length)+")",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(J.value,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:a,class:"detail-link-item",onClick:e=>ue(t.url)},[e.createElementVNode("text",{class:"link-text"},e.toDisplayString(t.name),1)],8,["onClick"])))),128))])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"detail-empty"},[e.createElementVNode("text",null,"无可下载文件")]))])])])):e.createCommentVNode("",!0),ee.value.show?(e.openBlock(),e.createElementBlock("view",{key:2,class:e.normalizeClass(["download-toast-overlay",(ee.value.show,"")])},[e.createElementVNode("view",{class:e.normalizeClass(["download-toast-card","download-toast-"+ee.value.type])},["loading"===ee.value.type?(e.openBlock(),e.createElementBlock("view",{key:0,class:"download-toast-icon"},[e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"}),e.createElementVNode("view",{class:"toast-dot"})])):(e.openBlock(),e.createElementBlock("text",{key:1,class:"download-toast-icon"},e.toDisplayString("success"===ee.value.type?"✓":"✕"),1)),e.createElementVNode("text",{class:"download-toast-text"},e.toDisplayString(ee.value.message),1)],2)],2)):e.createCommentVNode("",!0)],64)}}},[["__scopeId","data-v-f61b4f79"]]);const Ne=E({name:"IntuitiveAipptViewer",props:{visible:{type:Boolean,default:!0},htmlContent:{type:String,default:'\n \n \n \n
    \n \x3c!-- 顶部装饰 --\x3e\n
    \n
    \n \x3c!-- 主标题 --\x3e\n

    \n 三國歷史\n

    \n \x3c!-- 副标题 --\x3e\n

    \n 從黃巾起義到三分歸晉\n

    \n \x3c!-- 分隔线 --\x3e\n
    \n
    \n \x3c!-- 简短描述 --\x3e\n

    \n 東漢末年 • 群雄並起 • 三分天下\n

    \n

    \n 公元184年 — 280年\n

    \n \x3c!-- 底部装饰 --\x3e\n
    \n
    \n
    \n \n
    \n

    \n 目 录\n

    \n
      \n
    • \n 第一章 东汉末年与黄巾起义3\n
    • \n
    • \n 第二章 群雄割据与董卓乱政5\n
    • \n
    • \n 第三章 曹操崛起与官渡之战8\n
    • \n
    • \n 第四章 孙刘联盟与赤壁之战12\n
    • \n
    • \n 第五章 三分天下格局的形成16\n
    • \n
    • \n 第六章 蜀汉政权的建立与发展20\n
    • \n
    • \n 第七章 曹魏政权的巩固与传承24\n
    • \n
    • \n 第八章 东吴政权的繁荣与衰落28\n
    • \n
    • \n 第九章 诸葛亮北伐与三国相持32\n
    • \n
    • \n 第十章 三国归晋与历史终结37\n
    • \n
    • \n 附录 三国主要人物简介42\n
    • \n
    • \n 附录 三国时期著名战役45\n
    • \n
    • \n 附录 三国疆域与行政区划48\n
    • \n
    \n
    \n \n

    \n 第一章 东汉末年与黄巾起义\n

    \n

    \n 东汉末年形势图\n

    \n

    \n 1.1 东汉王朝的衰落\n

    \n

    \n 东汉王朝自光武帝刘秀建立以来,历经明帝、章帝的盛世,至和帝以后,外戚与宦官交替专权,政治日趋腐败。东汉后期,皇帝的寿命普遍较短,多为幼年即位,导致太后临朝称制,外戚势力趁机掌控朝政。桓灵二帝时期,宦官势力达到顶峰“十常侍”把持朝政,卖官鬻爵,横征暴敛,导致民不聊生。\n

    \n

    \n 东汉末年,中央政府的统治力急剧衰落。地方官员各自为政,中央对地方的控制力减弱。土地兼并严重,大量农民失去土地,成为流民。赋税沉重,徭役频繁,加上自然灾害频发,百姓生活陷入绝境。这种局面为后来的农民起义和社会动荡埋下了伏笔。\n

    \n \n

    \n 此外,东汉的军事制度也出现了严重问题。边防军队逐渐废弛,地方军阀割据一方,中央对军队的控制力减弱。各州郡的太守、刺史不仅掌握行政权,还拥有相当规模的私人武装,形成了割据一方的势力。这些因素共同促成了东汉王朝的最终崩溃。\n

    \n

    \n 1.2 黄巾起义的爆发\n

    \n

    \n 中平元年(公元184年),张角、张梁、张宝三兄弟在冀州钜鹿(今河北巨鹿)发动了大规模农民起义。张角创立“太平道”,以道教为外衣,以治病救人为号召,在短短十余年间发展信徒数十万人,遍布东汉十三州。\n

    \n

    \n 黄巾军以“苍天已死,黄天当立,岁在甲子,天下大吉”为口号,头戴黄巾,象征对汉朝统治的否定。起义军分为十路,同时在全国各地发动进攻,短时间内攻克了许多郡县,东汉王朝的统治基础受到严重冲击。\n

    \n

    \n 面对来势汹汹的黄巾起义,东汉朝廷惊慌失措。灵帝急忙下诏各地募兵抵抗,并启用皇甫嵩、朱儁、卢植等名将率军镇压。同时,允许地方州郡自行组织军队,这为后来军阀割据提供了合法依据。\n

    \n

    \n 1.3 黄巾起义的历史影响\n

    \n

    \n 黄巾起义虽然最终被镇压,但它对东汉王朝的统治造成了致命打击。\n

    \n

    \n 首先,它彻底瓦解了东汉中央政府的权威,使得地方割据成为可能。其次,它消耗了东汉政府大量的军事和经济资源,国库空虚。再次,它打破了士族对仕途的垄断,为寒门子弟提供了上升通道。\n

    \n

    \n 更重要的是,黄巾起义锻炼出了一批军事人才。曹操、刘备、孙坚等人都是在镇压黄巾起义中崭露头角,逐渐成长为割据一方的军阀。可以说,没有黄巾起义,就没有后来的三国鼎立局面。\n

    \n

    \n 黄巾起义虽然失败了,但它揭开了三国时代的序幕,是中国历史上一次重要的农民起义。它的历史意义在于:打破了东汉末年的政治格局,为群雄逐鹿提供了舞台;促进了思想的解放,为各种政治势力的兴起创造了条件。\n

    \n

    \n 1.4 董卓进京与废立\n

    \n

    \n 中平六年(公元189年),汉灵帝刘辨去世,少帝刘辩即位。外戚何进与宦官十常侍的矛盾激化,双方展开激烈的权力斗争。何进为了对抗宦官,\n

    \n \n

    \n 密召凉州军阀董卓率军入京。\n

    \n

    \n 董卓率军进入洛阳后,立即控制了朝政。他先设计诛杀了宦官集团,随后废黜少帝刘辩,改立陈留王刘协为帝,是为汉献帝。董卓自任相国,总揽朝政,权倾朝野。为了巩固权力,董卓还纵容军队烧杀抢掠,洛阳城陷入一片混乱。\n

    \n

    \n 董卓的倒行逆施引起了天下诸侯的强烈不满。曹操、袁绍、袁术、公孙瓒等十八路诸侯联合讨伐董卓,推举袁绍为盟主。虽然联军最终未能消灭董卓,但董卓被迫迁都长安,洛阳城被付之一炬。这次讨董战争标志着东汉王朝的正式分裂,群雄割据的时代正式开始。\n

    \n

    \n 第二章 群雄割据与董卓乱政\n

    \n

    \n 2.1 董卓的暴政与灭亡\n

    \n

    \n 董卓迁都长安后,更加骄横跋扈。他自封为“太师”,地位在诸侯王之上,佩剑上殿,目中无人。为了镇压反对意见,董卓滥杀无辜,残害忠良,朝野上下敢怒而不敢言。\n

    \n

    \n 初平三年(公元192年),司徒王允利用董卓与吕布之间的矛盾,设计除掉了董卓。王允先是拉拢吕布为内应,然后趁董卓入宫朝拜之时,\n

    \n

    \n 让吕布将其刺杀。董卓死后,他的部将李傕、郭汜率军攻入长安,杀死王允,挟持汉献帝,关中地区再次陷入混乱。\n

    \n

    \n 董卓的灭亡并没有结束混乱局面,反而使局势更加复杂。李傕、郭汜之间互相攻杀,长安城遭到严重破坏,汉献帝沦为傀儡,各地割据势力更加嚣张,东汉王朝名存实亡。\n

    \n

    \n 2.2 曹操的初步崛起\n

    \n

    \n 曹操(字孟德,沛国谯县人)是三国时期最重要的政治家、军事家和文学家。曹操的祖父曹腾是东汉末年的宦官,父亲曹嵩是曹腾的养子,曾任太尉。曹操少年时期就表现出非凡的才干,他机智过人,胸有大志。\n

    \n

    \n 中平元年,曹操参加镇压黄巾起义,因功升任济南相。后来董卓进京,曹操逃出洛阳,在陈留起兵讨伐董卓。曹操是少数几个真正出击董卓的诸侯之一,虽然战败,但名声大振。\n

    \n \n

    \n 初平三年,曹操击破青州黄巾军,收降卒三十余万,人口百余万,创建了著名的“青州兵”。这是曹操第一支正规的私家军队,成为他逐鹿中原的主力。此后,曹操相继击败袁术、陶谦、吕布等割据势力,逐渐成为北方最强大的军阀。\n

    \n

    \n 2.3 刘备的艰难创业\n

    \n

    \n 刘备(字玄德,涿郡涿县人)是汉景帝之子中山靖王刘胜的后代,具有皇室血统。但到了刘备这一代,家道已经衰落,只能靠织席贩履为生。刘备仪表非凡,胸怀大志结交豪杰,在当地小有名气。\n

    \n

    \n 黄巾起义爆发后,刘备与关羽、张飞桃园结义,组成最早的创业团队。刘备率领义军参加镇压黄巾起义,因功被封为安喜县尉。此后,刘备先后依附于公孙瓒、陶谦、曹操、袁绍、刘表等诸侯,颠沛流离,寄人篱下。\n

    \n

    \n 建安六年(公元201年),刘备投奔荆州牧刘表,被安排在新野驻守。在荆州的七年里,刘备广招贤才,诸葛亮就在此时加入刘备集团。诸葛亮隆中对策,为刘备制定了夺取天下的大政方针,刘备的霸业从此开始起步。\n

    \n

    \n 2.4 孙坚与孙策的基业\n

    \n

    \n 孙坚(字文台,吴郡富春人)是东吴政权的奠基人之一。他出身寒门,但英勇善战,在镇压黄巾起义和讨伐董卓的战争中表现出色,\n

    \n

    \n 被封为长沙太守、乌程侯。\n

    \n

    \n 初平二年(公元191年),袁术派孙坚进攻荆州刘表。孙坚在襄阳之战中击败刘表部将黄祖,乘胜追击时中箭身亡,年仅三十七岁。孙坚死后,其部众由其侄孙贲率领,继续依附于袁术。\n

    \n

    \n 孙策(字伯符)是孙坚的长子,他继承父亲的遗志,在袁术麾下效力。建安五年(公元200年),孙策率军渡过长江,攻占江东地区,先后击败严白虎、王朗等地方势力,迅速占领了吴郡、会稽、豫章、庐江、丹阳等郡。孙策善用人才,周瑜、张昭等人纷纷来投,东吴基业初具规模。\n

    \n

    \n 2.5 官渡之战前的北方局势\n

    \n

    \n 建安五年(公元200年)前后,中国北方形成了曹操与袁绍两大集团对峙的局面。曹操占据兖州、豫州、徐州部分地区,挟天子以令诸侯,实力日益强盛。袁绍占据冀州、青州、并州、幽州,拥有精兵数十万,地广人多,\n

    \n \n

    \n 势力最强大。\n

    \n

    \n 袁绍手下的谋士郭图、审配等人主张早日发动对曹操的进攻,而田丰、沮授则认为应该先巩固后方,等待时机。袁绍最终采纳了主战派的建议,决定发兵南下。与此同时,曹操也积极备战,在官渡一线构筑防线。\n

    \n

    \n 官渡之战是三国时期最关键的战役之一,此战决定了北方的归属,也奠定了三国鼎立的基础。战争的胜负虽然取决于许多因素,但曹操的军事才能和战略眼光无疑是决定性的。\n

    \n

    \n 第三章 曹操崛起与官渡之战\n

    \n

    \n 3.1 曹操的政治举措\n

    \n

    \n 曹操之所以能够在群雄中脱颖而出,不仅仅依靠军事才能,更重要的是他的政治举措。建安元年(公元196年),曹操迎接汉献帝迁都许昌,开始了“挟天子以令诸侯”的政治策略。\n

    \n

    \n 曹操挟持汉献帝后,打着皇帝的旗号征讨四方,取得了政治上的主动权。他先后消灭了袁术、吕布、刘表等割据势力,又迫使韩遂、马超等西北军阀臣服。在军事胜利的基础上,曹操推行了一系列政治改革。\n

    \n

    \n 在用人方面,曹操打破门第观念,实行“唯才是举”的政策。他多次下诏求贤,只要有才能的人,无论出身高低,都能得到重用。\n

    \n

    \n 这使得曹操麾下聚集了大量人才,谋士如荀彧、郭嘉、贾诩、荀攸、程昱等,武将如张辽、徐晃、于禁、乐进、李典等。\n

    \n

    \n 3.2 曹操的经济与军事改革\n

    \n

    \n 曹操在经济方面推行“屯田制”,让士兵和流民开垦荒地,生产粮食。屯田制分为军屯和民屯两种,有效地解决了粮食问题,为军事行动提供了充足的物资保障。\n

    \n

    \n 在军事上,曹操改革兵制,建立了一支训练有素、纪律严明的军队。他重视军队的训练和装备,注重发挥各将领的特长,形成了一套完整的军事指挥体系。曹操还著有《孙子略解》《兵书接要》等军事著作,展现了他深厚的军事理论素养。\n

    \n

    \n 曹操还善于利用政治和外交手段瓦解对手。他分化瓦解敌对势力,\n

    \n \n

    \n 必要时使用离间计、反间计等计谋,以最小的代价换取最大的胜利。这些综合手段的运用,使曹操成为三国时期最杰出的政治家和军事家。\n

    \n

    \n 3.3 官渡之战的背景\n

    \n

    \n 建安五年(公元200年)二月,袁绍率十万大军南下攻打曹操。袁绍的军队人数众多,装备精良,士气旺盛。而曹操的兵力只有两三万,双方实力悬殊。\n

    \n

    \n 面对强敌,曹操采取了正确的战略战术。他先发制人,击败了刘备,消除了侧翼威胁,然后集中兵力在官渡一线设防。曹操知道自己的兵力不足以与袁绍正面对抗,因此采取了以逸待劳、坚壁不战的策略。\n

    \n

    \n 袁绍虽然兵力占优,但指挥失当,多次错失良机。他的谋士之间互相倾轧,不能形成统一的战略。而曹操则能够虚心纳谏,灵活应对战场变化。两军的对峙持续了半年多,战争进入相持阶段。\n

    \n

    \n 3.4 官渡之战的经过\n

    \n

    \n 建安五年八月,袁绍率军逼近官渡,两军在此展开决战。袁绍依仗兵力优势,采取强攻战术,但曹操防守严密,几次进攻都未能得逞。\n

    \n

    \n 九月,曹操率军袭击袁绍的运粮车队,烧毁了袁绍的大量粮草。十月,袁绍派淳于琼率万余人护送粮草,驻守在乌巢。曹操得知这一情报后,亲率五千精兵连夜突袭乌巢,一把火烧掉了袁绍的全部粮草。\n

    \n

    \n 乌巢失守后,袁绍军心动摇。曹操乘机发动总攻,大败袁绍。袁绍仓皇逃回冀州,其主力部队损失殆尽。这场战役,曹操以少胜多,创造了军事史上的经典战例。\n

    \n

    \n 3.5 官渡之战的结果与影响\n

    \n

    \n 官渡之战后,袁绍势力一蹶不振。建安七年(公元202年),袁绍病逝,他的两个儿子袁尚、袁谭互相攻击,最终被曹操各个击破。建安十二年(公元207年),曹操彻底平定北方,占据了幽州、冀州、青州、并州、兖州、豫州、徐州等广大地区。\n

    \n

    \n 官渡之战的胜利,使曹操成为北方实际的统治者,为他统一北方奠定了坚实基础。此战后,曹操将主要精力用于巩固后方、发展经济、扩充军队,为南下统一全国做准备。\n

    \n \n

    \n 从历史角度看,官渡之战是中国古代军事史上的经典战例。曹操以少胜多、以弱胜强的成功经验,为后世军事家提供了宝贵的借鉴。此战也确立了曹操在三国鼎立格局中的主导地位。\n

    \n

    \n 3.6 曹操统一北方\n

    \n

    \n 击败袁绍后,曹操开始了统一北方的战争。建安九年(公元204年),曹操攻占邺城,吞并了袁尚的势力。建安十年(公元205年),曹操击败袁谭,收取青州。建安十一年(公元206年),曹操攻占并州,消灭了高干。\n

    \n

    \n 建安十二年(公元207年),曹操率军北征乌桓,在白狼山之战中大败乌桓军队,斩首蹋顿单于,彻底平定了北方边境。此战过后,北方地区获得了相对稳定的和平环境。\n

    \n

    \n 在平定北方的过程中,曹操注意招抚当地人才,北方社会经济得到了恢复和发展。曹操的统治为后来的曹魏政权奠定了基础,也为中国南北朝的统一创造了条件。\n

    \n

    \n 第四章 孙刘联盟与赤壁之战\n

    \n

    \n 4.1 曹操南征与荆州之变\n

    \n

    \n 建安十三年(公元208年),曹操平定北方后,率大军南下,目标是荆州和江东。荆州的刘表年老多病,其子刘琮继位。曹操大军压境时,刘琮在蒯越、韩嵩等人的劝说下投降曹操。\n

    \n

    \n 刘备当时驻守在新野,得知曹操南下的消息后,仓促撤退。曹操亲率五千精兵追击,在当阳长坂坡大败刘备。刘备被迫弃妻小而逃,在赵云的护卫下才得以脱险。\n

    \n

    \n 诸葛亮建议刘备联合孙权,共同抵抗曹操。当时孙权占据江东已有九年时间,根基牢固,兵精粮足。刘备派诸葛亮前往柴桑(今江西九江)说服孙权,促成孙刘联盟的形成。\n

    \n

    \n 4.2 孙刘联盟的形成\n

    \n

    \n 孙权接到曹操的劝降书后,犹豫不决。他的谋士鲁肃主张联合刘备抵抗曹操,而张昭等文臣则主张投降。鲁肃建议孙权召回周瑜,共同商讨对策。\n

    \n

    \n 周瑜从鄱阳湖赶回柴桑,与诸葛亮一起分析形势。周瑜认为,\n

    \n \n

    \n 曹操虽然兵多,但北方军队不习水战,而且后方不稳,马超、韩遂等人还在关西虎视眈眈。孙刘联军有战胜的可能。\n

    \n

    \n 孙权采纳了周瑜的建议,决定联合刘备抵抗曹操。他任命周瑜为左都督,程普为右都督,鲁肃为赞军校尉,率三万大军与刘备汇合。孙刘联盟的建立,为赤壁之战的胜利奠定了基础。\n

    \n

    \n 4.3 赤壁之战的准备\n

    \n

    \n 建安十三年冬,周瑜率军与刘备在江夏汇合。两军加起来共有五万余人,在赤壁与曹操大军隔江对峙。曹操的北方军队不习水战,为了克服晕船问题,他们将战船用铁索连接起来,以减少风浪的颠簸。\n

    \n

    \n 周瑜的部将黄盖发现曹操战船相连的弱点,建议采用火攻。他亲自写信向曹操假投降,麻痹敌人。曹操信以为真,没有防备。\n

    \n

    \n 战前,周瑜进行了周密的部署。他派黄盖率十艘装满易燃物品的战船靠近曹军舰队,准备实施火攻。同时命令主力部队待命,随时准备出击。\n

    \n

    \n 4.4 赤壁之战的经过\n

    \n

    \n 建安十三年十一月的一个夜晚,江面上刮起了东南风。黄盖率领十艘满载柴草、油脂的战船,向曹军舰队驶去。接近曹军时,黄盖下令点火,然后率部跳上小船离开。\n

    \n

    \n 着火的战船顺风冲入曹军舰队,由于战船用铁索相连,无法分散,\n

    \n

    \n 火势迅速蔓延。曹操的战船和岸上营地陷入一片火海,士兵死伤无数。\n

    \n

    \n 周瑜趁势率军渡江发动总攻,曹操大军大败。曹操被迫率残部撤退,在华容道又遭到关羽的伏击,损失惨重。此战,曹操损失了大部分军队和战船,基本丧失了统一南方的能力。\n

    \n

    \n 4.5 赤壁之战的结果与影响\n

    \n

    \n 赤壁之战后,曹操退回北方,短期内无力南下。孙权和刘备各自发展势力,形成了三国鼎立的雏形。刘备趁机夺取了荆州的江南四郡有了立足之地。\n

    \n

    \n 赤壁之战是中国古代军事史上最著名的以少胜多的战例之一。周瑜和黄盖的火攻计策,成为军事史上的经典战例。此战改变了三国的历史走向,\n

    \n \n

    \n 奠定了三国鼎立的格局。\n

    \n

    \n 从政治角度看,赤壁之战的胜利孙刘联盟的胜利,也是曹操“挟天子以令诸侯”战略的失败。此战后曹操不得不调整战略,转而巩固北方经营西北,为日后篡汉建魏做准备。\n

    \n

    \n 4.6 赤壁之战后的局势\n

    \n

    \n 赤壁之战后,刘备向孙权借荆州南郡,开始了建立蜀汉政权的进程。建安十四年(公元209年),周瑜率军攻占江陵,刘备表荐刘表长子刘琦为荆州刺史,自己以军师中郎将的身份治理荆州。\n

    \n

    \n 建安十五年(公元210年),周瑜病逝,孙权任命鲁肃为都督。鲁肃主张将荆州借给刘备,以共同对抗曹操。刘备得到荆州后,实力大增,开始向益州发展。\n

    \n

    \n 建安十六年(公元211年),刘璋邀请刘备入蜀对抗张鲁。刘备趁机率军入益州,拉开了夺取益州的序幕。建安十九年(公元214年),刘备包围成都,刘璋投降,刘备占据了益州。\n

    \n

    \n 第五章 三分天下格局的形成\n

    \n

    \n 5.1 刘备取益州与汉中\n

    \n

    \n 建安十六年(公元211年),益州牧刘璋听说曹操要攻打汉中张鲁,心中恐惧。谋士张松建议刘璋邀请刘备入蜀,共同抵御曹操。\n

    \n

    \n 刘璋采纳了这个建议,派法正迎请刘备。\n

    \n

    \n 刘备率军入蜀后,与刘璋的关系逐渐恶化。建安十七年(公元212年),刘备在葭萌关起兵,进攻成都。双方在涪城、绵竹等地展开激战,刘备进展顺利。\n

    \n

    \n 建安十九年(公元214年),刘备包围成都,刘璋被迫投降。刘备自领益州牧,封诸葛亮为军师将军,负责治理益州。从此,刘备拥有了荆州和益州两块根据地,三分天下有其一。\n

    \n

    \n 建安二十三年(公元218年),刘备率军进攻汉中,与曹操展开激战。建安二十四年(公元219年),刘备在定军山击败曹操,杀死曹操部将夏候渊,攻占汉中。刘备自称汉中王,实现了“隆中对”中跨有荆益的战略目标。\n

    \n \n

    \n 5.2 关羽失荆州\n

    \n

    \n 建安二十四年(公元219年),关羽在刘备攻取汉中的同时,发动了北伐襄樊的战争。关羽率军围攻樊城的曹仁,曹操派于禁率七军前来救援。\n

    \n

    \n 秋天的连绵大雨导致汉水泛滥,于禁的七军被洪水淹没,于禁被迫投降。关羽乘势进攻,曹操的大将于禁被俘,庞德被杀,曹操震动。关羽威震华夏,曹操甚至一度考虑迁都以避其锋芒。\n

    \n

    \n 然而就在关羽北伐胜利之际,孙权派吕蒙白衣渡江,袭取了荆州。关羽得知后方失守后,仓促回撤,但为时已晚。关羽最终在麦城被孙权部将马忠擒杀,荆州落入东吴手中。\n

    \n

    \n 关羽失荆州是三国时期的重大事件,它打破了孙刘联盟,也使刘备失去了北伐的通道。蜀汉的势力范围从此被压缩在益州一地,难以对外发展。\n

    \n

    \n 5.3 曹丕篡汉与曹魏建立\n

    \n

    \n 建安二十五年(公元220年),曹操病逝于洛阳,终年六十五岁。曹操死后,其子曹丕继承魏王爵位,掌控了魏国的军政大权。\n

    \n

    \n 同年十月,曹丕迫使汉献帝禅让帝位,建立魏国,是为魏文帝。东汉王朝正式灭亡,三国时代正式开始。曹丕定都洛阳,改元黄初。\n

    \n

    \n 曹丕称帝后,追尊曹操为魏武帝,庙号太祖。曹魏政权控制了北方中原地区,拥有最广阔的土地和最多的人口,是三国中实力最强的政权。\n

    \n

    \n 5.4 刘备称帝与蜀汉建立\n

    \n

    \n 章武元年(公元221年),刘备在成都称帝,建立蜀汉政权,是为蜀汉昭烈帝。刘备定都成都,以诸葛亮为丞相,许靖为司徒。\n

    \n

    \n 刘备称帝后做的第一件事就是发兵伐吴,为关羽报仇。同年,刘备亲率大军进攻东吴,试图夺回荆州。孙权派陆逊率军抵御。\n

    \n

    \n 蜀汉与东吴的夷陵之战爆发于章武二年(公元222年)。刘备率军在夷陵一带扎营连营数百里,与吴军相持。陆逊采用火攻,大败蜀军。刘备逃回白帝城,蜀汉元气大伤。\n

    \n

    \n 5.5 三国鼎立格局的正式形成\n

    \n

    \n 夷陵之战后,刘备病逝于白帝城,终年六十三岁。诸葛亮辅佐后主刘禅,\n

    \n \n

    \n 继续治理蜀汉。蜀汉与东吴重新修好,恢复了孙刘联盟。\n

    \n

    \n 黄初二年(公元221年),孙权也称王,建都建业,国号吴,但未正式称帝。直到黄龙元年(公元229年),孙权才正式称帝,建立东吴政权。\n

    \n

    \n 至此,三国鼎立的格局正式形成:曹魏占据北方中原地区,拥有洛阳、长安等大城市,人口众多,经济发达;蜀汉占据益州和汉中,地势险要,易守难攻;东吴占据江东六郡,经济繁荣,水军强大。三国之间形成了相对稳定的对峙局面。\n

    \n

    \n 5.6 三国鼎立时期的特点\n

    \n

    \n 三国鼎立时期,各国都注重发展经济、整军经武。曹魏实行九品中正制,蜀汉推行依法治国,东吴则大力发展海外贸易。三个政权都在各自的统治区域内建立了一套相对完整的政治制度。\n

    \n

    \n 在军事方面,三国都面临外部威胁。曹魏需要防御蜀汉和东吴的进攻,同时还要应对北方少数民族的侵扰;蜀汉和东吴则需要联合起来共同对抗曹魏。这种军事对峙持续了四十多年。\n

    \n

    \n 在文化方面,三国时期出现了许多杰出的文学家、艺术家和科学家。曹植的文学成就极高,诸葛亮的智慧成为后世楷模,东吴的航海技术领先世界。三国文化成为中国传统文化的重要组成部分。\n

    \n

    \n 第六章 蜀汉政权的建立与发展\n

    \n

    \n 6.1 诸葛亮辅政\n

    \n

    \n 章武三年(公元223年),刘备病逝于白帝城,临终前托孤于诸葛亮。刘备对诸葛亮说:“君才十倍于曹丕,必能安国,终定大事。若嗣子可辅,辅之;如其不才,君可自取。”诸葛亮感激涕零,表示“臣敢竭股肱之力,效忠贞之节,继之以死”。\n

    \n

    \n 诸葛亮被后主刘禅封为武乡侯,开府治事。实际上,诸葛亮成为蜀汉政权的最高执政者,总揽军政大权。他内修政治,外整军务,殚精竭虑,维护蜀汉政权的生存和发展。\n

    \n

    \n 在政治上,诸葛亮推行法治,注重选拔人才。他制定蜀科,依法治国,使得蜀汉政治较为清明。在经济上,诸葛亮重视农业生产,鼓励蚕桑,发展蜀锦等手工业。在军事上,诸葛亮训练军队,改进武器,\n

    \n \n

    \n 提升蜀军的战斗力。\n

    \n

    \n 6.2 蜀汉的内政与经济\n

    \n

    \n 诸葛亮治理蜀汉期间,实行了一系列政治经济改革。在政治制度方面,诸葛亮完善了官制,建立了较为完整的官僚体系。他注重选拔人才,不看出身门第,只看才能德行。\n

    \n

    \n 在经济方面,诸葛亮推行屯田制,让士兵和民众开垦荒地,增加粮食产量。他重视水利建设,维护都江堰等水利工程,保障农业生产的顺利进行。蜀锦是蜀汉的重要特产,诸葛亮大力发展蜀锦生产,通过对外贸易换取曹魏和东吴的物资。\n

    \n

    \n 在民族政策方面,诸葛亮采取“以夷制夷”的策略,妥善处理与西南少数民族的关系。他七擒七纵孟获,获得了少数民族的拥护,确保了蜀汉后方的稳定。\n

    \n

    \n 6.3 蜀汉的对外关系\n

    \n

    \n 刘备去世后,诸葛亮派邓芝出使东吴,修复了孙刘联盟。邓芝不辱使命,说服孙权与蜀汉重新结盟,共同对抗曹魏。此后,蜀汉与东吴的关系一直保持良好,直到蜀汉灭亡。\n

    \n

    \n 对于曹魏,诸葛亮采取敌对态度,但同时也保持了表面的外交关系。他多次派人出使东吴和曹魏,了解两国情况,寻求有利的外交环境。\n

    \n

    \n 在处理与西南少数民族的关系方面,诸葛亮表现出了高超的政治智慧。他尊重少数民族的风俗习惯,任用当地首领为官,赢得了少数民族的拥护。这为蜀汉政权的稳定提供了重要保障。\n

    \n

    \n 6.4 蜀汉的著名人物\n

    \n

    \n 蜀汉政权人才济济,文武兼备。诸葛亮是蜀汉最重要的政治家和军事家,他上知天文,下知地理,足智多谋,被誉为“千古第一相”。\n

    \n

    \n 在文臣方面,蜀汉有法正、董和、蒋琬、费祎、姜维等人。法正善于奇谋,是刘备的得力谋士;蒋琬、费祎继承诸葛亮的事业,治理蜀汉;姜维是诸葛亮指定的接班人,继续坚持北伐。\n

    \n

    \n 在武将方面,蜀汉有关羽、张飞、赵云、马超、黄忠“五虎上将”,\n

    \n \n

    \n 以及魏延、王平、廖化、向宠等将领。关羽、张飞是刘备的结义兄弟,英勇善战;赵云是刘备的护卫,多次救主于危难之中;马超、黄忠是后来归降的猛将。\n

    \n

    \n 6.5 蜀汉的政治制度\n

    \n

    \n 蜀汉的政体基本沿袭汉制,但也有所创新。刘禅虽然是皇帝,但实际权力掌握在丞相手中。诸葛亮开府治事,有自己的丞相府僚属,形成了与皇帝并列的行政体系。\n

    \n

    \n 蜀汉的官制分为中央和地方两级。中央有丞相、太尉、司徒、司空等官职,地方有州、郡、县三级。诸葛亮实行依法治蜀,制定了蜀科,作为基本法律。\n

    \n

    \n 蜀汉的选拔制度主要是察举和考试相结合。诸葛亮注重人才的选拔和培养,建立了完善的官员考核制度。他推荐的人才,大都德才兼备,为蜀汉的发展做出了贡献。\n

    \n

    \n 6.6 蜀汉的社会文化\n

    \n

    \n 蜀汉时期,成都成为西南地区的文化中心。诸葛亮重视教育,设立学校,培养人才。蜀汉的学术氛围浓厚,出现了许多著名的学者和文人。\n

    \n

    \n 蜀汉的文学艺术也有较高成就。陈寿的《三国志》是史学名著,记载了三国时期的历史。诸葛亮的前后《出师表》是千古名文,表达了他对国家的忠诚。\n

    \n

    \n 蜀汉的科技也有一定发展。诸葛亮发明了木牛流马、连弩等军事器械,提高了蜀军的战斗力。他还将先进的农业技术传授给西南少数民族,促进了当地经济社会的发展。\n

    \n

    \n 第七章 曹魏政权的巩固与传承\n

    \n

    \n 7.1 曹丕的政治措施\n

    \n

    \n 曹丕继位魏王后,实行了一系列政治改革来巩固自己的统治。他推行九品中正制,兼顾了士族和寒门的利益,暂时缓解了统治阶级内部的矛盾。这一制度成为魏晋南北朝时期的主要选官制度。\n

    \n

    \n 在军事方面,曹丕继续推行曹操的军事政策,加强中央对军队的控制。\n

    \n \n

    \n 他多次率军伐吴,虽然没有取得重大胜利,但巩固了魏国在江淮地区的防线。\n

    \n

    \n 在经济方面,曹丕继续推行屯田制,重视农业生产。他下令兴修水利,鼓励垦荒,使得北方经济得到恢复和发展。曹丕还注重商业贸易,促进了物资流通。\n

    \n

    \n 7.2 曹丕的对外战争\n

    \n

    \n 黄初三年(公元222年),曹丕率军伐吴,发动了第一次濡须口之战。魏军与吴军相持数月,互有胜负,最终无功而返。\n

    \n

    \n 黄初五年(公元224年),曹丕第二次伐吴,这次他亲自率军进攻广陵(今江苏扬州),但因为长江水涨,无功而返。黄初六年(公元225年),曹丕第三次伐吴,再次失败。\n

    \n

    \n 三次伐吴的失败,使曹丕认识到短时间内无法消灭东吴。他调整了战略,将主要精力放在国内建设上,发展经济,整顿内政,为最终统一天下做准备。\n

    \n

    \n 7.3 曹叡继位与辅政\n

    \n

    \n 黄初七年(公元226年),曹丕病逝于洛阳,终年四十岁。曹丕死后,其子曹叡继位,是为魏明帝。曹叡继位时只有二十二岁,资历较浅,需要依靠老臣辅政。\n

    \n

    \n 曹叡继位后面临的主要问题是辅政大臣的选择。曹丕临终前指定曹真、\n

    \n

    \n 陈群、司马懿为辅政大臣,辅佐曹叡。这三人都是曹魏的重臣各有特长。\n

    \n

    \n 曹叡虽然年轻,但很有才能。他能够驾驭群臣,保持政局的稳定。在军事上,他多次击退蜀汉和东吴的进攻,保卫了魏国的安全。在内政上,他注重发展经济,使得魏国实力不断增强。\n

    \n

    \n 7.4 司马懿的崛起\n

    \n

    \n 司马懿(字仲达,河内温县人)是三国时期最重要的政治家和军事家之一,也是晋朝的奠基人。他出身于司马氏家族,是东汉末年的名士。\n

    \n

    \n 曹操时期,司马懿被征召为官,但长期得不到重用。曹丕继位后,司马懿开始受到重用,逐渐升任要职。曹叡时期,司马懿多次率军出征,\n

    \n \n

    \n 屡立战功,成为魏国最重要的军事统帅之一。\n

    \n

    \n 司马懿曾多次抵御诸葛亮的北伐,功绩卓著。他采取的正确战略战术,有效地消耗了蜀汉的国力。司马懿还率军平定辽东,消灭了公孙渊的割据势力,为魏国解除了后顾之忧。\n

    \n

    \n 7.5 曹魏后期的政治\n

    \n

    \n 曹叡去世后,其养子曹芳继位,年仅八岁。曹爽和司马懿被任命为辅政大臣,两人共同执掌朝政。曹爽是曹真的儿子,代表曹氏宗亲的利益;司马懿代表士族集团的利益。\n

    \n

    \n 曹爽与司马懿之间存在尖锐的矛盾。曹爽排挤司马懿,将他明升暗降,剥夺了军权。司马懿假装生病,不问政事,暗中积蓄力量准备反击。\n

    \n

    \n 正始十年(公元249年),司马懿乘曹爽陪同曹芳出祭高平陵之机,发动政变,诛杀曹爽及其党羽。从此,司马家族掌控了曹魏的朝政大权,为后来的司马氏代魏建立了基础。\n

    \n

    \n 7.6 曹魏的灭亡\n

    \n

    \n 司马懿死后,其子司马师、司马昭继续执掌朝政。司马师废黜曹芳,改立曹奂为帝。司马昭弑杀魏帝曹髦,另立曹奂为帝。曹魏政权已经名存实亡。\n

    \n

    \n 咸熙二年(公元265年),司马昭之子司马炎代魏称帝,建立晋朝,是为晋武帝。曹魏政权至此灭亡。从曹丕称帝到曹魏灭亡,历时四十五年。\n

    \n

    \n 曹魏虽然灭亡了,但它为晋朝的统一奠定了基础。曹操、曹丕、曹叡祖孙三代经营北方,使得中原地区经济繁荣,社会稳定,为晋朝灭吴统一全国创造了条件。\n

    \n

    \n 第八章 东吴政权的繁荣与衰落\n

    \n

    \n 8.1 孙权的统治政策\n

    \n

    \n 孙权(字仲谋,吴郡富春人)是三国时期在位时间最长的君主之一。他从建安五年(公元200年)继承兄业,到太元二年(公元252年)去世,执政长达五十二年。\n

    \n

    \n 孙权善于用人,能够发挥各人的长处。他重用周瑜、鲁肃、吕蒙、\n

    \n \n

    \n 陆逊等名将,形成了东吴的四大都督系统。在文臣方面,他重用张昭、顾雍、诸葛瑾等人,治理国家。\n

    \n

    \n 在经济方面,孙权大力发展江南经济,鼓励农民开垦荒地,推广先进的农业生产技术。他重视海上贸易,与辽东、东南亚等地有贸易往来。东吴的造船业和航海业在当时处于世界领先地位。\n

    \n

    \n 8.2 东吴的对外扩张\n

    \n

    \n 孙权在位期间,积极向外扩张领土。建安十三年(公元208年),东吴与刘备联军在赤壁击败曹操,解除了北方的威胁。此后,东吴开始向岭南地区扩张。\n

    \n

    \n 建安二十五年(公元220年),孙权派步骘率军平定岭南,占据了交州(今广东、广西、越南北部)。黄龙二年(公元230年),孙权派卫温、诸葛直率军一万出海,寻找夷洲(今台湾),虽然损失较大,但加强了对台湾的联系。\n

    \n

    \n 嘉禾六年(公元237年),东吴派陆胤率军平定海南岛的叛乱,将海南岛纳入东吴版图。东吴的疆域扩展到了极盛时期。\n

    \n

    \n 8.3 东吴与蜀魏的关系\n

    \n

    \n 东吴与蜀汉的关系经历了合作与冲突的过程。赤壁之战后,孙刘联盟共同抗曹,保持了较长时期的合作。但荆州问题一直是两国之间的矛盾焦点。\n

    \n

    \n 关羽失荆州后,刘备伐吴,夷陵之战爆发,东吴击败蜀汉。两败俱伤后,\n

    \n

    \n 双方重新修好。诸葛亮执政期间,蜀吴关系一直保持良好,共同对抗曹魏。\n

    \n

    \n 东吴与曹魏的关系则比较复杂。曹丕时期,东吴曾两次向魏称臣,接受魏国的封号。但孙权并不真正服从曹魏,只是利用魏国的支持来发展自己的势力。\n

    \n

    \n 8.4 东吴的四大都督\n

    \n

    \n 东吴历史上最著名的是四位都督:周瑜、鲁肃、吕蒙、陆逊。他们在不同的历史时期担任最高军事指挥官,为东吴的发展做出了重要贡献。\n

    \n

    \n 周瑜是东吴的开国元勋,他辅佐孙策平定江东,\n

    \n \n

    \n 又在赤壁之战中击败曹操,奠定了东吴的基业。鲁肃是东吴的战略家,他主张联合刘备共同抗曹,为东吴制定了正确的战略方针。\n

    \n

    \n 吕蒙是东吴的名将,他白衣渡江,袭取荆州,杀死关羽,为东吴夺得了梦寐以求的荆州。陆逊是东吴后期的支柱,他火烧连营,击败刘备,又多次抵御曹魏的进攻,保卫了东吴的安全。\n

    \n

    \n 8.5 东吴的经济与文化\n

    \n

    \n 东吴时期,江南经济得到了快速发展。孙权推行一系列发展农业的措施,使得粮食产量大幅提高。江南的丝织业、制瓷业、造船业都有较大发展。\n

    \n

    \n 东吴的造船业在当时处于世界领先地位。东吴拥有当时世界上最庞大的船队,能够制造大型海船。东吴的航海家曾到达夷洲、澶洲等地,与东南亚诸国建立了贸易关系。\n

    \n

    \n 在文化方面,东吴出现了许多著名的学者和文人。虞翻、王朗、张温等人是当时的经学大师。东吴的书法、绘画艺术也有较高成就,对后世产生了深远影响。\n

    \n

    \n 8.6 东吴的衰落与灭亡\n

    \n

    \n 孙权去世后,东吴的政治开始混乱。孙亮的继位引发了内部的权力斗争,诸葛恪、孙峻、孙綝等人先后专权,政治腐败严重。\n

    \n

    \n 孙皓继位后,实行暴政,残害忠良,荒淫无道。他多次发动对晋的战争,但都以失败告终。天纪四年(公元280年),晋军南下,东吴灭亡。\n

    \n

    \n 从孙权称王到东吴灭亡,东吴历时五十九年。\n

    \n

    \n 东吴的灭亡标志着三国时代的结束。晋朝完成了对全国的统一,结束了自黄巾起义以来近一百年的分裂局面。\n

    \n

    \n 第九章 诸葛亮北伐与三国相持\n

    \n

    \n 9.1 诸葛亮北伐的背景\n

    \n

    \n 蜀汉建立后,诸葛亮制定了“北伐中原,复兴汉室”的战略方针。他认为,如果不主动出击,只会导致蜀汉与曹魏的差距越来越大,最终会被消灭。只有通过北伐,才能实现刘备“兴复汉室”的遗愿。\n

    \n

    \n 从客观条件看,北伐也具有一定的可行性。\n

    \n \n

    \n 曹魏的主要敌人是蜀汉和东吴,需要两面作战。而蜀汉有汉中这个战略要地,可以威胁关中地区。诸葛亮认为,如果能够占领关中地区,就可以进而统一天下。\n

    \n

    \n 当然,北伐也面临着巨大的困难。蜀汉人口稀少,国力有限,难以支撑长期战争。从益州到关中道路险阻,运输困难。曹魏实力强大,不是轻易能够击败的。\n

    \n

    \n 9.2 第一次北伐\n

    \n

    \n 建兴六年(公元228年),诸葛亮发动了第一次北伐。他率军出祁山,攻击曹魏的陇右地区。蜀军进展顺利,天水、南安、安定三郡相继投降。\n

    \n

    \n 曹魏方面非常震惊,派出张郃率军抵御。诸葛亮派马谡驻守街亭,但马谡违反诸葛亮的部署,被张郃击败。街亭失守后,诸葛亮被迫退兵,第一次北伐失败。\n

    \n

    \n 第一次北伐虽然失败,但诸葛亮展示了自己的军事才能,也锻炼了蜀军。诸葛亮挥泪斩马谡,表明他执法严明,不徇私情。\n

    \n

    \n 9.3 后续北伐\n

    \n

    \n 建兴六年冬天,诸葛亮发动第二次北伐,攻击陈仓。但由于陈仓防守严密,蜀军久攻不下,最终退兵。建兴七年(公元229年),诸葛亮发动第三次北伐,攻占武都、阴平二郡。\n

    \n

    \n 建兴九年(公元231年),诸葛亮发动第四次北伐,包围祁山。司马懿率军抵御,但采取了守势,不与蜀军决战。诸葛亮因为粮尽退兵,\n

    \n

    \n 在退兵途中射杀了魏将张郃。\n

    \n

    \n 建兴十二年(公元234年),诸葛亮发动第五次北伐,这是他最后一次北伐。诸葛亮率军出斜谷,与司马懿相持于五丈原。诸葛亮积劳成疾,于同年八月病逝于五丈原,终年五十四岁。\n

    \n

    \n 9.4 姜维北伐\n

    \n

    \n 诸葛亮去世后,姜维继承了北伐的事业。姜维是蜀汉后期的军事统帅,他继承了诸葛亮的遗志,多次率军北伐。\n

    \n

    \n 从延熙十六年(公元253年)开始,姜维多次发动北伐战争,但胜少败多。\n

    \n \n

    \n 蜀汉国力有限,无法支撑长期的战争。姜维的北伐虽然没有取得重大胜利,但也牵制了曹魏的兵力。\n

    \n

    \n 景耀六年(公元263年),曹魏发动灭蜀之战,钟会、邓艾率军进攻蜀汉。姜维在剑阁抵御钟会,但邓艾偷渡阴平,逼近成都。后主刘禅投降,蜀汉灭亡。姜维试图复国,但最终失败被杀。\n

    \n

    \n 9.5 三国相持时期的战争\n

    \n

    \n 诸葛亮去世后,三国进入了相持阶段。各方虽然时有战争,但都没有能力消灭对方。这种相持局面持续了四十多年。\n

    \n

    \n 在东线,曹魏与东吴之间战争不断。曹爽曾率军伐吴,但失败而归。司马懿父子也多次进攻东吴,但都没有取得决定性胜利。\n

    \n

    \n 在西线,蜀汉的北伐虽然失败,但有效地牵制了曹魏的兵力。曹魏需要部署大量军队防守西部边境,消耗了大量资源。\n

    \n

    \n 9.6 三国相持时期的政治\n

    \n

    \n 三国相持时期,各国内部都出现了一些政治问题。蜀汉方面,诸葛亮去世后,蒋琬、费祎先后执政,政治较为稳定。但后主刘禅宠信黄皓,朝廷政治开始腐败。\n

    \n

    \n 曹魏方面,司马氏逐渐掌控了朝政。司马懿、司马师、司马昭父子三人相继执掌大权,曹魏皇帝成为傀儡。曹魏后期的政治腐败严重,阶级矛盾尖锐。\n

    \n

    \n 东吴方面,孙权晚年立储问题处理不当,引发了严重的宫廷斗争。\n

    \n

    \n 孙皓继位后,政治更加腐败,民不聊生。这为东吴的灭亡埋下了伏笔。\n

    \n

    \n 9.7 三国相持时期的经济\n

    \n

    \n 三国相持时期,各国都比较注重发展经济。曹魏继续推行屯田制,中原地区的农业得到恢复。司马氏掌权后,实行了一些改革,促进了经济发展。\n

    \n

    \n 蜀汉在诸葛亮的治理下,经济有所发展。但蜀汉人口较少,国力有限,难以支撑长期的战争消耗。后期连年北伐,加重了民众的负担。\n

    \n

    \n 东吴的经济发展较快,江南地区的农业和商业都有较大发展。但东吴的赋税较重,民众负担较大,影响了经济的可持续发展。\n

    \n \n

    \n 第十章 三国归晋与历史终结\n

    \n

    \n 10.1 晋朝的建立\n

    \n

    \n 司马懿发动高平陵政变后,司马氏逐渐掌控了曹魏的朝政大权。司马懿、司马师、司马昭父子三人相继执掌朝政,为代魏称帝做好了准备。\n

    \n

    \n 咸熙二年(公元265年),司马昭去世,其子司马炎继为晋王。同年十二月,司马炎代魏称帝,建立晋朝,是为晋武帝。晋朝定都洛阳,改元泰始。\n

    \n

    \n 晋武帝称帝后,追尊祖父司马懿为晋宣帝,父亲司马昭为晋文帝,伯父司马师为晋景帝。晋朝的建立,标志着三国时代的结束和中国历史上的西晋时期开始。\n

    \n

    \n 10.2 晋灭蜀汉\n

    \n

    \n 晋朝建立后,晋武帝开始准备统一天下。当时蜀汉已经衰落,后主刘禅宠信黄皓,朝廷政治腐败。姜维虽然多次北伐,但无功而返,国力消耗严重。\n

    \n

    \n 景耀六年(公元263年),晋武帝派钟会、邓艾率军伐蜀。钟会率主力进攻汉中,牵制姜维;邓艾率军偷渡阴平,直取成都。\n

    \n

    \n 姜维在剑阁抵御钟会,互有胜负。但邓艾偷渡阴平成功后,刘禅惊慌失措,不战而降。蜀汉灭亡,历时四十三年。姜维试图复国,但最终失败被杀。\n

    \n

    \n 10.3 晋灭东吴\n

    \n

    \n 蜀汉灭亡后,晋朝开始了灭吴的准备。晋武帝采纳羊祜的建议,积极准备灭吴战争。羊祜镇守荆州,与东吴名将陆抗相持,互有胜负。\n

    \n

    \n 羊祜去世后,杜预、张华等人继续推动灭吴战争。杜预镇守荆州,积极训练水军,准备渡江作战。天纪四年(公元280年),晋武帝下诏灭吴,派杜预、王浑率军进攻。\n

    \n

    \n 晋军分兵多路,全面进攻。王浑率军渡过长江,击败东吴主力。杜预率军攻占江陵,张悌率军渡江攻入建业。孙皓见大势已去,投降晋朝。东吴灭亡,历时五十九年。\n

    \n \n

    \n 10.4 三国归晋的历史意义\n

    \n

    \n 三国归晋,结束了自黄巾起义以来近一百年的分裂局面,实现了中国的统一。这是中国历史上又一次重要的大统一,对中国社会的发展产生了深远影响。\n

    \n

    \n 晋朝的统一,为社会经济的恢复和发展创造了条件。战乱结束,人民得以休养生息,中原地区和江南地区都得到了开发。晋朝初期出现了“太康盛世”,经济繁荣,社会安定。\n

    \n

    \n 然而,晋朝的统一并没有持续太久。晋武帝死后,发生了“八王之乱”,中原地区陷入混乱。随后是“五胡乱华”,西晋灭亡,中国再次陷入分裂。\n

    \n

    \n 10.5 三国时期的历史遗产\n

    \n

    \n 三国时期虽然只有短短的四十多年,但留下了丰富的历史遗产。在政治制度方面,三国时期的选官制度、法律制度等对后世产生了影响。曹魏的九品中正制成为魏晋南北朝时期的主要选官制度。\n

    \n

    \n 在文学艺术方面,三国时期出现了许多杰出的人才。曹操、曹植父子是文学史上重要的人物,“建安风骨”成为中国文学的典范。诸葛亮的智慧成为后世推崇的楷模。\n

    \n

    \n 在军事方面,三国时期的许多战例成为军事教材。官渡之战、赤壁之战、夷陵之战等都是经典的以少胜多的战例,为后世军事家所借鉴。\n

    \n

    \n 10.6 三国历史的后世影响\n

    \n

    \n 三国历史对后世产生了深远影响。《三国演义》是中国的四大名著之一,塑造了许多深入人心的人物形象。诸葛亮、关羽、曹操、周瑜等人物成为家喻户晓的历史人物。\n

    \n

    \n 三国的故事在民间广为流传,形成了丰富的文化传统。桃园结义、借东风、空城计等故事成为人们茶余饭后的谈资。三国文化已经成为中国传统文化的重要组成部分。\n

    \n

    \n 在海外,三国文化也有广泛影响。日本、韩国、东南亚等地区都有三国故事的传播。三国文化成为中国软实力的重要组成部分,在世界范围内产生了影响。\n

    \n \n

    \n 附录一 三国主要人物简介\n

    \n

    \n 魏国主要人物\n

    \n

    \n 曹操(155年-220年),字孟德,沛国谯县人。三国时期最杰出的政治家、军事家、文学家。曹操挟天子以令诸侯,统一北方,为曹魏政权的建立奠定了基础。曹操还是杰出的文学家,与儿子曹丕、曹植并称“三曹”。\n

    \n

    \n 曹丕(187年-226年),字子桓,曹操次子。220年代汉称帝,建立魏国,是为魏文帝。曹丕推行九品中正制,确立了魏晋南北朝时期的选官制度。\n

    \n

    \n 曹叡(204年-239年),字元仲,曹丕之子。魏明帝,在位期间多次击退蜀汉和东吴的进攻,保卫了魏国的安全。\n

    \n

    \n 司马懿(179年-251年),字仲达,河内温县人。三国时期最重要的政治家、军事家之一,晋朝的奠基人。司马懿辅佐曹魏四代,抵御诸葛亮北伐,平定辽东,最终掌握朝政大权。\n

    \n

    \n 张辽(169年-222年),字文远,雁门马邑人。曹操麾下著名将领,合肥之战中大败孙权,威震江东。\n

    \n

    \n 郭嘉(170年-207年),字奉孝,颍川阳翟人。曹操最重要的谋士之一,英年早逝,曹操曾感叹“郭奉孝在,不使孤至此”。\n

    \n

    \n 蜀汉主要人物\n

    \n

    \n 刘备(161年-223年),字玄德,涿郡涿县人。汉景帝之后,\n

    \n

    \n 三国时期蜀汉政权的建立者。刘备以仁德著称,三顾茅庐请诸葛亮,形成三国鼎立的局面。\n

    \n

    \n 诸葛亮(181年-234年),字孔明,琅琊阳都人。三国时期最杰出的政治家、军事家。诸葛亮辅佐刘备建立蜀汉,后又辅佐后主刘禅,实行依法治蜀,多次北伐。诸葛亮被誉为“千古第一相”。\n

    \n

    \n 关羽(162年或160年-220年),字云长,河东解人。刘备的结义兄弟,蜀汉著名将领。关羽忠义无双,被后人尊为“武圣”。\n

    \n

    \n 张飞(165年-221年),字益德,涿郡涿县人。刘备的结义兄弟,蜀汉著名将领。张飞勇猛异常,但性格暴躁。\n

    \n

    \n 赵云(?-229年),字子龙,常山真定人。刘备的护卫,蜀汉著名将领。\n

    \n \n

    \n 赵云英勇善战,多次救主于危难之中。\n

    \n

    \n 姜维(202年-264年),字伯约,天水冀县人。诸葛亮之后的蜀汉军事统帅,继承诸葛亮北伐的事业,但最终失败被杀。\n

    \n

    \n 东吴主要人物\n

    \n

    \n 孙权(182年-252年),字仲谋,吴郡富春人。三国时期东吴政权的建立者,在位五十三年,是三国时期在位时间最长的君主。\n

    \n

    \n 周瑜(175年-210年),字公瑾,庐江舒县人。东吴开国元勋,赤壁之战中击败曹操,奠定东吴基业。\n

    \n

    \n 鲁肃(172年-217年),字子敬,临淮东城人。东吴战略家,主张联合刘备共同抗曹,为东吴制定了正确的战略方针。\n

    \n

    \n 吕蒙(178年-220年),字子明,汝南富陂人。东吴名将,白衣渡江袭取荆州,杀死关羽。\n

    \n

    \n 陆逊(183年-245年),字伯言,吴郡吴县人。东吴后期支柱,火烧连营击败刘备,多次抵御曹魏进攻。\n

    \n

    \n 张昭(156年-236年),字子布,彭城人。东吴重臣,孙策的托孤大臣之一,长期辅佐孙权。\n

    \n

    \n 附录二 三国时期著名战役\n

    \n

    \n 官渡之战\n

    \n

    \n 官渡之战发生在建安五年(公元200年),是曹操与袁绍之间决定北方归属的战争。曹操以少胜多,击败袁绍的十万大军,奠定了统一北方的基础。此战是三国时期最经典的以少胜多的战例之一。\n

    \n

    \n 赤壁之战\n

    \n

    \n 赤壁之战发生在建安十三年(公元208年),是孙刘联军与曹操大军之间的战争。孙刘联军在周瑜的指挥下,采用火攻,大败曹军,奠定了三国鼎立的格局。此战是中国古代军事史上最著名的战例之一。\n

    \n

    \n 夷陵之战\n

    \n

    \n 夷陵之战发生在章武二年(公元222年),是刘备伐吴的战争。\n

    \n \n

    \n 陆逊采用火攻,大败刘备,蜀汉从此一蹶不振。此战与官渡之战、赤壁之战并称为三国三大战役。\n

    \n

    \n 街亭之战\n

    \n

    \n 街亭之战发生在建兴六年(公元228年),是诸葛亮第一次北伐中的关键战役。马谡违反诸葛亮的部署,被张郃击败,导致蜀军被迫退兵。此战成为诸葛亮挥泪斩马谡的典故。\n

    \n

    \n 合肥之战\n

    \n

    \n 合肥之战发生在建安二十年(公元215年),是孙权进攻曹操的战争。张辽以八百精兵大败孙权十万大军,差点活捉孙权。此战奠定了张辽“威震江东”的威名。\n

    \n

    \n 石亭之战\n

    \n

    \n 石亭之战发生在黄武七年(公元228年),是东吴与曹魏之间的战争。陆逊率军大败曹休,斩获万余人。此战巩固了东吴在江东的统治。\n

    \n

    \n 附录三 三国疆域与行政区划\n

    \n

    \n 魏国疆域\n

    \n

    \n 魏国占据北方中原地区,包括司隶、豫州、兖州、徐州、青州、冀州、幽州、并州、凉州、雍州等地区。魏国定都洛阳,后来迁都许昌,再迁回洛阳。魏国是三国中疆域最大、人口最多的政权。\n

    \n

    \n 蜀汉疆域\n

    \n

    \n 蜀汉占据益州和荆州部分地区,包括益州全境以及荆州的武陵、零陵、桂阳、长沙等郡。蜀汉定都成都。蜀汉是三国中疆域最小、人口最少的政权,但地势险要,易守难攻。\n

    \n

    \n 东吴疆域\n

    \n

    \n 东吴占据江东六郡以及荆州、扬州、交州等地,包括今江苏、浙江、安徽、江西、福建、广东、广西、海南以及越南北部等地区。东吴定都建业(今江苏南京)。东吴是三国中海岸线最长的政权,航海业发达。\n

    \n

    \n 三国行政区划比较\n

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n 政权\n \n 都城\n \n 主要州郡\n \n 人口(估计)\n
    \n 曹魏\n \n 洛阳/许昌\n \n 司隶、豫州、兖州等\n \n 约400万\n
    \n 蜀汉\n \n 成都\n \n 益州、荆州\n \n 约100万\n
    \n 东吴\n \n 建业\n \n 扬州、交州、荆州\n \n 约200万\n
    \n

    \n 三国时期的地理概念\n

    \n

    \n 三国时期的“州”与现代的省份概念不同,是一个较大的行政区划。三国时期的州数量比东汉时期有所减少,但每个州的管辖范围仍然很大。\n

    \n

    \n 三国时期,中原地区是经济最发达的地区,人口密集。江南地区虽然开发较晚,但在东吴的治理下,经济有了较大发展。西南地区地形复杂,交通不便,开发程度较低。\n

    \n

    \n 结语\n

    \n

    \n 三国时期是中国历史上一个非常重要的时期,从黄巾起义(184年)到东吴灭亡(280年),历时近百年。这段历史充满了英雄人物、经典战例和传奇故事,对后世产生了深远影响。\n

    \n

    \n 曹操、刘备、孙权三大枭雄在乱世中崛起各自建立了政权,形成了三国鼎立的局面。他们之间的政治斗争、军事较量、外交斡旋,构成了三国历史的主要内容。\n

    \n

    \n 诸葛亮、关羽、周瑜、司马懿等历史人物以其卓越的才能和高尚的品格,\n

    \n

    \n 成为后世楷模。他们的故事被后人传颂不衰,成为中国传统文化的重要组成部分。\n

    \n

    \n 《三国演义》是中国的四大名著之一,它以历史为素材,融入民间传说和文学创造,塑造了许多深入人心的人物形象。诸葛亮的多智近妖、关羽的忠义无双、曹操的奸雄形象,都对大众认知产生了深远影响。\n

    \n

    \n 三国历史虽然已经过去了一千多年,但它的影响仍在继续。三国文化已经成为中国文化的的重要组成部分,在文学、艺术、游戏、影视等各个领域都有广泛的应用。三国的故事将继续传承下去,影响着一代又一代的中国人。\n

    \n \n

    \n 回顾三国历史,我们可以看到:在乱世中,人才是决定性的因素;\n

    \n

    \n 在竞争中,战略眼光至关重要;在治理中,民心向背决定了政权的兴衰。这些历史经验对于今天仍然具有借鉴意义。\n

    \n

    \n —— 完 ——\n

    \n \n \n'},loading:{type:Boolean,default:!1},errorMessage:{type:String,default:""},filename:{type:String,default:""}},emits:["close","refresh"],data:()=>({currentSlideIndex:0,pageTurnDirection:1,slides:[],isParsing:!1,parseErrorMessage:"",parsedHeadContent:"",slideHtmlCache:{},_vietualData:{success:!0,message:"提取成功",html_content:'\n \n \n \n
    \n
    \n
    \n

    \n 三國歷史\n

    \n

    \n 從黃巾起義到三分歸晉\n

    \n
    \n
    \n

    \n 東漢末年 • 群雄並起 • 三分天下\n

    \n

    \n 公元184年 — 280年\n

    \n
    \n
    \n
    \n \n
    \n

    \n 目 录\n

    \n
      \n
    • \n 第一章 东汉末年与黄巾起义3\n
    • \n
    • \n 第二章 群雄割据与董卓乱政5\n
    • \n
    • \n 第三章 曹操崛起与官渡之战8\n
    • \n
    • \n 第四章 孙刘联盟与赤壁之战12\n
    • \n
    • \n 第五章 三分天下格局的形成16\n
    • \n
    • \n 第六章 蜀汉政权的建立与发展20\n
    • \n
    • \n 第七章 曹魏政权的巩固与传承24\n
    • \n
    • \n 第八章 东吴政权的繁荣与衰落28\n
    • \n
    • \n 第九章 诸葛亮北伐与三国相持32\n
    • \n
    • \n 第十章 三国归晋与历史终结37\n
    • \n
    • \n 附录 三国主要人物简介42\n
    • \n
    • \n 附录 三国时期著名战役45\n
    • \n
    • \n 附录 三国疆域与行政区划48\n
    • \n
    \n
    \n ',image_base_url:"/api/aippt/三"},touchStartX:0,touchStartY:0,touchEndX:0,touchEndY:0,slideAccents:["#2563eb","#23b9ad","#d7b56b","#4a93b8"],parseJobId:0,parseTimer:null,parseIdleTimer:null}),computed:{displayFilename(){return(this.filename||"未命名 AIPPT").replace(/\\/g,"/").split("/").pop()},totalSlides(){return Math.max(this.slides.length,1)},currentSlide(){return this.slides[this.currentSlideIndex]||this.slides[0]||null},currentSlideHtml(){if(!this.currentSlide)return"";const e=this.currentSlide.id||"slide-1";return this.slideHtmlCache[e]||(this.slideHtmlCache[e]=this.getSlideHtml(this.currentSlide)),this.slideHtmlCache[e]},currentPageNumber(){return Math.min(this.currentSlideIndex+1,this.totalSlides)},currentPageLabel(){return String(this.currentPageNumber).padStart(2,"0")},totalPageLabel(){return String(this.totalSlides).padStart(2,"0")},currentSlideTitle(){var e;return(null==(e=this.currentSlide)?void 0:e.title)||this.displayFilename||"AIPPT"},frameKey(){var e;return`${(null==(e=this.currentSlide)?void 0:e.id)||"empty"}-${this.pageTurnDirection}`},canPresent(){return!(!this.htmlContent||this.loading||this.errorMessage||this.isParsing||!this.currentSlideHtml)},canSwipe(){return this.slides.length>1},swipeHintText:()=>"← 左右滑动翻页 →",showEmptyState(){return!this.canPresent},emptyTitle(){return this.errorMessage?"AIPPT 加载失败":this.loading?"正在提取 AIPPT":this.isParsing?"正在准备第一页":this.parseErrorMessage?"AIPPT 解析失败":"暂无 AIPPT 内容"},emptyDescription(){return this.errorMessage?this.errorMessage:this.loading?"正在读取演示文件...":this.isParsing?"正在解析 PPT 内容...":this.parseErrorMessage?this.parseErrorMessage:"打开 .aippt 文件后会在这里显示预览。"},emptyIconText(){return this.errorMessage||this.parseErrorMessage?"⚠":this.loading||this.isParsing?"⏳":"📄"},slideStatusText(){var e;return this.errorMessage?"加载失败":this.loading?"正在提取...":this.isParsing?"正在准备...":this.htmlContent?(null==(e=this.currentSlide)?void 0:e.fullDocument)?"单页预览":`已识别 ${this.slides.length} 页`:"等待打开文件"}},watch:{visible(e){e&&this.$nextTick((()=>{this.loadVirtualData()}))},htmlContent:{immediate:!0,handler(e){e&&this.scheduleParseSlides(e)}},slides(){this.currentSlideIndex>this.slides.length-1&&(this.currentSlideIndex=0)}},mounted(){this.loadVirtualData()},beforeDestroy(){this.clearSchedules()},methods:{loadVirtualData(){!this.htmlContent&&this._vietualData.html_content&&this.scheduleParseSlides(this._vietualData.html_content)},handleTouchStart(e){const t=e.touches[0];this.touchStartX=t.clientX,this.touchStartY=t.clientY},handleTouchEnd(e){const t=e.changedTouches[0];this.touchEndX=t.clientX,this.touchEndY=t.clientY,this.handleSwipe()},handleSwipe(){const e=this.touchEndX-this.touchStartX,t=this.touchEndY-this.touchStartY;Math.abs(e)0?this.prevSlide():this.nextSlide())},getHeadContent(e=""){const t=String(e).match(/]*>([\s\S]*?)<\/head>/i);return t?t[1]:""},getBodyContent(e=""){const t=String(e).match(/]*>([\s\S]*?)<\/body>/i);return t?t[1]:e},getNodeTitle(e,t){const a=e.match(/]*>([\s\S]*?)<\/h[1-6]>/i);if(a){return a[1].replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim().slice(0,36)}return`第 ${t+1} 页`},isMeaningfulSlide:e=>e.replace(/<[^>]+>/g,"").replace(/\s+/g,"").length>8||/]*\/?>/gi;if(0===(t.match(n)||[]).length){const a=t.split(/(?=e.trim()));return a.length>1?a.map(((t,a)=>({id:`slide-${a+1}`,title:this.getNodeTitle(t,a),html:`
    ${t}
    `,headContent:e,fullDocument:!1}))):[{id:"slide-1",title:this.displayFilename,html:`
    ${t}
    `,headContent:e,fullDocument:!0}]}const s=t.split(n).filter((e=>e.trim())).map(((t,a)=>({id:`slide-${a+1}`,title:this.getNodeTitle(t,a),html:`
    ${t.trim()}
    `,headContent:e,fullDocument:!1}))),o=s.filter((e=>this.isMeaningfulSlide(e.html)));return o.length>0?o:s}catch(n){return t("warn","at pages/text/IntuitiveAipptViewer.vue:346","[AIPPT] slide parse failed:",n),this.parseErrorMessage=n.message||"AIPPT 解析失败",[{id:"slide-1",title:this.displayFilename,html:`
    ${a}
    `,headContent:this.getHeadContent(a),fullDocument:!0}]}},getSlideHtml(e){if(!e)return"";return`\n\t\t\t\t\t
    \n\t\t\t\t\t\t${e.headContent?``:""}\n\t\t\t\t\t\t${e.html||""}\n\t\t\t\t\t
    \n\t\t\t\t`},clearSchedules(){this.parseTimer&&(clearTimeout(this.parseTimer),this.parseTimer=null),this.parseIdleTimer&&(clearTimeout(this.parseIdleTimer),this.parseIdleTimer=null)},scheduleParseSlides(e=""){const a=String(e||""),n=++this.parseJobId;if(this.clearSchedules(),this.slideHtmlCache={},this.currentSlideIndex=0,this.parseErrorMessage="",!a.trim())return this.isParsing=!1,this.parsedHeadContent="",void(this.slides=[]);this.isParsing=!0,this.parsedHeadContent=this.getHeadContent(a),this.slides=[],this.parseTimer=setTimeout((()=>{var e;if(n===this.parseJobId)try{const t=this.parseSlides(a);if(n!==this.parseJobId)return;this.slides=t,this.parsedHeadContent=(null==(e=t[0])?void 0:e.headContent)||this.parsedHeadContent}catch(s){t("error","at pages/text/IntuitiveAipptViewer.vue:409","[AIPPT] parse error:",s)}finally{n===this.parseJobId&&(this.isParsing=!1)}}),100)},pulseStage(){this.pageTurnDirection=this.pageTurnDirection>=0?1:-1},goToSlide(e){if(!this.canPresent)return;const t=Math.max(0,Math.min(Number(e)||0,this.slides.length-1));t!==this.currentSlideIndex&&(this.pageTurnDirection=t>=this.currentSlideIndex?1:-1,this.currentSlideIndex=t,this.pulseStage())},prevSlide(){this.goToSlide(this.currentSlideIndex-1)},nextSlide(){this.goToSlide(this.currentSlideIndex+1)},onRefresh(){this.$emit("refresh")},onClose(){this.$emit("close")},exposedNextSlide(){this.nextSlide()},exposedPrevSlide(){this.prevSlide()}}},[["render",function(t,a,n,s,o,i){return e.withDirectives((e.openBlock(),e.createElementBlock("view",{class:"ia-root",onTouchstart:a[4]||(a[4]=(...e)=>i.handleTouchStart&&i.handleTouchStart(...e)),onTouchend:a[5]||(a[5]=(...e)=>i.handleTouchEnd&&i.handleTouchEnd(...e))},[e.createElementVNode("view",{class:"ia-toolbar"},[e.createElementVNode("view",{class:"ia-title"},[e.createElementVNode("text",{class:"ia-badge"},"PPT"),e.createElementVNode("view",{class:"ia-title-copy"},[e.createElementVNode("text",{class:"ia-title-strong"},e.toDisplayString(i.displayFilename),1),e.createElementVNode("text",{class:"ia-title-em"},e.toDisplayString(i.slideStatusText),1)])]),e.createElementVNode("view",{class:"ia-actions"},[e.createElementVNode("view",{class:"ia-icon-btn",onClick:a[0]||(a[0]=(...e)=>i.onRefresh&&i.onRefresh(...e))},[e.createElementVNode("text",{class:"ia-icon"},"↻")]),e.createElementVNode("view",{class:"ia-icon-btn ia-close-btn",onClick:a[1]||(a[1]=(...e)=>i.onClose&&i.onClose(...e))},[e.createElementVNode("text",{class:"ia-icon"},"✕")])])]),e.createElementVNode("view",{class:"ia-canvas"},[i.showEmptyState?(e.openBlock(),e.createElementBlock("view",{key:0,class:e.normalizeClass(["ia-empty",{"is-loading":n.loading||o.isParsing,"is-error":!!n.errorMessage}])},[e.createElementVNode("text",{class:"ia-empty-icon"},e.toDisplayString(i.emptyIconText),1),e.createElementVNode("text",{class:"ia-empty-title"},e.toDisplayString(i.emptyTitle),1),e.createElementVNode("text",{class:"ia-empty-desc"},e.toDisplayString(i.emptyDescription),1)],2)):(e.openBlock(),e.createElementBlock("view",{key:1,class:"ia-slide-area"},[(e.openBlock(),e.createElementBlock("view",{class:"ia-frame-shell",key:i.frameKey},[e.createElementVNode("scroll-view",{class:"ia-frame-scroll","scroll-y":"","show-scrollbar":!1},[e.createElementVNode("view",{class:"ia-frame",innerHTML:i.currentSlideHtml},null,8,["innerHTML"])])])),i.canPresent&&o.slides.length>1?(e.openBlock(),e.createElementBlock("scroll-view",{key:0,class:"ia-thumb-strip","scroll-x":"","show-scrollbar":!1,"scroll-into-view":"thumb-"+o.currentSlideIndex},[e.createElementVNode("view",{class:"ia-thumb-list"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.slides,((t,a)=>(e.openBlock(),e.createElementBlock("view",{key:t.id,id:"thumb-"+a,class:e.normalizeClass(["ia-thumb-item",{active:a===o.currentSlideIndex}]),onClick:e=>i.goToSlide(a)},[e.createElementVNode("text",{class:"ia-thumb-num"},e.toDisplayString(String(a+1).padStart(2,"0")),1),e.createElementVNode("text",{class:"ia-thumb-title"},e.toDisplayString(t.title),1)],10,["id","onClick"])))),128))])],8,["scroll-into-view"])):e.createCommentVNode("",!0)]))]),i.canPresent?(e.openBlock(),e.createElementBlock("view",{key:0,class:"ia-pager"},[e.createElementVNode("view",{class:"ia-pager-shell"},[e.createElementVNode("view",{class:e.normalizeClass(["ia-page-btn",{disabled:o.currentSlideIndex<=0}]),onClick:a[2]||(a[2]=(...e)=>i.prevSlide&&i.prevSlide(...e))},[e.createElementVNode("text",{class:"ia-nav-icon"},"❮")],2),e.createElementVNode("view",{class:"ia-page-count"},[e.createElementVNode("text",{class:"ia-current-page"},e.toDisplayString(i.currentPageLabel),1),e.createElementVNode("text",{class:"ia-page-divider"},"/"),e.createElementVNode("text",{class:"ia-total-page"},e.toDisplayString(i.totalPageLabel),1)]),e.createElementVNode("view",{class:e.normalizeClass(["ia-page-btn ia-next-btn",{disabled:o.currentSlideIndex>=i.totalSlides-1}]),onClick:a[3]||(a[3]=(...e)=>i.nextSlide&&i.nextSlide(...e))},[e.createElementVNode("text",{class:"ia-nav-icon"},"❯")],2)])])):e.createCommentVNode("",!0)],544)),[[e.vShow,n.visible]])}],["__scopeId","data-v-ed3c3ae8"]]);var xe="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Ve(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Se(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Be={exports:{}}; +/*! + + JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + + (c) 2009-2016 Stuart Knightley + Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + + JSZip uses the library pako released under the MIT license : + https://github.com/nodeca/pako/blob/main/LICENSE + */Be.exports=function e(t,a,n){function s(i,r){if(!a[i]){if(!t[i]){if(!r&&Se)return Se(i);if(o)return o(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var c=a[i]={exports:{}};t[i][0].call(c.exports,(function(e){return s(t[i][1][e]||e)}),c,c.exports,e,t,a,n)}return a[i].exports}for(var o=Se,i=0;i>2,r=(3&t)<<4|a>>4,l=1>6:64,c=2>4,a=(15&i)<<4|(r=o.indexOf(e.charAt(c++)))>>2,n=(3&r)<<6|(l=o.indexOf(e.charAt(c++))),p[u++]=t,64!==r&&(p[u++]=a),64!==l&&(p[u++]=n);return p}},{"./support":30,"./utils":32}],2:[function(e,t,a){var n=e("./external"),s=e("./stream/DataWorker"),o=e("./stream/Crc32Probe"),i=e("./stream/DataLengthProbe");function r(e,t,a,n,s){this.compressedSize=e,this.uncompressedSize=t,this.crc32=a,this.compression=n,this.compressedContent=s}r.prototype={getContentWorker:function(){var e=new s(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new i("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new s(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},r.createWorkerFrom=function(e,t,a){return e.pipe(new o).pipe(new i("uncompressedSize")).pipe(t.compressWorker(a)).pipe(new i("compressedSize")).withStreamInfo("compression",t)},t.exports=r},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,a){var n=e("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},a.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,a){var n=e("./utils"),s=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,a,n){var o=s,i=n+a;e^=-1;for(var r=n;r>>8^o[255&(e^t[r])];return-1^e}(0|t,e,e.length,0):function(e,t,a,n){var o=s,i=n+a;e^=-1;for(var r=n;r>>8^o[255&(e^t.charCodeAt(r))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,a){a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(e,t,a){var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,a){var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,s=e("pako"),o=e("./utils"),i=e("./stream/GenericWorker"),r=n?"uint8array":"array";function l(e,t){i.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}a.magic="\b\0",o.inherits(l,i),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(o.transformTo(r,e.data),!1)},l.prototype.flush=function(){i.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new s[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},a.compressWorker=function(e){return new l("Deflate",e)},a.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,a){function n(e,t){var a,n="";for(a=0;a>>=8;return n}function s(e,t,a,s,i,u){var d,p,h=e.file,m=e.compression,f=u!==r.utf8encode,v=o.transformTo("string",u(h.name)),g=o.transformTo("string",r.utf8encode(h.name)),w=h.comment,y=o.transformTo("string",u(w)),k=o.transformTo("string",r.utf8encode(w)),_=g.length!==h.name.length,b=k.length!==w.length,E="",C="",N="",x=h.dir,V=h.date,S={crc32:0,compressedSize:0,uncompressedSize:0};t&&!a||(S.crc32=e.crc32,S.compressedSize=e.compressedSize,S.uncompressedSize=e.uncompressedSize);var B=0;t&&(B|=8),f||!_&&!b||(B|=2048);var T,D,z,I=0,P=0;x&&(I|=16),"UNIX"===i?(P=798,I|=(T=h.unixPermissions,D=x,z=T,T||(z=D?16893:33204),(65535&z)<<16)):(P=20,I|=function(e){return 63&(e||0)}(h.dosPermissions)),d=V.getUTCHours(),d<<=6,d|=V.getUTCMinutes(),d<<=5,d|=V.getUTCSeconds()/2,p=V.getUTCFullYear()-1980,p<<=4,p|=V.getUTCMonth()+1,p<<=5,p|=V.getUTCDate(),_&&(C=n(1,1)+n(l(v),4)+g,E+="up"+n(C.length,2)+C),b&&(N=n(1,1)+n(l(y),4)+k,E+="uc"+n(N.length,2)+N);var A="";return A+="\n\0",A+=n(B,2),A+=m.magic,A+=n(d,2),A+=n(p,2),A+=n(S.crc32,4),A+=n(S.compressedSize,4),A+=n(S.uncompressedSize,4),A+=n(v.length,2),A+=n(E.length,2),{fileRecord:c.LOCAL_FILE_HEADER+A+v+E,dirRecord:c.CENTRAL_FILE_HEADER+n(P,2)+A+n(y.length,2)+"\0\0\0\0"+n(I,4)+n(s,4)+v+E+y}}var o=e("../utils"),i=e("../stream/GenericWorker"),r=e("../utf8"),l=e("../crc32"),c=e("../signature");function u(e,t,a,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=a,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(u,i),u.prototype.push=function(e){var t=e.meta.percent||0,a=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:a?(t+100*(a-n-1))/a:100}}))},u.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var a=s(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:a.fileRecord,meta:{percent:0}})}else this.accumulate=!0},u.prototype.closedSource=function(e){this.accumulate=!1;var t,a=this.streamFiles&&!e.file.dir,o=s(e,a,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(o.dirRecord),a)this.push({data:(t=e,c.DATA_DESCRIPTOR+n(t.crc32,4)+n(t.compressedSize,4)+n(t.uncompressedSize,4)),meta:{percent:100}});else for(this.push({data:o.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},u.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)a=(a<<8)+this.byteAt(t);return this.index+=e,a},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=s},{"../utils":32}],19:[function(e,t,a){var n=e("./Uint8ArrayReader");function s(e){n.call(this,e)}e("../utils").inherits(s,n),s.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=s},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,a){var n=e("./DataReader");function s(e){n.call(this,e)}e("../utils").inherits(s,n),s.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},s.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},s.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},s.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=s},{"../utils":32,"./DataReader":18}],21:[function(e,t,a){var n=e("./ArrayReader");function s(e){n.call(this,e)}e("../utils").inherits(s,n),s.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=s},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,a){var n=e("../utils"),s=e("../support"),o=e("./ArrayReader"),i=e("./StringReader"),r=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||s.uint8array?"nodebuffer"===t?new r(e):s.uint8array?new l(n.transformTo("uint8array",e)):new o(n.transformTo("array",e)):new i(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,a){a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,a){var n=e("./GenericWorker"),s=e("../utils");function o(e){n.call(this,"ConvertWorker to "+e),this.destType=e}s.inherits(o,n),o.prototype.processChunk=function(e){this.push({data:s.transformTo(this.destType,e.data),meta:e.meta})},t.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,a){var n=e("./GenericWorker"),s=e("../crc32");function o(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(o,n),o.prototype.processChunk=function(e){this.streamInfo.crc32=s(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,a){var n=e("../utils"),s=e("./GenericWorker");function o(e){s.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(o,s),o.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}s.prototype.processChunk.call(this,e)},t.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,a){var n=e("../utils"),s=e("./GenericWorker");function o(e){s.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}n.inherits(o,s),o.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,a){function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var a=0;a "+e:e}},t.exports=n},{}],29:[function(e,t,a){var n=e("../utils"),s=e("./ConvertWorker"),o=e("./GenericWorker"),i=e("../base64"),r=e("../support"),l=e("../external"),c=null;if(r.nodestream)try{c=e("../nodejs/NodejsStreamOutputAdapter")}catch(p){}function u(e,t){return new l.Promise((function(a,s){var o=[],r=e._internalType,l=e._outputType,c=e._mimeType;e.on("data",(function(e,a){o.push(e),t&&t(a)})).on("error",(function(e){o=[],s(e)})).on("end",(function(){try{var e=function(e,t,a){switch(e){case"blob":return n.newBlob(n.transformTo("arraybuffer",t),a);case"base64":return i.encode(t);default:return n.transformTo(e,t)}}(l,function(e,t){var a,n=0,s=null,o=0;for(a=0;a>>6:(a<65536?t[i++]=224|a>>>12:(t[i++]=240|a>>>18,t[i++]=128|a>>>12&63),t[i++]=128|a>>>6&63),t[i++]=128|63&a);return t}(e)},a.utf8decode=function(e){return s.nodebuffer?n.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,a,s,o,i=e.length,l=new Array(2*i);for(t=a=0;t>10&1023,l[a++]=56320|1023&s)}return l.length!==a&&(l.subarray?l=l.subarray(0,a):l.length=a),n.applyFromCharCode(l)}(e=n.transformTo(s.uint8array?"uint8array":"array",e))},n.inherits(c,i),c.prototype.processChunk=function(e){var t=n.transformTo(s.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(s.uint8array){var o=t;(t=new Uint8Array(o.length+this.leftOver.length)).set(this.leftOver,0),t.set(o,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var i=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+r[e[a]]>t?a:t}(t),l=t;i!==t.length&&(s.uint8array?(l=t.subarray(0,i),this.leftOver=t.subarray(i,t.length)):(l=t.slice(0,i),this.leftOver=t.slice(i,t.length))),this.push({data:a.utf8decode(l),meta:e.meta})},c.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=c,n.inherits(u,i),u.prototype.processChunk=function(e){this.push({data:a.utf8encode(e.data),meta:e.meta})},a.Utf8EncodeWorker=u},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){var n=e("./support"),s=e("./base64"),o=e("./nodejsUtils"),i=e("./external");function r(e){return e}function l(e,t){for(var a=0;a>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,a,n,s=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(a<65536?t[i++]=224|a>>>12:(t[i++]=240|a>>>18,t[i++]=128|a>>>12&63),t[i++]=128|a>>>6&63),t[i++]=128|63&a);return t},a.buf2binstring=function(e){return l(e,e.length)},a.binstring2buf=function(e){for(var t=new n.Buf8(e.length),a=0,s=t.length;a>10&1023,c[n++]=56320|1023&s)}return l(c,n)},a.utf8border=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+i[e[a]]>t?a:t}},{"./common":41}],43:[function(e,t,a){t.exports=function(e,t,a,n){for(var s=65535&e|0,o=e>>>16&65535|0,i=0;0!==a;){for(a-=i=2e3>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t,a,s){var o=n,i=s+a;e^=-1;for(var r=s;r>>8^o[255&(e^t[r])];return-1^e}},{}],46:[function(e,t,a){var n,s=e("../utils/common"),o=e("./trees"),i=e("./adler32"),r=e("./crc32"),l=e("./messages"),c=0,u=4,d=0,p=-2,h=-1,m=4,f=2,v=8,g=9,w=286,y=30,k=19,_=2*w+1,b=15,E=3,C=258,N=C+E+1,x=42,V=113,S=1,B=2,T=3,D=4;function z(e,t){return e.msg=l[t],t}function I(e){return(e<<1)-(4e.avail_out&&(a=e.avail_out),0!==a&&(s.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function j(e,t){o._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,A(e.strm)}function F(e,t){e.pending_buf[e.pending++]=t}function L(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function O(e,t){var a,n,s=e.max_chain_length,o=e.strstart,i=e.prev_length,r=e.nice_match,l=e.strstart>e.w_size-N?e.strstart-(e.w_size-N):0,c=e.window,u=e.w_mask,d=e.prev,p=e.strstart+C,h=c[o+i-1],m=c[o+i];e.prev_length>=e.good_match&&(s>>=2),r>e.lookahead&&(r=e.lookahead);do{if(c[(a=t)+i]===m&&c[a+i-1]===h&&c[a]===c[o]&&c[++a]===c[o+1]){o+=2,a++;do{}while(c[++o]===c[++a]&&c[++o]===c[++a]&&c[++o]===c[++a]&&c[++o]===c[++a]&&c[++o]===c[++a]&&c[++o]===c[++a]&&c[++o]===c[++a]&&c[++o]===c[++a]&&ol&&0!=--s);return i<=e.lookahead?i:e.lookahead}function M(e){var t,a,n,o,l,c,u,d,p,h,m=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-N)){for(s.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=a=e.hash_size;n=e.head[--t],e.head[t]=m<=n?n-m:0,--a;);for(t=a=m;n=e.prev[--t],e.prev[t]=m<=n?n-m:0,--a;);o+=m}if(0===e.strm.avail_in)break;if(c=e.strm,u=e.window,d=e.strstart+e.lookahead,h=void 0,(p=o)<(h=c.avail_in)&&(h=p),a=0===h?0:(c.avail_in-=h,s.arraySet(u,c.input,c.next_in,h,d),1===c.state.wrap?c.adler=i(c.adler,u,h,d):2===c.state.wrap&&(c.adler=r(c.adler,u,h,d)),c.next_in+=h,c.total_in+=h,h),e.lookahead+=a,e.lookahead+e.insert>=E)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=E&&(e.ins_h=(e.ins_h<=E)if(n=o._tr_tally(e,e.strstart-e.match_start,e.match_length-E),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=E){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=E&&(e.ins_h=(e.ins_h<=E&&e.match_length<=e.prev_length){for(s=e.strstart+e.lookahead-E,n=o._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-E),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=s&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(M(e),0===e.lookahead&&t===c)return S;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+a;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,j(e,!1),0===e.strm.avail_out))return S;if(e.strstart-e.block_start>=e.w_size-N&&(j(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===u?(j(e,!0),0===e.strm.avail_out?T:D):(e.strstart>e.block_start&&(j(e,!1),e.strm.avail_out),S)})),new U(4,4,8,4,$),new U(4,5,16,8,$),new U(4,6,32,32,$),new U(4,4,16,16,R),new U(8,16,32,32,R),new U(8,16,128,128,R),new U(8,32,128,256,R),new U(32,128,258,1024,R),new U(32,258,258,4096,R)],a.deflateInit=function(e,t){return Z(e,t,v,15,8,0)},a.deflateInit2=Z,a.deflateReset=H,a.deflateResetKeep=q,a.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?p:(e.state.gzhead=t,d):p},a.deflate=function(e,t){var a,s,i,l;if(!e||!e.state||5>8&255),F(s,s.gzhead.time>>16&255),F(s,s.gzhead.time>>24&255),F(s,9===s.level?2:2<=s.strategy||s.level<2?4:0),F(s,255&s.gzhead.os),s.gzhead.extra&&s.gzhead.extra.length&&(F(s,255&s.gzhead.extra.length),F(s,s.gzhead.extra.length>>8&255)),s.gzhead.hcrc&&(e.adler=r(e.adler,s.pending_buf,s.pending,0)),s.gzindex=0,s.status=69):(F(s,0),F(s,0),F(s,0),F(s,0),F(s,0),F(s,9===s.level?2:2<=s.strategy||s.level<2?4:0),F(s,3),s.status=V);else{var h=v+(s.w_bits-8<<4)<<8;h|=(2<=s.strategy||s.level<2?0:s.level<6?1:6===s.level?2:3)<<6,0!==s.strstart&&(h|=32),h+=31-h%31,s.status=V,L(s,h),0!==s.strstart&&(L(s,e.adler>>>16),L(s,65535&e.adler)),e.adler=1}if(69===s.status)if(s.gzhead.extra){for(i=s.pending;s.gzindex<(65535&s.gzhead.extra.length)&&(s.pending!==s.pending_buf_size||(s.gzhead.hcrc&&s.pending>i&&(e.adler=r(e.adler,s.pending_buf,s.pending-i,i)),A(e),i=s.pending,s.pending!==s.pending_buf_size));)F(s,255&s.gzhead.extra[s.gzindex]),s.gzindex++;s.gzhead.hcrc&&s.pending>i&&(e.adler=r(e.adler,s.pending_buf,s.pending-i,i)),s.gzindex===s.gzhead.extra.length&&(s.gzindex=0,s.status=73)}else s.status=73;if(73===s.status)if(s.gzhead.name){i=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>i&&(e.adler=r(e.adler,s.pending_buf,s.pending-i,i)),A(e),i=s.pending,s.pending===s.pending_buf_size)){l=1;break}l=s.gzindexi&&(e.adler=r(e.adler,s.pending_buf,s.pending-i,i)),0===l&&(s.gzindex=0,s.status=91)}else s.status=91;if(91===s.status)if(s.gzhead.comment){i=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>i&&(e.adler=r(e.adler,s.pending_buf,s.pending-i,i)),A(e),i=s.pending,s.pending===s.pending_buf_size)){l=1;break}l=s.gzindexi&&(e.adler=r(e.adler,s.pending_buf,s.pending-i,i)),0===l&&(s.status=103)}else s.status=103;if(103===s.status&&(s.gzhead.hcrc?(s.pending+2>s.pending_buf_size&&A(e),s.pending+2<=s.pending_buf_size&&(F(s,255&e.adler),F(s,e.adler>>8&255),e.adler=0,s.status=V)):s.status=V),0!==s.pending){if(A(e),0===e.avail_out)return s.last_flush=-1,d}else if(0===e.avail_in&&I(t)<=I(a)&&t!==u)return z(e,-5);if(666===s.status&&0!==e.avail_in)return z(e,-5);if(0!==e.avail_in||0!==s.lookahead||t!==c&&666!==s.status){var m=2===s.strategy?function(e,t){for(var a;;){if(0===e.lookahead&&(M(e),0===e.lookahead)){if(t===c)return S;break}if(e.match_length=0,a=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(j(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===u?(j(e,!0),0===e.strm.avail_out?T:D):e.last_lit&&(j(e,!1),0===e.strm.avail_out)?S:B}(s,t):3===s.strategy?function(e,t){for(var a,n,s,i,r=e.window;;){if(e.lookahead<=C){if(M(e),e.lookahead<=C&&t===c)return S;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=E&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=E?(a=o._tr_tally(e,1,e.match_length-E),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(j(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===u?(j(e,!0),0===e.strm.avail_out?T:D):e.last_lit&&(j(e,!1),0===e.strm.avail_out)?S:B}(s,t):n[s.level].func(s,t);if(m!==T&&m!==D||(s.status=666),m===S||m===T)return 0===e.avail_out&&(s.last_flush=-1),d;if(m===B&&(1===t?o._tr_align(s):5!==t&&(o._tr_stored_block(s,0,0,!1),3===t&&(P(s.head),0===s.lookahead&&(s.strstart=0,s.block_start=0,s.insert=0))),A(e),0===e.avail_out))return s.last_flush=-1,d}return t!==u?d:s.wrap<=0?1:(2===s.wrap?(F(s,255&e.adler),F(s,e.adler>>8&255),F(s,e.adler>>16&255),F(s,e.adler>>24&255),F(s,255&e.total_in),F(s,e.total_in>>8&255),F(s,e.total_in>>16&255),F(s,e.total_in>>24&255)):(L(s,e.adler>>>16),L(s,65535&e.adler)),A(e),0=a.w_size&&(0===r&&(P(a.head),a.strstart=0,a.block_start=0,a.insert=0),h=new s.Buf8(a.w_size),s.arraySet(h,t,m-a.w_size,a.w_size,0),t=h,m=a.w_size),l=e.avail_in,c=e.next_in,u=e.input,e.avail_in=m,e.next_in=0,e.input=t,M(a);a.lookahead>=E;){for(n=a.strstart,o=a.lookahead-(E-1);a.ins_h=(a.ins_h<>>=k=y>>>24,m-=k,0==(k=y>>>16&255))x[o++]=65535&y;else{if(!(16&k)){if(0==(64&k)){y=f[(65535&y)+(h&(1<>>=k,m-=k),m<15&&(h+=N[n++]<>>=k=y>>>24,m-=k,!(16&(k=y>>>16&255))){if(0==(64&k)){y=v[(65535&y)+(h&(1<>>=k,m-=k,(k=o-i)>3,h&=(1<<(m-=_<<3))-1,e.next_in=n,e.next_out=o,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function v(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function g(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=p,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(h),t.distcode=t.distdyn=new n.Buf32(m),t.sane=1,t.back=-1,u):d}function w(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,g(e)):d}function y(e,t){var a,n;return e&&e.state?(n=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=i.wsize?(n.arraySet(i.window,t,a-i.wsize,i.wsize,0),i.wnext=0,i.whave=i.wsize):(s<(o=i.wsize-i.wnext)&&(o=s),n.arraySet(i.window,t,a-s,o,i.wnext),(s-=o)?(n.arraySet(i.window,t,a-s,s,0),i.wnext=s,i.whave=i.wsize):(i.wnext+=o,i.wnext===i.wsize&&(i.wnext=0),i.whave>>8&255,a.check=o(a.check,M,2,0),_=k=0,a.mode=2;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&k)<<8)+(k>>8))%31){e.msg="incorrect header check",a.mode=30;break}if(8!=(15&k)){e.msg="unknown compression method",a.mode=30;break}if(_-=4,A=8+(15&(k>>>=4)),0===a.wbits)a.wbits=A;else if(A>a.wbits){e.msg="invalid window size",a.mode=30;break}a.dmax=1<>8&1),512&a.flags&&(M[0]=255&k,M[1]=k>>>8&255,a.check=o(a.check,M,2,0)),_=k=0,a.mode=3;case 3:for(;_<32;){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}a.head&&(a.head.time=k),512&a.flags&&(M[0]=255&k,M[1]=k>>>8&255,M[2]=k>>>16&255,M[3]=k>>>24&255,a.check=o(a.check,M,4,0)),_=k=0,a.mode=4;case 4:for(;_<16;){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}a.head&&(a.head.xflags=255&k,a.head.os=k>>8),512&a.flags&&(M[0]=255&k,M[1]=k>>>8&255,a.check=o(a.check,M,2,0)),_=k=0,a.mode=5;case 5:if(1024&a.flags){for(;_<16;){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}a.length=k,a.head&&(a.head.extra_len=k),512&a.flags&&(M[0]=255&k,M[1]=k>>>8&255,a.check=o(a.check,M,2,0)),_=k=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(1024&a.flags&&(w<(x=a.length)&&(x=w),x&&(a.head&&(A=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),n.arraySet(a.head.extra,h,v,x,A)),512&a.flags&&(a.check=o(a.check,h,x,v)),w-=x,v+=x,a.length-=x),a.length))break e;a.length=0,a.mode=7;case 7:if(2048&a.flags){if(0===w)break e;for(x=0;A=h[v+x++],a.head&&A&&a.length<65536&&(a.head.name+=String.fromCharCode(A)),A&&x>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=12;break;case 10:for(;_<32;){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}e.adler=a.check=f(k),_=k=0,a.mode=11;case 11:if(0===a.havedict)return e.next_out=g,e.avail_out=y,e.next_in=v,e.avail_in=w,a.hold=k,a.bits=_,2;e.adler=a.check=1,a.mode=12;case 12:if(5===t||6===t)break e;case 13:if(a.last){k>>>=7&_,_-=7&_,a.mode=27;break}for(;_<3;){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}switch(a.last=1&k,_-=1,3&(k>>>=1)){case 0:a.mode=14;break;case 1:if(C(a),a.mode=20,6!==t)break;k>>>=2,_-=2;break e;case 2:a.mode=17;break;case 3:e.msg="invalid block type",a.mode=30}k>>>=2,_-=2;break;case 14:for(k>>>=7&_,_-=7&_;_<32;){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}if((65535&k)!=(k>>>16^65535)){e.msg="invalid stored block lengths",a.mode=30;break}if(a.length=65535&k,_=k=0,a.mode=15,6===t)break e;case 15:a.mode=16;case 16:if(x=a.length){if(w>>=5,_-=5,a.ndist=1+(31&k),k>>>=5,_-=5,a.ncode=4+(15&k),k>>>=4,_-=4,286>>=3,_-=3}for(;a.have<19;)a.lens[$[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,F={bits:a.lenbits},j=r(0,a.lens,0,19,a.lencode,0,a.work,F),a.lenbits=F.bits,j){e.msg="invalid code lengths set",a.mode=30;break}a.have=0,a.mode=19;case 19:for(;a.have>>16&255,D=65535&O,!((B=O>>>24)<=_);){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}if(D<16)k>>>=B,_-=B,a.lens[a.have++]=D;else{if(16===D){for(L=B+2;_>>=B,_-=B,0===a.have){e.msg="invalid bit length repeat",a.mode=30;break}A=a.lens[a.have-1],x=3+(3&k),k>>>=2,_-=2}else if(17===D){for(L=B+3;_>>=B)),k>>>=3,_-=3}else{for(L=B+7;_>>=B)),k>>>=7,_-=7}if(a.have+x>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=30;break}for(;x--;)a.lens[a.have++]=A}}if(30===a.mode)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=30;break}if(a.lenbits=9,F={bits:a.lenbits},j=r(l,a.lens,0,a.nlen,a.lencode,0,a.work,F),a.lenbits=F.bits,j){e.msg="invalid literal/lengths set",a.mode=30;break}if(a.distbits=6,a.distcode=a.distdyn,F={bits:a.distbits},j=r(c,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,F),a.distbits=F.bits,j){e.msg="invalid distances set",a.mode=30;break}if(a.mode=20,6===t)break e;case 20:a.mode=21;case 21:if(6<=w&&258<=y){e.next_out=g,e.avail_out=y,e.next_in=v,e.avail_in=w,a.hold=k,a.bits=_,i(e,E),g=e.next_out,m=e.output,y=e.avail_out,v=e.next_in,h=e.input,w=e.avail_in,k=a.hold,_=a.bits,12===a.mode&&(a.back=-1);break}for(a.back=0;T=(O=a.lencode[k&(1<>>16&255,D=65535&O,!((B=O>>>24)<=_);){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}if(T&&0==(240&T)){for(z=B,I=T,P=D;T=(O=a.lencode[P+((k&(1<>z)])>>>16&255,D=65535&O,!(z+(B=O>>>24)<=_);){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}k>>>=z,_-=z,a.back+=z}if(k>>>=B,_-=B,a.back+=B,a.length=D,0===T){a.mode=26;break}if(32&T){a.back=-1,a.mode=12;break}if(64&T){e.msg="invalid literal/length code",a.mode=30;break}a.extra=15&T,a.mode=22;case 22:if(a.extra){for(L=a.extra;_>>=a.extra,_-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=23;case 23:for(;T=(O=a.distcode[k&(1<>>16&255,D=65535&O,!((B=O>>>24)<=_);){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}if(0==(240&T)){for(z=B,I=T,P=D;T=(O=a.distcode[P+((k&(1<>z)])>>>16&255,D=65535&O,!(z+(B=O>>>24)<=_);){if(0===w)break e;w--,k+=h[v++]<<_,_+=8}k>>>=z,_-=z,a.back+=z}if(k>>>=B,_-=B,a.back+=B,64&T){e.msg="invalid distance code",a.mode=30;break}a.offset=D,a.extra=15&T,a.mode=24;case 24:if(a.extra){for(L=a.extra;_>>=a.extra,_-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=30;break}a.mode=25;case 25:if(0===y)break e;if(x=E-y,a.offset>x){if((x=a.offset-x)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=30;break}V=x>a.wnext?(x-=a.wnext,a.wsize-x):a.wnext-x,x>a.length&&(x=a.length),S=a.window}else S=m,V=g-a.offset,x=a.length;for(yw?(k=F[L+d[C]],I[P+d[C]]):(k=96,0),h=1<>B)+(m-=h)]=y<<24|k<<16|_|0,0!==m;);for(h=1<>=1;if(0!==h?(z&=h-1,z+=h):z=0,C++,0==--A[E]){if(E===x)break;E=t[a+d[C]]}if(V>>7)]}function F(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function L(e,t,a){e.bi_valid>f-a?(e.bi_buf|=t<>f-e.bi_valid,e.bi_valid+=a-f):(e.bi_buf|=t<>>=1,a<<=1,0<--t;);return a>>>1}function $(e,t,a){var n,s,o=new Array(m+1),i=0;for(n=1;n<=m;n++)o[n]=i=i+a[n-1]<<1;for(s=0;s<=t;s++){var r=e[2*s+1];0!==r&&(e[2*s]=M(o[r]++,r))}}function R(e){var t;for(t=0;t>1;1<=a;a--)q(e,o,a);for(s=l;a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],q(e,o,1),n=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=n,o[2*s]=o[2*a]+o[2*n],e.depth[s]=(e.depth[a]>=e.depth[n]?e.depth[a]:e.depth[n])+1,o[2*a+1]=o[2*n+1]=s,e.heap[1]=s++,q(e,o,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,n,s,o,i,r,l=t.dyn_tree,c=t.max_code,u=t.stat_desc.static_tree,d=t.stat_desc.has_stree,p=t.stat_desc.extra_bits,f=t.stat_desc.extra_base,v=t.stat_desc.max_length,g=0;for(o=0;o<=m;o++)e.bl_count[o]=0;for(l[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;a>=7;n>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return s;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t>>3,(r=e.static_len+3+7>>>3)<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==t?G(e,t,a,n):4===e.strategy||r===i?(L(e,2+(n?1:0),3),H(e,N,x)):(L(e,4+(n?1:0),3),function(e,t,a,n){var s;for(L(e,t-257,5),L(e,a-1,5),L(e,n-4,4),s=0;s>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*(S[a]+c+1)]++,e.dyn_dtree[2*j(t)]++),e.last_lit===e.lit_bufsize-1},a._tr_align=function(e){var t;L(e,2,3),O(e,g,N),16===(t=e).bi_valid?(F(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}},{"../utils/common":41}],53:[function(e,t,a){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,a){(function(e){!function(e,t){if(!e.setImmediate){var a,n,s,o,i=1,r={},l=!1,c=e.document,u=Object.getPrototypeOf&&Object.getPrototypeOf(e);u=u&&u.setTimeout?u:e,a="[object process]"==={}.toString.call(e.process)?function(e){process.nextTick((function(){p(e)}))}:function(){if(e.postMessage&&!e.importScripts){var t=!0,a=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=a,t}}()?(o="setImmediate$"+Math.random()+"$",e.addEventListener?e.addEventListener("message",h,!1):e.attachEvent("onmessage",h),function(t){e.postMessage(o+t,"*")}):e.MessageChannel?((s=new MessageChannel).port1.onmessage=function(e){p(e.data)},function(e){s.port2.postMessage(e)}):c&&"onreadystatechange"in c.createElement("script")?(n=c.documentElement,function(e){var t=c.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,n.removeChild(t),t=null},n.appendChild(t)}):function(e){setTimeout(p,0,e)},u.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n`wyxd_${e}_${t}`,ze=(e,a,n,s)=>new Promise((async(o,i)=>{try{t("log","at utils/wyxd-parser.js:80","执行downloadWyxdAsZip");const r=await((e,a,n)=>(t("log","at utils/wyxd-parser.js:43","执行getDownloadUrl"),new Promise(((s,o)=>{const i=n.startsWith("./")?n.slice(2):n;uni.request({url:"https://cloud.yuxindazhineng.com/cloud_api/phone/workspace/downloadFile",method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:a,file_path:i},success:e=>{if(200===e.statusCode){const a=e.data,n=a.success?a.message||a.data:a,i=Array.isArray(n)?n[0]:n;t("log","at utils/wyxd-parser.js:60","fileInfo:",i),i&&i.url?(t("log","at utils/wyxd-parser.js:62","fileInfo.url",i.url),s(i.url)):(t("log","at utils/wyxd-parser.js:65","获取下载地址失败"),o((null==a?void 0:a.error)||"获取下载地址失败"))}else o(`请求失败:${e.statusCode}`)},fail:e=>o(e)})}))))(e,a,n);t("log","at utils/wyxd-parser.js:82","downloadWyxdAsZip-downloadUrl",r);const l=uni.downloadFile({url:r,success:e=>{200===e.statusCode?(t("log","at utils/wyxd-parser.js:87","downloadWyxdAsZip-tempFilePath",e.tempFilePath),o(e.tempFilePath)):i(`下载失败:${e.statusCode}`)},fail:e=>i(e)});s&&l&&l.onProgressUpdate((e=>{s(e.progress)}))}catch(r){i(r)}})),Ie=e=>{let t="",a=0;for(;a{const a=await(n=e,new Promise(((e,a)=>{var s,o;if("undefined"==typeof plus)fetch(n).then((e=>{if(!e.ok)throw new Error("文件请求失败:"+e.status);return e.arrayBuffer()})).then((t=>e(new Uint8Array(t)))).catch((e=>a(new Error("H5 读取文件失败:"+(e.message||e)))));else{if(t("log","at utils/wyxd-parser.js:135","[readFileAsArrayBuffer] App环境,filePath:",n),t("log","at utils/wyxd-parser.js:136","[readFileAsArrayBuffer] typeof plus.io:",typeof plus.io),t("log","at utils/wyxd-parser.js:137","[readFileAsArrayBuffer] typeof plus.io.resolveLocalFileSystemURL:",typeof(null==(s=plus.io)?void 0:s.resolveLocalFileSystemURL)),t("log","at utils/wyxd-parser.js:138","[readFileAsArrayBuffer] typeof plus.io.FileReader:",typeof(null==(o=plus.io)?void 0:o.FileReader)),plus.io&&"function"==typeof plus.io.resolveLocalFileSystemURL)return void plus.io.resolveLocalFileSystemURL(n,(n=>{if(t("log","at utils/wyxd-parser.js:143","[readFileAsArrayBuffer] entry.isFile:",n.isFile),t("log","at utils/wyxd-parser.js:144","[readFileAsArrayBuffer] entry.isDirectory:",n.isDirectory),t("log","at utils/wyxd-parser.js:145","[readFileAsArrayBuffer] entry.fullPath:",n.fullPath),t("log","at utils/wyxd-parser.js:146","[readFileAsArrayBuffer] typeof entry.file:",typeof n.file),"function"==typeof n.file)try{n.file((n=>{t("log","at utils/wyxd-parser.js:155","[readFileAsArrayBuffer] entry.file 成功,file.size:",n.size);const s=new plus.io.FileReader;s.onloadend=n=>{const s=n.target.result;t("log","at utils/wyxd-parser.js:159","[readFileAsArrayBuffer] readAsDataURL 完成,dataUrl 长度:",null==s?void 0:s.length);try{const a=s.substring(s.indexOf(",")+1),n=atob(a),o=new Uint8Array(n.length);for(let e=0;e{t("error","at utils/wyxd-parser.js:174","[readFileAsArrayBuffer] plus.io 读取失败",e),a(new Error("文件读取失败"))},s.readAsDataURL(n)}),(e=>{t("error","at utils/wyxd-parser.js:179","[readFileAsArrayBuffer] 获取File对象失败",e),a(new Error("获取文件失败:"+(e.message||"")))}))}catch(s){t("error","at utils/wyxd-parser.js:183","[readFileAsArrayBuffer] entry.file 调用同步异常:",s),a(new Error("entry.file 调用失败:"+(s.message||s)))}else a(new Error("entry 没有 file 方法,isFile="+n.isFile+" isDirectory="+n.isDirectory))}),(e=>{t("error","at utils/wyxd-parser.js:187","[readFileAsArrayBuffer] 解析文件路径失败",e),a(new Error("解析文件路径失败:"+(e.message||"")))}));if("undefined"!=typeof uni&&"function"==typeof uni.getFileSystemManager)return t("log","at utils/wyxd-parser.js:195","[readFileAsArrayBuffer] 降级使用 uni.getFileSystemManager"),void uni.getFileSystemManager().readFile({filePath:n,success:t=>{const a=t.data||"",n=atob(a),s=new Uint8Array(n.length);for(let e=0;ea(new Error("无法读取文件:"+(e.errMsg||"")))});a(new Error("App 环境下无可用的文件读取 API"))}})));var n;t("log","at utils/wyxd-parser.js:227","data",a);const s=await Te.loadAsync(a),o={header:"",html:"",images:{}};for(const[t,i]of Object.entries(s.files)){if(i.dir)continue;const e=t.replace(/^.*[/\\]/,""),a=await i.async("uint8array");"header.txt"===e?o.header=Ie(a):e.endsWith(".html")||e.endsWith(".htm")?o.html=Ie(a):/\.(png|jpg|jpeg|gif|svg|webp|bmp)$/i.test(e)&&(o.images[t.replace(/^\.[/\\]?/,"")]=Ae(a,e))}return o},Ae=(e,t)=>{let a="";const n=new Uint8Array(e);for(let s=0;s{const s=(e=>{const t=String(e).match(/]*>([\s\S]*?)<\/head>/i);return t?t[1]:""})(n),o=Fe(n);return e.map((e=>{let n=e.html;if(n=n.replace(/src\s*=\s*["']([^"']+)["']/gi,((e,t)=>{let n=a[t]||a[t.replace(/^.*?images\//i,"images/")];return n?`src="${n}"`:e})),"content"===e.type&&(t&&(n=t+n),e.num>0)){n+=`
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t${e.num}
    `}return{...e,html:`
    \n\t\t\t\t\n\t\t\t\t${n}\n\t\t\t
    `,headStyle:s}}))},Fe=e=>{const t=e.match(/]*>([\s\S]*?)<\/style>/i);return t?t[1]:""},Le=E({__name:"WYXD",setup(a){const n=e.ref(""),s=e.ref(""),i=e.ref(""),r=e.ref(""),l=e.ref([]),c=e.ref(0),u=e.ref(""),d=e.ref(!1),p=e.ref(""),h=e.computed((()=>({downloading:"下载中...",extracting:"解压中...",parsing:"解析中...",error:"加载失败"}[u.value]||"处理中..."))),m=e.computed((()=>i.value||"未命名文档")),f=e=>String(e).padStart(2,"0"),v=e=>{c.value=e.detail.current},g=()=>{uni.navigateBack()},w=()=>{c.value>0&&c.value--},y=()=>{c.value{const e=((e,t)=>{try{const a=uni.getStorageSync(De(e,t));if(a&&a.slides&&a.slides.length>0)return a}catch(a){}return null})(n.value,s.value);e&&e.slides&&0!==e.slides.length?(l.value=e.slides,c.value=0,d.value=!1,p.value="",u.value=""):_()},_=async()=>{if(!r.value||!n.value||!s.value)return p.value="缺少必要参数",void(u.value="error");try{d.value=!0,p.value="",l.value=[],c.value=0,u.value="downloading",t("log","at pages/WYXD/WYXD.vue:141","userToken.value",r.value),t("log","at pages/WYXD/WYXD.vue:142","workspaceId.value",n.value),t("log","at pages/WYXD/WYXD.vue:143","filePath.value",s.value);const e=await ze(r.value,n.value,s.value);t("log","at pages/WYXD/WYXD.vue:147","获取到的下载地址:",e),u.value="extracting";const a=await Pe(e);t("log","at pages/WYXD/WYXD.vue:151","extracted",a),u.value="parsing";const o=((e,t,a)=>{const n=e.match(/]*>([\s\S]*?)<\/body>/i),s=n?n[1]:e,o=/]*\/?>/gi,i=s.split(o);if(0===i.length)return[];const r=s.match(o)||[],l=[];return i.forEach(((e,t)=>{const a=e.trim();if(!a)return;let n={order:t,num:0};if(t{try{const n={...a,cachedAt:Date.now()};uni.setStorageSync(De(e,t),n)}catch(n){}})(n.value,s.value,{fileName:i.value,slides:o})}catch(e){d.value=!1,u.value="error";const a="string"==typeof e?e:e.message||"下载失败";p.value=a,t("error","at pages/WYXD/WYXD.vue:174","[WYXD] download error:",e)}};return o((e=>{n.value=e.workspaceId||"",s.value=(null==e?void 0:e.filePath)?decodeURIComponent(e.filePath):"",i.value=(null==e?void 0:e.fileName)?decodeURIComponent(e.fileName):"未命名文档",r.value=(null==e?void 0:e.userToken)??uni.getStorageSync("user_token")??"",t("log","at pages/WYXD/WYXD.vue:183","页面接收options原始参数:",e),t("log","at pages/WYXD/WYXD.vue:184","最终赋值变量:",{workspaceId:n.value,filePath:s.value,fileName:i.value,userToken:r.value}),"1"!==e.forceDownload&&((e,t)=>{try{const a=uni.getStorageSync(De(e,t));return!!(a&&a.slides&&a.slides.length>0)}catch(a){return!1}})(n.value,s.value)?k():_()})),(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"wyxd-container page-container"},[e.createElementVNode("view",{class:"wyxd-header"},[e.createElementVNode("view",{class:"custom-navbar"},[e.createElementVNode("view",{class:"navbar-left",onClick:g},[e.createElementVNode("view",{class:"iconfont icon-fanhui custom-navbar-icon"}),e.createElementVNode("view",{class:"navbar-before-title workspace-text"},"返回")]),e.createElementVNode("view",{class:"navbar-title workspace-text"},e.toDisplayString(m.value),1),e.createElementVNode("view",{class:"navbar-right"})])]),e.createElementVNode("view",{class:"wyxd-content"},[d.value||p.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"wyxd-state"},[e.createElementVNode("view",{class:e.normalizeClass(["iconfont wyxd-state-icon",p.value?"icon-quxiao":"icon-sousuo"])},null,2),e.createElementVNode("view",{class:"wyxd-state-title"},e.toDisplayString(p.value||h.value),1),p.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"wyxd-state-desc"},"请返回重试")):e.createCommentVNode("",!0)])):l.value.length?(e.openBlock(),e.createElementBlock("view",{key:2,class:"wyxd-slide-area"},[e.createElementVNode("swiper",{class:"wyxd-swiper",current:c.value,onChange:v,duration:250,"easing-function":"easeOutCubic"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,((t,a)=>(e.openBlock(),e.createElementBlock("swiper-item",{key:a},[e.createElementVNode("scroll-view",{class:"wyxd-slide-scroll","scroll-y":"","show-scrollbar":!1},[e.createElementVNode("view",{class:"wyxd-slide-card",innerHTML:t.html},null,8,["innerHTML"])])])))),128))],40,["current"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"wyxd-state"},[e.createElementVNode("view",{class:"iconfont icon-wenjianjia wyxd-state-icon"}),e.createElementVNode("view",{class:"wyxd-state-title"},"暂无内容")]))]),l.value.length>1?(e.openBlock(),e.createElementBlock("view",{key:0,class:"wyxd-pager"},[e.createElementVNode("view",{class:"wyxd-pager-inner"},[e.createElementVNode("view",{class:e.normalizeClass(["wyxd-nav-btn",{disabled:c.value<=0}]),onClick:w},[e.createElementVNode("view",{class:"iconfont icon-fanhui",style:{"font-size":"24rpx"}})],2),e.createElementVNode("view",{class:"wyxd-page-indicator"},[e.createElementVNode("text",{class:"wyxd-current"},e.toDisplayString(f(c.value+1)),1),e.createElementVNode("text",{class:"wyxd-divider"},"/"),e.createElementVNode("text",{class:"wyxd-total"},e.toDisplayString(f(l.value.length)),1)]),e.createElementVNode("view",{class:e.normalizeClass(["wyxd-nav-btn",{disabled:c.value>=l.value.length-1}]),onClick:y},[e.createElementVNode("view",{class:"iconfont icon-fanhui",style:{transform:"rotate(180deg)","font-size":"24rpx"}})],2)])])):e.createCommentVNode("",!0)])],64))}},[["__scopeId","data-v-adca8384"]]);__definePage("pages/Login/Login",C),__definePage("pages/Chat/Chat",ge),__definePage("pages/WorkSpace/WorkSpace",we),__definePage("pages/UserProfileModal/UserProfileModal",ye),__definePage("pages/ContactPages/ContactPages",ke),__definePage("pages/WorkSpace/TemplateSpace/TemplateSpace",_e),__definePage("pages/CloudDatabase/CloudDatabase",be),__definePage("pages/CloudDbDetail/CloudDbDetail",Ee),__definePage("pages/text/text",Ce),__definePage("pages/text/IntuitiveAipptViewer",Ne),__definePage("pages/WYXD/WYXD",Le);const Oe={onLaunch:function(){t("log","at App.vue:4","App Launch")},onShow:function(){t("log","at App.vue:7","App Show")},onHide:function(){t("log","at App.vue:10","App Hide")}};const{app:Me,Vuex:$e,Pinia:Re}=function(){const t=e.createVueApp(Oe),a=function(){const t=e.effectScope(!0),a=t.run((()=>e.ref({})));let n=[],s=[];const o=e.markRaw({install(e){L(o),o._a=e,e.provide(O,o),e.config.globalProperties.$pinia=o,s.forEach((e=>n.push(e))),s=[]},use(e){return this._a?n.push(e):s.push(e),this},_p:n,_a:null,_e:t,_s:new Map,state:a});return o}();return t.use(a),{app:t,pinia:a}}();uni.Vuex=$e,uni.Pinia=Re,Me.provide("__globalStyles",__uniConfig.styles),Me._component.mpType="app",Me._component.render=()=>{},Me.mount("#app")}(Vue); diff --git a/unpackage/dist/build/app-plus/manifest.json b/unpackage/dist/build/app-plus/manifest.json index 86ff86e..6ebb2a1 100644 --- a/unpackage/dist/build/app-plus/manifest.json +++ b/unpackage/dist/build/app-plus/manifest.json @@ -5,7 +5,7 @@ "iPad" ], "id": "__UNI__923FD9E", - "name": "test1", + "name": "宇恒一号", "version": { "name": "1.1.1", "code": 2 diff --git a/unpackage/dist/build/app-plus/pages/Chat/Chat.css b/unpackage/dist/build/app-plus/pages/Chat/Chat.css index 5a997bf..858af8d 100644 --- a/unpackage/dist/build/app-plus/pages/Chat/Chat.css +++ b/unpackage/dist/build/app-plus/pages/Chat/Chat.css @@ -1 +1 @@ -.uniui-cart-filled[data-v-b25a9929]:before{content:"\e6d0"}.uniui-gift-filled[data-v-b25a9929]:before{content:"\e6c4"}.uniui-color[data-v-b25a9929]:before{content:"\e6cf"}.uniui-wallet[data-v-b25a9929]:before{content:"\e6b1"}.uniui-settings-filled[data-v-b25a9929]:before{content:"\e6ce"}.uniui-auth-filled[data-v-b25a9929]:before{content:"\e6cc"}.uniui-shop-filled[data-v-b25a9929]:before{content:"\e6cd"}.uniui-staff-filled[data-v-b25a9929]:before{content:"\e6cb"}.uniui-vip-filled[data-v-b25a9929]:before{content:"\e6c6"}.uniui-plus-filled[data-v-b25a9929]:before{content:"\e6c7"}.uniui-folder-add-filled[data-v-b25a9929]:before{content:"\e6c8"}.uniui-color-filled[data-v-b25a9929]:before{content:"\e6c9"}.uniui-tune-filled[data-v-b25a9929]:before{content:"\e6ca"}.uniui-calendar-filled[data-v-b25a9929]:before{content:"\e6c0"}.uniui-notification-filled[data-v-b25a9929]:before{content:"\e6c1"}.uniui-wallet-filled[data-v-b25a9929]:before{content:"\e6c2"}.uniui-medal-filled[data-v-b25a9929]:before{content:"\e6c3"}.uniui-fire-filled[data-v-b25a9929]:before{content:"\e6c5"}.uniui-refreshempty[data-v-b25a9929]:before{content:"\e6bf"}.uniui-location-filled[data-v-b25a9929]:before{content:"\e6af"}.uniui-person-filled[data-v-b25a9929]:before{content:"\e69d"}.uniui-personadd-filled[data-v-b25a9929]:before{content:"\e698"}.uniui-arrowthinleft[data-v-b25a9929]:before{content:"\e6d2"}.uniui-arrowthinup[data-v-b25a9929]:before{content:"\e6d3"}.uniui-arrowthindown[data-v-b25a9929]:before{content:"\e6d4"}.uniui-back[data-v-b25a9929]:before{content:"\e6b9"}.uniui-forward[data-v-b25a9929]:before{content:"\e6ba"}.uniui-arrow-right[data-v-b25a9929]:before{content:"\e6bb"}.uniui-arrow-left[data-v-b25a9929]:before{content:"\e6bc"}.uniui-arrow-up[data-v-b25a9929]:before{content:"\e6bd"}.uniui-arrow-down[data-v-b25a9929]:before{content:"\e6be"}.uniui-arrowthinright[data-v-b25a9929]:before{content:"\e6d1"}.uniui-down[data-v-b25a9929]:before{content:"\e6b8"}.uniui-bottom[data-v-b25a9929]:before{content:"\e6b8"}.uniui-arrowright[data-v-b25a9929]:before{content:"\e6d5"}.uniui-right[data-v-b25a9929]:before{content:"\e6b5"}.uniui-up[data-v-b25a9929]:before{content:"\e6b6"}.uniui-top[data-v-b25a9929]:before{content:"\e6b6"}.uniui-left[data-v-b25a9929]:before{content:"\e6b7"}.uniui-arrowup[data-v-b25a9929]:before{content:"\e6d6"}.uniui-eye[data-v-b25a9929]:before{content:"\e651"}.uniui-eye-filled[data-v-b25a9929]:before{content:"\e66a"}.uniui-eye-slash[data-v-b25a9929]:before{content:"\e6b3"}.uniui-eye-slash-filled[data-v-b25a9929]:before{content:"\e6b4"}.uniui-info-filled[data-v-b25a9929]:before{content:"\e649"}.uniui-reload[data-v-b25a9929]:before{content:"\e6b2"}.uniui-micoff-filled[data-v-b25a9929]:before{content:"\e6b0"}.uniui-map-pin-ellipse[data-v-b25a9929]:before{content:"\e6ac"}.uniui-map-pin[data-v-b25a9929]:before{content:"\e6ad"}.uniui-location[data-v-b25a9929]:before{content:"\e6ae"}.uniui-starhalf[data-v-b25a9929]:before{content:"\e683"}.uniui-star[data-v-b25a9929]:before{content:"\e688"}.uniui-star-filled[data-v-b25a9929]:before{content:"\e68f"}.uniui-calendar[data-v-b25a9929]:before{content:"\e6a0"}.uniui-fire[data-v-b25a9929]:before{content:"\e6a1"}.uniui-medal[data-v-b25a9929]:before{content:"\e6a2"}.uniui-font[data-v-b25a9929]:before{content:"\e6a3"}.uniui-gift[data-v-b25a9929]:before{content:"\e6a4"}.uniui-link[data-v-b25a9929]:before{content:"\e6a5"}.uniui-notification[data-v-b25a9929]:before{content:"\e6a6"}.uniui-staff[data-v-b25a9929]:before{content:"\e6a7"}.uniui-vip[data-v-b25a9929]:before{content:"\e6a8"}.uniui-folder-add[data-v-b25a9929]:before{content:"\e6a9"}.uniui-tune[data-v-b25a9929]:before{content:"\e6aa"}.uniui-auth[data-v-b25a9929]:before{content:"\e6ab"}.uniui-person[data-v-b25a9929]:before{content:"\e699"}.uniui-email-filled[data-v-b25a9929]:before{content:"\e69a"}.uniui-phone-filled[data-v-b25a9929]:before{content:"\e69b"}.uniui-phone[data-v-b25a9929]:before{content:"\e69c"}.uniui-email[data-v-b25a9929]:before{content:"\e69e"}.uniui-personadd[data-v-b25a9929]:before{content:"\e69f"}.uniui-chatboxes-filled[data-v-b25a9929]:before{content:"\e692"}.uniui-contact[data-v-b25a9929]:before{content:"\e693"}.uniui-chatbubble-filled[data-v-b25a9929]:before{content:"\e694"}.uniui-contact-filled[data-v-b25a9929]:before{content:"\e695"}.uniui-chatboxes[data-v-b25a9929]:before{content:"\e696"}.uniui-chatbubble[data-v-b25a9929]:before{content:"\e697"}.uniui-upload-filled[data-v-b25a9929]:before{content:"\e68e"}.uniui-upload[data-v-b25a9929]:before{content:"\e690"}.uniui-weixin[data-v-b25a9929]:before{content:"\e691"}.uniui-compose[data-v-b25a9929]:before{content:"\e67f"}.uniui-qq[data-v-b25a9929]:before{content:"\e680"}.uniui-download-filled[data-v-b25a9929]:before{content:"\e681"}.uniui-pyq[data-v-b25a9929]:before{content:"\e682"}.uniui-sound[data-v-b25a9929]:before{content:"\e684"}.uniui-trash-filled[data-v-b25a9929]:before{content:"\e685"}.uniui-sound-filled[data-v-b25a9929]:before{content:"\e686"}.uniui-trash[data-v-b25a9929]:before{content:"\e687"}.uniui-videocam-filled[data-v-b25a9929]:before{content:"\e689"}.uniui-spinner-cycle[data-v-b25a9929]:before{content:"\e68a"}.uniui-weibo[data-v-b25a9929]:before{content:"\e68b"}.uniui-videocam[data-v-b25a9929]:before{content:"\e68c"}.uniui-download[data-v-b25a9929]:before{content:"\e68d"}.uniui-help[data-v-b25a9929]:before{content:"\e679"}.uniui-navigate-filled[data-v-b25a9929]:before{content:"\e67a"}.uniui-plusempty[data-v-b25a9929]:before{content:"\e67b"}.uniui-smallcircle[data-v-b25a9929]:before{content:"\e67c"}.uniui-minus-filled[data-v-b25a9929]:before{content:"\e67d"}.uniui-micoff[data-v-b25a9929]:before{content:"\e67e"}.uniui-closeempty[data-v-b25a9929]:before{content:"\e66c"}.uniui-clear[data-v-b25a9929]:before{content:"\e66d"}.uniui-navigate[data-v-b25a9929]:before{content:"\e66e"}.uniui-minus[data-v-b25a9929]:before{content:"\e66f"}.uniui-image[data-v-b25a9929]:before{content:"\e670"}.uniui-mic[data-v-b25a9929]:before{content:"\e671"}.uniui-paperplane[data-v-b25a9929]:before{content:"\e672"}.uniui-close[data-v-b25a9929]:before{content:"\e673"}.uniui-help-filled[data-v-b25a9929]:before{content:"\e674"}.uniui-paperplane-filled[data-v-b25a9929]:before{content:"\e675"}.uniui-plus[data-v-b25a9929]:before{content:"\e676"}.uniui-mic-filled[data-v-b25a9929]:before{content:"\e677"}.uniui-image-filled[data-v-b25a9929]:before{content:"\e678"}.uniui-locked-filled[data-v-b25a9929]:before{content:"\e668"}.uniui-info[data-v-b25a9929]:before{content:"\e669"}.uniui-locked[data-v-b25a9929]:before{content:"\e66b"}.uniui-camera-filled[data-v-b25a9929]:before{content:"\e658"}.uniui-chat-filled[data-v-b25a9929]:before{content:"\e659"}.uniui-camera[data-v-b25a9929]:before{content:"\e65a"}.uniui-circle[data-v-b25a9929]:before{content:"\e65b"}.uniui-checkmarkempty[data-v-b25a9929]:before{content:"\e65c"}.uniui-chat[data-v-b25a9929]:before{content:"\e65d"}.uniui-circle-filled[data-v-b25a9929]:before{content:"\e65e"}.uniui-flag[data-v-b25a9929]:before{content:"\e65f"}.uniui-flag-filled[data-v-b25a9929]:before{content:"\e660"}.uniui-gear-filled[data-v-b25a9929]:before{content:"\e661"}.uniui-home[data-v-b25a9929]:before{content:"\e662"}.uniui-home-filled[data-v-b25a9929]:before{content:"\e663"}.uniui-gear[data-v-b25a9929]:before{content:"\e664"}.uniui-smallcircle-filled[data-v-b25a9929]:before{content:"\e665"}.uniui-map-filled[data-v-b25a9929]:before{content:"\e666"}.uniui-map[data-v-b25a9929]:before{content:"\e667"}.uniui-refresh-filled[data-v-b25a9929]:before{content:"\e656"}.uniui-refresh[data-v-b25a9929]:before{content:"\e657"}.uniui-cloud-upload[data-v-b25a9929]:before{content:"\e645"}.uniui-cloud-download-filled[data-v-b25a9929]:before{content:"\e646"}.uniui-cloud-download[data-v-b25a9929]:before{content:"\e647"}.uniui-cloud-upload-filled[data-v-b25a9929]:before{content:"\e648"}.uniui-redo[data-v-b25a9929]:before{content:"\e64a"}.uniui-images-filled[data-v-b25a9929]:before{content:"\e64b"}.uniui-undo-filled[data-v-b25a9929]:before{content:"\e64c"}.uniui-more[data-v-b25a9929]:before{content:"\e64d"}.uniui-more-filled[data-v-b25a9929]:before{content:"\e64e"}.uniui-undo[data-v-b25a9929]:before{content:"\e64f"}.uniui-images[data-v-b25a9929]:before{content:"\e650"}.uniui-paperclip[data-v-b25a9929]:before{content:"\e652"}.uniui-settings[data-v-b25a9929]:before{content:"\e653"}.uniui-search[data-v-b25a9929]:before{content:"\e654"}.uniui-redo-filled[data-v-b25a9929]:before{content:"\e655"}.uniui-list[data-v-b25a9929]:before{content:"\e644"}.uniui-mail-open-filled[data-v-b25a9929]:before{content:"\e63a"}.uniui-hand-down-filled[data-v-b25a9929]:before{content:"\e63c"}.uniui-hand-down[data-v-b25a9929]:before{content:"\e63d"}.uniui-hand-up-filled[data-v-b25a9929]:before{content:"\e63e"}.uniui-hand-up[data-v-b25a9929]:before{content:"\e63f"}.uniui-heart-filled[data-v-b25a9929]:before{content:"\e641"}.uniui-mail-open[data-v-b25a9929]:before{content:"\e643"}.uniui-heart[data-v-b25a9929]:before{content:"\e639"}.uniui-loop[data-v-b25a9929]:before{content:"\e633"}.uniui-pulldown[data-v-b25a9929]:before{content:"\e632"}.uniui-scan[data-v-b25a9929]:before{content:"\e62a"}.uniui-bars[data-v-b25a9929]:before{content:"\e627"}.uniui-checkbox[data-v-b25a9929]:before{content:"\e62b"}.uniui-checkbox-filled[data-v-b25a9929]:before{content:"\e62c"}.uniui-shop[data-v-b25a9929]:before{content:"\e62f"}.uniui-headphones[data-v-b25a9929]:before{content:"\e630"}.uniui-cart[data-v-b25a9929]:before{content:"\e631"}@font-face{font-family:uniicons;src:url(../../assets/uniicons.32e978a5.ttf)}.uni-icons[data-v-b25a9929]{font-family:uniicons;text-decoration:none;text-align:center}.chat-sidebar-container[data-v-eed4c646]{display:flex;flex-direction:column;align-items:center;width:100%;height:100%;background:linear-gradient(180deg,#faf9ff,#f3f2f8,#eeeef5);color:#000;box-sizing:border-box}.sidebar-header[data-v-eed4c646]{padding:1.25rem .9375rem .9375rem;width:100%;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;flex-direction:column;border-bottom:.03125rem solid rgba(170,170,255,.18)}.user-profile-card[data-v-eed4c646]{padding:.5rem .75rem;width:100%;display:flex;align-items:center;background:linear-gradient(135deg,#fff,#faf9ff);box-sizing:border-box;border-radius:.875rem;box-shadow:0 .125rem .625rem rgba(100,100,150,.08);border:.03125rem solid rgba(170,170,255,.12);transition:all .2s ease}.user-profile-card[data-v-eed4c646]:active{transform:scale(.98);box-shadow:0 .0625rem .3125rem rgba(100,100,150,.12)}.user-profile-card .left[data-v-eed4c646]{flex-shrink:0;display:flex;justify-content:center;align-items:center;margin-right:.5rem}.user-profile-card .left .avatar-preview[data-v-eed4c646]{display:flex;justify-content:center;align-items:center;width:3.125rem;height:3.125rem;border-radius:50%;overflow:hidden;border:.09375rem solid rgba(170,170,255,.3);box-shadow:0 .0625rem .25rem rgba(0,0,0,.06)}.user-profile-card .left .avatar-preview uni-image[data-v-eed4c646]{width:100%;height:100%;object-fit:cover}.user-profile-card .left .avatar-placeholder[data-v-eed4c646]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:50%;width:3.125rem;height:3.125rem;background:linear-gradient(135deg,#f5f3ff,#ede9fe)}.user-profile-card .center[data-v-eed4c646]{flex:1;height:0;display:flex;flex-direction:column;align-items:start;justify-content:center}.user-profile-card .center uni-text[data-v-eed4c646]:first-child{font-size:.6875rem;color:#999;margin-bottom:.0625rem}.user-profile-card .center uni-text[data-v-eed4c646]:last-child{font-size:.9375rem;font-weight:600;color:#1a1a2e}.user-profile-card .right[data-v-eed4c646]{flex-shrink:0;margin-left:.3125rem;display:flex;align-items:center;background:rgba(16,185,129,.06);padding:.25rem .5rem;border-radius:.625rem}.user-profile-card .right .status-dot[data-v-eed4c646]{width:.375rem;height:.375rem;border-radius:50%;background-color:#10b981;margin-right:.3125rem;box-shadow:0 0 .25rem rgba(16,185,129,.5);animation:statusDotPulse-eed4c646 2s ease-in-out infinite}@keyframes statusDotPulse-eed4c646{0%,to{box-shadow:0 0 .25rem rgba(16,185,129,.5);transform:scale(1)}50%{box-shadow:0 0 .5rem rgba(16,185,129,.6);transform:scale(1.15)}}.user-profile-card .right .status-text uni-text[data-v-eed4c646]{font-size:.6875rem;color:#059669;font-weight:500}.new-chat-btn[data-v-eed4c646]{margin-top:.75rem;width:100%;padding:.8125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,#6c63ff,#4a45d1);border-radius:.75rem;box-shadow:0 .1875rem .625rem rgba(108,99,255,.3);transition:all .2s ease}.new-chat-btn[data-v-eed4c646]:active{transform:scale(.97);box-shadow:0 .09375rem .3125rem rgba(108,99,255,.2)}.new-chat-btn uni-text[data-v-eed4c646]{font-size:.875rem;font-weight:600;color:#fff;letter-spacing:.03125rem}.chat-history[data-v-eed4c646]{width:100%;padding:.625rem 0;box-sizing:border-box;flex:1;height:0;overflow-y:auto;overflow-x:hidden}.chat-history[data-v-eed4c646]::-webkit-scrollbar{width:.1875rem}.chat-history[data-v-eed4c646]::-webkit-scrollbar-thumb{background:rgba(108,99,255,.25);border-radius:.09375rem}.chat-history[data-v-eed4c646]::-webkit-scrollbar-track{background:transparent}.history-header[data-v-eed4c646]{width:100%;padding:.625rem .9375rem;box-sizing:border-box;border-bottom:.03125rem solid rgba(170,170,255,.15);display:flex;justify-content:space-between;align-items:center}.history-header .history-title-section[data-v-eed4c646]{display:flex;flex-direction:column}.history-header .history-title-section uni-text[data-v-eed4c646]:first-child{font-size:1rem;font-weight:700;color:#1a1a2e}.history-header .history-title-section uni-text[data-v-eed4c646]:last-child{font-size:.6875rem;color:#999;margin-top:.0625rem}.history-header .history-management[data-v-eed4c646]{display:flex}.history-header .history-management .history-management-btn[data-v-eed4c646]{margin-left:.5rem;width:1.75rem;height:1.75rem;display:flex;justify-content:center;align-items:center;font-size:.8125rem;background-color:rgba(221,221,221,.4);border-radius:.4375rem;transition:all .15s ease}.history-header .history-management .history-management-btn[data-v-eed4c646]:active{transform:scale(.9)}.history-header .history-management .icon-jia-style[data-v-eed4c646]{background:rgba(16,185,129,.12);color:#059669}.history-header .history-management .icon-duoxuan-style[data-v-eed4c646]{color:#666}.history-header .history-management .icon-saochu-style[data-v-eed4c646]{color:#ff4d4f}.history-header .history-management .icon-quxiao-style[data-v-eed4c646]{color:#6c63ff;box-sizing:border-box}.history-header .history-management .icon-total_selection-style[data-v-eed4c646]{color:#666}.history-header .history-management .icon-total_selection-style.active[data-v-eed4c646]{color:#6c63ff;background:rgba(108,99,255,.12)}.history-header .history-management .icon-shanchu-style[data-v-eed4c646]{color:#ff4d4f}.history-search-wrap[data-v-eed4c646]{display:flex;flex-direction:column;width:100%;padding:.5rem .9375rem .1875rem;box-sizing:border-box}.history-search-wrap .history-search-inner[data-v-eed4c646]{display:flex;width:100%;padding:.375rem .6875rem;box-sizing:border-box;align-items:center;background-color:rgba(255,255,255,.6);border-radius:.875rem;border:.0625rem solid transparent;transition:all .25s ease}.history-search-wrap .history-search-inner .search-icon[data-v-eed4c646]{color:#999!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner .chat-search-icon[data-v-eed4c646]{color:#6c63ff!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner uni-input[data-v-eed4c646]{margin-left:.375rem;box-sizing:border-box;font-size:.8125rem;color:#333}.history-search-wrap .history-search-inner uni-input[data-v-eed4c646]::-webkit-input-placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner uni-input[data-v-eed4c646]::placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner.has-value[data-v-eed4c646]{background-color:#fff;border-color:#6c63ff;box-shadow:0 0 0 .09375rem rgba(108,99,255,.08)}.chat-history-list[data-v-eed4c646]{padding:.3125rem .9375rem}.chat-history-list .chat-history-card[data-v-eed4c646]{display:flex;align-items:center;border:.04688rem solid rgba(108,99,255,.25);background:linear-gradient(135deg,#fff,#faf9ff);border-radius:.75rem;padding:.75rem;margin-top:.375rem;box-sizing:border-box;transition:all .2s ease}.chat-history-list .chat-history-card[data-v-eed4c646]:active{transform:scale(.98)}.chat-history-list .is-select-chat[data-v-eed4c646]{border-color:#6c63ff;box-shadow:0 .125rem .5rem rgba(108,99,255,.15);background:linear-gradient(135deg,rgba(108,99,255,.06),rgba(108,99,255,.02))}.chat-history-list .history-chat-checkbox[data-v-eed4c646]{width:1.125rem;height:1.125rem;border-radius:.3125rem;display:flex;justify-content:center;align-items:center;border:.0625rem solid rgba(108,99,255,.5);margin-right:.375rem;flex-shrink:0}.chat-history-list .history-chat-avatar[data-v-eed4c646]{width:2rem;height:2rem;border-radius:.5625rem;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,rgba(108,99,255,.3),rgba(108,99,255,.15));margin-left:0;margin-right:.5rem;box-sizing:border-box;flex-shrink:0}.chat-history-list .friend-avatar[data-v-eed4c646]{display:flex;justify-content:center;align-items:center;border-radius:.5625rem;width:100%;height:100%;overflow:hidden}.chat-page[data-v-efd33b40]{position:relative;background:linear-gradient(180deg,#f5f4ff,#f8f7fc,#faf9fe)}.mask[data-v-efd33b40]{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.45);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:998;animation:fadeIn-efd33b40 .3s ease}@keyframes fadeIn-efd33b40{0%{opacity:0}to{opacity:1}}.chat-sidebar[data-v-efd33b40]{position:fixed;top:0;left:0;width:calc(100% - 3.125rem);max-width:21.25rem;height:100%;transform:translate(-100%);transition:transform .4s cubic-bezier(.4,0,.2,1);z-index:999;box-shadow:.25rem 0 .9375rem rgba(0,0,0,.06)}.chat-sidebar.sidebar-show[data-v-efd33b40]{transform:translate(0)}.ncd-overlay[data-v-efd33b40]{position:fixed;width:100%;height:100%;left:0;top:0;display:flex;align-items:center;justify-content:center;background-color:rgba(30,30,50,.35);z-index:9999;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:fadeIn-efd33b40 .25s ease}.ncd-card[data-v-efd33b40]{width:90%;height:auto;background-color:#fff;border-radius:1.25rem;padding:1.5625rem 1.25rem;box-sizing:border-box;box-shadow:0 .625rem 1.875rem rgba(100,100,200,.12);animation:slideUp-efd33b40 .35s ease}@keyframes slideUp-efd33b40{0%{opacity:0;transform:translateY(1.25rem) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.ncd-header[data-v-efd33b40]{display:flex;justify-content:center;align-items:center;width:100%}.ncd-title-eng[data-v-efd33b40]{display:flex;flex-shrink:0;background:linear-gradient(135deg,#6c63ff,#4a45d1);padding:.1875rem .4375rem;border-radius:.375rem;justify-content:center;align-items:center}.ncd-title-eng uni-text[data-v-efd33b40]{color:#fff;font-weight:700;font-size:.875rem}.ncd-title-zh[data-v-efd33b40]{margin-left:.3125rem;display:flex;flex:1;height:0;font-size:1.125rem;font-weight:700;color:#1a1a2e}.ncd-header uni-icons[data-v-efd33b40]{display:flex;flex-shrink:0}.ncd-options[data-v-efd33b40]{display:flex;flex-direction:column;width:100%;justify-content:center;align-items:center;margin-top:.625rem;box-sizing:border-box}.ncd-option[data-v-efd33b40]{width:100%;background:#f8fafc;padding:1.25rem .9375rem;display:flex;border-radius:.875rem;margin-top:.625rem;box-sizing:border-box;justify-content:center;align-items:center;transition:all .2s ease;border:.0625rem solid transparent}.ncd-option[data-v-efd33b40]:active{transform:scale(.98)}.ncd-normal[data-v-efd33b40]{border:.0625rem solid #e8edf3}.ncd-normal[data-v-efd33b40]:active{border-color:#c4c8d0;background:#f0f3f7}.ncd-opt-icon[data-v-efd33b40]{width:2.5rem;height:2.5rem;border-radius:.75rem;padding:.3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;align-items:center}.ncd-normal .ncd-opt-icon[data-v-efd33b40]{background:linear-gradient(135deg,#e2e8f0,#d9dfe8)}.ncd-opt-title[data-v-efd33b40]{display:flex;flex-direction:column;margin:0 .5rem;box-sizing:border-box;justify-content:center;flex:1;height:0}.ncd-opt-title-1[data-v-efd33b40]{font-size:.9375rem;font-weight:600;color:#1a1a2e}.ncd-opt-title-2[data-v-efd33b40]{font-size:.75rem;color:#888;margin-top:.125rem}.arrow-right-style[data-v-efd33b40]{display:flex;flex-shrink:0;font-weight:700!important;font-size:.875rem!important;color:#999!important}.ncd-intelligence[data-v-efd33b40]{background:linear-gradient(135deg,#f8f5ff,#efe8ff);border:.0625rem solid #c4b5fd}.ncd-intelligence[data-v-efd33b40]:active{border-color:#a78bfa;background:linear-gradient(135deg,#f3efff,#e8dcff)}.ncd-intelligence .ncd-opt-icon[data-v-efd33b40]{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.close-option-card[data-v-efd33b40]{width:100%;display:flex;justify-content:flex-end}.close-option-card .iconfont[data-v-efd33b40]{color:#ff4d4f!important}.chat-option-list[data-v-efd33b40]{display:flex;width:100%;flex-direction:column}.chat-option[data-v-efd33b40]{display:flex;justify-content:flex-start;align-items:center;margin:.3125rem 0;padding:.5rem .625rem;border-radius:.625rem;box-sizing:border-box;transition:all .15s ease}.chat-option[data-v-efd33b40]:active{background:rgba(170,170,255,.08)}.chat-option .iconfont[data-v-efd33b40]{font-size:30px}.option-name[data-v-efd33b40]{font-size:17px;font-weight:500;margin-left:12px;box-sizing:border-box;color:#333}.chat-wrapper[data-v-efd33b40]{position:relative;width:100%;height:100%;display:flex;flex-direction:column}.chat-hearder[data-v-efd33b40]{width:100%;height:auto;padding:.5rem .3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:flex-start;align-items:center;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.8));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:.03125rem solid rgba(170,170,255,.15)}.chat-btn-group[data-v-efd33b40]{width:100%;height:auto;display:flex;justify-content:flex-start;align-items:center}.head-btn[data-v-efd33b40]{padding:.375rem .4375rem;border:.04688rem solid rgba(170,170,255,.3);border-radius:.5625rem;margin:0 .3125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,.7);transition:all .2s ease}.head-btn[data-v-efd33b40]:active{background:rgba(170,170,255,.1);transform:scale(.95)}.chat-btn-group .head-btn:nth-child(1) .iconfont[data-v-efd33b40]{color:#a78bfa}.chat-btn-group .head-btn:nth-child(2) .iconfont[data-v-efd33b40]{color:#6495ed}.head-btn .iconfont[data-v-efd33b40]{font-size:1.5rem}.log-out .iconfont[data-v-efd33b40]{color:#ff4d4f}.main-chat[data-v-efd33b40]{display:flex;flex:1;height:0;width:100%;flex-direction:column}.load-more-tip[data-v-efd33b40]{text-align:center;padding:.625rem 0;font-size:.75rem;color:#999}.chat-messages[data-v-efd33b40]{display:flex;flex:1;height:0;width:100%;padding:.625rem .75rem;box-sizing:border-box;flex-direction:column;overflow:auto}.chat-messages[data-v-efd33b40]::-webkit-scrollbar{width:.1875rem}.chat-messages[data-v-efd33b40]::-webkit-scrollbar-thumb{background:rgba(170,170,255,.3);border-radius:.09375rem}.chat-messages[data-v-efd33b40]::-webkit-scrollbar-track{background:transparent}.chat-message[data-v-efd33b40]{display:flex;align-items:flex-start;margin:.4375rem 0;box-sizing:border-box;animation:msgFadeIn-efd33b40 .3s ease}@keyframes msgFadeIn-efd33b40{0%{opacity:0;transform:translateY(.3125rem)}to{opacity:1;transform:translateY(0)}}.message-user[data-v-efd33b40]{flex-direction:row-reverse}.chat-avatar[data-v-efd33b40]{display:flex;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;box-sizing:border-box;border-radius:.5rem;margin-right:.375rem;flex-shrink:0}.friend-avatar[data-v-efd33b40]{display:flex;justify-content:center;align-items:center;border-radius:.5rem;width:100%;height:100%;overflow:hidden}.chat-avatar-user[data-v-efd33b40]{margin-right:0;margin-left:.375rem}.chat-content[data-v-efd33b40]{width:auto;max-width:calc(100% - 3.75rem);height:auto;padding:.625rem .75rem;box-sizing:border-box;border-radius:.75rem;overflow-x:auto;font-size:1rem;line-height:1.65;position:relative;box-shadow:0 .0625rem .25rem rgba(0,0,0,.04);background:#fff;border:.03125rem solid #eeeef5}.chat-content-user[data-v-efd33b40]{background:linear-gradient(135deg,#c4b5fd,#b8a5f0);color:#fff;border:none;box-shadow:0 .125rem .375rem rgba(170,170,255,.3);border-bottom-right-radius:.25rem}.chat-content-assistant[data-v-efd33b40]{max-width:100%}.chat-content[data-v-efd33b40]:not(.chat-content-user){border-bottom-left-radius:.25rem}.message-image[data-v-efd33b40]{max-width:9.375rem;border-radius:.375rem;margin:.25rem 0}.message-file-list[data-v-efd33b40]{margin:.3125rem 0}.file-item[data-v-efd33b40]{margin:.1875rem 0}.message-file[data-v-efd33b40]{display:flex;align-items:center;padding:.4375rem .5625rem;background:rgba(255,255,255,.85);border-radius:.375rem;max-width:10.9375rem;border:.03125rem solid #eeeef5}.chat-content-user .message-file[data-v-efd33b40]{background:rgba(255,255,255,.25);border-color:rgba(255,255,255,.3)}.file-icon[data-v-efd33b40]{font-size:1rem;margin-right:.375rem}.file-name[data-v-efd33b40]{flex:1;font-size:.8125rem;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-content-user .file-name[data-v-efd33b40]{color:#fff}.file-size[data-v-efd33b40]{font-size:.6875rem;color:#999;margin-left:.25rem}.chat-content-user .file-size[data-v-efd33b40]{color:rgba(255,255,255,.7)}.chat-interactive-container[data-v-efd33b40]{display:flex;flex-shrink:0;width:100%;padding:.5rem .75rem .75rem;box-sizing:border-box;flex-direction:column;background:linear-gradient(180deg,rgba(255,255,255,.7),rgba(255,255,255,.95));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:.03125rem solid rgba(170,170,255,.12)}.chat-interactive-group[data-v-efd33b40]{display:flex;width:100%;padding:.375rem 0;box-sizing:border-box;justify-content:flex-start;align-items:center}.chat-interactive-btn[data-v-efd33b40]{display:flex;align-items:center;justify-content:center;border:.04688rem solid #d4d4e0;border-radius:.5rem;padding:.375rem .625rem;margin-right:.5rem;box-sizing:border-box;font-size:.75rem;color:#666;background:#fff;transition:all .2s ease}.chat-interactive-btn[data-v-efd33b40]:active{border-color:#aaf;background:rgba(170,170,255,.08);transform:scale(.96)}.chat-interactive-btn.disabled[data-v-efd33b40]{opacity:.45;pointer-events:none;border-color:#e0dfe8;color:#aaa}.chat-input-container[data-v-efd33b40]{display:flex;width:100%;padding:.25rem .25rem .25rem .75rem;box-sizing:border-box;border:.0625rem solid #e0dff5;border-radius:.9375rem;align-items:flex-end;background:#fff;transition:all .25s ease;box-shadow:0 .0625rem .375rem rgba(100,100,150,.06)}.chat-input-container[data-v-efd33b40]:focus-within{border-color:#aaf;box-shadow:0 0 0 .125rem rgba(170,170,255,.12),0 .125rem .5rem rgba(100,100,150,.08)}.message-input[data-v-efd33b40]{flex:1;max-height:4.6875rem;min-height:1.875rem;overflow-y:auto;margin:.125rem .3125rem;box-sizing:border-box;font-size:.875rem;color:#333}.message-input[data-v-efd33b40]::-webkit-input-placeholder{color:#c0c0d0}.message-input[data-v-efd33b40]::placeholder{color:#c0c0d0}.chat-input-container.input-disabled[data-v-efd33b40]{border-color:#eae9f2;background:#f8f7fc}.message-input[disabled][data-v-efd33b40]{opacity:.5;color:#bbb}.input-btn-group.disabled[data-v-efd33b40]{opacity:.4;pointer-events:none;background:#c0c0d0;box-shadow:none}.stop-message-btn[data-v-efd33b40]{background:linear-gradient(135deg,#ff4d4f,#ff6b6b);box-shadow:0 .125rem .375rem rgba(255,77,79,.35);animation:pulseStop-efd33b40 1.8s ease-in-out infinite}.stop-message-btn[data-v-efd33b40]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(255,77,79,.25)}.input-btn-group[data-v-efd33b40]{flex-shrink:0;display:flex;justify-content:center;align-items:center;padding:.4375rem;box-sizing:border-box;background:linear-gradient(135deg,#6c63ff,#8b7cfb);border-radius:.6875rem;width:2.25rem;height:2.25rem;box-shadow:0 .125rem .375rem rgba(108,99,255,.35);transition:all .2s ease}.input-btn-group[data-v-efd33b40]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(108,99,255,.25)}.input-btn-group .iconfont[data-v-efd33b40]{color:#fff;font-size:1.125rem}.ai-card[data-v-efd33b40]{width:auto;border:.0625rem solid rgba(64,158,255,.3);box-shadow:0 .25rem .9375rem rgba(170,170,255,.2);border-radius:1rem!important}.thinking-content[data-v-efd33b40]{display:flex;flex-direction:column;align-items:center;width:100%}.loading-dots[data-v-efd33b40]{display:flex;width:100%;align-items:center;justify-content:center}.dot[data-v-efd33b40]{width:.4375rem;height:.4375rem;margin:.1875rem;border-radius:50%;background:linear-gradient(135deg,#409eff,#6db2ff);animation:dotBlink-efd33b40 1.2s infinite ease-in-out}@keyframes dotBlink-efd33b40{0%,to{opacity:.3;transform:scale(.7)}50%{opacity:1;transform:scale(1.2)}}.dot[data-v-efd33b40]:nth-child(2){animation-delay:.25s}.dot[data-v-efd33b40]:nth-child(3){animation-delay:.5s}.thinking-text[data-v-efd33b40]{margin:.625rem 0;font-size:20px;font-weight:600;color:#409eff}.stop-thinking-btn[data-v-efd33b40]{display:flex;align-items:center;justify-content:center;width:100%;padding:.6875rem 0;margin-top:.625rem;border-radius:.75rem;font-size:.875rem;font-weight:600;color:#ff4d4f;background:linear-gradient(135deg,rgba(255,77,79,.06),rgba(255,77,79,.02));border:.0625rem solid rgba(255,77,79,.35);transition:all .2s ease;animation:pulseStop-efd33b40 2s ease-in-out infinite}.stop-thinking-btn[data-v-efd33b40]:active{background:rgba(255,77,79,.12);border-color:#ff4d4f;transform:scale(.97)}@keyframes pulseStop-efd33b40{0%,to{border-color:rgba(255,77,79,.35)}50%{border-color:rgba(255,77,79,.65)}}.image-list[data-v-efd33b40]{width:100%;padding:.25rem 0 .0625rem;animation:fadeIn-efd33b40 .25s ease}.image-tags[data-v-efd33b40]{display:flex;flex-wrap:wrap;gap:.3125rem}.image-tag[data-v-efd33b40]{display:flex;align-items:center;padding:.1875rem .25rem .1875rem .5rem;background:linear-gradient(135deg,rgba(108,99,255,.07),rgba(108,99,255,.04));border:.03125rem solid rgba(108,99,255,.18);border-radius:.625rem;max-width:6.875rem;transition:all .2s ease;box-shadow:0 .03125rem .125rem rgba(108,99,255,.04)}.image-tag[data-v-efd33b40]:active{transform:scale(.96);border-color:rgba(108,99,255,.4);background:rgba(108,99,255,.1)}.tag-name[data-v-efd33b40]{font-size:.6875rem;color:#5a52d5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;font-weight:500}.tag-close[data-v-efd33b40]{flex-shrink:0;width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;font-size:.875rem;color:#bbb;margin-left:.1875rem;border-radius:50%;line-height:1;transition:all .15s ease}.tag-close[data-v-efd33b40]:active{color:#fff;background:#ff4d4f;transform:scale(1.1)}.message-detail-card[data-v-efd33b40]{width:90%;max-height:80vh;display:flex;flex-direction:column;border-radius:1.25rem;padding:1.25rem 1.125rem}.message-detail-content[data-v-efd33b40]{flex:1;min-height:6.25rem;max-height:60vh;overflow-y:auto;padding:.5rem 0;font-size:.875rem;line-height:1.7;color:#333;white-space:pre-wrap;word-break:break-all}.chat-content{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,HarmonyOS Sans,MiSans,Source Han Sans CN,Microsoft YaHei,Noto Sans CJK SC,sans-serif!important;font-size:16px!important;font-weight:600!important;line-height:1.6;margin:.25rem 0}.chat-content h1{font-size:1.3125rem;line-height:1.4;margin:.5rem 0 .3125rem}.chat-content h2{font-size:1.1875rem;line-height:1.4;margin:.4375rem 0 .25rem}.chat-content h3{font-size:1.125rem;line-height:1.4;margin:.375rem 0 .25rem}.chat-content h4,.chat-content h5,.chat-content h6{font-size:1.0625rem;line-height:1.5;margin:.3125rem 0 .1875rem}.chat-content p,.chat-content uni-text,.chat-content span{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,HarmonyOS Sans,MiSans,Source Han Sans CN,Microsoft YaHei,Noto Sans CJK SC,sans-serif!important;font-size:1.1875rem!important;font-weight:400!important;line-height:1.6;margin:.25rem 0}.chat-content strong,.chat-content b{font-weight:600!important}.chat-content em,.chat-content i{font-style:italic!important}.chat-content .chat-inline-link{color:#3b86ff!important;text-decoration:underline;word-break:break-all}.bubble-loading-dots{display:flex;align-items:center;justify-content:flex-start;padding:.3125rem 0}.bubble-dot{width:.375rem;height:.375rem;border-radius:50%;background:#a0a0b8;margin-right:.3125rem;animation:bubbleDotBlink 1.2s infinite ease-in-out}.bubble-dot:nth-child(2){animation-delay:.3s}.bubble-dot:nth-child(3){animation-delay:.6s}@keyframes bubbleDotBlink{0%,to{opacity:.25;transform:scale(.7)}50%{opacity:1;transform:scale(1.1)}}.detail-links-section{margin-top:.75rem;padding-top:.75rem;border-top:.03125rem solid #eee}.detail-links-title{font-size:.9375rem;font-weight:600;color:#666;margin-bottom:.5rem}.detail-link-item{padding:.5rem .625rem;background:#f5f7fa;border-radius:.375rem;margin-bottom:.375rem}.link-text{font-size:.875rem;color:#007aff;word-break:break-all}.detail-empty{display:flex;align-items:center;justify-content:center;padding:1.25rem 0;font-size:.875rem;color:#999}.download-toast-overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;z-index:10001;pointer-events:none}.download-toast-card{display:flex;align-items:center;justify-content:center;padding:.75rem 1.25rem;border-radius:.75rem;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 .375rem 1.25rem rgba(0,0,0,.15);animation:toastFadeIn .25s ease;pointer-events:auto}@keyframes toastFadeIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.download-toast-loading{background:rgba(40,40,60,.92)}.download-toast-success{background:rgba(40,60,40,.92)}.download-toast-error{background:rgba(60,30,30,.92)}.download-toast-icon{font-size:1.125rem;color:#fff;margin-right:.5rem;display:flex;align-items:center}.download-toast-card.download-toast-loading .download-toast-icon{gap:.25rem}.toast-dot{width:.375rem;height:.375rem;border-radius:50%;background:#fff;animation:toastDotBlink 1.2s infinite ease-in-out}.toast-dot:nth-child(2){animation-delay:.3s}.toast-dot:nth-child(3){animation-delay:.6s}@keyframes toastDotBlink{0%,to{opacity:.3;transform:scale(.75)}50%{opacity:1;transform:scale(1.2)}}.download-toast-text{font-size:.875rem;color:#fff;font-weight:500} +.uniui-cart-filled[data-v-b25a9929]:before{content:"\e6d0"}.uniui-gift-filled[data-v-b25a9929]:before{content:"\e6c4"}.uniui-color[data-v-b25a9929]:before{content:"\e6cf"}.uniui-wallet[data-v-b25a9929]:before{content:"\e6b1"}.uniui-settings-filled[data-v-b25a9929]:before{content:"\e6ce"}.uniui-auth-filled[data-v-b25a9929]:before{content:"\e6cc"}.uniui-shop-filled[data-v-b25a9929]:before{content:"\e6cd"}.uniui-staff-filled[data-v-b25a9929]:before{content:"\e6cb"}.uniui-vip-filled[data-v-b25a9929]:before{content:"\e6c6"}.uniui-plus-filled[data-v-b25a9929]:before{content:"\e6c7"}.uniui-folder-add-filled[data-v-b25a9929]:before{content:"\e6c8"}.uniui-color-filled[data-v-b25a9929]:before{content:"\e6c9"}.uniui-tune-filled[data-v-b25a9929]:before{content:"\e6ca"}.uniui-calendar-filled[data-v-b25a9929]:before{content:"\e6c0"}.uniui-notification-filled[data-v-b25a9929]:before{content:"\e6c1"}.uniui-wallet-filled[data-v-b25a9929]:before{content:"\e6c2"}.uniui-medal-filled[data-v-b25a9929]:before{content:"\e6c3"}.uniui-fire-filled[data-v-b25a9929]:before{content:"\e6c5"}.uniui-refreshempty[data-v-b25a9929]:before{content:"\e6bf"}.uniui-location-filled[data-v-b25a9929]:before{content:"\e6af"}.uniui-person-filled[data-v-b25a9929]:before{content:"\e69d"}.uniui-personadd-filled[data-v-b25a9929]:before{content:"\e698"}.uniui-arrowthinleft[data-v-b25a9929]:before{content:"\e6d2"}.uniui-arrowthinup[data-v-b25a9929]:before{content:"\e6d3"}.uniui-arrowthindown[data-v-b25a9929]:before{content:"\e6d4"}.uniui-back[data-v-b25a9929]:before{content:"\e6b9"}.uniui-forward[data-v-b25a9929]:before{content:"\e6ba"}.uniui-arrow-right[data-v-b25a9929]:before{content:"\e6bb"}.uniui-arrow-left[data-v-b25a9929]:before{content:"\e6bc"}.uniui-arrow-up[data-v-b25a9929]:before{content:"\e6bd"}.uniui-arrow-down[data-v-b25a9929]:before{content:"\e6be"}.uniui-arrowthinright[data-v-b25a9929]:before{content:"\e6d1"}.uniui-down[data-v-b25a9929]:before{content:"\e6b8"}.uniui-bottom[data-v-b25a9929]:before{content:"\e6b8"}.uniui-arrowright[data-v-b25a9929]:before{content:"\e6d5"}.uniui-right[data-v-b25a9929]:before{content:"\e6b5"}.uniui-up[data-v-b25a9929]:before{content:"\e6b6"}.uniui-top[data-v-b25a9929]:before{content:"\e6b6"}.uniui-left[data-v-b25a9929]:before{content:"\e6b7"}.uniui-arrowup[data-v-b25a9929]:before{content:"\e6d6"}.uniui-eye[data-v-b25a9929]:before{content:"\e651"}.uniui-eye-filled[data-v-b25a9929]:before{content:"\e66a"}.uniui-eye-slash[data-v-b25a9929]:before{content:"\e6b3"}.uniui-eye-slash-filled[data-v-b25a9929]:before{content:"\e6b4"}.uniui-info-filled[data-v-b25a9929]:before{content:"\e649"}.uniui-reload[data-v-b25a9929]:before{content:"\e6b2"}.uniui-micoff-filled[data-v-b25a9929]:before{content:"\e6b0"}.uniui-map-pin-ellipse[data-v-b25a9929]:before{content:"\e6ac"}.uniui-map-pin[data-v-b25a9929]:before{content:"\e6ad"}.uniui-location[data-v-b25a9929]:before{content:"\e6ae"}.uniui-starhalf[data-v-b25a9929]:before{content:"\e683"}.uniui-star[data-v-b25a9929]:before{content:"\e688"}.uniui-star-filled[data-v-b25a9929]:before{content:"\e68f"}.uniui-calendar[data-v-b25a9929]:before{content:"\e6a0"}.uniui-fire[data-v-b25a9929]:before{content:"\e6a1"}.uniui-medal[data-v-b25a9929]:before{content:"\e6a2"}.uniui-font[data-v-b25a9929]:before{content:"\e6a3"}.uniui-gift[data-v-b25a9929]:before{content:"\e6a4"}.uniui-link[data-v-b25a9929]:before{content:"\e6a5"}.uniui-notification[data-v-b25a9929]:before{content:"\e6a6"}.uniui-staff[data-v-b25a9929]:before{content:"\e6a7"}.uniui-vip[data-v-b25a9929]:before{content:"\e6a8"}.uniui-folder-add[data-v-b25a9929]:before{content:"\e6a9"}.uniui-tune[data-v-b25a9929]:before{content:"\e6aa"}.uniui-auth[data-v-b25a9929]:before{content:"\e6ab"}.uniui-person[data-v-b25a9929]:before{content:"\e699"}.uniui-email-filled[data-v-b25a9929]:before{content:"\e69a"}.uniui-phone-filled[data-v-b25a9929]:before{content:"\e69b"}.uniui-phone[data-v-b25a9929]:before{content:"\e69c"}.uniui-email[data-v-b25a9929]:before{content:"\e69e"}.uniui-personadd[data-v-b25a9929]:before{content:"\e69f"}.uniui-chatboxes-filled[data-v-b25a9929]:before{content:"\e692"}.uniui-contact[data-v-b25a9929]:before{content:"\e693"}.uniui-chatbubble-filled[data-v-b25a9929]:before{content:"\e694"}.uniui-contact-filled[data-v-b25a9929]:before{content:"\e695"}.uniui-chatboxes[data-v-b25a9929]:before{content:"\e696"}.uniui-chatbubble[data-v-b25a9929]:before{content:"\e697"}.uniui-upload-filled[data-v-b25a9929]:before{content:"\e68e"}.uniui-upload[data-v-b25a9929]:before{content:"\e690"}.uniui-weixin[data-v-b25a9929]:before{content:"\e691"}.uniui-compose[data-v-b25a9929]:before{content:"\e67f"}.uniui-qq[data-v-b25a9929]:before{content:"\e680"}.uniui-download-filled[data-v-b25a9929]:before{content:"\e681"}.uniui-pyq[data-v-b25a9929]:before{content:"\e682"}.uniui-sound[data-v-b25a9929]:before{content:"\e684"}.uniui-trash-filled[data-v-b25a9929]:before{content:"\e685"}.uniui-sound-filled[data-v-b25a9929]:before{content:"\e686"}.uniui-trash[data-v-b25a9929]:before{content:"\e687"}.uniui-videocam-filled[data-v-b25a9929]:before{content:"\e689"}.uniui-spinner-cycle[data-v-b25a9929]:before{content:"\e68a"}.uniui-weibo[data-v-b25a9929]:before{content:"\e68b"}.uniui-videocam[data-v-b25a9929]:before{content:"\e68c"}.uniui-download[data-v-b25a9929]:before{content:"\e68d"}.uniui-help[data-v-b25a9929]:before{content:"\e679"}.uniui-navigate-filled[data-v-b25a9929]:before{content:"\e67a"}.uniui-plusempty[data-v-b25a9929]:before{content:"\e67b"}.uniui-smallcircle[data-v-b25a9929]:before{content:"\e67c"}.uniui-minus-filled[data-v-b25a9929]:before{content:"\e67d"}.uniui-micoff[data-v-b25a9929]:before{content:"\e67e"}.uniui-closeempty[data-v-b25a9929]:before{content:"\e66c"}.uniui-clear[data-v-b25a9929]:before{content:"\e66d"}.uniui-navigate[data-v-b25a9929]:before{content:"\e66e"}.uniui-minus[data-v-b25a9929]:before{content:"\e66f"}.uniui-image[data-v-b25a9929]:before{content:"\e670"}.uniui-mic[data-v-b25a9929]:before{content:"\e671"}.uniui-paperplane[data-v-b25a9929]:before{content:"\e672"}.uniui-close[data-v-b25a9929]:before{content:"\e673"}.uniui-help-filled[data-v-b25a9929]:before{content:"\e674"}.uniui-paperplane-filled[data-v-b25a9929]:before{content:"\e675"}.uniui-plus[data-v-b25a9929]:before{content:"\e676"}.uniui-mic-filled[data-v-b25a9929]:before{content:"\e677"}.uniui-image-filled[data-v-b25a9929]:before{content:"\e678"}.uniui-locked-filled[data-v-b25a9929]:before{content:"\e668"}.uniui-info[data-v-b25a9929]:before{content:"\e669"}.uniui-locked[data-v-b25a9929]:before{content:"\e66b"}.uniui-camera-filled[data-v-b25a9929]:before{content:"\e658"}.uniui-chat-filled[data-v-b25a9929]:before{content:"\e659"}.uniui-camera[data-v-b25a9929]:before{content:"\e65a"}.uniui-circle[data-v-b25a9929]:before{content:"\e65b"}.uniui-checkmarkempty[data-v-b25a9929]:before{content:"\e65c"}.uniui-chat[data-v-b25a9929]:before{content:"\e65d"}.uniui-circle-filled[data-v-b25a9929]:before{content:"\e65e"}.uniui-flag[data-v-b25a9929]:before{content:"\e65f"}.uniui-flag-filled[data-v-b25a9929]:before{content:"\e660"}.uniui-gear-filled[data-v-b25a9929]:before{content:"\e661"}.uniui-home[data-v-b25a9929]:before{content:"\e662"}.uniui-home-filled[data-v-b25a9929]:before{content:"\e663"}.uniui-gear[data-v-b25a9929]:before{content:"\e664"}.uniui-smallcircle-filled[data-v-b25a9929]:before{content:"\e665"}.uniui-map-filled[data-v-b25a9929]:before{content:"\e666"}.uniui-map[data-v-b25a9929]:before{content:"\e667"}.uniui-refresh-filled[data-v-b25a9929]:before{content:"\e656"}.uniui-refresh[data-v-b25a9929]:before{content:"\e657"}.uniui-cloud-upload[data-v-b25a9929]:before{content:"\e645"}.uniui-cloud-download-filled[data-v-b25a9929]:before{content:"\e646"}.uniui-cloud-download[data-v-b25a9929]:before{content:"\e647"}.uniui-cloud-upload-filled[data-v-b25a9929]:before{content:"\e648"}.uniui-redo[data-v-b25a9929]:before{content:"\e64a"}.uniui-images-filled[data-v-b25a9929]:before{content:"\e64b"}.uniui-undo-filled[data-v-b25a9929]:before{content:"\e64c"}.uniui-more[data-v-b25a9929]:before{content:"\e64d"}.uniui-more-filled[data-v-b25a9929]:before{content:"\e64e"}.uniui-undo[data-v-b25a9929]:before{content:"\e64f"}.uniui-images[data-v-b25a9929]:before{content:"\e650"}.uniui-paperclip[data-v-b25a9929]:before{content:"\e652"}.uniui-settings[data-v-b25a9929]:before{content:"\e653"}.uniui-search[data-v-b25a9929]:before{content:"\e654"}.uniui-redo-filled[data-v-b25a9929]:before{content:"\e655"}.uniui-list[data-v-b25a9929]:before{content:"\e644"}.uniui-mail-open-filled[data-v-b25a9929]:before{content:"\e63a"}.uniui-hand-down-filled[data-v-b25a9929]:before{content:"\e63c"}.uniui-hand-down[data-v-b25a9929]:before{content:"\e63d"}.uniui-hand-up-filled[data-v-b25a9929]:before{content:"\e63e"}.uniui-hand-up[data-v-b25a9929]:before{content:"\e63f"}.uniui-heart-filled[data-v-b25a9929]:before{content:"\e641"}.uniui-mail-open[data-v-b25a9929]:before{content:"\e643"}.uniui-heart[data-v-b25a9929]:before{content:"\e639"}.uniui-loop[data-v-b25a9929]:before{content:"\e633"}.uniui-pulldown[data-v-b25a9929]:before{content:"\e632"}.uniui-scan[data-v-b25a9929]:before{content:"\e62a"}.uniui-bars[data-v-b25a9929]:before{content:"\e627"}.uniui-checkbox[data-v-b25a9929]:before{content:"\e62b"}.uniui-checkbox-filled[data-v-b25a9929]:before{content:"\e62c"}.uniui-shop[data-v-b25a9929]:before{content:"\e62f"}.uniui-headphones[data-v-b25a9929]:before{content:"\e630"}.uniui-cart[data-v-b25a9929]:before{content:"\e631"}@font-face{font-family:uniicons;src:url(../../assets/uniicons.32e978a5.ttf)}.uni-icons[data-v-b25a9929]{font-family:uniicons;text-decoration:none;text-align:center}.chat-sidebar-container[data-v-7630767e]{display:flex;flex-direction:column;align-items:center;width:100%;height:100%;background:linear-gradient(180deg,#faf9ff,#f3f2f8,#eeeef5);color:#000;box-sizing:border-box}.sidebar-header[data-v-7630767e]{padding:1.25rem .9375rem .9375rem;width:100%;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;flex-direction:column;border-bottom:.03125rem solid rgba(170,170,255,.18)}.user-profile-card[data-v-7630767e]{padding:.5rem .75rem;width:100%;display:flex;align-items:center;background:linear-gradient(135deg,#fff,#faf9ff);box-sizing:border-box;border-radius:.875rem;box-shadow:0 .125rem .625rem rgba(100,100,150,.08);border:.03125rem solid rgba(170,170,255,.12);transition:all .2s ease}.user-profile-card[data-v-7630767e]:active{transform:scale(.98);box-shadow:0 .0625rem .3125rem rgba(100,100,150,.12)}.user-profile-card .left[data-v-7630767e]{flex-shrink:0;display:flex;justify-content:center;align-items:center;margin-right:.5rem}.user-profile-card .left .avatar-preview[data-v-7630767e]{display:flex;justify-content:center;align-items:center;width:3.125rem;height:3.125rem;border-radius:50%;overflow:hidden;border:.09375rem solid rgba(170,170,255,.3);box-shadow:0 .0625rem .25rem rgba(0,0,0,.06)}.user-profile-card .left .avatar-preview uni-image[data-v-7630767e]{width:100%;height:100%;object-fit:cover}.user-profile-card .left .avatar-placeholder[data-v-7630767e]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:50%;width:3.125rem;height:3.125rem;background:linear-gradient(135deg,#f5f3ff,#ede9fe)}.user-profile-card .center[data-v-7630767e]{flex:1;height:0;display:flex;flex-direction:column;align-items:start;justify-content:center}.user-profile-card .center uni-text[data-v-7630767e]:first-child{font-size:.6875rem;color:#999;margin-bottom:.0625rem}.user-profile-card .center uni-text[data-v-7630767e]:last-child{font-size:.9375rem;font-weight:600;color:#1a1a2e}.user-profile-card .right[data-v-7630767e]{flex-shrink:0;margin-left:.3125rem;display:flex;align-items:center;background:rgba(16,185,129,.06);padding:.25rem .5rem;border-radius:.625rem}.user-profile-card .right .status-dot[data-v-7630767e]{width:.375rem;height:.375rem;border-radius:50%;background-color:#10b981;margin-right:.3125rem;box-shadow:0 0 .25rem rgba(16,185,129,.5);animation:statusDotPulse-7630767e 2s ease-in-out infinite}@keyframes statusDotPulse-7630767e{0%,to{box-shadow:0 0 .25rem rgba(16,185,129,.5);transform:scale(1)}50%{box-shadow:0 0 .5rem rgba(16,185,129,.6);transform:scale(1.15)}}.user-profile-card .right .status-text uni-text[data-v-7630767e]{font-size:.6875rem;color:#059669;font-weight:500}.new-chat-btn[data-v-7630767e]{margin-top:.75rem;width:100%;padding:.8125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,#6c63ff,#4a45d1);border-radius:.75rem;box-shadow:0 .1875rem .625rem rgba(108,99,255,.3);transition:all .2s ease}.new-chat-btn[data-v-7630767e]:active{transform:scale(.97);box-shadow:0 .09375rem .3125rem rgba(108,99,255,.2)}.new-chat-btn uni-text[data-v-7630767e]{font-size:.875rem;font-weight:600;color:#fff;letter-spacing:.03125rem}.chat-history[data-v-7630767e]{width:100%;padding:.625rem 0;box-sizing:border-box;flex:1;height:0;overflow-y:auto;overflow-x:hidden}.chat-history[data-v-7630767e]::-webkit-scrollbar{width:.1875rem}.chat-history[data-v-7630767e]::-webkit-scrollbar-thumb{background:rgba(108,99,255,.25);border-radius:.09375rem}.chat-history[data-v-7630767e]::-webkit-scrollbar-track{background:transparent}.history-header[data-v-7630767e]{width:100%;padding:.625rem .9375rem;box-sizing:border-box;border-bottom:.03125rem solid rgba(170,170,255,.15);display:flex;justify-content:space-between;align-items:center}.history-header .history-title-section[data-v-7630767e]{display:flex;flex-direction:column}.history-header .history-title-section uni-text[data-v-7630767e]:first-child{font-size:1rem;font-weight:700;color:#1a1a2e}.history-header .history-title-section uni-text[data-v-7630767e]:last-child{font-size:.6875rem;color:#999;margin-top:.0625rem}.history-header .history-management[data-v-7630767e]{display:flex}.history-header .history-management .history-management-btn[data-v-7630767e]{margin-left:.5rem;width:1.75rem;height:1.75rem;display:flex;justify-content:center;align-items:center;font-size:.8125rem;background-color:rgba(221,221,221,.4);border-radius:.4375rem;transition:all .15s ease}.history-header .history-management .history-management-btn[data-v-7630767e]:active{transform:scale(.9)}.history-header .history-management .icon-jia-style[data-v-7630767e]{background:rgba(16,185,129,.12);color:#059669}.history-header .history-management .icon-duoxuan-style[data-v-7630767e]{color:#666}.history-header .history-management .icon-saochu-style[data-v-7630767e]{color:#ff4d4f}.history-header .history-management .icon-quxiao-style[data-v-7630767e]{color:#6c63ff;box-sizing:border-box}.history-header .history-management .icon-total_selection-style[data-v-7630767e]{color:#666}.history-header .history-management .icon-total_selection-style.active[data-v-7630767e]{color:#6c63ff;background:rgba(108,99,255,.12)}.history-header .history-management .icon-shanchu-style[data-v-7630767e]{color:#ff4d4f}.history-search-wrap[data-v-7630767e]{display:flex;flex-direction:column;width:100%;padding:.5rem .9375rem .1875rem;box-sizing:border-box}.history-search-wrap .history-search-inner[data-v-7630767e]{display:flex;width:100%;padding:.375rem .6875rem;box-sizing:border-box;align-items:center;background-color:rgba(255,255,255,.6);border-radius:.875rem;border:.0625rem solid transparent;transition:all .25s ease}.history-search-wrap .history-search-inner .search-icon[data-v-7630767e]{color:#999!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner .chat-search-icon[data-v-7630767e]{color:#6c63ff!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner uni-input[data-v-7630767e]{margin-left:.375rem;box-sizing:border-box;font-size:.8125rem;color:#333}.history-search-wrap .history-search-inner uni-input[data-v-7630767e]::-webkit-input-placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner uni-input[data-v-7630767e]::placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner.has-value[data-v-7630767e]{background-color:#fff;border-color:#6c63ff;box-shadow:0 0 0 .09375rem rgba(108,99,255,.08)}.chat-history-list[data-v-7630767e]{padding:.3125rem .9375rem}.chat-history-list .chat-history-card[data-v-7630767e]{display:flex;align-items:center;border:.04688rem solid rgba(108,99,255,.25);background:linear-gradient(135deg,#fff,#faf9ff);border-radius:.75rem;padding:.75rem;margin-top:.375rem;box-sizing:border-box;transition:all .2s ease}.chat-history-list .chat-history-card[data-v-7630767e]:active{transform:scale(.98)}.chat-history-list .is-select-chat[data-v-7630767e]{border-color:#6c63ff;box-shadow:0 .125rem .5rem rgba(108,99,255,.15);background:linear-gradient(135deg,rgba(108,99,255,.06),rgba(108,99,255,.02))}.chat-history-list .history-chat-checkbox[data-v-7630767e]{width:1.125rem;height:1.125rem;border-radius:.3125rem;display:flex;justify-content:center;align-items:center;border:.0625rem solid rgba(108,99,255,.5);margin-right:.375rem;flex-shrink:0}.chat-history-list .history-chat-avatar[data-v-7630767e]{width:2rem;height:2rem;border-radius:.5625rem;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,rgba(108,99,255,.3),rgba(108,99,255,.15));margin-left:0;margin-right:.5rem;box-sizing:border-box;flex-shrink:0}.chat-history-list .friend-avatar[data-v-7630767e]{display:flex;justify-content:center;align-items:center;border-radius:.5625rem;width:100%;height:100%;overflow:hidden}.chat-page[data-v-59ccb015]{position:relative;background:linear-gradient(180deg,#f5f4ff,#f8f7fc,#faf9fe)}.mask[data-v-59ccb015]{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.45);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:998;animation:fadeIn-59ccb015 .3s ease}@keyframes fadeIn-59ccb015{0%{opacity:0}to{opacity:1}}.chat-sidebar[data-v-59ccb015]{position:fixed;top:0;left:0;width:calc(100% - 3.125rem);max-width:21.25rem;height:100%;transform:translate(-100%);transition:transform .4s cubic-bezier(.4,0,.2,1);z-index:999;box-shadow:.25rem 0 .9375rem rgba(0,0,0,.06)}.chat-sidebar.sidebar-show[data-v-59ccb015]{transform:translate(0)}.ncd-overlay[data-v-59ccb015]{position:fixed;width:100%;height:100%;left:0;top:0;display:flex;align-items:center;justify-content:center;background-color:rgba(30,30,50,.35);z-index:9999;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:fadeIn-59ccb015 .25s ease}.ncd-card[data-v-59ccb015]{width:90%;height:auto;background-color:#fff;border-radius:1.25rem;padding:1.5625rem 1.25rem;box-sizing:border-box;box-shadow:0 .625rem 1.875rem rgba(100,100,200,.12);animation:slideUp-59ccb015 .35s ease}@keyframes slideUp-59ccb015{0%{opacity:0;transform:translateY(1.25rem) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.ncd-header[data-v-59ccb015]{display:flex;justify-content:center;align-items:center;width:100%}.ncd-title-eng[data-v-59ccb015]{display:flex;flex-shrink:0;background:linear-gradient(135deg,#6c63ff,#4a45d1);padding:.1875rem .4375rem;border-radius:.375rem;justify-content:center;align-items:center}.ncd-title-eng uni-text[data-v-59ccb015]{color:#fff;font-weight:700;font-size:.875rem}.ncd-title-zh[data-v-59ccb015]{margin-left:.3125rem;display:flex;flex:1;height:0;font-size:1.125rem;font-weight:700;color:#1a1a2e;align-items:center}.ncd-header uni-icons[data-v-59ccb015]{display:flex;flex-shrink:0;align-items:center}.ncd-options[data-v-59ccb015]{display:flex;flex-direction:column;width:100%;justify-content:center;align-items:center;margin-top:.625rem;box-sizing:border-box}.ncd-option[data-v-59ccb015]{width:100%;background:#f8fafc;padding:1.25rem .9375rem;display:flex;border-radius:.875rem;margin-top:.625rem;box-sizing:border-box;justify-content:center;align-items:center;transition:all .2s ease;border:.0625rem solid transparent}.ncd-option[data-v-59ccb015]:active{transform:scale(.98)}.ncd-normal[data-v-59ccb015]{border:.0625rem solid #e8edf3}.ncd-normal[data-v-59ccb015]:active{border-color:#c4c8d0;background:#f0f3f7}.ncd-opt-icon[data-v-59ccb015]{width:2.5rem;height:2.5rem;border-radius:.75rem;padding:.3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;align-items:center}.ncd-normal .ncd-opt-icon[data-v-59ccb015]{background:linear-gradient(135deg,#e2e8f0,#d9dfe8)}.ncd-opt-title[data-v-59ccb015]{display:flex;flex-direction:column;margin:0 .5rem;box-sizing:border-box;justify-content:center;flex:1;height:0}.ncd-opt-title-1[data-v-59ccb015]{font-size:.9375rem;font-weight:600;color:#1a1a2e}.ncd-opt-title-2[data-v-59ccb015]{font-size:.75rem;color:#888;margin-top:.125rem}.arrow-right-style[data-v-59ccb015]{display:flex;flex-shrink:0;font-weight:700!important;font-size:.875rem!important;color:#999!important}.ncd-intelligence[data-v-59ccb015]{background:linear-gradient(135deg,#f8f5ff,#efe8ff);border:.0625rem solid #c4b5fd}.ncd-intelligence[data-v-59ccb015]:active{border-color:#a78bfa;background:linear-gradient(135deg,#f3efff,#e8dcff)}.ncd-intelligence .ncd-opt-icon[data-v-59ccb015]{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.close-option-card[data-v-59ccb015]{width:100%;display:flex;justify-content:flex-end}.close-option-card .iconfont[data-v-59ccb015]{color:#ff4d4f!important}.chat-option-list[data-v-59ccb015]{display:flex;width:100%;flex-direction:column}.chat-option[data-v-59ccb015]{display:flex;justify-content:flex-start;align-items:center;margin:.3125rem 0;padding:.5rem .625rem;border-radius:.625rem;box-sizing:border-box;transition:all .15s ease}.chat-option[data-v-59ccb015]:active{background:rgba(170,170,255,.08)}.chat-option .iconfont[data-v-59ccb015]{font-size:30px}.option-name[data-v-59ccb015]{font-size:17px;font-weight:500;margin-left:12px;box-sizing:border-box;color:#333}.chat-wrapper[data-v-59ccb015]{position:relative;width:100%;height:100%;display:flex;flex-direction:column}.chat-hearder[data-v-59ccb015]{width:100%;height:auto;padding:.5rem .3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:flex-start;align-items:center;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.8));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:.03125rem solid rgba(170,170,255,.15)}.chat-btn-group[data-v-59ccb015]{width:100%;height:auto;display:flex;justify-content:flex-start;align-items:center}.head-btn[data-v-59ccb015]{padding:.375rem .4375rem;border:.04688rem solid rgba(170,170,255,.3);border-radius:.5625rem;margin:0 .3125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,.7);transition:all .2s ease}.head-btn[data-v-59ccb015]:active{background:rgba(170,170,255,.1);transform:scale(.95)}.chat-btn-group .head-btn:nth-child(1) .iconfont[data-v-59ccb015]{color:#a78bfa}.chat-btn-group .head-btn:nth-child(2) .iconfont[data-v-59ccb015]{color:#6495ed}.head-btn .iconfont[data-v-59ccb015]{font-size:1.5rem}.log-out .iconfont[data-v-59ccb015]{color:#ff4d4f}.wyxd-banner[data-v-59ccb015]{display:flex;align-items:center;padding:.4375rem .75rem;margin:.1875rem .625rem;background:linear-gradient(135deg,#e8f4fd,#f0e6ff);border:.04688rem solid rgba(120,120,220,.25);border-radius:.5rem;box-shadow:0 .0625rem .25rem rgba(100,100,200,.08)}.wyxd-banner[data-v-59ccb015]:active{background:linear-gradient(135deg,#d8eafb,#e6d8ff);transform:scale(.98)}.wyxd-banner-icon[data-v-59ccb015]{font-size:1rem;color:#6c6ce0;margin-right:.375rem}.wyxd-banner-text[data-v-59ccb015]{flex:1;font-size:.8125rem;font-weight:600;color:#4a4ab8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wyxd-banner-arrow[data-v-59ccb015]{font-size:.75rem;color:#99c}.wyxd-banner-close[data-v-59ccb015]{width:1.125rem;height:1.125rem;line-height:1.125rem;text-align:center;font-size:.875rem;color:#99c;border-radius:50%;background:rgba(100,100,200,.08);margin-left:.25rem;flex-shrink:0}.wyxd-banner-close[data-v-59ccb015]:active{background:rgba(100,100,200,.18);color:#6c6ce0}.main-chat[data-v-59ccb015]{display:flex;flex:1;height:0;width:100%;flex-direction:column}.load-more-tip[data-v-59ccb015]{text-align:center;padding:.625rem 0;font-size:.75rem;color:#999}.chat-messages[data-v-59ccb015]{display:flex;flex:1;height:0;width:100%;padding:.625rem .75rem;box-sizing:border-box;flex-direction:column;overflow:auto}.chat-messages[data-v-59ccb015]::-webkit-scrollbar{width:.1875rem}.chat-messages[data-v-59ccb015]::-webkit-scrollbar-thumb{background:rgba(170,170,255,.3);border-radius:.09375rem}.chat-messages[data-v-59ccb015]::-webkit-scrollbar-track{background:transparent}.chat-message[data-v-59ccb015]{display:flex;align-items:flex-start;margin:.4375rem 0;box-sizing:border-box;animation:msgFadeIn-59ccb015 .3s ease}@keyframes msgFadeIn-59ccb015{0%{opacity:0;transform:translateY(.3125rem)}to{opacity:1;transform:translateY(0)}}.message-user[data-v-59ccb015]{flex-direction:row-reverse}.chat-avatar[data-v-59ccb015]{display:flex;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;box-sizing:border-box;border-radius:.5rem;margin-right:.375rem;flex-shrink:0}.friend-avatar[data-v-59ccb015]{display:flex;justify-content:center;align-items:center;border-radius:.5rem;width:100%;height:100%;overflow:hidden}.chat-avatar-user[data-v-59ccb015]{margin-right:0;margin-left:.375rem}.chat-content[data-v-59ccb015]{width:auto;max-width:calc(100% - 3.75rem);height:auto;padding:.625rem .75rem;box-sizing:border-box;border-radius:.75rem;overflow-x:auto;font-size:1rem;line-height:1.65;position:relative;box-shadow:0 .0625rem .25rem rgba(0,0,0,.04);background:#fff;border:.03125rem solid #eeeef5}.chat-content-user[data-v-59ccb015]{background:linear-gradient(135deg,#c4b5fd,#b8a5f0);color:#fff;border:none;box-shadow:0 .125rem .375rem rgba(170,170,255,.3);border-bottom-right-radius:.25rem}.chat-content-assistant[data-v-59ccb015]{max-width:100%}.chat-content[data-v-59ccb015]:not(.chat-content-user){border-bottom-left-radius:.25rem}.message-image[data-v-59ccb015]{max-width:9.375rem;border-radius:.375rem;margin:.25rem 0}.message-file-list[data-v-59ccb015]{margin:.3125rem 0}.file-item[data-v-59ccb015]{margin:.1875rem 0}.message-file[data-v-59ccb015]{display:flex;align-items:center;padding:.4375rem .5625rem;background:rgba(255,255,255,.85);border-radius:.375rem;max-width:10.9375rem;border:.03125rem solid #eeeef5}.chat-content-user .message-file[data-v-59ccb015]{background:rgba(255,255,255,.25);border-color:rgba(255,255,255,.3)}.file-icon[data-v-59ccb015]{font-size:1rem;margin-right:.375rem}.file-name[data-v-59ccb015]{flex:1;font-size:.8125rem;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-content-user .file-name[data-v-59ccb015]{color:#fff}.file-size[data-v-59ccb015]{font-size:.6875rem;color:#999;margin-left:.25rem}.chat-content-user .file-size[data-v-59ccb015]{color:rgba(255,255,255,.7)}.chat-interactive-container[data-v-59ccb015]{display:flex;flex-shrink:0;width:100%;padding:.5rem .75rem .75rem;box-sizing:border-box;flex-direction:column;background:linear-gradient(180deg,rgba(255,255,255,.7),rgba(255,255,255,.95));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:.03125rem solid rgba(170,170,255,.12)}.chat-interactive-group[data-v-59ccb015]{display:flex;width:100%;padding:.375rem 0;box-sizing:border-box;justify-content:flex-start;align-items:center}.chat-interactive-btn[data-v-59ccb015]{display:flex;align-items:center;justify-content:center;border:.04688rem solid #d4d4e0;border-radius:.5rem;padding:.375rem .625rem;margin-right:.5rem;box-sizing:border-box;font-size:.75rem;color:#666;background:#fff;transition:all .2s ease}.chat-interactive-btn[data-v-59ccb015]:active{border-color:#aaf;background:rgba(170,170,255,.08);transform:scale(.96)}.chat-interactive-btn.disabled[data-v-59ccb015]{opacity:.45;pointer-events:none;border-color:#e0dfe8;color:#aaa}.chat-input-container[data-v-59ccb015]{display:flex;width:100%;padding:.25rem .25rem .25rem .75rem;box-sizing:border-box;border:.0625rem solid #e0dff5;border-radius:.9375rem;align-items:flex-end;background:#fff;transition:all .25s ease;box-shadow:0 .0625rem .375rem rgba(100,100,150,.06)}.chat-input-container[data-v-59ccb015]:focus-within{border-color:#aaf;box-shadow:0 0 0 .125rem rgba(170,170,255,.12),0 .125rem .5rem rgba(100,100,150,.08)}.message-input[data-v-59ccb015]{flex:1;max-height:4.6875rem;min-height:1.875rem;overflow-y:auto;margin:.125rem .3125rem;box-sizing:border-box;font-size:.875rem;color:#333}.message-input[data-v-59ccb015]::-webkit-input-placeholder{color:#c0c0d0}.message-input[data-v-59ccb015]::placeholder{color:#c0c0d0}.chat-input-container.input-disabled[data-v-59ccb015]{border-color:#eae9f2;background:#f8f7fc}.message-input[disabled][data-v-59ccb015]{opacity:.5;color:#bbb}.input-btn-group.disabled[data-v-59ccb015]{opacity:.4;pointer-events:none;background:#c0c0d0;box-shadow:none}.stop-message-btn[data-v-59ccb015]{background:linear-gradient(135deg,#ff4d4f,#ff6b6b);box-shadow:0 .125rem .375rem rgba(255,77,79,.35);animation:pulseStop-59ccb015 1.8s ease-in-out infinite}.stop-message-btn[data-v-59ccb015]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(255,77,79,.25)}.input-btn-group[data-v-59ccb015]{flex-shrink:0;display:flex;justify-content:center;align-items:center;padding:.4375rem;box-sizing:border-box;background:linear-gradient(135deg,#6c63ff,#8b7cfb);border-radius:.6875rem;width:2.25rem;height:2.25rem;box-shadow:0 .125rem .375rem rgba(108,99,255,.35);transition:all .2s ease}.input-btn-group[data-v-59ccb015]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(108,99,255,.25)}.input-btn-group .iconfont[data-v-59ccb015]{color:#fff;font-size:1.125rem}.ai-card[data-v-59ccb015]{width:auto;border:.0625rem solid rgba(64,158,255,.3);box-shadow:0 .25rem .9375rem rgba(170,170,255,.2);border-radius:1rem!important}.thinking-content[data-v-59ccb015]{display:flex;flex-direction:column;align-items:center;width:100%}.loading-dots[data-v-59ccb015]{display:flex;width:100%;align-items:center;justify-content:center}.dot[data-v-59ccb015]{width:.4375rem;height:.4375rem;margin:.1875rem;border-radius:50%;background:linear-gradient(135deg,#409eff,#6db2ff);animation:dotBlink-59ccb015 1.2s infinite ease-in-out}@keyframes dotBlink-59ccb015{0%,to{opacity:.3;transform:scale(.7)}50%{opacity:1;transform:scale(1.2)}}.dot[data-v-59ccb015]:nth-child(2){animation-delay:.25s}.dot[data-v-59ccb015]:nth-child(3){animation-delay:.5s}.thinking-text[data-v-59ccb015]{margin:.625rem 0;font-size:20px;font-weight:600;color:#409eff}.stop-thinking-btn[data-v-59ccb015]{display:flex;align-items:center;justify-content:center;width:100%;padding:.6875rem 0;margin-top:.625rem;border-radius:.75rem;font-size:.875rem;font-weight:600;color:#ff4d4f;background:linear-gradient(135deg,rgba(255,77,79,.06),rgba(255,77,79,.02));border:.0625rem solid rgba(255,77,79,.35);transition:all .2s ease;animation:pulseStop-59ccb015 2s ease-in-out infinite}.stop-thinking-btn[data-v-59ccb015]:active{background:rgba(255,77,79,.12);border-color:#ff4d4f;transform:scale(.97)}@keyframes pulseStop-59ccb015{0%,to{border-color:rgba(255,77,79,.35)}50%{border-color:rgba(255,77,79,.65)}}.image-list[data-v-59ccb015]{width:100%;padding:.25rem 0 .0625rem;animation:fadeIn-59ccb015 .25s ease}.image-tags[data-v-59ccb015]{display:flex;flex-wrap:wrap;gap:.3125rem}.image-tag[data-v-59ccb015]{display:flex;align-items:center;padding:.1875rem .25rem .1875rem .5rem;background:linear-gradient(135deg,rgba(108,99,255,.07),rgba(108,99,255,.04));border:.03125rem solid rgba(108,99,255,.18);border-radius:.625rem;max-width:6.875rem;transition:all .2s ease;box-shadow:0 .03125rem .125rem rgba(108,99,255,.04)}.image-tag[data-v-59ccb015]:active{transform:scale(.96);border-color:rgba(108,99,255,.4);background:rgba(108,99,255,.1)}.tag-name[data-v-59ccb015]{font-size:.6875rem;color:#5a52d5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;font-weight:500}.tag-close[data-v-59ccb015]{flex-shrink:0;width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;font-size:.875rem;color:#bbb;margin-left:.1875rem;border-radius:50%;line-height:1;transition:all .15s ease}.tag-close[data-v-59ccb015]:active{color:#fff;background:#ff4d4f;transform:scale(1.1)}.message-detail-card[data-v-59ccb015]{width:90%;max-height:80vh;display:flex;flex-direction:column;border-radius:1.25rem;padding:1.25rem 1.125rem}.message-detail-content[data-v-59ccb015]{flex:1;min-height:6.25rem;max-height:60vh;overflow-y:auto;padding:.5rem 0;font-size:.875rem;line-height:1.7;color:#333;white-space:pre-wrap;word-break:break-all}.chat-content{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,HarmonyOS Sans,MiSans,Source Han Sans CN,Microsoft YaHei,Noto Sans CJK SC,sans-serif!important;font-size:16px!important;font-weight:600!important;line-height:1.6;margin:.25rem 0}.chat-content h1{font-size:1.3125rem;line-height:1.4;margin:.5rem 0 .3125rem}.chat-content h2{font-size:1.1875rem;line-height:1.4;margin:.4375rem 0 .25rem}.chat-content h3{font-size:1.125rem;line-height:1.4;margin:.375rem 0 .25rem}.chat-content h4,.chat-content h5,.chat-content h6{font-size:1.0625rem;line-height:1.5;margin:.3125rem 0 .1875rem}.chat-content p,.chat-content uni-text,.chat-content span{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,HarmonyOS Sans,MiSans,Source Han Sans CN,Microsoft YaHei,Noto Sans CJK SC,sans-serif!important;font-size:1.1875rem!important;font-weight:400!important;line-height:1.6;margin:.25rem 0}.chat-content strong,.chat-content b{font-weight:600!important}.chat-content em,.chat-content i{font-style:italic!important}.chat-content .chat-inline-link{color:#3b86ff!important;text-decoration:underline;word-break:break-all}.bubble-loading-dots{display:flex;align-items:center;justify-content:flex-start;padding:.3125rem 0}.bubble-dot{width:.375rem;height:.375rem;border-radius:50%;background:#a0a0b8;margin-right:.3125rem;animation:bubbleDotBlink 1.2s infinite ease-in-out}.bubble-dot:nth-child(2){animation-delay:.3s}.bubble-dot:nth-child(3){animation-delay:.6s}@keyframes bubbleDotBlink{0%,to{opacity:.25;transform:scale(.7)}50%{opacity:1;transform:scale(1.1)}}.messages-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,.9);z-index:100}.messages-loading-card{display:flex;flex-direction:column;align-items:center;padding:1.25rem 1.875rem;background:#fff;border-radius:.75rem;box-shadow:0 .25rem 1rem rgba(0,0,0,.12)}.messages-loading-text{margin-top:.625rem;font-size:.875rem;color:#999}.detail-links-section{margin-top:.75rem;padding-top:.75rem;border-top:.03125rem solid #eee}.detail-links-title{font-size:.9375rem;font-weight:600;color:#666;margin-bottom:.5rem}.detail-link-item{padding:.5rem .625rem;background:#f5f7fa;border-radius:.375rem;margin-bottom:.375rem}.link-text{font-size:.875rem;color:#007aff;word-break:break-all}.detail-empty{display:flex;align-items:center;justify-content:center;padding:1.25rem 0;font-size:.875rem;color:#999}.download-toast-overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;z-index:10001;pointer-events:none}.download-toast-card{display:flex;align-items:center;justify-content:center;padding:.75rem 1.25rem;border-radius:.75rem;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 .375rem 1.25rem rgba(0,0,0,.15);animation:toastFadeIn .25s ease;pointer-events:auto}@keyframes toastFadeIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.download-toast-loading{background:rgba(40,40,60,.92)}.download-toast-success{background:rgba(40,60,40,.92)}.download-toast-error{background:rgba(60,30,30,.92)}.download-toast-icon{font-size:1.125rem;color:#fff;margin-right:.5rem;display:flex;align-items:center}.download-toast-card.download-toast-loading .download-toast-icon{gap:.25rem}.toast-dot{width:.375rem;height:.375rem;border-radius:50%;background:#fff;animation:toastDotBlink 1.2s infinite ease-in-out}.toast-dot:nth-child(2){animation-delay:.3s}.toast-dot:nth-child(3){animation-delay:.6s}@keyframes toastDotBlink{0%,to{opacity:.3;transform:scale(.75)}50%{opacity:1;transform:scale(1.2)}}.download-toast-text{font-size:.875rem;color:#fff;font-weight:500} diff --git a/unpackage/dist/build/app-plus/pages/WYXD/WYXD.css b/unpackage/dist/build/app-plus/pages/WYXD/WYXD.css new file mode 100644 index 0000000..973be7c --- /dev/null +++ b/unpackage/dist/build/app-plus/pages/WYXD/WYXD.css @@ -0,0 +1 @@ +.create-folder-name[data-v-adca8384]{display:flex;width:100%;padding:.3125rem .625rem;box-sizing:border-box;align-items:center;background:rgba(108,99,255,.06);border-radius:.4375rem;border:.0625rem solid transparent;transition:all .25s ease}.create-folder-name uni-input[data-v-adca8384]{box-sizing:border-box;width:100%;font-size:.875rem;color:#333}.create-folder-name.has-value[data-v-adca8384]{background-color:#fff;border-color:#6c63ff;box-shadow:0 0 0 .125rem rgba(108,99,255,.06)}.new-folder-name[data-v-adca8384]{font-size:.875rem;color:#555;margin-bottom:.375rem}.nf-path-label[data-v-adca8384]{font-size:.75rem;color:#999;margin-top:.75rem;margin-bottom:.25rem}.nf-path-display[data-v-adca8384]{font-size:.8125rem;color:#333;padding:.375rem .625rem;background:#f5f5f8;border-radius:.375rem;word-break:break-all}.nf-path-preview[data-v-adca8384]{font-size:.8125rem;color:#6c63ff;padding:.375rem .625rem;background:rgba(108,99,255,.05);border:.0625rem dashed rgba(108,99,255,.25);border-radius:.375rem;word-break:break-all}.option-wrapper[data-v-adca8384]{display:flex;justify-content:space-between;gap:.625rem;margin-top:1.25rem}.opt-btn[data-v-adca8384]{flex:1;display:flex;justify-content:center;align-items:center;padding:.75rem 0;border-radius:.5rem;font-size:.9375rem;font-weight:500;transition:all .2s ease}.opt-btn[data-v-adca8384]:active{transform:scale(.97)}.opt-cancel[data-v-adca8384]{background:#f0f1f5;color:#666}.opt-confirm[data-v-adca8384]{background:linear-gradient(135deg,#6c63ff,#4a45d1);color:#fff;box-shadow:0 .125rem .375rem rgba(108,99,255,.25)}.workspace-container[data-v-adca8384]{display:flex;flex-direction:column;background:linear-gradient(180deg,#f5f4f9,#faf9fe)}.workspace-text[data-v-adca8384]{color:#6c63ff;font-weight:700}.workspace-header[data-v-adca8384]{width:100%;display:flex;flex-shrink:0;flex-direction:column;align-items:center;padding:.375rem 0;box-sizing:border-box;position:relative;z-index:100;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:.03125rem solid rgba(170,170,255,.1)}.custom-navbar[data-v-adca8384]{width:100%;display:flex;align-items:center;justify-content:space-between;padding:.5rem .3125rem;box-sizing:border-box;position:relative}.navbar-left[data-v-adca8384]{display:flex;justify-content:center;align-items:center}.navbar-before-title[data-v-adca8384]{display:flex;justify-content:center;align-items:center;text-align:center;font-size:.8125rem;color:#6c63ff;font-weight:500}.navbar-title[data-v-adca8384]{display:flex;flex:1;justify-content:center;align-items:center;position:absolute;left:50%;transform:translate(-50%);font-size:1rem;font-weight:700;color:#1a1a2e}.navbar-right[data-v-adca8384]{display:flex;justify-content:center;align-items:center;margin-right:.625rem;box-sizing:border-box}.navbar-right .menu-open[data-v-adca8384],.custom-navbar-icon[data-v-adca8384]{color:#6c63ff!important;font-size:1.25rem!important}.search-file-warpper[data-v-adca8384]{display:flex;width:90%;align-items:center}.search-file[data-v-adca8384]{display:flex;flex:1;align-items:center;background:rgba(255,255,255,.9);padding:.4375rem .75rem;box-sizing:border-box;border-radius:.875rem;border:.0625rem solid #e8e7f5;transition:all .25s ease}.search-file[data-v-adca8384]:focus-within{border-color:#6c63ff;box-shadow:0 0 0 .125rem rgba(108,99,255,.06)}.icon-sousuo[data-v-adca8384]{font-weight:700;color:#999}.search-file-input[data-v-adca8384]{margin-left:.5rem;font-size:.8125rem;color:#333}.cancel-search[data-v-adca8384]{display:flex;flex-shrink:0;padding:0 0 0 .625rem;box-sizing:border-box;color:#6c63ff;font-size:.875rem;font-weight:500}.workspace-content[data-v-adca8384]{width:100%;display:block;flex:1;overflow:auto;box-sizing:border-box;position:relative}.menu-card[data-v-adca8384]{position:absolute;top:100%;right:.625rem;width:8.75rem;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#fff;border-radius:.75rem;z-index:999;box-shadow:0 .25rem 1rem rgba(0,0,0,.08);padding:.25rem 0;overflow:hidden}.menu-card-item[data-v-adca8384]{width:100%;padding:.6875rem .875rem;box-sizing:border-box;font-size:.875rem;color:#333;transition:all .15s ease}.menu-card-item[data-v-adca8384]:active{background:rgba(108,99,255,.06)}.folder-null[data-v-adca8384]{width:100%;display:flex;justify-content:center;align-items:center;flex-direction:column;position:absolute;left:50%;top:30%;transform:translate(-50%);font-size:.9375rem;color:#bbb}.folder-null .iconfont[data-v-adca8384]{font-size:5.625rem;color:#ddd}.folder-grid[data-v-adca8384]{width:100%;display:grid;grid-template-columns:repeat(3,1fr);padding:.75rem;box-sizing:border-box;gap:.625rem;align-items:start}.folder-item[data-v-adca8384]{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;min-width:0;background:rgba(255,255,255,.7);border-radius:.75rem;padding:.75rem .25rem .5rem;border:.0625rem solid transparent;transition:all .2s ease}.folder-item.select-folder[data-v-adca8384]{border-color:rgba(108,99,255,.3);background:rgba(108,99,255,.04)}.folder-item[data-v-adca8384]:active{transform:scale(.96);background:rgba(255,255,255,.95)}.folder-item .folder-name[data-v-adca8384]{max-width:5rem;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:1.375rem;min-width:0;font-size:.8125rem;color:#444}.folder-item-style[data-v-adca8384]{font-size:3.4375rem!important;color:#6c63ff!important}.folder-checkbox[data-v-adca8384]{width:1.375rem;height:1.375rem;border:.09375rem solid #fff;border-radius:50%;box-shadow:0 .0625rem .25rem rgba(0,0,0,.12);background:rgba(255,255,255,.9);box-sizing:border-box;position:absolute;left:50%;top:25%;transform:translate(-50%);display:flex;justify-content:center;align-items:center;transition:all .2s ease}.folder-checkbox.select-folder[data-v-adca8384]{background:linear-gradient(135deg,#6c63ff,#4a45d1);border-color:#6c63ff}.workspace-footer[data-v-adca8384]{width:100%;display:flex;flex-shrink:0;justify-content:space-between;padding:.75rem .9375rem;box-sizing:border-box;color:#888;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:.03125rem solid rgba(170,170,255,.1);font-size:.8125rem;transition:all .2s ease}.workspace-footer.folder-actions[data-v-adca8384]{color:#6c63ff;font-weight:500}.workspace-footer .iconfont[data-v-adca8384]{font-size:1.25rem!important}.wyxd-container[data-v-adca8384]{display:flex;flex-direction:column;background:#f5f5f5;overflow:hidden}.wyxd-header[data-v-adca8384]{flex-shrink:0;background:#fff}.wyxd-content[data-v-adca8384]{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}.wyxd-state[data-v-adca8384]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.25rem}.wyxd-state-icon[data-v-adca8384]{font-size:2.5rem;color:#ccc;margin-bottom:.625rem}.wyxd-state-title[data-v-adca8384]{font-size:.875rem;font-weight:600;color:#666;margin-bottom:.25rem}.wyxd-state-desc[data-v-adca8384]{font-size:.75rem;color:#999}.wyxd-slide-area[data-v-adca8384]{flex:1;min-height:0}.wyxd-swiper[data-v-adca8384]{width:100%;height:100%}.wyxd-slide-scroll[data-v-adca8384]{height:100%;background:#fff;border-radius:.375rem;box-shadow:0 .0625rem .375rem rgba(0,0,0,.04)}.wyxd-slide-card[data-v-adca8384]{min-height:100%;box-sizing:border-box;display:flex;justify-content:center;align-items:center;flex-direction:column}.wyxd-pager[data-v-adca8384]{flex-shrink:0;background:#fff;border-top:.03125rem solid #eee;padding:.5rem 0;padding-bottom:calc(.5rem + env(safe-area-inset-bottom))}.wyxd-pager-inner[data-v-adca8384]{display:flex;align-items:center;justify-content:center}.wyxd-nav-btn[data-v-adca8384]{width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border-radius:1rem;background:#f5f5f5;margin:0 1rem}.wyxd-nav-btn[data-v-adca8384]:active{background:#e0e0e0}.wyxd-nav-btn.disabled[data-v-adca8384]{opacity:.3;pointer-events:none}.wyxd-page-indicator[data-v-adca8384]{font-size:.8125rem;color:#666;display:flex;align-items:center}.wyxd-current[data-v-adca8384]{color:#3b82f6;font-weight:700}.wyxd-divider[data-v-adca8384]{margin:0 .25rem;color:#ccc}.wyxd-total[data-v-adca8384]{color:#999} diff --git a/unpackage/dist/build/app-plus/pages/WorkSpace/WorkSpace.css b/unpackage/dist/build/app-plus/pages/WorkSpace/WorkSpace.css index d59e448..90e6a9a 100644 --- a/unpackage/dist/build/app-plus/pages/WorkSpace/WorkSpace.css +++ b/unpackage/dist/build/app-plus/pages/WorkSpace/WorkSpace.css @@ -1 +1 @@ -.uniui-cart-filled[data-v-b25a9929]:before{content:"\e6d0"}.uniui-gift-filled[data-v-b25a9929]:before{content:"\e6c4"}.uniui-color[data-v-b25a9929]:before{content:"\e6cf"}.uniui-wallet[data-v-b25a9929]:before{content:"\e6b1"}.uniui-settings-filled[data-v-b25a9929]:before{content:"\e6ce"}.uniui-auth-filled[data-v-b25a9929]:before{content:"\e6cc"}.uniui-shop-filled[data-v-b25a9929]:before{content:"\e6cd"}.uniui-staff-filled[data-v-b25a9929]:before{content:"\e6cb"}.uniui-vip-filled[data-v-b25a9929]:before{content:"\e6c6"}.uniui-plus-filled[data-v-b25a9929]:before{content:"\e6c7"}.uniui-folder-add-filled[data-v-b25a9929]:before{content:"\e6c8"}.uniui-color-filled[data-v-b25a9929]:before{content:"\e6c9"}.uniui-tune-filled[data-v-b25a9929]:before{content:"\e6ca"}.uniui-calendar-filled[data-v-b25a9929]:before{content:"\e6c0"}.uniui-notification-filled[data-v-b25a9929]:before{content:"\e6c1"}.uniui-wallet-filled[data-v-b25a9929]:before{content:"\e6c2"}.uniui-medal-filled[data-v-b25a9929]:before{content:"\e6c3"}.uniui-fire-filled[data-v-b25a9929]:before{content:"\e6c5"}.uniui-refreshempty[data-v-b25a9929]:before{content:"\e6bf"}.uniui-location-filled[data-v-b25a9929]:before{content:"\e6af"}.uniui-person-filled[data-v-b25a9929]:before{content:"\e69d"}.uniui-personadd-filled[data-v-b25a9929]:before{content:"\e698"}.uniui-arrowthinleft[data-v-b25a9929]:before{content:"\e6d2"}.uniui-arrowthinup[data-v-b25a9929]:before{content:"\e6d3"}.uniui-arrowthindown[data-v-b25a9929]:before{content:"\e6d4"}.uniui-back[data-v-b25a9929]:before{content:"\e6b9"}.uniui-forward[data-v-b25a9929]:before{content:"\e6ba"}.uniui-arrow-right[data-v-b25a9929]:before{content:"\e6bb"}.uniui-arrow-left[data-v-b25a9929]:before{content:"\e6bc"}.uniui-arrow-up[data-v-b25a9929]:before{content:"\e6bd"}.uniui-arrow-down[data-v-b25a9929]:before{content:"\e6be"}.uniui-arrowthinright[data-v-b25a9929]:before{content:"\e6d1"}.uniui-down[data-v-b25a9929]:before{content:"\e6b8"}.uniui-bottom[data-v-b25a9929]:before{content:"\e6b8"}.uniui-arrowright[data-v-b25a9929]:before{content:"\e6d5"}.uniui-right[data-v-b25a9929]:before{content:"\e6b5"}.uniui-up[data-v-b25a9929]:before{content:"\e6b6"}.uniui-top[data-v-b25a9929]:before{content:"\e6b6"}.uniui-left[data-v-b25a9929]:before{content:"\e6b7"}.uniui-arrowup[data-v-b25a9929]:before{content:"\e6d6"}.uniui-eye[data-v-b25a9929]:before{content:"\e651"}.uniui-eye-filled[data-v-b25a9929]:before{content:"\e66a"}.uniui-eye-slash[data-v-b25a9929]:before{content:"\e6b3"}.uniui-eye-slash-filled[data-v-b25a9929]:before{content:"\e6b4"}.uniui-info-filled[data-v-b25a9929]:before{content:"\e649"}.uniui-reload[data-v-b25a9929]:before{content:"\e6b2"}.uniui-micoff-filled[data-v-b25a9929]:before{content:"\e6b0"}.uniui-map-pin-ellipse[data-v-b25a9929]:before{content:"\e6ac"}.uniui-map-pin[data-v-b25a9929]:before{content:"\e6ad"}.uniui-location[data-v-b25a9929]:before{content:"\e6ae"}.uniui-starhalf[data-v-b25a9929]:before{content:"\e683"}.uniui-star[data-v-b25a9929]:before{content:"\e688"}.uniui-star-filled[data-v-b25a9929]:before{content:"\e68f"}.uniui-calendar[data-v-b25a9929]:before{content:"\e6a0"}.uniui-fire[data-v-b25a9929]:before{content:"\e6a1"}.uniui-medal[data-v-b25a9929]:before{content:"\e6a2"}.uniui-font[data-v-b25a9929]:before{content:"\e6a3"}.uniui-gift[data-v-b25a9929]:before{content:"\e6a4"}.uniui-link[data-v-b25a9929]:before{content:"\e6a5"}.uniui-notification[data-v-b25a9929]:before{content:"\e6a6"}.uniui-staff[data-v-b25a9929]:before{content:"\e6a7"}.uniui-vip[data-v-b25a9929]:before{content:"\e6a8"}.uniui-folder-add[data-v-b25a9929]:before{content:"\e6a9"}.uniui-tune[data-v-b25a9929]:before{content:"\e6aa"}.uniui-auth[data-v-b25a9929]:before{content:"\e6ab"}.uniui-person[data-v-b25a9929]:before{content:"\e699"}.uniui-email-filled[data-v-b25a9929]:before{content:"\e69a"}.uniui-phone-filled[data-v-b25a9929]:before{content:"\e69b"}.uniui-phone[data-v-b25a9929]:before{content:"\e69c"}.uniui-email[data-v-b25a9929]:before{content:"\e69e"}.uniui-personadd[data-v-b25a9929]:before{content:"\e69f"}.uniui-chatboxes-filled[data-v-b25a9929]:before{content:"\e692"}.uniui-contact[data-v-b25a9929]:before{content:"\e693"}.uniui-chatbubble-filled[data-v-b25a9929]:before{content:"\e694"}.uniui-contact-filled[data-v-b25a9929]:before{content:"\e695"}.uniui-chatboxes[data-v-b25a9929]:before{content:"\e696"}.uniui-chatbubble[data-v-b25a9929]:before{content:"\e697"}.uniui-upload-filled[data-v-b25a9929]:before{content:"\e68e"}.uniui-upload[data-v-b25a9929]:before{content:"\e690"}.uniui-weixin[data-v-b25a9929]:before{content:"\e691"}.uniui-compose[data-v-b25a9929]:before{content:"\e67f"}.uniui-qq[data-v-b25a9929]:before{content:"\e680"}.uniui-download-filled[data-v-b25a9929]:before{content:"\e681"}.uniui-pyq[data-v-b25a9929]:before{content:"\e682"}.uniui-sound[data-v-b25a9929]:before{content:"\e684"}.uniui-trash-filled[data-v-b25a9929]:before{content:"\e685"}.uniui-sound-filled[data-v-b25a9929]:before{content:"\e686"}.uniui-trash[data-v-b25a9929]:before{content:"\e687"}.uniui-videocam-filled[data-v-b25a9929]:before{content:"\e689"}.uniui-spinner-cycle[data-v-b25a9929]:before{content:"\e68a"}.uniui-weibo[data-v-b25a9929]:before{content:"\e68b"}.uniui-videocam[data-v-b25a9929]:before{content:"\e68c"}.uniui-download[data-v-b25a9929]:before{content:"\e68d"}.uniui-help[data-v-b25a9929]:before{content:"\e679"}.uniui-navigate-filled[data-v-b25a9929]:before{content:"\e67a"}.uniui-plusempty[data-v-b25a9929]:before{content:"\e67b"}.uniui-smallcircle[data-v-b25a9929]:before{content:"\e67c"}.uniui-minus-filled[data-v-b25a9929]:before{content:"\e67d"}.uniui-micoff[data-v-b25a9929]:before{content:"\e67e"}.uniui-closeempty[data-v-b25a9929]:before{content:"\e66c"}.uniui-clear[data-v-b25a9929]:before{content:"\e66d"}.uniui-navigate[data-v-b25a9929]:before{content:"\e66e"}.uniui-minus[data-v-b25a9929]:before{content:"\e66f"}.uniui-image[data-v-b25a9929]:before{content:"\e670"}.uniui-mic[data-v-b25a9929]:before{content:"\e671"}.uniui-paperplane[data-v-b25a9929]:before{content:"\e672"}.uniui-close[data-v-b25a9929]:before{content:"\e673"}.uniui-help-filled[data-v-b25a9929]:before{content:"\e674"}.uniui-paperplane-filled[data-v-b25a9929]:before{content:"\e675"}.uniui-plus[data-v-b25a9929]:before{content:"\e676"}.uniui-mic-filled[data-v-b25a9929]:before{content:"\e677"}.uniui-image-filled[data-v-b25a9929]:before{content:"\e678"}.uniui-locked-filled[data-v-b25a9929]:before{content:"\e668"}.uniui-info[data-v-b25a9929]:before{content:"\e669"}.uniui-locked[data-v-b25a9929]:before{content:"\e66b"}.uniui-camera-filled[data-v-b25a9929]:before{content:"\e658"}.uniui-chat-filled[data-v-b25a9929]:before{content:"\e659"}.uniui-camera[data-v-b25a9929]:before{content:"\e65a"}.uniui-circle[data-v-b25a9929]:before{content:"\e65b"}.uniui-checkmarkempty[data-v-b25a9929]:before{content:"\e65c"}.uniui-chat[data-v-b25a9929]:before{content:"\e65d"}.uniui-circle-filled[data-v-b25a9929]:before{content:"\e65e"}.uniui-flag[data-v-b25a9929]:before{content:"\e65f"}.uniui-flag-filled[data-v-b25a9929]:before{content:"\e660"}.uniui-gear-filled[data-v-b25a9929]:before{content:"\e661"}.uniui-home[data-v-b25a9929]:before{content:"\e662"}.uniui-home-filled[data-v-b25a9929]:before{content:"\e663"}.uniui-gear[data-v-b25a9929]:before{content:"\e664"}.uniui-smallcircle-filled[data-v-b25a9929]:before{content:"\e665"}.uniui-map-filled[data-v-b25a9929]:before{content:"\e666"}.uniui-map[data-v-b25a9929]:before{content:"\e667"}.uniui-refresh-filled[data-v-b25a9929]:before{content:"\e656"}.uniui-refresh[data-v-b25a9929]:before{content:"\e657"}.uniui-cloud-upload[data-v-b25a9929]:before{content:"\e645"}.uniui-cloud-download-filled[data-v-b25a9929]:before{content:"\e646"}.uniui-cloud-download[data-v-b25a9929]:before{content:"\e647"}.uniui-cloud-upload-filled[data-v-b25a9929]:before{content:"\e648"}.uniui-redo[data-v-b25a9929]:before{content:"\e64a"}.uniui-images-filled[data-v-b25a9929]:before{content:"\e64b"}.uniui-undo-filled[data-v-b25a9929]:before{content:"\e64c"}.uniui-more[data-v-b25a9929]:before{content:"\e64d"}.uniui-more-filled[data-v-b25a9929]:before{content:"\e64e"}.uniui-undo[data-v-b25a9929]:before{content:"\e64f"}.uniui-images[data-v-b25a9929]:before{content:"\e650"}.uniui-paperclip[data-v-b25a9929]:before{content:"\e652"}.uniui-settings[data-v-b25a9929]:before{content:"\e653"}.uniui-search[data-v-b25a9929]:before{content:"\e654"}.uniui-redo-filled[data-v-b25a9929]:before{content:"\e655"}.uniui-list[data-v-b25a9929]:before{content:"\e644"}.uniui-mail-open-filled[data-v-b25a9929]:before{content:"\e63a"}.uniui-hand-down-filled[data-v-b25a9929]:before{content:"\e63c"}.uniui-hand-down[data-v-b25a9929]:before{content:"\e63d"}.uniui-hand-up-filled[data-v-b25a9929]:before{content:"\e63e"}.uniui-hand-up[data-v-b25a9929]:before{content:"\e63f"}.uniui-heart-filled[data-v-b25a9929]:before{content:"\e641"}.uniui-mail-open[data-v-b25a9929]:before{content:"\e643"}.uniui-heart[data-v-b25a9929]:before{content:"\e639"}.uniui-loop[data-v-b25a9929]:before{content:"\e633"}.uniui-pulldown[data-v-b25a9929]:before{content:"\e632"}.uniui-scan[data-v-b25a9929]:before{content:"\e62a"}.uniui-bars[data-v-b25a9929]:before{content:"\e627"}.uniui-checkbox[data-v-b25a9929]:before{content:"\e62b"}.uniui-checkbox-filled[data-v-b25a9929]:before{content:"\e62c"}.uniui-shop[data-v-b25a9929]:before{content:"\e62f"}.uniui-headphones[data-v-b25a9929]:before{content:"\e630"}.uniui-cart[data-v-b25a9929]:before{content:"\e631"}@font-face{font-family:uniicons;src:url(../../assets/uniicons.32e978a5.ttf)}.uni-icons[data-v-b25a9929]{font-family:uniicons;text-decoration:none;text-align:center}.create-folder-name[data-v-3653111e]{display:flex;width:100%;padding:.3125rem .625rem;box-sizing:border-box;align-items:center;background:rgba(108,99,255,.06);border-radius:.4375rem;border:.0625rem solid transparent;transition:all .25s ease}.create-folder-name uni-input[data-v-3653111e]{box-sizing:border-box;width:100%;font-size:.875rem;color:#333}.create-folder-name.has-value[data-v-3653111e]{background-color:#fff;border-color:#6c63ff;box-shadow:0 0 0 .125rem rgba(108,99,255,.06)}.new-folder-name[data-v-3653111e]{font-size:.875rem;color:#555;margin-bottom:.375rem}.nf-path-label[data-v-3653111e]{font-size:.75rem;color:#999;margin-top:.75rem;margin-bottom:.25rem}.nf-path-display[data-v-3653111e]{font-size:.8125rem;color:#333;padding:.375rem .625rem;background:#f5f5f8;border-radius:.375rem;word-break:break-all}.nf-path-preview[data-v-3653111e]{font-size:.8125rem;color:#6c63ff;padding:.375rem .625rem;background:rgba(108,99,255,.05);border:.0625rem dashed rgba(108,99,255,.25);border-radius:.375rem;word-break:break-all}.option-wrapper[data-v-3653111e]{display:flex;justify-content:space-between;gap:.625rem;margin-top:1.25rem}.opt-btn[data-v-3653111e]{flex:1;display:flex;justify-content:center;align-items:center;padding:.75rem 0;border-radius:.5rem;font-size:.9375rem;font-weight:500;transition:all .2s ease}.opt-btn[data-v-3653111e]:active{transform:scale(.97)}.opt-cancel[data-v-3653111e]{background:#f0f1f5;color:#666}.opt-confirm[data-v-3653111e]{background:linear-gradient(135deg,#6c63ff,#4a45d1);color:#fff;box-shadow:0 .125rem .375rem rgba(108,99,255,.25)}.workspace-container[data-v-3653111e]{display:flex;flex-direction:column;background:linear-gradient(180deg,#f5f4f9,#faf9fe)}.workspace-text[data-v-3653111e]{color:#6c63ff;font-weight:700}.workspace-header[data-v-3653111e]{width:100%;display:flex;flex-shrink:0;flex-direction:column;align-items:center;padding:.375rem 0;box-sizing:border-box;position:relative;z-index:100;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:.03125rem solid rgba(170,170,255,.1)}.custom-navbar[data-v-3653111e]{width:100%;display:flex;align-items:center;justify-content:space-between;padding:.5rem .3125rem;box-sizing:border-box;position:relative}.navbar-left[data-v-3653111e]{display:flex;justify-content:center;align-items:center}.navbar-before-title[data-v-3653111e]{display:flex;justify-content:center;align-items:center;text-align:center;font-size:.8125rem;color:#6c63ff;font-weight:500}.navbar-title[data-v-3653111e]{display:flex;flex:1;justify-content:center;align-items:center;position:absolute;left:50%;transform:translate(-50%);font-size:1rem;font-weight:700;color:#1a1a2e}.navbar-right[data-v-3653111e]{display:flex;justify-content:center;align-items:center;margin-right:.625rem;box-sizing:border-box}.navbar-right .menu-open[data-v-3653111e],.custom-navbar-icon[data-v-3653111e]{color:#6c63ff!important;font-size:1.25rem!important}.search-file-warpper[data-v-3653111e]{display:flex;width:90%;align-items:center}.search-file[data-v-3653111e]{display:flex;flex:1;align-items:center;background:rgba(255,255,255,.9);padding:.4375rem .75rem;box-sizing:border-box;border-radius:.875rem;border:.0625rem solid #e8e7f5;transition:all .25s ease}.search-file[data-v-3653111e]:focus-within{border-color:#6c63ff;box-shadow:0 0 0 .125rem rgba(108,99,255,.06)}.icon-sousuo[data-v-3653111e]{font-weight:700;color:#999}.search-file-input[data-v-3653111e]{margin-left:.5rem;font-size:.8125rem;color:#333}.cancel-search[data-v-3653111e]{display:flex;flex-shrink:0;padding:0 0 0 .625rem;box-sizing:border-box;color:#6c63ff;font-size:.875rem;font-weight:500}.workspace-content[data-v-3653111e]{width:100%;display:block;flex:1;overflow:auto;box-sizing:border-box;position:relative}.menu-card[data-v-3653111e]{position:absolute;top:100%;right:.625rem;width:8.75rem;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#fff;border-radius:.75rem;z-index:999;box-shadow:0 .25rem 1rem rgba(0,0,0,.08);padding:.25rem 0;overflow:hidden}.menu-card-item[data-v-3653111e]{width:100%;padding:.6875rem .875rem;box-sizing:border-box;font-size:.875rem;color:#333;transition:all .15s ease}.menu-card-item[data-v-3653111e]:active{background:rgba(108,99,255,.06)}.folder-null[data-v-3653111e]{width:100%;display:flex;justify-content:center;align-items:center;flex-direction:column;position:absolute;left:50%;top:30%;transform:translate(-50%);font-size:.9375rem;color:#bbb}.folder-null .iconfont[data-v-3653111e]{font-size:5.625rem;color:#ddd}.folder-grid[data-v-3653111e]{width:100%;display:grid;grid-template-columns:repeat(3,1fr);padding:.75rem;box-sizing:border-box;gap:.625rem;align-items:start}.folder-item[data-v-3653111e]{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;min-width:0;background:rgba(255,255,255,.7);border-radius:.75rem;padding:.75rem .25rem .5rem;border:.0625rem solid transparent;transition:all .2s ease}.folder-item.select-folder[data-v-3653111e]{border-color:rgba(108,99,255,.3);background:rgba(108,99,255,.04)}.folder-item[data-v-3653111e]:active{transform:scale(.96);background:rgba(255,255,255,.95)}.folder-item .folder-name[data-v-3653111e]{max-width:5rem;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:1.375rem;min-width:0;font-size:.8125rem;color:#444}.folder-item-style[data-v-3653111e]{font-size:3.4375rem!important;color:#6c63ff!important}.folder-checkbox[data-v-3653111e]{width:1.375rem;height:1.375rem;border:.09375rem solid #fff;border-radius:50%;box-shadow:0 .0625rem .25rem rgba(0,0,0,.12);background:rgba(255,255,255,.9);box-sizing:border-box;position:absolute;left:50%;top:25%;transform:translate(-50%);display:flex;justify-content:center;align-items:center;transition:all .2s ease}.folder-checkbox.select-folder[data-v-3653111e]{background:linear-gradient(135deg,#6c63ff,#4a45d1);border-color:#6c63ff}.workspace-footer[data-v-3653111e]{width:100%;display:flex;flex-shrink:0;justify-content:space-between;padding:.75rem .9375rem;box-sizing:border-box;color:#888;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:.03125rem solid rgba(170,170,255,.1);font-size:.8125rem;transition:all .2s ease}.workspace-footer.folder-actions[data-v-3653111e]{color:#6c63ff;font-weight:500}.workspace-footer .iconfont[data-v-3653111e]{font-size:1.25rem!important} +.uniui-cart-filled[data-v-b25a9929]:before{content:"\e6d0"}.uniui-gift-filled[data-v-b25a9929]:before{content:"\e6c4"}.uniui-color[data-v-b25a9929]:before{content:"\e6cf"}.uniui-wallet[data-v-b25a9929]:before{content:"\e6b1"}.uniui-settings-filled[data-v-b25a9929]:before{content:"\e6ce"}.uniui-auth-filled[data-v-b25a9929]:before{content:"\e6cc"}.uniui-shop-filled[data-v-b25a9929]:before{content:"\e6cd"}.uniui-staff-filled[data-v-b25a9929]:before{content:"\e6cb"}.uniui-vip-filled[data-v-b25a9929]:before{content:"\e6c6"}.uniui-plus-filled[data-v-b25a9929]:before{content:"\e6c7"}.uniui-folder-add-filled[data-v-b25a9929]:before{content:"\e6c8"}.uniui-color-filled[data-v-b25a9929]:before{content:"\e6c9"}.uniui-tune-filled[data-v-b25a9929]:before{content:"\e6ca"}.uniui-calendar-filled[data-v-b25a9929]:before{content:"\e6c0"}.uniui-notification-filled[data-v-b25a9929]:before{content:"\e6c1"}.uniui-wallet-filled[data-v-b25a9929]:before{content:"\e6c2"}.uniui-medal-filled[data-v-b25a9929]:before{content:"\e6c3"}.uniui-fire-filled[data-v-b25a9929]:before{content:"\e6c5"}.uniui-refreshempty[data-v-b25a9929]:before{content:"\e6bf"}.uniui-location-filled[data-v-b25a9929]:before{content:"\e6af"}.uniui-person-filled[data-v-b25a9929]:before{content:"\e69d"}.uniui-personadd-filled[data-v-b25a9929]:before{content:"\e698"}.uniui-arrowthinleft[data-v-b25a9929]:before{content:"\e6d2"}.uniui-arrowthinup[data-v-b25a9929]:before{content:"\e6d3"}.uniui-arrowthindown[data-v-b25a9929]:before{content:"\e6d4"}.uniui-back[data-v-b25a9929]:before{content:"\e6b9"}.uniui-forward[data-v-b25a9929]:before{content:"\e6ba"}.uniui-arrow-right[data-v-b25a9929]:before{content:"\e6bb"}.uniui-arrow-left[data-v-b25a9929]:before{content:"\e6bc"}.uniui-arrow-up[data-v-b25a9929]:before{content:"\e6bd"}.uniui-arrow-down[data-v-b25a9929]:before{content:"\e6be"}.uniui-arrowthinright[data-v-b25a9929]:before{content:"\e6d1"}.uniui-down[data-v-b25a9929]:before{content:"\e6b8"}.uniui-bottom[data-v-b25a9929]:before{content:"\e6b8"}.uniui-arrowright[data-v-b25a9929]:before{content:"\e6d5"}.uniui-right[data-v-b25a9929]:before{content:"\e6b5"}.uniui-up[data-v-b25a9929]:before{content:"\e6b6"}.uniui-top[data-v-b25a9929]:before{content:"\e6b6"}.uniui-left[data-v-b25a9929]:before{content:"\e6b7"}.uniui-arrowup[data-v-b25a9929]:before{content:"\e6d6"}.uniui-eye[data-v-b25a9929]:before{content:"\e651"}.uniui-eye-filled[data-v-b25a9929]:before{content:"\e66a"}.uniui-eye-slash[data-v-b25a9929]:before{content:"\e6b3"}.uniui-eye-slash-filled[data-v-b25a9929]:before{content:"\e6b4"}.uniui-info-filled[data-v-b25a9929]:before{content:"\e649"}.uniui-reload[data-v-b25a9929]:before{content:"\e6b2"}.uniui-micoff-filled[data-v-b25a9929]:before{content:"\e6b0"}.uniui-map-pin-ellipse[data-v-b25a9929]:before{content:"\e6ac"}.uniui-map-pin[data-v-b25a9929]:before{content:"\e6ad"}.uniui-location[data-v-b25a9929]:before{content:"\e6ae"}.uniui-starhalf[data-v-b25a9929]:before{content:"\e683"}.uniui-star[data-v-b25a9929]:before{content:"\e688"}.uniui-star-filled[data-v-b25a9929]:before{content:"\e68f"}.uniui-calendar[data-v-b25a9929]:before{content:"\e6a0"}.uniui-fire[data-v-b25a9929]:before{content:"\e6a1"}.uniui-medal[data-v-b25a9929]:before{content:"\e6a2"}.uniui-font[data-v-b25a9929]:before{content:"\e6a3"}.uniui-gift[data-v-b25a9929]:before{content:"\e6a4"}.uniui-link[data-v-b25a9929]:before{content:"\e6a5"}.uniui-notification[data-v-b25a9929]:before{content:"\e6a6"}.uniui-staff[data-v-b25a9929]:before{content:"\e6a7"}.uniui-vip[data-v-b25a9929]:before{content:"\e6a8"}.uniui-folder-add[data-v-b25a9929]:before{content:"\e6a9"}.uniui-tune[data-v-b25a9929]:before{content:"\e6aa"}.uniui-auth[data-v-b25a9929]:before{content:"\e6ab"}.uniui-person[data-v-b25a9929]:before{content:"\e699"}.uniui-email-filled[data-v-b25a9929]:before{content:"\e69a"}.uniui-phone-filled[data-v-b25a9929]:before{content:"\e69b"}.uniui-phone[data-v-b25a9929]:before{content:"\e69c"}.uniui-email[data-v-b25a9929]:before{content:"\e69e"}.uniui-personadd[data-v-b25a9929]:before{content:"\e69f"}.uniui-chatboxes-filled[data-v-b25a9929]:before{content:"\e692"}.uniui-contact[data-v-b25a9929]:before{content:"\e693"}.uniui-chatbubble-filled[data-v-b25a9929]:before{content:"\e694"}.uniui-contact-filled[data-v-b25a9929]:before{content:"\e695"}.uniui-chatboxes[data-v-b25a9929]:before{content:"\e696"}.uniui-chatbubble[data-v-b25a9929]:before{content:"\e697"}.uniui-upload-filled[data-v-b25a9929]:before{content:"\e68e"}.uniui-upload[data-v-b25a9929]:before{content:"\e690"}.uniui-weixin[data-v-b25a9929]:before{content:"\e691"}.uniui-compose[data-v-b25a9929]:before{content:"\e67f"}.uniui-qq[data-v-b25a9929]:before{content:"\e680"}.uniui-download-filled[data-v-b25a9929]:before{content:"\e681"}.uniui-pyq[data-v-b25a9929]:before{content:"\e682"}.uniui-sound[data-v-b25a9929]:before{content:"\e684"}.uniui-trash-filled[data-v-b25a9929]:before{content:"\e685"}.uniui-sound-filled[data-v-b25a9929]:before{content:"\e686"}.uniui-trash[data-v-b25a9929]:before{content:"\e687"}.uniui-videocam-filled[data-v-b25a9929]:before{content:"\e689"}.uniui-spinner-cycle[data-v-b25a9929]:before{content:"\e68a"}.uniui-weibo[data-v-b25a9929]:before{content:"\e68b"}.uniui-videocam[data-v-b25a9929]:before{content:"\e68c"}.uniui-download[data-v-b25a9929]:before{content:"\e68d"}.uniui-help[data-v-b25a9929]:before{content:"\e679"}.uniui-navigate-filled[data-v-b25a9929]:before{content:"\e67a"}.uniui-plusempty[data-v-b25a9929]:before{content:"\e67b"}.uniui-smallcircle[data-v-b25a9929]:before{content:"\e67c"}.uniui-minus-filled[data-v-b25a9929]:before{content:"\e67d"}.uniui-micoff[data-v-b25a9929]:before{content:"\e67e"}.uniui-closeempty[data-v-b25a9929]:before{content:"\e66c"}.uniui-clear[data-v-b25a9929]:before{content:"\e66d"}.uniui-navigate[data-v-b25a9929]:before{content:"\e66e"}.uniui-minus[data-v-b25a9929]:before{content:"\e66f"}.uniui-image[data-v-b25a9929]:before{content:"\e670"}.uniui-mic[data-v-b25a9929]:before{content:"\e671"}.uniui-paperplane[data-v-b25a9929]:before{content:"\e672"}.uniui-close[data-v-b25a9929]:before{content:"\e673"}.uniui-help-filled[data-v-b25a9929]:before{content:"\e674"}.uniui-paperplane-filled[data-v-b25a9929]:before{content:"\e675"}.uniui-plus[data-v-b25a9929]:before{content:"\e676"}.uniui-mic-filled[data-v-b25a9929]:before{content:"\e677"}.uniui-image-filled[data-v-b25a9929]:before{content:"\e678"}.uniui-locked-filled[data-v-b25a9929]:before{content:"\e668"}.uniui-info[data-v-b25a9929]:before{content:"\e669"}.uniui-locked[data-v-b25a9929]:before{content:"\e66b"}.uniui-camera-filled[data-v-b25a9929]:before{content:"\e658"}.uniui-chat-filled[data-v-b25a9929]:before{content:"\e659"}.uniui-camera[data-v-b25a9929]:before{content:"\e65a"}.uniui-circle[data-v-b25a9929]:before{content:"\e65b"}.uniui-checkmarkempty[data-v-b25a9929]:before{content:"\e65c"}.uniui-chat[data-v-b25a9929]:before{content:"\e65d"}.uniui-circle-filled[data-v-b25a9929]:before{content:"\e65e"}.uniui-flag[data-v-b25a9929]:before{content:"\e65f"}.uniui-flag-filled[data-v-b25a9929]:before{content:"\e660"}.uniui-gear-filled[data-v-b25a9929]:before{content:"\e661"}.uniui-home[data-v-b25a9929]:before{content:"\e662"}.uniui-home-filled[data-v-b25a9929]:before{content:"\e663"}.uniui-gear[data-v-b25a9929]:before{content:"\e664"}.uniui-smallcircle-filled[data-v-b25a9929]:before{content:"\e665"}.uniui-map-filled[data-v-b25a9929]:before{content:"\e666"}.uniui-map[data-v-b25a9929]:before{content:"\e667"}.uniui-refresh-filled[data-v-b25a9929]:before{content:"\e656"}.uniui-refresh[data-v-b25a9929]:before{content:"\e657"}.uniui-cloud-upload[data-v-b25a9929]:before{content:"\e645"}.uniui-cloud-download-filled[data-v-b25a9929]:before{content:"\e646"}.uniui-cloud-download[data-v-b25a9929]:before{content:"\e647"}.uniui-cloud-upload-filled[data-v-b25a9929]:before{content:"\e648"}.uniui-redo[data-v-b25a9929]:before{content:"\e64a"}.uniui-images-filled[data-v-b25a9929]:before{content:"\e64b"}.uniui-undo-filled[data-v-b25a9929]:before{content:"\e64c"}.uniui-more[data-v-b25a9929]:before{content:"\e64d"}.uniui-more-filled[data-v-b25a9929]:before{content:"\e64e"}.uniui-undo[data-v-b25a9929]:before{content:"\e64f"}.uniui-images[data-v-b25a9929]:before{content:"\e650"}.uniui-paperclip[data-v-b25a9929]:before{content:"\e652"}.uniui-settings[data-v-b25a9929]:before{content:"\e653"}.uniui-search[data-v-b25a9929]:before{content:"\e654"}.uniui-redo-filled[data-v-b25a9929]:before{content:"\e655"}.uniui-list[data-v-b25a9929]:before{content:"\e644"}.uniui-mail-open-filled[data-v-b25a9929]:before{content:"\e63a"}.uniui-hand-down-filled[data-v-b25a9929]:before{content:"\e63c"}.uniui-hand-down[data-v-b25a9929]:before{content:"\e63d"}.uniui-hand-up-filled[data-v-b25a9929]:before{content:"\e63e"}.uniui-hand-up[data-v-b25a9929]:before{content:"\e63f"}.uniui-heart-filled[data-v-b25a9929]:before{content:"\e641"}.uniui-mail-open[data-v-b25a9929]:before{content:"\e643"}.uniui-heart[data-v-b25a9929]:before{content:"\e639"}.uniui-loop[data-v-b25a9929]:before{content:"\e633"}.uniui-pulldown[data-v-b25a9929]:before{content:"\e632"}.uniui-scan[data-v-b25a9929]:before{content:"\e62a"}.uniui-bars[data-v-b25a9929]:before{content:"\e627"}.uniui-checkbox[data-v-b25a9929]:before{content:"\e62b"}.uniui-checkbox-filled[data-v-b25a9929]:before{content:"\e62c"}.uniui-shop[data-v-b25a9929]:before{content:"\e62f"}.uniui-headphones[data-v-b25a9929]:before{content:"\e630"}.uniui-cart[data-v-b25a9929]:before{content:"\e631"}@font-face{font-family:uniicons;src:url(../../assets/uniicons.32e978a5.ttf)}.uni-icons[data-v-b25a9929]{font-family:uniicons;text-decoration:none;text-align:center}.create-folder-name[data-v-e158ea6d]{display:flex;width:100%;padding:.3125rem .625rem;box-sizing:border-box;align-items:center;background:rgba(108,99,255,.06);border-radius:.4375rem;border:.0625rem solid transparent;transition:all .25s ease}.create-folder-name uni-input[data-v-e158ea6d]{box-sizing:border-box;width:100%;font-size:.875rem;color:#333}.create-folder-name.has-value[data-v-e158ea6d]{background-color:#fff;border-color:#6c63ff;box-shadow:0 0 0 .125rem rgba(108,99,255,.06)}.new-folder-name[data-v-e158ea6d]{font-size:.875rem;color:#555;margin-bottom:.375rem}.nf-path-label[data-v-e158ea6d]{font-size:.75rem;color:#999;margin-top:.75rem;margin-bottom:.25rem}.nf-path-display[data-v-e158ea6d]{font-size:.8125rem;color:#333;padding:.375rem .625rem;background:#f5f5f8;border-radius:.375rem;word-break:break-all}.nf-path-preview[data-v-e158ea6d]{font-size:.8125rem;color:#6c63ff;padding:.375rem .625rem;background:rgba(108,99,255,.05);border:.0625rem dashed rgba(108,99,255,.25);border-radius:.375rem;word-break:break-all}.option-wrapper[data-v-e158ea6d]{display:flex;justify-content:space-between;gap:.625rem;margin-top:1.25rem}.opt-btn[data-v-e158ea6d]{flex:1;display:flex;justify-content:center;align-items:center;padding:.75rem 0;border-radius:.5rem;font-size:.9375rem;font-weight:500;transition:all .2s ease}.opt-btn[data-v-e158ea6d]:active{transform:scale(.97)}.opt-cancel[data-v-e158ea6d]{background:#f0f1f5;color:#666}.opt-confirm[data-v-e158ea6d]{background:linear-gradient(135deg,#6c63ff,#4a45d1);color:#fff;box-shadow:0 .125rem .375rem rgba(108,99,255,.25)}.workspace-container[data-v-e158ea6d]{display:flex;flex-direction:column;background:linear-gradient(180deg,#f5f4f9,#faf9fe)}.workspace-text[data-v-e158ea6d]{color:#6c63ff;font-weight:700}.workspace-header[data-v-e158ea6d]{width:100%;display:flex;flex-shrink:0;flex-direction:column;align-items:center;padding:.375rem 0;box-sizing:border-box;position:relative;z-index:100;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:.03125rem solid rgba(170,170,255,.1)}.custom-navbar[data-v-e158ea6d]{width:100%;display:flex;align-items:center;justify-content:space-between;padding:.5rem .3125rem;box-sizing:border-box;position:relative}.navbar-left[data-v-e158ea6d]{display:flex;justify-content:center;align-items:center}.navbar-before-title[data-v-e158ea6d]{display:flex;justify-content:center;align-items:center;text-align:center;font-size:.8125rem;color:#6c63ff;font-weight:500}.navbar-title[data-v-e158ea6d]{display:flex;flex:1;justify-content:center;align-items:center;position:absolute;left:50%;transform:translate(-50%);font-size:1rem;font-weight:700;color:#1a1a2e}.navbar-right[data-v-e158ea6d]{display:flex;justify-content:center;align-items:center;margin-right:.625rem;box-sizing:border-box}.navbar-right .menu-open[data-v-e158ea6d],.custom-navbar-icon[data-v-e158ea6d]{color:#6c63ff!important;font-size:1.25rem!important}.search-file-warpper[data-v-e158ea6d]{display:flex;width:90%;align-items:center}.search-file[data-v-e158ea6d]{display:flex;flex:1;align-items:center;background:rgba(255,255,255,.9);padding:.4375rem .75rem;box-sizing:border-box;border-radius:.875rem;border:.0625rem solid #e8e7f5;transition:all .25s ease}.search-file[data-v-e158ea6d]:focus-within{border-color:#6c63ff;box-shadow:0 0 0 .125rem rgba(108,99,255,.06)}.icon-sousuo[data-v-e158ea6d]{font-weight:700;color:#999}.search-file-input[data-v-e158ea6d]{margin-left:.5rem;font-size:.8125rem;color:#333}.cancel-search[data-v-e158ea6d]{display:flex;flex-shrink:0;padding:0 0 0 .625rem;box-sizing:border-box;color:#6c63ff;font-size:.875rem;font-weight:500}.workspace-content[data-v-e158ea6d]{width:100%;display:block;flex:1;overflow:auto;box-sizing:border-box;position:relative}.menu-card[data-v-e158ea6d]{position:absolute;top:100%;right:.625rem;width:8.75rem;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#fff;border-radius:.75rem;z-index:999;box-shadow:0 .25rem 1rem rgba(0,0,0,.08);padding:.25rem 0;overflow:hidden}.menu-card-item[data-v-e158ea6d]{width:100%;padding:.6875rem .875rem;box-sizing:border-box;font-size:.875rem;color:#333;transition:all .15s ease}.menu-card-item[data-v-e158ea6d]:active{background:rgba(108,99,255,.06)}.folder-null[data-v-e158ea6d]{width:100%;display:flex;justify-content:center;align-items:center;flex-direction:column;position:absolute;left:50%;top:30%;transform:translate(-50%);font-size:.9375rem;color:#bbb}.folder-null .iconfont[data-v-e158ea6d]{font-size:5.625rem;color:#ddd}.folder-grid[data-v-e158ea6d]{width:100%;display:grid;grid-template-columns:repeat(3,1fr);padding:.75rem;box-sizing:border-box;gap:.625rem;align-items:start}.folder-item[data-v-e158ea6d]{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;min-width:0;background:rgba(255,255,255,.7);border-radius:.75rem;padding:.75rem .25rem .5rem;border:.0625rem solid transparent;transition:all .2s ease}.folder-item.select-folder[data-v-e158ea6d]{border-color:rgba(108,99,255,.3);background:rgba(108,99,255,.04)}.folder-item[data-v-e158ea6d]:active{transform:scale(.96);background:rgba(255,255,255,.95)}.folder-item .folder-name[data-v-e158ea6d]{max-width:5rem;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:1.375rem;min-width:0;font-size:.8125rem;color:#444}.folder-item-style[data-v-e158ea6d]{font-size:3.4375rem!important;color:#6c63ff!important}.folder-checkbox[data-v-e158ea6d]{width:1.375rem;height:1.375rem;border:.09375rem solid #fff;border-radius:50%;box-shadow:0 .0625rem .25rem rgba(0,0,0,.12);background:rgba(255,255,255,.9);box-sizing:border-box;position:absolute;left:50%;top:25%;transform:translate(-50%);display:flex;justify-content:center;align-items:center;transition:all .2s ease}.folder-checkbox.select-folder[data-v-e158ea6d]{background:linear-gradient(135deg,#6c63ff,#4a45d1);border-color:#6c63ff}.workspace-footer[data-v-e158ea6d]{width:100%;display:flex;flex-shrink:0;justify-content:space-between;padding:.75rem .9375rem;box-sizing:border-box;color:#888;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:.03125rem solid rgba(170,170,255,.1);font-size:.8125rem;transition:all .2s ease}.workspace-footer.folder-actions[data-v-e158ea6d]{color:#6c63ff;font-weight:500}.workspace-footer .iconfont[data-v-e158ea6d]{font-size:1.25rem!important} diff --git a/unpackage/dist/build/app-plus/pages/text/text.css b/unpackage/dist/build/app-plus/pages/text/text.css index 273ce17..71c13e2 100644 --- a/unpackage/dist/build/app-plus/pages/text/text.css +++ b/unpackage/dist/build/app-plus/pages/text/text.css @@ -1 +1 @@ -.uniui-cart-filled[data-v-b25a9929]:before{content:"\e6d0"}.uniui-gift-filled[data-v-b25a9929]:before{content:"\e6c4"}.uniui-color[data-v-b25a9929]:before{content:"\e6cf"}.uniui-wallet[data-v-b25a9929]:before{content:"\e6b1"}.uniui-settings-filled[data-v-b25a9929]:before{content:"\e6ce"}.uniui-auth-filled[data-v-b25a9929]:before{content:"\e6cc"}.uniui-shop-filled[data-v-b25a9929]:before{content:"\e6cd"}.uniui-staff-filled[data-v-b25a9929]:before{content:"\e6cb"}.uniui-vip-filled[data-v-b25a9929]:before{content:"\e6c6"}.uniui-plus-filled[data-v-b25a9929]:before{content:"\e6c7"}.uniui-folder-add-filled[data-v-b25a9929]:before{content:"\e6c8"}.uniui-color-filled[data-v-b25a9929]:before{content:"\e6c9"}.uniui-tune-filled[data-v-b25a9929]:before{content:"\e6ca"}.uniui-calendar-filled[data-v-b25a9929]:before{content:"\e6c0"}.uniui-notification-filled[data-v-b25a9929]:before{content:"\e6c1"}.uniui-wallet-filled[data-v-b25a9929]:before{content:"\e6c2"}.uniui-medal-filled[data-v-b25a9929]:before{content:"\e6c3"}.uniui-fire-filled[data-v-b25a9929]:before{content:"\e6c5"}.uniui-refreshempty[data-v-b25a9929]:before{content:"\e6bf"}.uniui-location-filled[data-v-b25a9929]:before{content:"\e6af"}.uniui-person-filled[data-v-b25a9929]:before{content:"\e69d"}.uniui-personadd-filled[data-v-b25a9929]:before{content:"\e698"}.uniui-arrowthinleft[data-v-b25a9929]:before{content:"\e6d2"}.uniui-arrowthinup[data-v-b25a9929]:before{content:"\e6d3"}.uniui-arrowthindown[data-v-b25a9929]:before{content:"\e6d4"}.uniui-back[data-v-b25a9929]:before{content:"\e6b9"}.uniui-forward[data-v-b25a9929]:before{content:"\e6ba"}.uniui-arrow-right[data-v-b25a9929]:before{content:"\e6bb"}.uniui-arrow-left[data-v-b25a9929]:before{content:"\e6bc"}.uniui-arrow-up[data-v-b25a9929]:before{content:"\e6bd"}.uniui-arrow-down[data-v-b25a9929]:before{content:"\e6be"}.uniui-arrowthinright[data-v-b25a9929]:before{content:"\e6d1"}.uniui-down[data-v-b25a9929]:before{content:"\e6b8"}.uniui-bottom[data-v-b25a9929]:before{content:"\e6b8"}.uniui-arrowright[data-v-b25a9929]:before{content:"\e6d5"}.uniui-right[data-v-b25a9929]:before{content:"\e6b5"}.uniui-up[data-v-b25a9929]:before{content:"\e6b6"}.uniui-top[data-v-b25a9929]:before{content:"\e6b6"}.uniui-left[data-v-b25a9929]:before{content:"\e6b7"}.uniui-arrowup[data-v-b25a9929]:before{content:"\e6d6"}.uniui-eye[data-v-b25a9929]:before{content:"\e651"}.uniui-eye-filled[data-v-b25a9929]:before{content:"\e66a"}.uniui-eye-slash[data-v-b25a9929]:before{content:"\e6b3"}.uniui-eye-slash-filled[data-v-b25a9929]:before{content:"\e6b4"}.uniui-info-filled[data-v-b25a9929]:before{content:"\e649"}.uniui-reload[data-v-b25a9929]:before{content:"\e6b2"}.uniui-micoff-filled[data-v-b25a9929]:before{content:"\e6b0"}.uniui-map-pin-ellipse[data-v-b25a9929]:before{content:"\e6ac"}.uniui-map-pin[data-v-b25a9929]:before{content:"\e6ad"}.uniui-location[data-v-b25a9929]:before{content:"\e6ae"}.uniui-starhalf[data-v-b25a9929]:before{content:"\e683"}.uniui-star[data-v-b25a9929]:before{content:"\e688"}.uniui-star-filled[data-v-b25a9929]:before{content:"\e68f"}.uniui-calendar[data-v-b25a9929]:before{content:"\e6a0"}.uniui-fire[data-v-b25a9929]:before{content:"\e6a1"}.uniui-medal[data-v-b25a9929]:before{content:"\e6a2"}.uniui-font[data-v-b25a9929]:before{content:"\e6a3"}.uniui-gift[data-v-b25a9929]:before{content:"\e6a4"}.uniui-link[data-v-b25a9929]:before{content:"\e6a5"}.uniui-notification[data-v-b25a9929]:before{content:"\e6a6"}.uniui-staff[data-v-b25a9929]:before{content:"\e6a7"}.uniui-vip[data-v-b25a9929]:before{content:"\e6a8"}.uniui-folder-add[data-v-b25a9929]:before{content:"\e6a9"}.uniui-tune[data-v-b25a9929]:before{content:"\e6aa"}.uniui-auth[data-v-b25a9929]:before{content:"\e6ab"}.uniui-person[data-v-b25a9929]:before{content:"\e699"}.uniui-email-filled[data-v-b25a9929]:before{content:"\e69a"}.uniui-phone-filled[data-v-b25a9929]:before{content:"\e69b"}.uniui-phone[data-v-b25a9929]:before{content:"\e69c"}.uniui-email[data-v-b25a9929]:before{content:"\e69e"}.uniui-personadd[data-v-b25a9929]:before{content:"\e69f"}.uniui-chatboxes-filled[data-v-b25a9929]:before{content:"\e692"}.uniui-contact[data-v-b25a9929]:before{content:"\e693"}.uniui-chatbubble-filled[data-v-b25a9929]:before{content:"\e694"}.uniui-contact-filled[data-v-b25a9929]:before{content:"\e695"}.uniui-chatboxes[data-v-b25a9929]:before{content:"\e696"}.uniui-chatbubble[data-v-b25a9929]:before{content:"\e697"}.uniui-upload-filled[data-v-b25a9929]:before{content:"\e68e"}.uniui-upload[data-v-b25a9929]:before{content:"\e690"}.uniui-weixin[data-v-b25a9929]:before{content:"\e691"}.uniui-compose[data-v-b25a9929]:before{content:"\e67f"}.uniui-qq[data-v-b25a9929]:before{content:"\e680"}.uniui-download-filled[data-v-b25a9929]:before{content:"\e681"}.uniui-pyq[data-v-b25a9929]:before{content:"\e682"}.uniui-sound[data-v-b25a9929]:before{content:"\e684"}.uniui-trash-filled[data-v-b25a9929]:before{content:"\e685"}.uniui-sound-filled[data-v-b25a9929]:before{content:"\e686"}.uniui-trash[data-v-b25a9929]:before{content:"\e687"}.uniui-videocam-filled[data-v-b25a9929]:before{content:"\e689"}.uniui-spinner-cycle[data-v-b25a9929]:before{content:"\e68a"}.uniui-weibo[data-v-b25a9929]:before{content:"\e68b"}.uniui-videocam[data-v-b25a9929]:before{content:"\e68c"}.uniui-download[data-v-b25a9929]:before{content:"\e68d"}.uniui-help[data-v-b25a9929]:before{content:"\e679"}.uniui-navigate-filled[data-v-b25a9929]:before{content:"\e67a"}.uniui-plusempty[data-v-b25a9929]:before{content:"\e67b"}.uniui-smallcircle[data-v-b25a9929]:before{content:"\e67c"}.uniui-minus-filled[data-v-b25a9929]:before{content:"\e67d"}.uniui-micoff[data-v-b25a9929]:before{content:"\e67e"}.uniui-closeempty[data-v-b25a9929]:before{content:"\e66c"}.uniui-clear[data-v-b25a9929]:before{content:"\e66d"}.uniui-navigate[data-v-b25a9929]:before{content:"\e66e"}.uniui-minus[data-v-b25a9929]:before{content:"\e66f"}.uniui-image[data-v-b25a9929]:before{content:"\e670"}.uniui-mic[data-v-b25a9929]:before{content:"\e671"}.uniui-paperplane[data-v-b25a9929]:before{content:"\e672"}.uniui-close[data-v-b25a9929]:before{content:"\e673"}.uniui-help-filled[data-v-b25a9929]:before{content:"\e674"}.uniui-paperplane-filled[data-v-b25a9929]:before{content:"\e675"}.uniui-plus[data-v-b25a9929]:before{content:"\e676"}.uniui-mic-filled[data-v-b25a9929]:before{content:"\e677"}.uniui-image-filled[data-v-b25a9929]:before{content:"\e678"}.uniui-locked-filled[data-v-b25a9929]:before{content:"\e668"}.uniui-info[data-v-b25a9929]:before{content:"\e669"}.uniui-locked[data-v-b25a9929]:before{content:"\e66b"}.uniui-camera-filled[data-v-b25a9929]:before{content:"\e658"}.uniui-chat-filled[data-v-b25a9929]:before{content:"\e659"}.uniui-camera[data-v-b25a9929]:before{content:"\e65a"}.uniui-circle[data-v-b25a9929]:before{content:"\e65b"}.uniui-checkmarkempty[data-v-b25a9929]:before{content:"\e65c"}.uniui-chat[data-v-b25a9929]:before{content:"\e65d"}.uniui-circle-filled[data-v-b25a9929]:before{content:"\e65e"}.uniui-flag[data-v-b25a9929]:before{content:"\e65f"}.uniui-flag-filled[data-v-b25a9929]:before{content:"\e660"}.uniui-gear-filled[data-v-b25a9929]:before{content:"\e661"}.uniui-home[data-v-b25a9929]:before{content:"\e662"}.uniui-home-filled[data-v-b25a9929]:before{content:"\e663"}.uniui-gear[data-v-b25a9929]:before{content:"\e664"}.uniui-smallcircle-filled[data-v-b25a9929]:before{content:"\e665"}.uniui-map-filled[data-v-b25a9929]:before{content:"\e666"}.uniui-map[data-v-b25a9929]:before{content:"\e667"}.uniui-refresh-filled[data-v-b25a9929]:before{content:"\e656"}.uniui-refresh[data-v-b25a9929]:before{content:"\e657"}.uniui-cloud-upload[data-v-b25a9929]:before{content:"\e645"}.uniui-cloud-download-filled[data-v-b25a9929]:before{content:"\e646"}.uniui-cloud-download[data-v-b25a9929]:before{content:"\e647"}.uniui-cloud-upload-filled[data-v-b25a9929]:before{content:"\e648"}.uniui-redo[data-v-b25a9929]:before{content:"\e64a"}.uniui-images-filled[data-v-b25a9929]:before{content:"\e64b"}.uniui-undo-filled[data-v-b25a9929]:before{content:"\e64c"}.uniui-more[data-v-b25a9929]:before{content:"\e64d"}.uniui-more-filled[data-v-b25a9929]:before{content:"\e64e"}.uniui-undo[data-v-b25a9929]:before{content:"\e64f"}.uniui-images[data-v-b25a9929]:before{content:"\e650"}.uniui-paperclip[data-v-b25a9929]:before{content:"\e652"}.uniui-settings[data-v-b25a9929]:before{content:"\e653"}.uniui-search[data-v-b25a9929]:before{content:"\e654"}.uniui-redo-filled[data-v-b25a9929]:before{content:"\e655"}.uniui-list[data-v-b25a9929]:before{content:"\e644"}.uniui-mail-open-filled[data-v-b25a9929]:before{content:"\e63a"}.uniui-hand-down-filled[data-v-b25a9929]:before{content:"\e63c"}.uniui-hand-down[data-v-b25a9929]:before{content:"\e63d"}.uniui-hand-up-filled[data-v-b25a9929]:before{content:"\e63e"}.uniui-hand-up[data-v-b25a9929]:before{content:"\e63f"}.uniui-heart-filled[data-v-b25a9929]:before{content:"\e641"}.uniui-mail-open[data-v-b25a9929]:before{content:"\e643"}.uniui-heart[data-v-b25a9929]:before{content:"\e639"}.uniui-loop[data-v-b25a9929]:before{content:"\e633"}.uniui-pulldown[data-v-b25a9929]:before{content:"\e632"}.uniui-scan[data-v-b25a9929]:before{content:"\e62a"}.uniui-bars[data-v-b25a9929]:before{content:"\e627"}.uniui-checkbox[data-v-b25a9929]:before{content:"\e62b"}.uniui-checkbox-filled[data-v-b25a9929]:before{content:"\e62c"}.uniui-shop[data-v-b25a9929]:before{content:"\e62f"}.uniui-headphones[data-v-b25a9929]:before{content:"\e630"}.uniui-cart[data-v-b25a9929]:before{content:"\e631"}@font-face{font-family:uniicons;src:url(../../assets/uniicons.32e978a5.ttf)}.uni-icons[data-v-b25a9929]{font-family:uniicons;text-decoration:none;text-align:center}.chat-sidebar-container[data-v-eed4c646]{display:flex;flex-direction:column;align-items:center;width:100%;height:100%;background:linear-gradient(180deg,#faf9ff,#f3f2f8,#eeeef5);color:#000;box-sizing:border-box}.sidebar-header[data-v-eed4c646]{padding:1.25rem .9375rem .9375rem;width:100%;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;flex-direction:column;border-bottom:.03125rem solid rgba(170,170,255,.18)}.user-profile-card[data-v-eed4c646]{padding:.5rem .75rem;width:100%;display:flex;align-items:center;background:linear-gradient(135deg,#fff,#faf9ff);box-sizing:border-box;border-radius:.875rem;box-shadow:0 .125rem .625rem rgba(100,100,150,.08);border:.03125rem solid rgba(170,170,255,.12);transition:all .2s ease}.user-profile-card[data-v-eed4c646]:active{transform:scale(.98);box-shadow:0 .0625rem .3125rem rgba(100,100,150,.12)}.user-profile-card .left[data-v-eed4c646]{flex-shrink:0;display:flex;justify-content:center;align-items:center;margin-right:.5rem}.user-profile-card .left .avatar-preview[data-v-eed4c646]{display:flex;justify-content:center;align-items:center;width:3.125rem;height:3.125rem;border-radius:50%;overflow:hidden;border:.09375rem solid rgba(170,170,255,.3);box-shadow:0 .0625rem .25rem rgba(0,0,0,.06)}.user-profile-card .left .avatar-preview uni-image[data-v-eed4c646]{width:100%;height:100%;object-fit:cover}.user-profile-card .left .avatar-placeholder[data-v-eed4c646]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:50%;width:3.125rem;height:3.125rem;background:linear-gradient(135deg,#f5f3ff,#ede9fe)}.user-profile-card .center[data-v-eed4c646]{flex:1;height:0;display:flex;flex-direction:column;align-items:start;justify-content:center}.user-profile-card .center uni-text[data-v-eed4c646]:first-child{font-size:.6875rem;color:#999;margin-bottom:.0625rem}.user-profile-card .center uni-text[data-v-eed4c646]:last-child{font-size:.9375rem;font-weight:600;color:#1a1a2e}.user-profile-card .right[data-v-eed4c646]{flex-shrink:0;margin-left:.3125rem;display:flex;align-items:center;background:rgba(16,185,129,.06);padding:.25rem .5rem;border-radius:.625rem}.user-profile-card .right .status-dot[data-v-eed4c646]{width:.375rem;height:.375rem;border-radius:50%;background-color:#10b981;margin-right:.3125rem;box-shadow:0 0 .25rem rgba(16,185,129,.5);animation:statusDotPulse-eed4c646 2s ease-in-out infinite}@keyframes statusDotPulse-eed4c646{0%,to{box-shadow:0 0 .25rem rgba(16,185,129,.5);transform:scale(1)}50%{box-shadow:0 0 .5rem rgba(16,185,129,.6);transform:scale(1.15)}}.user-profile-card .right .status-text uni-text[data-v-eed4c646]{font-size:.6875rem;color:#059669;font-weight:500}.new-chat-btn[data-v-eed4c646]{margin-top:.75rem;width:100%;padding:.8125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,#6c63ff,#4a45d1);border-radius:.75rem;box-shadow:0 .1875rem .625rem rgba(108,99,255,.3);transition:all .2s ease}.new-chat-btn[data-v-eed4c646]:active{transform:scale(.97);box-shadow:0 .09375rem .3125rem rgba(108,99,255,.2)}.new-chat-btn uni-text[data-v-eed4c646]{font-size:.875rem;font-weight:600;color:#fff;letter-spacing:.03125rem}.chat-history[data-v-eed4c646]{width:100%;padding:.625rem 0;box-sizing:border-box;flex:1;height:0;overflow-y:auto;overflow-x:hidden}.chat-history[data-v-eed4c646]::-webkit-scrollbar{width:.1875rem}.chat-history[data-v-eed4c646]::-webkit-scrollbar-thumb{background:rgba(108,99,255,.25);border-radius:.09375rem}.chat-history[data-v-eed4c646]::-webkit-scrollbar-track{background:transparent}.history-header[data-v-eed4c646]{width:100%;padding:.625rem .9375rem;box-sizing:border-box;border-bottom:.03125rem solid rgba(170,170,255,.15);display:flex;justify-content:space-between;align-items:center}.history-header .history-title-section[data-v-eed4c646]{display:flex;flex-direction:column}.history-header .history-title-section uni-text[data-v-eed4c646]:first-child{font-size:1rem;font-weight:700;color:#1a1a2e}.history-header .history-title-section uni-text[data-v-eed4c646]:last-child{font-size:.6875rem;color:#999;margin-top:.0625rem}.history-header .history-management[data-v-eed4c646]{display:flex}.history-header .history-management .history-management-btn[data-v-eed4c646]{margin-left:.5rem;width:1.75rem;height:1.75rem;display:flex;justify-content:center;align-items:center;font-size:.8125rem;background-color:rgba(221,221,221,.4);border-radius:.4375rem;transition:all .15s ease}.history-header .history-management .history-management-btn[data-v-eed4c646]:active{transform:scale(.9)}.history-header .history-management .icon-jia-style[data-v-eed4c646]{background:rgba(16,185,129,.12);color:#059669}.history-header .history-management .icon-duoxuan-style[data-v-eed4c646]{color:#666}.history-header .history-management .icon-saochu-style[data-v-eed4c646]{color:#ff4d4f}.history-header .history-management .icon-quxiao-style[data-v-eed4c646]{color:#6c63ff;box-sizing:border-box}.history-header .history-management .icon-total_selection-style[data-v-eed4c646]{color:#666}.history-header .history-management .icon-total_selection-style.active[data-v-eed4c646]{color:#6c63ff;background:rgba(108,99,255,.12)}.history-header .history-management .icon-shanchu-style[data-v-eed4c646]{color:#ff4d4f}.history-search-wrap[data-v-eed4c646]{display:flex;flex-direction:column;width:100%;padding:.5rem .9375rem .1875rem;box-sizing:border-box}.history-search-wrap .history-search-inner[data-v-eed4c646]{display:flex;width:100%;padding:.375rem .6875rem;box-sizing:border-box;align-items:center;background-color:rgba(255,255,255,.6);border-radius:.875rem;border:.0625rem solid transparent;transition:all .25s ease}.history-search-wrap .history-search-inner .search-icon[data-v-eed4c646]{color:#999!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner .chat-search-icon[data-v-eed4c646]{color:#6c63ff!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner uni-input[data-v-eed4c646]{margin-left:.375rem;box-sizing:border-box;font-size:.8125rem;color:#333}.history-search-wrap .history-search-inner uni-input[data-v-eed4c646]::-webkit-input-placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner uni-input[data-v-eed4c646]::placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner.has-value[data-v-eed4c646]{background-color:#fff;border-color:#6c63ff;box-shadow:0 0 0 .09375rem rgba(108,99,255,.08)}.chat-history-list[data-v-eed4c646]{padding:.3125rem .9375rem}.chat-history-list .chat-history-card[data-v-eed4c646]{display:flex;align-items:center;border:.04688rem solid rgba(108,99,255,.25);background:linear-gradient(135deg,#fff,#faf9ff);border-radius:.75rem;padding:.75rem;margin-top:.375rem;box-sizing:border-box;transition:all .2s ease}.chat-history-list .chat-history-card[data-v-eed4c646]:active{transform:scale(.98)}.chat-history-list .is-select-chat[data-v-eed4c646]{border-color:#6c63ff;box-shadow:0 .125rem .5rem rgba(108,99,255,.15);background:linear-gradient(135deg,rgba(108,99,255,.06),rgba(108,99,255,.02))}.chat-history-list .history-chat-checkbox[data-v-eed4c646]{width:1.125rem;height:1.125rem;border-radius:.3125rem;display:flex;justify-content:center;align-items:center;border:.0625rem solid rgba(108,99,255,.5);margin-right:.375rem;flex-shrink:0}.chat-history-list .history-chat-avatar[data-v-eed4c646]{width:2rem;height:2rem;border-radius:.5625rem;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,rgba(108,99,255,.3),rgba(108,99,255,.15));margin-left:0;margin-right:.5rem;box-sizing:border-box;flex-shrink:0}.chat-history-list .friend-avatar[data-v-eed4c646]{display:flex;justify-content:center;align-items:center;border-radius:.5625rem;width:100%;height:100%;overflow:hidden}.chat-page[data-v-f61b4f79]{position:relative;background:linear-gradient(180deg,#f5f4ff,#f8f7fc,#faf9fe)}.mask[data-v-f61b4f79]{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.45);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:998;animation:fadeIn-f61b4f79 .3s ease}@keyframes fadeIn-f61b4f79{0%{opacity:0}to{opacity:1}}.chat-sidebar[data-v-f61b4f79]{position:fixed;top:0;left:0;width:calc(100% - 3.125rem);max-width:21.25rem;height:100%;transform:translate(-100%);transition:transform .4s cubic-bezier(.4,0,.2,1);z-index:999;box-shadow:.25rem 0 .9375rem rgba(0,0,0,.06)}.chat-sidebar.sidebar-show[data-v-f61b4f79]{transform:translate(0)}.ncd-overlay[data-v-f61b4f79]{position:fixed;width:100%;height:100%;left:0;top:0;display:flex;align-items:center;justify-content:center;background-color:rgba(30,30,50,.35);z-index:9999;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:fadeIn-f61b4f79 .25s ease}.ncd-card[data-v-f61b4f79]{width:90%;height:auto;background-color:#fff;border-radius:1.25rem;padding:1.5625rem 1.25rem;box-sizing:border-box;box-shadow:0 .625rem 1.875rem rgba(100,100,200,.12);animation:slideUp-f61b4f79 .35s ease}@keyframes slideUp-f61b4f79{0%{opacity:0;transform:translateY(1.25rem) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.ncd-header[data-v-f61b4f79]{display:flex;justify-content:center;align-items:center;width:100%}.ncd-title-eng[data-v-f61b4f79]{display:flex;flex-shrink:0;background:linear-gradient(135deg,#6c63ff,#4a45d1);padding:.1875rem .4375rem;border-radius:.375rem;justify-content:center;align-items:center}.ncd-title-eng uni-text[data-v-f61b4f79]{color:#fff;font-weight:700;font-size:.875rem}.ncd-title-zh[data-v-f61b4f79]{margin-left:.3125rem;display:flex;flex:1;height:0;font-size:1.125rem;font-weight:700;color:#1a1a2e}.ncd-header uni-icons[data-v-f61b4f79]{display:flex;flex-shrink:0}.ncd-options[data-v-f61b4f79]{display:flex;flex-direction:column;width:100%;justify-content:center;align-items:center;margin-top:.625rem;box-sizing:border-box}.ncd-option[data-v-f61b4f79]{width:100%;background:#f8fafc;padding:1.25rem .9375rem;display:flex;border-radius:.875rem;margin-top:.625rem;box-sizing:border-box;justify-content:center;align-items:center;transition:all .2s ease;border:.0625rem solid transparent}.ncd-option[data-v-f61b4f79]:active{transform:scale(.98)}.ncd-normal[data-v-f61b4f79]{border:.0625rem solid #e8edf3}.ncd-normal[data-v-f61b4f79]:active{border-color:#c4c8d0;background:#f0f3f7}.ncd-opt-icon[data-v-f61b4f79]{width:2.5rem;height:2.5rem;border-radius:.75rem;padding:.3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;align-items:center}.ncd-normal .ncd-opt-icon[data-v-f61b4f79]{background:linear-gradient(135deg,#e2e8f0,#d9dfe8)}.ncd-opt-title[data-v-f61b4f79]{display:flex;flex-direction:column;margin:0 .5rem;box-sizing:border-box;justify-content:center;flex:1;height:0}.ncd-opt-title-1[data-v-f61b4f79]{font-size:.9375rem;font-weight:600;color:#1a1a2e}.ncd-opt-title-2[data-v-f61b4f79]{font-size:.75rem;color:#888;margin-top:.125rem}.arrow-right-style[data-v-f61b4f79]{display:flex;flex-shrink:0;font-weight:700!important;font-size:.875rem!important;color:#999!important}.ncd-intelligence[data-v-f61b4f79]{background:linear-gradient(135deg,#f8f5ff,#efe8ff);border:.0625rem solid #c4b5fd}.ncd-intelligence[data-v-f61b4f79]:active{border-color:#a78bfa;background:linear-gradient(135deg,#f3efff,#e8dcff)}.ncd-intelligence .ncd-opt-icon[data-v-f61b4f79]{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.close-option-card[data-v-f61b4f79]{width:100%;display:flex;justify-content:flex-end}.close-option-card .iconfont[data-v-f61b4f79]{color:#ff4d4f!important}.chat-option-list[data-v-f61b4f79]{display:flex;width:100%;flex-direction:column}.chat-option[data-v-f61b4f79]{display:flex;justify-content:flex-start;align-items:center;margin:.3125rem 0;padding:.5rem .625rem;border-radius:.625rem;box-sizing:border-box;transition:all .15s ease}.chat-option[data-v-f61b4f79]:active{background:rgba(170,170,255,.08)}.chat-option .iconfont[data-v-f61b4f79]{font-size:30px}.option-name[data-v-f61b4f79]{font-size:17px;font-weight:500;margin-left:12px;box-sizing:border-box;color:#333}.chat-wrapper[data-v-f61b4f79]{position:relative;width:100%;height:100%;display:flex;flex-direction:column}.chat-hearder[data-v-f61b4f79]{width:100%;height:auto;padding:.5rem .3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:flex-start;align-items:center;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.8));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:.03125rem solid rgba(170,170,255,.15)}.chat-btn-group[data-v-f61b4f79]{width:100%;height:auto;display:flex;justify-content:flex-start;align-items:center}.head-btn[data-v-f61b4f79]{padding:.375rem .4375rem;border:.04688rem solid rgba(170,170,255,.3);border-radius:.5625rem;margin:0 .3125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,.7);transition:all .2s ease}.head-btn[data-v-f61b4f79]:active{background:rgba(170,170,255,.1);transform:scale(.95)}.chat-btn-group .head-btn:nth-child(1) .iconfont[data-v-f61b4f79]{color:#a78bfa}.chat-btn-group .head-btn:nth-child(2) .iconfont[data-v-f61b4f79]{color:#6495ed}.head-btn .iconfont[data-v-f61b4f79]{font-size:1.5rem}.log-out .iconfont[data-v-f61b4f79]{color:#ff4d4f}.main-chat[data-v-f61b4f79]{display:flex;flex:1;height:0;width:100%;flex-direction:column}.load-more-tip[data-v-f61b4f79]{text-align:center;padding:.625rem 0;font-size:.75rem;color:#999}.chat-messages[data-v-f61b4f79]{display:flex;flex:1;height:0;width:100%;padding:.625rem .75rem;box-sizing:border-box;flex-direction:column;overflow:auto}.chat-messages[data-v-f61b4f79]::-webkit-scrollbar{width:.1875rem}.chat-messages[data-v-f61b4f79]::-webkit-scrollbar-thumb{background:rgba(170,170,255,.3);border-radius:.09375rem}.chat-messages[data-v-f61b4f79]::-webkit-scrollbar-track{background:transparent}.chat-message[data-v-f61b4f79]{display:flex;align-items:flex-start;margin:.4375rem 0;box-sizing:border-box;animation:msgFadeIn-f61b4f79 .3s ease}@keyframes msgFadeIn-f61b4f79{0%{opacity:0;transform:translateY(.3125rem)}to{opacity:1;transform:translateY(0)}}.message-user[data-v-f61b4f79]{flex-direction:row-reverse}.chat-avatar[data-v-f61b4f79]{display:flex;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;box-sizing:border-box;border-radius:.5rem;margin-right:.375rem;flex-shrink:0}.friend-avatar[data-v-f61b4f79]{display:flex;justify-content:center;align-items:center;border-radius:.5rem;width:100%;height:100%;overflow:hidden}.chat-avatar-user[data-v-f61b4f79]{margin-right:0;margin-left:.375rem}.chat-content[data-v-f61b4f79]{width:auto;max-width:calc(100% - 3.75rem);height:auto;padding:.625rem .75rem;box-sizing:border-box;border-radius:.75rem;overflow-x:auto;font-size:1rem;line-height:1.65;position:relative;box-shadow:0 .0625rem .25rem rgba(0,0,0,.04);background:#fff;border:.03125rem solid #eeeef5}.chat-content-user[data-v-f61b4f79]{background:linear-gradient(135deg,#c4b5fd,#b8a5f0);color:#fff;border:none;box-shadow:0 .125rem .375rem rgba(170,170,255,.3);border-bottom-right-radius:.25rem}.chat-content-assistant[data-v-f61b4f79]{max-width:100%}.chat-content[data-v-f61b4f79]:not(.chat-content-user){border-bottom-left-radius:.25rem}.message-image[data-v-f61b4f79]{max-width:9.375rem;border-radius:.375rem;margin:.25rem 0}.message-file-list[data-v-f61b4f79]{margin:.3125rem 0}.file-item[data-v-f61b4f79]{margin:.1875rem 0}.message-file[data-v-f61b4f79]{display:flex;align-items:center;padding:.4375rem .5625rem;background:rgba(255,255,255,.85);border-radius:.375rem;max-width:10.9375rem;border:.03125rem solid #eeeef5}.chat-content-user .message-file[data-v-f61b4f79]{background:rgba(255,255,255,.25);border-color:rgba(255,255,255,.3)}.file-icon[data-v-f61b4f79]{font-size:1rem;margin-right:.375rem}.file-name[data-v-f61b4f79]{flex:1;font-size:.8125rem;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-content-user .file-name[data-v-f61b4f79]{color:#fff}.file-size[data-v-f61b4f79]{font-size:.6875rem;color:#999;margin-left:.25rem}.chat-content-user .file-size[data-v-f61b4f79]{color:rgba(255,255,255,.7)}.chat-interactive-container[data-v-f61b4f79]{display:flex;flex-shrink:0;width:100%;padding:.5rem .75rem .75rem;box-sizing:border-box;flex-direction:column;background:linear-gradient(180deg,rgba(255,255,255,.7),rgba(255,255,255,.95));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:.03125rem solid rgba(170,170,255,.12)}.chat-interactive-group[data-v-f61b4f79]{display:flex;width:100%;padding:.375rem 0;box-sizing:border-box;justify-content:flex-start;align-items:center}.chat-interactive-btn[data-v-f61b4f79]{display:flex;align-items:center;justify-content:center;border:.04688rem solid #d4d4e0;border-radius:.5rem;padding:.375rem .625rem;margin-right:.5rem;box-sizing:border-box;font-size:.75rem;color:#666;background:#fff;transition:all .2s ease}.chat-interactive-btn[data-v-f61b4f79]:active{border-color:#aaf;background:rgba(170,170,255,.08);transform:scale(.96)}.chat-interactive-btn.disabled[data-v-f61b4f79]{opacity:.45;pointer-events:none;border-color:#e0dfe8;color:#aaa}.chat-input-container[data-v-f61b4f79]{display:flex;width:100%;padding:.25rem .25rem .25rem .75rem;box-sizing:border-box;border:.0625rem solid #e0dff5;border-radius:.9375rem;align-items:flex-end;background:#fff;transition:all .25s ease;box-shadow:0 .0625rem .375rem rgba(100,100,150,.06)}.chat-input-container[data-v-f61b4f79]:focus-within{border-color:#aaf;box-shadow:0 0 0 .125rem rgba(170,170,255,.12),0 .125rem .5rem rgba(100,100,150,.08)}.message-input[data-v-f61b4f79]{flex:1;max-height:4.6875rem;min-height:1.875rem;overflow-y:auto;margin:.125rem .3125rem;box-sizing:border-box;font-size:.875rem;color:#333}.message-input[data-v-f61b4f79]::-webkit-input-placeholder{color:#c0c0d0}.message-input[data-v-f61b4f79]::placeholder{color:#c0c0d0}.chat-input-container.input-disabled[data-v-f61b4f79]{border-color:#eae9f2;background:#f8f7fc}.message-input[disabled][data-v-f61b4f79]{opacity:.5;color:#bbb}.input-btn-group.disabled[data-v-f61b4f79]{opacity:.4;pointer-events:none;background:#c0c0d0;box-shadow:none}.stop-message-btn[data-v-f61b4f79]{background:linear-gradient(135deg,#ff4d4f,#ff6b6b);box-shadow:0 .125rem .375rem rgba(255,77,79,.35);animation:pulseStop-f61b4f79 1.8s ease-in-out infinite}.stop-message-btn[data-v-f61b4f79]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(255,77,79,.25)}.input-btn-group[data-v-f61b4f79]{flex-shrink:0;display:flex;justify-content:center;align-items:center;padding:.4375rem;box-sizing:border-box;background:linear-gradient(135deg,#6c63ff,#8b7cfb);border-radius:.6875rem;width:2.25rem;height:2.25rem;box-shadow:0 .125rem .375rem rgba(108,99,255,.35);transition:all .2s ease}.input-btn-group[data-v-f61b4f79]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(108,99,255,.25)}.input-btn-group .iconfont[data-v-f61b4f79]{color:#fff;font-size:1.125rem}.ai-card[data-v-f61b4f79]{width:auto;border:.0625rem solid rgba(64,158,255,.3);box-shadow:0 .25rem .9375rem rgba(170,170,255,.2);border-radius:1rem!important}.thinking-content[data-v-f61b4f79]{display:flex;flex-direction:column;align-items:center;width:100%}.loading-dots[data-v-f61b4f79]{display:flex;width:100%;align-items:center;justify-content:center}.dot[data-v-f61b4f79]{width:.4375rem;height:.4375rem;margin:.1875rem;border-radius:50%;background:linear-gradient(135deg,#409eff,#6db2ff);animation:dotBlink-f61b4f79 1.2s infinite ease-in-out}@keyframes dotBlink-f61b4f79{0%,to{opacity:.3;transform:scale(.7)}50%{opacity:1;transform:scale(1.2)}}.dot[data-v-f61b4f79]:nth-child(2){animation-delay:.25s}.dot[data-v-f61b4f79]:nth-child(3){animation-delay:.5s}.thinking-text[data-v-f61b4f79]{margin:.625rem 0;font-size:20px;font-weight:600;color:#409eff}.stop-thinking-btn[data-v-f61b4f79]{display:flex;align-items:center;justify-content:center;width:100%;padding:.6875rem 0;margin-top:.625rem;border-radius:.75rem;font-size:.875rem;font-weight:600;color:#ff4d4f;background:linear-gradient(135deg,rgba(255,77,79,.06),rgba(255,77,79,.02));border:.0625rem solid rgba(255,77,79,.35);transition:all .2s ease;animation:pulseStop-f61b4f79 2s ease-in-out infinite}.stop-thinking-btn[data-v-f61b4f79]:active{background:rgba(255,77,79,.12);border-color:#ff4d4f;transform:scale(.97)}@keyframes pulseStop-f61b4f79{0%,to{border-color:rgba(255,77,79,.35)}50%{border-color:rgba(255,77,79,.65)}}.image-list[data-v-f61b4f79]{width:100%;padding:.25rem 0 .0625rem;animation:fadeIn-f61b4f79 .25s ease}.image-tags[data-v-f61b4f79]{display:flex;flex-wrap:wrap;gap:.3125rem}.image-tag[data-v-f61b4f79]{display:flex;align-items:center;padding:.1875rem .25rem .1875rem .5rem;background:linear-gradient(135deg,rgba(108,99,255,.07),rgba(108,99,255,.04));border:.03125rem solid rgba(108,99,255,.18);border-radius:.625rem;max-width:6.875rem;transition:all .2s ease;box-shadow:0 .03125rem .125rem rgba(108,99,255,.04)}.image-tag[data-v-f61b4f79]:active{transform:scale(.96);border-color:rgba(108,99,255,.4);background:rgba(108,99,255,.1)}.tag-name[data-v-f61b4f79]{font-size:.6875rem;color:#5a52d5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;font-weight:500}.tag-close[data-v-f61b4f79]{flex-shrink:0;width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;font-size:.875rem;color:#bbb;margin-left:.1875rem;border-radius:50%;line-height:1;transition:all .15s ease}.tag-close[data-v-f61b4f79]:active{color:#fff;background:#ff4d4f;transform:scale(1.1)}.message-detail-card[data-v-f61b4f79]{width:90%;max-height:80vh;display:flex;flex-direction:column;border-radius:1.25rem;padding:1.25rem 1.125rem}.message-detail-content[data-v-f61b4f79]{flex:1;min-height:6.25rem;max-height:60vh;overflow-y:auto;padding:.5rem 0;font-size:.875rem;line-height:1.7;color:#333;white-space:pre-wrap;word-break:break-all}.chat-content h1{font-size:1.3125rem;line-height:1.4;margin:.5rem 0 .3125rem}.chat-content h2{font-size:1.1875rem;line-height:1.4;margin:.4375rem 0 .25rem}.chat-content h3{font-size:1.125rem;line-height:1.4;margin:.375rem 0 .25rem}.chat-content h4,.chat-content h5,.chat-content h6{font-size:1.0625rem;line-height:1.5;margin:.3125rem 0 .1875rem}.chat-content p,.chat-content uni-text,.chat-content span{font-size:1.1875rem!important;line-height:1.6;margin:.25rem 0}.chat-content .chat-inline-link{color:#3b86ff!important;text-decoration:underline;word-break:break-all}.bubble-loading-dots{display:flex;align-items:center;justify-content:flex-start;padding:.3125rem 0}.bubble-dot{width:.375rem;height:.375rem;border-radius:50%;background:#a0a0b8;margin-right:.3125rem;animation:bubbleDotBlink 1.2s infinite ease-in-out}.bubble-dot:nth-child(2){animation-delay:.3s}.bubble-dot:nth-child(3){animation-delay:.6s}@keyframes bubbleDotBlink{0%,to{opacity:.25;transform:scale(.7)}50%{opacity:1;transform:scale(1.1)}}.detail-links-section{margin-top:.75rem;padding-top:.75rem;border-top:.03125rem solid #eee}.detail-links-title{font-size:.9375rem;font-weight:600;color:#666;margin-bottom:.5rem}.detail-link-item{padding:.5rem .625rem;background:#f5f7fa;border-radius:.375rem;margin-bottom:.375rem}.link-text{font-size:.875rem;color:#007aff;word-break:break-all}.detail-empty{display:flex;align-items:center;justify-content:center;padding:1.25rem 0;font-size:.875rem;color:#999}.download-toast-overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;z-index:10001;pointer-events:none}.download-toast-card{display:flex;align-items:center;justify-content:center;padding:.75rem 1.25rem;border-radius:.75rem;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 .375rem 1.25rem rgba(0,0,0,.15);animation:toastFadeIn .25s ease;pointer-events:auto}@keyframes toastFadeIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.download-toast-loading{background:rgba(40,40,60,.92)}.download-toast-success{background:rgba(40,60,40,.92)}.download-toast-error{background:rgba(60,30,30,.92)}.download-toast-icon{font-size:1.125rem;color:#fff;margin-right:.5rem;display:flex;align-items:center}.download-toast-card.download-toast-loading .download-toast-icon{gap:.25rem}.toast-dot{width:.375rem;height:.375rem;border-radius:50%;background:#fff;animation:toastDotBlink 1.2s infinite ease-in-out}.toast-dot:nth-child(2){animation-delay:.3s}.toast-dot:nth-child(3){animation-delay:.6s}@keyframes toastDotBlink{0%,to{opacity:.3;transform:scale(.75)}50%{opacity:1;transform:scale(1.2)}}.download-toast-text{font-size:.875rem;color:#fff;font-weight:500} +.uniui-cart-filled[data-v-b25a9929]:before{content:"\e6d0"}.uniui-gift-filled[data-v-b25a9929]:before{content:"\e6c4"}.uniui-color[data-v-b25a9929]:before{content:"\e6cf"}.uniui-wallet[data-v-b25a9929]:before{content:"\e6b1"}.uniui-settings-filled[data-v-b25a9929]:before{content:"\e6ce"}.uniui-auth-filled[data-v-b25a9929]:before{content:"\e6cc"}.uniui-shop-filled[data-v-b25a9929]:before{content:"\e6cd"}.uniui-staff-filled[data-v-b25a9929]:before{content:"\e6cb"}.uniui-vip-filled[data-v-b25a9929]:before{content:"\e6c6"}.uniui-plus-filled[data-v-b25a9929]:before{content:"\e6c7"}.uniui-folder-add-filled[data-v-b25a9929]:before{content:"\e6c8"}.uniui-color-filled[data-v-b25a9929]:before{content:"\e6c9"}.uniui-tune-filled[data-v-b25a9929]:before{content:"\e6ca"}.uniui-calendar-filled[data-v-b25a9929]:before{content:"\e6c0"}.uniui-notification-filled[data-v-b25a9929]:before{content:"\e6c1"}.uniui-wallet-filled[data-v-b25a9929]:before{content:"\e6c2"}.uniui-medal-filled[data-v-b25a9929]:before{content:"\e6c3"}.uniui-fire-filled[data-v-b25a9929]:before{content:"\e6c5"}.uniui-refreshempty[data-v-b25a9929]:before{content:"\e6bf"}.uniui-location-filled[data-v-b25a9929]:before{content:"\e6af"}.uniui-person-filled[data-v-b25a9929]:before{content:"\e69d"}.uniui-personadd-filled[data-v-b25a9929]:before{content:"\e698"}.uniui-arrowthinleft[data-v-b25a9929]:before{content:"\e6d2"}.uniui-arrowthinup[data-v-b25a9929]:before{content:"\e6d3"}.uniui-arrowthindown[data-v-b25a9929]:before{content:"\e6d4"}.uniui-back[data-v-b25a9929]:before{content:"\e6b9"}.uniui-forward[data-v-b25a9929]:before{content:"\e6ba"}.uniui-arrow-right[data-v-b25a9929]:before{content:"\e6bb"}.uniui-arrow-left[data-v-b25a9929]:before{content:"\e6bc"}.uniui-arrow-up[data-v-b25a9929]:before{content:"\e6bd"}.uniui-arrow-down[data-v-b25a9929]:before{content:"\e6be"}.uniui-arrowthinright[data-v-b25a9929]:before{content:"\e6d1"}.uniui-down[data-v-b25a9929]:before{content:"\e6b8"}.uniui-bottom[data-v-b25a9929]:before{content:"\e6b8"}.uniui-arrowright[data-v-b25a9929]:before{content:"\e6d5"}.uniui-right[data-v-b25a9929]:before{content:"\e6b5"}.uniui-up[data-v-b25a9929]:before{content:"\e6b6"}.uniui-top[data-v-b25a9929]:before{content:"\e6b6"}.uniui-left[data-v-b25a9929]:before{content:"\e6b7"}.uniui-arrowup[data-v-b25a9929]:before{content:"\e6d6"}.uniui-eye[data-v-b25a9929]:before{content:"\e651"}.uniui-eye-filled[data-v-b25a9929]:before{content:"\e66a"}.uniui-eye-slash[data-v-b25a9929]:before{content:"\e6b3"}.uniui-eye-slash-filled[data-v-b25a9929]:before{content:"\e6b4"}.uniui-info-filled[data-v-b25a9929]:before{content:"\e649"}.uniui-reload[data-v-b25a9929]:before{content:"\e6b2"}.uniui-micoff-filled[data-v-b25a9929]:before{content:"\e6b0"}.uniui-map-pin-ellipse[data-v-b25a9929]:before{content:"\e6ac"}.uniui-map-pin[data-v-b25a9929]:before{content:"\e6ad"}.uniui-location[data-v-b25a9929]:before{content:"\e6ae"}.uniui-starhalf[data-v-b25a9929]:before{content:"\e683"}.uniui-star[data-v-b25a9929]:before{content:"\e688"}.uniui-star-filled[data-v-b25a9929]:before{content:"\e68f"}.uniui-calendar[data-v-b25a9929]:before{content:"\e6a0"}.uniui-fire[data-v-b25a9929]:before{content:"\e6a1"}.uniui-medal[data-v-b25a9929]:before{content:"\e6a2"}.uniui-font[data-v-b25a9929]:before{content:"\e6a3"}.uniui-gift[data-v-b25a9929]:before{content:"\e6a4"}.uniui-link[data-v-b25a9929]:before{content:"\e6a5"}.uniui-notification[data-v-b25a9929]:before{content:"\e6a6"}.uniui-staff[data-v-b25a9929]:before{content:"\e6a7"}.uniui-vip[data-v-b25a9929]:before{content:"\e6a8"}.uniui-folder-add[data-v-b25a9929]:before{content:"\e6a9"}.uniui-tune[data-v-b25a9929]:before{content:"\e6aa"}.uniui-auth[data-v-b25a9929]:before{content:"\e6ab"}.uniui-person[data-v-b25a9929]:before{content:"\e699"}.uniui-email-filled[data-v-b25a9929]:before{content:"\e69a"}.uniui-phone-filled[data-v-b25a9929]:before{content:"\e69b"}.uniui-phone[data-v-b25a9929]:before{content:"\e69c"}.uniui-email[data-v-b25a9929]:before{content:"\e69e"}.uniui-personadd[data-v-b25a9929]:before{content:"\e69f"}.uniui-chatboxes-filled[data-v-b25a9929]:before{content:"\e692"}.uniui-contact[data-v-b25a9929]:before{content:"\e693"}.uniui-chatbubble-filled[data-v-b25a9929]:before{content:"\e694"}.uniui-contact-filled[data-v-b25a9929]:before{content:"\e695"}.uniui-chatboxes[data-v-b25a9929]:before{content:"\e696"}.uniui-chatbubble[data-v-b25a9929]:before{content:"\e697"}.uniui-upload-filled[data-v-b25a9929]:before{content:"\e68e"}.uniui-upload[data-v-b25a9929]:before{content:"\e690"}.uniui-weixin[data-v-b25a9929]:before{content:"\e691"}.uniui-compose[data-v-b25a9929]:before{content:"\e67f"}.uniui-qq[data-v-b25a9929]:before{content:"\e680"}.uniui-download-filled[data-v-b25a9929]:before{content:"\e681"}.uniui-pyq[data-v-b25a9929]:before{content:"\e682"}.uniui-sound[data-v-b25a9929]:before{content:"\e684"}.uniui-trash-filled[data-v-b25a9929]:before{content:"\e685"}.uniui-sound-filled[data-v-b25a9929]:before{content:"\e686"}.uniui-trash[data-v-b25a9929]:before{content:"\e687"}.uniui-videocam-filled[data-v-b25a9929]:before{content:"\e689"}.uniui-spinner-cycle[data-v-b25a9929]:before{content:"\e68a"}.uniui-weibo[data-v-b25a9929]:before{content:"\e68b"}.uniui-videocam[data-v-b25a9929]:before{content:"\e68c"}.uniui-download[data-v-b25a9929]:before{content:"\e68d"}.uniui-help[data-v-b25a9929]:before{content:"\e679"}.uniui-navigate-filled[data-v-b25a9929]:before{content:"\e67a"}.uniui-plusempty[data-v-b25a9929]:before{content:"\e67b"}.uniui-smallcircle[data-v-b25a9929]:before{content:"\e67c"}.uniui-minus-filled[data-v-b25a9929]:before{content:"\e67d"}.uniui-micoff[data-v-b25a9929]:before{content:"\e67e"}.uniui-closeempty[data-v-b25a9929]:before{content:"\e66c"}.uniui-clear[data-v-b25a9929]:before{content:"\e66d"}.uniui-navigate[data-v-b25a9929]:before{content:"\e66e"}.uniui-minus[data-v-b25a9929]:before{content:"\e66f"}.uniui-image[data-v-b25a9929]:before{content:"\e670"}.uniui-mic[data-v-b25a9929]:before{content:"\e671"}.uniui-paperplane[data-v-b25a9929]:before{content:"\e672"}.uniui-close[data-v-b25a9929]:before{content:"\e673"}.uniui-help-filled[data-v-b25a9929]:before{content:"\e674"}.uniui-paperplane-filled[data-v-b25a9929]:before{content:"\e675"}.uniui-plus[data-v-b25a9929]:before{content:"\e676"}.uniui-mic-filled[data-v-b25a9929]:before{content:"\e677"}.uniui-image-filled[data-v-b25a9929]:before{content:"\e678"}.uniui-locked-filled[data-v-b25a9929]:before{content:"\e668"}.uniui-info[data-v-b25a9929]:before{content:"\e669"}.uniui-locked[data-v-b25a9929]:before{content:"\e66b"}.uniui-camera-filled[data-v-b25a9929]:before{content:"\e658"}.uniui-chat-filled[data-v-b25a9929]:before{content:"\e659"}.uniui-camera[data-v-b25a9929]:before{content:"\e65a"}.uniui-circle[data-v-b25a9929]:before{content:"\e65b"}.uniui-checkmarkempty[data-v-b25a9929]:before{content:"\e65c"}.uniui-chat[data-v-b25a9929]:before{content:"\e65d"}.uniui-circle-filled[data-v-b25a9929]:before{content:"\e65e"}.uniui-flag[data-v-b25a9929]:before{content:"\e65f"}.uniui-flag-filled[data-v-b25a9929]:before{content:"\e660"}.uniui-gear-filled[data-v-b25a9929]:before{content:"\e661"}.uniui-home[data-v-b25a9929]:before{content:"\e662"}.uniui-home-filled[data-v-b25a9929]:before{content:"\e663"}.uniui-gear[data-v-b25a9929]:before{content:"\e664"}.uniui-smallcircle-filled[data-v-b25a9929]:before{content:"\e665"}.uniui-map-filled[data-v-b25a9929]:before{content:"\e666"}.uniui-map[data-v-b25a9929]:before{content:"\e667"}.uniui-refresh-filled[data-v-b25a9929]:before{content:"\e656"}.uniui-refresh[data-v-b25a9929]:before{content:"\e657"}.uniui-cloud-upload[data-v-b25a9929]:before{content:"\e645"}.uniui-cloud-download-filled[data-v-b25a9929]:before{content:"\e646"}.uniui-cloud-download[data-v-b25a9929]:before{content:"\e647"}.uniui-cloud-upload-filled[data-v-b25a9929]:before{content:"\e648"}.uniui-redo[data-v-b25a9929]:before{content:"\e64a"}.uniui-images-filled[data-v-b25a9929]:before{content:"\e64b"}.uniui-undo-filled[data-v-b25a9929]:before{content:"\e64c"}.uniui-more[data-v-b25a9929]:before{content:"\e64d"}.uniui-more-filled[data-v-b25a9929]:before{content:"\e64e"}.uniui-undo[data-v-b25a9929]:before{content:"\e64f"}.uniui-images[data-v-b25a9929]:before{content:"\e650"}.uniui-paperclip[data-v-b25a9929]:before{content:"\e652"}.uniui-settings[data-v-b25a9929]:before{content:"\e653"}.uniui-search[data-v-b25a9929]:before{content:"\e654"}.uniui-redo-filled[data-v-b25a9929]:before{content:"\e655"}.uniui-list[data-v-b25a9929]:before{content:"\e644"}.uniui-mail-open-filled[data-v-b25a9929]:before{content:"\e63a"}.uniui-hand-down-filled[data-v-b25a9929]:before{content:"\e63c"}.uniui-hand-down[data-v-b25a9929]:before{content:"\e63d"}.uniui-hand-up-filled[data-v-b25a9929]:before{content:"\e63e"}.uniui-hand-up[data-v-b25a9929]:before{content:"\e63f"}.uniui-heart-filled[data-v-b25a9929]:before{content:"\e641"}.uniui-mail-open[data-v-b25a9929]:before{content:"\e643"}.uniui-heart[data-v-b25a9929]:before{content:"\e639"}.uniui-loop[data-v-b25a9929]:before{content:"\e633"}.uniui-pulldown[data-v-b25a9929]:before{content:"\e632"}.uniui-scan[data-v-b25a9929]:before{content:"\e62a"}.uniui-bars[data-v-b25a9929]:before{content:"\e627"}.uniui-checkbox[data-v-b25a9929]:before{content:"\e62b"}.uniui-checkbox-filled[data-v-b25a9929]:before{content:"\e62c"}.uniui-shop[data-v-b25a9929]:before{content:"\e62f"}.uniui-headphones[data-v-b25a9929]:before{content:"\e630"}.uniui-cart[data-v-b25a9929]:before{content:"\e631"}@font-face{font-family:uniicons;src:url(../../assets/uniicons.32e978a5.ttf)}.uni-icons[data-v-b25a9929]{font-family:uniicons;text-decoration:none;text-align:center}.chat-sidebar-container[data-v-7630767e]{display:flex;flex-direction:column;align-items:center;width:100%;height:100%;background:linear-gradient(180deg,#faf9ff,#f3f2f8,#eeeef5);color:#000;box-sizing:border-box}.sidebar-header[data-v-7630767e]{padding:1.25rem .9375rem .9375rem;width:100%;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;flex-direction:column;border-bottom:.03125rem solid rgba(170,170,255,.18)}.user-profile-card[data-v-7630767e]{padding:.5rem .75rem;width:100%;display:flex;align-items:center;background:linear-gradient(135deg,#fff,#faf9ff);box-sizing:border-box;border-radius:.875rem;box-shadow:0 .125rem .625rem rgba(100,100,150,.08);border:.03125rem solid rgba(170,170,255,.12);transition:all .2s ease}.user-profile-card[data-v-7630767e]:active{transform:scale(.98);box-shadow:0 .0625rem .3125rem rgba(100,100,150,.12)}.user-profile-card .left[data-v-7630767e]{flex-shrink:0;display:flex;justify-content:center;align-items:center;margin-right:.5rem}.user-profile-card .left .avatar-preview[data-v-7630767e]{display:flex;justify-content:center;align-items:center;width:3.125rem;height:3.125rem;border-radius:50%;overflow:hidden;border:.09375rem solid rgba(170,170,255,.3);box-shadow:0 .0625rem .25rem rgba(0,0,0,.06)}.user-profile-card .left .avatar-preview uni-image[data-v-7630767e]{width:100%;height:100%;object-fit:cover}.user-profile-card .left .avatar-placeholder[data-v-7630767e]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:50%;width:3.125rem;height:3.125rem;background:linear-gradient(135deg,#f5f3ff,#ede9fe)}.user-profile-card .center[data-v-7630767e]{flex:1;height:0;display:flex;flex-direction:column;align-items:start;justify-content:center}.user-profile-card .center uni-text[data-v-7630767e]:first-child{font-size:.6875rem;color:#999;margin-bottom:.0625rem}.user-profile-card .center uni-text[data-v-7630767e]:last-child{font-size:.9375rem;font-weight:600;color:#1a1a2e}.user-profile-card .right[data-v-7630767e]{flex-shrink:0;margin-left:.3125rem;display:flex;align-items:center;background:rgba(16,185,129,.06);padding:.25rem .5rem;border-radius:.625rem}.user-profile-card .right .status-dot[data-v-7630767e]{width:.375rem;height:.375rem;border-radius:50%;background-color:#10b981;margin-right:.3125rem;box-shadow:0 0 .25rem rgba(16,185,129,.5);animation:statusDotPulse-7630767e 2s ease-in-out infinite}@keyframes statusDotPulse-7630767e{0%,to{box-shadow:0 0 .25rem rgba(16,185,129,.5);transform:scale(1)}50%{box-shadow:0 0 .5rem rgba(16,185,129,.6);transform:scale(1.15)}}.user-profile-card .right .status-text uni-text[data-v-7630767e]{font-size:.6875rem;color:#059669;font-weight:500}.new-chat-btn[data-v-7630767e]{margin-top:.75rem;width:100%;padding:.8125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,#6c63ff,#4a45d1);border-radius:.75rem;box-shadow:0 .1875rem .625rem rgba(108,99,255,.3);transition:all .2s ease}.new-chat-btn[data-v-7630767e]:active{transform:scale(.97);box-shadow:0 .09375rem .3125rem rgba(108,99,255,.2)}.new-chat-btn uni-text[data-v-7630767e]{font-size:.875rem;font-weight:600;color:#fff;letter-spacing:.03125rem}.chat-history[data-v-7630767e]{width:100%;padding:.625rem 0;box-sizing:border-box;flex:1;height:0;overflow-y:auto;overflow-x:hidden}.chat-history[data-v-7630767e]::-webkit-scrollbar{width:.1875rem}.chat-history[data-v-7630767e]::-webkit-scrollbar-thumb{background:rgba(108,99,255,.25);border-radius:.09375rem}.chat-history[data-v-7630767e]::-webkit-scrollbar-track{background:transparent}.history-header[data-v-7630767e]{width:100%;padding:.625rem .9375rem;box-sizing:border-box;border-bottom:.03125rem solid rgba(170,170,255,.15);display:flex;justify-content:space-between;align-items:center}.history-header .history-title-section[data-v-7630767e]{display:flex;flex-direction:column}.history-header .history-title-section uni-text[data-v-7630767e]:first-child{font-size:1rem;font-weight:700;color:#1a1a2e}.history-header .history-title-section uni-text[data-v-7630767e]:last-child{font-size:.6875rem;color:#999;margin-top:.0625rem}.history-header .history-management[data-v-7630767e]{display:flex}.history-header .history-management .history-management-btn[data-v-7630767e]{margin-left:.5rem;width:1.75rem;height:1.75rem;display:flex;justify-content:center;align-items:center;font-size:.8125rem;background-color:rgba(221,221,221,.4);border-radius:.4375rem;transition:all .15s ease}.history-header .history-management .history-management-btn[data-v-7630767e]:active{transform:scale(.9)}.history-header .history-management .icon-jia-style[data-v-7630767e]{background:rgba(16,185,129,.12);color:#059669}.history-header .history-management .icon-duoxuan-style[data-v-7630767e]{color:#666}.history-header .history-management .icon-saochu-style[data-v-7630767e]{color:#ff4d4f}.history-header .history-management .icon-quxiao-style[data-v-7630767e]{color:#6c63ff;box-sizing:border-box}.history-header .history-management .icon-total_selection-style[data-v-7630767e]{color:#666}.history-header .history-management .icon-total_selection-style.active[data-v-7630767e]{color:#6c63ff;background:rgba(108,99,255,.12)}.history-header .history-management .icon-shanchu-style[data-v-7630767e]{color:#ff4d4f}.history-search-wrap[data-v-7630767e]{display:flex;flex-direction:column;width:100%;padding:.5rem .9375rem .1875rem;box-sizing:border-box}.history-search-wrap .history-search-inner[data-v-7630767e]{display:flex;width:100%;padding:.375rem .6875rem;box-sizing:border-box;align-items:center;background-color:rgba(255,255,255,.6);border-radius:.875rem;border:.0625rem solid transparent;transition:all .25s ease}.history-search-wrap .history-search-inner .search-icon[data-v-7630767e]{color:#999!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner .chat-search-icon[data-v-7630767e]{color:#6c63ff!important;font-weight:700;font-size:1rem!important}.history-search-wrap .history-search-inner uni-input[data-v-7630767e]{margin-left:.375rem;box-sizing:border-box;font-size:.8125rem;color:#333}.history-search-wrap .history-search-inner uni-input[data-v-7630767e]::-webkit-input-placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner uni-input[data-v-7630767e]::placeholder{color:#c0c0d0}.history-search-wrap .history-search-inner.has-value[data-v-7630767e]{background-color:#fff;border-color:#6c63ff;box-shadow:0 0 0 .09375rem rgba(108,99,255,.08)}.chat-history-list[data-v-7630767e]{padding:.3125rem .9375rem}.chat-history-list .chat-history-card[data-v-7630767e]{display:flex;align-items:center;border:.04688rem solid rgba(108,99,255,.25);background:linear-gradient(135deg,#fff,#faf9ff);border-radius:.75rem;padding:.75rem;margin-top:.375rem;box-sizing:border-box;transition:all .2s ease}.chat-history-list .chat-history-card[data-v-7630767e]:active{transform:scale(.98)}.chat-history-list .is-select-chat[data-v-7630767e]{border-color:#6c63ff;box-shadow:0 .125rem .5rem rgba(108,99,255,.15);background:linear-gradient(135deg,rgba(108,99,255,.06),rgba(108,99,255,.02))}.chat-history-list .history-chat-checkbox[data-v-7630767e]{width:1.125rem;height:1.125rem;border-radius:.3125rem;display:flex;justify-content:center;align-items:center;border:.0625rem solid rgba(108,99,255,.5);margin-right:.375rem;flex-shrink:0}.chat-history-list .history-chat-avatar[data-v-7630767e]{width:2rem;height:2rem;border-radius:.5625rem;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,rgba(108,99,255,.3),rgba(108,99,255,.15));margin-left:0;margin-right:.5rem;box-sizing:border-box;flex-shrink:0}.chat-history-list .friend-avatar[data-v-7630767e]{display:flex;justify-content:center;align-items:center;border-radius:.5625rem;width:100%;height:100%;overflow:hidden}.chat-page[data-v-f61b4f79]{position:relative;background:linear-gradient(180deg,#f5f4ff,#f8f7fc,#faf9fe)}.mask[data-v-f61b4f79]{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.45);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:998;animation:fadeIn-f61b4f79 .3s ease}@keyframes fadeIn-f61b4f79{0%{opacity:0}to{opacity:1}}.chat-sidebar[data-v-f61b4f79]{position:fixed;top:0;left:0;width:calc(100% - 3.125rem);max-width:21.25rem;height:100%;transform:translate(-100%);transition:transform .4s cubic-bezier(.4,0,.2,1);z-index:999;box-shadow:.25rem 0 .9375rem rgba(0,0,0,.06)}.chat-sidebar.sidebar-show[data-v-f61b4f79]{transform:translate(0)}.ncd-overlay[data-v-f61b4f79]{position:fixed;width:100%;height:100%;left:0;top:0;display:flex;align-items:center;justify-content:center;background-color:rgba(30,30,50,.35);z-index:9999;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:fadeIn-f61b4f79 .25s ease}.ncd-card[data-v-f61b4f79]{width:90%;height:auto;background-color:#fff;border-radius:1.25rem;padding:1.5625rem 1.25rem;box-sizing:border-box;box-shadow:0 .625rem 1.875rem rgba(100,100,200,.12);animation:slideUp-f61b4f79 .35s ease}@keyframes slideUp-f61b4f79{0%{opacity:0;transform:translateY(1.25rem) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.ncd-header[data-v-f61b4f79]{display:flex;justify-content:center;align-items:center;width:100%}.ncd-title-eng[data-v-f61b4f79]{display:flex;flex-shrink:0;background:linear-gradient(135deg,#6c63ff,#4a45d1);padding:.1875rem .4375rem;border-radius:.375rem;justify-content:center;align-items:center}.ncd-title-eng uni-text[data-v-f61b4f79]{color:#fff;font-weight:700;font-size:.875rem}.ncd-title-zh[data-v-f61b4f79]{margin-left:.3125rem;display:flex;flex:1;height:0;font-size:1.125rem;font-weight:700;color:#1a1a2e;align-items:center}.ncd-header uni-icons[data-v-f61b4f79]{display:flex;flex-shrink:0;align-items:center}.ncd-options[data-v-f61b4f79]{display:flex;flex-direction:column;width:100%;justify-content:center;align-items:center;margin-top:.625rem;box-sizing:border-box}.ncd-option[data-v-f61b4f79]{width:100%;background:#f8fafc;padding:1.25rem .9375rem;display:flex;border-radius:.875rem;margin-top:.625rem;box-sizing:border-box;justify-content:center;align-items:center;transition:all .2s ease;border:.0625rem solid transparent}.ncd-option[data-v-f61b4f79]:active{transform:scale(.98)}.ncd-normal[data-v-f61b4f79]{border:.0625rem solid #e8edf3}.ncd-normal[data-v-f61b4f79]:active{border-color:#c4c8d0;background:#f0f3f7}.ncd-opt-icon[data-v-f61b4f79]{width:2.5rem;height:2.5rem;border-radius:.75rem;padding:.3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;align-items:center}.ncd-normal .ncd-opt-icon[data-v-f61b4f79]{background:linear-gradient(135deg,#e2e8f0,#d9dfe8)}.ncd-opt-title[data-v-f61b4f79]{display:flex;flex-direction:column;margin:0 .5rem;box-sizing:border-box;justify-content:center;flex:1;height:0}.ncd-opt-title-1[data-v-f61b4f79]{font-size:.9375rem;font-weight:600;color:#1a1a2e}.ncd-opt-title-2[data-v-f61b4f79]{font-size:.75rem;color:#888;margin-top:.125rem}.arrow-right-style[data-v-f61b4f79]{display:flex;flex-shrink:0;font-weight:700!important;font-size:.875rem!important;color:#999!important}.ncd-intelligence[data-v-f61b4f79]{background:linear-gradient(135deg,#f8f5ff,#efe8ff);border:.0625rem solid #c4b5fd}.ncd-intelligence[data-v-f61b4f79]:active{border-color:#a78bfa;background:linear-gradient(135deg,#f3efff,#e8dcff)}.ncd-intelligence .ncd-opt-icon[data-v-f61b4f79]{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.close-option-card[data-v-f61b4f79]{width:100%;display:flex;justify-content:flex-end}.close-option-card .iconfont[data-v-f61b4f79]{color:#ff4d4f!important}.chat-option-list[data-v-f61b4f79]{display:flex;width:100%;flex-direction:column}.chat-option[data-v-f61b4f79]{display:flex;justify-content:flex-start;align-items:center;margin:.3125rem 0;padding:.5rem .625rem;border-radius:.625rem;box-sizing:border-box;transition:all .15s ease}.chat-option[data-v-f61b4f79]:active{background:rgba(170,170,255,.08)}.chat-option .iconfont[data-v-f61b4f79]{font-size:30px}.option-name[data-v-f61b4f79]{font-size:17px;font-weight:500;margin-left:12px;box-sizing:border-box;color:#333}.chat-wrapper[data-v-f61b4f79]{position:relative;width:100%;height:100%;display:flex;flex-direction:column}.chat-hearder[data-v-f61b4f79]{width:100%;height:auto;padding:.5rem .3125rem;box-sizing:border-box;display:flex;flex-shrink:0;justify-content:flex-start;align-items:center;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.8));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:.03125rem solid rgba(170,170,255,.15)}.chat-btn-group[data-v-f61b4f79]{width:100%;height:auto;display:flex;justify-content:flex-start;align-items:center}.head-btn[data-v-f61b4f79]{padding:.375rem .4375rem;border:.04688rem solid rgba(170,170,255,.3);border-radius:.5625rem;margin:0 .3125rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,.7);transition:all .2s ease}.head-btn[data-v-f61b4f79]:active{background:rgba(170,170,255,.1);transform:scale(.95)}.chat-btn-group .head-btn:nth-child(1) .iconfont[data-v-f61b4f79]{color:#a78bfa}.chat-btn-group .head-btn:nth-child(2) .iconfont[data-v-f61b4f79]{color:#6495ed}.head-btn .iconfont[data-v-f61b4f79]{font-size:1.5rem}.log-out .iconfont[data-v-f61b4f79]{color:#ff4d4f}.wyxd-banner[data-v-f61b4f79]{display:flex;align-items:center;padding:.4375rem .75rem;margin:.1875rem .625rem;background:linear-gradient(135deg,#e8f4fd,#f0e6ff);border:.04688rem solid rgba(120,120,220,.25);border-radius:.5rem;box-shadow:0 .0625rem .25rem rgba(100,100,200,.08)}.wyxd-banner[data-v-f61b4f79]:active{background:linear-gradient(135deg,#d8eafb,#e6d8ff);transform:scale(.98)}.wyxd-banner-icon[data-v-f61b4f79]{font-size:1rem;color:#6c6ce0;margin-right:.375rem}.wyxd-banner-text[data-v-f61b4f79]{flex:1;font-size:.8125rem;font-weight:600;color:#4a4ab8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wyxd-banner-arrow[data-v-f61b4f79]{font-size:.75rem;color:#99c}.wyxd-banner-close[data-v-f61b4f79]{width:1.125rem;height:1.125rem;line-height:1.125rem;text-align:center;font-size:.875rem;color:#99c;border-radius:50%;background:rgba(100,100,200,.08);margin-left:.25rem;flex-shrink:0}.wyxd-banner-close[data-v-f61b4f79]:active{background:rgba(100,100,200,.18);color:#6c6ce0}.main-chat[data-v-f61b4f79]{display:flex;flex:1;height:0;width:100%;flex-direction:column}.load-more-tip[data-v-f61b4f79]{text-align:center;padding:.625rem 0;font-size:.75rem;color:#999}.chat-messages[data-v-f61b4f79]{display:flex;flex:1;height:0;width:100%;padding:.625rem .75rem;box-sizing:border-box;flex-direction:column;overflow:auto}.chat-messages[data-v-f61b4f79]::-webkit-scrollbar{width:.1875rem}.chat-messages[data-v-f61b4f79]::-webkit-scrollbar-thumb{background:rgba(170,170,255,.3);border-radius:.09375rem}.chat-messages[data-v-f61b4f79]::-webkit-scrollbar-track{background:transparent}.chat-message[data-v-f61b4f79]{display:flex;align-items:flex-start;margin:.4375rem 0;box-sizing:border-box;animation:msgFadeIn-f61b4f79 .3s ease}@keyframes msgFadeIn-f61b4f79{0%{opacity:0;transform:translateY(.3125rem)}to{opacity:1;transform:translateY(0)}}.message-user[data-v-f61b4f79]{flex-direction:row-reverse}.chat-avatar[data-v-f61b4f79]{display:flex;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;box-sizing:border-box;border-radius:.5rem;margin-right:.375rem;flex-shrink:0}.friend-avatar[data-v-f61b4f79]{display:flex;justify-content:center;align-items:center;border-radius:.5rem;width:100%;height:100%;overflow:hidden}.chat-avatar-user[data-v-f61b4f79]{margin-right:0;margin-left:.375rem}.chat-content[data-v-f61b4f79]{width:auto;max-width:calc(100% - 3.75rem);height:auto;padding:.625rem .75rem;box-sizing:border-box;border-radius:.75rem;overflow-x:auto;font-size:1rem;line-height:1.65;position:relative;box-shadow:0 .0625rem .25rem rgba(0,0,0,.04);background:#fff;border:.03125rem solid #eeeef5}.chat-content-user[data-v-f61b4f79]{background:linear-gradient(135deg,#c4b5fd,#b8a5f0);color:#fff;border:none;box-shadow:0 .125rem .375rem rgba(170,170,255,.3);border-bottom-right-radius:.25rem}.chat-content-assistant[data-v-f61b4f79]{max-width:100%}.chat-content[data-v-f61b4f79]:not(.chat-content-user){border-bottom-left-radius:.25rem}.message-image[data-v-f61b4f79]{max-width:9.375rem;border-radius:.375rem;margin:.25rem 0}.message-file-list[data-v-f61b4f79]{margin:.3125rem 0}.file-item[data-v-f61b4f79]{margin:.1875rem 0}.message-file[data-v-f61b4f79]{display:flex;align-items:center;padding:.4375rem .5625rem;background:rgba(255,255,255,.85);border-radius:.375rem;max-width:10.9375rem;border:.03125rem solid #eeeef5}.chat-content-user .message-file[data-v-f61b4f79]{background:rgba(255,255,255,.25);border-color:rgba(255,255,255,.3)}.file-icon[data-v-f61b4f79]{font-size:1rem;margin-right:.375rem}.file-name[data-v-f61b4f79]{flex:1;font-size:.8125rem;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-content-user .file-name[data-v-f61b4f79]{color:#fff}.file-size[data-v-f61b4f79]{font-size:.6875rem;color:#999;margin-left:.25rem}.chat-content-user .file-size[data-v-f61b4f79]{color:rgba(255,255,255,.7)}.chat-interactive-container[data-v-f61b4f79]{display:flex;flex-shrink:0;width:100%;padding:.5rem .75rem .75rem;box-sizing:border-box;flex-direction:column;background:linear-gradient(180deg,rgba(255,255,255,.7),rgba(255,255,255,.95));backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-top:.03125rem solid rgba(170,170,255,.12)}.chat-interactive-group[data-v-f61b4f79]{display:flex;width:100%;padding:.375rem 0;box-sizing:border-box;justify-content:flex-start;align-items:center}.chat-interactive-btn[data-v-f61b4f79]{display:flex;align-items:center;justify-content:center;border:.04688rem solid #d4d4e0;border-radius:.5rem;padding:.375rem .625rem;margin-right:.5rem;box-sizing:border-box;font-size:.75rem;color:#666;background:#fff;transition:all .2s ease}.chat-interactive-btn[data-v-f61b4f79]:active{border-color:#aaf;background:rgba(170,170,255,.08);transform:scale(.96)}.chat-interactive-btn.disabled[data-v-f61b4f79]{opacity:.45;pointer-events:none;border-color:#e0dfe8;color:#aaa}.chat-input-container[data-v-f61b4f79]{display:flex;width:100%;padding:.25rem .25rem .25rem .75rem;box-sizing:border-box;border:.0625rem solid #e0dff5;border-radius:.9375rem;align-items:flex-end;background:#fff;transition:all .25s ease;box-shadow:0 .0625rem .375rem rgba(100,100,150,.06)}.chat-input-container[data-v-f61b4f79]:focus-within{border-color:#aaf;box-shadow:0 0 0 .125rem rgba(170,170,255,.12),0 .125rem .5rem rgba(100,100,150,.08)}.message-input[data-v-f61b4f79]{flex:1;max-height:4.6875rem;min-height:1.875rem;overflow-y:auto;margin:.125rem .3125rem;box-sizing:border-box;font-size:.875rem;color:#333}.message-input[data-v-f61b4f79]::-webkit-input-placeholder{color:#c0c0d0}.message-input[data-v-f61b4f79]::placeholder{color:#c0c0d0}.chat-input-container.input-disabled[data-v-f61b4f79]{border-color:#eae9f2;background:#f8f7fc}.message-input[disabled][data-v-f61b4f79]{opacity:.5;color:#bbb}.input-btn-group.disabled[data-v-f61b4f79]{opacity:.4;pointer-events:none;background:#c0c0d0;box-shadow:none}.stop-message-btn[data-v-f61b4f79]{background:linear-gradient(135deg,#ff4d4f,#ff6b6b);box-shadow:0 .125rem .375rem rgba(255,77,79,.35);animation:pulseStop-f61b4f79 1.8s ease-in-out infinite}.stop-message-btn[data-v-f61b4f79]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(255,77,79,.25)}.input-btn-group[data-v-f61b4f79]{flex-shrink:0;display:flex;justify-content:center;align-items:center;padding:.4375rem;box-sizing:border-box;background:linear-gradient(135deg,#6c63ff,#8b7cfb);border-radius:.6875rem;width:2.25rem;height:2.25rem;box-shadow:0 .125rem .375rem rgba(108,99,255,.35);transition:all .2s ease}.input-btn-group[data-v-f61b4f79]:active{transform:scale(.92);box-shadow:0 .0625rem .1875rem rgba(108,99,255,.25)}.input-btn-group .iconfont[data-v-f61b4f79]{color:#fff;font-size:1.125rem}.ai-card[data-v-f61b4f79]{width:auto;border:.0625rem solid rgba(64,158,255,.3);box-shadow:0 .25rem .9375rem rgba(170,170,255,.2);border-radius:1rem!important}.thinking-content[data-v-f61b4f79]{display:flex;flex-direction:column;align-items:center;width:100%}.loading-dots[data-v-f61b4f79]{display:flex;width:100%;align-items:center;justify-content:center}.dot[data-v-f61b4f79]{width:.4375rem;height:.4375rem;margin:.1875rem;border-radius:50%;background:linear-gradient(135deg,#409eff,#6db2ff);animation:dotBlink-f61b4f79 1.2s infinite ease-in-out}@keyframes dotBlink-f61b4f79{0%,to{opacity:.3;transform:scale(.7)}50%{opacity:1;transform:scale(1.2)}}.dot[data-v-f61b4f79]:nth-child(2){animation-delay:.25s}.dot[data-v-f61b4f79]:nth-child(3){animation-delay:.5s}.thinking-text[data-v-f61b4f79]{margin:.625rem 0;font-size:20px;font-weight:600;color:#409eff}.stop-thinking-btn[data-v-f61b4f79]{display:flex;align-items:center;justify-content:center;width:100%;padding:.6875rem 0;margin-top:.625rem;border-radius:.75rem;font-size:.875rem;font-weight:600;color:#ff4d4f;background:linear-gradient(135deg,rgba(255,77,79,.06),rgba(255,77,79,.02));border:.0625rem solid rgba(255,77,79,.35);transition:all .2s ease;animation:pulseStop-f61b4f79 2s ease-in-out infinite}.stop-thinking-btn[data-v-f61b4f79]:active{background:rgba(255,77,79,.12);border-color:#ff4d4f;transform:scale(.97)}@keyframes pulseStop-f61b4f79{0%,to{border-color:rgba(255,77,79,.35)}50%{border-color:rgba(255,77,79,.65)}}.image-list[data-v-f61b4f79]{width:100%;padding:.25rem 0 .0625rem;animation:fadeIn-f61b4f79 .25s ease}.image-tags[data-v-f61b4f79]{display:flex;flex-wrap:wrap;gap:.3125rem}.image-tag[data-v-f61b4f79]{display:flex;align-items:center;padding:.1875rem .25rem .1875rem .5rem;background:linear-gradient(135deg,rgba(108,99,255,.07),rgba(108,99,255,.04));border:.03125rem solid rgba(108,99,255,.18);border-radius:.625rem;max-width:6.875rem;transition:all .2s ease;box-shadow:0 .03125rem .125rem rgba(108,99,255,.04)}.image-tag[data-v-f61b4f79]:active{transform:scale(.96);border-color:rgba(108,99,255,.4);background:rgba(108,99,255,.1)}.tag-name[data-v-f61b4f79]{font-size:.6875rem;color:#5a52d5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;font-weight:500}.tag-close[data-v-f61b4f79]{flex-shrink:0;width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;font-size:.875rem;color:#bbb;margin-left:.1875rem;border-radius:50%;line-height:1;transition:all .15s ease}.tag-close[data-v-f61b4f79]:active{color:#fff;background:#ff4d4f;transform:scale(1.1)}.message-detail-card[data-v-f61b4f79]{width:90%;max-height:80vh;display:flex;flex-direction:column;border-radius:1.25rem;padding:1.25rem 1.125rem}.message-detail-content[data-v-f61b4f79]{flex:1;min-height:6.25rem;max-height:60vh;overflow-y:auto;padding:.5rem 0;font-size:.875rem;line-height:1.7;color:#333;white-space:pre-wrap;word-break:break-all}.chat-content h1{font-size:1.3125rem;line-height:1.4;margin:.5rem 0 .3125rem}.chat-content h2{font-size:1.1875rem;line-height:1.4;margin:.4375rem 0 .25rem}.chat-content h3{font-size:1.125rem;line-height:1.4;margin:.375rem 0 .25rem}.chat-content h4,.chat-content h5,.chat-content h6{font-size:1.0625rem;line-height:1.5;margin:.3125rem 0 .1875rem}.chat-content p,.chat-content uni-text,.chat-content span{font-size:1.1875rem!important;line-height:1.6;margin:.25rem 0}.chat-content .chat-inline-link{color:#3b86ff!important;text-decoration:underline;word-break:break-all}.bubble-loading-dots{display:flex;align-items:center;justify-content:flex-start;padding:.3125rem 0}.bubble-dot{width:.375rem;height:.375rem;border-radius:50%;background:#a0a0b8;margin-right:.3125rem;animation:bubbleDotBlink 1.2s infinite ease-in-out}.bubble-dot:nth-child(2){animation-delay:.3s}.bubble-dot:nth-child(3){animation-delay:.6s}@keyframes bubbleDotBlink{0%,to{opacity:.25;transform:scale(.7)}50%{opacity:1;transform:scale(1.1)}}.detail-links-section{margin-top:.75rem;padding-top:.75rem;border-top:.03125rem solid #eee}.detail-links-title{font-size:.9375rem;font-weight:600;color:#666;margin-bottom:.5rem}.detail-link-item{padding:.5rem .625rem;background:#f5f7fa;border-radius:.375rem;margin-bottom:.375rem}.link-text{font-size:.875rem;color:#007aff;word-break:break-all}.detail-empty{display:flex;align-items:center;justify-content:center;padding:1.25rem 0;font-size:.875rem;color:#999}.download-toast-overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;z-index:10001;pointer-events:none}.download-toast-card{display:flex;align-items:center;justify-content:center;padding:.75rem 1.25rem;border-radius:.75rem;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 .375rem 1.25rem rgba(0,0,0,.15);animation:toastFadeIn .25s ease;pointer-events:auto}@keyframes toastFadeIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.download-toast-loading{background:rgba(40,40,60,.92)}.download-toast-success{background:rgba(40,60,40,.92)}.download-toast-error{background:rgba(60,30,30,.92)}.download-toast-icon{font-size:1.125rem;color:#fff;margin-right:.5rem;display:flex;align-items:center}.download-toast-card.download-toast-loading .download-toast-icon{gap:.25rem}.toast-dot{width:.375rem;height:.375rem;border-radius:50%;background:#fff;animation:toastDotBlink 1.2s infinite ease-in-out}.toast-dot:nth-child(2){animation-delay:.3s}.toast-dot:nth-child(3){animation-delay:.6s}@keyframes toastDotBlink{0%,to{opacity:.3;transform:scale(.75)}50%{opacity:1;transform:scale(1.2)}}.download-toast-text{font-size:.875rem;color:#fff;font-weight:500} diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index 5184a0b..c6b8b81 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -2727,7 +2727,7 @@ if (uni.restoreGlobal) { class: "new-chat-btn", onClick: $setup.goContactPages }, [ - vue.createElementVNode("text", null, "+ 聊天列表") + vue.createElementVNode("text", null, "+ 更多聊天列表") ]) ]), vue.createElementVNode("view", { class: "chat-history" }, [ @@ -5639,7 +5639,7 @@ This will fail in production.`); if (friendSocketStore.isConnected) return; if (!userToken.value || !UserId.value) { - formatAppLog("warn", "at pages/Chat/Chat.vue:345", "Token或UserId未准备好"); + formatAppLog("warn", "at pages/Chat/Chat.vue:355", "Token或UserId未准备好"); return; } friendSocketStore.connect({ @@ -5649,6 +5649,11 @@ This will fail in production.`); }; const socketStore = useSocketStore(); const ChatType = vue.ref(0); + const wyxdWorkspaceId = vue.ref(""); + const wyxdFilePath = vue.ref(""); + const wyxdFileName = vue.ref(""); + const wyxdUserToken = vue.ref(""); + const hasWyxdFile = vue.ref(false); const convertMarkdownTable = (text) => { const lines = text.split("\n"); let result = []; @@ -5725,7 +5730,7 @@ This will fail in production.`); ); return html; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:471", "解析失败", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:488", "解析失败", e2); return content; } }; @@ -5784,7 +5789,7 @@ This will fail in production.`); files }; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:548", "解析文件信息失败:", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:565", "解析文件信息失败:", e2); return { textContent: content, files: [] @@ -5822,7 +5827,7 @@ This will fail in production.`); closeNewChatModal(); takeUserConversations(); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:594", "新建普通会话失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:611", "新建普通会话失败:", error); uni.showToast({ title: "创建会话失败,请重试", icon: "none" @@ -5845,6 +5850,11 @@ This will fail in production.`); url: "/pages/WorkSpace/WorkSpace" }); }; + const goWyxdViewer = () => { + uni.navigateTo({ + url: "/pages/WYXD/WYXD?workspaceId=" + encodeURIComponent(wyxdWorkspaceId.value) + "&filePath=" + encodeURIComponent(wyxdFilePath.value) + "&fileName=" + encodeURIComponent(wyxdFileName.value) + "&userToken=" + encodeURIComponent(wyxdUserToken.value) + "&forceDownload=1" + }); + }; const goCloudDatabase = () => { if (currentSessionId.value) { uni.setStorageSync("currentSessionId", currentSessionId.value); @@ -5860,7 +5870,7 @@ This will fail in production.`); }; const previewFileArray = vue.ref([]); const uploadPhoto = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:643", "点击了拍照上传"); + formatAppLog("log", "at pages/Chat/Chat.vue:671", "点击了拍照上传"); uni.chooseImage({ count: 1, sourceType: ["camera", "album"], @@ -5883,7 +5893,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:661", "选择图片失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:689", "选择图片失败", err); } }); }; @@ -5892,12 +5902,12 @@ This will fail in production.`); }; const fileList = vue.ref([]); const uploadFile = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:672", "点击了上传文件"); + formatAppLog("log", "at pages/Chat/Chat.vue:700", "点击了上传文件"); chooseFile({ count: 5, type: "all", success: (res) => { - formatAppLog("log", "at pages/Chat/Chat.vue:677", "成功了"); + formatAppLog("log", "at pages/Chat/Chat.vue:705", "成功了"); fileList.value = res.tempFiles; previewFileArray.value.push(...res.tempFiles); uni.showToast({ @@ -5906,7 +5916,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:688", "选择失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:716", "选择失败:", err); uni.showToast({ title: "选择失败", icon: "error" @@ -6108,7 +6118,7 @@ This will fail in production.`); previewFileArray.value = []; } catch (err) { uni.hideLoading(); - formatAppLog("error", "at pages/Chat/Chat.vue:923", "文件上传失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:951", "文件上传失败:", err); uni.showToast({ title: "文件上传失败,请重试", icon: "error" @@ -6242,15 +6252,15 @@ This will fail in production.`); } }; const stopConversation = async () => { - formatAppLog("log", "at pages/Chat/Chat.vue:1093", "中断对话 - 当前会话ID:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1121", "中断对话 - 当前会话ID:", currentSessionId.value); try { await socketStore.send({ type: "stop", conversation_id: currentSessionId.value }); - formatAppLog("log", "at pages/Chat/Chat.vue:1099", "中断指令已发送成功"); + formatAppLog("log", "at pages/Chat/Chat.vue:1127", "中断指令已发送成功"); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1101", "中断指令发送失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1129", "中断指令发送失败:", err); } if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); @@ -6268,9 +6278,9 @@ This will fail in production.`); }); }; vue.watch(() => socketStore.isThinking, (newVal, oldVal) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1125", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); + formatAppLog("log", "at pages/Chat/Chat.vue:1153", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); if (!oldVal && newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1128", "AI开始回复(跨设备同步),锁定输入框"); + formatAppLog("log", "at pages/Chat/Chat.vue:1156", "AI开始回复(跨设备同步),锁定输入框"); isThinking.value = true; if (!streamingMessageId.value) { streamingMessageId.value = "streaming-" + Date.now(); @@ -6284,7 +6294,7 @@ This will fail in production.`); return; } if (oldVal && !newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1144", "AI回复结束(正常/中断),解锁并刷新消息列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1172", "AI回复结束(正常/中断),解锁并刷新消息列表"); if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); streamingMessageId.value = null; @@ -6336,15 +6346,15 @@ This will fail in production.`); UserData.value = await getUserInfo(userToken.value); UserId.value = UserData.value._id; UserAvatar.value = UserData.value.avatar || ""; - formatAppLog("log", "at pages/Chat/Chat.vue:1208", "用户信息已加载:", UserId.value, UserAvatar.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1236", "用户信息已加载:", UserId.value, UserAvatar.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1210", "获取用户信息失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1238", "获取用户信息失败:", error); } }; const takeUserConversations = async () => { try { userToken.value = getToken(); - formatAppLog("log", "at pages/Chat/Chat.vue:1218", "token:", userToken.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1246", "token:", userToken.value); UserConversations.value = await getUserConversations(userToken.value) || []; const savedSessionId = getCurrentSessionId(); if (savedSessionId && UserConversations.value.some((c) => c._id === savedSessionId)) { @@ -6354,7 +6364,7 @@ This will fail in production.`); } else { currentSessionId.value = ""; } - formatAppLog("log", "at pages/Chat/Chat.vue:1230", "保存会话id:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1258", "保存会话id:", currentSessionId.value); uni.setStorageSync("currentSessionId", currentSessionId.value); } catch (error) { uni.showToast({ @@ -6366,17 +6376,17 @@ This will fail in production.`); const FriendInfoList = vue.ref([]); const takeFriendList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1245", "开始获取好友列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1273", "开始获取好友列表"); const friendList = await getChatFriend(UserId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1248", "friendList:", friendList); + formatAppLog("log", "at pages/Chat/Chat.vue:1276", "friendList:", friendList); if (friendList && friendList.length) { FriendInfoList.value = await takeUserAvatar(friendList); } else { FriendInfoList.value = []; - formatAppLog("log", "at pages/Chat/Chat.vue:1253", "好友列表为空"); + formatAppLog("log", "at pages/Chat/Chat.vue:1281", "好友列表为空"); } } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1256", "获取好友列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1284", "获取好友列表失败:", error); FriendInfoList.value = []; } finally { UserConversations.value = FriendInfoList.value; @@ -6403,17 +6413,17 @@ This will fail in production.`); }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1286", "获取好友头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1314", "获取好友头像失败", err); return friendList; } }; const GroupList = vue.ref([]); const takeGroupList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1296", "开始获取群聊列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1324", "开始获取群聊列表"); GroupList.value = await getGroup(UserId.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1301", "获取群聊列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1329", "获取群聊列表失败:", error); GroupList.value = []; } finally { UserConversations.value = GroupList.value; @@ -6425,22 +6435,22 @@ This will fail in production.`); return []; try { const memberIds = memberList.map((item) => item.groupContactId); - formatAppLog("log", "at pages/Chat/Chat.vue:1315", "请求头像的ID列表:", memberIds); + formatAppLog("log", "at pages/Chat/Chat.vue:1343", "请求头像的ID列表:", memberIds); const memberAvatarList = await getUserAvatar(userToken.value, memberIds); - formatAppLog("log", "at pages/Chat/Chat.vue:1317", "头像接口返回数据:", memberAvatarList); + formatAppLog("log", "at pages/Chat/Chat.vue:1345", "头像接口返回数据:", memberAvatarList); const userMap = new Map(memberAvatarList.map((user) => [user.user_id, user]) || []); - formatAppLog("log", "at pages/Chat/Chat.vue:1320", "userMap的keys:", Array.from(userMap.keys())); + formatAppLog("log", "at pages/Chat/Chat.vue:1348", "userMap的keys:", Array.from(userMap.keys())); return memberList.map((member) => { const memberId = member.groupContactId; const userInfo = userMap.get(memberId); - formatAppLog("log", "at pages/Chat/Chat.vue:1325", `查找 ${memberId} 的头像:`, userInfo); + formatAppLog("log", "at pages/Chat/Chat.vue:1353", `查找 ${memberId} 的头像:`, userInfo); return { ...member, avatar: (userInfo == null ? void 0 : userInfo.avatar) || null }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1332", "获取群成员头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1360", "获取群成员头像失败", err); return memberList; } }; @@ -6487,12 +6497,12 @@ This will fail in production.`); const takeGroupMessages = async () => { try { allmessages.value = await getGroupMessages(currentSessionId.value) || []; - formatAppLog("log", "at pages/Chat/Chat.vue:1396", "群聊消息:", allmessages.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1424", "群聊消息:", allmessages.value); const memberList = await getGroupMemberList(currentSessionId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1399", "获取到的群成员列表:", memberList); + formatAppLog("log", "at pages/Chat/Chat.vue:1427", "获取到的群成员列表:", memberList); if (memberList && memberList.length) { groupMemberList.value = await takeGroupMemberAvatar(memberList); - formatAppLog("log", "at pages/Chat/Chat.vue:1402", "群成员列表(带头像):", groupMemberList.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1430", "群成员列表(带头像):", groupMemberList.value); } else { groupMemberList.value = []; } @@ -6516,9 +6526,9 @@ This will fail in production.`); } }; vue.watch(() => friendSocketStore.MessageReceived, (newId) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1449", "收到了好友消息"); + formatAppLog("log", "at pages/Chat/Chat.vue:1477", "收到了好友消息"); if (newId) { - formatAppLog("log", "at pages/Chat/Chat.vue:1451", "ChatType:", ChatType.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1479", "ChatType:", ChatType.value); switch (ChatType.value) { case 0: takeConversationMessages(); @@ -6533,7 +6543,7 @@ This will fail in production.`); friendSocketStore.MessageReceived = false; break; default: - formatAppLog("log", "at pages/Chat/Chat.vue:1467", "default 分支"); + formatAppLog("log", "at pages/Chat/Chat.vue:1495", "default 分支"); friendSocketStore.MessageReceived = false; break; } @@ -6547,6 +6557,7 @@ This will fail in production.`); if (oldId && oldId !== newId) { isLoadingMessages.value = true; allmessages.value = []; + hasWyxdFile.value = false; } switch (ChatType.value) { case 0: @@ -6568,6 +6579,15 @@ This will fail in production.`); }, { immediate: true }); + onLoad((options) => { + if (options.wyxdFilePath) { + wyxdWorkspaceId.value = options.wyxdWorkspaceId ? decodeURIComponent(options.wyxdWorkspaceId) : ""; + wyxdFilePath.value = decodeURIComponent(options.wyxdFilePath); + wyxdFileName.value = options.wyxdFileName ? decodeURIComponent(options.wyxdFileName) : "未命名文档"; + wyxdUserToken.value = options.wyxdUserToken ? decodeURIComponent(options.wyxdUserToken) : ""; + hasWyxdFile.value = true; + } + }); vue.onMounted(() => { }); onShow(async () => { @@ -6602,11 +6622,13 @@ This will fail in production.`); onUnload(() => { socketStore.disconnect(); }); - const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { + const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, wyxdWorkspaceId, wyxdFilePath, wyxdFileName, wyxdUserToken, hasWyxdFile, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goWyxdViewer, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { return downloadToastTimer; }, set downloadToastTimer(v) { downloadToastTimer = v; - }, showDownloadToast, hideDownloadToast, openLink, downloadAndHandle, sendMessage, sendFriendMessage, sendGroupMessage, sendAIMessage, stopConversation, textMessage, UserConversations, currentSessionId, userToken, UserId, UserAvatar, UserData, takeUserInfo, takeUserConversations, FriendInfoList, takeFriendList, takeTalkUserAvatar, takeUserAvatar, GroupList, takeGroupList, groupMemberList, takeGroupMemberAvatar, getGroupMemberAvatarById, allmessages, scrollToView, bottomToggle, isLoadingMore, currentPage, currentMessages, takeConversationMessages, takeFriendMessages, takeGroupMessages, onScroll, scrollToBottom, computed: vue.computed, getCurrentInstance: vue.getCurrentInstance, nextTick: vue.nextTick, onMounted: vue.onMounted, ref: vue.ref, watch: vue.watch, get onShow() { + }, showDownloadToast, hideDownloadToast, openLink, downloadAndHandle, sendMessage, sendFriendMessage, sendGroupMessage, sendAIMessage, stopConversation, textMessage, UserConversations, currentSessionId, userToken, UserId, UserAvatar, UserData, takeUserInfo, takeUserConversations, FriendInfoList, takeFriendList, takeTalkUserAvatar, takeUserAvatar, GroupList, takeGroupList, groupMemberList, takeGroupMemberAvatar, getGroupMemberAvatarById, allmessages, scrollToView, bottomToggle, isLoadingMore, currentPage, currentMessages, takeConversationMessages, takeFriendMessages, takeGroupMessages, onScroll, scrollToBottom, computed: vue.computed, getCurrentInstance: vue.getCurrentInstance, nextTick: vue.nextTick, onMounted: vue.onMounted, ref: vue.ref, watch: vue.watch, get onLoad() { + return onLoad; + }, get onShow() { return onShow; }, get onUnload() { return onUnload; @@ -6790,6 +6812,30 @@ This will fail in production.`); ]) ]) ]), + $setup.hasWyxdFile ? (vue.openBlock(), vue.createElementBlock("view", { + key: 0, + class: "wyxd-banner" + }, [ + vue.createElementVNode("view", { class: "wyxd-banner-icon iconfont icon-wenjian" }), + vue.createElementVNode( + "view", + { + class: "wyxd-banner-text", + onClick: $setup.goWyxdViewer + }, + "查看: " + vue.toDisplayString($setup.wyxdFileName), + 1 + /* TEXT */ + ), + vue.createElementVNode("view", { + class: "wyxd-banner-arrow", + onClick: $setup.goWyxdViewer + }, "›"), + vue.createElementVNode("view", { + class: "wyxd-banner-close", + onClick: _cache[5] || (_cache[5] = vue.withModifiers(($event) => $setup.hasWyxdFile = false, ["stop"])) + }, "×") + ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "main-chat" }, [ vue.createElementVNode("scroll-view", { class: "chat-messages", @@ -7125,7 +7171,7 @@ This will fail in production.`); "view", { class: vue.normalizeClass(["chat-interactive-btn", { disabled: $setup.isThinking }]), - onClick: _cache[5] || (_cache[5] = ($event) => !$setup.isThinking && $setup.uploadPhoto()) + onClick: _cache[6] || (_cache[6] = ($event) => !$setup.isThinking && $setup.uploadPhoto()) }, "拍照上传", 2 @@ -7135,7 +7181,7 @@ This will fail in production.`); "view", { class: vue.normalizeClass(["chat-interactive-btn", { disabled: $setup.isThinking }]), - onClick: _cache[6] || (_cache[6] = ($event) => !$setup.isThinking && $setup.uploadFile()) + onClick: _cache[7] || (_cache[7] = ($event) => !$setup.isThinking && $setup.uploadFile()) }, "上传文件", 2 @@ -7183,7 +7229,7 @@ This will fail in production.`); class: "message-input", placeholder: $setup.isThinking ? $setup.isSelfSent ? "AI 正在回复中..." : "电脑正在运行,请稍后" : "输入消息...", disabled: $setup.isThinking, - "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.textMessage = $event), + "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.textMessage = $event), "auto-height": "" }, null, 8, ["placeholder", "disabled"]), [ [vue.vModelText, $setup.textMessage] @@ -7197,7 +7243,7 @@ This will fail in production.`); ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "input-btn-group send-message-btn", - onClick: _cache[8] || (_cache[8] = ($event) => $setup.sendMessage()) + onClick: _cache[9] || (_cache[9] = ($event) => $setup.sendMessage()) }, [ vue.createElementVNode("view", { class: "iconfont icon-fasong" }) ])) @@ -7219,7 +7265,7 @@ This will fail in production.`); }, [ vue.createElementVNode("view", { class: "ncd-card message-detail-card", - onClick: _cache[9] || (_cache[9] = vue.withModifiers(() => { + onClick: _cache[10] || (_cache[10] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "ncd-header" }, [ @@ -7465,21 +7511,34 @@ This will fail in production.`); if (isSelectFolder.value) return; const isWyxd = folder.name && folder.name.toLowerCase().endsWith(".wyxd"); - const itemList = isWyxd ? ["下载", "删除", "WYXD查看器"] : ["下载", "删除"]; + const itemList = isWyxd ? ["下载", "AI修改", "删除", "WYXD查看器"] : ["下载", "删除"]; uni.showActionSheet({ itemList, success: (res) => { - switch (res.tapIndex) { - case 0: - handleDownload(folder); - break; - case 1: - handleDelete(folder); - break; - case 2: - if (isWyxd) + if (isWyxd) { + switch (res.tapIndex) { + case 0: + handleDownload(folder); + break; + case 1: + handleAiModify(folder); + break; + case 2: + handleDelete(folder); + break; + case 3: openWyxdViewer(folder); - break; + break; + } + } else { + switch (res.tapIndex) { + case 0: + handleDownload(folder); + break; + case 1: + handleDelete(folder); + break; + } } } }); @@ -7511,7 +7570,7 @@ This will fail in production.`); initCurrentFolderList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:338", "重命名失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:352", "重命名失败:", error); uni.showToast({ title: typeof error === "string" ? error : "重命名失败,请重试", icon: "error" @@ -7556,7 +7615,7 @@ This will fail in production.`); uni.hideLoading(); if (downloadRes.statusCode === 200) { const tempPath = downloadRes.tempFilePath; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:395", "// 下载成功,文件下载路径为:", tempPath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:409", "// 下载成功,文件下载路径为:", tempPath); openFile(tempPath); } else { uni.showToast({ @@ -7567,7 +7626,7 @@ This will fail in production.`); }, fail: (err) => { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:406", "下载文件失败:", err); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:420", "下载文件失败:", err); uni.showToast({ title: "下载失败,请重试", icon: "error" @@ -7576,7 +7635,7 @@ This will fail in production.`); }); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:415", "获取下载链接失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:429", "获取下载链接失败:", error); uni.showToast({ title: "获取下载链接失败,请重试", icon: "error" @@ -7591,7 +7650,7 @@ This will fail in production.`); icon: "success" }), fail: (err) => { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:432", "打开文件失败:", err); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:446", "打开文件失败:", err); uni.showToast({ title: "无法打开此文件", icon: "error" @@ -7608,7 +7667,7 @@ This will fail in production.`); icon: "success" }), fail: (err) => { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:451", "打开文件失败:", err); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:465", "打开文件失败:", err); uni.showToast({ title: "无法打开此文件", icon: "error" @@ -7618,14 +7677,20 @@ This will fail in production.`); }; const openWyxdViewer = (folder) => { const filePath = folder.path.startsWith("./") ? folder.path.slice(2) : folder.path; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:463", "解析文件路径:", filePath); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:464", "folder", folder); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:465", "encode", encodeURIComponent(filePath)); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:466", "encode", encodeURIComponent(folder.name)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:477", "解析文件路径:", filePath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:478", "folder", folder); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:479", "encode", encodeURIComponent(filePath)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:480", "encode", encodeURIComponent(folder.name)); uni.navigateTo({ url: "/pages/WYXD/WYXD?workspaceId=" + encodeURIComponent(workspaceId.value) + "&filePath=" + encodeURIComponent(filePath) + "&fileName=" + encodeURIComponent(folder.name) + "&userToken=" + encodeURIComponent(UserToken.value) }); }; + const handleAiModify = (folder) => { + const filePath = folder.path.startsWith("./") ? folder.path.slice(2) : folder.path; + uni.navigateTo({ + url: "/pages/Chat/Chat?wyxdWorkspaceId=" + encodeURIComponent(workspaceId.value) + "&wyxdFilePath=" + encodeURIComponent(filePath) + "&wyxdFileName=" + encodeURIComponent(folder.name) + "&wyxdUserToken=" + encodeURIComponent(UserToken.value) + }); + }; const handleDelete = (folder) => { uni.showModal({ title: "提示", @@ -7634,7 +7699,7 @@ This will fail in production.`); if (res.confirm) { try { const filePath = `./${folder.path}`; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:485", "删除的是:", filePath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:510", "删除的是:", filePath); await daleteWorkspace(UserToken.value, workspaceId.value, filePath); uni.showToast({ title: "删除成功", @@ -7642,7 +7707,7 @@ This will fail in production.`); }); initCurrentFolderList(); } catch (error) { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:493", "删除失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:518", "删除失败:", error); uni.showToast({ title: "删除失败,请重试", icon: "error" @@ -7710,7 +7775,7 @@ This will fail in production.`); const currentFolderList = vue.ref([]); const getCurrentFolderList = () => { var _a, _b; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:574", "当前路径为:", JSON.stringify(folderStack.value)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:599", "当前路径为:", JSON.stringify(folderStack.value)); const currentPath = folderStack.value.length > 0 ? folderStack.value[folderStack.value.length - 1].path : "."; if (currentPath === ".") { return ((_a = allFoldersData.value) == null ? void 0 : _a.children) || []; @@ -7734,7 +7799,7 @@ This will fail in production.`); const initCurrentFolderList = async () => { workspaceId.value = getWorkspaceId(); UserToken.value = getToken(); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:601", "getWorkspaceId:", workspaceId.value); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:626", "getWorkspaceId:", workspaceId.value); allFoldersData.value = await getWorkspaceList(UserToken.value, workspaceId.value); currentFolderList.value = getCurrentFolderList(); }; @@ -7781,7 +7846,7 @@ This will fail in production.`); uni.navigateBack({ delta: 1, fail() { - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:661", "返回失败,进入兜底跳转"); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:686", "返回失败,进入兜底跳转"); uni.reLaunch({ url: "/pages/Chat/Chat" }); @@ -7792,7 +7857,7 @@ This will fail in production.`); vue.onMounted(() => { initCurrentFolderList(); }); - const __returned__ = { UserToken, workspaceId, navbarBeforeTitle, navbarTitle, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, showNewFolder, isNFNFocused, newFolderName, closeNewFolderModal, newWorkspaceFolder, handleUploadFile, doUploadWorkspaceFiles, currentFolderPath, folderPathPreview, confirmCreateFolder, handleLongPress, handleRename, handleDownload, openFile, openFileWithMenu, openWyxdViewer, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, getFileIcon, allFoldersData, folderStack, currentFolderList, getCurrentFolderList, initCurrentFolderList, handleFolderClick, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getWorkspaceId() { + const __returned__ = { UserToken, workspaceId, navbarBeforeTitle, navbarTitle, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, showNewFolder, isNFNFocused, newFolderName, closeNewFolderModal, newWorkspaceFolder, handleUploadFile, doUploadWorkspaceFiles, currentFolderPath, folderPathPreview, confirmCreateFolder, handleLongPress, handleRename, handleDownload, openFile, openFileWithMenu, openWyxdViewer, handleAiModify, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, getFileIcon, allFoldersData, folderStack, currentFolderList, getCurrentFolderList, initCurrentFolderList, handleFolderClick, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getWorkspaceId() { return getWorkspaceId; }, get getToken() { return getToken; @@ -18117,7 +18182,7 @@ This will fail in production.`); fileName: fileName.value, userToken: userToken.value }); - if (isWyxdCached(workspaceId.value, filePath.value)) { + if (options.forceDownload !== "1" && isWyxdCached(workspaceId.value, filePath.value)) { loadFromCache(); } else { startDownload(); diff --git a/unpackage/dist/dev/app-plus/pages/Chat/Chat.css b/unpackage/dist/dev/app-plus/pages/Chat/Chat.css index 7595d5c..077b726 100644 --- a/unpackage/dist/dev/app-plus/pages/Chat/Chat.css +++ b/unpackage/dist/dev/app-plus/pages/Chat/Chat.css @@ -1006,10 +1006,12 @@ to { opacity: 1; transform: translateY(0) scale(1); font-size: 1.125rem; font-weight: 700; color: #1a1a2e; + align-items: center; } .ncd-header uni-icons[data-v-5eb7b895] { display: flex; flex-shrink: 0; + align-items: center; } .ncd-options[data-v-5eb7b895] { display: flex; @@ -1192,6 +1194,55 @@ to { opacity: 1; transform: translateY(0) scale(1); .log-out .iconfont[data-v-5eb7b895] { color: #ff4d4f; } +/* ==========WYXD 文件入口横幅========== */ +.wyxd-banner[data-v-5eb7b895] { + display: flex; + align-items: center; + padding: 0.4375rem 0.75rem; + margin: 0.1875rem 0.625rem; + background: linear-gradient(135deg, #e8f4fd, #f0e6ff); + border: 0.04688rem solid rgba(120, 120, 220, 0.25); + border-radius: 0.5rem; + box-shadow: 0 0.0625rem 0.25rem rgba(100, 100, 200, 0.08); +} +.wyxd-banner[data-v-5eb7b895]:active { + background: linear-gradient(135deg, #d8eafb, #e6d8ff); + transform: scale(0.98); +} +.wyxd-banner-icon[data-v-5eb7b895] { + font-size: 1rem; + color: #6c6ce0; + margin-right: 0.375rem; +} +.wyxd-banner-text[data-v-5eb7b895] { + flex: 1; + font-size: 0.8125rem; + font-weight: 600; + color: #4a4ab8; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.wyxd-banner-arrow[data-v-5eb7b895] { + font-size: 0.75rem; + color: #9999cc; +} +.wyxd-banner-close[data-v-5eb7b895] { + width: 1.125rem; + height: 1.125rem; + line-height: 1.125rem; + text-align: center; + font-size: 0.875rem; + color: #9999cc; + border-radius: 50%; + background: rgba(100, 100, 200, 0.08); + margin-left: 0.25rem; + flex-shrink: 0; +} +.wyxd-banner-close[data-v-5eb7b895]:active { + background: rgba(100, 100, 200, 0.18); + color: #6c6ce0; +} /* ==========聊天主体部分========== */ .main-chat[data-v-5eb7b895] { display: flex; diff --git a/unpackage/dist/dev/app-plus/pages/text/text.css b/unpackage/dist/dev/app-plus/pages/text/text.css index 4b009c2..c2a807b 100644 --- a/unpackage/dist/dev/app-plus/pages/text/text.css +++ b/unpackage/dist/dev/app-plus/pages/text/text.css @@ -1006,10 +1006,12 @@ to { opacity: 1; transform: translateY(0) scale(1); font-size: 1.125rem; font-weight: 700; color: #1a1a2e; + align-items: center; } .ncd-header uni-icons[data-v-fdf84df1] { display: flex; flex-shrink: 0; + align-items: center; } .ncd-options[data-v-fdf84df1] { display: flex; @@ -1192,6 +1194,55 @@ to { opacity: 1; transform: translateY(0) scale(1); .log-out .iconfont[data-v-fdf84df1] { color: #ff4d4f; } +/* ==========WYXD 文件入口横幅========== */ +.wyxd-banner[data-v-fdf84df1] { + display: flex; + align-items: center; + padding: 0.4375rem 0.75rem; + margin: 0.1875rem 0.625rem; + background: linear-gradient(135deg, #e8f4fd, #f0e6ff); + border: 0.04688rem solid rgba(120, 120, 220, 0.25); + border-radius: 0.5rem; + box-shadow: 0 0.0625rem 0.25rem rgba(100, 100, 200, 0.08); +} +.wyxd-banner[data-v-fdf84df1]:active { + background: linear-gradient(135deg, #d8eafb, #e6d8ff); + transform: scale(0.98); +} +.wyxd-banner-icon[data-v-fdf84df1] { + font-size: 1rem; + color: #6c6ce0; + margin-right: 0.375rem; +} +.wyxd-banner-text[data-v-fdf84df1] { + flex: 1; + font-size: 0.8125rem; + font-weight: 600; + color: #4a4ab8; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.wyxd-banner-arrow[data-v-fdf84df1] { + font-size: 0.75rem; + color: #9999cc; +} +.wyxd-banner-close[data-v-fdf84df1] { + width: 1.125rem; + height: 1.125rem; + line-height: 1.125rem; + text-align: center; + font-size: 0.875rem; + color: #9999cc; + border-radius: 50%; + background: rgba(100, 100, 200, 0.08); + margin-left: 0.25rem; + flex-shrink: 0; +} +.wyxd-banner-close[data-v-fdf84df1]:active { + background: rgba(100, 100, 200, 0.18); + color: #6c6ce0; +} /* ==========聊天主体部分========== */ .main-chat[data-v-fdf84df1] { display: flex; From 314a71424828e8339f978c668ca766cd40cd9b75 Mon Sep 17 00:00:00 2001 From: YiLin <482244139@qq.com> Date: Fri, 31 Jul 2026 16:38:01 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=92=8C=E6=96=87=E4=BB=B6=E6=89=93=E5=BC=80=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/Chat/Chat.vue | 35 +- pages/CloudDatabase/CloudDatabase.vue | 16 +- pages/WorkSpace/WorkSpace.vue | 37 +- pages/text/text.vue | 27 +- .../dist/dev/app-plus/app-config-service.js | 2 +- unpackage/dist/dev/app-plus/app-service.js | 467 ++++++++++-------- unpackage/dist/dev/app-plus/manifest.json | 2 +- utils/fileOpener.js | 124 +++++ 8 files changed, 413 insertions(+), 297 deletions(-) create mode 100644 utils/fileOpener.js diff --git a/pages/Chat/Chat.vue b/pages/Chat/Chat.vue index 0cbf474..38f9f55 100644 --- a/pages/Chat/Chat.vue +++ b/pages/Chat/Chat.vue @@ -346,6 +346,7 @@ chooseFile } from '@/uni_modules/lime-choose-file' import socketManager from '../../utils/socket'; +import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener.js' const friendSocketStore = useFriendSocketStore() // 连接实时通讯eriendsocket @@ -523,15 +524,7 @@ } // 打开文件 const openFile = (url) => { - uni.downloadFile({ - url: url, - success: (res) => { - uni.openDocument({ - filePath: res.tempFilePath, - showMenu: true - }) - } - }) + downloadAndOpen(url); } // 文件大小格式化 const formatFileSize = (size) => { @@ -906,12 +899,8 @@ success: (downloadRes) => { if (downloadRes.statusCode === 200) { hideDownloadToast() - uni.openDocument({ - filePath: downloadRes.tempFilePath, - showMenu: true, - fail: () => { - showDownloadToast('error', '无法打开此文件', 2500) - } + openFileNative(downloadRes.tempFilePath, () => { + showDownloadToast('error', '无法打开此文件', 2500) }) } else { showDownloadToast('error', '下载失败', 2500) @@ -1188,14 +1177,16 @@ if (reason === 'pc offline') { isThinking.value = false socketStore.authFailReason = '' - nextTick(() => { - uni.showModal({ - title: '提示', - content: 'PC端不在线,不可聊天', - showCancel: false, - confirmText: '知道了' - }) + uni.showToast({ + title: 'PC端不在线,请先登录', + icon: 'none', + duration: 500 }) + setTimeout(() => { + uni.reLaunch({ + url: '/pages/Login/Login' + }) + }, 500) } }) diff --git a/pages/CloudDatabase/CloudDatabase.vue b/pages/CloudDatabase/CloudDatabase.vue index 030b8a0..057d889 100644 --- a/pages/CloudDatabase/CloudDatabase.vue +++ b/pages/CloudDatabase/CloudDatabase.vue @@ -475,6 +475,7 @@ uploadCloudDbFile, deleteCloudDb } from '@/utils/cloud-api.js'; +import { openFile as openFileNative } from '@/utils/fileOpener.js' const userToken = ref(''); const userId = ref(''); @@ -826,19 +827,10 @@ } }; - // 使用系统默认应用打开 + // 打开文件(弹出应用选择菜单) const openFile = (filePath) => { - uni.openDocument({ - filePath: filePath, - success: () => uni.showToast({ - title: '打开成功', - icon: 'success' - }), - fail: (err) => { - console.error('打开文件失败:', err); - // 如果默认应用打开失败,尝试弹出选择菜单 - openFileWithMenu(filePath); - } + openFileNative(filePath, () => { + openFileWithMenu(filePath); }); }; diff --git a/pages/WorkSpace/WorkSpace.vue b/pages/WorkSpace/WorkSpace.vue index 9477c83..a014c6f 100644 --- a/pages/WorkSpace/WorkSpace.vue +++ b/pages/WorkSpace/WorkSpace.vue @@ -121,6 +121,7 @@ workspaceUploadFileByURL, updateWorkspaceFileName } from '@/utils/cloud-api.js' +import { openFile as openFileNative } from '@/utils/fileOpener.js' const UserToken = ref('') const workspaceId = ref('') @@ -435,40 +436,10 @@ } }; - // 使用系统默认应用打开 + // 打开文件(弹出应用选择菜单) const openFile = (filePath) => { - uni.openDocument({ - filePath: filePath, - success: () => uni.showToast({ - title: '打开成功', - icon: 'success' - }), - fail: (err) => { - console.error('打开文件失败:', err); - uni.showToast({ - title: '无法打开此文件', - icon: 'error' - }); - } - }); - }; - - // 选择其他应用打开 - const openFileWithMenu = (filePath) => { - uni.openDocument({ - filePath: filePath, - showMenu: true, - success: () => uni.showToast({ - title: '打开成功', - icon: 'success' - }), - fail: (err) => { - console.error('打开文件失败:', err); - uni.showToast({ - title: '无法打开此文件', - icon: 'error' - }); - } + openFileNative(filePath, () => { + uni.showToast({ title: '无法打开此文件', icon: 'error' }); }); }; diff --git a/pages/text/text.vue b/pages/text/text.vue index e53e8b2..582560f 100644 --- a/pages/text/text.vue +++ b/pages/text/text.vue @@ -325,6 +325,7 @@ chooseFile } from '@/uni_modules/lime-choose-file' import socketManager from '../../utils/socket'; +import { openFile as openFileNative } from '@/utils/fileOpener.js' const friendSocketStore = useFriendSocketStore() // 连接实时通讯eriendsocket @@ -490,15 +491,7 @@ } // 打开文件 const openFile = (url) => { - uni.downloadFile({ - url: url, - success: (res) => { - uni.openDocument({ - filePath: res.tempFilePath, - showMenu: true - }) - } - }) + downloadAndOpen(url); } // 文件大小格式化 const formatFileSize = (size) => { @@ -1131,14 +1124,16 @@ if (reason === 'pc offline') { isThinking.value = false socketStore.authFailReason = '' - nextTick(() => { - uni.showModal({ - title: '提示', - content: 'PC端不在线,不可聊天', - showCancel: false, - confirmText: '知道了' - }) + uni.showToast({ + title: 'PC端不在线', + icon: 'none', + duration: 1500 }) + setTimeout(() => { + uni.reLaunch({ + url: '/pages/Login/Login' + }) + }, 1500) } }) diff --git a/unpackage/dist/dev/app-plus/app-config-service.js b/unpackage/dist/dev/app-plus/app-config-service.js index 5416a50..a92dbeb 100644 --- a/unpackage/dist/dev/app-plus/app-config-service.js +++ b/unpackage/dist/dev/app-plus/app-config-service.js @@ -1,7 +1,7 @@ ;(function(){ let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[]; - const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"test1","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"5.07","entryPagePath":"pages/Login/Login","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}}; + const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"宇恒一号","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"5.07","entryPagePath":"pages/Login/Login","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}}; const __uniRoutes = [{"path":"pages/Login/Login","meta":{"isQuit":true,"isEntry":true,"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"登录页面","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/Chat/Chat","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"聊天页面(主页面)","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/WorkSpace/WorkSpace","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"工作区文件管理","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/UserProfileModal/UserProfileModal","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/ContactPages/ContactPages","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/WorkSpace/TemplateSpace/TemplateSpace","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/CloudDatabase/CloudDatabase","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"云端数据","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/CloudDbDetail/CloudDbDetail","meta":{"titleNView":false,"bounce":"none","softinputMode":"adjustResize","navigationBar":{"titleText":"数据库详情","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/text/text","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}},{"path":"pages/text/IntuitiveAipptViewer","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}},{"path":"pages/WYXD/WYXD","meta":{"titleNView":false,"bounce":"none","navigationBar":{"titleText":"","style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute)); __uniConfig.styles=[];//styles __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index c6b8b81..6ab1540 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -3357,7 +3357,7 @@ if (uni.restoreGlobal) { fileInput.type = "file"; fileInput.accept = ".json"; } - function openFile() { + function openFile2() { return new Promise((resolve, reject) => { fileInput.onchange = async () => { const files = fileInput.files; @@ -3373,7 +3373,7 @@ if (uni.restoreGlobal) { fileInput.click(); }); } - return openFile; + return openFile2; } async function actionGlobalOpenStateFile(pinia) { try { @@ -5630,6 +5630,90 @@ This will fail in production.`); const pkg = /* @__PURE__ */ initUTSPackageName(name, is_uni_modules); const cls = /* @__PURE__ */ initUTSIndexClassName(name, is_uni_modules); const chooseFile = /* @__PURE__ */ initUTSProxyFunction(false, { moduleName, moduleType, errMsg, main: true, package: pkg, class: cls, name: "chooseFileByJs", keepAlive: false, params: [{ "name": "options", "type": "UTSSDKModulesLimeChooseFileChooseFileOptionJSONObject" }], return: "" }); + function getMimeType(filePath) { + const ext = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + const mimeMap = { + "pdf": "application/pdf", + "doc": "application/msword", + "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "xls": "application/vnd.ms-excel", + "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "ppt": "application/vnd.ms-powerpoint", + "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "txt": "text/plain", + "html": "text/html", + "htm": "text/html", + "xml": "text/xml", + "json": "application/json", + "csv": "text/csv", + "jpg": "image/jpeg", + "jpeg": "image/jpeg", + "png": "image/png", + "gif": "image/gif", + "bmp": "image/bmp", + "webp": "image/webp", + "mp4": "video/mp4", + "mp3": "audio/mpeg", + "wav": "audio/wav", + "zip": "application/zip", + "rar": "application/x-rar-compressed", + "7z": "application/x-7z-compressed", + "apk": "application/vnd.android.package-archive" + }; + return mimeMap[ext] || "*/*"; + } + function openFile(filePath, onFail) { + try { + const main = plus.android.runtimeMainActivity(); + const Intent = plus.android.importClass("android.content.Intent"); + const Uri = plus.android.importClass("android.net.Uri"); + const File = plus.android.importClass("java.io.File"); + if (plus.os.sdkInt >= 24) { + const StrictMode = plus.android.importClass("android.os.StrictMode"); + StrictMode.disableDeathOnFileUriExposure(); + } + const file = new File(filePath); + if (!file.exists()) { + throw new Error("文件不存在: " + filePath); + } + const uri = Uri.fromFile(file); + const mimeType = getMimeType(filePath); + const intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(uri, mimeType); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + const chooser = Intent.createChooser(intent, "选择应用打开"); + main.startActivity(chooser); + formatAppLog("log", "at utils/fileOpener.js:83", "openFile success - chooser shown"); + } catch (e2) { + formatAppLog("error", "at utils/fileOpener.js:85", "openFile native failed, fallback:", e2); + uni.openDocument({ + filePath, + showMenu: true, + fail: typeof onFail === "function" ? onFail : () => { + } + }); + } + } + function downloadAndOpen$1(url, onFail) { + uni.downloadFile({ + url, + success: (res) => { + if (res.statusCode === 200) { + openFile(res.tempFilePath, onFail); + } else { + formatAppLog("error", "at utils/fileOpener.js:115", "下载失败, statusCode:", res.statusCode); + if (typeof onFail === "function") + onFail(); + } + }, + fail: (err) => { + formatAppLog("error", "at utils/fileOpener.js:120", "downloadFile fail:", err); + if (typeof onFail === "function") + onFail(); + } + }); + } const _sfc_main$a = { __name: "Chat", setup(__props, { expose: __expose }) { @@ -5639,7 +5723,7 @@ This will fail in production.`); if (friendSocketStore.isConnected) return; if (!userToken.value || !UserId.value) { - formatAppLog("warn", "at pages/Chat/Chat.vue:355", "Token或UserId未准备好"); + formatAppLog("warn", "at pages/Chat/Chat.vue:356", "Token或UserId未准备好"); return; } friendSocketStore.connect({ @@ -5730,7 +5814,7 @@ This will fail in production.`); ); return html; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:488", "解析失败", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:489", "解析失败", e2); return content; } }; @@ -5750,16 +5834,8 @@ This will fail in production.`); urls: [url] }); }; - const openFile = (url) => { - uni.downloadFile({ - url, - success: (res) => { - uni.openDocument({ - filePath: res.tempFilePath, - showMenu: true - }); - } - }); + const openFile$1 = (url) => { + downloadAndOpen$1(url); }; const formatFileSize = (size) => { if (!size) @@ -5789,7 +5865,7 @@ This will fail in production.`); files }; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:565", "解析文件信息失败:", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:558", "解析文件信息失败:", e2); return { textContent: content, files: [] @@ -5827,7 +5903,7 @@ This will fail in production.`); closeNewChatModal(); takeUserConversations(); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:611", "新建普通会话失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:604", "新建普通会话失败:", error); uni.showToast({ title: "创建会话失败,请重试", icon: "none" @@ -5870,7 +5946,7 @@ This will fail in production.`); }; const previewFileArray = vue.ref([]); const uploadPhoto = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:671", "点击了拍照上传"); + formatAppLog("log", "at pages/Chat/Chat.vue:664", "点击了拍照上传"); uni.chooseImage({ count: 1, sourceType: ["camera", "album"], @@ -5893,7 +5969,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:689", "选择图片失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:682", "选择图片失败", err); } }); }; @@ -5902,12 +5978,12 @@ This will fail in production.`); }; const fileList = vue.ref([]); const uploadFile = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:700", "点击了上传文件"); + formatAppLog("log", "at pages/Chat/Chat.vue:693", "点击了上传文件"); chooseFile({ count: 5, type: "all", success: (res) => { - formatAppLog("log", "at pages/Chat/Chat.vue:705", "成功了"); + formatAppLog("log", "at pages/Chat/Chat.vue:698", "成功了"); fileList.value = res.tempFiles; previewFileArray.value.push(...res.tempFiles); uni.showToast({ @@ -5916,7 +5992,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:716", "选择失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:709", "选择失败:", err); uni.showToast({ title: "选择失败", icon: "error" @@ -6079,12 +6155,8 @@ This will fail in production.`); success: (downloadRes) => { if (downloadRes.statusCode === 200) { hideDownloadToast(); - uni.openDocument({ - filePath: downloadRes.tempFilePath, - showMenu: true, - fail: () => { - showDownloadToast("error", "无法打开此文件", 2500); - } + openFile(downloadRes.tempFilePath, () => { + showDownloadToast("error", "无法打开此文件", 2500); }); } else { showDownloadToast("error", "下载失败", 2500); @@ -6118,7 +6190,7 @@ This will fail in production.`); previewFileArray.value = []; } catch (err) { uni.hideLoading(); - formatAppLog("error", "at pages/Chat/Chat.vue:951", "文件上传失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:940", "文件上传失败:", err); uni.showToast({ title: "文件上传失败,请重试", icon: "error" @@ -6252,15 +6324,15 @@ This will fail in production.`); } }; const stopConversation = async () => { - formatAppLog("log", "at pages/Chat/Chat.vue:1121", "中断对话 - 当前会话ID:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1110", "中断对话 - 当前会话ID:", currentSessionId.value); try { await socketStore.send({ type: "stop", conversation_id: currentSessionId.value }); - formatAppLog("log", "at pages/Chat/Chat.vue:1127", "中断指令已发送成功"); + formatAppLog("log", "at pages/Chat/Chat.vue:1116", "中断指令已发送成功"); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1129", "中断指令发送失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1118", "中断指令发送失败:", err); } if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); @@ -6278,9 +6350,9 @@ This will fail in production.`); }); }; vue.watch(() => socketStore.isThinking, (newVal, oldVal) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1153", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); + formatAppLog("log", "at pages/Chat/Chat.vue:1142", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); if (!oldVal && newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1156", "AI开始回复(跨设备同步),锁定输入框"); + formatAppLog("log", "at pages/Chat/Chat.vue:1145", "AI开始回复(跨设备同步),锁定输入框"); isThinking.value = true; if (!streamingMessageId.value) { streamingMessageId.value = "streaming-" + Date.now(); @@ -6294,7 +6366,7 @@ This will fail in production.`); return; } if (oldVal && !newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1172", "AI回复结束(正常/中断),解锁并刷新消息列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1161", "AI回复结束(正常/中断),解锁并刷新消息列表"); if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); streamingMessageId.value = null; @@ -6310,14 +6382,16 @@ This will fail in production.`); if (reason === "pc offline") { isThinking.value = false; socketStore.authFailReason = ""; - vue.nextTick(() => { - uni.showModal({ - title: "提示", - content: "PC端不在线,不可聊天", - showCancel: false, - confirmText: "知道了" - }); + uni.showToast({ + title: "PC端不在线,请先登录", + icon: "none", + duration: 500 }); + setTimeout(() => { + uni.reLaunch({ + url: "/pages/Login/Login" + }); + }, 500); } }); vue.watch(() => socketStore.messageString, (newContent) => { @@ -6346,15 +6420,15 @@ This will fail in production.`); UserData.value = await getUserInfo(userToken.value); UserId.value = UserData.value._id; UserAvatar.value = UserData.value.avatar || ""; - formatAppLog("log", "at pages/Chat/Chat.vue:1236", "用户信息已加载:", UserId.value, UserAvatar.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1227", "用户信息已加载:", UserId.value, UserAvatar.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1238", "获取用户信息失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1229", "获取用户信息失败:", error); } }; const takeUserConversations = async () => { try { userToken.value = getToken(); - formatAppLog("log", "at pages/Chat/Chat.vue:1246", "token:", userToken.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1237", "token:", userToken.value); UserConversations.value = await getUserConversations(userToken.value) || []; const savedSessionId = getCurrentSessionId(); if (savedSessionId && UserConversations.value.some((c) => c._id === savedSessionId)) { @@ -6364,7 +6438,7 @@ This will fail in production.`); } else { currentSessionId.value = ""; } - formatAppLog("log", "at pages/Chat/Chat.vue:1258", "保存会话id:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1249", "保存会话id:", currentSessionId.value); uni.setStorageSync("currentSessionId", currentSessionId.value); } catch (error) { uni.showToast({ @@ -6376,17 +6450,17 @@ This will fail in production.`); const FriendInfoList = vue.ref([]); const takeFriendList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1273", "开始获取好友列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1264", "开始获取好友列表"); const friendList = await getChatFriend(UserId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1276", "friendList:", friendList); + formatAppLog("log", "at pages/Chat/Chat.vue:1267", "friendList:", friendList); if (friendList && friendList.length) { FriendInfoList.value = await takeUserAvatar(friendList); } else { FriendInfoList.value = []; - formatAppLog("log", "at pages/Chat/Chat.vue:1281", "好友列表为空"); + formatAppLog("log", "at pages/Chat/Chat.vue:1272", "好友列表为空"); } } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1284", "获取好友列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1275", "获取好友列表失败:", error); FriendInfoList.value = []; } finally { UserConversations.value = FriendInfoList.value; @@ -6413,17 +6487,17 @@ This will fail in production.`); }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1314", "获取好友头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1305", "获取好友头像失败", err); return friendList; } }; const GroupList = vue.ref([]); const takeGroupList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1324", "开始获取群聊列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1315", "开始获取群聊列表"); GroupList.value = await getGroup(UserId.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1329", "获取群聊列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1320", "获取群聊列表失败:", error); GroupList.value = []; } finally { UserConversations.value = GroupList.value; @@ -6435,22 +6509,22 @@ This will fail in production.`); return []; try { const memberIds = memberList.map((item) => item.groupContactId); - formatAppLog("log", "at pages/Chat/Chat.vue:1343", "请求头像的ID列表:", memberIds); + formatAppLog("log", "at pages/Chat/Chat.vue:1334", "请求头像的ID列表:", memberIds); const memberAvatarList = await getUserAvatar(userToken.value, memberIds); - formatAppLog("log", "at pages/Chat/Chat.vue:1345", "头像接口返回数据:", memberAvatarList); + formatAppLog("log", "at pages/Chat/Chat.vue:1336", "头像接口返回数据:", memberAvatarList); const userMap = new Map(memberAvatarList.map((user) => [user.user_id, user]) || []); - formatAppLog("log", "at pages/Chat/Chat.vue:1348", "userMap的keys:", Array.from(userMap.keys())); + formatAppLog("log", "at pages/Chat/Chat.vue:1339", "userMap的keys:", Array.from(userMap.keys())); return memberList.map((member) => { const memberId = member.groupContactId; const userInfo = userMap.get(memberId); - formatAppLog("log", "at pages/Chat/Chat.vue:1353", `查找 ${memberId} 的头像:`, userInfo); + formatAppLog("log", "at pages/Chat/Chat.vue:1344", `查找 ${memberId} 的头像:`, userInfo); return { ...member, avatar: (userInfo == null ? void 0 : userInfo.avatar) || null }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1360", "获取群成员头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1351", "获取群成员头像失败", err); return memberList; } }; @@ -6497,12 +6571,12 @@ This will fail in production.`); const takeGroupMessages = async () => { try { allmessages.value = await getGroupMessages(currentSessionId.value) || []; - formatAppLog("log", "at pages/Chat/Chat.vue:1424", "群聊消息:", allmessages.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1415", "群聊消息:", allmessages.value); const memberList = await getGroupMemberList(currentSessionId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1427", "获取到的群成员列表:", memberList); + formatAppLog("log", "at pages/Chat/Chat.vue:1418", "获取到的群成员列表:", memberList); if (memberList && memberList.length) { groupMemberList.value = await takeGroupMemberAvatar(memberList); - formatAppLog("log", "at pages/Chat/Chat.vue:1430", "群成员列表(带头像):", groupMemberList.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1421", "群成员列表(带头像):", groupMemberList.value); } else { groupMemberList.value = []; } @@ -6526,9 +6600,9 @@ This will fail in production.`); } }; vue.watch(() => friendSocketStore.MessageReceived, (newId) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1477", "收到了好友消息"); + formatAppLog("log", "at pages/Chat/Chat.vue:1468", "收到了好友消息"); if (newId) { - formatAppLog("log", "at pages/Chat/Chat.vue:1479", "ChatType:", ChatType.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1470", "ChatType:", ChatType.value); switch (ChatType.value) { case 0: takeConversationMessages(); @@ -6543,7 +6617,7 @@ This will fail in production.`); friendSocketStore.MessageReceived = false; break; default: - formatAppLog("log", "at pages/Chat/Chat.vue:1495", "default 分支"); + formatAppLog("log", "at pages/Chat/Chat.vue:1486", "default 分支"); friendSocketStore.MessageReceived = false; break; } @@ -6622,7 +6696,7 @@ This will fail in production.`); onUnload(() => { socketStore.disconnect(); }); - const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, wyxdWorkspaceId, wyxdFilePath, wyxdFileName, wyxdUserToken, hasWyxdFile, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goWyxdViewer, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { + const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, wyxdWorkspaceId, wyxdFilePath, wyxdFileName, wyxdUserToken, hasWyxdFile, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goWyxdViewer, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { return downloadToastTimer; }, set downloadToastTimer(v) { downloadToastTimer = v; @@ -6680,6 +6754,10 @@ This will fail in production.`); return chooseFile; }, get socketManager() { return socketManager; + }, get openFileNative() { + return openFile; + }, get downloadAndOpen() { + return downloadAndOpen$1; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; @@ -7423,7 +7501,7 @@ This will fail in production.`); await doUploadWorkspaceFiles(files); }, fail: (err) => { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:176", "选择文件失败:", err); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:177", "选择文件失败:", err); } }); }; @@ -7460,7 +7538,7 @@ This will fail in production.`); initCurrentFolderList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:229", "上传文件失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:230", "上传文件失败:", error); uni.showToast({ title: typeof error === "string" ? error : "上传失败,请重试", icon: "error" @@ -7500,7 +7578,7 @@ This will fail in production.`); closeNewFolderModal(); initCurrentFolderList(); } catch (error) { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:275", "创建文件夹失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:276", "创建文件夹失败:", error); uni.showToast({ title: "创建失败,请重试", icon: "error" @@ -7511,8 +7589,9 @@ This will fail in production.`); if (isSelectFolder.value) return; const isWyxd = folder.name && folder.name.toLowerCase().endsWith(".wyxd"); - const itemList = isWyxd ? ["下载", "AI修改", "删除", "WYXD查看器"] : ["下载", "删除"]; + const itemList = isWyxd ? ["下载", "删除", "WYXD查看器", "AI修改"] : ["下载", "删除"]; uni.showActionSheet({ + title: folder.name, itemList, success: (res) => { if (isWyxd) { @@ -7521,14 +7600,14 @@ This will fail in production.`); handleDownload(folder); break; case 1: - handleAiModify(folder); - break; - case 2: handleDelete(folder); break; - case 3: + case 2: openWyxdViewer(folder); break; + case 3: + handleAiModify(folder); + break; } } else { switch (res.tapIndex) { @@ -7570,7 +7649,7 @@ This will fail in production.`); initCurrentFolderList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:352", "重命名失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:354", "重命名失败:", error); uni.showToast({ title: typeof error === "string" ? error : "重命名失败,请重试", icon: "error" @@ -7615,8 +7694,8 @@ This will fail in production.`); uni.hideLoading(); if (downloadRes.statusCode === 200) { const tempPath = downloadRes.tempFilePath; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:409", "// 下载成功,文件下载路径为:", tempPath); - openFile(tempPath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:411", "// 下载成功,文件下载路径为:", tempPath); + openFile$1(tempPath); } else { uni.showToast({ title: "下载失败", @@ -7626,7 +7705,7 @@ This will fail in production.`); }, fail: (err) => { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:420", "下载文件失败:", err); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:422", "下载文件失败:", err); uni.showToast({ title: "下载失败,请重试", icon: "error" @@ -7635,52 +7714,24 @@ This will fail in production.`); }); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:429", "获取下载链接失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:431", "获取下载链接失败:", error); uni.showToast({ title: "获取下载链接失败,请重试", icon: "error" }); } }; - const openFile = (filePath) => { - uni.openDocument({ - filePath, - success: () => uni.showToast({ - title: "打开成功", - icon: "success" - }), - fail: (err) => { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:446", "打开文件失败:", err); - uni.showToast({ - title: "无法打开此文件", - icon: "error" - }); - } - }); - }; - const openFileWithMenu = (filePath) => { - uni.openDocument({ - filePath, - showMenu: true, - success: () => uni.showToast({ - title: "打开成功", - icon: "success" - }), - fail: (err) => { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:465", "打开文件失败:", err); - uni.showToast({ - title: "无法打开此文件", - icon: "error" - }); - } + const openFile$1 = (filePath) => { + openFile(filePath, () => { + uni.showToast({ title: "无法打开此文件", icon: "error" }); }); }; const openWyxdViewer = (folder) => { const filePath = folder.path.startsWith("./") ? folder.path.slice(2) : folder.path; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:477", "解析文件路径:", filePath); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:478", "folder", folder); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:479", "encode", encodeURIComponent(filePath)); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:480", "encode", encodeURIComponent(folder.name)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:449", "解析文件路径:", filePath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:450", "folder", folder); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:451", "encode", encodeURIComponent(filePath)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:452", "encode", encodeURIComponent(folder.name)); uni.navigateTo({ url: "/pages/WYXD/WYXD?workspaceId=" + encodeURIComponent(workspaceId.value) + "&filePath=" + encodeURIComponent(filePath) + "&fileName=" + encodeURIComponent(folder.name) + "&userToken=" + encodeURIComponent(UserToken.value) }); @@ -7699,7 +7750,7 @@ This will fail in production.`); if (res.confirm) { try { const filePath = `./${folder.path}`; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:510", "删除的是:", filePath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:482", "删除的是:", filePath); await daleteWorkspace(UserToken.value, workspaceId.value, filePath); uni.showToast({ title: "删除成功", @@ -7707,7 +7758,7 @@ This will fail in production.`); }); initCurrentFolderList(); } catch (error) { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:518", "删除失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:490", "删除失败:", error); uni.showToast({ title: "删除失败,请重试", icon: "error" @@ -7775,7 +7826,7 @@ This will fail in production.`); const currentFolderList = vue.ref([]); const getCurrentFolderList = () => { var _a, _b; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:599", "当前路径为:", JSON.stringify(folderStack.value)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:571", "当前路径为:", JSON.stringify(folderStack.value)); const currentPath = folderStack.value.length > 0 ? folderStack.value[folderStack.value.length - 1].path : "."; if (currentPath === ".") { return ((_a = allFoldersData.value) == null ? void 0 : _a.children) || []; @@ -7799,7 +7850,7 @@ This will fail in production.`); const initCurrentFolderList = async () => { workspaceId.value = getWorkspaceId(); UserToken.value = getToken(); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:626", "getWorkspaceId:", workspaceId.value); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:598", "getWorkspaceId:", workspaceId.value); allFoldersData.value = await getWorkspaceList(UserToken.value, workspaceId.value); currentFolderList.value = getCurrentFolderList(); }; @@ -7846,7 +7897,7 @@ This will fail in production.`); uni.navigateBack({ delta: 1, fail() { - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:686", "返回失败,进入兜底跳转"); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:658", "返回失败,进入兜底跳转"); uni.reLaunch({ url: "/pages/Chat/Chat" }); @@ -7857,7 +7908,7 @@ This will fail in production.`); vue.onMounted(() => { initCurrentFolderList(); }); - const __returned__ = { UserToken, workspaceId, navbarBeforeTitle, navbarTitle, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, showNewFolder, isNFNFocused, newFolderName, closeNewFolderModal, newWorkspaceFolder, handleUploadFile, doUploadWorkspaceFiles, currentFolderPath, folderPathPreview, confirmCreateFolder, handleLongPress, handleRename, handleDownload, openFile, openFileWithMenu, openWyxdViewer, handleAiModify, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, getFileIcon, allFoldersData, folderStack, currentFolderList, getCurrentFolderList, initCurrentFolderList, handleFolderClick, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getWorkspaceId() { + const __returned__ = { UserToken, workspaceId, navbarBeforeTitle, navbarTitle, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, showNewFolder, isNFNFocused, newFolderName, closeNewFolderModal, newWorkspaceFolder, handleUploadFile, doUploadWorkspaceFiles, currentFolderPath, folderPathPreview, confirmCreateFolder, handleLongPress, handleRename, handleDownload, openFile: openFile$1, openWyxdViewer, handleAiModify, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, getFileIcon, allFoldersData, folderStack, currentFolderList, getCurrentFolderList, initCurrentFolderList, handleFolderClick, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getWorkspaceId() { return getWorkspaceId; }, get getToken() { return getToken; @@ -7877,6 +7928,8 @@ This will fail in production.`); return workspaceUploadFileByURL; }, get updateWorkspaceFileName() { return updateWorkspaceFileName; + }, get openFileNative() { + return openFile; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; @@ -10077,7 +10130,7 @@ This will fail in production.`); personalFiles.value = personalData || []; } } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:689", "获取文件列表失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:690", "获取文件列表失败:", error); rawPersonalFileData.value = []; personalFiles.value = []; } @@ -10086,11 +10139,11 @@ This will fail in production.`); try { teamId = teamId == null ? "" : String(teamId); const teamData = await getCloudFileList(userToken.value, "team", "/", teamId); - formatAppLog("log", "at pages/CloudDatabase/CloudDatabase.vue:700", "团队云端文件:", JSON.stringify(teamData)); + formatAppLog("log", "at pages/CloudDatabase/CloudDatabase.vue:701", "团队云端文件:", JSON.stringify(teamData)); rawTeamFileData.value = teamData || []; teamFiles.value = teamData || []; } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:704", "获取团队文件列表失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:705", "获取团队文件列表失败:", error); rawTeamFileData.value = []; teamFiles.value = []; } @@ -10177,7 +10230,7 @@ This will fail in production.`); uni.hideLoading(); if (downloadRes.statusCode === 200) { const tempPath = downloadRes.tempFilePath; - openFile(tempPath); + openFile$1(tempPath); } else { uni.showToast({ title: "下载失败", @@ -10195,29 +10248,21 @@ This will fail in production.`); }); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:821", "下载失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:822", "下载失败:", error); uni.showToast({ title: "下载失败,请重试", icon: "error" }); } }; - const openFile = (filePath) => { - uni.openDocument({ - filePath, - success: () => uni.showToast({ - title: "打开成功", - icon: "success" - }), - fail: (err) => { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:838", "打开文件失败:", err); - openFileWithMenu(filePath); - } + const openFile$1 = (filePath) => { + openFile(filePath, () => { + openFileWithMenu(filePath); }); }; const openFileWithMenu = (filePath) => { plus.runtime.openFile(filePath, {}, (e2) => { - formatAppLog("log", "at pages/CloudDatabase/CloudDatabase.vue:850", "文件打开成功"); + formatAppLog("log", "at pages/CloudDatabase/CloudDatabase.vue:842", "文件打开成功"); }); }; const handleRename = (file) => { @@ -10259,7 +10304,7 @@ This will fail in production.`); refreshCurrentFileList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:916", "deleteCloudFile 失败,尝试 daleteWorkspace:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:908", "deleteCloudFile 失败,尝试 daleteWorkspace:", error); try { const filePath = file.path || "/" + file.name; if (workspaceId.value) { @@ -10271,7 +10316,7 @@ This will fail in production.`); }); refreshCurrentFileList(); } catch (err2) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:928", "删除失败:", err2); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:920", "删除失败:", err2); uni.showToast({ title: "删除失败,请重试", icon: "error" @@ -10321,7 +10366,7 @@ This will fail in production.`); closeNewFolderModal(); refreshCurrentFileList(); } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:985", "创建文件夹失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:977", "创建文件夹失败:", error); uni.showToast({ title: "创建失败,请重试", icon: "error" @@ -10364,7 +10409,7 @@ This will fail in production.`); doUploadFiles(tempFiles); }, fail: (err) => { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1035", "选择文件失败:", err); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1027", "选择文件失败:", err); } }); }; @@ -10385,7 +10430,7 @@ This will fail in production.`); refreshCurrentFileList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1061", "上传文件失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1053", "上传文件失败:", error); uni.showToast({ title: "上传失败,请重试", icon: "error" @@ -10405,7 +10450,7 @@ This will fail in production.`); const list = await getCloudDbList(token); allDatabases.value = list || []; } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1087", "获取数据库列表失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1079", "获取数据库列表失败:", error); allDatabases.value = []; } finally { isDbLoading.value = false; @@ -10435,7 +10480,7 @@ This will fail in production.`); await fetchDbList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1118", "创建数据库失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1110", "创建数据库失败:", error); uni.showToast({ title: "创建失败,请重试", icon: "error" }); } }; @@ -10460,7 +10505,7 @@ This will fail in production.`); uploadDbFilePath.value = file.path; }, fail: (err) => { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1147", "选择文件失败:", err); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1139", "选择文件失败:", err); uni.showToast({ title: "选择文件失败", icon: "none" }); } }); @@ -10487,7 +10532,7 @@ This will fail in production.`); await fetchDbList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1175", "上传数据库失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1167", "上传数据库失败:", error); uni.showToast({ title: "上传失败,请重试", icon: "error" }); } }; @@ -10506,7 +10551,7 @@ This will fail in production.`); await fetchDbList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1195", "删除数据库失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1187", "删除数据库失败:", error); uni.showToast({ title: "删除失败,请重试", icon: "error" }); } } @@ -10564,12 +10609,12 @@ This will fail in production.`); const groups = await getTeamList(token); teamGroups.value = groups || []; } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1264", "获取团队列表失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1256", "获取团队列表失败:", error); teamGroups.value = []; } }; const selectTeam = async (teamId) => { - formatAppLog("log", "at pages/CloudDatabase/CloudDatabase.vue:1270", "团队id为", teamId); + formatAppLog("log", "at pages/CloudDatabase/CloudDatabase.vue:1262", "团队id为", teamId); currentTeamId.value = teamId; try { const token = getToken(); @@ -10588,7 +10633,7 @@ This will fail in production.`); }; }); } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1287", "获取团队成员失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1279", "获取团队成员失败:", error); currentTeamMembers.value = []; } currentFolderPath.value = []; @@ -10620,7 +10665,7 @@ This will fail in production.`); }; }); } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1321", "获取团队成员失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1313", "获取团队成员失败:", error); uni.showToast({ title: "获取团队信息失败", icon: "none" }); return; } @@ -10682,7 +10727,7 @@ This will fail in production.`); currentTeamId.value = currentTeamId.value; } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1393", "修改团队信息失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1385", "修改团队信息失败:", error); uni.showToast({ title: "修改失败,请重试", icon: "error" }); } }; @@ -10703,7 +10748,7 @@ This will fail in production.`); await refreshTeamMembers(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1418", "调整成员身份失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1410", "调整成员身份失败:", error); uni.showToast({ title: "操作失败,请重试", icon: "error" }); } } @@ -10727,7 +10772,7 @@ This will fail in production.`); await refreshTeamMembers(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1444", "移除团队成员失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1436", "移除团队成员失败:", error); uni.showToast({ title: "移除失败,请重试", icon: "error" }); } } @@ -10767,7 +10812,7 @@ This will fail in production.`); if (searchResultList.value.length === 0) { } } catch (error) { - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1486", "搜索用户失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1478", "搜索用户失败:", error); searchResultList.value = []; searched.value = true; } @@ -10790,7 +10835,7 @@ This will fail in production.`); await refreshTeamMembers(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1512", "添加团队成员失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1504", "添加团队成员失败:", error); uni.showToast({ title: "添加失败,请重试", icon: "error" }); } } @@ -10821,7 +10866,7 @@ This will fail in production.`); closeTeamManage(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1546", "删除团队失败:", error); + formatAppLog("error", "at pages/CloudDatabase/CloudDatabase.vue:1538", "删除团队失败:", error); uni.showToast({ title: "删除失败,请重试", icon: "error" }); } } @@ -10833,7 +10878,7 @@ This will fail in production.`); await fetchTeamList(); await fetchDbList(); }); - const __returned__ = { userToken, userId, workspaceId, currentCategory, switchCategory, navbarTitle, isMenuOpen, isSelectFolder, selectFileList, handleMenu, handleSelectFolder, parentFolderName, handleBackOrUp, rawPersonalFileData, rawTeamFileData, personalFiles, teamFiles, currentFolderPath, isFolder, getFileExtension, getFileIcon, formatFileSize, currentFolderDisplayPath, personalFileCount, findFolderByPath, loadCurrentFiles, fetchFileList, fetchTeamFileList, handleFileClick, handleFileLongPress, handleDownload, openFile, openFileWithMenu, handleRename, handleDeleteFile, refreshCurrentFileList, showNewFolder, newFolderName, openNewFolderModal, closeNewFolderModal, confirmCreateFolder, showUploadPathInput, uploadPath, handleUploadFile, closeUploadPathInput, confirmUploadPath, chooseAndUploadFile, doUploadFiles, allDatabases, isDbLoading, personalDatabases, teamDatabases, showNewDb, newDbName, fetchDbList, openNewDbModal, closeNewDbModal, confirmCreateDb, showUploadDb, uploadDbFileName, uploadDbFilePath, openUploadDbModal, closeUploadDbModal, handlePickDbFile, confirmUploadDb, handleDeleteDb, handleDbClick, formatDbTime, getAccessLevelLabel, showTeamManage, teamGroups, currentTeamId, currentTeamMembers, inviteKeyword, currentTeamDescription, currentTeamType, currentUserRoleInTeam, isTeamAdmin, fetchTeamList, selectTeam, openTeamManage, closeTeamManage, showEditTeam, editTeamName, editTeamDesc, editTeamType, openEditTeamModal, closeEditTeamModal, confirmEditTeam, toggleMemberRole, removeTeamMemberHandler, refreshTeamMembers, searchResultList, searched, searchTeamMember, addTeamMemberHandler, handleDeleteTeam, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getToken() { + const __returned__ = { userToken, userId, workspaceId, currentCategory, switchCategory, navbarTitle, isMenuOpen, isSelectFolder, selectFileList, handleMenu, handleSelectFolder, parentFolderName, handleBackOrUp, rawPersonalFileData, rawTeamFileData, personalFiles, teamFiles, currentFolderPath, isFolder, getFileExtension, getFileIcon, formatFileSize, currentFolderDisplayPath, personalFileCount, findFolderByPath, loadCurrentFiles, fetchFileList, fetchTeamFileList, handleFileClick, handleFileLongPress, handleDownload, openFile: openFile$1, openFileWithMenu, handleRename, handleDeleteFile, refreshCurrentFileList, showNewFolder, newFolderName, openNewFolderModal, closeNewFolderModal, confirmCreateFolder, showUploadPathInput, uploadPath, handleUploadFile, closeUploadPathInput, confirmUploadPath, chooseAndUploadFile, doUploadFiles, allDatabases, isDbLoading, personalDatabases, teamDatabases, showNewDb, newDbName, fetchDbList, openNewDbModal, closeNewDbModal, confirmCreateDb, showUploadDb, uploadDbFileName, uploadDbFilePath, openUploadDbModal, closeUploadDbModal, handlePickDbFile, confirmUploadDb, handleDeleteDb, handleDbClick, formatDbTime, getAccessLevelLabel, showTeamManage, teamGroups, currentTeamId, currentTeamMembers, inviteKeyword, currentTeamDescription, currentTeamType, currentUserRoleInTeam, isTeamAdmin, fetchTeamList, selectTeam, openTeamManage, closeTeamManage, showEditTeam, editTeamName, editTeamDesc, editTeamType, openEditTeamModal, closeEditTeamModal, confirmEditTeam, toggleMemberRole, removeTeamMemberHandler, refreshTeamMembers, searchResultList, searched, searchTeamMember, addTeamMemberHandler, handleDeleteTeam, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getToken() { return getToken; }, get chooseFile() { return chooseFile; @@ -10877,6 +10922,8 @@ This will fail in production.`); return uploadCloudDbFile; }, get deleteCloudDb() { return deleteCloudDb; + }, get openFileNative() { + return openFile; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; @@ -12903,7 +12950,7 @@ This will fail in production.`); if (friendSocketStore.isConnected) return; if (!userToken.value || !UserId.value) { - formatAppLog("warn", "at pages/text/text.vue:334", "Token或UserId未准备好"); + formatAppLog("warn", "at pages/text/text.vue:335", "Token或UserId未准备好"); return; } friendSocketStore.connect({ @@ -12986,7 +13033,7 @@ This will fail in production.`); ); return html; } catch (e2) { - formatAppLog("error", "at pages/text/text.vue:455", "解析失败", e2); + formatAppLog("error", "at pages/text/text.vue:456", "解析失败", e2); return content; } }; @@ -13006,16 +13053,8 @@ This will fail in production.`); urls: [url] }); }; - const openFile = (url) => { - uni.downloadFile({ - url, - success: (res) => { - uni.openDocument({ - filePath: res.tempFilePath, - showMenu: true - }); - } - }); + const openFile$1 = (url) => { + downloadAndOpen(url); }; const formatFileSize = (size) => { if (!size) @@ -13045,7 +13084,7 @@ This will fail in production.`); files }; } catch (e2) { - formatAppLog("error", "at pages/text/text.vue:532", "解析文件信息失败:", e2); + formatAppLog("error", "at pages/text/text.vue:525", "解析文件信息失败:", e2); return { textContent: content, files: [] @@ -13082,7 +13121,7 @@ This will fail in production.`); } takeUserConversations(); } catch (error) { - formatAppLog("error", "at pages/text/text.vue:577", "新建普通会话失败:", error); + formatAppLog("error", "at pages/text/text.vue:570", "新建普通会话失败:", error); uni.showToast({ title: "创建会话失败,请重试", icon: "none" @@ -13120,7 +13159,7 @@ This will fail in production.`); }; const previewFileArray = vue.ref([]); const uploadPhoto = () => { - formatAppLog("log", "at pages/text/text.vue:626", "点击了拍照上传"); + formatAppLog("log", "at pages/text/text.vue:619", "点击了拍照上传"); uni.chooseImage({ count: 1, sourceType: ["camera", "album"], @@ -13143,7 +13182,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/text/text.vue:644", "选择图片失败", err); + formatAppLog("error", "at pages/text/text.vue:637", "选择图片失败", err); } }); }; @@ -13152,12 +13191,12 @@ This will fail in production.`); }; const fileList = vue.ref([]); const uploadFile = () => { - formatAppLog("log", "at pages/text/text.vue:655", "点击了上传文件"); + formatAppLog("log", "at pages/text/text.vue:648", "点击了上传文件"); chooseFile({ count: 5, type: "all", success: (res) => { - formatAppLog("log", "at pages/text/text.vue:660", "成功了"); + formatAppLog("log", "at pages/text/text.vue:653", "成功了"); fileList.value = res.tempFiles; previewFileArray.value.push(...res.tempFiles); uni.showToast({ @@ -13166,7 +13205,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/text/text.vue:671", "选择失败:", err); + formatAppLog("error", "at pages/text/text.vue:664", "选择失败:", err); uni.showToast({ title: "选择失败", icon: "error" @@ -13366,7 +13405,7 @@ This will fail in production.`); previewFileArray.value = []; } catch (err) { uni.hideLoading(); - formatAppLog("error", "at pages/text/text.vue:895", "文件上传失败:", err); + formatAppLog("error", "at pages/text/text.vue:888", "文件上传失败:", err); uni.showToast({ title: "文件上传失败,请重试", icon: "error" @@ -13500,15 +13539,15 @@ This will fail in production.`); } }; const stopConversation = async () => { - formatAppLog("log", "at pages/text/text.vue:1064", "中断对话 - 当前会话ID:", currentSessionId.value); + formatAppLog("log", "at pages/text/text.vue:1057", "中断对话 - 当前会话ID:", currentSessionId.value); try { await socketStore.send({ type: "stop", conversation_id: currentSessionId.value }); - formatAppLog("log", "at pages/text/text.vue:1070", "中断指令已发送成功"); + formatAppLog("log", "at pages/text/text.vue:1063", "中断指令已发送成功"); } catch (err) { - formatAppLog("error", "at pages/text/text.vue:1072", "中断指令发送失败:", err); + formatAppLog("error", "at pages/text/text.vue:1065", "中断指令发送失败:", err); } if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); @@ -13526,9 +13565,9 @@ This will fail in production.`); }); }; vue.watch(() => socketStore.isThinking, (newVal, oldVal) => { - formatAppLog("log", "at pages/text/text.vue:1096", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); + formatAppLog("log", "at pages/text/text.vue:1089", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); if (!oldVal && newVal) { - formatAppLog("log", "at pages/text/text.vue:1099", "AI开始回复(跨设备同步),锁定输入框"); + formatAppLog("log", "at pages/text/text.vue:1092", "AI开始回复(跨设备同步),锁定输入框"); isThinking.value = true; if (!streamingMessageId.value) { streamingMessageId.value = "streaming-" + Date.now(); @@ -13542,7 +13581,7 @@ This will fail in production.`); return; } if (oldVal && !newVal) { - formatAppLog("log", "at pages/text/text.vue:1115", "AI回复结束(正常/中断),解锁并刷新消息列表"); + formatAppLog("log", "at pages/text/text.vue:1108", "AI回复结束(正常/中断),解锁并刷新消息列表"); if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); streamingMessageId.value = null; @@ -13558,14 +13597,16 @@ This will fail in production.`); if (reason === "pc offline") { isThinking.value = false; socketStore.authFailReason = ""; - vue.nextTick(() => { - uni.showModal({ - title: "提示", - content: "PC端不在线,不可聊天", - showCancel: false, - confirmText: "知道了" - }); + uni.showToast({ + title: "PC端不在线", + icon: "none", + duration: 1500 }); + setTimeout(() => { + uni.reLaunch({ + url: "/pages/Login/Login" + }); + }, 1500); } }); vue.watch(() => socketStore.messageString, (newContent) => { @@ -13594,15 +13635,15 @@ This will fail in production.`); UserData.value = await getUserInfo(userToken.value); UserId.value = UserData.value._id; UserAvatar.value = UserData.value.avatar || ""; - formatAppLog("log", "at pages/text/text.vue:1179", "用户信息已加载:", UserId.value, UserAvatar.value); + formatAppLog("log", "at pages/text/text.vue:1174", "用户信息已加载:", UserId.value, UserAvatar.value); } catch (error) { - formatAppLog("error", "at pages/text/text.vue:1181", "获取用户信息失败:", error); + formatAppLog("error", "at pages/text/text.vue:1176", "获取用户信息失败:", error); } }; const takeUserConversations = async () => { try { userToken.value = getToken(); - formatAppLog("log", "at pages/text/text.vue:1189", "token:", userToken.value); + formatAppLog("log", "at pages/text/text.vue:1184", "token:", userToken.value); UserConversations.value = await getUserConversations(userToken.value) || []; const savedSessionId = getCurrentSessionId(); if (savedSessionId && UserConversations.value.some((c) => c._id === savedSessionId)) { @@ -13612,7 +13653,7 @@ This will fail in production.`); } else { currentSessionId.value = ""; } - formatAppLog("log", "at pages/text/text.vue:1201", "保存会话id:", currentSessionId.value); + formatAppLog("log", "at pages/text/text.vue:1196", "保存会话id:", currentSessionId.value); uni.setStorageSync("currentSessionId", currentSessionId.value); } catch (error) { uni.showToast({ @@ -13624,17 +13665,17 @@ This will fail in production.`); const FriendInfoList = vue.ref([]); const takeFriendList = async () => { try { - formatAppLog("log", "at pages/text/text.vue:1216", "开始获取好友列表"); + formatAppLog("log", "at pages/text/text.vue:1211", "开始获取好友列表"); const friendList = await getChatFriend(UserId.value); - formatAppLog("log", "at pages/text/text.vue:1219", "friendList:", friendList); + formatAppLog("log", "at pages/text/text.vue:1214", "friendList:", friendList); if (friendList && friendList.length) { FriendInfoList.value = await takeUserAvatar(friendList); } else { FriendInfoList.value = []; - formatAppLog("log", "at pages/text/text.vue:1224", "好友列表为空"); + formatAppLog("log", "at pages/text/text.vue:1219", "好友列表为空"); } } catch (error) { - formatAppLog("error", "at pages/text/text.vue:1227", "获取好友列表失败:", error); + formatAppLog("error", "at pages/text/text.vue:1222", "获取好友列表失败:", error); FriendInfoList.value = []; } finally { UserConversations.value = FriendInfoList.value; @@ -13661,17 +13702,17 @@ This will fail in production.`); }; }); } catch (err) { - formatAppLog("error", "at pages/text/text.vue:1257", "获取好友头像失败", err); + formatAppLog("error", "at pages/text/text.vue:1252", "获取好友头像失败", err); return friendList; } }; const GroupList = vue.ref([]); const takeGroupList = async () => { try { - formatAppLog("log", "at pages/text/text.vue:1267", "开始获取群聊列表"); + formatAppLog("log", "at pages/text/text.vue:1262", "开始获取群聊列表"); GroupList.value = await getGroup(UserId.value); } catch (error) { - formatAppLog("error", "at pages/text/text.vue:1272", "获取群聊列表失败:", error); + formatAppLog("error", "at pages/text/text.vue:1267", "获取群聊列表失败:", error); GroupList.value = []; } finally { UserConversations.value = GroupList.value; @@ -13683,22 +13724,22 @@ This will fail in production.`); return []; try { const memberIds = memberList.map((item) => item.groupContactId); - formatAppLog("log", "at pages/text/text.vue:1286", "请求头像的ID列表:", memberIds); + formatAppLog("log", "at pages/text/text.vue:1281", "请求头像的ID列表:", memberIds); const memberAvatarList = await getUserAvatar(userToken.value, memberIds); - formatAppLog("log", "at pages/text/text.vue:1288", "头像接口返回数据:", memberAvatarList); + formatAppLog("log", "at pages/text/text.vue:1283", "头像接口返回数据:", memberAvatarList); const userMap = new Map(memberAvatarList.map((user) => [user.user_id, user]) || []); - formatAppLog("log", "at pages/text/text.vue:1291", "userMap的keys:", Array.from(userMap.keys())); + formatAppLog("log", "at pages/text/text.vue:1286", "userMap的keys:", Array.from(userMap.keys())); return memberList.map((member) => { const memberId = member.groupContactId; const userInfo = userMap.get(memberId); - formatAppLog("log", "at pages/text/text.vue:1296", `查找 ${memberId} 的头像:`, userInfo); + formatAppLog("log", "at pages/text/text.vue:1291", `查找 ${memberId} 的头像:`, userInfo); return { ...member, avatar: (userInfo == null ? void 0 : userInfo.avatar) || null }; }); } catch (err) { - formatAppLog("error", "at pages/text/text.vue:1303", "获取群成员头像失败", err); + formatAppLog("error", "at pages/text/text.vue:1298", "获取群成员头像失败", err); return memberList; } }; @@ -13741,12 +13782,12 @@ This will fail in production.`); const takeGroupMessages = async () => { try { allmessages.value = await getGroupMessages(currentSessionId.value) || []; - formatAppLog("log", "at pages/text/text.vue:1363", "群聊消息:", allmessages.value); + formatAppLog("log", "at pages/text/text.vue:1358", "群聊消息:", allmessages.value); const memberList = await getGroupMemberList(currentSessionId.value); - formatAppLog("log", "at pages/text/text.vue:1366", "获取到的群成员列表:", memberList); + formatAppLog("log", "at pages/text/text.vue:1361", "获取到的群成员列表:", memberList); if (memberList && memberList.length) { groupMemberList.value = await takeGroupMemberAvatar(memberList); - formatAppLog("log", "at pages/text/text.vue:1369", "群成员列表(带头像):", groupMemberList.value); + formatAppLog("log", "at pages/text/text.vue:1364", "群成员列表(带头像):", groupMemberList.value); } else { groupMemberList.value = []; } @@ -13768,9 +13809,9 @@ This will fail in production.`); } }; vue.watch(() => friendSocketStore.MessageReceived, (newId) => { - formatAppLog("log", "at pages/text/text.vue:1414", "收到了好友消息"); + formatAppLog("log", "at pages/text/text.vue:1409", "收到了好友消息"); if (newId) { - formatAppLog("log", "at pages/text/text.vue:1416", "ChatType:", ChatType.value); + formatAppLog("log", "at pages/text/text.vue:1411", "ChatType:", ChatType.value); switch (ChatType.value) { case 0: takeConversationMessages(); @@ -13785,7 +13826,7 @@ This will fail in production.`); friendSocketStore.MessageReceived = false; break; default: - formatAppLog("log", "at pages/text/text.vue:1432", "default 分支"); + formatAppLog("log", "at pages/text/text.vue:1427", "default 分支"); friendSocketStore.MessageReceived = false; break; } @@ -13847,7 +13888,7 @@ This will fail in production.`); onUnload(() => { socketStore.disconnect(); }); - const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { + const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { return downloadToastTimer; }, set downloadToastTimer(v) { downloadToastTimer = v; @@ -13903,6 +13944,8 @@ This will fail in production.`); return chooseFile; }, get socketManager() { return socketManager; + }, get openFileNative() { + return openFile; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; diff --git a/unpackage/dist/dev/app-plus/manifest.json b/unpackage/dist/dev/app-plus/manifest.json index bb75db3..dc0a2bb 100644 --- a/unpackage/dist/dev/app-plus/manifest.json +++ b/unpackage/dist/dev/app-plus/manifest.json @@ -5,7 +5,7 @@ "iPad" ], "id": "__UNI__923FD9E", - "name": "test1", + "name": "宇恒一号", "version": { "name": "1.1.1", "code": 2 diff --git a/utils/fileOpener.js b/utils/fileOpener.js new file mode 100644 index 0000000..ce56409 --- /dev/null +++ b/utils/fileOpener.js @@ -0,0 +1,124 @@ +/** + * 文件打开工具 - 强制弹出应用选择器 + * + * uni.openDocument 的 showMenu 和 plus.runtime.openFile 在真机上 + * 都可能直接跳转默认应用。用 Android 原生 Intent.createChooser + * 强制弹出"选择应用"对话框。 + * + * Android 7.0+ 会阻止 file:// URI 暴露给其他应用,需要禁用此限制。 + */ + +/** + * 根据文件扩展名获取 MIME 类型 + */ +function getMimeType(filePath) { + const ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase() + const mimeMap = { + 'pdf': 'application/pdf', + 'doc': 'application/msword', + 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'xls': 'application/vnd.ms-excel', + 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'ppt': 'application/vnd.ms-powerpoint', + 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'txt': 'text/plain', + 'html': 'text/html', + 'htm': 'text/html', + 'xml': 'text/xml', + 'json': 'application/json', + 'csv': 'text/csv', + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'bmp': 'image/bmp', + 'webp': 'image/webp', + 'mp4': 'video/mp4', + 'mp3': 'audio/mpeg', + 'wav': 'audio/wav', + 'zip': 'application/zip', + 'rar': 'application/x-rar-compressed', + '7z': 'application/x-7z-compressed', + 'apk': 'application/vnd.android.package-archive' + } + return mimeMap[ext] || '*/*' +} + +/** + * 打开文件,弹出应用选择器 + * @param {string} filePath 本地文件路径 + * @param {Function} onFail 打开失败时的回调 + */ +export function openFile(filePath, onFail) { + // #ifdef APP-PLUS + try { + const main = plus.android.runtimeMainActivity() + const Intent = plus.android.importClass('android.content.Intent') + const Uri = plus.android.importClass('android.net.Uri') + const File = plus.android.importClass('java.io.File') + + // Android 7.0+ 默认禁止 file:// URI,禁用此限制 + if (plus.os.sdkInt >= 24) { + const StrictMode = plus.android.importClass('android.os.StrictMode') + StrictMode.disableDeathOnFileUriExposure() + } + + const file = new File(filePath) + if (!file.exists()) { + throw new Error('文件不存在: ' + filePath) + } + + const uri = Uri.fromFile(file) + const mimeType = getMimeType(filePath) + + const intent = new Intent(Intent.ACTION_VIEW) + intent.setDataAndType(uri, mimeType) + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + + // 核心:createChooser 每次必弹选择器,无视已设置的默认应用 + const chooser = Intent.createChooser(intent, '选择应用打开') + main.startActivity(chooser) + + console.log('openFile success - chooser shown') + } catch (e) { + console.error('openFile native failed, fallback:', e) + uni.openDocument({ + filePath: filePath, + showMenu: true, + fail: typeof onFail === 'function' ? onFail : () => {} + }) + } + // #endif + + // #ifndef APP-PLUS + uni.openDocument({ + filePath: filePath, + showMenu: true, + fail: typeof onFail === 'function' ? onFail : () => {} + }) + // #endif +} + +/** + * 下载文件并打开(弹出应用选择器) + * @param {string} url 远程文件 URL + * @param {Function} onFail 失败回调 + */ +export function downloadAndOpen(url, onFail) { + uni.downloadFile({ + url: url, + success: (res) => { + if (res.statusCode === 200) { + openFile(res.tempFilePath, onFail) + } else { + console.error('下载失败, statusCode:', res.statusCode) + if (typeof onFail === 'function') onFail() + } + }, + fail: (err) => { + console.error('downloadFile fail:', err) + if (typeof onFail === 'function') onFail() + } + }) +} From e057e336013933ad51a024e9668aa220d9ac3c74 Mon Sep 17 00:00:00 2001 From: YiLin <482244139@qq.com> Date: Mon, 3 Aug 2026 09:05:21 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=8C=BA=E4=B8=8B=E8=BD=BD=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/WorkSpace/WorkSpace.css | 161 +++++++ pages/WorkSpace/WorkSpace.vue | 160 ++++++- unpackage/dist/dev/app-plus/app-service.js | 422 ++++++++++++++++-- .../dist/dev/app-plus/pages/WYXD/WYXD.css | 140 ++++++ .../WorkSpace/TemplateSpace/TemplateSpace.css | 140 ++++++ .../app-plus/pages/WorkSpace/WorkSpace.css | 140 ++++++ utils/downloadManager.js | 284 ++++++++++++ 7 files changed, 1416 insertions(+), 31 deletions(-) create mode 100644 utils/downloadManager.js diff --git a/pages/WorkSpace/WorkSpace.css b/pages/WorkSpace/WorkSpace.css index 20ce011..8fd29d9 100644 --- a/pages/WorkSpace/WorkSpace.css +++ b/pages/WorkSpace/WorkSpace.css @@ -380,3 +380,164 @@ .workspace-footer .iconfont { font-size: 40rpx !important; } + +/* ===== 标签切换 ===== */ +.workspace-tabs { + display: flex; + width: 100%; + padding: 0 24rpx; + box-sizing: border-box; + gap: 20rpx; +} + +.tab-item { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 18rpx 0; + font-size: 28rpx; + font-weight: 500; + color: #999; + border-bottom: 4rpx solid transparent; + transition: all 0.2s ease; + position: relative; +} + +.tab-item.active { + color: #6c63ff; + border-bottom-color: #6c63ff; +} + +.tab-badge { + margin-left: 8rpx; + background: #ff5e57; + color: #fff; + font-size: 20rpx; + padding: 2rpx 10rpx; + border-radius: 20rpx; + line-height: 1.4; +} + +/* ===== 下载列表 ===== */ +.download-content { + flex: 1; + overflow: auto; +} + +.download-empty { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding-top: 200rpx; + color: #bbb; + font-size: 28rpx; +} + +.download-empty .iconfont { + font-size: 140rpx; + color: #ddd; + margin-bottom: 20rpx; +} + +.download-list { + padding: 20rpx 24rpx; +} + +.download-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12rpx 8rpx 20rpx; + font-size: 24rpx; + color: #999; +} + +.clear-btn { + color: #ff5e57; + font-size: 24rpx; + font-weight: 500; + padding: 4rpx 12rpx; +} + +.download-item { + display: flex; + align-items: center; + padding: 24rpx 20rpx; + background: rgba(255, 255, 255, 0.85); + border-radius: 20rpx; + margin-bottom: 16rpx; + transition: all 0.15s ease; +} + +.download-item:active { + transform: scale(0.98); + background: rgba(255, 255, 255, 0.95); +} + +.di-icon { + width: 80rpx; + height: 80rpx; + display: flex; + justify-content: center; + align-items: center; + background: rgba(108, 99, 255, 0.08); + border-radius: 18rpx; + margin-right: 20rpx; + flex-shrink: 0; +} + +.di-icon .iconfont { + font-size: 40rpx; + color: #6c63ff; +} + +.di-info { + flex: 1; + display: flex; + flex-direction: column; + gap: 6rpx; + min-width: 0; +} + +.di-name { + font-size: 28rpx; + font-weight: 500; + color: #333; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.di-meta { + font-size: 22rpx; + color: #999; +} + +.di-path { + font-size: 20rpx; + color: #bbb; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.di-delete { + width: 56rpx; + height: 56rpx; + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; +} + +.di-delete .iconfont { + font-size: 36rpx; + color: #ccc; + transition: color 0.15s ease; +} + +.di-delete:active .iconfont { + color: #ff5e57; +} diff --git a/pages/WorkSpace/WorkSpace.vue b/pages/WorkSpace/WorkSpace.vue index a014c6f..f93d98a 100644 --- a/pages/WorkSpace/WorkSpace.vue +++ b/pages/WorkSpace/WorkSpace.vue @@ -66,8 +66,20 @@ 取消
    + + + + 工作区 + + + 下载列表 + {{ downloadList.length }} + + - + + + 文件夹为空 @@ -89,6 +101,34 @@ + + + + + + 暂无下载文件 + + + + 已下载 {{ downloadList.length }} 个文件 + 清空 + + + + + + + {{ item.name }} + {{ formatDownloadTime(item.time) }} · {{ formatDownloadSize(item.size) }} + {{ item.displayPath || item.path }} + + + + + + + + @@ -122,11 +162,21 @@ updateWorkspaceFileName } from '@/utils/cloud-api.js' import { openFile as openFileNative } from '@/utils/fileOpener.js' +import { + getDownloadList, + saveDownload, + deleteDownload, + clearAllDownloads, + formatFileSize, + formatTime +} from '@/utils/downloadManager.js' const UserToken = ref('') const workspaceId = ref('') const navbarBeforeTitle = ref(''); const navbarTitle = ref('工作区'); + const activeTab = ref('workspace') + const downloadList = ref([]) // 选择文件模式 const isSelectFolder = ref(false); @@ -395,6 +445,7 @@ import { openFile as openFileNative } from '@/utils/fileOpener.js' const downloadUrl = fileInfo.url; const fileName = folder.name; + const fileSize = fileInfo.size || 0; uni.showLoading({ title: '下载中...' @@ -407,8 +458,14 @@ import { openFile as openFileNative } from '@/utils/fileOpener.js' uni.hideLoading(); if (downloadRes.statusCode === 200) { const tempPath = downloadRes.tempFilePath; - // 下载成功,直接打开文件 - console.log("// 下载成功,文件下载路径为:",tempPath); + // 持久化保存到本地 + saveDownload(tempPath, fileName, fileSize).then((record) => { + downloadList.value.unshift(record); + uni.showToast({ title: '下载成功', icon: 'success' }); + }).catch(() => { + // 保存失败不影响打开 + }); + // 下载成功后打开文件 openFile(tempPath); } else { uni.showToast({ @@ -443,6 +500,102 @@ import { openFile as openFileNative } from '@/utils/fileOpener.js' }); }; + // ===== 下载列表相关 ===== + const switchTab = (tab) => { + activeTab.value = tab + if (tab === 'downloads') { + loadDownloads() + } + } + + const loadDownloads = () => { + downloadList.value = getDownloadList() + } + + const openDownloadFile = (item) => { + // #ifdef APP-PLUS + // 检查公共目录下文件是否存在 + plus.io.resolveLocalFileSystemURL( + item.path, + () => { + // 文件存在,直接打开 + openFile(item.path) + }, + () => { + // 文件已被手动删除 + uni.showToast({ title: '文件已失效,将移除记录', icon: 'none' }) + handleDeleteDownload(item.id) + } + ) + // #endif + // #ifndef APP-PLUS + uni.getSavedFileList({ + success: (res) => { + const found = res.fileList.find(f => f.filePath === item.path) + if (found) { + openFile(item.path) + } else { + uni.showToast({ title: '文件已失效,将移除记录', icon: 'none' }) + handleDeleteDownload(item.id) + } + }, + fail: () => openFile(item.path) + }) + // #endif + } + + const handleDeleteDownload = (id) => { + uni.showModal({ + title: '删除文件', + content: '确定要删除此下载文件吗?', + success: (res) => { + if (res.confirm) { + deleteDownload(id).then(() => { + downloadList.value = getDownloadList() + uni.showToast({ title: '已删除', icon: 'success' }) + }).catch(() => { + uni.showToast({ title: '删除失败', icon: 'error' }) + }) + } + } + }) + } + + const handleClearDownloads = () => { + if (downloadList.value.length === 0) return + uni.showModal({ + title: '清空下载', + content: '确定要清空所有下载文件吗?此操作不可撤销。', + success: (res) => { + if (res.confirm) { + clearAllDownloads().then(() => { + downloadList.value = [] + uni.showToast({ title: '已清空', icon: 'success' }) + }) + } + } + }) + } + + const formatDownloadSize = formatFileSize + const formatDownloadTime = formatTime + + // const getFileIcon = (fileName) => { + // const ext = fileName.split('.').pop().toLowerCase() + // const iconMap = { + // pdf: 'icon-PDF', + // doc: 'icon-word', docx: 'icon-word', + // xls: 'icon-excel', xlsx: 'icon-excel', + // ppt: 'icon-PPD', pptx: 'icon-PPD', + // zip: 'icon-yasuobao', rar: 'icon-yasuobao', '7z': 'icon-yasuobao', + // jpg: 'icon-tupian', jpeg: 'icon-tupian', png: 'icon-tupian', gif: 'icon-tupian', + // mp3: 'icon-yinle', wav: 'icon-yinle', flac: 'icon-yinle', + // mp4: 'icon-shipin', avi: 'icon-shipin', mov: 'icon-shipin', + // txt: 'icon-txt', md: 'icon-txt', + // } + // return iconMap[ext] || 'icon-weizhiwenjian' + // } + // WYXD 查看器入口 const openWyxdViewer = (folder) => { const filePath = folder.path.startsWith('./') ? folder.path.slice(2) : folder.path; @@ -666,6 +819,7 @@ import { openFile as openFileNative } from '@/utils/fileOpener.js' onMounted(() => { initCurrentFolderList(); + loadDownloads(); }) diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index 6ab1540..ca45452 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -5837,7 +5837,7 @@ This will fail in production.`); const openFile$1 = (url) => { downloadAndOpen$1(url); }; - const formatFileSize = (size) => { + const formatFileSize2 = (size) => { if (!size) return "0KB"; if (size < 1) { @@ -6696,7 +6696,7 @@ This will fail in production.`); onUnload(() => { socketStore.disconnect(); }); - const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, wyxdWorkspaceId, wyxdFilePath, wyxdFileName, wyxdUserToken, hasWyxdFile, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goWyxdViewer, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { + const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, wyxdWorkspaceId, wyxdFilePath, wyxdFileName, wyxdUserToken, hasWyxdFile, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize: formatFileSize2, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goWyxdViewer, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { return downloadToastTimer; }, set downloadToastTimer(v) { downloadToastTimer = v; @@ -7451,6 +7451,177 @@ This will fail in production.`); ); } const PagesChatChat = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$9], ["__scopeId", "data-v-5eb7b895"], ["__file", "D:/Projects/uniapp/app-test/test1/pages/Chat/Chat.vue"]]); + const STORAGE_KEY = "localDownloads"; + const SUB_DIR = "AppDownloads"; + function getPublicDownloadDir() { + return new Promise((resolve, reject) => { + plus.io.requestFileSystem( + plus.io.PUBLIC_DOWNLOADS, + (fs) => { + fs.root.getDirectory( + SUB_DIR, + { create: true }, + (dirEntry) => { + resolve(dirEntry.fullPath); + }, + (err) => { + formatAppLog("error", "at utils/downloadManager.js:27", "getDirectory failed:", err); + reject(err); + } + ); + }, + (err) => { + formatAppLog("error", "at utils/downloadManager.js:33", "requestFileSystem failed:", err); + reject(err); + } + ); + }); + } + function getDisplayPath(fullPath) { + const idx = fullPath.indexOf("/Download/"); + if (idx !== -1) { + return "下载/" + fullPath.slice(idx + 10); + } + return fullPath; + } + function getDownloadList() { + try { + return uni.getStorageSync(STORAGE_KEY) || []; + } catch (e2) { + return []; + } + } + function saveDownload(tempFilePath, fileName, fileSize) { + return new Promise((resolve, reject) => { + getPublicDownloadDir().then((dirPath) => { + const destPathForUrl = plus.io.convertLocalFileSystemURL(dirPath + "/" + fileName); + plus.io.resolveLocalFileSystemURL( + tempFilePath, + (fileEntry) => { + plus.io.resolveLocalFileSystemURL( + dirPath, + (dirEntry) => { + fileEntry.copyTo( + dirEntry, + fileName, + () => { + const record = { + id: Date.now().toString(), + name: fileName, + path: destPathForUrl, + displayPath: getDisplayPath(destPathForUrl), + size: fileSize || 0, + time: Date.now() + }; + const list = getDownloadList(); + const exists = list.some((item) => item.name === fileName); + if (exists) { + const idx = list.findIndex((item) => item.name === fileName); + if (idx !== -1) + list.splice(idx, 1); + } + list.unshift(record); + try { + uni.setStorageSync(STORAGE_KEY, list); + } catch (e2) { + list.pop(); + uni.setStorageSync(STORAGE_KEY, list); + } + resolve(record); + }, + (err) => { + formatAppLog("error", "at utils/downloadManager.js:114", "copyTo failed:", err); + reject(err); + } + ); + }, + reject + ); + }, + reject + ); + }).catch(reject); + }); + } + function deleteDownload(id) { + return new Promise((resolve, reject) => { + const list = getDownloadList(); + const record = list.find((item) => item.id === id); + if (!record) { + reject(new Error("记录不存在")); + return; + } + plus.io.resolveLocalFileSystemURL( + record.path, + (fileEntry) => { + fileEntry.remove( + () => { + const newList = list.filter((item) => item.id !== id); + uni.setStorageSync(STORAGE_KEY, newList); + resolve(); + }, + () => { + const newList = list.filter((item) => item.id !== id); + uni.setStorageSync(STORAGE_KEY, newList); + resolve(); + } + ); + }, + () => { + const newList = list.filter((item) => item.id !== id); + uni.setStorageSync(STORAGE_KEY, newList); + resolve(); + } + ); + }); + } + function clearAllDownloads() { + return new Promise((resolve) => { + const list = getDownloadList(); + if (list.length === 0) { + resolve(); + return; + } + let count = 0; + const done = () => { + count++; + if (count >= list.length) { + uni.setStorageSync(STORAGE_KEY, []); + resolve(); + } + }; + list.forEach((record) => { + plus.io.resolveLocalFileSystemURL( + record.path, + (fileEntry) => { + fileEntry.remove(done, done); + }, + done + ); + }); + setTimeout(() => { + uni.setStorageSync(STORAGE_KEY, []); + resolve(); + }, 5e3); + }); + } + function formatFileSize(bytes) { + if (!bytes || bytes <= 0) + return "未知大小"; + const units = ["B", "KB", "MB", "GB"]; + let i = 0; + let size = bytes; + while (size >= 1024 && i < units.length - 1) { + size /= 1024; + i++; + } + return size.toFixed(i === 0 ? 0 : 1) + " " + units[i]; + } + function formatTime(timestamp) { + const d = new Date(timestamp); + const pad = (n2) => String(n2).padStart(2, "0"); + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`; + } const _sfc_main$9 = { __name: "WorkSpace", setup(__props, { expose: __expose }) { @@ -7459,6 +7630,8 @@ This will fail in production.`); const workspaceId = vue.ref(""); const navbarBeforeTitle = vue.ref(""); const navbarTitle = vue.ref("工作区"); + const activeTab = vue.ref("workspace"); + const downloadList = vue.ref([]); const isSelectFolder = vue.ref(false); const selectFileList = vue.ref([]); const handleSelectFolder = () => { @@ -7501,7 +7674,7 @@ This will fail in production.`); await doUploadWorkspaceFiles(files); }, fail: (err) => { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:177", "选择文件失败:", err); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:227", "选择文件失败:", err); } }); }; @@ -7538,7 +7711,7 @@ This will fail in production.`); initCurrentFolderList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:230", "上传文件失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:280", "上传文件失败:", error); uni.showToast({ title: typeof error === "string" ? error : "上传失败,请重试", icon: "error" @@ -7578,7 +7751,7 @@ This will fail in production.`); closeNewFolderModal(); initCurrentFolderList(); } catch (error) { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:276", "创建文件夹失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:326", "创建文件夹失败:", error); uni.showToast({ title: "创建失败,请重试", icon: "error" @@ -7649,7 +7822,7 @@ This will fail in production.`); initCurrentFolderList(); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:354", "重命名失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:404", "重命名失败:", error); uni.showToast({ title: typeof error === "string" ? error : "重命名失败,请重试", icon: "error" @@ -7684,6 +7857,7 @@ This will fail in production.`); } const downloadUrl = fileInfo.url; const fileName = folder.name; + const fileSize = fileInfo.size || 0; uni.showLoading({ title: "下载中..." }); @@ -7694,7 +7868,11 @@ This will fail in production.`); uni.hideLoading(); if (downloadRes.statusCode === 200) { const tempPath = downloadRes.tempFilePath; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:411", "// 下载成功,文件下载路径为:", tempPath); + saveDownload(tempPath, fileName, fileSize).then((record) => { + downloadList.value.unshift(record); + uni.showToast({ title: "下载成功", icon: "success" }); + }).catch(() => { + }); openFile$1(tempPath); } else { uni.showToast({ @@ -7705,7 +7883,7 @@ This will fail in production.`); }, fail: (err) => { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:422", "下载文件失败:", err); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:479", "下载文件失败:", err); uni.showToast({ title: "下载失败,请重试", icon: "error" @@ -7714,7 +7892,7 @@ This will fail in production.`); }); } catch (error) { uni.hideLoading(); - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:431", "获取下载链接失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:488", "获取下载链接失败:", error); uni.showToast({ title: "获取下载链接失败,请重试", icon: "error" @@ -7726,12 +7904,67 @@ This will fail in production.`); uni.showToast({ title: "无法打开此文件", icon: "error" }); }); }; + const switchTab = (tab) => { + activeTab.value = tab; + if (tab === "downloads") { + loadDownloads(); + } + }; + const loadDownloads = () => { + downloadList.value = getDownloadList(); + }; + const openDownloadFile = (item) => { + plus.io.resolveLocalFileSystemURL( + item.path, + () => { + openFile$1(item.path); + }, + () => { + uni.showToast({ title: "文件已失效,将移除记录", icon: "none" }); + handleDeleteDownload(item.id); + } + ); + }; + const handleDeleteDownload = (id) => { + uni.showModal({ + title: "删除文件", + content: "确定要删除此下载文件吗?", + success: (res) => { + if (res.confirm) { + deleteDownload(id).then(() => { + downloadList.value = getDownloadList(); + uni.showToast({ title: "已删除", icon: "success" }); + }).catch(() => { + uni.showToast({ title: "删除失败", icon: "error" }); + }); + } + } + }); + }; + const handleClearDownloads = () => { + if (downloadList.value.length === 0) + return; + uni.showModal({ + title: "清空下载", + content: "确定要清空所有下载文件吗?此操作不可撤销。", + success: (res) => { + if (res.confirm) { + clearAllDownloads().then(() => { + downloadList.value = []; + uni.showToast({ title: "已清空", icon: "success" }); + }); + } + } + }); + }; + const formatDownloadSize = formatFileSize; + const formatDownloadTime = formatTime; const openWyxdViewer = (folder) => { const filePath = folder.path.startsWith("./") ? folder.path.slice(2) : folder.path; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:449", "解析文件路径:", filePath); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:450", "folder", folder); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:451", "encode", encodeURIComponent(filePath)); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:452", "encode", encodeURIComponent(folder.name)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:602", "解析文件路径:", filePath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:603", "folder", folder); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:604", "encode", encodeURIComponent(filePath)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:605", "encode", encodeURIComponent(folder.name)); uni.navigateTo({ url: "/pages/WYXD/WYXD?workspaceId=" + encodeURIComponent(workspaceId.value) + "&filePath=" + encodeURIComponent(filePath) + "&fileName=" + encodeURIComponent(folder.name) + "&userToken=" + encodeURIComponent(UserToken.value) }); @@ -7750,7 +7983,7 @@ This will fail in production.`); if (res.confirm) { try { const filePath = `./${folder.path}`; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:482", "删除的是:", filePath); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:635", "删除的是:", filePath); await daleteWorkspace(UserToken.value, workspaceId.value, filePath); uni.showToast({ title: "删除成功", @@ -7758,7 +7991,7 @@ This will fail in production.`); }); initCurrentFolderList(); } catch (error) { - formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:490", "删除失败:", error); + formatAppLog("error", "at pages/WorkSpace/WorkSpace.vue:643", "删除失败:", error); uni.showToast({ title: "删除失败,请重试", icon: "error" @@ -7826,7 +8059,7 @@ This will fail in production.`); const currentFolderList = vue.ref([]); const getCurrentFolderList = () => { var _a, _b; - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:571", "当前路径为:", JSON.stringify(folderStack.value)); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:724", "当前路径为:", JSON.stringify(folderStack.value)); const currentPath = folderStack.value.length > 0 ? folderStack.value[folderStack.value.length - 1].path : "."; if (currentPath === ".") { return ((_a = allFoldersData.value) == null ? void 0 : _a.children) || []; @@ -7850,7 +8083,7 @@ This will fail in production.`); const initCurrentFolderList = async () => { workspaceId.value = getWorkspaceId(); UserToken.value = getToken(); - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:598", "getWorkspaceId:", workspaceId.value); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:751", "getWorkspaceId:", workspaceId.value); allFoldersData.value = await getWorkspaceList(UserToken.value, workspaceId.value); currentFolderList.value = getCurrentFolderList(); }; @@ -7897,7 +8130,7 @@ This will fail in production.`); uni.navigateBack({ delta: 1, fail() { - formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:658", "返回失败,进入兜底跳转"); + formatAppLog("log", "at pages/WorkSpace/WorkSpace.vue:811", "返回失败,进入兜底跳转"); uni.reLaunch({ url: "/pages/Chat/Chat" }); @@ -7907,8 +8140,9 @@ This will fail in production.`); }; vue.onMounted(() => { initCurrentFolderList(); + loadDownloads(); }); - const __returned__ = { UserToken, workspaceId, navbarBeforeTitle, navbarTitle, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, showNewFolder, isNFNFocused, newFolderName, closeNewFolderModal, newWorkspaceFolder, handleUploadFile, doUploadWorkspaceFiles, currentFolderPath, folderPathPreview, confirmCreateFolder, handleLongPress, handleRename, handleDownload, openFile: openFile$1, openWyxdViewer, handleAiModify, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, getFileIcon, allFoldersData, folderStack, currentFolderList, getCurrentFolderList, initCurrentFolderList, handleFolderClick, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getWorkspaceId() { + const __returned__ = { UserToken, workspaceId, navbarBeforeTitle, navbarTitle, activeTab, downloadList, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, showNewFolder, isNFNFocused, newFolderName, closeNewFolderModal, newWorkspaceFolder, handleUploadFile, doUploadWorkspaceFiles, currentFolderPath, folderPathPreview, confirmCreateFolder, handleLongPress, handleRename, handleDownload, openFile: openFile$1, switchTab, loadDownloads, openDownloadFile, handleDeleteDownload, handleClearDownloads, formatDownloadSize, formatDownloadTime, openWyxdViewer, handleAiModify, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, getFileIcon, allFoldersData, folderStack, currentFolderList, getCurrentFolderList, initCurrentFolderList, handleFolderClick, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getWorkspaceId() { return getWorkspaceId; }, get getToken() { return getToken; @@ -7930,6 +8164,18 @@ This will fail in production.`); return updateWorkspaceFileName; }, get openFileNative() { return openFile; + }, get getDownloadList() { + return getDownloadList; + }, get saveDownload() { + return saveDownload; + }, get deleteDownload() { + return deleteDownload; + }, get clearAllDownloads() { + return clearAllDownloads; + }, get formatFileSize() { + return formatFileSize; + }, get formatTime() { + return formatTime; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; @@ -8097,9 +8343,46 @@ This will fail in production.`); class: "cancel-search", onClick: $setup.handleSearchFocus }, "取消")) : vue.createCommentVNode("v-if", true) + ]), + vue.createElementVNode("view", { class: "workspace-tabs" }, [ + vue.createElementVNode( + "view", + { + class: vue.normalizeClass(["tab-item", { active: $setup.activeTab === "workspace" }]), + onClick: _cache[9] || (_cache[9] = ($event) => $setup.switchTab("workspace")) + }, + " 工作区 ", + 2 + /* CLASS */ + ), + vue.createElementVNode( + "view", + { + class: vue.normalizeClass(["tab-item", { active: $setup.activeTab === "downloads" }]), + onClick: _cache[10] || (_cache[10] = ($event) => $setup.switchTab("downloads")) + }, + [ + vue.createTextVNode(" 下载列表 "), + $setup.downloadList.length > 0 ? (vue.openBlock(), vue.createElementBlock( + "text", + { + key: 0, + class: "tab-badge" + }, + vue.toDisplayString($setup.downloadList.length), + 1 + /* TEXT */ + )) : vue.createCommentVNode("v-if", true) + ], + 2 + /* CLASS */ + ) ]) ]), - vue.createElementVNode("view", { class: "workspace-content" }, [ + $setup.activeTab === "workspace" ? (vue.openBlock(), vue.createElementBlock("view", { + key: 0, + class: "workspace-content" + }, [ $setup.currentFolderList.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "folder-null" @@ -8163,11 +8446,94 @@ This will fail in production.`); /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true) - ]), + ])) : vue.createCommentVNode("v-if", true), + $setup.activeTab === "downloads" ? (vue.openBlock(), vue.createElementBlock("view", { + key: 1, + class: "download-content" + }, [ + $setup.downloadList.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", { + key: 0, + class: "download-empty" + }, [ + vue.createElementVNode("text", { class: "iconfont icon-xiazai" }), + vue.createElementVNode("text", null, "暂无下载文件") + ])) : (vue.openBlock(), vue.createElementBlock("view", { + key: 1, + class: "download-list" + }, [ + vue.createElementVNode("view", { class: "download-header" }, [ + vue.createElementVNode( + "text", + null, + "已下载 " + vue.toDisplayString($setup.downloadList.length) + " 个文件", + 1 + /* TEXT */ + ), + vue.createElementVNode("text", { + class: "clear-btn", + onClick: $setup.handleClearDownloads + }, "清空") + ]), + (vue.openBlock(true), vue.createElementBlock( + vue.Fragment, + null, + vue.renderList($setup.downloadList, (item) => { + return vue.openBlock(), vue.createElementBlock("view", { + class: "download-item", + key: item.id, + onClick: ($event) => $setup.openDownloadFile(item) + }, [ + vue.createElementVNode("view", { class: "di-icon" }, [ + vue.createElementVNode( + "text", + { + class: vue.normalizeClass(["iconfont", $setup.getFileIcon(item.name)]) + }, + null, + 2 + /* CLASS */ + ) + ]), + vue.createElementVNode("view", { class: "di-info" }, [ + vue.createElementVNode( + "text", + { class: "di-name" }, + vue.toDisplayString(item.name), + 1 + /* TEXT */ + ), + vue.createElementVNode( + "text", + { class: "di-meta" }, + vue.toDisplayString($setup.formatDownloadTime(item.time)) + " · " + vue.toDisplayString($setup.formatDownloadSize(item.size)), + 1 + /* TEXT */ + ), + vue.createElementVNode( + "text", + { class: "di-path" }, + vue.toDisplayString(item.displayPath || item.path), + 1 + /* TEXT */ + ) + ]), + vue.createElementVNode("view", { + class: "di-delete", + onClick: vue.withModifiers(($event) => $setup.handleDeleteDownload(item.id), ["stop"]) + }, [ + vue.createElementVNode("text", { class: "iconfont icon-del" }) + ], 8, ["onClick"]) + ], 8, ["onClick"]); + }), + 128 + /* KEYED_FRAGMENT */ + )) + ])) + ])) : vue.createCommentVNode("v-if", true), $setup.isSelectFolder ? (vue.openBlock(), vue.createElementBlock( "view", { - key: 0, + key: 2, class: vue.normalizeClass(["workspace-footer", { "folder-actions": $setup.selectFileList.length > 0 }]) }, [ @@ -9388,7 +9754,7 @@ This will fail in production.`); __name: "TemplateSpace", setup(__props, { expose: __expose }) { __expose(); - const formatTime = (timestamp) => { + const formatTime2 = (timestamp) => { if (!timestamp) return ""; const seconds = Math.floor(timestamp); @@ -9693,7 +10059,7 @@ This will fail in production.`); }); } }; - const __returned__ = { formatTime, formatSize, handleLikeTemplate, templateName, editTemplate, checkTemplate, currentTemplateList, checkShowTemplate, navbarBeforeTitle, navbarTitle, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, handleLongPress, handleRename, handleDownload, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, allTemplate, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref }; + const __returned__ = { formatTime: formatTime2, formatSize, handleLikeTemplate, templateName, editTemplate, checkTemplate, currentTemplateList, checkShowTemplate, navbarBeforeTitle, navbarTitle, isSelectFolder, selectFileList, handleSelectFolder, selectFolder, handleLongPress, handleRename, handleDownload, handleDelete, isMenuOpen, handleMenu, searchKeyword, isSearchFocus, handleSearchFocus, allTemplate, handleSelectAll, handleBackOrCheck, onMounted: vue.onMounted, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } @@ -10077,7 +10443,7 @@ This will fail in production.`); return "icon-wenjianyasuo"; return "icon-qitawenjian"; }; - const formatFileSize = (bytes) => { + const formatFileSize2 = (bytes) => { if (!bytes) return ""; if (bytes < 1024) @@ -10878,7 +11244,7 @@ This will fail in production.`); await fetchTeamList(); await fetchDbList(); }); - const __returned__ = { userToken, userId, workspaceId, currentCategory, switchCategory, navbarTitle, isMenuOpen, isSelectFolder, selectFileList, handleMenu, handleSelectFolder, parentFolderName, handleBackOrUp, rawPersonalFileData, rawTeamFileData, personalFiles, teamFiles, currentFolderPath, isFolder, getFileExtension, getFileIcon, formatFileSize, currentFolderDisplayPath, personalFileCount, findFolderByPath, loadCurrentFiles, fetchFileList, fetchTeamFileList, handleFileClick, handleFileLongPress, handleDownload, openFile: openFile$1, openFileWithMenu, handleRename, handleDeleteFile, refreshCurrentFileList, showNewFolder, newFolderName, openNewFolderModal, closeNewFolderModal, confirmCreateFolder, showUploadPathInput, uploadPath, handleUploadFile, closeUploadPathInput, confirmUploadPath, chooseAndUploadFile, doUploadFiles, allDatabases, isDbLoading, personalDatabases, teamDatabases, showNewDb, newDbName, fetchDbList, openNewDbModal, closeNewDbModal, confirmCreateDb, showUploadDb, uploadDbFileName, uploadDbFilePath, openUploadDbModal, closeUploadDbModal, handlePickDbFile, confirmUploadDb, handleDeleteDb, handleDbClick, formatDbTime, getAccessLevelLabel, showTeamManage, teamGroups, currentTeamId, currentTeamMembers, inviteKeyword, currentTeamDescription, currentTeamType, currentUserRoleInTeam, isTeamAdmin, fetchTeamList, selectTeam, openTeamManage, closeTeamManage, showEditTeam, editTeamName, editTeamDesc, editTeamType, openEditTeamModal, closeEditTeamModal, confirmEditTeam, toggleMemberRole, removeTeamMemberHandler, refreshTeamMembers, searchResultList, searched, searchTeamMember, addTeamMemberHandler, handleDeleteTeam, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getToken() { + const __returned__ = { userToken, userId, workspaceId, currentCategory, switchCategory, navbarTitle, isMenuOpen, isSelectFolder, selectFileList, handleMenu, handleSelectFolder, parentFolderName, handleBackOrUp, rawPersonalFileData, rawTeamFileData, personalFiles, teamFiles, currentFolderPath, isFolder, getFileExtension, getFileIcon, formatFileSize: formatFileSize2, currentFolderDisplayPath, personalFileCount, findFolderByPath, loadCurrentFiles, fetchFileList, fetchTeamFileList, handleFileClick, handleFileLongPress, handleDownload, openFile: openFile$1, openFileWithMenu, handleRename, handleDeleteFile, refreshCurrentFileList, showNewFolder, newFolderName, openNewFolderModal, closeNewFolderModal, confirmCreateFolder, showUploadPathInput, uploadPath, handleUploadFile, closeUploadPathInput, confirmUploadPath, chooseAndUploadFile, doUploadFiles, allDatabases, isDbLoading, personalDatabases, teamDatabases, showNewDb, newDbName, fetchDbList, openNewDbModal, closeNewDbModal, confirmCreateDb, showUploadDb, uploadDbFileName, uploadDbFilePath, openUploadDbModal, closeUploadDbModal, handlePickDbFile, confirmUploadDb, handleDeleteDb, handleDbClick, formatDbTime, getAccessLevelLabel, showTeamManage, teamGroups, currentTeamId, currentTeamMembers, inviteKeyword, currentTeamDescription, currentTeamType, currentUserRoleInTeam, isTeamAdmin, fetchTeamList, selectTeam, openTeamManage, closeTeamManage, showEditTeam, editTeamName, editTeamDesc, editTeamType, openEditTeamModal, closeEditTeamModal, confirmEditTeam, toggleMemberRole, removeTeamMemberHandler, refreshTeamMembers, searchResultList, searched, searchTeamMember, addTeamMemberHandler, handleDeleteTeam, onMounted: vue.onMounted, ref: vue.ref, computed: vue.computed, get getToken() { return getToken; }, get chooseFile() { return chooseFile; @@ -13056,7 +13422,7 @@ This will fail in production.`); const openFile$1 = (url) => { downloadAndOpen(url); }; - const formatFileSize = (size) => { + const formatFileSize2 = (size) => { if (!size) return "0KB"; if (size < 1) { @@ -13888,7 +14254,7 @@ This will fail in production.`); onUnload(() => { socketStore.disconnect(); }); - const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { + const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize: formatFileSize2, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { return downloadToastTimer; }, set downloadToastTimer(v) { downloadToastTimer = v; diff --git a/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css b/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css index 0060a56..f305efa 100644 --- a/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css +++ b/unpackage/dist/dev/app-plus/pages/WYXD/WYXD.css @@ -333,6 +333,146 @@ .workspace-footer .iconfont[data-v-507487c4] { font-size: 1.25rem !important; } +/* ===== 标签切换 ===== */ +.workspace-tabs[data-v-507487c4] { + display: flex; + width: 100%; + padding: 0 0.75rem; + box-sizing: border-box; + gap: 0.625rem; +} +.tab-item[data-v-507487c4] { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 0.5625rem 0; + font-size: 0.875rem; + font-weight: 500; + color: #999; + border-bottom: 0.125rem solid transparent; + transition: all 0.2s ease; + position: relative; +} +.tab-item.active[data-v-507487c4] { + color: #6c63ff; + border-bottom-color: #6c63ff; +} +.tab-badge[data-v-507487c4] { + margin-left: 0.25rem; + background: #ff5e57; + color: #fff; + font-size: 0.625rem; + padding: 0.0625rem 0.3125rem; + border-radius: 0.625rem; + line-height: 1.4; +} +/* ===== 下载列表 ===== */ +.download-content[data-v-507487c4] { + flex: 1; + overflow: auto; +} +.download-empty[data-v-507487c4] { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding-top: 6.25rem; + color: #bbb; + font-size: 0.875rem; +} +.download-empty .iconfont[data-v-507487c4] { + font-size: 4.375rem; + color: #ddd; + margin-bottom: 0.625rem; +} +.download-list[data-v-507487c4] { + padding: 0.625rem 0.75rem; +} +.download-header[data-v-507487c4] { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.375rem 0.25rem 0.625rem; + font-size: 0.75rem; + color: #999; +} +.clear-btn[data-v-507487c4] { + color: #ff5e57; + font-size: 0.75rem; + font-weight: 500; + padding: 0.125rem 0.375rem; +} +.download-item[data-v-507487c4] { + display: flex; + align-items: center; + padding: 0.75rem 0.625rem; + background: rgba(255, 255, 255, 0.85); + border-radius: 0.625rem; + margin-bottom: 0.5rem; + transition: all 0.15s ease; +} +.download-item[data-v-507487c4]:active { + transform: scale(0.98); + background: rgba(255, 255, 255, 0.95); +} +.di-icon[data-v-507487c4] { + width: 2.5rem; + height: 2.5rem; + display: flex; + justify-content: center; + align-items: center; + background: rgba(108, 99, 255, 0.08); + border-radius: 0.5625rem; + margin-right: 0.625rem; + flex-shrink: 0; +} +.di-icon .iconfont[data-v-507487c4] { + font-size: 1.25rem; + color: #6c63ff; +} +.di-info[data-v-507487c4] { + flex: 1; + display: flex; + flex-direction: column; + gap: 0.1875rem; + min-width: 0; +} +.di-name[data-v-507487c4] { + font-size: 0.875rem; + font-weight: 500; + color: #333; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.di-meta[data-v-507487c4] { + font-size: 0.6875rem; + color: #999; +} +.di-path[data-v-507487c4] { + font-size: 0.625rem; + color: #bbb; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.di-delete[data-v-507487c4] { + width: 1.75rem; + height: 1.75rem; + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; +} +.di-delete .iconfont[data-v-507487c4] { + font-size: 1.125rem; + color: #ccc; + transition: color 0.15s ease; +} +.di-delete:active .iconfont[data-v-507487c4] { + color: #ff5e57; +} .wyxd-container[data-v-507487c4] { display: flex; flex-direction: column; diff --git a/unpackage/dist/dev/app-plus/pages/WorkSpace/TemplateSpace/TemplateSpace.css b/unpackage/dist/dev/app-plus/pages/WorkSpace/TemplateSpace/TemplateSpace.css index b453107..6a2a885 100644 --- a/unpackage/dist/dev/app-plus/pages/WorkSpace/TemplateSpace/TemplateSpace.css +++ b/unpackage/dist/dev/app-plus/pages/WorkSpace/TemplateSpace/TemplateSpace.css @@ -333,6 +333,146 @@ .workspace-footer .iconfont[data-v-769edd25] { font-size: 1.25rem !important; } +/* ===== 标签切换 ===== */ +.workspace-tabs[data-v-769edd25] { + display: flex; + width: 100%; + padding: 0 0.75rem; + box-sizing: border-box; + gap: 0.625rem; +} +.tab-item[data-v-769edd25] { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 0.5625rem 0; + font-size: 0.875rem; + font-weight: 500; + color: #999; + border-bottom: 0.125rem solid transparent; + transition: all 0.2s ease; + position: relative; +} +.tab-item.active[data-v-769edd25] { + color: #6c63ff; + border-bottom-color: #6c63ff; +} +.tab-badge[data-v-769edd25] { + margin-left: 0.25rem; + background: #ff5e57; + color: #fff; + font-size: 0.625rem; + padding: 0.0625rem 0.3125rem; + border-radius: 0.625rem; + line-height: 1.4; +} +/* ===== 下载列表 ===== */ +.download-content[data-v-769edd25] { + flex: 1; + overflow: auto; +} +.download-empty[data-v-769edd25] { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding-top: 6.25rem; + color: #bbb; + font-size: 0.875rem; +} +.download-empty .iconfont[data-v-769edd25] { + font-size: 4.375rem; + color: #ddd; + margin-bottom: 0.625rem; +} +.download-list[data-v-769edd25] { + padding: 0.625rem 0.75rem; +} +.download-header[data-v-769edd25] { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.375rem 0.25rem 0.625rem; + font-size: 0.75rem; + color: #999; +} +.clear-btn[data-v-769edd25] { + color: #ff5e57; + font-size: 0.75rem; + font-weight: 500; + padding: 0.125rem 0.375rem; +} +.download-item[data-v-769edd25] { + display: flex; + align-items: center; + padding: 0.75rem 0.625rem; + background: rgba(255, 255, 255, 0.85); + border-radius: 0.625rem; + margin-bottom: 0.5rem; + transition: all 0.15s ease; +} +.download-item[data-v-769edd25]:active { + transform: scale(0.98); + background: rgba(255, 255, 255, 0.95); +} +.di-icon[data-v-769edd25] { + width: 2.5rem; + height: 2.5rem; + display: flex; + justify-content: center; + align-items: center; + background: rgba(108, 99, 255, 0.08); + border-radius: 0.5625rem; + margin-right: 0.625rem; + flex-shrink: 0; +} +.di-icon .iconfont[data-v-769edd25] { + font-size: 1.25rem; + color: #6c63ff; +} +.di-info[data-v-769edd25] { + flex: 1; + display: flex; + flex-direction: column; + gap: 0.1875rem; + min-width: 0; +} +.di-name[data-v-769edd25] { + font-size: 0.875rem; + font-weight: 500; + color: #333; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.di-meta[data-v-769edd25] { + font-size: 0.6875rem; + color: #999; +} +.di-path[data-v-769edd25] { + font-size: 0.625rem; + color: #bbb; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.di-delete[data-v-769edd25] { + width: 1.75rem; + height: 1.75rem; + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; +} +.di-delete .iconfont[data-v-769edd25] { + font-size: 1.125rem; + color: #ccc; + transition: color 0.15s ease; +} +.di-delete:active .iconfont[data-v-769edd25] { + color: #ff5e57; +} /* 编辑模板弹窗 */ .edit-template-wrapper[data-v-769edd25] { } diff --git a/unpackage/dist/dev/app-plus/pages/WorkSpace/WorkSpace.css b/unpackage/dist/dev/app-plus/pages/WorkSpace/WorkSpace.css index e6ac8df..637b941 100644 --- a/unpackage/dist/dev/app-plus/pages/WorkSpace/WorkSpace.css +++ b/unpackage/dist/dev/app-plus/pages/WorkSpace/WorkSpace.css @@ -865,3 +865,143 @@ .workspace-footer .iconfont[data-v-c1a60359] { font-size: 1.25rem !important; } +/* ===== 标签切换 ===== */ +.workspace-tabs[data-v-c1a60359] { + display: flex; + width: 100%; + padding: 0 0.75rem; + box-sizing: border-box; + gap: 0.625rem; +} +.tab-item[data-v-c1a60359] { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 0.5625rem 0; + font-size: 0.875rem; + font-weight: 500; + color: #999; + border-bottom: 0.125rem solid transparent; + transition: all 0.2s ease; + position: relative; +} +.tab-item.active[data-v-c1a60359] { + color: #6c63ff; + border-bottom-color: #6c63ff; +} +.tab-badge[data-v-c1a60359] { + margin-left: 0.25rem; + background: #ff5e57; + color: #fff; + font-size: 0.625rem; + padding: 0.0625rem 0.3125rem; + border-radius: 0.625rem; + line-height: 1.4; +} +/* ===== 下载列表 ===== */ +.download-content[data-v-c1a60359] { + flex: 1; + overflow: auto; +} +.download-empty[data-v-c1a60359] { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding-top: 6.25rem; + color: #bbb; + font-size: 0.875rem; +} +.download-empty .iconfont[data-v-c1a60359] { + font-size: 4.375rem; + color: #ddd; + margin-bottom: 0.625rem; +} +.download-list[data-v-c1a60359] { + padding: 0.625rem 0.75rem; +} +.download-header[data-v-c1a60359] { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.375rem 0.25rem 0.625rem; + font-size: 0.75rem; + color: #999; +} +.clear-btn[data-v-c1a60359] { + color: #ff5e57; + font-size: 0.75rem; + font-weight: 500; + padding: 0.125rem 0.375rem; +} +.download-item[data-v-c1a60359] { + display: flex; + align-items: center; + padding: 0.75rem 0.625rem; + background: rgba(255, 255, 255, 0.85); + border-radius: 0.625rem; + margin-bottom: 0.5rem; + transition: all 0.15s ease; +} +.download-item[data-v-c1a60359]:active { + transform: scale(0.98); + background: rgba(255, 255, 255, 0.95); +} +.di-icon[data-v-c1a60359] { + width: 2.5rem; + height: 2.5rem; + display: flex; + justify-content: center; + align-items: center; + background: rgba(108, 99, 255, 0.08); + border-radius: 0.5625rem; + margin-right: 0.625rem; + flex-shrink: 0; +} +.di-icon .iconfont[data-v-c1a60359] { + font-size: 1.25rem; + color: #6c63ff; +} +.di-info[data-v-c1a60359] { + flex: 1; + display: flex; + flex-direction: column; + gap: 0.1875rem; + min-width: 0; +} +.di-name[data-v-c1a60359] { + font-size: 0.875rem; + font-weight: 500; + color: #333; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.di-meta[data-v-c1a60359] { + font-size: 0.6875rem; + color: #999; +} +.di-path[data-v-c1a60359] { + font-size: 0.625rem; + color: #bbb; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.di-delete[data-v-c1a60359] { + width: 1.75rem; + height: 1.75rem; + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; +} +.di-delete .iconfont[data-v-c1a60359] { + font-size: 1.125rem; + color: #ccc; + transition: color 0.15s ease; +} +.di-delete:active .iconfont[data-v-c1a60359] { + color: #ff5e57; +} diff --git a/utils/downloadManager.js b/utils/downloadManager.js new file mode 100644 index 0000000..bb5c342 --- /dev/null +++ b/utils/downloadManager.js @@ -0,0 +1,284 @@ +/** + * 下载管理工具 + * 文件保存到公共下载目录,用户可通过文件管理器访问 + */ + +const STORAGE_KEY = 'localDownloads' +const SUB_DIR = 'AppDownloads' // 公共下载目录下的子文件夹 + +/** + * 获取公共下载目录路径 + * @returns {Promise} 下载目录绝对路径 + */ +function getPublicDownloadDir() { + return new Promise((resolve, reject) => { + // #ifdef APP-PLUS + plus.io.requestFileSystem( + plus.io.PUBLIC_DOWNLOADS, + (fs) => { + // PUBLIC_DOWNLOADS 对应 /storage/emulated/0/Download/ + fs.root.getDirectory( + SUB_DIR, + { create: true }, + (dirEntry) => { + resolve(dirEntry.fullPath) + }, + (err) => { + console.error('getDirectory failed:', err) + reject(err) + } + ) + }, + (err) => { + console.error('requestFileSystem failed:', err) + reject(err) + } + ) + // #endif + // #ifndef APP-PLUS + reject(new Error('仅APP端支持')) + // #endif + }) +} + +/** + * 从完整路径中提取可读的显示路径 + * 如 /storage/emulated/0/Download/AppDownloads/xxx.pdf → 下载/AppDownloads/xxx.pdf + */ +function getDisplayPath(fullPath) { + const idx = fullPath.indexOf('/Download/') + if (idx !== -1) { + return '下载/' + fullPath.slice(idx + 10) + } + return fullPath +} + +/** + * 获取所有下载记录 + * @returns {Array} 下载记录列表 + */ +export function getDownloadList() { + try { + return uni.getStorageSync(STORAGE_KEY) || [] + } catch (e) { + return [] + } +} + +/** + * 保存下载记录(复制到公共下载目录) + * @param {string} tempFilePath 临时文件路径(uni.downloadFile 返回的) + * @param {string} fileName 文件名 + * @param {number} fileSize 文件大小(字节,可选) + */ +export function saveDownload(tempFilePath, fileName, fileSize) { + return new Promise((resolve, reject) => { + // #ifdef APP-PLUS + getPublicDownloadDir().then((dirPath) => { + const destPathForUrl = plus.io.convertLocalFileSystemURL(dirPath + '/' + fileName) + + plus.io.resolveLocalFileSystemURL( + tempFilePath, + (fileEntry) => { + plus.io.resolveLocalFileSystemURL( + dirPath, + (dirEntry) => { + fileEntry.copyTo( + dirEntry, + fileName, + () => { + const record = { + id: Date.now().toString(), + name: fileName, + path: destPathForUrl, + displayPath: getDisplayPath(destPathForUrl), + size: fileSize || 0, + time: Date.now() + } + const list = getDownloadList() + const exists = list.some(item => item.name === fileName) + if (exists) { + const idx = list.findIndex(item => item.name === fileName) + if (idx !== -1) list.splice(idx, 1) + } + list.unshift(record) + try { + uni.setStorageSync(STORAGE_KEY, list) + } catch (e) { + list.pop() + uni.setStorageSync(STORAGE_KEY, list) + } + resolve(record) + }, + (err) => { + console.error('copyTo failed:', err) + reject(err) + } + ) + }, + reject + ) + }, + reject + ) + }).catch(reject) + // #endif + // #ifndef APP-PLUS + // 非 APP 端降级使用 uni.saveFile + uni.saveFile({ + tempFilePath: tempFilePath, + success: (saveRes) => { + const record = { + id: Date.now().toString(), + name: fileName, + path: saveRes.savedFilePath, + size: fileSize || 0, + time: Date.now() + } + const list = getDownloadList() + list.unshift(record) + uni.setStorageSync(STORAGE_KEY, list) + resolve(record) + }, + fail: reject + }) + // #endif + }) +} + +/** + * 删除单条下载记录及其文件 + * @param {string} id 记录 ID + */ +export function deleteDownload(id) { + return new Promise((resolve, reject) => { + const list = getDownloadList() + const record = list.find(item => item.id === id) + if (!record) { + reject(new Error('记录不存在')) + return + } + + // #ifdef APP-PLUS + // 删除公共目录下的文件 + plus.io.resolveLocalFileSystemURL( + record.path, + (fileEntry) => { + fileEntry.remove( + () => { + const newList = list.filter(item => item.id !== id) + uni.setStorageSync(STORAGE_KEY, newList) + resolve() + }, + () => { + // 文件不存在也清除记录 + const newList = list.filter(item => item.id !== id) + uni.setStorageSync(STORAGE_KEY, newList) + resolve() + } + ) + }, + () => { + // 无法解析路径,直接清除记录 + const newList = list.filter(item => item.id !== id) + uni.setStorageSync(STORAGE_KEY, newList) + resolve() + } + ) + // #endif + // #ifndef APP-PLUS + uni.removeSavedFile({ + filePath: record.path, + success: () => { + const newList = list.filter(item => item.id !== id) + uni.setStorageSync(STORAGE_KEY, newList) + resolve() + }, + fail: () => { + const newList = list.filter(item => item.id !== id) + uni.setStorageSync(STORAGE_KEY, newList) + resolve() + } + }) + // #endif + }) +} + +/** + * 清空所有下载记录和文件 + */ +export function clearAllDownloads() { + return new Promise((resolve) => { + const list = getDownloadList() + if (list.length === 0) { + resolve() + return + } + + // #ifdef APP-PLUS + let count = 0 + const done = () => { + count++ + if (count >= list.length) { + uni.setStorageSync(STORAGE_KEY, []) + resolve() + } + } + + list.forEach(record => { + plus.io.resolveLocalFileSystemURL( + record.path, + (fileEntry) => { + fileEntry.remove(done, done) + }, + done + ) + }) + + setTimeout(() => { + uni.setStorageSync(STORAGE_KEY, []) + resolve() + }, 5000) + // #endif + // #ifndef APP-PLUS + let count = 0 + list.forEach(record => { + uni.removeSavedFile({ + filePath: record.path, + success: () => { count++; if (count >= list.length) { uni.setStorageSync(STORAGE_KEY, []); resolve() } }, + fail: () => { count++; if (count >= list.length) { uni.setStorageSync(STORAGE_KEY, []); resolve() } } + }) + }) + if (list.length === 0) resolve() + setTimeout(() => { uni.setStorageSync(STORAGE_KEY, []); resolve() }, 3000) + // #endif + }) +} + +/** + * 格式化文件大小为可读字符串 + * @param {number} bytes 字节数 + * @returns {string} + */ +export function formatFileSize(bytes) { + if (!bytes || bytes <= 0) return '未知大小' + const units = ['B', 'KB', 'MB', 'GB'] + let i = 0 + let size = bytes + while (size >= 1024 && i < units.length - 1) { + size /= 1024 + i++ + } + return size.toFixed(i === 0 ? 0 : 1) + ' ' + units[i] +} + +/** + * 格式化时间戳为可读日期 + * @param {number} timestamp + * @returns {string} + */ +export function formatTime(timestamp) { + const d = new Date(timestamp) + const pad = n => String(n).padStart(2, '0') + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}` +} From 849e473c7d5b966876542b86837e3c2ce3cf83c6 Mon Sep 17 00:00:00 2001 From: YiLin <482244139@qq.com> Date: Mon, 3 Aug 2026 16:08:52 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E9=93=BE=E6=8E=A5=E6=98=BE=E7=A4=BA=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/Chat/Chat.vue | 163 ++++++++++++- unpackage/dist/dev/app-plus/app-service.js | 227 +++++++++++++++--- .../dist/dev/app-plus/pages/Chat/Chat.css | 33 +++ 3 files changed, 381 insertions(+), 42 deletions(-) diff --git a/pages/Chat/Chat.vue b/pages/Chat/Chat.vue index 38f9f55..06fdf82 100644 --- a/pages/Chat/Chat.vue +++ b/pages/Chat/Chat.vue @@ -467,6 +467,35 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. return text } + // 判断链接是否为可下载文件 + const isDownloadLink = (url) => { + const supportedExtensions = ['html', 'htm', 'xlsx', 'xls', 'pdf', 'zip', 'rar', '7z', 'md', 'markdown', + 'docx', 'doc', 'pptx', 'ppt', 'txt', 'csv', 'json', 'xml', 'yaml', 'yml', + 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp', 'ico', 'tiff', 'tif', 'dxf' + ] + const extPattern = supportedExtensions.join('|') + const extRegex = new RegExp(`\\.(${extPattern})(?:\\?|$)`, 'i') + return extRegex.test(url) + } + + // 渲染下载按钮 HTML + const renderDownloadBtn = (href, displayName) => { + const ext = ((href.split('.').pop() || '').split('?')[0] || '').toLowerCase() + const fileInfo = getFileTypeInfo(ext) + const name = displayName || extractFileNameFromUrl(href) + return '' + + '' + fileInfo.emoji + '' + + '' + name + '' + + '' + } + + // 支持的文件扩展名(用于原始 URL 检测) + const supportedExtensions = ['html', 'htm', 'xlsx', 'xls', 'pdf', 'zip', 'rar', '7z', 'md', 'markdown', + 'docx', 'doc', 'pptx', 'ppt', 'txt', 'csv', 'json', 'xml', 'yaml', 'yml', + 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp', 'ico', 'tiff', 'tif', 'dxf' + ] + const extPattern = supportedExtensions.join('|') + // Markdown转HTML节点 const pareseMarkdown = (content) => { if (!content) return '' @@ -476,14 +505,60 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. try { // 转义单词中的单下划线,防止 snarkdown 误解析为斜体 content = escapeLoneUnderscores(content) + + // 修复1: URL 中的中文括号编码,防止 snarkdown 截断URL + // [text](http://xxx/高二(1)班.xlsx) → [text](http://xxx/高二%281%29班.xlsx) + content = content.replace( + /\[([^\]]+)\]\((https?:\/\/[^\s]+)\)/g, + (m, name, url) => '[' + name + '](' + url.replace(/\(/g, '%28').replace(/\)/g, '%29') + ')' + ) + + // 修复2: 误用括号 [高二](1)班成绩表 → 高二(1)班成绩表 + // 当 (数字/短文本) 后紧跟中文时,说明不是真实URL,还原为纯文本 + content = content.replace( + /\[([^\]]+)\]\((\d{1,2}|[^\s)]{1,3})\)(?=[\u4e00-\u9fff])/g, + '$1($2)' + ) + // 先转换表格,再用 snarkdown 处理其他 Markdown content = convertMarkdownTable(content) let html = snarkdown(content) - // 将 替换为自定义 span,避免 WebView 触发默认下载 + + // 步骤1:暂存 标签,避免 raw URL 替换误伤 href 内的链接 + const linkPlaceholders = [] html = html.replace( /]*>(.*?)<\/a>/gi, - '$2' + (match, href, innerText) => { + const idx = linkPlaceholders.length + linkPlaceholders.push({ href, innerText }) + return '\x00LINK_' + idx + '\x00' + } ) + + // 步骤2:将正文中的原始文件 URL 替换为下载按钮 + const rawUrlRegex = new RegExp( + `https?://[^\\s<>"'']+\\.(${extPattern})(?:[?#][^\\s<>"'']*)?`, + 'gi' + ) + html = html.replace(rawUrlRegex, (url) => { + return renderDownloadBtn(url) + }) + + // 步骤3:恢复 标签并分类处理 + html = html.replace(/\x00LINK_(\d+)\x00/g, (_, idx) => { + const { href, innerText } = linkPlaceholders[idx] + if (isDownloadLink(href)) { + const plainText = innerText + .replace(/<[^>]*>/g, ' ') + .replace(/ /gi, ' ') + .replace(/\s+/g, ' ') + .trim() + return renderDownloadBtn(href, plainText) + } + // 普通链接保持原有样式 + return '' + innerText + '' + }) + return html } catch (e) { console.error('解析失败', e) @@ -839,6 +914,50 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. } return urlStr } + + // 文件类型 → 图标和标签映射 + const getFileTypeInfo = (ext) => { + const map = { + // 文档类 + pdf: { emoji: '📕', label: 'PDF', color: '#e74c3c' }, + doc: { emoji: '📘', label: 'Word', color: '#2b579a' }, + docx: { emoji: '📘', label: 'Word', color: '#2b579a' }, + xls: { emoji: '📗', label: 'Excel', color: '#217346' }, + xlsx: { emoji: '📗', label: 'Excel', color: '#217346' }, + ppt: { emoji: '📙', label: 'PPT', color: '#d24726' }, + pptx: { emoji: '📙', label: 'PPT', color: '#d24726' }, + txt: { emoji: '📄', label: '文本', color: '#666' }, + md: { emoji: '📝', label: 'Markdown', color: '#333' }, + markdown: { emoji: '📝', label: 'Markdown', color: '#333' }, + csv: { emoji: '📊', label: 'CSV', color: '#217346' }, + json: { emoji: '📋', label: 'JSON', color: '#f0a500' }, + xml: { emoji: '📋', label: 'XML', color: '#e67e22' }, + yaml: { emoji: '📋', label: 'YAML', color: '#e67e22' }, + yml: { emoji: '📋', label: 'YAML', color: '#e67e22' }, + // 压缩包 + zip: { emoji: '📦', label: 'ZIP', color: '#f39c12' }, + rar: { emoji: '📦', label: 'RAR', color: '#f39c12' }, + '7z': { emoji: '📦', label: '7Z', color: '#f39c12' }, + // 网页 + html: { emoji: '🌐', label: '网页', color: '#e44d26' }, + htm: { emoji: '🌐', label: '网页', color: '#e44d26' }, + // 图片 + jpg: { emoji: '🖼️', label: '图片', color: '#9b59b6' }, + jpeg: { emoji: '🖼️', label: '图片', color: '#9b59b6' }, + png: { emoji: '🖼️', label: '图片', color: '#9b59b6' }, + gif: { emoji: '🖼️', label: 'GIF', color: '#9b59b6' }, + bmp: { emoji: '🖼️', label: '图片', color: '#9b59b6' }, + svg: { emoji: '🖼️', label: 'SVG', color: '#9b59b6' }, + webp: { emoji: '🖼️', label: '图片', color: '#9b59b6' }, + ico: { emoji: '🖼️', label: '图标', color: '#9b59b6' }, + tiff: { emoji: '🖼️', label: '图片', color: '#9b59b6' }, + tif: { emoji: '🖼️', label: '图片', color: '#9b59b6' }, + // CAD/设计类 + dxf: { emoji: '📐', label: 'CAD/DXF', color: '#2c3e50' }, + } + return map[ext] || { emoji: '📎', label: ext.toUpperCase(), color: '#888' } + } + const showMessageDetail = (message) => { detailLinks.value = extractLinks(message.content || '') showMessageModal.value = true @@ -1381,7 +1500,8 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. const takeConversationMessages = async () => { try { allmessages.value = await getConversationMessages(userToken.value, currentSessionId.value) || []; - // console.log("获取到的所有消息:", JSON.stringify(allmessages.value) ); + console.log("获取到的所有消息:", JSON.stringify(allmessages.value) ); + console.log("获取到的所有消息:", allmessages.value); // currentMessages.value = allmessages.value.slice(-pageInfoNumber); // 数据获取后执行滚动 scrollToBottom(); @@ -1654,6 +1774,43 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. text-decoration: underline; word-break: break-all; } + + /* 可下载文件链接 → 按钮卡片样式 */ + .chat-download-btn { + display: inline-flex !important; + align-items: center; + gap: 8rpx; + padding: 8rpx 14rpx; + margin: 4rpx 0; + background: #f5f7fb; + border: 2rpx solid #e4e8f0; + border-radius: 8rpx; + text-decoration: none !important; + color: #333 !important; + word-break: break-all; + transition: all 0.15s ease; + + &:active { + background: #eef1f7; + border-color: #c8cde0; + transform: scale(0.98); + } + + .chat-dl-icon { + font-size: 26rpx !important; + line-height: 1; + flex-shrink: 0; + } + + .chat-dl-name { + font-size: 16px !important; + font-weight: 500; + color: #333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } } /* 流式气泡中的加载动画 */ diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index ca45452..d87f692 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -5800,21 +5800,127 @@ This will fail in production.`); text = text.replace(/\x00\x00/g, "__"); return text; }; + const isDownloadLink = (url) => { + const supportedExtensions2 = [ + "html", + "htm", + "xlsx", + "xls", + "pdf", + "zip", + "rar", + "7z", + "md", + "markdown", + "docx", + "doc", + "pptx", + "ppt", + "txt", + "csv", + "json", + "xml", + "yaml", + "yml", + "jpg", + "jpeg", + "png", + "gif", + "bmp", + "svg", + "webp", + "ico", + "tiff", + "tif", + "dxf" + ]; + const extPattern2 = supportedExtensions2.join("|"); + const extRegex = new RegExp(`\\.(${extPattern2})(?:\\?|$)`, "i"); + return extRegex.test(url); + }; + const renderDownloadBtn = (href, displayName) => { + const ext = ((href.split(".").pop() || "").split("?")[0] || "").toLowerCase(); + const fileInfo = getFileTypeInfo(ext); + const name2 = displayName || extractFileNameFromUrl(href); + return '' + fileInfo.emoji + '' + name2 + ""; + }; + const supportedExtensions = [ + "html", + "htm", + "xlsx", + "xls", + "pdf", + "zip", + "rar", + "7z", + "md", + "markdown", + "docx", + "doc", + "pptx", + "ppt", + "txt", + "csv", + "json", + "xml", + "yaml", + "yml", + "jpg", + "jpeg", + "png", + "gif", + "bmp", + "svg", + "webp", + "ico", + "tiff", + "tif", + "dxf" + ]; + const extPattern = supportedExtensions.join("|"); const pareseMarkdown = (content) => { if (!content) return ""; content = sanitizeContent(content); try { content = escapeLoneUnderscores(content); + content = content.replace( + /\[([^\]]+)\]\((https?:\/\/[^\s]+)\)/g, + (m, name2, url) => "[" + name2 + "](" + url.replace(/\(/g, "%28").replace(/\)/g, "%29") + ")" + ); + content = content.replace( + /\[([^\]]+)\]\((\d{1,2}|[^\s)]{1,3})\)(?=[\u4e00-\u9fff])/g, + "$1($2)" + ); content = convertMarkdownTable(content); let html = t(content); + const linkPlaceholders = []; html = html.replace( /]*>(.*?)<\/a>/gi, - '$2' + (match, href, innerText) => { + const idx = linkPlaceholders.length; + linkPlaceholders.push({ href, innerText }); + return "\0LINK_" + idx + "\0"; + } ); + const rawUrlRegex = new RegExp( + `https?://[^\\s<>"'']+\\.(${extPattern})(?:[?#][^\\s<>"'']*)?`, + "gi" + ); + html = html.replace(rawUrlRegex, (url) => { + return renderDownloadBtn(url); + }); + html = html.replace(/\x00LINK_(\d+)\x00/g, (_, idx) => { + const { href, innerText } = linkPlaceholders[idx]; + if (isDownloadLink(href)) { + const plainText = innerText.replace(/<[^>]*>/g, " ").replace(/ /gi, " ").replace(/\s+/g, " ").trim(); + return renderDownloadBtn(href, plainText); + } + return '' + innerText + ""; + }); return html; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:489", "解析失败", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:564", "解析失败", e2); return content; } }; @@ -5865,7 +5971,7 @@ This will fail in production.`); files }; } catch (e2) { - formatAppLog("error", "at pages/Chat/Chat.vue:558", "解析文件信息失败:", e2); + formatAppLog("error", "at pages/Chat/Chat.vue:633", "解析文件信息失败:", e2); return { textContent: content, files: [] @@ -5903,7 +6009,7 @@ This will fail in production.`); closeNewChatModal(); takeUserConversations(); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:604", "新建普通会话失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:679", "新建普通会话失败:", error); uni.showToast({ title: "创建会话失败,请重试", icon: "none" @@ -5946,7 +6052,7 @@ This will fail in production.`); }; const previewFileArray = vue.ref([]); const uploadPhoto = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:664", "点击了拍照上传"); + formatAppLog("log", "at pages/Chat/Chat.vue:739", "点击了拍照上传"); uni.chooseImage({ count: 1, sourceType: ["camera", "album"], @@ -5969,7 +6075,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:682", "选择图片失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:757", "选择图片失败", err); } }); }; @@ -5978,12 +6084,12 @@ This will fail in production.`); }; const fileList = vue.ref([]); const uploadFile = () => { - formatAppLog("log", "at pages/Chat/Chat.vue:693", "点击了上传文件"); + formatAppLog("log", "at pages/Chat/Chat.vue:768", "点击了上传文件"); chooseFile({ count: 5, type: "all", success: (res) => { - formatAppLog("log", "at pages/Chat/Chat.vue:698", "成功了"); + formatAppLog("log", "at pages/Chat/Chat.vue:773", "成功了"); fileList.value = res.tempFiles; previewFileArray.value.push(...res.tempFiles); uni.showToast({ @@ -5992,7 +6098,7 @@ This will fail in production.`); }); }, fail: (err) => { - formatAppLog("error", "at pages/Chat/Chat.vue:709", "选择失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:784", "选择失败:", err); uni.showToast({ title: "选择失败", icon: "error" @@ -6096,6 +6202,47 @@ This will fail in production.`); } return urlStr; }; + const getFileTypeInfo = (ext) => { + const map = { + // 文档类 + pdf: { emoji: "📕", label: "PDF", color: "#e74c3c" }, + doc: { emoji: "📘", label: "Word", color: "#2b579a" }, + docx: { emoji: "📘", label: "Word", color: "#2b579a" }, + xls: { emoji: "📗", label: "Excel", color: "#217346" }, + xlsx: { emoji: "📗", label: "Excel", color: "#217346" }, + ppt: { emoji: "📙", label: "PPT", color: "#d24726" }, + pptx: { emoji: "📙", label: "PPT", color: "#d24726" }, + txt: { emoji: "📄", label: "文本", color: "#666" }, + md: { emoji: "📝", label: "Markdown", color: "#333" }, + markdown: { emoji: "📝", label: "Markdown", color: "#333" }, + csv: { emoji: "📊", label: "CSV", color: "#217346" }, + json: { emoji: "📋", label: "JSON", color: "#f0a500" }, + xml: { emoji: "📋", label: "XML", color: "#e67e22" }, + yaml: { emoji: "📋", label: "YAML", color: "#e67e22" }, + yml: { emoji: "📋", label: "YAML", color: "#e67e22" }, + // 压缩包 + zip: { emoji: "📦", label: "ZIP", color: "#f39c12" }, + rar: { emoji: "📦", label: "RAR", color: "#f39c12" }, + "7z": { emoji: "📦", label: "7Z", color: "#f39c12" }, + // 网页 + html: { emoji: "🌐", label: "网页", color: "#e44d26" }, + htm: { emoji: "🌐", label: "网页", color: "#e44d26" }, + // 图片 + jpg: { emoji: "🖼️", label: "图片", color: "#9b59b6" }, + jpeg: { emoji: "🖼️", label: "图片", color: "#9b59b6" }, + png: { emoji: "🖼️", label: "图片", color: "#9b59b6" }, + gif: { emoji: "🖼️", label: "GIF", color: "#9b59b6" }, + bmp: { emoji: "🖼️", label: "图片", color: "#9b59b6" }, + svg: { emoji: "🖼️", label: "SVG", color: "#9b59b6" }, + webp: { emoji: "🖼️", label: "图片", color: "#9b59b6" }, + ico: { emoji: "🖼️", label: "图标", color: "#9b59b6" }, + tiff: { emoji: "🖼️", label: "图片", color: "#9b59b6" }, + tif: { emoji: "🖼️", label: "图片", color: "#9b59b6" }, + // CAD/设计类 + dxf: { emoji: "📐", label: "CAD/DXF", color: "#2c3e50" } + }; + return map[ext] || { emoji: "📎", label: ext.toUpperCase(), color: "#888" }; + }; const showMessageDetail = (message) => { detailLinks.value = extractLinks(message.content || ""); showMessageModal.value = true; @@ -6190,7 +6337,7 @@ This will fail in production.`); previewFileArray.value = []; } catch (err) { uni.hideLoading(); - formatAppLog("error", "at pages/Chat/Chat.vue:940", "文件上传失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1059", "文件上传失败:", err); uni.showToast({ title: "文件上传失败,请重试", icon: "error" @@ -6324,15 +6471,15 @@ This will fail in production.`); } }; const stopConversation = async () => { - formatAppLog("log", "at pages/Chat/Chat.vue:1110", "中断对话 - 当前会话ID:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1229", "中断对话 - 当前会话ID:", currentSessionId.value); try { await socketStore.send({ type: "stop", conversation_id: currentSessionId.value }); - formatAppLog("log", "at pages/Chat/Chat.vue:1116", "中断指令已发送成功"); + formatAppLog("log", "at pages/Chat/Chat.vue:1235", "中断指令已发送成功"); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1118", "中断指令发送失败:", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1237", "中断指令发送失败:", err); } if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); @@ -6350,9 +6497,9 @@ This will fail in production.`); }); }; vue.watch(() => socketStore.isThinking, (newVal, oldVal) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1142", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); + formatAppLog("log", "at pages/Chat/Chat.vue:1261", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString); if (!oldVal && newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1145", "AI开始回复(跨设备同步),锁定输入框"); + formatAppLog("log", "at pages/Chat/Chat.vue:1264", "AI开始回复(跨设备同步),锁定输入框"); isThinking.value = true; if (!streamingMessageId.value) { streamingMessageId.value = "streaming-" + Date.now(); @@ -6366,7 +6513,7 @@ This will fail in production.`); return; } if (oldVal && !newVal) { - formatAppLog("log", "at pages/Chat/Chat.vue:1161", "AI回复结束(正常/中断),解锁并刷新消息列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1280", "AI回复结束(正常/中断),解锁并刷新消息列表"); if (streamingMessageId.value) { allmessages.value = allmessages.value.filter((m) => m._id !== streamingMessageId.value); streamingMessageId.value = null; @@ -6420,15 +6567,15 @@ This will fail in production.`); UserData.value = await getUserInfo(userToken.value); UserId.value = UserData.value._id; UserAvatar.value = UserData.value.avatar || ""; - formatAppLog("log", "at pages/Chat/Chat.vue:1227", "用户信息已加载:", UserId.value, UserAvatar.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1346", "用户信息已加载:", UserId.value, UserAvatar.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1229", "获取用户信息失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1348", "获取用户信息失败:", error); } }; const takeUserConversations = async () => { try { userToken.value = getToken(); - formatAppLog("log", "at pages/Chat/Chat.vue:1237", "token:", userToken.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1356", "token:", userToken.value); UserConversations.value = await getUserConversations(userToken.value) || []; const savedSessionId = getCurrentSessionId(); if (savedSessionId && UserConversations.value.some((c) => c._id === savedSessionId)) { @@ -6438,7 +6585,7 @@ This will fail in production.`); } else { currentSessionId.value = ""; } - formatAppLog("log", "at pages/Chat/Chat.vue:1249", "保存会话id:", currentSessionId.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1368", "保存会话id:", currentSessionId.value); uni.setStorageSync("currentSessionId", currentSessionId.value); } catch (error) { uni.showToast({ @@ -6450,17 +6597,17 @@ This will fail in production.`); const FriendInfoList = vue.ref([]); const takeFriendList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1264", "开始获取好友列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1383", "开始获取好友列表"); const friendList = await getChatFriend(UserId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1267", "friendList:", friendList); + formatAppLog("log", "at pages/Chat/Chat.vue:1386", "friendList:", friendList); if (friendList && friendList.length) { FriendInfoList.value = await takeUserAvatar(friendList); } else { FriendInfoList.value = []; - formatAppLog("log", "at pages/Chat/Chat.vue:1272", "好友列表为空"); + formatAppLog("log", "at pages/Chat/Chat.vue:1391", "好友列表为空"); } } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1275", "获取好友列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1394", "获取好友列表失败:", error); FriendInfoList.value = []; } finally { UserConversations.value = FriendInfoList.value; @@ -6487,17 +6634,17 @@ This will fail in production.`); }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1305", "获取好友头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1424", "获取好友头像失败", err); return friendList; } }; const GroupList = vue.ref([]); const takeGroupList = async () => { try { - formatAppLog("log", "at pages/Chat/Chat.vue:1315", "开始获取群聊列表"); + formatAppLog("log", "at pages/Chat/Chat.vue:1434", "开始获取群聊列表"); GroupList.value = await getGroup(UserId.value); } catch (error) { - formatAppLog("error", "at pages/Chat/Chat.vue:1320", "获取群聊列表失败:", error); + formatAppLog("error", "at pages/Chat/Chat.vue:1439", "获取群聊列表失败:", error); GroupList.value = []; } finally { UserConversations.value = GroupList.value; @@ -6509,22 +6656,22 @@ This will fail in production.`); return []; try { const memberIds = memberList.map((item) => item.groupContactId); - formatAppLog("log", "at pages/Chat/Chat.vue:1334", "请求头像的ID列表:", memberIds); + formatAppLog("log", "at pages/Chat/Chat.vue:1453", "请求头像的ID列表:", memberIds); const memberAvatarList = await getUserAvatar(userToken.value, memberIds); - formatAppLog("log", "at pages/Chat/Chat.vue:1336", "头像接口返回数据:", memberAvatarList); + formatAppLog("log", "at pages/Chat/Chat.vue:1455", "头像接口返回数据:", memberAvatarList); const userMap = new Map(memberAvatarList.map((user) => [user.user_id, user]) || []); - formatAppLog("log", "at pages/Chat/Chat.vue:1339", "userMap的keys:", Array.from(userMap.keys())); + formatAppLog("log", "at pages/Chat/Chat.vue:1458", "userMap的keys:", Array.from(userMap.keys())); return memberList.map((member) => { const memberId = member.groupContactId; const userInfo = userMap.get(memberId); - formatAppLog("log", "at pages/Chat/Chat.vue:1344", `查找 ${memberId} 的头像:`, userInfo); + formatAppLog("log", "at pages/Chat/Chat.vue:1463", `查找 ${memberId} 的头像:`, userInfo); return { ...member, avatar: (userInfo == null ? void 0 : userInfo.avatar) || null }; }); } catch (err) { - formatAppLog("error", "at pages/Chat/Chat.vue:1351", "获取群成员头像失败", err); + formatAppLog("error", "at pages/Chat/Chat.vue:1470", "获取群成员头像失败", err); return memberList; } }; @@ -6545,6 +6692,8 @@ This will fail in production.`); const takeConversationMessages = async () => { try { allmessages.value = await getConversationMessages(userToken.value, currentSessionId.value) || []; + formatAppLog("log", "at pages/Chat/Chat.vue:1503", "获取到的所有消息:", JSON.stringify(allmessages.value)); + formatAppLog("log", "at pages/Chat/Chat.vue:1504", "获取到的所有消息:", allmessages.value); scrollToBottom(); } catch (error) { uni.showToast({ @@ -6571,12 +6720,12 @@ This will fail in production.`); const takeGroupMessages = async () => { try { allmessages.value = await getGroupMessages(currentSessionId.value) || []; - formatAppLog("log", "at pages/Chat/Chat.vue:1415", "群聊消息:", allmessages.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1535", "群聊消息:", allmessages.value); const memberList = await getGroupMemberList(currentSessionId.value); - formatAppLog("log", "at pages/Chat/Chat.vue:1418", "获取到的群成员列表:", memberList); + formatAppLog("log", "at pages/Chat/Chat.vue:1538", "获取到的群成员列表:", memberList); if (memberList && memberList.length) { groupMemberList.value = await takeGroupMemberAvatar(memberList); - formatAppLog("log", "at pages/Chat/Chat.vue:1421", "群成员列表(带头像):", groupMemberList.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1541", "群成员列表(带头像):", groupMemberList.value); } else { groupMemberList.value = []; } @@ -6600,9 +6749,9 @@ This will fail in production.`); } }; vue.watch(() => friendSocketStore.MessageReceived, (newId) => { - formatAppLog("log", "at pages/Chat/Chat.vue:1468", "收到了好友消息"); + formatAppLog("log", "at pages/Chat/Chat.vue:1588", "收到了好友消息"); if (newId) { - formatAppLog("log", "at pages/Chat/Chat.vue:1470", "ChatType:", ChatType.value); + formatAppLog("log", "at pages/Chat/Chat.vue:1590", "ChatType:", ChatType.value); switch (ChatType.value) { case 0: takeConversationMessages(); @@ -6617,7 +6766,7 @@ This will fail in production.`); friendSocketStore.MessageReceived = false; break; default: - formatAppLog("log", "at pages/Chat/Chat.vue:1486", "default 分支"); + formatAppLog("log", "at pages/Chat/Chat.vue:1606", "default 分支"); friendSocketStore.MessageReceived = false; break; } @@ -6696,7 +6845,7 @@ This will fail in production.`); onUnload(() => { socketStore.disconnect(); }); - const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, wyxdWorkspaceId, wyxdFilePath, wyxdFileName, wyxdUserToken, hasWyxdFile, convertMarkdownTable, renderTable, escapeLoneUnderscores, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize: formatFileSize2, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goWyxdViewer, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { + const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, wyxdWorkspaceId, wyxdFilePath, wyxdFileName, wyxdUserToken, hasWyxdFile, convertMarkdownTable, renderTable, escapeLoneUnderscores, isDownloadLink, renderDownloadBtn, supportedExtensions, extPattern, pareseMarkdown, sanitizeContent, previewImage, openFile: openFile$1, formatFileSize: formatFileSize2, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goWyxdViewer, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, isLoadingMessages, uploadedFiles, streamingMessageId, showMessageModal, detailLinks, handleChatContentClick, extractLinks, extractFileNameFromUrl, getFileTypeInfo, showMessageDetail, closeMessageDetail, downloadToast, get downloadToastTimer() { return downloadToastTimer; }, set downloadToastTimer(v) { downloadToastTimer = v; diff --git a/unpackage/dist/dev/app-plus/pages/Chat/Chat.css b/unpackage/dist/dev/app-plus/pages/Chat/Chat.css index 077b726..06bf21d 100644 --- a/unpackage/dist/dev/app-plus/pages/Chat/Chat.css +++ b/unpackage/dist/dev/app-plus/pages/Chat/Chat.css @@ -1716,6 +1716,7 @@ to { opacity: 1; transform: translateY(0); /* 普通正文 */ /* 粗体和斜体样式 */ /* 气泡内的内联链接(替代 标签,点击由 JS 拦截处理) */ + /* 可下载文件链接 → 按钮卡片样式 */ } .chat-content h1 { font-size: 1.3125rem; @@ -1761,6 +1762,38 @@ to { opacity: 1; transform: translateY(0); text-decoration: underline; word-break: break-all; } +.chat-content .chat-download-btn { + display: inline-flex !important; + align-items: center; + gap: 0.25rem; + padding: 0.25rem 0.4375rem; + margin: 0.125rem 0; + background: #f5f7fb; + border: 0.0625rem solid #e4e8f0; + border-radius: 0.25rem; + text-decoration: none !important; + color: #333 !important; + word-break: break-all; + transition: all 0.15s ease; +} +.chat-content .chat-download-btn:active { + background: #eef1f7; + border-color: #c8cde0; + transform: scale(0.98); +} +.chat-content .chat-download-btn .chat-dl-icon { + font-size: 0.8125rem !important; + line-height: 1; + flex-shrink: 0; +} +.chat-content .chat-download-btn .chat-dl-name { + font-size: 16px !important; + font-weight: 500; + color: #333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} /* 流式气泡中的加载动画 */ .bubble-loading-dots {