feat: Approval Queue page (T03 transaction template) — third KBX v60 page
Implement ApprovalQueue.vue using KBX Foundation v60 transaction pattern: - T03 Transaction template for maker-checker approval workflow - KbxScreenFrame wrapper with breadcrumb/title - Summary stats (Pending, Approved, Rejected counts) - Status and action type filters - Header with model name, action type, status badge - Request details grid (Request ID, Requester, Requested At, Status) - Validation metrics display (PBO, DSR, OOS, Target Phase) - Review & approval section with textarea for comments - Approve/Reject buttons with submit state - Review history display (reviewer, date, decision, comment) - Side panel with request list (fixed position on desktop, stacked on mobile) - Dark mode and responsive layout New files: - features/approval/pages/ApprovalQueue.vue (T03 transaction page) - features/approval/composables/useApprovalRequests.ts (approval data) - features/approval/types/index.ts (type definitions) - features/approval/registry.ts (screen definition) Demo data: 3 approval requests (pending, approved, rejected) with full workflow. Mock approval/rejection methods with comment capture. Ready for API integration and real backend workflow. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* Approval Feature Screen Registry
|
||||
*/
|
||||
|
||||
import type { ScreenDefinition } from '@kbx/contracts'
|
||||
|
||||
export const approvalQueueScreen: ScreenDefinition = {
|
||||
screenId: 'governance.approval.queue',
|
||||
title: 'Approval Queue',
|
||||
module: 'ERP',
|
||||
path: '/governance/approvals',
|
||||
component: () => import('./pages/ApprovalQueue.vue'),
|
||||
permissions: ['approval.review'],
|
||||
template: 'T03',
|
||||
|
||||
help: {
|
||||
title: 'Approval Workflow',
|
||||
sections: [
|
||||
{
|
||||
title: 'What is Maker-Checker?',
|
||||
content:
|
||||
'Maker-Checker enforces that critical model decisions require two parties: the requester and an independent reviewer.',
|
||||
},
|
||||
{
|
||||
title: 'How to Approve',
|
||||
content: 'Select a pending request, review the metrics and comments, then approve or reject with your decision.',
|
||||
},
|
||||
{
|
||||
title: 'Decision Criteria',
|
||||
content: 'Activation requires: PBO ≤ 20%, DSR ≥ 95%, OOS ≤ 2.5%, plus 252+ trading-day shadow run.',
|
||||
},
|
||||
],
|
||||
relatedScreens: ['model-ops.models.list', 'model-ops.shadow-run.queue'],
|
||||
},
|
||||
|
||||
grid: {
|
||||
columnDefs: [
|
||||
{ field: 'requestId', headerName: 'Request ID', width: 120 },
|
||||
{ field: 'modelName', headerName: 'Model', width: 150 },
|
||||
{ field: 'action', headerName: 'Action', width: 100 },
|
||||
{ field: 'status', headerName: 'Status', width: 100 },
|
||||
{ field: 'requesterName', headerName: 'Requester', width: 120 },
|
||||
{ field: 'requestedAt', headerName: 'Date', width: 150 },
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
export default [approvalQueueScreen]
|
||||
Reference in New Issue
Block a user