diff --git a/src/App.vue b/src/App.vue index 6123a01..e73ab2c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -9,6 +9,9 @@ import {TabPaneName, TabsPaneContext} from "element-plus"; import YysRank from "@/components/YysRank.vue"; const filesStore = useFilesStore(); +const NEW_PROJECT_URL = 'https://fireschain.org/onmyoji-flow/'; +const REDIRECT_PROMPT_SESSION_KEY = 'yys-editor.new-project-redirect-prompted'; +const REDIRECT_PROMPT_DISABLED_KEY = 'yys-editor.new-project-redirect-disabled'; const yysRef = ref(null); const width = ref('100%'); @@ -16,6 +19,37 @@ const height = ref('100vh'); const toolbarHeight = 48; // 工具栏的高度 const windowHeight = ref(window.innerHeight); const contentHeight = computed(() => `${windowHeight.value - toolbarHeight}px`); +const showRedirectPrompt = ref(false); +const dontShowRedirectPromptAgain = ref(false); + +const rememberRedirectPromptChoice = () => { + if (dontShowRedirectPromptAgain.value) { + window.localStorage.setItem(REDIRECT_PROMPT_DISABLED_KEY, 'true'); + } +}; + +const showNewProjectRedirectPrompt = () => { + if (window.localStorage.getItem(REDIRECT_PROMPT_DISABLED_KEY) === 'true') { + return; + } + + if (window.sessionStorage.getItem(REDIRECT_PROMPT_SESSION_KEY) === 'true') { + return; + } + + window.sessionStorage.setItem(REDIRECT_PROMPT_SESSION_KEY, 'true'); + showRedirectPrompt.value = true; +}; + +const goToNewProject = () => { + rememberRedirectPromptChoice(); + window.location.assign(NEW_PROJECT_URL); +}; + +const stayOnLegacyProject = () => { + rememberRedirectPromptChoice(); + showRedirectPrompt.value = false; +}; const onResizing = (x, y, width, height) => { width.value = width; @@ -64,6 +98,7 @@ onMounted(() => { window.addEventListener('resize', () => { windowHeight.value = window.innerHeight; }); + showNewProjectRedirectPrompt(); }); onUnmounted(() => { @@ -112,6 +147,26 @@ const activeFileGroups = computed(() => { + + + yys-editor 已迁移到新项目 onmyoji-flow。新版会继续维护资源与功能,是否现在前往? + + + 以后不再提示 + + + + 继续使用旧版 + 前往新版 + + + @@ -157,4 +212,9 @@ const activeFileGroups = computed(() => { max-width: 100%; } - \ No newline at end of file +.redirect-prompt-text { + margin: 0 0 16px; + line-height: 1.7; + color: #303133; +} + diff --git a/src/components/Toolbar.vue b/src/components/Toolbar.vue index 6a633bf..35c2fdb 100644 --- a/src/components/Toolbar.vue +++ b/src/components/Toolbar.vue @@ -1,6 +1,9 @@ + + 前往新版 + {{ t('import') }} {{ t('export') }} {{ t('prepareCapture') }} @@ -87,10 +90,15 @@ import {useGlobalMessage} from "@/ts/useGlobalMessage"; const filesStore = useFilesStore(); const { showMessage } = useGlobalMessage(); +const NEW_PROJECT_URL = 'https://fireschain.org/onmyoji-flow/'; // 获取当前的 i18n 实例 const {t} = useI18n(); +const goToNewProject = () => { + window.location.assign(NEW_PROJECT_URL); +}; + // 定义响应式数据 const state = reactive({ previewImage: null, // 用于存储预览图像的数据URL @@ -393,6 +401,11 @@ const handleClose = (done) => { z-index: 100; } +.new-project-link { + font-weight: 700; + box-shadow: 0 0 0 2px rgba(82, 196, 26, 0.18); +} + .title { flex-grow: 1; text-align: center; @@ -404,4 +417,4 @@ const handleClose = (done) => { display: flex; gap: 8px; } - \ No newline at end of file +
+ yys-editor 已迁移到新项目 onmyoji-flow。新版会继续维护资源与功能,是否现在前往? +