Optimize login user layout

This commit is contained in:
SoftFever
2026-09-07 23:42:29 +08:00
parent 37e1582c4c
commit 52ed9a8848
6 changed files with 508 additions and 293 deletions
+129 -100
View File
@@ -1,7 +1,6 @@
//var TestData={"sequence_id":"0","command":"get_recent_projects","response":[{"path":"D:\\work\\Models\\Toy\\3d-puzzle-cube-model_files\\3d-puzzle-cube.3mf","time":"2022\/3\/24 20:33:10"},{"path":"D:\\work\\Models\\Art\\Carved Stone Vase - remeshed+drainage\\Carved Stone Vase.3mf","time":"2022\/3\/24 17:11:51"},{"path":"D:\\work\\Models\\Art\\Kity & Cat\\Cat.3mf","time":"2022\/3\/24 17:07:55"},{"path":"D:\\work\\Models\\Toy\\鐩村墤.3mf","time":"2022\/3\/24 17:06:02"},{"path":"D:\\work\\Models\\Toy\\minimalistic-dual-tone-whistle-model_files\\minimalistic-dual-tone-whistle.3mf","time":"2022\/3\/22 21:12:22"},{"path":"D:\\work\\Models\\Toy\\spiral-city-model_files\\spiral-city.3mf","time":"2022\/3\/22 18:58:37"},{"path":"D:\\work\\Models\\Toy\\impossible-dovetail-puzzle-box-model_files\\impossible-dovetail-puzzle-box.3mf","time":"2022\/3\/22 20:08:40"}]};
var m_HotModelList=null;
var bambuSectionExpanded = false;
function OnInit()
{
@@ -12,6 +11,8 @@ function OnInit()
SendMsg_GetBambuLoginInfo();
SendMsg_GetRecentFile();
SendMsg_GetStaffPick();
Set_AccountMenu_Event();
}
//------最佳打开文件的右键菜单功能----------
@@ -89,7 +90,7 @@ function HandleStudio( pVal )
if (strCmd == "get_recent_projects") {
ShowRecentFileList(pVal["response"]);
} else if (strCmd == "orca_userlogin") {
SetOrcaLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"]);
SetOrcaLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"], pVal["data"]["account"]);
} else if (strCmd == "orca_useroffline") {
SetOrcaUserOffline();
} else if (strCmd == "studio_bambu_userlogin") {
@@ -118,21 +119,12 @@ function HandleStudio( pVal )
$("#LeftBoard").hide();
}
} else if (strCmd == "network_plugin_installtip") {
let nShow = pVal["show"] * 1;
// Bambu Cloud is unreachable without the network plugin, so its row only carries the tip.
let bMissing = pVal["show"] * 1 == 1;
if (nShow == 1) {
// Auto-expand Bambu section to show the tip
if (!bambuSectionExpanded) ToggleBambuSection();
$("#BambuLogin1").hide();
$("#NoPluginTip").show();
$("#NoPluginTip").css("display", "flex");
} else {
$("#NoPluginTip").hide();
// Only restore login button if not already logged in
if ($("#BambuLogin2").is(":hidden")) {
$("#BambuLogin1").show();
}
}
$("#NoPluginTip").css("display", bMissing ? "block" : "none");
$("#BambuAccount").toggleClass("Disabled", bMissing).attr("aria-disabled", bMissing ? "true" : null);
if (bMissing) SetBambuSectionExpanded(true, false);
} else if (strCmd == "modelmall_model_advise_get") {
//alert('hot');
if (m_HotModelList != null) {
@@ -170,34 +162,128 @@ function GotoMenu( strMenu )
}
}
function SetOrcaLoginInfo( strAvatar, strName )
{
$("#OrcaLogin1").hide();
$("#OrcaStatusText").hide();
/*------Account rows------*/
$("#UserName").text(strName);
/*----Everything that differs between the two cloud providers lives here----*/
var AccountRows = {
orca: { row: "#OrcaAccount", name: "#UserName", avatar: "#UserAvatarIcon", dot: null,
loginCmd: "homepage_orca_login_or_register", logoutCmd: "homepage_orca_logout" },
bambu: { row: "#BambuAccount", name: "#BambuUserName", avatar: "#BambuAvatarIcon", dot: "#BambuStatusDot",
loginCmd: "homepage_bambu_login_or_register", logoutCmd: "homepage_bambu_logout" }
};
let OriginAvatar=$("#UserAvatarIcon").prop("src");
if(strAvatar != null && strAvatar.trim() !== '' && strAvatar!=OriginAvatar)
$("#UserAvatarIcon").prop("src",strAvatar);
else
{
//alert('Avatar is Same');
}
var BAMBU_FOLD_KEY = "OrcaHome_BambuCloudExpanded";
$("#OrcaLogin2").show();
$("#OrcaLogin2").css("display","flex");
var m_OpenAccountMenu = null;
function SetAccountAvatar(selector, strAvatar) {
if (strAvatar != null && strAvatar.trim() !== '') {
if ($(selector).attr("src") !== strAvatar) $(selector).attr("src", strAvatar);
} else {
$(selector).removeAttr("src");
}
}
function SetOrcaUserOffline()
{
$("#UserAvatarIcon").prop("src","img/c.jpg");
$("#UserName").text('');
$("#OrcaLogin2").hide();
function OnAvatarLoadError(img) {
img.removeAttribute("src"); // fall back to the placeholder glyph
}
$("#OrcaLogin1").show();
$("#OrcaLogin1").css("display","flex");
$("#OrcaStatusText").show();
function SetAccountSignedIn(strProvider, strAvatar, strName, strHandle) {
var account = AccountRows[strProvider];
$(account.name).text(strName).attr("title", strName); /*----long names are ellipsized----*/
SetAccountAvatar(account.avatar, strAvatar);
/*----the handle is the one thing the row does not already show----*/
$(account.row).addClass("SignedIn").data("handle", strHandle !== strName ? strHandle : null);
$(account.dot).addClass("Online");
if (m_OpenAccountMenu === strProvider) OpenAccountMenu(strProvider);
}
function SetAccountSignedOut(strProvider) {
var account = AccountRows[strProvider];
if (m_OpenAccountMenu === strProvider) CloseAccountMenu();
$(account.name).text('').removeAttr("title");
SetAccountAvatar(account.avatar, null);
$(account.row).removeClass("SignedIn").removeData("handle");
$(account.dot).removeClass("Online");
}
function OnAccountRowClick(strProvider) {
var account = AccountRows[strProvider];
var row = $(account.row);
if (row.hasClass("Disabled")) return;
if (!row.hasClass("SignedIn")) {
CloseAccountMenu();
SendSimpleCommand(account.loginCmd);
} else if (m_OpenAccountMenu === strProvider) {
CloseAccountMenu();
} else {
OpenAccountMenu(strProvider);
}
}
function OpenAccountMenu(strProvider) {
var account = AccountRows[strProvider];
var row = $(account.row);
var top = row[0].offsetTop + row[0].offsetHeight + 6; /*----read the geometry before writing----*/
var strHandle = row.data("handle") || "";
$("#AccountMenuHandle").text(strHandle).css("display", strHandle === "" ? "none" : "block");
$("#AccountMenu").css("top", top + "px").addClass("Open");
$(".AccountRow").removeClass("MenuOpen").attr("aria-expanded", "false");
row.addClass("MenuOpen").attr("aria-expanded", "true");
m_OpenAccountMenu = strProvider;
}
function CloseAccountMenu() {
$("#AccountMenu").removeClass("Open");
$(".AccountRow").removeClass("MenuOpen").attr("aria-expanded", "false");
m_OpenAccountMenu = null;
}
function OnAccountMenuLogout() {
var account = AccountRows[m_OpenAccountMenu];
CloseAccountMenu();
if (account) SendSimpleCommand(account.logoutCmd);
}
/*----Bambu Cloud is secondary, so its account folds away under the main one----*/
function SetBambuSectionExpanded(bExpanded, bPersist) {
$("#BambuCloudBody").toggleClass("Expanded", bExpanded);
$("#BambuAccount").attr("tabindex", bExpanded ? "0" : "-1"); /*----keep the folded row out of the tab order----*/
$("#BambuCloudHeader").toggleClass("Expanded", bExpanded).attr("aria-expanded", bExpanded ? "true" : "false");
if (!bExpanded && m_OpenAccountMenu === "bambu") CloseAccountMenu();
// Best effort: the fold is a per-machine convenience, not a synced preference.
if (bPersist) { try { localStorage.setItem(BAMBU_FOLD_KEY, bExpanded ? "1" : "0"); } catch (e) {} }
}
function ToggleBambuSection() {
SetBambuSectionExpanded(!$("#BambuCloudBody").hasClass("Expanded"), true);
}
function Set_AccountMenu_Event() {
var bExpanded = false;
try { bExpanded = localStorage.getItem(BAMBU_FOLD_KEY) === "1"; } catch (e) {}
SetBambuSectionExpanded(bExpanded, false);
$(document).mousedown(function (e) {
if (m_OpenAccountMenu === null) return;
if ($(e.target).closest("#AccountMenu, .AccountRow").length === 0) CloseAccountMenu();
});
$(document).keydown(function (e) {
if (m_OpenAccountMenu !== null && e.key === "Escape") CloseAccountMenu();
});
/*----Enter and Space activate the div-based buttons of this panel----*/
$(document).on("keydown", "#LoginArea [role=button], #LoginArea [role=menuitem]", function (e) {
if (e.key !== "Enter" && e.key !== " " && e.key !== "Spacebar") return;
e.preventDefault();
this.click();
});
}
function SetMallUrl( strUrl )
@@ -279,8 +365,6 @@ function SendSimpleCommand(command) {
SendWXMessage(JSON.stringify(tSend));
}
function OnOrcaLoginOrRegister() { SendSimpleCommand("homepage_orca_login_or_register"); }
function OnOrcaLogOut() { SendSimpleCommand("homepage_orca_logout"); }
function SendMsg_GetOrcaLoginInfo() { SendSimpleCommand("get_orca_login_info"); }
@@ -294,15 +378,6 @@ function SendMsg_GetRecentFile()
}
function OnLoginOrRegister()
{
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="homepage_login_or_register";
SendWXMessage( JSON.stringify(tSend) );
}
function OnClickModelDepot()
{
var tSend={};
@@ -405,59 +480,13 @@ function OnExploreRecentFile( )
$("#recnet_context_menu").hide();
}
function OnLogOut()
{
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="homepage_logout";
// --- Cloud providers ---
SendWXMessage( JSON.stringify(tSend) );
}
function SetOrcaLoginInfo(strAvatar, strName, strAccount) { SetAccountSignedIn("orca", strAvatar, strName, strAccount); }
function SetOrcaUserOffline() { SetAccountSignedOut("orca"); }
function SetBambuLoginInfo(strAvatar, strName) { SetAccountSignedIn("bambu", strAvatar, strName, null); }
function SetBambuUserOffline() { SetAccountSignedOut("bambu"); }
// --- Bambu Cloud Section ---
function ToggleBambuSection() {
var body = document.getElementById('BambuCloudBody');
var chevron = document.querySelector('.bambu-chevron');
if (!body || !chevron) return;
bambuSectionExpanded = !bambuSectionExpanded;
if (bambuSectionExpanded) {
body.classList.add('expanded');
chevron.classList.add('expanded');
} else {
body.classList.remove('expanded');
chevron.classList.remove('expanded');
}
}
function SetBambuLoginInfo(strAvatar, strName) {
$("#BambuLogin1").hide();
$("#BambuUserName").text(strName);
if (strAvatar && strAvatar.trim() !== '') {
$("#BambuAvatarIcon").prop("src", strAvatar);
}
$("#BambuLogin2").show();
$("#BambuLogin2").css("display", "flex");
$(".bambu-status-dot").addClass("online");
$("#BambuStatusText").text("Connected");
$("#BambuStatusText").attr("tid", "orca11");
}
function SetBambuUserOffline() {
$("#BambuAvatarIcon").prop("src", "img/c.jpg");
$("#BambuUserName").text('');
$("#BambuLogin2").hide();
if ($("#NoPluginTip").is(":hidden")) {
$("#BambuLogin1").show();
$("#BambuLogin1").css("display", "flex");
}
$(".bambu-status-dot").removeClass("online");
$("#BambuStatusText").text("Not connected");
$("#BambuStatusText").attr("tid", "orca10");
}
function OnBambuLoginOrRegister() { SendSimpleCommand("homepage_bambu_login_or_register"); }
function OnBambuLogOut() { SendSimpleCommand("homepage_bambu_logout"); }
function SendMsg_GetBambuLoginInfo() { SendSimpleCommand("get_bambu_login_info"); }
function BeginDownloadNetworkPlugin()