feat: 初始化 WWJ Cloud 企业级框架项目

- 后端:基于 NestJS 的分层架构设计
- 前端:基于 VbenAdmin + Element Plus 的管理系统
- 支持 SaaS + 独立版双架构模式
- 完整的用户权限管理系统
- 系统设置、文件上传、通知等核心功能
- 多租户支持和插件化扩展架构
This commit is contained in:
万物街
2025-08-23 13:20:01 +08:00
commit f30d64e6cc
172 changed files with 10179 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
import * as fs from 'fs';
import * as path from 'path';
import { Injectable } from '@nestjs/common';
import type { LoginSettingsVo } from './login-settings.dto';
const SETTINGS_DIR = path.resolve(process.cwd(), 'config', 'runtime');
const SETTINGS_FILE = path.resolve(SETTINGS_DIR, 'login.settings.json');
const DEFAULT_SETTINGS: LoginSettingsVo = {
isCaptcha: false,
bg: '',
isSiteCaptcha: false,
siteBg: '',
};
@Injectable()
export class LoginSettingsService {
async getSettings(): Promise<LoginSettingsVo> {
try {
const buf = await fs.promises.readFile(SETTINGS_FILE, 'utf8');
const json = JSON.parse(buf);
return { ...DEFAULT_SETTINGS, ...json } as LoginSettingsVo;
} catch {
return { ...DEFAULT_SETTINGS };
}
}
async updateSettings(patch: Partial<LoginSettingsVo>): Promise<LoginSettingsVo> {
const current = await this.getSettings();
const next: LoginSettingsVo = { ...current, ...patch };
await fs.promises.mkdir(SETTINGS_DIR, { recursive: true });
await fs.promises.writeFile(SETTINGS_FILE, JSON.stringify(next, null, 2), 'utf8');
return next;
}
static getSettingsPath() {
return SETTINGS_FILE;
}
}