import { ref } from 'vue';
|
import { defineStore } from 'pinia';
|
|
import {
|
getCompanyConfig,
|
saveCompanyConfig as saveCompanyConfigApi,
|
} from '#/api/system/company-config';
|
import { applyCompanyConfig } from '#/utils/company-config';
|
|
/**
|
* 公司品牌信息全局配置
|
*
|
* 启动时从后端加载,保存时写回后端;并将公司名/logo 同步到 preferences,
|
* 从而联动登录页、菜单栏、网页标题等所有消费点。
|
*/
|
export const useCompanyConfigStore = defineStore('companyConfig', () => {
|
const companyName = ref('');
|
const logoUrl = ref('');
|
const loginTitle = ref('');
|
const loginDescription = ref('');
|
|
/** 将公司信息应用到 preferences,联动登录页/菜单栏/标题 */
|
function applyToPreferences() {
|
applyCompanyConfig({
|
companyName: companyName.value,
|
logoUrl: logoUrl.value,
|
});
|
}
|
|
/** 从后端加载公司配置并应用 */
|
async function loadFromServer() {
|
try {
|
const config = await getCompanyConfig();
|
if (config) {
|
companyName.value = config.companyName ?? '';
|
logoUrl.value = config.logoUrl ?? '';
|
loginTitle.value = config.loginTitle ?? '';
|
loginDescription.value = config.loginDescription ?? '';
|
applyToPreferences();
|
}
|
} catch {
|
// 后端不可用或未配置,保持编译期默认
|
}
|
}
|
|
/** 保存公司配置到后端并应用 */
|
async function save(data: {
|
companyName: string;
|
logoUrl?: string;
|
logoBlobId?: number;
|
loginTitle?: string;
|
loginDescription?: string;
|
}) {
|
await saveCompanyConfigApi(data);
|
companyName.value = data.companyName;
|
logoUrl.value = data.logoUrl ?? '';
|
loginTitle.value = data.loginTitle ?? '';
|
loginDescription.value = data.loginDescription ?? '';
|
applyToPreferences();
|
}
|
|
return {
|
companyName,
|
logoUrl,
|
loginTitle,
|
loginDescription,
|
applyToPreferences,
|
loadFromServer,
|
save,
|
};
|
});
|