feat: 全站 Ant Design Pro 风格重构 + 登录守卫与角色门户(issue #131/#134)
- 新增 web/shared:pro.css(AntD 5 设计系统,旧 CSS 变量统一映射 AntD 色板)、 session.js(后端优先+本地账号降级双轨会话,IAOP_AUTH 兼容层)、 pro-header.js(全站统一 Pro 导航条:logo/页题/用户角色 Tag/退出) - 门户 web/index.html:未登录跳登录页(next 回跳),登录后按角色过滤 可见模块(readonly→驾驶舱/助手/移动端;engineer→+配置台;admin→全部) - 登录页 auth/login.html 重写为 Ant Design Pro 风格,本地降级模式自动 播种演示账号(admin/engineer/viewer),保留 OIDC SSO 双轨入口 - user_store.js 新增 verify() + seedDefaults() 默认账号播种 - 六模块页统一接入 pro.css + 统一导航条 + 登录守卫(PRD 8.2) - 驾驶舱主题 dark→light(Ant Design 5 色板):renderer.py THEME_TOKENS、 ti-cl4/resin 模板 theme、告警三级配色对齐 AntD(P0 #ff4d4f/P1 #faad14/ P2 #1677ff),渲染计划已重编(build_plans.py) - 验证:core/cockpit 86 单测通过;JS 语法检查通过;静态冒烟全 200
This commit is contained in:
@@ -37,9 +37,19 @@ var UserStore = (function () {
|
||||
});
|
||||
}
|
||||
|
||||
/* 默认演示账号(Ant Design Pro 风格重构新增):纯静态部署(无 core/auth
|
||||
* 后端)时的开箱登录账号,首次进入登录页自动播种。生产环境登录后请立即
|
||||
* 在用户管理页改密或删除。密码均 ≥ 8 位(对齐 auth.js 前端校验)。 */
|
||||
var DEFAULT_ACCOUNTS = [
|
||||
{ username: "admin", password: "Admin@12345", role: "admin" },
|
||||
{ username: "engineer", password: "Engineer@12", role: "engineer" },
|
||||
{ username: "viewer", password: "Viewer@1234", role: "readonly" }
|
||||
];
|
||||
|
||||
return {
|
||||
ROLES: ROLES,
|
||||
ROLE_LABELS: ROLE_LABELS,
|
||||
DEFAULT_ACCOUNTS: DEFAULT_ACCOUNTS,
|
||||
|
||||
/* ---------- 用户 CRUD(对齐 core/auth/users.py 的 User 字段语义) ---------- */
|
||||
list: function () { return load(USERS_KEY, []); },
|
||||
@@ -91,6 +101,28 @@ var UserStore = (function () {
|
||||
return Promise.resolve();
|
||||
},
|
||||
|
||||
/* ---------- 登录校验 + 默认账号播种(纯静态部署降级,见 shared/session.js) ---------- */
|
||||
/* 校验用户名密码,成功返回 {username, role, active},失败返回 null。
|
||||
* 不区分「用户不存在/密码错误/已禁用」,防用户名枚举。 */
|
||||
verify: function (username, password) {
|
||||
var u = this.find(username);
|
||||
if (!u || !u.active) return Promise.resolve(null);
|
||||
return hashPassword(password, u.salt).then(function (h) {
|
||||
return h === u.hash ? { username: u.username, role: u.role,
|
||||
active: u.active } : null;
|
||||
});
|
||||
},
|
||||
/* 用户库为空时播种默认演示账号(幂等:已有任何用户则跳过)。 */
|
||||
seedDefaults: function () {
|
||||
var self = this;
|
||||
if (this.list().length > 0) return Promise.resolve(false);
|
||||
return DEFAULT_ACCOUNTS.reduce(function (p, acc) {
|
||||
return p.then(function () {
|
||||
return self.create(acc.username, acc.password, acc.role);
|
||||
});
|
||||
}, Promise.resolve()).then(function () { return true; });
|
||||
},
|
||||
|
||||
/* ---------- 写操作审计(template_registry._log 风格:时间/操作人/动作/资源/原因) ---------- */
|
||||
audit: function (action, resource, reason, actor) {
|
||||
var log = load(AUDIT_KEY, []);
|
||||
|
||||
Reference in New Issue
Block a user