mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-06-05 07:30:29 +08:00
* feat(i18n): enhance locale handling and routing - Implemented dynamic locale aliases in router configuration. - Added support for preferred locale storage in global state. - Improved locale resolution logic in router beforeEach guard. - Created utility functions for locale management and path manipulation. - Added tests for locale matching and message extraction. - Updated Header component to allow language selection. - Refactored getRouterPathWithLang to utilize new locale utilities. - Updated Vite configuration to support aliasing for vue-i18n. - Bumped version numbers across various packages to 1.9.0. * feat(i18n): update version to 1.8.0 and enhance locale handling - Updated version numbers across all package.json files to 1.8.0. - Enhanced locale handling in App.vue by centralizing locale configurations. - Improved Turnstile component to support dynamic language rendering. - Refactored i18n utilities to include initial locale setup and empty locale messages. - Updated i18n.ts to utilize the new locale management structure. - Added naive-locale.ts for better integration with Naive UI's locale handling. - Adjusted Header.vue to streamline language selection and locale changes. - Fixed translations in multiple locale files for consistency and accuracy. * fix(i18n): address review feedback * feat(i18n): update default locale to English and enhance language handling in components * fix(i18n): switch locale selector to dropdown * docs: add topbar language and github order design spec * fix(i18n): 修复 Header 语言切换器相关问题,恢复为独立控件并调整样式 * Refactor locale handling in router and add locale-guard utility functions - Improved locale resolution logic in router by introducing utility functions for better readability and maintainability. - Added `locale-guard.js` to encapsulate locale-related functions such as getting route locale, resolving locale for navigation, and applying locale navigation state. - Updated JWT synchronization logic to streamline the handling of JWT from query parameters. - Modified i18n messages test to check for coverage of registered locale message keys instead of extracting English source messages. * 删除顶部栏语言和GitHub顺序设计文档 * fix: 修复前端设置初始化时未返回 domains 数组导致的 undefined 错误 * refactor(i18n): consolidate locale infrastructure * fix(i18n): stabilize locale route switching * fix(i18n): persist default locale selection * fix(i18n): 修复前端设置初始化时未返回 domains 数组导致的 undefined 错误,统一按空数组兜底处理 feat(i18n): 添加 locale 别名处理,支持默认语言的重定向 test(i18n): 增加对默认语言别名重定向的测试用例 * refactor: replace useAppI18n with useScopedI18n in multiple components for improved localization management * fix(tests): 移除不必要的 URL 断言以简化 Passkey 测试 * fix(i18n): 更新语言切换逻辑,确保使用当前语言设置进行路由导航 * fix(i18n): 强制路由切换以确保语言切换后正确导航 * refactor(i18n): 优化消息注册和路由本地化逻辑,移除冗余代码 * refactor(i18n): 拆分 API 文件以优化路由管理,更新语言处理逻辑 * fix: align i18n release notes and frontend test script
89 lines
2.5 KiB
Vue
89 lines
2.5 KiB
Vue
<script setup lang="ts">
|
|
import { onMounted, ref } from 'vue'
|
|
import { useScopedI18n } from '@/i18n/app'
|
|
|
|
// @ts-ignore
|
|
import { useGlobalState } from '../../store'
|
|
// @ts-ignore
|
|
import { api } from '../../api'
|
|
// @ts-ignore
|
|
const message = useMessage()
|
|
|
|
const { t } = useScopedI18n('views.admin.Webhook')
|
|
|
|
class WebhookSettings {
|
|
enableAllowList: boolean;
|
|
allowList: string[];
|
|
|
|
constructor(enableAllowList: boolean, allowList: string[]) {
|
|
this.enableAllowList = enableAllowList;
|
|
this.allowList = allowList;
|
|
}
|
|
}
|
|
|
|
const webhookSettings = ref(new WebhookSettings(false, []))
|
|
const webhookEnabled = ref(false)
|
|
const errorInfo = ref('')
|
|
|
|
const getSettings = async () => {
|
|
try {
|
|
const res = await api.fetch(`/admin/webhook/settings`)
|
|
Object.assign(webhookSettings.value, res)
|
|
webhookEnabled.value = true
|
|
} catch (error) {
|
|
errorInfo.value = (error as Error).message || "error";
|
|
}
|
|
}
|
|
|
|
const saveSettings = async () => {
|
|
try {
|
|
await api.fetch(`/admin/webhook/settings`, {
|
|
method: 'POST',
|
|
body: JSON.stringify(webhookSettings.value),
|
|
})
|
|
message.success(t('successTip'))
|
|
} catch (error) {
|
|
message.error((error as Error).message || "error");
|
|
}
|
|
}
|
|
|
|
onMounted(async () => {
|
|
await getSettings();
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<div class="center">
|
|
<n-card v-if="webhookEnabled" :bordered="false" embedded style="max-width: 800px; overflow: auto;">
|
|
<n-flex justify="end">
|
|
<n-button @click="saveSettings" type="primary">
|
|
{{ t('save') }}
|
|
</n-button>
|
|
</n-flex>
|
|
<n-form-item-row :label="t('enableAllowList')">
|
|
<n-switch v-model:value="webhookSettings.enableAllowList" :round="false" />
|
|
</n-form-item-row>
|
|
<n-form-item-row :label="t('webhookAllowList')">
|
|
<n-select v-model:value="webhookSettings.allowList" filterable multiple tag
|
|
:placeholder="t('webhookAllowList')">
|
|
<template #empty>
|
|
<n-text depth="3">
|
|
{{ t('manualInputPrompt') }}
|
|
</n-text>
|
|
</template>
|
|
</n-select>
|
|
</n-form-item-row>
|
|
</n-card>
|
|
<n-result v-else status="404" :title="t('notEnabled')" :description="errorInfo" />
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.center {
|
|
display: flex;
|
|
text-align: left;
|
|
place-items: center;
|
|
justify-content: center;
|
|
}
|
|
</style>
|