20260728225443

This commit is contained in:
oneao committed 2026-07-28 22:54:43 +08:00
1 parent 5ec7aadef9
commit f6b79ea09a
30 files changed
+1541 -1120

No files matched your search

+81 -4
View File
@@ -1,12 +1,19 @@
import { ref } from "vue";
import { defineStore } from "pinia";
import { loadDataApi } from "@/services/api";
const createDefaultVisitedTabs = () => [{ key: "/dashboard", label: "工作台", closable: false }];
const createDefaultVisitedTabs = () => [
{ key: "/dashboard", label: "工作台", i18nKey: "common.dashboard", closable: false },
];
export const useAppStore = defineStore(
"app",
() => {
const locale = ref("zh-CN");
const locale = ref("");
const languages = ref([]);
const languagesLoading = ref(false);
const translations = ref({});
const translationLoading = ref(false);
const sidebarCollapsed = ref(false);
const visitedTabs = ref(createDefaultVisitedTabs());
const contentMaximized = ref(false);
@@ -29,8 +36,71 @@ export const useAppStore = defineStore(
return routeRefreshKeys.value[String(routeKey || "")] || 0;
}
function setLocale(value) {
locale.value = value;
async function loadLanguages() {
if (languagesLoading.value) return;
languagesLoading.value = true;
try {
const response = await loadDataApi(
"b_i18n_type",
"b_canuse = 1",
"b_default DESC, b_xh ASC, b_id ASC",
[],
);
languages.value = response.data || [];
let selectedLanguage = languages.value.find(
(item) => String(item.b_code) === String(locale.value),
);
if (!selectedLanguage) {
const defaultLanguage = languages.value.find((item) => Number(item.b_default) === 1);
selectedLanguage = defaultLanguage || languages.value[0];
}
const code = String(selectedLanguage?.b_code || "");
await loadTranslations(code);
locale.value = code;
} finally {
languagesLoading.value = false;
}
}
async function loadTranslations(code) {
if (!code) {
translations.value = {};
return;
}
translationLoading.value = true;
try {
const escapedCode = String(code).replaceAll("'", "''");
const response = await loadDataApi(
"b_i18n",
`b_locale = N'${escapedCode}'`,
"b_key ASC",
[],
);
const values = {};
for (const item of response.data || []) {
if (item.b_key) values[item.b_key] = item.b_value;
}
translations.value = values;
} finally {
translationLoading.value = false;
}
}
async function setLocale(value) {
const code = String(value || "");
const exists = languages.value.some((item) => String(item.b_code) === code);
if (!exists) return;
await loadTranslations(code);
locale.value = code;
}
function t(key, fallback = "") {
const value = translations.value[String(key || "")];
if (value !== undefined && value !== null && value !== "") return value;
return fallback || String(key || "");
}
function addVisitedTab(tab) {
@@ -46,6 +116,10 @@ export const useAppStore = defineStore(
return {
locale,
languages,
languagesLoading,
translations,
translationLoading,
sidebarCollapsed,
visitedTabs,
contentMaximized,
@@ -54,6 +128,9 @@ export const useAppStore = defineStore(
refreshRoute,
getRouteRefreshKey,
setLocale,
loadLanguages,
loadTranslations,
t,
addVisitedTab,
removeVisitedTab,
};
@@ -127,6 +127,7 @@ export const usePermissionStore = defineStore("permissions", () => {
canAccess,
canPower,
clear,
modules,
grantedPageIds,
moduleCodes,
powerCodes,