20260915221013

This commit is contained in:
oneao committed 2026-09-15 22:10:13 +08:00
1 parent 1f56cc3efb
commit dce29f250e
54 files changed
+3732 -574

No files matched your search

+199
View File
@@ -0,0 +1,199 @@
/* ============================================================================
FMS 模块注册脚本 — 用户管理(v_b_user)
目标库:FMS
前置条件:
b_user / b_dept 已由 sql/fms_core.sql 建表(核心表,本脚本不重复建表)。
本脚本写入:
1. 查询视图 dbo.v_b_user(含派生列 v_dept_name)
2. s_module 模块行(b_id = v_b_user,挂在 system 目录下)
3. s_field 字段行(12 个)
4. s_module_schema 界面配置(view / edit / query)
5. s_menu_module 绑定(user 菜单 → v_b_user 模块),使侧栏入口具备权限范围
可重复执行:先清理本模块的元数据行,再重建。
============================================================================ */
SET NOCOUNT ON;
GO
/* ----------------------------------------------------------------------------
1. 查询视图
b_view_table 指向本视图;s_field.b_field 必须是视图中真实存在的列。
v_dept_name 为派生列(v_ 前缀约定 => 只读,不参与保存),
写库仍走 s_module.b_save_table = b_user。
---------------------------------------------------------------------------- */
create or alter view dbo.v_b_user as
-- 注意:视图刻意不含 b_password。列表接口按视图 SELECT 返回行,带上密码等于把
-- 全员口令(现为明文存储)随分页数据一起下发,抓包/DevTools 即可见。
-- 密码只在编辑表单里录入,来源于 s_field 定义,不需要出现在查询视图里。
select u.b_id,
u.b_name,
u.b_dept_id,
d.b_name as v_dept_name, -- 所属部门名称(派生,只读)
u.b_bz,
u.b_canuse,
u.b_logincount,
u.b_created_by,
u.b_created_at,
u.b_updated_by,
u.b_updated_at
from dbo.b_user u
left join dbo.b_dept d on d.b_id = u.b_dept_id;
GO
/* ----------------------------------------------------------------------------
2. 模块定义(先清理,保证可重复执行)
---------------------------------------------------------------------------- */
delete from dbo.s_menu_module where b_module_id = 'v_b_user';
GO
delete from dbo.s_module_schema where b_module_id = 'v_b_user';
GO
delete from dbo.s_field where b_module_id = 'v_b_user';
GO
delete from dbo.s_module where b_id = 'v_b_user';
GO
/* b_id 即模块编码,前端 usePermissionStore 用 b_id 做权限范围:
canPower('v_b_user', 'create') => powerSet.has('v_b_user.create')
因此 b_id 必须与 src/views/system/user/index.vue 里的 MODULE_CODE 一致。
s_module 本身是树:system 为 depth 0,本模块挂其下 depth 1。
b_order_sql 留空表示按主键默认排序。 */
insert into dbo.s_module (b_id, b_parent_id, b_depth, b_path, b_name, b_i18n, b_module_type,
b_view_table, b_save_table, b_key_field, b_order_sql, b_canuse, b_xh, b_bz)
values ('v_b_user', 'system', 1, '/system/v_b_user/', N'用户管理', 'module.v_b_user',
'data', 'v_b_user', 'b_user', 'b_id', null, 1, 10,
N'系统管理 —— 用户列表(部门树过滤由页面负责)');
GO
/* ----------------------------------------------------------------------------
3. 字段定义
b_field 必须存在于 v_b_user;b_type 决定单元格渲染与编辑器:
input / number / checkbox / datetime / date(与已有模块保持一致)
b_xh 决定默认列顺序,b_name 为中文标题。
---------------------------------------------------------------------------- */
insert into dbo.s_field (b_module_id, b_field, b_name, b_i18n, b_type, b_canuse, b_xh)
values ('v_b_user', 'b_id', N'用户编码', null, 'input', 1, 10),
('v_b_user', 'b_name', N'用户名', null, 'input', 1, 20),
('v_b_user', 'b_dept_id', N'部门编码', null, 'input', 1, 30),
('v_b_user', 'v_dept_name', N'所属部门', null, 'input', 1, 40),
-- b_type = password:编辑弹窗渲染为掩码输入框(FmsField 的 typeDefaults 提供 type=password)
('v_b_user', 'b_password', N'密码', null, 'password', 1, 50),
('v_b_user', 'b_canuse', N'是否启用', null, 'checkbox', 1, 60),
('v_b_user', 'b_logincount', N'登录次数', null, 'number', 1, 70),
('v_b_user', 'b_bz', N'备注', null, 'input', 1, 80),
('v_b_user', 'b_created_by', N'创建人', null, 'input', 1, 90),
('v_b_user', 'b_created_at', N'创建时间', null, 'datetime', 1, 100),
('v_b_user', 'b_updated_by', N'最后修改人', null, 'input', 1, 110),
('v_b_user', 'b_updated_at', N'最后修改时间', null, 'datetime', 1, 120);
GO
/* ----------------------------------------------------------------------------
4. 界面配置(s_module_schema):view / edit / query
主键为 (b_module_id, b_schema_type)。JSON 结构需与 schemaRender.js 解析一致:
view :{ schemaVersion, columns: [ { field, width } | { type:'group', title, children } ] }
edit :{ schemaVersion, children: [ { field, span, required, readonly, defaultValue }
| { type:'group', ... } ] }
query :{ schemaVersion, groups: [ { conditions: [ { field, operator } ] } ], quick: [field] }
这些是「系统默认值」;模块管理页面调整会覆盖它们,
用户个人调整另存于 s_user_module_pref。
---------------------------------------------------------------------------- */
insert into dbo.s_module_schema (b_module_id, b_schema_type, b_schema_json, b_canuse)
values ('v_b_user', 'view', N'{
"schemaVersion": 1,
"columns": [
{ "field": "b_id", "width": 140 },
{ "field": "b_name", "width": 140 },
{ "field": "v_dept_name", "width": 160 },
{ "field": "b_canuse", "width": 90 },
{ "field": "b_logincount", "width": 100 },
{ "field": "b_bz", "width": 200 },
{ "field": "b_updated_at", "width": 170 }
]
}', 1),
('v_b_user', 'edit', N'{
"schemaVersion": 1,
"children": [
{ "type": "group", "title": "基本信息", "span": 48, "children": [
{ "field": "b_id", "span": 24, "required": true },
{ "field": "b_name", "span": 24, "required": true },
{ "field": "b_dept_id", "span": 24 },
{ "field": "b_password", "span": 24, "placeholder": "新增必填;编辑时留空表示不修改" },
{ "field": "b_canuse", "span": 24, "defaultValue": 1 },
{ "field": "b_bz", "span": 48 }
] }
]
}', 1),
('v_b_user', 'query', N'{
"schemaVersion": 1,
"groups": [
{ "conditions": [
{ "field": "b_id", "operator": "like" },
{ "field": "b_name", "operator": "like" }
] }
],
"quick": ["b_id", "b_name"]
}', 1);
GO
/* ----------------------------------------------------------------------------
5. 菜单绑定(s_menu_module)
s_menu 中已存在 b_id = 'user' 的 page 菜单(b_route = /system/user)。
这里把该菜单与 v_b_user 模块关联,
使其出现在角色的「菜单权限」树中,可被授权。
若菜单不存在则跳过(不擅自新建菜单行;菜单请用「菜单管理」维护)。
---------------------------------------------------------------------------- */
if exists (select 1 from dbo.s_menu where b_id = 'user')
begin
insert into dbo.s_menu_module (b_menu_id, b_module_id, b_xh, b_canuse)
values ('user', 'v_b_user', 10, 1);
update dbo.s_menu
set b_route = '/system/user',
b_path = '/system/user/',
b_canuse = 1
where b_id = 'user';
print 's_menu_module:已绑定 user 菜单 -> v_b_user 模块';
end
else
begin
print '未发现 b_id = user 的菜单:如需侧栏入口,请在「菜单管理」新建 page 菜单,路由填 /system/user';
end
GO
/* ----------------------------------------------------------------------------
6. 自检
---------------------------------------------------------------------------- */
select N'模块 s_module' as 项, count(*) as 行数 from dbo.s_module where b_id = 'v_b_user'
union all
select N'字段 s_field', count(*) from dbo.s_field where b_module_id = 'v_b_user'
union all
select N'界面配置 s_module_schema', count(*) from dbo.s_module_schema where b_module_id = 'v_b_user'
union all
select N'菜单绑定 s_menu_module', count(*) from dbo.s_menu_module where b_module_id = 'v_b_user'
union all
select N'视图列 v_b_user', count(*) from sys.columns where object_id = object_id('dbo.v_b_user')
union all
select N'视图数据行', count(*) from dbo.v_b_user;
GO
-- 视图内容抽样(确认 v_dept_name 关联可用)
select b_id, b_name, b_dept_id, v_dept_name, b_canuse, b_logincount from dbo.v_b_user;
GO