feat: redesign leadership operations dashboard

This commit is contained in:
inman committed 2026-09-01 19:52:56 +08:00
1 parent 08725b2de9
commit 823d1cb630
7 files changed
+1320 -366

No files matched your search

@@ -134,6 +134,12 @@ test('operations dashboard is leadership-gated, business-facing, searchable, and
assert.match(tasks, /operations_dashboard_search_scope_too_large/);
assert.match(tasks, /content_ciphertext[\s\S]+decryptText\(this\.config, row\.content_ciphertext/);
assert.match(tasks, /operationsDashboardSearchMatches[\s\S]+projection\.instruction[\s\S]+projection\.result/);
assert.match(tasks, /function operationsDashboardLeadershipResultText/);
assert.match(tasks, /function operationsDashboardLeadershipInstructionText/);
assert.match(tasks, /待跟进/);
assert.match(tasks, /未完成/);
assert.match(tasks, /containsTechnicalLanguage/);
assert.match(tasks, /当前结果需要人工确认/);
assert.match(tasks, /timezone\('Asia\/Shanghai', t\.created_at\)/);
assert.match(tasks, /days,[\s\S]+businesses,[\s\S]+business_options/);
assert.match(tasks, /instructionPreview\.length > 360/);
@@ -187,7 +193,7 @@ test('ordinary task access is enforced across reads, mutations, artifacts, event
assert.match(server, /tasks\.eventsSince\(session\.user\.organizationId, since, contextFor\(session, request\)\)/);
});
test('operator UI exposes role-aware accounts, business drill-through, original input history, and reversible archive', async () => {
test('operator UI exposes role-aware accounts, executive drill-through, original input, final output, and reversible archive', async () => {
const [app, index, retention] = await Promise.all([
source('../../LianSyn-platform/app.js'),
source('../../LianSyn-platform/index.html'),
@@ -206,8 +212,14 @@ test('operator UI exposes role-aware accounts, business drill-through, original
assert.match(index, /id="operationsDashboardBusiness"/);
assert.match(index, /id="operationsDashboardDays"/);
assert.match(index, /id="operationsDashboardBusinesses"/);
assert.match(index, /姓名、指令内容、完成结果、团号或订单号/);
assert.match(index, /平台运行全景/);
assert.match(index, /任务规模、人员贡献、业务分布/);
assert.match(index, /输入人员、原始指令或最终结果/);
assert.match(index, /id="operationsDashboardRangePresets"/);
assert.match(index, /id="operationsDashboardRefresh"/);
assert.match(index, /从原始输入到最终输出/);
assert.match(index, /id="operationsDashboardDetail"/);
assert.doesNotMatch(index, /OPERATIONS OVERVIEW|BUSINESS TRACE|指令操作历史/);
assert.match(index, /id="historyArchiveInput"/);
assert.match(app, /authUser\?\.role === 'admin'/);
assert.match(app, /crypto\.randomUUID/);
@@ -223,15 +235,29 @@ test('operator UI exposes role-aware accounts, business drill-through, original
assert.match(app, /data-operations-status|dataset\.operationsStatus/);
assert.match(app, /data-operations-day|dataset\.operationsDay/);
assert.match(app, /data-operations-business|dataset\.operationsBusiness/);
assert.match(app, /`指令:\$\{task\.instruction_preview/);
assert.match(app, /`结果:\$\{task\.result_summary/);
assert.match(app, /function operationsDashboardReadableResult/);
assert.match(app, /function operationsDashboardReadableInput/);
assert.match(app, /原始输入/);
assert.match(app, /最终输出/);
const dashboardTaskRenderer = app.slice(
app.indexOf('function renderOperationsDashboardTasks()'),
app.indexOf('function renderOperationsDashboard()')
);
assert.match(dashboardTaskRenderer, /task\.creator\.username/);
assert.match(dashboardTaskRenderer, /task\.created_at/);
assert.match(dashboardTaskRenderer, /task\.business_route_label/);
assert.match(dashboardTaskRenderer, /task\.instruction_preview/);
assert.match(dashboardTaskRenderer, /operationsDashboardReadableInput\(task\.instruction_preview/);
assert.match(dashboardTaskRenderer, /operationsDashboardReadableResult\(task\.result_summary/);
assert.doesNotMatch(dashboardTaskRenderer, /记录号|task\.task_id\}`/);
const dashboardDetailRenderer = app.slice(
app.indexOf('function renderOperationsDashboardDetail()'),
app.indexOf('async function syncOperationsDashboard()')
);
assert.match(dashboardDetailRenderer, /操作人/);
assert.match(dashboardDetailRenderer, /指令内容/);
assert.match(dashboardDetailRenderer, /完成结果/);
assert.match(dashboardDetailRenderer, /人员/);
assert.match(dashboardDetailRenderer, /原始输入/);
assert.match(dashboardDetailRenderer, /最终输出/);
assert.match(dashboardDetailRenderer, /operationsDashboardReadableResult/);
assert.doesNotMatch(dashboardDetailRenderer, /任务生命周期|处理结果与技术上下文|renderTaskLifecycle|JSON\.stringify|task\.stage|parse_response|operation:/);
assert.match(app, /\/api\/tasks\/\$\{encodeURIComponent\(taskId\)\}\/archive/);
assert.match(app, /\/api\/tasks\/\$\{encodeURIComponent\(taskId\)\}\/restore/);