|
|
@@ -90,7 +90,7 @@ defineOptions({
|
|
|
inheritAttrs: false,
|
|
|
});
|
|
|
|
|
|
-import { onMounted, ref } from "vue";
|
|
|
+import { onMounted, onUnmounted, ref } from "vue";
|
|
|
import { useRoute } from "vue-router";
|
|
|
import axios from "axios";
|
|
|
|
|
|
@@ -104,6 +104,17 @@ import axios from "axios";
|
|
|
*/
|
|
|
const MIN_FEN = 100;
|
|
|
|
|
|
+/**
|
|
|
+ * 顾客页的浏览器标题。**有意与后台不同**。
|
|
|
+ *
|
|
|
+ * 【为什么不能靠全局那支】全站标题由 `main.ts` 的 `setTitleAndFavicon()` 从
|
|
|
+ * `sys_web_title`(库里的系统配置)取,值是**管理端**的名字(「公司管理」)——
|
|
|
+ * 那是给操作员看的,不该出现在一位正要付钱的顾客的标签页上。
|
|
|
+ * 而且那个函数是**异步**的(要先等一次配置请求),谁先跑完不确定 ⇒
|
|
|
+ * 光在这里写还不够,`main.ts` 那侧也加了一道同名判据(见那里的注释)。
|
|
|
+ */
|
|
|
+const PAGE_TITLE = "Payment Platform";
|
|
|
+
|
|
|
type Phase = "loading" | "invalid" | "ready";
|
|
|
|
|
|
/** 只看 `code` 的最小信封形状。`Result.ok` 的成功码是 **0**(不是 200)。 */
|
|
|
@@ -251,7 +262,28 @@ async function submit() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-onMounted(loadInfo);
|
|
|
+/**
|
|
|
+ * 进页面时换成顾客页自己的标题,**离开时还原**。
|
|
|
+ *
|
|
|
+ * ★ 还原不是洁癖:这是一个 SPA,浏览器后退键会把人送回后台那一屏,
|
|
|
+ * 而 `main.ts` 只在应用启动时设一次标题 —— 不还原的话,后台的标签页会一直挂着
|
|
|
+ * 「Payment Platform」,而那个名字对操作员没有任何意义。
|
|
|
+ * ★ 自己之前的标题由**自己**存一份再写回(不是写死一个常量回填):将来若全站标题
|
|
|
+ * 改成从别处来,这里不需要跟着改。
|
|
|
+ */
|
|
|
+let titleBefore: string | null = null;
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ titleBefore = document.title;
|
|
|
+ document.title = PAGE_TITLE;
|
|
|
+ loadInfo();
|
|
|
+});
|
|
|
+
|
|
|
+onUnmounted(() => {
|
|
|
+ if (titleBefore !== null) {
|
|
|
+ document.title = titleBefore;
|
|
|
+ }
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|