feat: redesign leadership operations dashboard
This commit is contained in:
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/);
|
||||
|
||||
Reference in new issue
Block a user