20260728225443
This commit is contained in:
1 parent
5ec7aadef9
commit
f6b79ea09a
30 files changed
+1541
-1120
No files matched your search
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user