feat(projects): 新增项目、执行、任务等功能

This commit is contained in:
2026-05-09 11:30:34 +08:00
parent f4f43814b3
commit 824392b564
106 changed files with 13060 additions and 1049 deletions

View File

@@ -0,0 +1,56 @@
import assert from 'node:assert/strict';
import { test } from 'node:test';
import { normalizeObjectContext } from '../src/service/api/object-context-normalize';
const projectDomainConfig = {
domainKey: 'project',
mode: 'object-context',
objectType: 'project',
routePathPrefixes: ['/project'],
entryRouteKey: 'project_list',
entryRoutePath: '/project/list',
fallbackDefaultRouteKey: 'project_project_overview',
fallbackDefaultRoutePath: '/project/project/overview',
contextApiPath: '/admin-api/project/project/{id}/context',
contextApiObjectIdParamKey: 'id',
contextApiObjectIdPlacement: 'path',
objectIdQueryKey: 'objectId'
} satisfies App.ObjectContext.DomainConfig;
test('normalizes project context from legacy currentProject and navs payload', () => {
const context = normalizeObjectContext(projectDomainConfig, '2049677988131078145', {
contextScopedMenus: [],
currentProject: {
id: '2049677988131078145',
projectCode: 'CNPJ2026001',
projectName: '研发内部管理系统',
projectType: 'mainline',
productId: '2045487172243963906',
managerUserId: '2034588597520314370',
statusCode: 'pending'
},
currentRole: {
roleId: '2049372079479685122',
roleCode: 'project_manager',
roleName: '项目经理',
guestFlag: false
},
navs: [
{
id: '2049679882031243266',
name: '概览',
path: '/project/project/overview',
icon: 'mdi:home-outline',
sort: 1
}
],
buttons: ['project:project:update']
});
assert.equal(context.objectId, '2049677988131078145');
assert.equal(context.objectName, '研发内部管理系统');
assert.equal(context.contextScopedMenus.length, 1);
assert.equal(context.contextScopedMenus[0].label, '概览');
assert.equal(context.contextScopedMenus[0].routePath, '/project/project/overview');
assert.deepEqual(context.buttonCodes, ['project:project:update']);
});