feat(desktop-client): suppress native menu bar on Windows/Linux and support phone number login

- Add suppressNativeWindowMenu() to hide native menu bar on all windows (Win/Linux only)
- Set autoHideMenuBar: true on BrowserWindow creation as belt-and-suspenders
- Import Menu from electron/main to support menu suppression
- Login form: rename field from email to identifier, support phone number input
- Migrate saved credential key from geo_rankly_saved_email to geo_rankly_saved_identifier with fallback
- Update login error message: "邮箱或密码错误" → "账号或密码错误"
- Remove unset ELECTRON_RUN_AS_NODE from dev script (not needed on Windows)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Xu Liang
2026-05-01 18:02:00 +08:00
parent 54fc313e10
commit b7e096ae37
4 changed files with 28 additions and 10 deletions
@@ -7,10 +7,14 @@ const { apiBaseURL, error, pending, setApiBaseURL, login } = useDesktopSession()
const menuOpen = ref(false);
const showServerDialog = ref(false);
const rememberPassword = ref(!!localStorage.getItem("geo_rankly_saved_password"));
const savedIdentifier =
localStorage.getItem("geo_rankly_saved_identifier")
?? localStorage.getItem("geo_rankly_saved_email")
?? "";
const form = reactive({
apiBaseURL: apiBaseURL.value,
email: localStorage.getItem("geo_rankly_saved_email") || "",
identifier: savedIdentifier,
password: localStorage.getItem("geo_rankly_saved_password") || "",
});
@@ -49,16 +53,17 @@ function saveServerSettings() {
async function submitLogin() {
if (rememberPassword.value) {
localStorage.setItem("geo_rankly_saved_email", form.email);
localStorage.setItem("geo_rankly_saved_identifier", form.identifier);
localStorage.removeItem("geo_rankly_saved_email");
localStorage.setItem("geo_rankly_saved_password", form.password);
} else {
localStorage.removeItem("geo_rankly_saved_identifier");
localStorage.removeItem("geo_rankly_saved_email");
localStorage.removeItem("geo_rankly_saved_password");
}
await login({
identifier: form.email,
email: form.email,
identifier: form.identifier,
password: form.password,
});
await window.desktopBridge?.app?.setWindowMode?.("main", { source: "login" });
@@ -111,10 +116,10 @@ onBeforeUnmount(() => {
<form class="login-form" @submit.prevent="submitLogin">
<div class="field">
<input
v-model.trim="form.email"
type="email"
v-model.trim="form.identifier"
type="text"
autocomplete="username"
placeholder="邮箱 / 号"
placeholder="邮箱 / 手机号"
required
/>
</div>