weaver-e10-builder 1.7.0 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icon-names.txt +7438 -0
- package/dist/cli-register.d.ts.map +1 -1
- package/dist/cli-register.js +16 -3
- package/dist/cli-register.js.map +1 -1
- package/dist/commands/app-manager.d.ts +8 -0
- package/dist/commands/app-manager.d.ts.map +1 -0
- package/dist/commands/app-manager.js +330 -0
- package/dist/commands/app-manager.js.map +1 -0
- package/dist/commands/app-setting.d.ts +8 -0
- package/dist/commands/app-setting.d.ts.map +1 -0
- package/dist/commands/app-setting.js +170 -0
- package/dist/commands/app-setting.js.map +1 -0
- package/dist/commands/connector.d.ts +7 -0
- package/dist/commands/connector.d.ts.map +1 -0
- package/dist/commands/connector.js +163 -0
- package/dist/commands/connector.js.map +1 -0
- package/dist/commands/form-association-manage.d.ts.map +1 -1
- package/dist/commands/form-association-manage.js +57 -4
- package/dist/commands/form-association-manage.js.map +1 -1
- package/dist/commands/form-association.d.ts.map +1 -1
- package/dist/commands/form-association.js +4 -2
- package/dist/commands/form-association.js.map +1 -1
- package/dist/commands/form-button-actions-cmd.d.ts.map +1 -1
- package/dist/commands/form-button-actions-cmd.js +180 -18
- package/dist/commands/form-button-actions-cmd.js.map +1 -1
- package/dist/commands/form-button-props-cmd.d.ts.map +1 -1
- package/dist/commands/form-button-props-cmd.js +4 -0
- package/dist/commands/form-button-props-cmd.js.map +1 -1
- package/dist/commands/form-button.d.ts.map +1 -1
- package/dist/commands/form-button.js +11 -0
- package/dist/commands/form-button.js.map +1 -1
- package/dist/commands/form-permission.d.ts.map +1 -1
- package/dist/commands/form-permission.js +310 -84
- package/dist/commands/form-permission.js.map +1 -1
- package/dist/commands/icon.d.ts.map +1 -1
- package/dist/commands/icon.js +63 -1
- package/dist/commands/icon.js.map +1 -1
- package/dist/commands/menu-config.d.ts +3 -0
- package/dist/commands/menu-config.d.ts.map +1 -0
- package/dist/commands/menu-config.js +93 -0
- package/dist/commands/menu-config.js.map +1 -0
- package/dist/commands/menu-permission.d.ts.map +1 -1
- package/dist/commands/menu-permission.js +6 -7
- package/dist/commands/menu-permission.js.map +1 -1
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +2 -5
- package/dist/commands/menu.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +1 -1
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/date_trigger.js +1 -1
- package/dist/services/actionflow/components/date_trigger.js.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +4 -4
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/meeting_create.js +2 -1
- package/dist/services/actionflow/components/meeting_create.js.map +1 -1
- package/dist/services/actionflow/components/output.d.ts.map +1 -1
- package/dist/services/actionflow/components/output.js +2 -0
- package/dist/services/actionflow/components/output.js.map +1 -1
- package/dist/services/actionflow/context_discovery.d.ts.map +1 -1
- package/dist/services/actionflow/context_discovery.js +3 -0
- package/dist/services/actionflow/context_discovery.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +0 -10
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/date_trigger_field.d.ts +3 -0
- package/dist/services/actionflow/date_trigger_field.d.ts.map +1 -0
- package/dist/services/actionflow/date_trigger_field.js +23 -0
- package/dist/services/actionflow/date_trigger_field.js.map +1 -0
- package/dist/services/actionflow/form_source.d.ts +1 -1
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +9 -1
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +4 -12
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/generation_service.d.ts.map +1 -1
- package/dist/services/actionflow/generation_service.js +2 -1
- package/dist/services/actionflow/generation_service.js.map +1 -1
- package/dist/services/actionflow/loop_context.d.ts.map +1 -1
- package/dist/services/actionflow/loop_context.js +17 -0
- package/dist/services/actionflow/loop_context.js.map +1 -1
- package/dist/services/actionflow/meeting_secret_level.d.ts +5 -0
- package/dist/services/actionflow/meeting_secret_level.d.ts.map +1 -0
- package/dist/services/actionflow/meeting_secret_level.js +49 -0
- package/dist/services/actionflow/meeting_secret_level.js.map +1 -0
- package/dist/services/actionflow/preflight_service.d.ts +2 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +212 -4
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
- package/dist/services/actionflow/readback_verifier.js +22 -0
- package/dist/services/actionflow/readback_verifier.js.map +1 -1
- package/dist/services/actionflow/runtime_metadata.d.ts +2 -1
- package/dist/services/actionflow/runtime_metadata.d.ts.map +1 -1
- package/dist/services/actionflow/runtime_metadata.js +6 -1
- package/dist/services/actionflow/runtime_metadata.js.map +1 -1
- package/dist/services/actionflow/update_service.d.ts.map +1 -1
- package/dist/services/actionflow/update_service.js +42 -1
- package/dist/services/actionflow/update_service.js.map +1 -1
- package/dist/services/actionflow/webhook_response_context.d.ts +7 -0
- package/dist/services/actionflow/webhook_response_context.d.ts.map +1 -0
- package/dist/services/actionflow/webhook_response_context.js +82 -0
- package/dist/services/actionflow/webhook_response_context.js.map +1 -0
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +67 -35
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/app-manager.d.ts +128 -0
- package/dist/services/app-manager.d.ts.map +1 -0
- package/dist/services/app-manager.js +420 -0
- package/dist/services/app-manager.js.map +1 -0
- package/dist/services/app-setting.d.ts +109 -0
- package/dist/services/app-setting.d.ts.map +1 -0
- package/dist/services/app-setting.js +410 -0
- package/dist/services/app-setting.js.map +1 -0
- package/dist/services/esb-interface/connector-lock.d.ts +42 -0
- package/dist/services/esb-interface/connector-lock.d.ts.map +1 -0
- package/dist/services/esb-interface/connector-lock.js +79 -0
- package/dist/services/esb-interface/connector-lock.js.map +1 -0
- package/dist/services/esb-interface/connector-update.d.ts +34 -0
- package/dist/services/esb-interface/connector-update.d.ts.map +1 -0
- package/dist/services/esb-interface/connector-update.js +58 -0
- package/dist/services/esb-interface/connector-update.js.map +1 -0
- package/dist/services/form-association.d.ts +28 -1
- package/dist/services/form-association.d.ts.map +1 -1
- package/dist/services/form-association.js +232 -2
- package/dist/services/form-association.js.map +1 -1
- package/dist/services/form-button-action.d.ts +48 -2
- package/dist/services/form-button-action.d.ts.map +1 -1
- package/dist/services/form-button-action.js +68 -2
- package/dist/services/form-button-action.js.map +1 -1
- package/dist/services/form-field-options.d.ts +45 -0
- package/dist/services/form-field-options.d.ts.map +1 -0
- package/dist/services/form-field-options.js +179 -0
- package/dist/services/form-field-options.js.map +1 -0
- package/dist/services/form-permission-archive.d.ts +1 -0
- package/dist/services/form-permission-archive.d.ts.map +1 -1
- package/dist/services/form-permission-archive.js +3 -3
- package/dist/services/form-permission-archive.js.map +1 -1
- package/dist/services/form-permission-edit.d.ts +36 -0
- package/dist/services/form-permission-edit.d.ts.map +1 -1
- package/dist/services/form-permission-edit.js +77 -1
- package/dist/services/form-permission-edit.js.map +1 -1
- package/dist/services/icon-catalog.d.ts +60 -0
- package/dist/services/icon-catalog.d.ts.map +1 -0
- package/dist/services/icon-catalog.js +175 -0
- package/dist/services/icon-catalog.js.map +1 -0
- package/dist/services/icon-path.d.ts +2 -0
- package/dist/services/icon-path.d.ts.map +1 -1
- package/dist/services/icon-path.js +4 -0
- package/dist/services/icon-path.js.map +1 -1
- package/dist/services/menu-config.d.ts +42 -0
- package/dist/services/menu-config.d.ts.map +1 -0
- package/dist/services/menu-config.js +174 -0
- package/dist/services/menu-config.js.map +1 -0
- package/dist/services/menu-permission-config.d.ts +47 -0
- package/dist/services/menu-permission-config.d.ts.map +1 -0
- package/dist/services/menu-permission-config.js +222 -0
- package/dist/services/menu-permission-config.js.map +1 -0
- package/package.json +1 -1
- package/skill-docs/SKILL.md +193 -188
- package/skill-docs/_catalog.md +5 -1
- package/skill-docs/actionflows/SKILL.md +195 -193
- package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +2 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +5 -1
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +80 -80
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +75 -75
- package/skill-docs/actionflows/references/components/ebuilder/DateTrigger.md +2 -0
- package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +113 -111
- package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +2 -0
- package/skill-docs/actionflows/references/condition_rules.md +100 -100
- package/skill-docs/references/app/guide-app-manager.md +93 -0
- package/skill-docs/references/app/guide-app-settings.md +93 -0
- package/skill-docs/references/common/guide-install.md +2 -0
- package/skill-docs/references/common/ref-cli-commands.md +22 -7
- package/skill-docs/references/form/guide-form-association.md +36 -0
- package/skill-docs/references/form/guide-form-button.md +22 -1
- package/skill-docs/references/form/guide-form-permission.md +17 -5
- package/skill-docs/references/menu/guide-menu-config.md +130 -0
- package/skill-docs/references/menu/guide-menu-permission.md +94 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { isOrgBrowseKind, resolveOrgSubject } from './org-browser.js';
|
|
3
|
+
import { readMenuConfig, menuPermissions } from './menu-config.js';
|
|
4
|
+
function check(v, m) { if (!v)
|
|
5
|
+
throw Error(m); }
|
|
6
|
+
function ack(r) { check(r?.code === 200 && r.status === true && !r.fail && r.data !== false, r?.msg || '菜单权限保存失败'); return r; }
|
|
7
|
+
function data(r) { check(r?.code === 200 && r.status === true && !r.fail && r.data !== undefined && r.data !== false, r?.msg || '菜单权限接口失败'); return r.data; }
|
|
8
|
+
const definitions = {
|
|
9
|
+
resource: { code: 1, entity: 'user', key: 'obj_id' }, grade: { code: 0, entity: 'grade', key: 'obj_id_grade' },
|
|
10
|
+
department: { code: 2, entity: 'dept', key: 'obj_id_department' }, subcompany: { code: 5, entity: 'subcompany', key: 'obj_id_subcompany' },
|
|
11
|
+
role: { code: 10, entity: 'role', key: 'obj_id_role' }, position: { code: 1311, entity: 'position', key: 'obj_id_position' },
|
|
12
|
+
group: { code: 1411, entity: 'group', key: 'obj_id_group' }, external: { code: 110, entity: 'external', key: 'obj_id_external' },
|
|
13
|
+
all: { code: 11, entity: 'all', key: 'obj_id' }, allExternal: { code: 1101, entity: 'allExternal', key: 'obj_id_allExternal' },
|
|
14
|
+
};
|
|
15
|
+
export async function menuPermissionSchema(c, b, id, scope) {
|
|
16
|
+
const form = data(await c.post(b + '/api/cusapp/app/component/data/permission/form/query', { browserMultiple: true, sourceId: id, permissionId: 'sys_view', permissionType: scope, sourceType: 1 }));
|
|
17
|
+
check(Array.isArray(form?.items?.objType?.options), '权限表单缺少类型');
|
|
18
|
+
return { form, security: data(await c.get(b + '/api/hrm/common/querySecelInfo')), structuredTypes: Object.keys(definitions), nativeTypes: form.items.objType.options.filter((o) => !o.disabled && !definitions[o.id]).map((o) => o.id) };
|
|
19
|
+
}
|
|
20
|
+
function browserItem(form, type) {
|
|
21
|
+
const keys = Object.keys(form.items).filter(k => k === (definitions[type]?.key || 'obj_id_' + type));
|
|
22
|
+
const item = form.items[keys[0]];
|
|
23
|
+
check(item?.browserBean, `类型 ${type} 无对象浏览器`);
|
|
24
|
+
return item.browserBean;
|
|
25
|
+
}
|
|
26
|
+
export async function menuPermissionBrowse(c, b, menu, scope, type, operation, query = {}) {
|
|
27
|
+
const { form } = await menuPermissionSchema(c, b, menu, scope);
|
|
28
|
+
check(form.items.objType.options.some((o) => o.id === type && !o.disabled), '当前权限表单未开放此类型');
|
|
29
|
+
check(['associate', 'complete', 'prop', 'condition', 'data', 'count', 'leftData', 'destData'].includes(operation), '浏览操作无效');
|
|
30
|
+
const bean = browserItem(form, type);
|
|
31
|
+
check(/^[\w/]+$/.test(bean.module) && /^[\w]+$/.test(bean.type), '浏览器模块或类型无效');
|
|
32
|
+
const params = { browserMultiple: true, ...(bean.commonParams || {}), ...(operation === 'complete' ? { newly: 1, searchValue: '' } : {}), ...(operation === 'data' ? { current: 1, pageSize: 20, formDatas: {}, quickSearchDatas: {}, type: 'and' } : {}), ...query };
|
|
33
|
+
const path = `${b}/api/${bean.module}/common/browser/${operation}/${bean.type}`;
|
|
34
|
+
try {
|
|
35
|
+
return data(await c.post(path, params));
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (!isOrgBrowseKind(type) || operation !== 'destData' || typeof query.selectIds !== 'string' || !/^\d+$/.test(query.selectIds))
|
|
39
|
+
throw error;
|
|
40
|
+
const hit = await resolveOrgSubject(c, b, type, query.selectIds);
|
|
41
|
+
check(hit, '组织对象未找到');
|
|
42
|
+
return [hit];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function compileMenuPermission(form, menuId, scope, input, item) {
|
|
46
|
+
check(input && typeof input === 'object' && !Array.isArray(input), '权限配置需对象');
|
|
47
|
+
check(Object.keys(input).every(k => ['type', 'id', 'roleLevel', 'positionLevel', 'attributes', 'positionAttributes', 'security', 'subcompanies', 'departments', 'position_level_subcompany', 'position_level_department', 'native'].includes(k)), '权限配置包含未知字段');
|
|
48
|
+
const type = input.type || input.native?.objType;
|
|
49
|
+
const option = form.items.objType.options.find((o) => o.id === type && !o.disabled);
|
|
50
|
+
check(option, '当前入口未开放该类型');
|
|
51
|
+
const descriptor = definitions[type];
|
|
52
|
+
let row;
|
|
53
|
+
if (input.native) {
|
|
54
|
+
check(input.native.objType === type && typeof input.native.targetType === 'number' && input.native.targetId !== undefined, 'native 需完整原生 objType/targetType/targetId');
|
|
55
|
+
row = structuredClone(input.native);
|
|
56
|
+
delete row.permissionShareBean;
|
|
57
|
+
delete row.createTime;
|
|
58
|
+
delete row.updateTime;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
check(descriptor, `${type} 需查询对应配置结构后通过 native 提交,不可套用其他入口码表`);
|
|
62
|
+
check(item && (item.content || item.name), '权限对象缺少名称');
|
|
63
|
+
const name = String(item.content || item.name), id = String(item.id);
|
|
64
|
+
row = { ...structuredClone(item), _entityType: descriptor.entity, objType: type, objTypeSpan: option.content,
|
|
65
|
+
[descriptor.key]: [structuredClone(item)], obj_id_span: name, objIdList: [name], targetId: id, targetType: descriptor.code };
|
|
66
|
+
const setOption = (key, value) => { const o = form.items[key]?.options?.find((x) => String(x.id) === String(value) && !x.disabled); check(o, `${key} 取值无效`); return o; };
|
|
67
|
+
if (type === 'role') {
|
|
68
|
+
const value = String(input.roleLevel ?? form.data?.role_level ?? '4');
|
|
69
|
+
row.role_level = value;
|
|
70
|
+
row.role_level_span = setOption('role_level', value).content;
|
|
71
|
+
row.objIdList.push(row.role_level_span);
|
|
72
|
+
}
|
|
73
|
+
else
|
|
74
|
+
check(input.roleLevel === undefined, 'roleLevel 仅用于角色');
|
|
75
|
+
for (const [source, key, allowed] of [['attributes', 'department_attribute', ['department', 'subcompany']], ['positionAttributes', 'position_attribute', ['position']]]) {
|
|
76
|
+
if (input[source] !== undefined) {
|
|
77
|
+
check(allowed.includes(type) && Array.isArray(input[source]), `${source} 不适用于此类型`);
|
|
78
|
+
input[source].forEach((v) => setOption(key, v));
|
|
79
|
+
row[key] = structuredClone(input[source]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (type === 'position') {
|
|
83
|
+
const value = String(input.positionLevel ?? form.data?.position_level ?? '1');
|
|
84
|
+
row.position_level = value;
|
|
85
|
+
row.position_level_span = setOption('position_level', value).content;
|
|
86
|
+
row.objIdList.push(row.position_level_span);
|
|
87
|
+
row.targetType = value === '2' ? 13 : value === '3' ? 12 : 1311;
|
|
88
|
+
row.hq = value === '1';
|
|
89
|
+
for (const [k, level] of [['position_level_subcompany', '2'], ['position_level_department', '3']])
|
|
90
|
+
if (value === level) {
|
|
91
|
+
check(input[k]?.length, `${k} 不能为空`);
|
|
92
|
+
row[k] = input[k];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else
|
|
96
|
+
check(input.positionLevel === undefined && input.position_level_subcompany === undefined && input.position_level_department === undefined, '岗位配置不适用于此类型');
|
|
97
|
+
if (input.security !== undefined) {
|
|
98
|
+
check(Number.isFinite(input.security.min) && Number.isFinite(input.security.max) && input.security.min <= input.security.max, '安全级别无效');
|
|
99
|
+
row.seclevel = structuredClone(input.security);
|
|
100
|
+
}
|
|
101
|
+
else if (['grade', 'department', 'subcompany', 'role', 'all'].includes(type))
|
|
102
|
+
row.seclevel = { min: 0, max: 100 };
|
|
103
|
+
}
|
|
104
|
+
return { ...row, id: null, shareKey: `temp_${type}_${row.targetId}_${randomUUID().slice(0, 8)}`, sourceId: menuId, sourceType: 1, permissionId: 'sys_view', permissionType: scope, moduleId: 'cus_app_system' };
|
|
105
|
+
}
|
|
106
|
+
export function buildMenuPermissionDelete(row, menuId, scope) {
|
|
107
|
+
check(row.permissionShareBean?.id, '原授权缺少 permissionShareBean');
|
|
108
|
+
return [{ sourceId: menuId, permissionId: 'sys_view', objType: row.objType, objTypeSpan: row.objTypeSpan,
|
|
109
|
+
obj_id: Array.isArray(row.obj_id) ? row.obj_id : [row.targetId], objIdList: row.objIdList || [row.content || row.name],
|
|
110
|
+
id: String(row.permissionShareBean.id), obj_id_span: row.obj_id_span || row.content || row.name,
|
|
111
|
+
targetId: row.targetId, targetType: row.targetType, permissionType: scope, _entityType: row._entityType,
|
|
112
|
+
permissionShareBean: structuredClone(row.permissionShareBean), shareKey: String(row.permissionShareBean.id), sourceType: 1, name: row.name || row.content }];
|
|
113
|
+
}
|
|
114
|
+
export function menuGrantKey(row) { return String(row.permissionShareBean?.id || row.id || row.shareKey || ''); }
|
|
115
|
+
const identity = (r) => ({ type: r.objType, id: String(r.targetId ?? r.permissionShareBean?.targetId ?? ''), role: String(r.role_level ?? ''), position: String(r.position_level ?? ''), attrs: [...(r.department_attribute || [])].sort(), positionAttrs: [...(r.position_attribute || [])].sort(), subcompanies: (r.position_level_subcompany || []).map((x) => String(x.id ?? x)).sort(), departments: (r.position_level_department || []).map((x) => String(x.id ?? x)).sort() });
|
|
116
|
+
const stable = (v) => Array.isArray(v) ? v.map(stable) : v && typeof v === 'object' ? Object.fromEntries(Object.keys(v).sort().map(k => [k, stable(v[k])])) : v;
|
|
117
|
+
const same = (a, b) => JSON.stringify(stable(a)) === JSON.stringify(stable(b));
|
|
118
|
+
export function menuGrantMatches(actual, expected) {
|
|
119
|
+
if (!same(identity(actual), identity(expected)))
|
|
120
|
+
return false;
|
|
121
|
+
if (expected.seclevel) {
|
|
122
|
+
const min = actual.seclevel?.min ?? actual.permissionShareBean?.targetMinSecLevel;
|
|
123
|
+
const max = actual.seclevel?.max ?? actual.permissionShareBean?.targetMaxSecLevel;
|
|
124
|
+
if (Number(min) !== Number(expected.seclevel.min) || Number(max) !== Number(expected.seclevel.max))
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
export async function mutateMenuPermission(c, b, app, id, terminal, scope, operation, input, key, apply) {
|
|
130
|
+
check([1, -1].includes(scope), 'scope 无效');
|
|
131
|
+
const beforeMenu = await readMenuConfig(c, b, app, id, terminal), before = await menuPermissions(c, b, app, id), index = scope === 1 ? 0 : 1;
|
|
132
|
+
const matches = key ? before[index].filter(r => menuGrantKey(r) === key) : [];
|
|
133
|
+
if (operation !== 'add')
|
|
134
|
+
check(matches.length === 1, '授权行 ID 未唯一匹配');
|
|
135
|
+
const old = matches[0];
|
|
136
|
+
let row;
|
|
137
|
+
if (operation !== 'remove') {
|
|
138
|
+
const { form, security } = await menuPermissionSchema(c, b, id, scope);
|
|
139
|
+
check(!input.security || security.seclevelSupport === true, '当前环境未启用安全级别');
|
|
140
|
+
const type = input.type || input.native?.objType;
|
|
141
|
+
let item;
|
|
142
|
+
if (!input.native) {
|
|
143
|
+
if (['all', 'allExternal'].includes(type))
|
|
144
|
+
item = { id: '0', content: form.items.objType.options.find((o) => o.id === type)?.content };
|
|
145
|
+
else {
|
|
146
|
+
check(typeof input.id === 'string' && /^\d+$/.test(input.id), '需要真实对象 ID');
|
|
147
|
+
const response = await menuPermissionBrowse(c, b, id, scope, type, 'destData', { selectIds: input.id, selectedData: [] });
|
|
148
|
+
const rows = Array.isArray(response) ? response : response.data;
|
|
149
|
+
const hits = rows?.filter((r) => String(r.id) === input.id);
|
|
150
|
+
check(hits?.length === 1, '权限对象未唯一匹配');
|
|
151
|
+
item = hits[0];
|
|
152
|
+
}
|
|
153
|
+
if (type === 'position')
|
|
154
|
+
for (const [source, native, org] of [['subcompanies', 'position_level_subcompany', 'subcompany'], ['departments', 'position_level_department', 'department']])
|
|
155
|
+
if (input[source] !== undefined) {
|
|
156
|
+
check(Array.isArray(input[source]), `${source} 需数组`);
|
|
157
|
+
input = { ...input, [native]: [] };
|
|
158
|
+
for (const target of input[source]) {
|
|
159
|
+
const response = await menuPermissionBrowse(c, b, id, scope, org, 'destData', { selectIds: String(target), selectedData: [] });
|
|
160
|
+
const rows = Array.isArray(response) ? response : response.data;
|
|
161
|
+
const hits = rows?.filter((r) => String(r.id) === String(target));
|
|
162
|
+
check(hits?.length === 1, '岗位机构未唯一匹配');
|
|
163
|
+
input[native].push(hits[0]);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
row = compileMenuPermission(form, id, scope, input, item);
|
|
168
|
+
check(!before[index].some(r => menuGrantKey(r) !== key && menuGrantMatches(r, row)), '已有同对象同级别授权,请按行修改');
|
|
169
|
+
}
|
|
170
|
+
if (!apply)
|
|
171
|
+
return { saved: false, operation, scope, row, remove: old };
|
|
172
|
+
check(same(before, await menuPermissions(c, b, app, id)) && same(beforeMenu, await readMenuConfig(c, b, app, id, terminal)), '菜单或权限已变化,停止写入');
|
|
173
|
+
if (old) {
|
|
174
|
+
check(old.permissionShareBean, '原授权缺少 permissionShareBean,停止删除');
|
|
175
|
+
ack(await c.post(b + '/api/cusapp/permissionForm/table/deletePermission', buildMenuPermissionDelete(old, id, scope), { ebbusinessid: app }));
|
|
176
|
+
check(!(await menuPermissions(c, b, app, id))[index].some(r => menuGrantKey(r) === key), '原授权删除未生效,停止新增');
|
|
177
|
+
}
|
|
178
|
+
if (row) {
|
|
179
|
+
try {
|
|
180
|
+
data(await c.post(b + '/api/cusapp/permissionForm/table/add', [row], { ebbusinessid: app }));
|
|
181
|
+
check((await menuPermissions(c, b, app, id))[index].some(r => menuGrantMatches(r, row)), '新增提交后未回读到对应授权');
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (!old)
|
|
185
|
+
throw error;
|
|
186
|
+
const restore = { ...old, id: null, shareKey: `temp_restore_${randomUUID()}`, targetType: definitions[old.objType]?.code ?? old.targetType, sourceId: id, permissionType: scope, sourceType: 1, permissionId: 'sys_view', moduleId: 'cus_app_system' };
|
|
187
|
+
delete restore.permissionShareBean;
|
|
188
|
+
if (definitions[old.objType]) {
|
|
189
|
+
const descriptor = definitions[old.objType];
|
|
190
|
+
restore._entityType = descriptor.entity;
|
|
191
|
+
restore[descriptor.key] = [{ id: String(old.targetId), name: old.name || old.content, content: old.content || old.name }];
|
|
192
|
+
if (old.permissionShareBean?.targetMinSecLevel !== undefined)
|
|
193
|
+
restore.seclevel = { min: old.permissionShareBean.targetMinSecLevel, max: old.permissionShareBean.targetMaxSecLevel };
|
|
194
|
+
}
|
|
195
|
+
if (old.objType === 'position') {
|
|
196
|
+
restore.targetType = String(old.position_level) === '2' ? 13 : String(old.position_level) === '3' ? 12 : 1311;
|
|
197
|
+
restore.hq = String(old.position_level) === '1';
|
|
198
|
+
for (const field of ['position_level_subcompany', 'position_level_department'])
|
|
199
|
+
if (Array.isArray(restore[field]))
|
|
200
|
+
restore[field] = restore[field].map((x) => typeof x === 'object' ? x : { id: String(x) });
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
data(await c.post(b + '/api/cusapp/permissionForm/table/add', [restore], { ebbusinessid: app }));
|
|
204
|
+
check((await menuPermissions(c, b, app, id))[index].some(r => menuGrantMatches(r, old)), '原授权未回读到');
|
|
205
|
+
}
|
|
206
|
+
catch (restoreError) {
|
|
207
|
+
throw Error(`替换失败且恢复未完成:${String(error)};${String(restoreError)},请查询当前权限`);
|
|
208
|
+
}
|
|
209
|
+
throw Error(`替换失败,已恢复原授权(行 ID 可能变化):${String(error)}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const after = await menuPermissions(c, b, app, id);
|
|
213
|
+
if (old)
|
|
214
|
+
check(!after[index].some(r => menuGrantKey(r) === key), '删除提交后原授权仍存在');
|
|
215
|
+
for (const [i, rows] of before.entries())
|
|
216
|
+
for (const r of rows)
|
|
217
|
+
if (!(i === index && menuGrantKey(r) === key))
|
|
218
|
+
check(after[i].some(x => same(x, r)), '其他授权发生变化,请核对');
|
|
219
|
+
check(same(beforeMenu, await readMenuConfig(c, b, app, id, terminal)), '菜单基础配置变化,请核对');
|
|
220
|
+
return { saved: true, operation, scope, permissions: after };
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=menu-permission-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-permission-config.js","sourceRoot":"","sources":["../../src/services/menu-permission-config.ts"],"names":[],"mappings":"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"}
|