From 66094077ebc6caca2bb4ed293cd0914449aab45b Mon Sep 17 00:00:00 2001 From: Vanessa Date: Wed, 19 Mar 2025 11:55:07 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/14159 --- app/src/mobile/settings/account.ts | 148 ++++++++++++++++++----------- app/src/mobile/util/keydown.ts | 3 +- app/src/types/index.d.ts | 1 + 3 files changed, 94 insertions(+), 58 deletions(-) diff --git a/app/src/mobile/settings/account.ts b/app/src/mobile/settings/account.ts index 7193cd83d..0d7899929 100644 --- a/app/src/mobile/settings/account.ts +++ b/app/src/mobile/settings/account.ts @@ -1,5 +1,5 @@ import {openModel} from "../menu/model"; -import {getEventName, isIPhone} from "../../protyle/util/compatibility"; +import {isInIOS, isIPhone} from "../../protyle/util/compatibility"; import {fetchPost} from "../../util/fetch"; import {closePanel} from "../util/closePanel"; import {processSync} from "../../dialog/processSystem"; @@ -12,17 +12,35 @@ import {hideElements} from "../../protyle/ui/hideElements"; import {Constants} from "../../constants"; export const showAccountInfo = () => { - const hideIphone = isIPhone() ? " fn__none" : ""; - const payHTML = ` + const isIOS = isInIOS(); + let payHTML; + if (isIOS) { + // 已付费 + if (window.siyuan.user?.userSiYuanOneTimePayStatus === 1) { + payHTML = `` + } else { + payHTML = ` +
+` + } + } else { + payHTML = `
${window.siyuan.languages[window.siyuan.user?.userSiYuanOneTimePayStatus === 1 ? "account4" : "account1"]} - -
+` + } + payHTML += `
${window.siyuan.languages.freeSub}
- + ${window.siyuan.languages.sponsor} `; @@ -45,7 +63,7 @@ export const showAccountInfo = () => { ${window.siyuan.languages.account6} ${Math.max(0, Math.floor((window.siyuan.user.userSiYuanProExpireTime - new Date().getTime()) / 1000 / 60 / 60 / 24))} ${window.siyuan.languages.day} - ${window.siyuan.languages.clickMeToRenew} + ${isIOS ? `${window.siyuan.languages.clickMeToRenew}` : ` ${window.siyuan.languages.clickMeToRenew}`} `; if (window.siyuan.user.userSiYuanOneTimePayStatus === 1) { subscriptionHTML = `
${window.siyuan.languages.onepay}
@@ -87,8 +105,8 @@ ${renewHTML}`;
- ${window.siyuan.languages.manage} - + ${window.siyuan.languages.manage} + @@ -103,53 +121,69 @@ ${renewHTML}`;
`, bindEvent(modelMainElement: HTMLElement) { - modelMainElement.querySelector("#logout").addEventListener(getEventName(), () => { - fetchPost("/api/setting/logoutCloudUser", {}, () => { - window.siyuan.user = null; - closePanel(); - document.getElementById("menuAccount").innerHTML = `${window.siyuan.languages.login}`; - processSync(); - }); - }); - modelMainElement.querySelector("#deactivateUser").addEventListener("click", () => { - const dialog = new Dialog({ - title: "⚠️ " + window.siyuan.languages.deactivateUser, - width: "92vw", - content: getLoginHTML(true), - }); - bindLoginEvent(dialog.element.querySelector(".b3-dialog__body"), true); - dialog.element.setAttribute("data-key", Constants.DIALOG_DEACTIVATEUSER); - }); - const trialSubElement = modelMainElement.querySelector("#trialSub"); - if (trialSubElement) { - trialSubElement.addEventListener("click", () => { - fetchPost("/api/account/startFreeTrial", {}, () => { - modelMainElement.querySelector("#refresh").dispatchEvent(new Event("click")); - }); - }); - } - const refreshElement = modelMainElement.querySelector("#refresh"); - refreshElement.addEventListener("click", () => { - const svgElement = refreshElement.firstElementChild; - if (svgElement.classList.contains("fn__rotate")) { - return; - } - svgElement.classList.add("fn__rotate"); - fetchPost("/api/setting/getCloudUser", { - token: window.siyuan.user.userToken, - }, response => { - window.siyuan.user = response.data; - showMessage(window.siyuan.languages.refreshUser, 3000); - showAccountInfo(); - const menuAccountElement = document.getElementById("menuAccount"); - if (window.siyuan.user) { - menuAccountElement.innerHTML = `${window.siyuan.user.userName}`; - } else { - menuAccountElement.innerHTML = `${window.siyuan.languages.login}`; + modelMainElement.addEventListener("click", (event) => { + let target = event.target as HTMLElement; + while (target && !target.isSameNode(modelMainElement)) { + if (target.getAttribute("data-action") === "iOSPay") { + window.webkit.messageHandlers.purchase.postMessage(`${window.siyuan.user.userId}-${target.getAttribute("data-type")}-${window.siyuan.config.cloudRegion}`); + event.preventDefault(); + event.stopPropagation() + break; + } else if (target.id === "logout") { + fetchPost("/api/setting/logoutCloudUser", {}, () => { + window.siyuan.user = null; + closePanel(); + document.getElementById("menuAccount").innerHTML = `${window.siyuan.languages.login}`; + processSync(); + }); + event.preventDefault() + event.stopPropagation() + break; + } else if (target.id === "deactivateUser") { + const dialog = new Dialog({ + title: "⚠️ " + window.siyuan.languages.deactivateUser, + width: "92vw", + content: getLoginHTML(true), + }); + bindLoginEvent(dialog.element.querySelector(".b3-dialog__body"), true); + dialog.element.setAttribute("data-key", Constants.DIALOG_DEACTIVATEUSER); + event.preventDefault() + event.stopPropagation() + break; + } else if (target.id === "trialSub") { + fetchPost("/api/account/startFreeTrial", {}, () => { + modelMainElement.querySelector("#refresh").dispatchEvent(new Event("click")); + }); + event.preventDefault() + event.stopPropagation() + break; + } else if (target.id === "refresh") { + const svgElement = target.firstElementChild; + if (svgElement.classList.contains("fn__rotate")) { + return; + } + svgElement.classList.add("fn__rotate"); + fetchPost("/api/setting/getCloudUser", { + token: window.siyuan.user.userToken, + }, response => { + window.siyuan.user = response.data; + showMessage(window.siyuan.languages.refreshUser, 3000); + showAccountInfo(); + const menuAccountElement = document.getElementById("menuAccount"); + if (window.siyuan.user) { + menuAccountElement.innerHTML = `${window.siyuan.user.userName}`; + } else { + menuAccountElement.innerHTML = `${window.siyuan.languages.login}`; + } + processSync(); + }); + event.preventDefault() + event.stopPropagation() + break; } - processSync(); - }); - }); + target = target.parentElement; + } + }) } }); }; @@ -159,7 +193,7 @@ const getLoginHTML = (deactivate = false) => { if (deactivate) { confirmHTML = `
- +
@@ -174,7 +208,7 @@ const getLoginHTML = (deactivate = false) => {
- +
diff --git a/app/src/mobile/util/keydown.ts b/app/src/mobile/util/keydown.ts index b97328c15..86406ec6c 100644 --- a/app/src/mobile/util/keydown.ts +++ b/app/src/mobile/util/keydown.ts @@ -5,7 +5,8 @@ import {getCurrentEditor} from "../editor"; import {filterHotkey} from "../../boot/globalEvent/commonHotkey"; export const mobileKeydown = (app: App, event: KeyboardEvent) => { - if (filterHotkey(event, app)) { + // 移动端输入框默认填充无 event.key + if (!event.key || filterHotkey(event, app)) { return; } const protyle = getCurrentEditor().protyle; diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index d1a554bcc..ef72c8161 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -186,6 +186,7 @@ interface Window { startKernelFast: { postMessage: (url: string) => void } changeStatusBar: { postMessage: (url: string) => void } setClipboard: { postMessage: (url: string) => void } + purchase: { postMessage: (url: string) => void } } } htmlToImage: {