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}`;
`,
bindEvent(modelMainElement: HTMLElement) {
- modelMainElement.querySelector("#logout").addEventListener(getEventName(), () => {
- fetchPost("/api/setting/logoutCloudUser", {}, () => {
- window.siyuan.user = null;
- closePanel();
- document.getElementById("menuAccount").innerHTML = ``;
- 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 = ``;
- } else {
- menuAccountElement.innerHTML = ``;
+ 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 = ``;
+ 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 = ``;
+ } else {
+ menuAccountElement.innerHTML = ``;
+ }
+ 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: {