部分优化
This commit is contained in:
526
unpackage/dist/dev/app-plus/app-service.js
vendored
526
unpackage/dist/dev/app-plus/app-service.js
vendored
@@ -32,6 +32,7 @@ if (uni.restoreGlobal) {
|
||||
(function(vue) {
|
||||
"use strict";
|
||||
const ON_SHOW = "onShow";
|
||||
const ON_UNLOAD = "onUnload";
|
||||
function formatAppLog(type, filename, ...args) {
|
||||
if (uni.__log__) {
|
||||
uni.__log__(type, filename, ...args);
|
||||
@@ -50,6 +51,11 @@ if (uni.restoreGlobal) {
|
||||
1 | 2
|
||||
/* HookFlags.PAGE */
|
||||
);
|
||||
const onUnload = /* @__PURE__ */ createLifeCycleHook(
|
||||
ON_UNLOAD,
|
||||
2
|
||||
/* HookFlags.PAGE */
|
||||
);
|
||||
const BASE_URL = "https://cloud.yuxindazhineng.com";
|
||||
const login = async (username, password) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -4615,6 +4621,7 @@ This will fail in production.`);
|
||||
vue.ref("");
|
||||
const logs = vue.ref([]);
|
||||
const maxLogCount = vue.ref(20);
|
||||
const authFailReason = vue.ref("");
|
||||
const isConnected = vue.computed(() => connectionStatus.value === "connected");
|
||||
const isConnecting = vue.computed(() => connectionStatus.value === "connecting");
|
||||
const isDisconnected = vue.computed(() => connectionStatus.value === "disconnected");
|
||||
@@ -4631,7 +4638,7 @@ This will fail in production.`);
|
||||
if (logs.value.length > maxLogCount.value) {
|
||||
logs.value = logs.value.slice(-maxLogCount.value);
|
||||
}
|
||||
formatAppLog("log", "at stores/socket.js:52", `[${type.toUpperCase()}] ${connect2}`);
|
||||
formatAppLog("log", "at stores/socket.js:54", `[${type.toUpperCase()}] ${connect2}`);
|
||||
}
|
||||
function clearLogs() {
|
||||
logs.value = [];
|
||||
@@ -4669,7 +4676,7 @@ This will fail in production.`);
|
||||
addLog("warn", "已主动断开连接");
|
||||
}
|
||||
async function send(message) {
|
||||
formatAppLog("log", "at stores/socket.js:96", "检查到要发生消息为:", message);
|
||||
formatAppLog("log", "at stores/socket.js:98", "检查到要发生消息为:", message);
|
||||
if (!isConnected.value) {
|
||||
addLog("error", "发送失败: 连接未建立");
|
||||
throw new Error("连接未建立");
|
||||
@@ -4686,7 +4693,7 @@ This will fail in production.`);
|
||||
function handleOpen() {
|
||||
connectionStatus.value = "connected";
|
||||
addLog("success", "连接成功!发送auth");
|
||||
formatAppLog("log", "at stores/socket.js:115", "连接成功!发送auth");
|
||||
formatAppLog("log", "at stores/socket.js:117", "连接成功!发送auth");
|
||||
sendAuth();
|
||||
}
|
||||
function handleClose() {
|
||||
@@ -4720,11 +4727,16 @@ This will fail in production.`);
|
||||
message_id,
|
||||
data
|
||||
} = messageData || {};
|
||||
formatAppLog("log", "at stores/socket.js:160", "[handleMessage] type =", type, ", data =", JSON.stringify(data));
|
||||
formatAppLog("log", "at stores/socket.js:162", "[handleMessage] type =", type, ", data =", JSON.stringify(data));
|
||||
switch (type) {
|
||||
case "auth_ok":
|
||||
addLog("success", "连接成功");
|
||||
break;
|
||||
case "auth_fail":
|
||||
isThinking.value = false;
|
||||
authFailReason.value = (data == null ? void 0 : data.reason) || (messageData == null ? void 0 : messageData.reason) || "unknown";
|
||||
addLog("error", `认证失败: ${authFailReason.value}`);
|
||||
break;
|
||||
case "chat_ack":
|
||||
addLog("warn", "AI成功收到用户发送的消息");
|
||||
break;
|
||||
@@ -4745,12 +4757,18 @@ This will fail in production.`);
|
||||
}
|
||||
function handleBusinessMessage(data) {
|
||||
if (data === "exit") {
|
||||
formatAppLog("log", "at stores/socket.js:212", "ai结束思考");
|
||||
formatAppLog("log", "at stores/socket.js:220", "ai结束思考");
|
||||
isThinking.value = false;
|
||||
return;
|
||||
}
|
||||
if (!data || typeof data !== "object")
|
||||
return;
|
||||
if (data.cmd === "event_callback" && data.info === "中断成功") {
|
||||
formatAppLog("log", "at stores/socket.js:230", "后端确认中断成功");
|
||||
addLog("warn", `中断确认: ${data.info}`);
|
||||
isThinking.value = false;
|
||||
return;
|
||||
}
|
||||
const {
|
||||
role,
|
||||
chunk,
|
||||
@@ -4760,7 +4778,7 @@ This will fail in production.`);
|
||||
task_call_id
|
||||
} = data;
|
||||
if (!isThinking.value && (chunk || message_role === "assistant")) {
|
||||
formatAppLog("log", "at stores/socket.js:233", "ai开始思考");
|
||||
formatAppLog("log", "at stores/socket.js:247", "ai开始思考");
|
||||
messageString.value = "";
|
||||
isThinking.value = true;
|
||||
}
|
||||
@@ -4784,6 +4802,7 @@ This will fail in production.`);
|
||||
isThinking,
|
||||
logs,
|
||||
config,
|
||||
authFailReason,
|
||||
// 计算属性
|
||||
isConnected,
|
||||
isConnecting,
|
||||
@@ -5556,7 +5575,7 @@ This will fail in production.`);
|
||||
if (friendSocketStore.isConnected)
|
||||
return;
|
||||
if (!userToken.value || !UserId.value) {
|
||||
formatAppLog("warn", "at pages/Chat/Chat.vue:292", "Token或UserId未准备好");
|
||||
formatAppLog("warn", "at pages/Chat/Chat.vue:307", "Token或UserId未准备好");
|
||||
return;
|
||||
}
|
||||
friendSocketStore.connect({
|
||||
@@ -5627,7 +5646,7 @@ This will fail in production.`);
|
||||
const html = t(content);
|
||||
return html;
|
||||
} catch (e2) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:390", "解析失败", e2);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:405", "解析失败", e2);
|
||||
return content;
|
||||
}
|
||||
};
|
||||
@@ -5677,7 +5696,7 @@ This will fail in production.`);
|
||||
const textContent = content.replace(match[0], "").trim();
|
||||
return { textContent, files };
|
||||
} catch (e2) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:458", "解析文件信息失败:", e2);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:473", "解析文件信息失败:", e2);
|
||||
return { textContent: content, files: [] };
|
||||
}
|
||||
};
|
||||
@@ -5711,7 +5730,7 @@ This will fail in production.`);
|
||||
}
|
||||
takeUserConversations();
|
||||
} catch (error) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:500", "新建普通会话失败:", error);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:515", "新建普通会话失败:", error);
|
||||
uni.showToast({
|
||||
title: "创建会话失败,请重试",
|
||||
icon: "none"
|
||||
@@ -5749,7 +5768,7 @@ This will fail in production.`);
|
||||
};
|
||||
const previewFileArray = vue.ref([]);
|
||||
const uploadPhoto = () => {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:549", "点击了拍照上传");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:564", "点击了拍照上传");
|
||||
uni.chooseImage({
|
||||
count: 1,
|
||||
sourceType: ["camera", "album"],
|
||||
@@ -5772,33 +5791,21 @@ This will fail in production.`);
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:567", "选择图片失败", err);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:582", "选择图片失败", err);
|
||||
}
|
||||
});
|
||||
};
|
||||
const deleteImage = (index) => {
|
||||
uni.showModal({
|
||||
title: "提示",
|
||||
content: "确定要删除这张图片吗?",
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
previewFileArray.value.splice(index, 1);
|
||||
uni.showToast({
|
||||
title: "删除成功",
|
||||
icon: "success"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
previewFileArray.value.splice(index, 1);
|
||||
};
|
||||
const fileList = vue.ref([]);
|
||||
const uploadFile = () => {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:590", "点击了上传文件");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:593", "点击了上传文件");
|
||||
chooseFile({
|
||||
count: 5,
|
||||
type: "all",
|
||||
success: (res) => {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:595", "成功了");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:598", "成功了");
|
||||
fileList.value = res.tempFiles;
|
||||
previewFileArray.value.push(...res.tempFiles);
|
||||
uni.showToast({
|
||||
@@ -5807,7 +5814,7 @@ This will fail in production.`);
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:606", "选择失败:", err);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:609", "选择失败:", err);
|
||||
uni.showToast({
|
||||
title: "选择失败",
|
||||
icon: "error"
|
||||
@@ -5839,8 +5846,19 @@ This will fail in production.`);
|
||||
});
|
||||
};
|
||||
const isThinking = vue.ref(false);
|
||||
const isSelfSent = vue.ref(false);
|
||||
const isUploading = vue.ref(false);
|
||||
const uploadedFiles = vue.ref([]);
|
||||
const showMessageModal = vue.ref(false);
|
||||
const detailMessageContent = vue.ref("");
|
||||
const showMessageDetail = (message) => {
|
||||
detailMessageContent.value = message.content || "";
|
||||
showMessageModal.value = true;
|
||||
};
|
||||
const closeMessageDetail = () => {
|
||||
showMessageModal.value = false;
|
||||
detailMessageContent.value = "";
|
||||
};
|
||||
const sendMessage = async () => {
|
||||
const message = textMessage.value.trim();
|
||||
if (!message && previewFileArray.value.length === 0)
|
||||
@@ -5861,7 +5879,7 @@ This will fail in production.`);
|
||||
previewFileArray.value = [];
|
||||
} catch (err) {
|
||||
uni.hideLoading();
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:673", "文件上传失败:", err);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:689", "文件上传失败:", err);
|
||||
uni.showToast({
|
||||
title: "文件上传失败,请重试",
|
||||
icon: "error"
|
||||
@@ -5972,15 +5990,17 @@ This will fail in production.`);
|
||||
};
|
||||
socketStore.send(data);
|
||||
isThinking.value = true;
|
||||
isSelfSent.value = true;
|
||||
aiResponseTimer = setTimeout(() => {
|
||||
uni.showToast({
|
||||
title: "AI回复超时,请重试",
|
||||
icon: "none"
|
||||
});
|
||||
isThinking.value = false;
|
||||
isSelfSent.value = false;
|
||||
textMessage.value = "";
|
||||
uploadedFiles.value = [];
|
||||
}, 18e4);
|
||||
}, 6e5);
|
||||
} catch (error) {
|
||||
isThinking.value = false;
|
||||
uni.showToast({
|
||||
@@ -5989,18 +6009,55 @@ This will fail in production.`);
|
||||
});
|
||||
}
|
||||
};
|
||||
const stopConversation = async () => {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:853", "中断对话 - 当前会话ID:", currentSessionId.value);
|
||||
try {
|
||||
await socketStore.send({
|
||||
type: "stop",
|
||||
conversation_id: currentSessionId.value
|
||||
});
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:859", "中断指令已发送成功");
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:861", "中断指令发送失败:", err);
|
||||
}
|
||||
clearTimeout(aiResponseTimer);
|
||||
isThinking.value = false;
|
||||
isSelfSent.value = false;
|
||||
textMessage.value = "";
|
||||
uploadedFiles.value = [];
|
||||
uni.showToast({ title: "已中断", icon: "none", duration: 1500 });
|
||||
};
|
||||
vue.watch(() => socketStore.isThinking, (newVal, oldVal) => {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:835", "isThinking 变化:", oldVal, "→", newVal);
|
||||
if (oldVal && !newVal && socketStore.messageString) {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:875", "isThinking 变化:", oldVal, "→", newVal, "messageString:", socketStore.messageString);
|
||||
if (!oldVal && newVal) {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:878", "AI开始回复(跨设备同步),锁定输入框");
|
||||
isThinking.value = true;
|
||||
return;
|
||||
}
|
||||
if (oldVal && !newVal) {
|
||||
clearTimeout(aiResponseTimer);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:839", "ai返回的消息:", socketStore.messageString);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:840", "AI回复结束,刷新消息列表");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:885", "AI回复结束(正常/中断),解锁并刷新消息列表");
|
||||
takeConversationMessages();
|
||||
isThinking.value = false;
|
||||
isSelfSent.value = false;
|
||||
textMessage.value = "";
|
||||
uploadedFiles.value = [];
|
||||
}
|
||||
});
|
||||
vue.watch(() => socketStore.authFailReason, (reason) => {
|
||||
if (reason === "pc offline") {
|
||||
isThinking.value = false;
|
||||
socketStore.authFailReason = "";
|
||||
vue.nextTick(() => {
|
||||
uni.showModal({
|
||||
title: "提示",
|
||||
content: "PC端不在线,不可聊天",
|
||||
showCancel: false,
|
||||
confirmText: "知道了"
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
const textMessage = vue.ref("");
|
||||
const UserConversations = vue.ref([]);
|
||||
const currentSessionId = vue.ref("");
|
||||
@@ -6014,15 +6071,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:866", "用户信息已加载:", UserId.value, UserAvatar.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:928", "用户信息已加载:", UserId.value, UserAvatar.value);
|
||||
} catch (error) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:868", "获取用户信息失败:", error);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:930", "获取用户信息失败:", error);
|
||||
}
|
||||
};
|
||||
const takeUserConversations = async () => {
|
||||
try {
|
||||
userToken.value = getToken();
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:876", "token:", userToken.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:938", "token:", userToken.value);
|
||||
UserConversations.value = await getUserConversations(userToken.value) || [];
|
||||
const savedSessionId = getCurrentSessionId();
|
||||
if (savedSessionId && UserConversations.value.some((c) => c._id === savedSessionId)) {
|
||||
@@ -6032,7 +6089,7 @@ This will fail in production.`);
|
||||
} else {
|
||||
currentSessionId.value = "";
|
||||
}
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:888", "保存会话id:", currentSessionId.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:950", "保存会话id:", currentSessionId.value);
|
||||
uni.setStorageSync("currentSessionId", currentSessionId.value);
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
@@ -6044,17 +6101,17 @@ This will fail in production.`);
|
||||
const FriendInfoList = vue.ref([]);
|
||||
const takeFriendList = async () => {
|
||||
try {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:903", "开始获取好友列表");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:965", "开始获取好友列表");
|
||||
const friendList = await getChatFriend(UserId.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:906", "friendList:", friendList);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:968", "friendList:", friendList);
|
||||
if (friendList && friendList.length) {
|
||||
FriendInfoList.value = await takeUserAvatar(friendList);
|
||||
} else {
|
||||
FriendInfoList.value = [];
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:911", "好友列表为空");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:973", "好友列表为空");
|
||||
}
|
||||
} catch (error) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:914", "获取好友列表失败:", error);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:976", "获取好友列表失败:", error);
|
||||
FriendInfoList.value = [];
|
||||
} finally {
|
||||
UserConversations.value = FriendInfoList.value;
|
||||
@@ -6081,17 +6138,17 @@ This will fail in production.`);
|
||||
};
|
||||
});
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:944", "获取好友头像失败", err);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:1006", "获取好友头像失败", err);
|
||||
return friendList;
|
||||
}
|
||||
};
|
||||
const GroupList = vue.ref([]);
|
||||
const takeGroupList = async () => {
|
||||
try {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:954", "开始获取群聊列表");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1016", "开始获取群聊列表");
|
||||
GroupList.value = await getGroup(UserId.value);
|
||||
} catch (error) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:959", "获取群聊列表失败:", error);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:1021", "获取群聊列表失败:", error);
|
||||
GroupList.value = [];
|
||||
} finally {
|
||||
UserConversations.value = GroupList.value;
|
||||
@@ -6103,22 +6160,22 @@ This will fail in production.`);
|
||||
return [];
|
||||
try {
|
||||
const memberIds = memberList.map((item) => item.groupContactId);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:973", "请求头像的ID列表:", memberIds);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1035", "请求头像的ID列表:", memberIds);
|
||||
const memberAvatarList = await getUserAvatar(userToken.value, memberIds);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:975", "头像接口返回数据:", memberAvatarList);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1037", "头像接口返回数据:", memberAvatarList);
|
||||
const userMap = new Map(memberAvatarList.map((user) => [user.user_id, user]) || []);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:978", "userMap的keys:", Array.from(userMap.keys()));
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1040", "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:983", `查找 ${memberId} 的头像:`, userInfo);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1045", `查找 ${memberId} 的头像:`, userInfo);
|
||||
return {
|
||||
...member,
|
||||
avatar: (userInfo == null ? void 0 : userInfo.avatar) || null
|
||||
};
|
||||
});
|
||||
} catch (err) {
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:990", "获取群成员头像失败", err);
|
||||
formatAppLog("error", "at pages/Chat/Chat.vue:1052", "获取群成员头像失败", err);
|
||||
return memberList;
|
||||
}
|
||||
};
|
||||
@@ -6138,7 +6195,6 @@ This will fail in production.`);
|
||||
const takeConversationMessages = async () => {
|
||||
try {
|
||||
allmessages.value = await getConversationMessages(userToken.value, currentSessionId.value) || [];
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1021", "获取到的所有消息:", JSON.stringify(allmessages.value));
|
||||
scrollToBottom();
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
@@ -6150,7 +6206,7 @@ This will fail in production.`);
|
||||
const takeFriendMessages = async () => {
|
||||
try {
|
||||
allmessages.value = await getFriendMessages(currentSessionId.value) || [];
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1035", "好友消息:", JSON.stringify(allmessages.value));
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1097", "好友消息:", JSON.stringify(allmessages.value));
|
||||
scrollToBottom();
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
@@ -6162,12 +6218,12 @@ This will fail in production.`);
|
||||
const takeGroupMessages = async () => {
|
||||
try {
|
||||
allmessages.value = await getGroupMessages(currentSessionId.value) || [];
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1048", "群聊消息:", allmessages.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1110", "群聊消息:", allmessages.value);
|
||||
const memberList = await getGroupMemberList(currentSessionId.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1051", "获取到的群成员列表:", memberList);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1113", "获取到的群成员列表:", memberList);
|
||||
if (memberList && memberList.length) {
|
||||
groupMemberList.value = await takeGroupMemberAvatar(memberList);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1054", "群成员列表(带头像):", groupMemberList.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1116", "群成员列表(带头像):", groupMemberList.value);
|
||||
} else {
|
||||
groupMemberList.value = [];
|
||||
}
|
||||
@@ -6180,7 +6236,7 @@ This will fail in production.`);
|
||||
}
|
||||
};
|
||||
const loadMoreMessages = async () => {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1069", "加载更多信息");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1131", "加载更多信息");
|
||||
if (allmessages.value.length > pageInfoNumber * currentPage.value) {
|
||||
currentPage.value += 1;
|
||||
const newMessages = allmessages.value.slice(-pageInfoNumber * currentPage.value);
|
||||
@@ -6199,9 +6255,9 @@ This will fail in production.`);
|
||||
}
|
||||
};
|
||||
vue.watch(() => friendSocketStore.MessageReceived, (newId) => {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1097", "收到了好友消息");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1159", "收到了好友消息");
|
||||
if (newId) {
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1099", "ChatType:", ChatType.value);
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1161", "ChatType:", ChatType.value);
|
||||
switch (ChatType.value) {
|
||||
case 0:
|
||||
takeConversationMessages();
|
||||
@@ -6216,7 +6272,7 @@ This will fail in production.`);
|
||||
friendSocketStore.MessageReceived = false;
|
||||
break;
|
||||
default:
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1115", "default 分支");
|
||||
formatAppLog("log", "at pages/Chat/Chat.vue:1177", "default 分支");
|
||||
friendSocketStore.MessageReceived = false;
|
||||
break;
|
||||
}
|
||||
@@ -6230,6 +6286,8 @@ This will fail in production.`);
|
||||
switch (ChatType.value) {
|
||||
case 0:
|
||||
takeConversationMessages();
|
||||
socketStore.disconnect();
|
||||
handleConnect();
|
||||
break;
|
||||
case 1:
|
||||
takeFriendMessages();
|
||||
@@ -6260,6 +6318,9 @@ This will fail in production.`);
|
||||
if (currentSessionId.value) {
|
||||
takeConversationMessages();
|
||||
}
|
||||
if (userToken.value && currentSessionId.value && !socketStore.isConnected) {
|
||||
handleConnect();
|
||||
}
|
||||
} else if (chatType === 1) {
|
||||
await takeFriendList();
|
||||
takeFriendMessages();
|
||||
@@ -6270,12 +6331,17 @@ This will fail in production.`);
|
||||
await takeGroupMessages();
|
||||
}
|
||||
});
|
||||
const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, convertMarkdownTable, renderTable, pareseMarkdown, sanitizeContent, previewImage, openFile, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isUploading, uploadedFiles, sendMessage, sendFriendMessage, sendGroupMessage, get aiResponseTimer() {
|
||||
onUnload(() => {
|
||||
socketStore.disconnect();
|
||||
});
|
||||
const __returned__ = { friendSocketStore, handleFriendConnect, socketStore, ChatType, convertMarkdownTable, renderTable, pareseMarkdown, sanitizeContent, previewImage, openFile, formatFileSize, parseFileInfo, selectNormalChat, showNewChatModal, closeNewChatModal, isChatSidebar, handleChatSidebar, goWorkSpace, goCloudDatabase, logOut, previewFileArray, uploadPhoto, deleteImage, fileList, uploadFile, handleConnect, isThinking, isSelfSent, isUploading, uploadedFiles, showMessageModal, detailMessageContent, showMessageDetail, closeMessageDetail, sendMessage, sendFriendMessage, sendGroupMessage, get aiResponseTimer() {
|
||||
return aiResponseTimer;
|
||||
}, set aiResponseTimer(v) {
|
||||
aiResponseTimer = v;
|
||||
}, sendAIMessage, textMessage, UserConversations, currentSessionId, userToken, UserId, UserAvatar, UserData, takeUserInfo, takeUserConversations, FriendInfoList, takeFriendList, takeTalkUserAvatar, takeUserAvatar, GroupList, takeGroupList, groupMemberList, takeGroupMemberAvatar, getGroupMemberAvatarById, allmessages, pageInfoNumber, scrollToView, isLoadingMore, currentPage, currentMessages, takeConversationMessages, takeFriendMessages, takeGroupMessages, loadMoreMessages, onScroll, scrollToBottom, computed: vue.computed, getCurrentInstance: vue.getCurrentInstance, nextTick: vue.nextTick, onMounted: vue.onMounted, ref: vue.ref, watch: vue.watch, get onShow() {
|
||||
}, sendAIMessage, stopConversation, textMessage, UserConversations, currentSessionId, userToken, UserId, UserAvatar, UserData, takeUserInfo, takeUserConversations, FriendInfoList, takeFriendList, takeTalkUserAvatar, takeUserAvatar, GroupList, takeGroupList, groupMemberList, takeGroupMemberAvatar, getGroupMemberAvatarById, allmessages, pageInfoNumber, scrollToView, isLoadingMore, currentPage, currentMessages, takeConversationMessages, takeFriendMessages, takeGroupMessages, loadMoreMessages, onScroll, scrollToBottom, computed: vue.computed, getCurrentInstance: vue.getCurrentInstance, nextTick: vue.nextTick, onMounted: vue.onMounted, ref: vue.ref, watch: vue.watch, get onShow() {
|
||||
return onShow;
|
||||
}, get onUnload() {
|
||||
return onUnload;
|
||||
}, ChatSidebar, get getUserConversations() {
|
||||
return getUserConversations;
|
||||
}, get getConversationMessages() {
|
||||
@@ -6398,23 +6464,59 @@ This will fail in production.`);
|
||||
])
|
||||
])
|
||||
])) : vue.createCommentVNode("v-if", true),
|
||||
$setup.isThinking ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
$setup.isThinking && $setup.isSelfSent ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 1,
|
||||
class: "ncd-overlay",
|
||||
onClick: $setup.closeNewChatModal
|
||||
onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
|
||||
}, ["stop"]))
|
||||
}, [
|
||||
vue.createElementVNode("view", {
|
||||
class: "ncd-card ai-card",
|
||||
onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
|
||||
}, ["stop"]))
|
||||
}, [
|
||||
vue.createElementVNode("view", { class: "ncd-card ai-card" }, [
|
||||
vue.createElementVNode("view", { class: "thinking-content" }, [
|
||||
vue.createElementVNode("view", { class: "loading-dots" }, [
|
||||
vue.createElementVNode("view", { class: "dot" }),
|
||||
vue.createElementVNode("view", { class: "dot" }),
|
||||
vue.createElementVNode("view", { class: "dot" })
|
||||
]),
|
||||
vue.createElementVNode("text", { class: "thinking-text" }, "AI 正在思考中...")
|
||||
vue.createElementVNode("text", { class: "thinking-text" }, "AI 正在思考中..."),
|
||||
vue.createElementVNode("view", {
|
||||
class: "stop-thinking-btn",
|
||||
onClick: $setup.stopConversation
|
||||
}, [
|
||||
vue.createElementVNode("text", null, "⏹ 中断对话")
|
||||
])
|
||||
])
|
||||
])
|
||||
])) : vue.createCommentVNode("v-if", true),
|
||||
$setup.showMessageModal ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 2,
|
||||
class: "ncd-overlay",
|
||||
onClick: $setup.closeMessageDetail
|
||||
}, [
|
||||
vue.createElementVNode("view", {
|
||||
class: "ncd-card message-detail-card",
|
||||
onClick: _cache[2] || (_cache[2] = vue.withModifiers(() => {
|
||||
}, ["stop"]))
|
||||
}, [
|
||||
vue.createElementVNode("view", { class: "ncd-header" }, [
|
||||
vue.createElementVNode("text", { class: "ncd-title-zh" }, "消息详情"),
|
||||
vue.createVNode(_component_uni_icons, {
|
||||
type: "closeempty",
|
||||
color: "#ff0000",
|
||||
size: "24",
|
||||
onClick: $setup.closeMessageDetail
|
||||
})
|
||||
]),
|
||||
vue.createElementVNode("scroll-view", {
|
||||
class: "message-detail-content",
|
||||
"scroll-y": ""
|
||||
}, [
|
||||
vue.createElementVNode(
|
||||
"text",
|
||||
null,
|
||||
vue.toDisplayString($setup.detailMessageContent),
|
||||
1
|
||||
/* TEXT */
|
||||
)
|
||||
])
|
||||
])
|
||||
])) : vue.createCommentVNode("v-if", true),
|
||||
@@ -6433,11 +6535,11 @@ This will fail in production.`);
|
||||
vue.createVNode($setup["ChatSidebar"], {
|
||||
chatList: $setup.UserConversations,
|
||||
showNewChatModal: $setup.showNewChatModal,
|
||||
"onUpdate:showNewChatModal": _cache[2] || (_cache[2] = ($event) => $setup.showNewChatModal = $event),
|
||||
"onUpdate:showNewChatModal": _cache[3] || (_cache[3] = ($event) => $setup.showNewChatModal = $event),
|
||||
currentSessionId: $setup.currentSessionId,
|
||||
"onUpdate:currentSessionId": _cache[3] || (_cache[3] = ($event) => $setup.currentSessionId = $event),
|
||||
"onUpdate:currentSessionId": _cache[4] || (_cache[4] = ($event) => $setup.currentSessionId = $event),
|
||||
chatType: $setup.ChatType,
|
||||
"onUpdate:chatType": _cache[4] || (_cache[4] = ($event) => $setup.ChatType = $event),
|
||||
"onUpdate:chatType": _cache[5] || (_cache[5] = ($event) => $setup.ChatType = $event),
|
||||
onRefreshConversations: $setup.takeUserConversations
|
||||
}, null, 8, ["chatList", "showNewChatModal", "currentSessionId", "chatType"])
|
||||
],
|
||||
@@ -6518,66 +6620,61 @@ This will fail in production.`);
|
||||
2
|
||||
/* CLASS */
|
||||
)) : vue.createCommentVNode("v-if", true),
|
||||
message.content && String(message.content).trim() !== "" ? (vue.openBlock(), vue.createElementBlock(
|
||||
"view",
|
||||
{
|
||||
message.content && String(message.content).trim() !== "" ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 1,
|
||||
class: vue.normalizeClass(["chat-content", { "chat-content-user": message.role === "user" }]),
|
||||
onClick: ($event) => $setup.showMessageDetail(message)
|
||||
}, [
|
||||
$setup.parseFileInfo(message.content).textContent ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 0,
|
||||
innerHTML: $setup.pareseMarkdown($setup.parseFileInfo(message.content).textContent)
|
||||
}, null, 8, ["innerHTML"])) : vue.createCommentVNode("v-if", true),
|
||||
$setup.parseFileInfo(message.content).files.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 1,
|
||||
class: vue.normalizeClass(["chat-content", { "chat-content-user": message.role === "user" }])
|
||||
},
|
||||
[
|
||||
$setup.parseFileInfo(message.content).textContent ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 0,
|
||||
innerHTML: $setup.pareseMarkdown($setup.parseFileInfo(message.content).textContent)
|
||||
}, null, 8, ["innerHTML"])) : vue.createCommentVNode("v-if", true),
|
||||
$setup.parseFileInfo(message.content).files.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 1,
|
||||
class: "message-file-list"
|
||||
}, [
|
||||
(vue.openBlock(true), vue.createElementBlock(
|
||||
vue.Fragment,
|
||||
null,
|
||||
vue.renderList($setup.parseFileInfo(message.content).files, (file, idx) => {
|
||||
return vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: idx,
|
||||
class: "file-item"
|
||||
class: "message-file-list"
|
||||
}, [
|
||||
(vue.openBlock(true), vue.createElementBlock(
|
||||
vue.Fragment,
|
||||
null,
|
||||
vue.renderList($setup.parseFileInfo(message.content).files, (file, idx) => {
|
||||
return vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: idx,
|
||||
class: "file-item"
|
||||
}, [
|
||||
["jpg", "jpeg", "png", "gif", "webp", "bmp"].includes(file.extendName.toLowerCase()) ? (vue.openBlock(), vue.createElementBlock("image", {
|
||||
key: 0,
|
||||
src: file.url,
|
||||
mode: "widthFix",
|
||||
class: "message-image",
|
||||
onClick: ($event) => $setup.previewImage(file.url)
|
||||
}, null, 8, ["src", "onClick"])) : (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 1,
|
||||
class: "message-file",
|
||||
onClick: ($event) => $setup.openFile(file.url)
|
||||
}, [
|
||||
["jpg", "jpeg", "png", "gif", "webp", "bmp"].includes(file.extendName.toLowerCase()) ? (vue.openBlock(), vue.createElementBlock("image", {
|
||||
key: 0,
|
||||
src: file.url,
|
||||
mode: "widthFix",
|
||||
class: "message-image",
|
||||
onClick: ($event) => $setup.previewImage(file.url)
|
||||
}, null, 8, ["src", "onClick"])) : (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 1,
|
||||
class: "message-file",
|
||||
onClick: ($event) => $setup.openFile(file.url)
|
||||
}, [
|
||||
vue.createElementVNode("view", { class: "file-icon" }, "📄"),
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{ class: "file-name" },
|
||||
vue.toDisplayString(file.name),
|
||||
1
|
||||
/* TEXT */
|
||||
),
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{ class: "file-size" },
|
||||
vue.toDisplayString($setup.formatFileSize(file.fileSize)),
|
||||
1
|
||||
/* TEXT */
|
||||
)
|
||||
], 8, ["onClick"]))
|
||||
]);
|
||||
}),
|
||||
128
|
||||
/* KEYED_FRAGMENT */
|
||||
))
|
||||
])) : vue.createCommentVNode("v-if", true)
|
||||
],
|
||||
2
|
||||
/* CLASS */
|
||||
)) : vue.createCommentVNode("v-if", true)
|
||||
vue.createElementVNode("view", { class: "file-icon" }, "📄"),
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{ class: "file-name" },
|
||||
vue.toDisplayString(file.name),
|
||||
1
|
||||
/* TEXT */
|
||||
),
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{ class: "file-size" },
|
||||
vue.toDisplayString($setup.formatFileSize(file.fileSize)),
|
||||
1
|
||||
/* TEXT */
|
||||
)
|
||||
], 8, ["onClick"]))
|
||||
]);
|
||||
}),
|
||||
128
|
||||
/* KEYED_FRAGMENT */
|
||||
))
|
||||
])) : vue.createCommentVNode("v-if", true)
|
||||
], 10, ["onClick"])) : vue.createCommentVNode("v-if", true)
|
||||
], 10, ["id"])) : vue.createCommentVNode("v-if", true)
|
||||
],
|
||||
64
|
||||
@@ -6784,79 +6881,100 @@ This will fail in production.`);
|
||||
/* KEYED_FRAGMENT */
|
||||
)) : vue.createCommentVNode("v-if", true)
|
||||
], 40, ["scroll-into-view"]),
|
||||
vue.createElementVNode("view", { class: "chat-interactive-container" }, [
|
||||
vue.createElementVNode("view", { class: "chat-interactive-group" }, [
|
||||
vue.createElementVNode("view", {
|
||||
class: "chat-interactive-btn",
|
||||
onClick: $setup.uploadPhoto
|
||||
}, "拍照上传"),
|
||||
vue.createElementVNode("view", {
|
||||
class: "chat-interactive-btn",
|
||||
onClick: _cache[5] || (_cache[5] = ($event) => $setup.uploadFile())
|
||||
}, "上传文件")
|
||||
]),
|
||||
$setup.previewFileArray.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 0,
|
||||
class: "image-list"
|
||||
}, [
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{ class: "image-title" },
|
||||
"已选择: (" + vue.toDisplayString($setup.previewFileArray.length) + ")",
|
||||
1
|
||||
/* TEXT */
|
||||
),
|
||||
vue.createElementVNode("view", { class: "image-grid" }, [
|
||||
(vue.openBlock(true), vue.createElementBlock(
|
||||
vue.Fragment,
|
||||
null,
|
||||
vue.renderList($setup.previewFileArray, (item, index) => {
|
||||
return vue.openBlock(), vue.createElementBlock("view", {
|
||||
class: "image-item",
|
||||
key: index
|
||||
}, [
|
||||
vue.createElementVNode("view", { class: "image-info" }, [
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{
|
||||
class: vue.normalizeClass(["chat-interactive-container", { "interactive-disabled": $setup.isThinking }])
|
||||
},
|
||||
[
|
||||
vue.createElementVNode("view", { class: "chat-interactive-group" }, [
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{
|
||||
class: vue.normalizeClass(["chat-interactive-btn", { disabled: $setup.isThinking }]),
|
||||
onClick: _cache[6] || (_cache[6] = ($event) => !$setup.isThinking && $setup.uploadPhoto())
|
||||
},
|
||||
"拍照上传",
|
||||
2
|
||||
/* CLASS */
|
||||
),
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{
|
||||
class: vue.normalizeClass(["chat-interactive-btn", { disabled: $setup.isThinking }]),
|
||||
onClick: _cache[7] || (_cache[7] = ($event) => !$setup.isThinking && $setup.uploadFile())
|
||||
},
|
||||
"上传文件",
|
||||
2
|
||||
/* CLASS */
|
||||
)
|
||||
]),
|
||||
$setup.previewFileArray.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
|
||||
key: 0,
|
||||
class: "image-list"
|
||||
}, [
|
||||
vue.createElementVNode("view", { class: "image-tags" }, [
|
||||
(vue.openBlock(true), vue.createElementBlock(
|
||||
vue.Fragment,
|
||||
null,
|
||||
vue.renderList($setup.previewFileArray, (item, index) => {
|
||||
return vue.openBlock(), vue.createElementBlock("view", {
|
||||
class: "image-tag",
|
||||
key: index
|
||||
}, [
|
||||
vue.createElementVNode(
|
||||
"text",
|
||||
{ class: "image-name" },
|
||||
{ class: "tag-name" },
|
||||
vue.toDisplayString(item.name),
|
||||
1
|
||||
/* TEXT */
|
||||
),
|
||||
vue.createElementVNode("text", {
|
||||
class: "delete-btn",
|
||||
class: "tag-close",
|
||||
onClick: vue.withModifiers(($event) => $setup.deleteImage(index), ["stop"])
|
||||
}, "删除", 8, ["onClick"])
|
||||
])
|
||||
]);
|
||||
}),
|
||||
128
|
||||
/* KEYED_FRAGMENT */
|
||||
))
|
||||
])
|
||||
])) : vue.createCommentVNode("v-if", true),
|
||||
vue.createElementVNode("view", { class: "chat-input-container" }, [
|
||||
vue.withDirectives(vue.createElementVNode(
|
||||
"textarea",
|
||||
}, "×", 8, ["onClick"])
|
||||
]);
|
||||
}),
|
||||
128
|
||||
/* KEYED_FRAGMENT */
|
||||
))
|
||||
])
|
||||
])) : vue.createCommentVNode("v-if", true),
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{
|
||||
class: "message-input",
|
||||
placeholder: "输入消息...",
|
||||
onConfirm: $setup.sendMessage,
|
||||
"confirm-type": "send",
|
||||
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.textMessage = $event),
|
||||
"auto-height": ""
|
||||
class: vue.normalizeClass(["chat-input-container", { "input-disabled": $setup.isThinking }])
|
||||
},
|
||||
null,
|
||||
544
|
||||
/* NEED_HYDRATION, NEED_PATCH */
|
||||
), [
|
||||
[vue.vModelText, $setup.textMessage]
|
||||
]),
|
||||
vue.createElementVNode("view", { class: "input-btn-group" }, [
|
||||
vue.createElementVNode("view", { class: "iconfont icon-tingzhi icon-btn" })
|
||||
])
|
||||
])
|
||||
])
|
||||
[
|
||||
vue.withDirectives(vue.createElementVNode("textarea", {
|
||||
class: "message-input",
|
||||
placeholder: $setup.isThinking ? $setup.isSelfSent ? "AI 正在回复中..." : "电脑正在运行,请稍后" : "输入消息...",
|
||||
disabled: $setup.isThinking,
|
||||
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.textMessage = $event),
|
||||
"auto-height": ""
|
||||
}, null, 8, ["placeholder", "disabled"]), [
|
||||
[vue.vModelText, $setup.textMessage]
|
||||
]),
|
||||
vue.createElementVNode(
|
||||
"view",
|
||||
{
|
||||
class: vue.normalizeClass(["input-btn-group send-message-btn", { disabled: $setup.isThinking }]),
|
||||
onClick: _cache[9] || (_cache[9] = ($event) => !$setup.isThinking && $setup.sendMessage())
|
||||
},
|
||||
[
|
||||
vue.createElementVNode("view", { class: "iconfont icon-fasong" })
|
||||
],
|
||||
2
|
||||
/* CLASS */
|
||||
)
|
||||
],
|
||||
2
|
||||
/* CLASS */
|
||||
)
|
||||
],
|
||||
2
|
||||
/* CLASS */
|
||||
)
|
||||
])
|
||||
])
|
||||
])
|
||||
@@ -7281,14 +7399,14 @@ This will fail in production.`);
|
||||
".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",
|
||||
".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",
|
||||
@@ -7300,11 +7418,11 @@ This will fail in production.`);
|
||||
".vue": "icon-daimawenjia",
|
||||
".html": "icon-HTML",
|
||||
".css": "icon-CSS",
|
||||
".py": "icon-daimawenjian",
|
||||
".java": "icon-daimawenjian",
|
||||
".py": "icon-daima",
|
||||
".java": "icon-daima",
|
||||
".json": "icon-JSON"
|
||||
};
|
||||
return iconMap[ext == null ? void 0 : ext.toLowerCase()] || "icon-qitawenjian";
|
||||
return iconMap[ext == null ? void 0 : ext.toLowerCase()] || "icon-qitalingyu";
|
||||
};
|
||||
const allFoldersData = vue.ref({});
|
||||
const folderStack = vue.ref([]);
|
||||
|
||||
125
unpackage/dist/dev/app-plus/app.css
vendored
125
unpackage/dist/dev/app-plus/app.css
vendored
@@ -28,9 +28,9 @@
|
||||
/*每个页面公共css */
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 4890805 */
|
||||
src: url('static/iconfont/iconfont.woff2?t=1782200893170') format('woff2'),
|
||||
url('static/iconfont/iconfont.woff?t=1782200893170') format('woff'),
|
||||
url('static/iconfont/iconfont.ttf?t=1782200893170') format('truetype');
|
||||
src: url('static/iconfont/iconfont.woff2?t=1783330740989') format('woff2'),
|
||||
url('static/iconfont/iconfont.woff?t=1783330740989') format('woff'),
|
||||
url('static/iconfont/iconfont.ttf?t=1783330740989') format('truetype');
|
||||
}
|
||||
.iconfont {
|
||||
font-family: "iconfont" !important;
|
||||
@@ -39,6 +39,33 @@
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.icon-daima:before {
|
||||
content: "\e695";
|
||||
}
|
||||
.icon-word:before {
|
||||
content: "\e64c";
|
||||
}
|
||||
.icon-qitalingyu:before {
|
||||
content: "\e62f";
|
||||
}
|
||||
.icon-wenjianjia1:before {
|
||||
content: "\e63a";
|
||||
}
|
||||
.icon-execl:before {
|
||||
content: "\e64d";
|
||||
}
|
||||
.icon-TXT1:before {
|
||||
content: "\e64e";
|
||||
}
|
||||
.icon-PPT1:before {
|
||||
content: "\e64f";
|
||||
}
|
||||
.icon-ZIP:before {
|
||||
content: "\e650";
|
||||
}
|
||||
.icon-PDF1:before {
|
||||
content: "\e651";
|
||||
}
|
||||
.icon-cloud:before {
|
||||
content: "\e988";
|
||||
}
|
||||
@@ -220,49 +247,68 @@
|
||||
.status-bar {
|
||||
height: var(--status-bar-height);
|
||||
width: 100%;
|
||||
background: linear-gradient(180deg, #fafbff 0%, #f5f6fa 100%);
|
||||
}
|
||||
.page-container {
|
||||
width: 100%;
|
||||
height: calc(100vh - var(--status-bar-height));
|
||||
background: linear-gradient(180deg, #f0f2ff 0%, #f5f6fa 40%, #fafbfc 100%);
|
||||
}
|
||||
.solid-line {
|
||||
width: 100%;
|
||||
border-bottom: 0.03125rem solid #999;
|
||||
height: 0.03125rem;
|
||||
background: linear-gradient(90deg, transparent, #d4d4f0, transparent);
|
||||
}
|
||||
.icon-btn {
|
||||
padding: 0.3125rem;
|
||||
border-radius: 0.625rem;
|
||||
padding: 0.375rem;
|
||||
border-radius: 0.5rem;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.icon-btn:active {
|
||||
background: rgba(170, 170, 255, 0.12);
|
||||
transform: scale(0.95);
|
||||
}
|
||||
.text-btn {
|
||||
padding: 0.3125rem;
|
||||
padding: 0.375rem 0.625rem;
|
||||
border-radius: 0.625rem;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: all 0.2s ease;
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.text-btn:active {
|
||||
opacity: 0.8;
|
||||
transform: scale(0.97);
|
||||
}
|
||||
.switch-box {
|
||||
width: 42px;
|
||||
height: 20px;
|
||||
background-color: #999;
|
||||
border-radius: 10px;
|
||||
width: 48px;
|
||||
height: 26px;
|
||||
background-color: #d4d4d8;
|
||||
border-radius: 13px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1px;
|
||||
padding: 2px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.switch-box.active {
|
||||
justify-content: flex-end;
|
||||
background-color: #00aaff;
|
||||
background: linear-gradient(135deg, #aaaaff, #3b86ff);
|
||||
box-shadow: 0 0 0.375rem rgba(170, 170, 255, 0.4);
|
||||
}
|
||||
.switch-track {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
background-color: #ffffff;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.popup-overlay {
|
||||
position: fixed;
|
||||
@@ -273,31 +319,68 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: rgba(193, 193, 193, 0.4);
|
||||
background-color: rgba(30, 30, 50, 0.35);
|
||||
backdrop-filter: blur(6px);
|
||||
-webkit-backdrop-filter: blur(6px);
|
||||
z-index: 1000;
|
||||
animation: fadeIn 0.25s ease;
|
||||
}
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes slideUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(1.25rem) scale(0.96);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
}
|
||||
.popup-card {
|
||||
width: 90%;
|
||||
height: auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 1.5625rem;
|
||||
padding: 1.5625rem;
|
||||
border-radius: 1.25rem;
|
||||
padding: 1.5rem 1.25rem;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
box-shadow: 0 0.625rem 1.875rem rgba(0, 0, 0, 0.08);
|
||||
animation: slideUp 0.3s ease;
|
||||
}
|
||||
.close-popup-card {
|
||||
position: absolute;
|
||||
top: 0.3125rem;
|
||||
right: 0.3125rem;
|
||||
color: #ff0000;
|
||||
top: 0.5rem;
|
||||
right: 0.5rem;
|
||||
color: #ff4d4f;
|
||||
padding: 0.3125rem;
|
||||
box-sizing: border-box;
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 50%;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.close-popup-card:active {
|
||||
background: rgba(255, 77, 79, 0.1);
|
||||
}
|
||||
.popup-title {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 1.0625rem;
|
||||
font-weight: 600;
|
||||
color: #1a1a2e;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
2
unpackage/dist/dev/app-plus/manifest.json
vendored
2
unpackage/dist/dev/app-plus/manifest.json
vendored
@@ -8,7 +8,7 @@
|
||||
"name": "test1",
|
||||
"version": {
|
||||
"name": "1.1.1",
|
||||
"code": "1"
|
||||
"code": 2
|
||||
},
|
||||
"description": "",
|
||||
"developer": {
|
||||
|
||||
637
unpackage/dist/dev/app-plus/pages/Chat/Chat.css
vendored
637
unpackage/dist/dev/app-plus/pages/Chat/Chat.css
vendored
File diff suppressed because it is too large
Load Diff
@@ -536,12 +536,15 @@
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background-color: #f5f6fa;
|
||||
background: linear-gradient(180deg, #f0f2ff 0%, #f5f4f9 40%, #faf9fe 100%);
|
||||
}
|
||||
.cloud-db-header[data-v-51006ffb] {
|
||||
flex-shrink: 0;
|
||||
background-color: #ffffff;
|
||||
background-color: rgba(255, 255, 255, 0.85);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
padding-bottom: 0;
|
||||
border-bottom: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
}
|
||||
.custom-navbar[data-v-51006ffb] {
|
||||
display: flex;
|
||||
@@ -574,18 +577,18 @@
|
||||
}
|
||||
.navbar-before-title[data-v-51006ffb] {
|
||||
font-size: 0.8125rem;
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
margin-left: 0.25rem;
|
||||
}
|
||||
.navbar-right-text[data-v-51006ffb] {
|
||||
font-size: 0.875rem;
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 菜单 */
|
||||
.menu-open[data-v-51006ffb] {
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
}
|
||||
.menu-card[data-v-51006ffb] {
|
||||
position: absolute;
|
||||
@@ -633,7 +636,7 @@
|
||||
transition: color 0.3s;
|
||||
}
|
||||
.category-tab.active[data-v-51006ffb] {
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
font-weight: 600;
|
||||
}
|
||||
.category-tab.active[data-v-51006ffb]::after {
|
||||
@@ -644,7 +647,7 @@
|
||||
transform: translateX(-50%);
|
||||
width: 1.5rem;
|
||||
height: 0.1875rem;
|
||||
background: #3b86ff;
|
||||
background: linear-gradient(90deg, #6c63ff, #aaaaff);
|
||||
border-radius: 0.09375rem;
|
||||
}
|
||||
|
||||
@@ -680,7 +683,7 @@
|
||||
}
|
||||
.section-title .iconfont[data-v-51006ffb] {
|
||||
font-size: 1.125rem;
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
}
|
||||
.section-actions[data-v-51006ffb] {
|
||||
display: flex;
|
||||
@@ -692,11 +695,15 @@
|
||||
align-items: center;
|
||||
gap: 0.1875rem;
|
||||
padding: 0.3125rem 0.625rem;
|
||||
background: rgba(59, 134, 255, 0.08);
|
||||
color: #3b86ff;
|
||||
border-radius: 0.9375rem;
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
color: #6c63ff;
|
||||
border-radius: 0.625rem;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 500;
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
.action-btn[data-v-51006ffb]:active {
|
||||
background: rgba(108, 99, 255, 0.12);
|
||||
}
|
||||
.section-divider[data-v-51006ffb] {
|
||||
height: 0.0625rem;
|
||||
@@ -738,8 +745,8 @@
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.file-item[data-v-51006ffb]:active {
|
||||
border-color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.04);
|
||||
border-color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.04);
|
||||
}
|
||||
.file-icon[data-v-51006ffb] {
|
||||
width: 2.5rem;
|
||||
@@ -758,11 +765,11 @@
|
||||
color: #ffa500;
|
||||
}
|
||||
.file-icon.is-file[data-v-51006ffb] {
|
||||
background: rgba(59, 134, 255, 0.1);
|
||||
background: rgba(108, 99, 255, 0.1);
|
||||
}
|
||||
.file-icon.is-file .iconfont[data-v-51006ffb] {
|
||||
font-size: 1.375rem;
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
}
|
||||
.file-name[data-v-51006ffb] {
|
||||
font-size: 0.75rem;
|
||||
@@ -807,8 +814,8 @@
|
||||
transition: all 0.2s;
|
||||
}
|
||||
.table-item[data-v-51006ffb]:active {
|
||||
border-color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.03);
|
||||
border-color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.03);
|
||||
}
|
||||
.table-icon[data-v-51006ffb] {
|
||||
width: 2rem;
|
||||
@@ -816,7 +823,7 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: rgba(59, 134, 255, 0.08);
|
||||
background: rgba(108, 99, 255, 0.08);
|
||||
border-radius: 0.4375rem;
|
||||
margin-right: 0.625rem;
|
||||
flex-shrink: 0;
|
||||
@@ -875,7 +882,7 @@
|
||||
}
|
||||
.team-chip.active[data-v-51006ffb] {
|
||||
color: #fff;
|
||||
background: #3b86ff;
|
||||
background: #6c63ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
.team-info[data-v-51006ffb] {
|
||||
@@ -887,8 +894,8 @@
|
||||
}
|
||||
.team-type-tag[data-v-51006ffb] {
|
||||
font-size: 0.6875rem;
|
||||
color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.1);
|
||||
color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.1);
|
||||
padding: 0.1875rem 0.5rem;
|
||||
border-radius: 0.25rem;
|
||||
font-weight: 500;
|
||||
@@ -968,7 +975,7 @@
|
||||
background: #f9fafb;
|
||||
}
|
||||
.create-folder-name uni-input[data-v-51006ffb]:focus {
|
||||
border-color: #3b86ff;
|
||||
border-color: #6c63ff;
|
||||
background: #fff;
|
||||
}
|
||||
.nf-path-label[data-v-51006ffb] {
|
||||
@@ -978,8 +985,8 @@
|
||||
}
|
||||
.nf-path-display[data-v-51006ffb] {
|
||||
font-size: 0.75rem;
|
||||
color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.06);
|
||||
color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
padding: 0.375rem 0.5rem;
|
||||
border-radius: 0.3125rem;
|
||||
margin-bottom: 0.625rem;
|
||||
@@ -1002,7 +1009,7 @@
|
||||
}
|
||||
.opt-confirm[data-v-51006ffb] {
|
||||
color: #fff;
|
||||
background: #3b86ff;
|
||||
background: #6c63ff;
|
||||
}
|
||||
|
||||
/* 团队管理弹窗 */
|
||||
@@ -1071,8 +1078,8 @@
|
||||
background: rgba(230, 162, 60, 0.1);
|
||||
}
|
||||
.member-role.admin[data-v-51006ffb] {
|
||||
color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.1);
|
||||
color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.1);
|
||||
}
|
||||
.member-role.member[data-v-51006ffb] {
|
||||
color: #67c23a;
|
||||
@@ -1088,8 +1095,8 @@
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
.set-admin[data-v-51006ffb] {
|
||||
color: #3b86ff;
|
||||
border: 0.03125rem solid #3b86ff;
|
||||
color: #6c63ff;
|
||||
border: 0.03125rem solid #6c63ff;
|
||||
}
|
||||
.demote-admin[data-v-51006ffb] {
|
||||
color: #e6a23c;
|
||||
@@ -1119,7 +1126,7 @@
|
||||
background: #f9fafb;
|
||||
}
|
||||
.invite-btn[data-v-51006ffb] {
|
||||
background: #3b86ff;
|
||||
background: #6c63ff;
|
||||
color: #fff;
|
||||
font-size: 0.75rem;
|
||||
padding: 0.4375rem 1rem;
|
||||
@@ -1142,7 +1149,7 @@
|
||||
border-bottom: none;
|
||||
}
|
||||
.search-result-item[data-v-51006ffb]:active {
|
||||
background: rgba(59, 134, 255, 0.05);
|
||||
background: rgba(108, 99, 255, 0.05);
|
||||
}
|
||||
.result-avatar[data-v-51006ffb] {
|
||||
width: 2rem;
|
||||
@@ -1155,7 +1162,7 @@
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #3b86ff, #6db3ff);
|
||||
background: linear-gradient(135deg, #6c63ff, #6db3ff);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -1184,9 +1191,9 @@
|
||||
.result-add-btn[data-v-51006ffb] {
|
||||
flex-shrink: 0;
|
||||
font-size: 0.75rem;
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
padding: 0.3125rem 0.75rem;
|
||||
border: 0.03125rem solid #3b86ff;
|
||||
border: 0.03125rem solid #6c63ff;
|
||||
border-radius: 0.625rem;
|
||||
}
|
||||
.search-empty[data-v-51006ffb] {
|
||||
@@ -1240,13 +1247,13 @@
|
||||
text-align: center;
|
||||
padding: 0.5625rem;
|
||||
font-size: 0.8125rem;
|
||||
color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.06);
|
||||
color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
border-radius: 0.4375rem;
|
||||
border: 0.03125rem solid rgba(59, 134, 255, 0.2);
|
||||
border: 0.03125rem solid rgba(108, 99, 255, 0.2);
|
||||
}
|
||||
.edit-team-btn[data-v-51006ffb]:active {
|
||||
background: rgba(59, 134, 255, 0.12);
|
||||
background: rgba(108, 99, 255, 0.12);
|
||||
}
|
||||
.edit-team-form[data-v-51006ffb] {
|
||||
margin-bottom: 0.3125rem;
|
||||
@@ -1290,7 +1297,7 @@
|
||||
width: 1.75rem;
|
||||
height: 1.75rem;
|
||||
border: 0.125rem solid #e8e8e8;
|
||||
border-top-color: #3b86ff;
|
||||
border-top-color: #6c63ff;
|
||||
border-radius: 50%;
|
||||
animation: spin-51006ffb 0.8s linear infinite;
|
||||
}
|
||||
@@ -1315,9 +1322,9 @@ to {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.db-tag.tag-personal[data-v-51006ffb] {
|
||||
color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.08);
|
||||
border: 0.03125rem solid rgba(59, 134, 255, 0.2);
|
||||
color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.08);
|
||||
border: 0.03125rem solid rgba(108, 99, 255, 0.2);
|
||||
}
|
||||
.db-tag.tag-team[data-v-51006ffb] {
|
||||
color: #67c23a;
|
||||
@@ -1341,12 +1348,12 @@ to {
|
||||
margin-bottom: 0.625rem;
|
||||
}
|
||||
.upload-file-area[data-v-51006ffb]:active {
|
||||
border-color: #3b86ff;
|
||||
background: rgba(59, 134, 255, 0.03);
|
||||
border-color: #6c63ff;
|
||||
background: rgba(108, 99, 255, 0.03);
|
||||
}
|
||||
.selected-file[data-v-51006ffb] {
|
||||
font-size: 0.8125rem;
|
||||
color: #3b86ff;
|
||||
color: #6c63ff;
|
||||
font-weight: 500;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
@@ -533,13 +533,13 @@
|
||||
/* ========== 通用 ========== */
|
||||
.status-bar[data-v-96fa4671] {
|
||||
height: var(--status-bar-height);
|
||||
background-color: #ffffff;
|
||||
background: linear-gradient(180deg, #fafbff 0%, #f5f6fa 100%);
|
||||
}
|
||||
.page-container[data-v-96fa4671] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
background-color: #f5f6fa;
|
||||
background: linear-gradient(180deg, #f0f2ff 0%, #f5f4f9 40%, #faf9fe 100%);
|
||||
}
|
||||
/* ========== 导航栏 ========== */
|
||||
.cloud-db-header[data-v-96fa4671] {
|
||||
|
||||
@@ -533,10 +533,11 @@
|
||||
.tabbar-page[data-v-976117c3] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: linear-gradient(180deg, #f5f4f9 0%, #faf9fe 100%);
|
||||
}
|
||||
.content-swiper[data-v-976117c3] {
|
||||
width: 100%;
|
||||
height: calc(100% - 3.125rem);
|
||||
height: calc(100% - 3.75rem);
|
||||
}
|
||||
.tabpage-content[data-v-976117c3] {
|
||||
display: flex;
|
||||
@@ -556,13 +557,22 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
padding: 0.625rem 0.75rem;
|
||||
box-sizing: border-box;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border-bottom: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
}
|
||||
.tabpage-header .iconfont[data-v-976117c3] {
|
||||
font-size: 1.5625rem;
|
||||
margin-right: 0.3125rem;
|
||||
font-size: 1.4375rem;
|
||||
margin-right: 0.375rem;
|
||||
color: #6c63ff;
|
||||
}
|
||||
.tabpage-title[data-v-976117c3] {
|
||||
font-size: 1.25rem;
|
||||
font-size: 1.125rem;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
}
|
||||
.tabpage-body[data-v-976117c3] {
|
||||
width: 100%;
|
||||
@@ -571,7 +581,7 @@
|
||||
min-height: 0;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
padding: 0.625rem;
|
||||
padding: 0.75rem;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@@ -595,10 +605,17 @@
|
||||
.group-name .input[data-v-976117c3] {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
padding: 0.625rem;
|
||||
padding: 0.6875rem 0.875rem;
|
||||
box-sizing: border-box;
|
||||
border: 0.03125rem solid #007aff;
|
||||
border-radius: 0.9375rem;
|
||||
border: 0.0625rem solid #d4d4f0;
|
||||
border-radius: 0.75rem;
|
||||
font-size: 0.875rem;
|
||||
background: #fff;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.group-name .input[data-v-976117c3]:focus {
|
||||
border-color: #6c63ff;
|
||||
box-shadow: 0 0 0 0.125rem rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
.group-member-wrapper[data-v-976117c3] {
|
||||
width: 100%;
|
||||
@@ -606,49 +623,57 @@
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0.625rem;
|
||||
padding: 0.75rem;
|
||||
box-sizing: border-box;
|
||||
background-color: rgba(16, 185, 129, .05);
|
||||
border: 0.03125rem solid rgba(16, 185, 129, .2);
|
||||
border-radius: 0.9375rem;
|
||||
margin: 0.3125rem 0;
|
||||
background: rgba(16, 185, 129, .04);
|
||||
border: 0.0625rem solid rgba(16, 185, 129, .15);
|
||||
border-radius: 0.75rem;
|
||||
margin: 0.375rem 0;
|
||||
}
|
||||
.group-member-wrapper .member-title[data-v-976117c3] {
|
||||
color: #059669;
|
||||
font-weight: bold;
|
||||
font-weight: 600;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
.group-ismember-list[data-v-976117c3] {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 0.3125rem;
|
||||
margin-top: 0.375rem;
|
||||
box-sizing: border-box;
|
||||
max-height: 6.25rem;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.group-ismember-info[data-v-976117c3] {
|
||||
padding: 0.3125rem 0.5rem;
|
||||
padding: 0.3125rem 0.625rem;
|
||||
box-sizing: border-box;
|
||||
border: 0.03125rem solid rgba(16, 185, 129, 0.8);
|
||||
background-color: #fff;
|
||||
border-radius: 0.9375rem;
|
||||
margin: 0.15625rem 0.3125rem;
|
||||
border: 0.0625rem solid rgba(16, 185, 129, 0.5);
|
||||
background: #fff;
|
||||
border-radius: 0.75rem;
|
||||
margin: 0.1875rem 0.25rem;
|
||||
}
|
||||
.group-ismember-name[data-v-976117c3] {
|
||||
font-size: 0.6875rem;
|
||||
color: #059669;
|
||||
font-weight: 500;
|
||||
}
|
||||
.create-group-btn[data-v-976117c3] {
|
||||
width: 100%;
|
||||
background: #007aff;
|
||||
border-radius: 0.9375rem;
|
||||
padding: 0.625rem;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
border-radius: 0.75rem;
|
||||
padding: 0.75rem;
|
||||
box-sizing: border-box;
|
||||
font-weight: bold;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-bottom: 0.3125rem;
|
||||
font-size: 0.9375rem;
|
||||
box-shadow: 0 0.125rem 0.5rem rgba(108, 99, 255, 0.25);
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.create-group-btn[data-v-976117c3]:active {
|
||||
transform: scale(0.97);
|
||||
}
|
||||
.group-member[data-v-976117c3] {
|
||||
display: flex;
|
||||
@@ -664,31 +689,39 @@
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
width: 100%;
|
||||
}
|
||||
.friend-card[data-v-976117c3] {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
padding: 0.625rem;
|
||||
margin: 0.3125rem 0;
|
||||
padding: 0.75rem;
|
||||
margin: 0.25rem 0;
|
||||
box-sizing: border-box;
|
||||
border: 0.03125rem solid #aaaaff;
|
||||
border-radius: 0.9375rem;
|
||||
border: 0.0625rem solid rgba(170, 170, 255, 0.25);
|
||||
border-radius: 0.75rem;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.friend-card[data-v-976117c3]:active {
|
||||
background: rgba(108, 99, 255, 0.04);
|
||||
border-color: #6c63ff;
|
||||
transform: scale(0.98);
|
||||
}
|
||||
.friend-card-left[data-v-976117c3] {
|
||||
flex-shrink: 0;
|
||||
margin-right: 0.3125rem;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
.friend-avatar[data-v-976117c3] {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 50%;
|
||||
width: 3.125rem;
|
||||
height: 3.125rem;
|
||||
border-radius: 50%;
|
||||
width: 2.8125rem;
|
||||
height: 2.8125rem;
|
||||
overflow: hidden;
|
||||
border: 0.09375rem solid rgba(170, 170, 255, 0.2);
|
||||
}
|
||||
.friend-card-middle[data-v-976117c3] {
|
||||
flex: 1;
|
||||
@@ -699,8 +732,9 @@
|
||||
align-items: flex-start;
|
||||
}
|
||||
.friend-name[data-v-976117c3] {
|
||||
font-weight: 500;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.9375rem;
|
||||
color: #1a1a2e;
|
||||
}
|
||||
.friend-card-right[data-v-976117c3] {
|
||||
width: auto;
|
||||
@@ -710,13 +744,18 @@
|
||||
align-items: center;
|
||||
}
|
||||
.friend-checkbox[data-v-976117c3] {
|
||||
width: 0.9375rem;
|
||||
height: 0.9375rem;
|
||||
width: 1.125rem;
|
||||
height: 1.125rem;
|
||||
border-radius: 0.3125rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border: 0.03125rem solid #3b86ff;
|
||||
border: 0.0625rem solid rgba(108, 99, 255, 0.5);
|
||||
background: #fff;
|
||||
}
|
||||
.friend-checkbox.checked[data-v-976117c3] {
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
border-color: #6c63ff;
|
||||
}
|
||||
|
||||
/* 添加好友 */
|
||||
@@ -727,26 +766,27 @@
|
||||
}
|
||||
.search-warpper .search-file-input[data-v-976117c3] {
|
||||
flex: 1;
|
||||
background-color: #f9fafb;
|
||||
border: 0.0625rem solid rgba(139, 195, 232, .2);
|
||||
padding: 0.625rem;
|
||||
margin-right: 0.625rem;
|
||||
background: #ffffff;
|
||||
border: 0.0625rem solid #e8e7f5;
|
||||
padding: 0.6875rem 0.75rem;
|
||||
margin-right: 0.5rem;
|
||||
height: auto;
|
||||
box-sizing: border-box;
|
||||
border-radius: 0.9375rem;
|
||||
border-radius: 0.75rem;
|
||||
font-size: 0.875rem;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.search-file-input.active[data-v-976117c3] {
|
||||
background-color: #ffffff;
|
||||
box-shadow: 0 0 0.46875rem #aaaaff;
|
||||
border-color: #007aff;
|
||||
border-color: #6c63ff;
|
||||
box-shadow: 0 0 0 0.125rem rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
.search-warpper .iconfont[data-v-976117c3] {
|
||||
flex-shrink: 0;
|
||||
font-size: 1.1875rem;
|
||||
font-size: 1.125rem;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
background-color: #007aff;
|
||||
padding: 0.5625rem;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
padding: 0.625rem;
|
||||
box-sizing: border-box;
|
||||
border-radius: 0.625rem;
|
||||
}
|
||||
@@ -754,10 +794,13 @@
|
||||
width: 100%;
|
||||
}
|
||||
.add-btn[data-v-976117c3] {
|
||||
background: #3b86ff;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
border-radius: 0.625rem;
|
||||
padding: 0.375rem 0.875rem;
|
||||
box-shadow: 0 0.0625rem 0.25rem rgba(108, 99, 255, 0.25);
|
||||
}
|
||||
|
||||
/* 添加好友卡片 */
|
||||
@@ -773,19 +816,24 @@
|
||||
.input-nickname[data-v-976117c3] {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
padding: 0.625rem;
|
||||
padding: 0.6875rem 0.75rem;
|
||||
box-sizing: border-box;
|
||||
border: 0.03125rem solid #007aff;
|
||||
border-radius: 0.9375rem;
|
||||
border: 0.0625rem solid #d4d4f0;
|
||||
border-radius: 0.75rem;
|
||||
margin: 0.625rem 0;
|
||||
box-sizing: border-box;
|
||||
font-size: 0.875rem;
|
||||
background: #fff;
|
||||
}
|
||||
.input-nickname[data-v-976117c3]:focus {
|
||||
border-color: #6c63ff;
|
||||
}
|
||||
.confirm-btn[data-v-976117c3] {
|
||||
background: #3b86ff;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
padding: 10px;
|
||||
font-weight: 600;
|
||||
padding: 0.4375rem 1.25rem;
|
||||
border-radius: 0.75rem;
|
||||
}
|
||||
|
||||
/* 视频会议 */
|
||||
@@ -802,18 +850,27 @@
|
||||
.input-meeting[data-v-976117c3] {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
padding: 0.625rem;
|
||||
padding: 0.6875rem 0.75rem;
|
||||
box-sizing: border-box;
|
||||
border: 0.03125rem solid #007aff;
|
||||
border-radius: 0.9375rem;
|
||||
border: 0.0625rem solid #d4d4f0;
|
||||
border-radius: 0.75rem;
|
||||
margin: 0.3125rem 0;
|
||||
box-sizing: border-box;
|
||||
font-size: 0.875rem;
|
||||
background: #fff;
|
||||
}
|
||||
.input-meeting[data-v-976117c3]:focus {
|
||||
border-color: #6c63ff;
|
||||
}
|
||||
.meeting-btn[data-v-976117c3] {
|
||||
width: 100%;
|
||||
background: #007aff;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
margin: 0.3125rem 0;
|
||||
color: #fff;
|
||||
border-radius: 0.75rem;
|
||||
padding: 0.75rem;
|
||||
font-size: 0.9375rem;
|
||||
font-weight: 600;
|
||||
box-shadow: 0 0.125rem 0.5rem rgba(108, 99, 255, 0.25);
|
||||
}
|
||||
.meeting-field[data-v-976117c3] {
|
||||
width: 100%;
|
||||
@@ -833,6 +890,7 @@
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0.5rem 0;
|
||||
}
|
||||
|
||||
/* 好友申请 */
|
||||
@@ -844,21 +902,26 @@
|
||||
.agree-btn[data-v-976117c3] {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
border: 1px solid #3b86ff;
|
||||
color: #3b86ff;
|
||||
border: 0.0625rem solid #6c63ff;
|
||||
color: #6c63ff;
|
||||
box-sizing: border-box;
|
||||
border-radius: 0.625rem;
|
||||
padding: 0.3125rem 0.75rem;
|
||||
}
|
||||
.agree-btn[data-v-976117c3]:active {
|
||||
background: rgba(108, 99, 255, 0.08);
|
||||
}
|
||||
|
||||
/* 好友申请状态 */
|
||||
.friend-status[data-v-976117c3] {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
padding: 0.25rem 0.625rem;
|
||||
border-radius: 0.9375rem;
|
||||
padding: 0.25rem 0.75rem;
|
||||
border-radius: 0.625rem;
|
||||
}
|
||||
.friend-status.agreed[data-v-976117c3] {
|
||||
color: #059669;
|
||||
background-color: rgba(16, 185, 129, 0.1);
|
||||
background-color: rgba(16, 185, 129, 0.08);
|
||||
}
|
||||
|
||||
/* 通讯录 */
|
||||
@@ -873,20 +936,34 @@
|
||||
/* 底部导航 */
|
||||
.bottom-tabbar[data-v-976117c3] {
|
||||
width: 100%;
|
||||
height: 4.375rem;
|
||||
height: 4.0625rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0.625rem;
|
||||
padding: 0.5rem 0.9375rem;
|
||||
box-sizing: border-box;
|
||||
background: rgba(200, 200, 200, 0.1);
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border-top: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
}
|
||||
.tab-item[data-v-976117c3] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0.25rem 0.625rem;
|
||||
border-radius: 0.5rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.tab-item.active[data-v-976117c3] {
|
||||
background: rgba(108, 99, 255, 0.08);
|
||||
}
|
||||
.tab-label[data-v-976117c3] {
|
||||
font-size: 0.875rem;
|
||||
font-size: 0.8125rem;
|
||||
color: #666;
|
||||
}
|
||||
.tab-item.active .tab-label[data-v-976117c3] {
|
||||
color: #6c63ff;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
169
unpackage/dist/dev/app-plus/pages/Login/Login.css
vendored
169
unpackage/dist/dev/app-plus/pages/Login/Login.css
vendored
@@ -1,22 +1,29 @@
|
||||
|
||||
.login-container[data-v-461d1d79] {
|
||||
padding: 4.375rem 1.875rem 3.125rem 1.875rem;
|
||||
padding: 3.75rem 1.5625rem 2.5rem 1.5625rem;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background: linear-gradient(160deg, #f0f2ff 0%, #f5f3f8 30%, #faf9fe 60%, #f5f4ff 100%);
|
||||
}
|
||||
.login-card[data-v-461d1d79] {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0.625rem;
|
||||
max-width: 20rem;
|
||||
padding: 1.5625rem 1.25rem;
|
||||
box-sizing: border-box;
|
||||
background: #ffffff;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 1.25rem;
|
||||
box-shadow: 0 0.5rem 1.5rem rgba(100, 100, 180, 0.1);
|
||||
border: 0.03125rem solid rgba(170, 170, 255, 0.15);
|
||||
}
|
||||
.conner[data-v-461d1d79] {
|
||||
position: absolute;
|
||||
@@ -48,8 +55,6 @@
|
||||
border-right: 2px solid #aaaaff;
|
||||
}
|
||||
.login-header[data-v-461d1d79] {
|
||||
/* position: absolute;
|
||||
top: 80rpx; */
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -61,83 +66,104 @@
|
||||
align-items: center;
|
||||
}
|
||||
.login-header-logo uni-text[data-v-461d1d79] {
|
||||
margin-left: 0.25rem;
|
||||
font-size: 1.875rem;
|
||||
font-weight: bold;
|
||||
color: #aaaaff;
|
||||
text-shadow: 0 0 0.3125rem rgba(170, 170, 255, 0.4),
|
||||
0 0 0.625rem rgba(170, 170, 255, 0.3);
|
||||
margin-left: 0.375rem;
|
||||
font-size: 1.75rem;
|
||||
font-weight: 800;
|
||||
color: #6c63ff;
|
||||
letter-spacing: 0.0625rem;
|
||||
}
|
||||
.icon-wrapper[data-v-461d1d79] {
|
||||
width: 2.8125rem;
|
||||
height: 2.8125rem;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border-radius: 50%;
|
||||
background-color: rgb(255, 255, 255);
|
||||
background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(240, 238, 255, 0.8));
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
animation: glow-461d1d79 2s ease-in-out infinite;
|
||||
animation: glow-461d1d79 2.5s ease-in-out infinite;
|
||||
box-shadow: 0 0.125rem 0.5rem rgba(108, 99, 255, 0.12);
|
||||
}
|
||||
@keyframes glow-461d1d79 {
|
||||
0%,
|
||||
100% {
|
||||
box-shadow: 0 0 0.625rem rgba(170, 170, 255, 0.3);
|
||||
0%, 100% {
|
||||
box-shadow: 0 0.125rem 0.5rem rgba(108, 99, 255, 0.12);
|
||||
}
|
||||
50% {
|
||||
box-shadow: 0 0 0.625rem rgba(170, 170, 255, 0.4),
|
||||
0 0 0.9375rem rgba(170, 170, 255, 0.3),
|
||||
0 0 1.5625rem rgba(170, 170, 255, 0.2);
|
||||
box-shadow: 0 0.125rem 0.75rem rgba(108, 99, 255, 0.25),
|
||||
0 0 1.5625rem rgba(108, 99, 255, 0.12);
|
||||
}
|
||||
}
|
||||
.icon-wrapper .danao-style[data-v-461d1d79] {
|
||||
font-size: 2.1875rem;
|
||||
color: #aaaaff;
|
||||
font-size: 2rem;
|
||||
color: #6c63ff;
|
||||
}
|
||||
.sub-title[data-v-461d1d79] {
|
||||
margin-top: 0.625rem;
|
||||
font-size: 1.125rem;
|
||||
margin-top: 0.5rem;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
color: #666;
|
||||
text-shadow: 0 0 0.3125rem #999;
|
||||
color: #888;
|
||||
letter-spacing: 0.03125rem;
|
||||
}
|
||||
.form-wrapper[data-v-461d1d79] {
|
||||
margin-top: 1.5625rem;
|
||||
width: 15.625rem;
|
||||
padding: 2.5rem 0.9375rem;
|
||||
background-color: rgba(170, 170, 255, 0.05);
|
||||
border-radius: 0.625rem;
|
||||
/* border: 1rpx solid #aaaaff; */
|
||||
box-shadow: 0 0 0.3125rem rgba(170, 170, 255, 0.5);
|
||||
width: 100%;
|
||||
max-width: 15.625rem;
|
||||
padding: 1.875rem 1.125rem 1.125rem;
|
||||
background: rgba(170, 170, 255, 0.04);
|
||||
border-radius: 0.875rem;
|
||||
border: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.form-item[data-v-461d1d79] {
|
||||
margin-top: 0.625rem;
|
||||
}
|
||||
.form-label[data-v-461d1d79] {
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 500;
|
||||
color: #555;
|
||||
margin-bottom: 0.25rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
.form-item .form-input[data-v-461d1d79] {
|
||||
width: 100%;
|
||||
height: 2.5rem;
|
||||
padding: 0 10px;
|
||||
height: 2.75rem;
|
||||
padding: 0 0.75rem;
|
||||
box-sizing: border-box;
|
||||
border-radius: 0.9375rem;
|
||||
border: 0.03125rem solid #e5e5e5;
|
||||
border-radius: 0.75rem;
|
||||
border: 0.0625rem solid #e8e8f0;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
font-size: 0.875rem;
|
||||
color: #333;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.form-item .form-input[data-v-461d1d79]::-webkit-input-placeholder {
|
||||
color: #c0c0d0;
|
||||
}
|
||||
.form-item .form-input[data-v-461d1d79]::placeholder {
|
||||
color: #c0c0d0;
|
||||
}
|
||||
.form-item .focused[data-v-461d1d79] {
|
||||
border-color: #aaaaff;
|
||||
box-shadow: 0 0 0.3125rem rgba(170, 170, 255, 0.5);
|
||||
border-color: #6c63ff;
|
||||
background: #ffffff;
|
||||
box-shadow: 0 0 0 0.1875rem rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
.form-item .error[data-v-461d1d79] {
|
||||
border-color: #ff0000;
|
||||
box-shadow: 0 0 0.3125rem rgba(255, 0, 0, 0.5);
|
||||
border-color: #ff4d4f;
|
||||
box-shadow: 0 0 0 0.1875rem rgba(255, 77, 79, 0.06);
|
||||
}
|
||||
.error-info[data-v-461d1d79] {
|
||||
font-size: 0.75rem;
|
||||
color: #ff0000;
|
||||
font-size: 0.6875rem;
|
||||
color: #ff4d4f;
|
||||
margin-top: 0.25rem;
|
||||
padding-left: 0.25rem;
|
||||
}
|
||||
.form-option[data-v-461d1d79] {
|
||||
margin-top: 0.3125rem;
|
||||
margin-top: 0.625rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.form-option .checkbox-wrapper[data-v-461d1d79] {
|
||||
display: flex;
|
||||
@@ -145,23 +171,54 @@
|
||||
align-items: center;
|
||||
}
|
||||
.form-option .checkbox-wrapper .checkbox[data-v-461d1d79] {
|
||||
width: 0.9375rem;
|
||||
height: 0.9375rem;
|
||||
border: 0.03125rem solid #666;
|
||||
width: 1.125rem;
|
||||
height: 1.125rem;
|
||||
border: 0.0625rem solid #d4d4e0;
|
||||
border-radius: 0.25rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.form-option .checkbox-wrapper .checked[data-v-461d1d79] {
|
||||
background-color: #aaaaff;
|
||||
transition: all 0.2s ease;
|
||||
background: #fff;
|
||||
}
|
||||
.form-option .checkbox-wrapper .checkbox uni-text[data-v-461d1d79] {
|
||||
color: #ffffff;
|
||||
font-size: 0.6875rem;
|
||||
}
|
||||
.form-option .checkbox-wrapper .checked[data-v-461d1d79] {
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
border-color: #6c63ff;
|
||||
}
|
||||
.form-option .checkbox-wrapper .checkbox-text[data-v-461d1d79] {
|
||||
margin-left: 0.3125rem;
|
||||
font-size: 0.8125rem;
|
||||
color: #666;
|
||||
}
|
||||
.form-option .forget-pwd[data-v-461d1d79] {
|
||||
font-size: 0.8125rem;
|
||||
color: #6c63ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
[data-v-461d1d79] .login-btn {
|
||||
margin-top: 0.9375rem;
|
||||
width: 15.625rem;
|
||||
height: 3.125rem;
|
||||
border-radius: 2.5rem;
|
||||
background: linear-gradient(to right, #aaaaff, #2969ed);
|
||||
margin-top: 1.125rem;
|
||||
width: 100%;
|
||||
max-width: 15.625rem;
|
||||
height: 3rem;
|
||||
border-radius: 1.5rem;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
color: #fff;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.0625rem;
|
||||
box-shadow: 0 0.25rem 0.75rem rgba(108, 99, 255, 0.3);
|
||||
transition: all 0.2s ease;
|
||||
border: none;
|
||||
}
|
||||
[data-v-461d1d79] .login-btn:active {
|
||||
transform: scale(0.97);
|
||||
box-shadow: 0 0.125rem 0.375rem rgba(108, 99, 255, 0.2);
|
||||
}
|
||||
[data-v-461d1d79] .login-btn[disabled] {
|
||||
opacity: 0.7;
|
||||
background: linear-gradient(135deg, #a8a4f0, #8a86d8);
|
||||
}
|
||||
|
||||
@@ -5,45 +5,49 @@
|
||||
padding: 0.3125rem 0.625rem;
|
||||
box-sizing: border-box;
|
||||
align-items: center;
|
||||
background-color: rgba(194, 191, 211, 0.1);
|
||||
border-radius: 0.3125rem;
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
border-radius: 0.4375rem;
|
||||
border: 0.0625rem solid transparent;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.create-folder-name uni-input[data-v-769edd25] {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
font-size: 0.875rem;
|
||||
color: #333;
|
||||
}
|
||||
.create-folder-name.has-value[data-v-769edd25] {
|
||||
background-color: #ffffff;
|
||||
border: 0.0625rem solid #aaaaff;
|
||||
box-shadow: 0 0 0.46875rem #aaaaff;
|
||||
border-color: #6c63ff;
|
||||
box-shadow: 0 0 0 0.125rem rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
/* 新建文件夹弹窗内部样式 */
|
||||
.new-folder-name[data-v-769edd25] {
|
||||
font-size: 0.875rem;
|
||||
color: #666;
|
||||
color: #555;
|
||||
margin-bottom: 0.375rem;
|
||||
}
|
||||
.nf-path-label[data-v-769edd25] {
|
||||
font-size: 0.8125rem;
|
||||
font-size: 0.75rem;
|
||||
color: #999;
|
||||
margin-top: 0.75rem;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.nf-path-display[data-v-769edd25] {
|
||||
font-size: 0.875rem;
|
||||
font-size: 0.8125rem;
|
||||
color: #333;
|
||||
padding: 0.375rem 0.625rem;
|
||||
background: #f5f5f5;
|
||||
border-radius: 0.3125rem;
|
||||
background: #f5f5f8;
|
||||
border-radius: 0.375rem;
|
||||
word-break: break-all;
|
||||
}
|
||||
.nf-path-preview[data-v-769edd25] {
|
||||
font-size: 0.875rem;
|
||||
color: #0073ff;
|
||||
font-size: 0.8125rem;
|
||||
color: #6c63ff;
|
||||
padding: 0.375rem 0.625rem;
|
||||
background: rgba(0, 115, 255, 0.05);
|
||||
border: 0.0625rem dashed rgba(0, 115, 255, 0.3);
|
||||
border-radius: 0.3125rem;
|
||||
background: rgba(108, 99, 255, 0.05);
|
||||
border: 0.0625rem dashed rgba(108, 99, 255, 0.25);
|
||||
border-radius: 0.375rem;
|
||||
word-break: break-all;
|
||||
}
|
||||
.option-wrapper[data-v-769edd25] {
|
||||
@@ -58,24 +62,30 @@
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0.75rem 0;
|
||||
border-radius: 0.375rem;
|
||||
border-radius: 0.5rem;
|
||||
font-size: 0.9375rem;
|
||||
font-weight: 500;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.opt-btn[data-v-769edd25]:active {
|
||||
transform: scale(0.97);
|
||||
}
|
||||
.opt-cancel[data-v-769edd25] {
|
||||
background: #f5f5f5;
|
||||
background: #f0f1f5;
|
||||
color: #666;
|
||||
}
|
||||
.opt-confirm[data-v-769edd25] {
|
||||
background: linear-gradient(135deg, #0073ff, #3ab0ff);
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
color: #fff;
|
||||
box-shadow: 0 0.125rem 0.375rem rgba(108, 99, 255, 0.25);
|
||||
}
|
||||
.workspace-container[data-v-769edd25] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: rgba(140, 140, 140, 0.1);
|
||||
background: linear-gradient(180deg, #f5f4f9 0%, #faf9fe 100%);
|
||||
}
|
||||
.workspace-text[data-v-769edd25] {
|
||||
color: #0073ff;
|
||||
color: #6c63ff;
|
||||
font-weight: bold;
|
||||
}
|
||||
.workspace-header[data-v-769edd25] {
|
||||
@@ -84,16 +94,21 @@
|
||||
flex-shrink: 0;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 0.5rem 0;
|
||||
padding: 0.375rem 0;
|
||||
box-sizing: border-box;
|
||||
border-bottom: 0.03125rem solid #ddd;
|
||||
position: relative;
|
||||
z-index: 100;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border-bottom: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
}
|
||||
.custom-navbar[data-v-769edd25] {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0.625rem 0.3125rem;
|
||||
padding: 0.5rem 0.3125rem;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
}
|
||||
@@ -107,6 +122,9 @@
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
font-size: 0.8125rem;
|
||||
color: #6c63ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
.navbar-title[data-v-769edd25] {
|
||||
display: flex;
|
||||
@@ -116,6 +134,9 @@
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
}
|
||||
.navbar-right[data-v-769edd25] {
|
||||
display: flex;
|
||||
@@ -125,11 +146,11 @@
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.navbar-right .menu-open[data-v-769edd25] {
|
||||
color: #3ab0ff !important;
|
||||
color: #6c63ff !important;
|
||||
font-size: 1.25rem !important;
|
||||
}
|
||||
.custom-navbar-icon[data-v-769edd25] {
|
||||
color: #0073ff !important;
|
||||
color: #6c63ff !important;
|
||||
font-size: 1.25rem !important;
|
||||
}
|
||||
.search-file-warpper[data-v-769edd25] {
|
||||
@@ -141,23 +162,34 @@
|
||||
display: flex;
|
||||
flex: 1;
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 1);
|
||||
padding: 0.5rem;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
padding: 0.4375rem 0.75rem;
|
||||
box-sizing: border-box;
|
||||
border-radius: 0.9375rem;
|
||||
border-radius: 0.875rem;
|
||||
border: 0.0625rem solid #e8e7f5;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.search-file[data-v-769edd25]:focus-within {
|
||||
border-color: #6c63ff;
|
||||
box-shadow: 0 0 0 0.125rem rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
.icon-sousuo[data-v-769edd25] {
|
||||
font-weight: bold;
|
||||
color: #999;
|
||||
}
|
||||
.search-file-input[data-v-769edd25] {
|
||||
margin-left: 0.625rem;
|
||||
margin-left: 0.5rem;
|
||||
font-size: 0.8125rem;
|
||||
color: #333;
|
||||
}
|
||||
.cancel-search[data-v-769edd25] {
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
padding: 0 0 0 0.625rem;
|
||||
box-sizing: border-box;
|
||||
color: #0073ff;
|
||||
color: #6c63ff;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.workspace-content[data-v-769edd25] {
|
||||
width: 100%;
|
||||
@@ -172,19 +204,28 @@
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
right: 0.625rem;
|
||||
width: 9.375rem;
|
||||
width: 8.75rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: #fff;
|
||||
border-radius: 0.9375rem;
|
||||
z-index: 1;
|
||||
border-radius: 0.75rem;
|
||||
z-index: 999;
|
||||
box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.08);
|
||||
padding: 0.25rem 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.menu-card-item[data-v-769edd25] {
|
||||
width: 100%;
|
||||
padding: 0.625rem;
|
||||
padding: 0.6875rem 0.875rem;
|
||||
box-sizing: border-box;
|
||||
font-size: 0.875rem;
|
||||
color: #333;
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
.menu-card-item[data-v-769edd25]:active {
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
.folder-null[data-v-769edd25] {
|
||||
width: 100%;
|
||||
@@ -196,16 +237,18 @@
|
||||
left: 50%;
|
||||
top: 30%;
|
||||
transform: translateX(-50%);
|
||||
font-size: 1rem;
|
||||
font-size: 0.9375rem;
|
||||
color: #bbb;
|
||||
}
|
||||
.folder-null .iconfont[data-v-769edd25] {
|
||||
font-size: 5.625rem;
|
||||
color: #ddd;
|
||||
}
|
||||
.folder-grid[data-v-769edd25] {
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
padding: 0.625rem;
|
||||
padding: 0.75rem;
|
||||
box-sizing: border-box;
|
||||
gap: 0.625rem;
|
||||
align-items: start;
|
||||
@@ -217,58 +260,75 @@
|
||||
align-items: center;
|
||||
position: relative;
|
||||
min-width: 0;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border-radius: 0.75rem;
|
||||
padding: 0.75rem 0.25rem 0.5rem;
|
||||
border: 0.0625rem solid transparent;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.folder-item.select-folder[data-v-769edd25] {
|
||||
border-radius: 0.9375rem;
|
||||
background: rgba(9, 9, 9, 0.1);
|
||||
border-color: rgba(108, 99, 255, 0.3);
|
||||
background: rgba(108, 99, 255, 0.04);
|
||||
}
|
||||
.folder-item[data-v-769edd25]:active {
|
||||
transform: scale(0.96);
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
}
|
||||
.folder-item .folder-name[data-v-769edd25] {
|
||||
max-width: 4.6875rem;
|
||||
max-width: 5rem;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
line-height: 1.25rem;
|
||||
line-height: 1.375rem;
|
||||
min-width: 0;
|
||||
font-size: 0.8125rem;
|
||||
color: #444;
|
||||
}
|
||||
.folder-item-style[data-v-769edd25] {
|
||||
font-size: 5rem !important;
|
||||
font-weight: 0.3125rem !important;
|
||||
color: #3ab0ff !important;
|
||||
font-size: 3.4375rem !important;
|
||||
color: #6c63ff !important;
|
||||
}
|
||||
.folder-checkbox[data-v-769edd25] {
|
||||
width: 1.5625rem;
|
||||
height: 1.5625rem;
|
||||
border: 0.1875rem solid #fff;
|
||||
width: 1.375rem;
|
||||
height: 1.375rem;
|
||||
border: 0.09375rem solid #fff;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0.0625rem 0.09375rem #333;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
box-shadow: 0 0.0625rem 0.25rem rgba(0, 0, 0, 0.12);
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
box-sizing: border-box;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 30%;
|
||||
top: 25%;
|
||||
transform: translate(-50%);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.folder-checkbox.select-folder[data-v-769edd25] {
|
||||
background-color: #0073ff;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
border-color: #6c63ff;
|
||||
}
|
||||
.workspace-footer[data-v-769edd25] {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
justify-content: space-between;
|
||||
padding: 0.9375rem;
|
||||
padding: 0.75rem 0.9375rem;
|
||||
box-sizing: border-box;
|
||||
color: #999999;
|
||||
background: #eeeeee;
|
||||
color: #888;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border-top: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
font-size: 0.8125rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.workspace-footer.folder-actions[data-v-769edd25] {
|
||||
color: #0073ff;
|
||||
color: #6c63ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
.workspace-footer .iconfont[data-v-769edd25] {
|
||||
font-size: 1.25rem !important;
|
||||
|
||||
@@ -537,45 +537,49 @@
|
||||
padding: 0.3125rem 0.625rem;
|
||||
box-sizing: border-box;
|
||||
align-items: center;
|
||||
background-color: rgba(194, 191, 211, 0.1);
|
||||
border-radius: 0.3125rem;
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
border-radius: 0.4375rem;
|
||||
border: 0.0625rem solid transparent;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.create-folder-name uni-input[data-v-c1a60359] {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
font-size: 0.875rem;
|
||||
color: #333;
|
||||
}
|
||||
.create-folder-name.has-value[data-v-c1a60359] {
|
||||
background-color: #ffffff;
|
||||
border: 0.0625rem solid #aaaaff;
|
||||
box-shadow: 0 0 0.46875rem #aaaaff;
|
||||
border-color: #6c63ff;
|
||||
box-shadow: 0 0 0 0.125rem rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
/* 新建文件夹弹窗内部样式 */
|
||||
.new-folder-name[data-v-c1a60359] {
|
||||
font-size: 0.875rem;
|
||||
color: #666;
|
||||
color: #555;
|
||||
margin-bottom: 0.375rem;
|
||||
}
|
||||
.nf-path-label[data-v-c1a60359] {
|
||||
font-size: 0.8125rem;
|
||||
font-size: 0.75rem;
|
||||
color: #999;
|
||||
margin-top: 0.75rem;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.nf-path-display[data-v-c1a60359] {
|
||||
font-size: 0.875rem;
|
||||
font-size: 0.8125rem;
|
||||
color: #333;
|
||||
padding: 0.375rem 0.625rem;
|
||||
background: #f5f5f5;
|
||||
border-radius: 0.3125rem;
|
||||
background: #f5f5f8;
|
||||
border-radius: 0.375rem;
|
||||
word-break: break-all;
|
||||
}
|
||||
.nf-path-preview[data-v-c1a60359] {
|
||||
font-size: 0.875rem;
|
||||
color: #0073ff;
|
||||
font-size: 0.8125rem;
|
||||
color: #6c63ff;
|
||||
padding: 0.375rem 0.625rem;
|
||||
background: rgba(0, 115, 255, 0.05);
|
||||
border: 0.0625rem dashed rgba(0, 115, 255, 0.3);
|
||||
border-radius: 0.3125rem;
|
||||
background: rgba(108, 99, 255, 0.05);
|
||||
border: 0.0625rem dashed rgba(108, 99, 255, 0.25);
|
||||
border-radius: 0.375rem;
|
||||
word-break: break-all;
|
||||
}
|
||||
.option-wrapper[data-v-c1a60359] {
|
||||
@@ -590,24 +594,30 @@
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0.75rem 0;
|
||||
border-radius: 0.375rem;
|
||||
border-radius: 0.5rem;
|
||||
font-size: 0.9375rem;
|
||||
font-weight: 500;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.opt-btn[data-v-c1a60359]:active {
|
||||
transform: scale(0.97);
|
||||
}
|
||||
.opt-cancel[data-v-c1a60359] {
|
||||
background: #f5f5f5;
|
||||
background: #f0f1f5;
|
||||
color: #666;
|
||||
}
|
||||
.opt-confirm[data-v-c1a60359] {
|
||||
background: linear-gradient(135deg, #0073ff, #3ab0ff);
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
color: #fff;
|
||||
box-shadow: 0 0.125rem 0.375rem rgba(108, 99, 255, 0.25);
|
||||
}
|
||||
.workspace-container[data-v-c1a60359] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: rgba(140, 140, 140, 0.1);
|
||||
background: linear-gradient(180deg, #f5f4f9 0%, #faf9fe 100%);
|
||||
}
|
||||
.workspace-text[data-v-c1a60359] {
|
||||
color: #0073ff;
|
||||
color: #6c63ff;
|
||||
font-weight: bold;
|
||||
}
|
||||
.workspace-header[data-v-c1a60359] {
|
||||
@@ -616,16 +626,21 @@
|
||||
flex-shrink: 0;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 0.5rem 0;
|
||||
padding: 0.375rem 0;
|
||||
box-sizing: border-box;
|
||||
border-bottom: 0.03125rem solid #ddd;
|
||||
position: relative;
|
||||
z-index: 100;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border-bottom: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
}
|
||||
.custom-navbar[data-v-c1a60359] {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0.625rem 0.3125rem;
|
||||
padding: 0.5rem 0.3125rem;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
}
|
||||
@@ -639,6 +654,9 @@
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
font-size: 0.8125rem;
|
||||
color: #6c63ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
.navbar-title[data-v-c1a60359] {
|
||||
display: flex;
|
||||
@@ -648,6 +666,9 @@
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
}
|
||||
.navbar-right[data-v-c1a60359] {
|
||||
display: flex;
|
||||
@@ -657,11 +678,11 @@
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.navbar-right .menu-open[data-v-c1a60359] {
|
||||
color: #3ab0ff !important;
|
||||
color: #6c63ff !important;
|
||||
font-size: 1.25rem !important;
|
||||
}
|
||||
.custom-navbar-icon[data-v-c1a60359] {
|
||||
color: #0073ff !important;
|
||||
color: #6c63ff !important;
|
||||
font-size: 1.25rem !important;
|
||||
}
|
||||
.search-file-warpper[data-v-c1a60359] {
|
||||
@@ -673,23 +694,34 @@
|
||||
display: flex;
|
||||
flex: 1;
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 1);
|
||||
padding: 0.5rem;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
padding: 0.4375rem 0.75rem;
|
||||
box-sizing: border-box;
|
||||
border-radius: 0.9375rem;
|
||||
border-radius: 0.875rem;
|
||||
border: 0.0625rem solid #e8e7f5;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.search-file[data-v-c1a60359]:focus-within {
|
||||
border-color: #6c63ff;
|
||||
box-shadow: 0 0 0 0.125rem rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
.icon-sousuo[data-v-c1a60359] {
|
||||
font-weight: bold;
|
||||
color: #999;
|
||||
}
|
||||
.search-file-input[data-v-c1a60359] {
|
||||
margin-left: 0.625rem;
|
||||
margin-left: 0.5rem;
|
||||
font-size: 0.8125rem;
|
||||
color: #333;
|
||||
}
|
||||
.cancel-search[data-v-c1a60359] {
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
padding: 0 0 0 0.625rem;
|
||||
box-sizing: border-box;
|
||||
color: #0073ff;
|
||||
color: #6c63ff;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.workspace-content[data-v-c1a60359] {
|
||||
width: 100%;
|
||||
@@ -704,19 +736,28 @@
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
right: 0.625rem;
|
||||
width: 9.375rem;
|
||||
width: 8.75rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: #fff;
|
||||
border-radius: 0.9375rem;
|
||||
z-index: 1;
|
||||
border-radius: 0.75rem;
|
||||
z-index: 999;
|
||||
box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.08);
|
||||
padding: 0.25rem 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.menu-card-item[data-v-c1a60359] {
|
||||
width: 100%;
|
||||
padding: 0.625rem;
|
||||
padding: 0.6875rem 0.875rem;
|
||||
box-sizing: border-box;
|
||||
font-size: 0.875rem;
|
||||
color: #333;
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
.menu-card-item[data-v-c1a60359]:active {
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
}
|
||||
.folder-null[data-v-c1a60359] {
|
||||
width: 100%;
|
||||
@@ -728,16 +769,18 @@
|
||||
left: 50%;
|
||||
top: 30%;
|
||||
transform: translateX(-50%);
|
||||
font-size: 1rem;
|
||||
font-size: 0.9375rem;
|
||||
color: #bbb;
|
||||
}
|
||||
.folder-null .iconfont[data-v-c1a60359] {
|
||||
font-size: 5.625rem;
|
||||
color: #ddd;
|
||||
}
|
||||
.folder-grid[data-v-c1a60359] {
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
padding: 0.625rem;
|
||||
padding: 0.75rem;
|
||||
box-sizing: border-box;
|
||||
gap: 0.625rem;
|
||||
align-items: start;
|
||||
@@ -749,58 +792,75 @@
|
||||
align-items: center;
|
||||
position: relative;
|
||||
min-width: 0;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border-radius: 0.75rem;
|
||||
padding: 0.75rem 0.25rem 0.5rem;
|
||||
border: 0.0625rem solid transparent;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.folder-item.select-folder[data-v-c1a60359] {
|
||||
border-radius: 0.9375rem;
|
||||
background: rgba(9, 9, 9, 0.1);
|
||||
border-color: rgba(108, 99, 255, 0.3);
|
||||
background: rgba(108, 99, 255, 0.04);
|
||||
}
|
||||
.folder-item[data-v-c1a60359]:active {
|
||||
transform: scale(0.96);
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
}
|
||||
.folder-item .folder-name[data-v-c1a60359] {
|
||||
max-width: 4.6875rem;
|
||||
max-width: 5rem;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
line-height: 1.25rem;
|
||||
line-height: 1.375rem;
|
||||
min-width: 0;
|
||||
font-size: 0.8125rem;
|
||||
color: #444;
|
||||
}
|
||||
.folder-item-style[data-v-c1a60359] {
|
||||
font-size: 5rem !important;
|
||||
font-weight: 0.3125rem !important;
|
||||
color: #3ab0ff !important;
|
||||
font-size: 3.4375rem !important;
|
||||
color: #6c63ff !important;
|
||||
}
|
||||
.folder-checkbox[data-v-c1a60359] {
|
||||
width: 1.5625rem;
|
||||
height: 1.5625rem;
|
||||
border: 0.1875rem solid #fff;
|
||||
width: 1.375rem;
|
||||
height: 1.375rem;
|
||||
border: 0.09375rem solid #fff;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0.0625rem 0.09375rem #333;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
box-shadow: 0 0.0625rem 0.25rem rgba(0, 0, 0, 0.12);
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
box-sizing: border-box;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 30%;
|
||||
top: 25%;
|
||||
transform: translate(-50%);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.folder-checkbox.select-folder[data-v-c1a60359] {
|
||||
background-color: #0073ff;
|
||||
background: linear-gradient(135deg, #6c63ff, #4a45d1);
|
||||
border-color: #6c63ff;
|
||||
}
|
||||
.workspace-footer[data-v-c1a60359] {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
justify-content: space-between;
|
||||
padding: 0.9375rem;
|
||||
padding: 0.75rem 0.9375rem;
|
||||
box-sizing: border-box;
|
||||
color: #999999;
|
||||
background: #eeeeee;
|
||||
color: #888;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
border-top: 0.03125rem solid rgba(170, 170, 255, 0.1);
|
||||
font-size: 0.8125rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
.workspace-footer.folder-actions[data-v-c1a60359] {
|
||||
color: #0073ff;
|
||||
color: #6c63ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
.workspace-footer .iconfont[data-v-c1a60359] {
|
||||
font-size: 1.25rem !important;
|
||||
|
||||
@@ -54,6 +54,60 @@
|
||||
<div class="content unicode" style="display: block;">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">代码</div>
|
||||
<div class="code-name">&#xe695;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">word</div>
|
||||
<div class="code-name">&#xe64c;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">其他领域</div>
|
||||
<div class="code-name">&#xe62f;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">文件夹</div>
|
||||
<div class="code-name">&#xe63a;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">execl</div>
|
||||
<div class="code-name">&#xe64d;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">TXT</div>
|
||||
<div class="code-name">&#xe64e;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">PPT</div>
|
||||
<div class="code-name">&#xe64f;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">ZIP</div>
|
||||
<div class="code-name">&#xe650;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">PDF</div>
|
||||
<div class="code-name">&#xe651;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">云端,云,云服务</div>
|
||||
@@ -426,9 +480,9 @@
|
||||
<pre><code class="language-css"
|
||||
>@font-face {
|
||||
font-family: 'iconfont';
|
||||
src: url('iconfont.woff2?t=1782200893170') format('woff2'),
|
||||
url('iconfont.woff?t=1782200893170') format('woff'),
|
||||
url('iconfont.ttf?t=1782200893170') format('truetype');
|
||||
src: url('iconfont.woff2?t=1783330740989') format('woff2'),
|
||||
url('iconfont.woff?t=1783330740989') format('woff'),
|
||||
url('iconfont.ttf?t=1783330740989') format('truetype');
|
||||
}
|
||||
</code></pre>
|
||||
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
|
||||
@@ -454,6 +508,87 @@
|
||||
<div class="content font-class">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-daima"></span>
|
||||
<div class="name">
|
||||
代码
|
||||
</div>
|
||||
<div class="code-name">.icon-daima
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-word"></span>
|
||||
<div class="name">
|
||||
word
|
||||
</div>
|
||||
<div class="code-name">.icon-word
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-qitalingyu"></span>
|
||||
<div class="name">
|
||||
其他领域
|
||||
</div>
|
||||
<div class="code-name">.icon-qitalingyu
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-wenjianjia1"></span>
|
||||
<div class="name">
|
||||
文件夹
|
||||
</div>
|
||||
<div class="code-name">.icon-wenjianjia1
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-execl"></span>
|
||||
<div class="name">
|
||||
execl
|
||||
</div>
|
||||
<div class="code-name">.icon-execl
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-TXT1"></span>
|
||||
<div class="name">
|
||||
TXT
|
||||
</div>
|
||||
<div class="code-name">.icon-TXT1
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-PPT1"></span>
|
||||
<div class="name">
|
||||
PPT
|
||||
</div>
|
||||
<div class="code-name">.icon-PPT1
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-ZIP"></span>
|
||||
<div class="name">
|
||||
ZIP
|
||||
</div>
|
||||
<div class="code-name">.icon-ZIP
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-PDF1"></span>
|
||||
<div class="name">
|
||||
PDF
|
||||
</div>
|
||||
<div class="code-name">.icon-PDF1
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-cloud"></span>
|
||||
<div class="name">
|
||||
@@ -1012,6 +1147,78 @@
|
||||
<div class="content symbol">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-daima"></use>
|
||||
</svg>
|
||||
<div class="name">代码</div>
|
||||
<div class="code-name">#icon-daima</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-word"></use>
|
||||
</svg>
|
||||
<div class="name">word</div>
|
||||
<div class="code-name">#icon-word</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-qitalingyu"></use>
|
||||
</svg>
|
||||
<div class="name">其他领域</div>
|
||||
<div class="code-name">#icon-qitalingyu</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-wenjianjia1"></use>
|
||||
</svg>
|
||||
<div class="name">文件夹</div>
|
||||
<div class="code-name">#icon-wenjianjia1</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-execl"></use>
|
||||
</svg>
|
||||
<div class="name">execl</div>
|
||||
<div class="code-name">#icon-execl</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-TXT1"></use>
|
||||
</svg>
|
||||
<div class="name">TXT</div>
|
||||
<div class="code-name">#icon-TXT1</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-PPT1"></use>
|
||||
</svg>
|
||||
<div class="name">PPT</div>
|
||||
<div class="code-name">#icon-PPT1</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-ZIP"></use>
|
||||
</svg>
|
||||
<div class="name">ZIP</div>
|
||||
<div class="code-name">#icon-ZIP</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-PDF1"></use>
|
||||
</svg>
|
||||
<div class="name">PDF</div>
|
||||
<div class="code-name">#icon-PDF1</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-cloud"></use>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 4890805 */
|
||||
src: url('iconfont.woff2?t=1782200893170') format('woff2'),
|
||||
url('iconfont.woff?t=1782200893170') format('woff'),
|
||||
url('iconfont.ttf?t=1782200893170') format('truetype');
|
||||
src: url('iconfont.woff2?t=1783330740989') format('woff2'),
|
||||
url('iconfont.woff?t=1783330740989') format('woff'),
|
||||
url('iconfont.ttf?t=1783330740989') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
@@ -13,6 +13,42 @@
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-daima:before {
|
||||
content: "\e695";
|
||||
}
|
||||
|
||||
.icon-word:before {
|
||||
content: "\e64c";
|
||||
}
|
||||
|
||||
.icon-qitalingyu:before {
|
||||
content: "\e62f";
|
||||
}
|
||||
|
||||
.icon-wenjianjia1:before {
|
||||
content: "\e63a";
|
||||
}
|
||||
|
||||
.icon-execl:before {
|
||||
content: "\e64d";
|
||||
}
|
||||
|
||||
.icon-TXT1:before {
|
||||
content: "\e64e";
|
||||
}
|
||||
|
||||
.icon-PPT1:before {
|
||||
content: "\e64f";
|
||||
}
|
||||
|
||||
.icon-ZIP:before {
|
||||
content: "\e650";
|
||||
}
|
||||
|
||||
.icon-PDF1:before {
|
||||
content: "\e651";
|
||||
}
|
||||
|
||||
.icon-cloud:before {
|
||||
content: "\e988";
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -5,6 +5,69 @@
|
||||
"css_prefix_text": "icon-",
|
||||
"description": "",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "1767709",
|
||||
"name": "代码",
|
||||
"font_class": "daima",
|
||||
"unicode": "e695",
|
||||
"unicode_decimal": 59029
|
||||
},
|
||||
{
|
||||
"icon_id": "6294488",
|
||||
"name": "word",
|
||||
"font_class": "word",
|
||||
"unicode": "e64c",
|
||||
"unicode_decimal": 58956
|
||||
},
|
||||
{
|
||||
"icon_id": "1460463",
|
||||
"name": "其他领域",
|
||||
"font_class": "qitalingyu",
|
||||
"unicode": "e62f",
|
||||
"unicode_decimal": 58927
|
||||
},
|
||||
{
|
||||
"icon_id": "5194070",
|
||||
"name": "文件夹",
|
||||
"font_class": "wenjianjia1",
|
||||
"unicode": "e63a",
|
||||
"unicode_decimal": 58938
|
||||
},
|
||||
{
|
||||
"icon_id": "6294485",
|
||||
"name": "execl",
|
||||
"font_class": "execl",
|
||||
"unicode": "e64d",
|
||||
"unicode_decimal": 58957
|
||||
},
|
||||
{
|
||||
"icon_id": "6294486",
|
||||
"name": "TXT",
|
||||
"font_class": "TXT1",
|
||||
"unicode": "e64e",
|
||||
"unicode_decimal": 58958
|
||||
},
|
||||
{
|
||||
"icon_id": "6294487",
|
||||
"name": "PPT",
|
||||
"font_class": "PPT1",
|
||||
"unicode": "e64f",
|
||||
"unicode_decimal": 58959
|
||||
},
|
||||
{
|
||||
"icon_id": "6294528",
|
||||
"name": "ZIP",
|
||||
"font_class": "ZIP",
|
||||
"unicode": "e650",
|
||||
"unicode_decimal": 58960
|
||||
},
|
||||
{
|
||||
"icon_id": "6294529",
|
||||
"name": "PDF",
|
||||
"font_class": "PDF1",
|
||||
"unicode": "e651",
|
||||
"unicode_decimal": 58961
|
||||
},
|
||||
{
|
||||
"icon_id": "18170211",
|
||||
"name": "云端,云,云服务",
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,277 +0,0 @@
|
||||
@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "SENSELESS_COMPARISON", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION")
|
||||
package uts.sdk.modules.limeChooseFile
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.provider.OpenableColumns
|
||||
import io.dcloud.uniapp.*
|
||||
import io.dcloud.uniapp.extapi.*
|
||||
import io.dcloud.unicloud.*
|
||||
import io.dcloud.uts.*
|
||||
import io.dcloud.uts.Map
|
||||
import io.dcloud.uts.Set
|
||||
import io.dcloud.uts.UTSAndroid
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import kotlin.properties.Delegates
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Deferred
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.async
|
||||
typealias ChooseFileErrorCode = Number
|
||||
interface GeneralCallbackResult : IUniError {
|
||||
override var errCode: ChooseFileErrorCode
|
||||
}
|
||||
interface ChooseFile {
|
||||
var name: String
|
||||
var path: String
|
||||
var size: Number
|
||||
var time: Number
|
||||
var type: String
|
||||
}
|
||||
open class ChooseFileSuccessCallbackResult (
|
||||
@JsonNotNull
|
||||
open var tempFiles: UTSArray<ChooseFile>,
|
||||
@JsonNotNull
|
||||
open var errMsg: String,
|
||||
) : UTSObject(), IUTSSourceMap {
|
||||
override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
|
||||
return UTSSourceMapPosition("ChooseFileSuccessCallbackResult", "uni_modules/lime-choose-file/utssdk/interface.uts", 34, 13)
|
||||
}
|
||||
}
|
||||
typealias ChooseFileSuccessCallback = (result: ChooseFileSuccessCallbackResult) -> Unit
|
||||
typealias ChooseFileFailCallback = (res: GeneralCallbackResult) -> Unit
|
||||
typealias ChooseFileCompleteCallback = (res: GeneralCallbackResult) -> Unit
|
||||
open class ChooseFileOption (
|
||||
open var filename: String? = null,
|
||||
open var count: Number? = null,
|
||||
open var type: String? = null,
|
||||
open var extension: UTSArray<String>? = null,
|
||||
open var success: ChooseFileSuccessCallback? = null,
|
||||
open var fail: ChooseFileFailCallback? = null,
|
||||
open var complete: ChooseFileCompleteCallback? = null,
|
||||
) : UTSObject(), IUTSSourceMap {
|
||||
override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
|
||||
return UTSSourceMapPosition("ChooseFileOption", "uni_modules/lime-choose-file/utssdk/interface.uts", 45, 13)
|
||||
}
|
||||
}
|
||||
val UniErrorSubject = "chooseFile\""
|
||||
val UniErrors: Map<ChooseFileErrorCode, String> = Map(_uA(
|
||||
_uA(
|
||||
9010001,
|
||||
"chooseFile:ok"
|
||||
),
|
||||
_uA(
|
||||
9010002,
|
||||
"ChooseFile:failed"
|
||||
)
|
||||
))
|
||||
open class GeneralCallbackResultImpl : UniError, GeneralCallbackResult, IUTSSourceMap {
|
||||
override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
|
||||
return UTSSourceMapPosition("GeneralCallbackResultImpl", "uni_modules/lime-choose-file/utssdk/unierror.uts", 25, 14)
|
||||
}
|
||||
constructor(errCode: ChooseFileErrorCode, errMsg: String? = null) : super() {
|
||||
this.errSubject = UniErrorSubject
|
||||
this.errCode = errCode
|
||||
this.errMsg = errMsg ?: UniErrors[errCode] ?: ""
|
||||
}
|
||||
}
|
||||
val REQUEST_CODE_CHOOSE_FILE: Int = 42
|
||||
var resultFunction: ((requestCode: Int, resultCode: Int, data: Intent?) -> Unit)? = null
|
||||
open class ChooseFileImpl : ChooseFile, IUTSSourceMap {
|
||||
override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
|
||||
return UTSSourceMapPosition("ChooseFileImpl", "uni_modules/lime-choose-file/utssdk/app-android/index.uts", 17, 7)
|
||||
}
|
||||
override var name: String = ""
|
||||
override var path: String = ""
|
||||
override var size: Number = 0
|
||||
override var time: Number = 0
|
||||
override var type: String = "file"
|
||||
private var options: ChooseFileOption
|
||||
constructor(uri: Uri, options: ChooseFileOption){
|
||||
this.options = options
|
||||
this.time = Date.now()
|
||||
this.type = this.getFileTypeFromUri(uri)
|
||||
this.getFileInfoFromUri(uri)
|
||||
if (this.isCache(options)) {
|
||||
this.copyFileToCache(uri)
|
||||
}
|
||||
}
|
||||
private fun isCache(options: ChooseFileOption): Boolean {
|
||||
val extension = this.getFileExtension(this.name)
|
||||
val extensions = options.extension
|
||||
val type = options.type ?: "all"
|
||||
val hasExtension = extensions != null && extension != "" && extensions.includes(extension)
|
||||
val isVideoOrImage = _uA(
|
||||
"video",
|
||||
"image"
|
||||
).includes(type)
|
||||
val isFileAndNotVideoOrImage = type == "file" && !_uA(
|
||||
"video",
|
||||
"image"
|
||||
).includes(this.type)
|
||||
if ((type == "all" || isVideoOrImage || isFileAndNotVideoOrImage) && !hasExtension) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
private fun getFileExtension(fileName: String): String {
|
||||
val lastDotIndex = fileName.lastIndexOf(".")
|
||||
if (lastDotIndex == -1) {
|
||||
return ""
|
||||
}
|
||||
return fileName.substring(lastDotIndex + 1)
|
||||
}
|
||||
private fun copyFileToCache(uri: Uri) {
|
||||
val cacheDir = UTSAndroid.getAppCachePath()
|
||||
val context = UTSAndroid.getAppContext()
|
||||
if (cacheDir != null) {
|
||||
val path = File(cacheDir)
|
||||
if (!path.exists()) {
|
||||
path.mkdir()
|
||||
}
|
||||
}
|
||||
var fileName = this.name
|
||||
if (this.options.filename != null) {
|
||||
fileName = this.options.filename!!
|
||||
if (this.options.count != null && this.options.count!! > 1) {
|
||||
fileName = "" + fileName + "_" + Date.now()
|
||||
}
|
||||
val extension = this.getFileExtension(this.name)
|
||||
fileName = "" + fileName + "." + extension
|
||||
}
|
||||
val destFile = File(cacheDir, fileName)
|
||||
try {
|
||||
val inputStream = context!!.getContentResolver().openInputStream(uri)
|
||||
val outputStream = FileOutputStream(destFile)
|
||||
if (inputStream != null) {
|
||||
var buffer = ByteArray(1024)
|
||||
var c = inputStream.read(buffer)
|
||||
while(c > 0){
|
||||
outputStream.write(buffer, 0, c)
|
||||
c = inputStream.read(buffer)
|
||||
}
|
||||
}
|
||||
this.path = cacheDir + fileName
|
||||
}
|
||||
catch (e: Throwable) {}
|
||||
}
|
||||
private fun getFileTypeFromUri(uri: Uri): String {
|
||||
val context = UTSAndroid.getAppContext()
|
||||
var fileType = "file"
|
||||
var mimeType = context!!.getContentResolver().getType(uri)
|
||||
if (mimeType != null) {
|
||||
if (mimeType.startsWith("video")) {
|
||||
fileType = "video"
|
||||
} else if (mimeType.startsWith("image")) {
|
||||
fileType = "image"
|
||||
}
|
||||
}
|
||||
return fileType
|
||||
}
|
||||
private fun getFileInfoFromUri(uri: Uri) {
|
||||
val context = UTSAndroid.getAppContext()
|
||||
var cursor = context!!.getContentResolver().query(uri, null, null, null, null)
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
this.name = cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
|
||||
val fileSize = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE))
|
||||
this.size = UTSNumber.from(fileSize)
|
||||
cursor.close()
|
||||
} else if ("file".equals(uri.getScheme())) {
|
||||
this.name = uri.getLastPathSegment() ?: ""
|
||||
val file = File(uri.getPath() ?: "")
|
||||
val fileSize = file.length()
|
||||
this.size = UTSNumber.from(fileSize)
|
||||
}
|
||||
}
|
||||
}
|
||||
fun chooseFile(options: ChooseFileOption) {
|
||||
if (resultFunction != null) {
|
||||
UTSAndroid.offAppActivityResult(resultFunction!!)
|
||||
}
|
||||
val type = options.type ?: "all"
|
||||
val intent = Intent(Intent.ACTION_GET_CONTENT)
|
||||
if (type.equals("all") || type.equals("file")) {
|
||||
intent.setType("*/*")
|
||||
} else if (type.equals("video")) {
|
||||
intent.setType("video/*")
|
||||
} else if (type.equals("image")) {
|
||||
intent.setType("image/*")
|
||||
}
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, if (options.count == 1) {
|
||||
false
|
||||
} else {
|
||||
true
|
||||
}
|
||||
)
|
||||
resultFunction = fun(requestCode: Int, resultCode: Int, data: Intent?){
|
||||
if (requestCode == REQUEST_CODE_CHOOSE_FILE) {
|
||||
UTSAndroid.offAppActivityResult(resultFunction!!)
|
||||
if (resultCode == -1 && data != null) {
|
||||
val clipData = data.getClipData()
|
||||
val tempFiles: UTSArray<ChooseFile> = _uA()
|
||||
if (clipData != null) {
|
||||
run {
|
||||
var i: Number = 0
|
||||
while(i < clipData.getItemCount()){
|
||||
val uri = clipData.getItemAt(i.toInt()).getUri()
|
||||
val chooseFile = ChooseFileImpl(uri, options)
|
||||
if (chooseFile.path != "") {
|
||||
tempFiles.push(chooseFile)
|
||||
}
|
||||
i++
|
||||
}
|
||||
}
|
||||
} else {
|
||||
val uri = data.getData()
|
||||
if (uri != null) {
|
||||
val chooseFile = ChooseFileImpl(uri, options)
|
||||
if (chooseFile.path != "") {
|
||||
tempFiles.push(chooseFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
val count = options.count ?: Integer.MAX_VALUE
|
||||
if (tempFiles.length > 0 && count >= tempFiles.length) {
|
||||
options.success?.invoke(ChooseFileSuccessCallbackResult(tempFiles = tempFiles, errMsg = "chooseFile:ok"))
|
||||
} else {
|
||||
val err = GeneralCallbackResultImpl(9010002, "没有可用的文件或文件超过设置数量")
|
||||
options.fail?.invoke(err)
|
||||
options.complete?.invoke(err)
|
||||
}
|
||||
} else {
|
||||
val err = GeneralCallbackResultImpl(9010002, "没有可用的文件")
|
||||
options.fail?.invoke(err)
|
||||
options.complete?.invoke(err)
|
||||
}
|
||||
} else {
|
||||
val err = GeneralCallbackResultImpl(9010002, "没有可用的文件")
|
||||
options.fail?.invoke(err)
|
||||
options.complete?.invoke(err)
|
||||
}
|
||||
}
|
||||
UTSAndroid.onAppActivityResult(resultFunction!!)
|
||||
UTSAndroid.getUniActivity()!!.startActivityForResult(Intent.createChooser(intent, "选择文件"), REQUEST_CODE_CHOOSE_FILE)
|
||||
}
|
||||
open class ChooseFileOptionJSONObject : UTSJSONObject() {
|
||||
open var filename: String? = null
|
||||
open var count: Number? = null
|
||||
open var type: String? = null
|
||||
open var extension: UTSArray<String>? = null
|
||||
open var success: UTSCallback? = null
|
||||
open var fail: UTSCallback? = null
|
||||
open var complete: UTSCallback? = null
|
||||
}
|
||||
fun chooseFileByJs(options: ChooseFileOptionJSONObject) {
|
||||
return chooseFile(ChooseFileOption(filename = options.filename, count = options.count, type = options.type, extension = options.extension, success = fun(result: ChooseFileSuccessCallbackResult): Unit {
|
||||
options.success?.invoke(result)
|
||||
}
|
||||
, fail = fun(res: GeneralCallbackResult): Unit {
|
||||
options.fail?.invoke(res)
|
||||
}
|
||||
, complete = fun(res: GeneralCallbackResult): Unit {
|
||||
options.complete?.invoke(res)
|
||||
}
|
||||
))
|
||||
}
|
||||
Reference in New Issue
Block a user