diff --git a/.axhub/make/sidebar-tree.json b/.axhub/make/sidebar-tree.json
index 6385483..5fe0748 100644
--- a/.axhub/make/sidebar-tree.json
+++ b/.axhub/make/sidebar-tree.json
@@ -1,6 +1,6 @@
{
"version": 1,
- "updatedAt": "2026-07-14T15:10:00.000Z",
+ "updatedAt": "2026-07-16T01:03:00.000Z",
"prototypes": [
{
"id": "folder-1783875936186-27raza",
@@ -80,6 +80,37 @@
"title": "工作台",
"itemKey": "prototypes/oneos-web-workbench"
},
+ {
+ "id": "folder-oneos-approval",
+ "kind": "folder",
+ "title": "审批中心",
+ "children": [
+ {
+ "id": "item:prototypes:oneos-web-approval-initiated",
+ "kind": "item",
+ "title": "我发起的",
+ "itemKey": "prototypes/oneos-web-approval-initiated"
+ },
+ {
+ "id": "item:prototypes:oneos-web-approval-todo",
+ "kind": "item",
+ "title": "我的待办",
+ "itemKey": "prototypes/oneos-web-approval-todo"
+ },
+ {
+ "id": "item:prototypes:oneos-web-approval-done",
+ "kind": "item",
+ "title": "我的已办",
+ "itemKey": "prototypes/oneos-web-approval-done"
+ },
+ {
+ "id": "item:prototypes:oneos-web-approval-cc",
+ "kind": "item",
+ "title": "我的抄送",
+ "itemKey": "prototypes/oneos-web-approval-cc"
+ }
+ ]
+ },
{
"id": "folder-1782874599304-roj8fd",
"kind": "folder",
diff --git a/scripts/sync-oneos-web-prototypes.mjs b/scripts/sync-oneos-web-prototypes.mjs
index 31edda0..3bc5ee7 100644
--- a/scripts/sync-oneos-web-prototypes.mjs
+++ b/scripts/sync-oneos-web-prototypes.mjs
@@ -29,6 +29,11 @@ const STANDALONE_MODULES = [
{ slug: 'oneos-web-h2-station-stats', title: '加氢站数量统计', skipCodegen: true },
{ slug: 'vehicle-return-settlement', title: '还车应结款', skipCodegen: true },
{ slug: 'vehicle-pickup-receivable', title: '提车应收款', skipCodegen: true },
+ { slug: 'oneos-web-approval', title: '审批中心', skipCodegen: true },
+ { slug: 'oneos-web-approval-initiated', title: '我发起的', skipCodegen: true },
+ { slug: 'oneos-web-approval-todo', title: '我的待办', skipCodegen: true },
+ { slug: 'oneos-web-approval-done', title: '我的已办', skipCodegen: true },
+ { slug: 'oneos-web-approval-cc', title: '我的抄送', skipCodegen: true },
];
const MODULES = [
diff --git a/src/common/oneos-web-approval/ApprovalApp.tsx b/src/common/oneos-web-approval/ApprovalApp.tsx
new file mode 100644
index 0000000..9be4328
--- /dev/null
+++ b/src/common/oneos-web-approval/ApprovalApp.tsx
@@ -0,0 +1,57 @@
+import '../oneosWebLegacy/legacyGlobals';
+import '../../prototypes/vehicle-management/style.css';import './styles/index.css';
+
+import React from 'react';
+import { ConfigProvider } from 'antd';
+import type { ApprovalTabKey } from './types';
+import { ApprovalCenterPage } from './pages/ApprovalCenterPage';
+
+const approvalTheme = {
+ token: {
+ colorPrimary: '#165dff',
+ borderRadius: 8,
+ fontFamily:
+ 'Inter, -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif',
+ colorBgLayout: '#f5f7fa',
+ },
+ components: {
+ Tabs: {
+ inkBarColor: '#165dff',
+ itemSelectedColor: '#165dff',
+ itemHoverColor: '#165dff',
+ },
+ Button: {
+ controlHeight: 32,
+ },
+ Select: {
+ controlHeight: 32,
+ },
+ Input: {
+ controlHeight: 32,
+ },
+ },
+};
+
+export interface ApprovalAppProps {
+ tabKey?: ApprovalTabKey;
+ pageTitle?: string;
+ showTabs?: boolean;
+}
+
+export function ApprovalApp({
+ tabKey,
+ pageTitle = '审批中心',
+ showTabs = false,
+}: ApprovalAppProps) {
+ return (
+
+
+
+ );
+}
+
+export default ApprovalApp;
diff --git a/src/common/oneos-web-approval/components/ApprovalCard.tsx b/src/common/oneos-web-approval/components/ApprovalCard.tsx
new file mode 100644
index 0000000..9836c25
--- /dev/null
+++ b/src/common/oneos-web-approval/components/ApprovalCard.tsx
@@ -0,0 +1,96 @@
+import React from 'react';
+import { RightOutlined } from '@ant-design/icons';
+import type { ApprovalCardItem } from '../types';
+import {
+ formatStatusLabel,
+ getApprovalTypeColor,
+ getApprovalTypeLabel,
+} from '../config/approvalTypeConfig';
+
+export interface ApprovalCardProps {
+ item: ApprovalCardItem;
+ selected?: boolean;
+ onClick?: (item: ApprovalCardItem) => void;
+}
+
+function statusClassName(status: ApprovalCardItem['status']): string {
+ if (status === 'approved') return 'ap-status ap-status--approved';
+ if (status === 'rejected') return 'ap-status ap-status--rejected';
+ return 'ap-status ap-status--pending';
+}
+
+export function ApprovalCard({ item, selected = false, onClick }: ApprovalCardProps) {
+ const typeColor = getApprovalTypeColor(item.type);
+ const statusLabel = formatStatusLabel(item);
+
+ return (
+ onClick?.(item)}
+ onKeyDown={(event) => {
+ if (event.key === 'Enter' || event.key === ' ') {
+ event.preventDefault();
+ onClick?.(item);
+ }
+ }}
+ >
+
+
+ {item.typeLabel ?? getApprovalTypeLabel(item.type)}
+
+ {statusLabel}
+
+
+
+
{item.title}
+ {item.subtitle ?
{item.subtitle}
: null}
+
+ {item.keyFacts && item.keyFacts.length > 0 ? (
+
+ {item.keyFacts.map((fact) => (
+
+
- {fact.label}
+ -
+ {fact.value}
+
+
+ ))}
+
+ ) : null}
+
+ {item.risks && item.risks.length > 0 ? (
+
+ {item.risks.map((risk) => (
+
+ {risk.label}
+
+ ))}
+
+ ) : null}
+
+
+
+
+ {item.showInitiatorInFooter ? (
+ 发起人 {item.initiatedBy}
+ ) : null}
+
+ {item.footerText ?? `发起时间 ${item.initiatedAt}`}
+
+
+
+ 查看详情
+
+
+
+
+ );
+}
diff --git a/src/common/oneos-web-approval/components/ApprovalCardList.tsx b/src/common/oneos-web-approval/components/ApprovalCardList.tsx
new file mode 100644
index 0000000..a5a1b28
--- /dev/null
+++ b/src/common/oneos-web-approval/components/ApprovalCardList.tsx
@@ -0,0 +1,47 @@
+import React from 'react';
+import { Empty, Spin } from 'antd';
+import type { ApprovalCardItem } from '../types';
+import { ApprovalCard } from './ApprovalCard';
+
+export interface ApprovalCardListProps {
+ items: ApprovalCardItem[];
+ loading?: boolean;
+ selectedId?: string | null;
+ onItemClick?: (item: ApprovalCardItem) => void;
+}
+
+export function ApprovalCardList({
+ items,
+ loading = false,
+ selectedId,
+ onItemClick,
+}: ApprovalCardListProps) {
+ if (loading) {
+ return (
+
+
+
+ );
+ }
+
+ if (items.length === 0) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+ {items.map((item) => (
+
+ ))}
+
+ );
+}
diff --git a/src/common/oneos-web-approval/components/ApprovalDetailPlaceholder.tsx b/src/common/oneos-web-approval/components/ApprovalDetailPlaceholder.tsx
new file mode 100644
index 0000000..d4c700d
--- /dev/null
+++ b/src/common/oneos-web-approval/components/ApprovalDetailPlaceholder.tsx
@@ -0,0 +1,193 @@
+import React, { useState } from 'react';
+import {
+ Avatar,
+ Button,
+ Empty,
+ Space,
+ Tabs,
+ Timeline,
+ Typography,
+} from 'antd';
+import {
+ CheckCircleOutlined,
+ ClockCircleOutlined,
+ CopyOutlined,
+ ReloadOutlined,
+ UserOutlined,
+} from '@ant-design/icons';
+import type { ApprovalCardItem } from '../types';
+import {
+ formatStatusLabel,
+ getApprovalTypeLabel,
+} from '../config/approvalTypeConfig';
+import { InsuranceComparisonDetail } from './InsuranceComparisonDetail';
+
+const { Text, Title } = Typography;
+
+export interface ApprovalDetailPlaceholderProps {
+ item: ApprovalCardItem | null;
+ onRefresh?: () => void;
+}
+
+function statusBadgeClass(status: ApprovalCardItem['status']): string {
+ if (status === 'approved') return 'ap-detail__badge ap-detail__badge--approved';
+ if (status === 'rejected') return 'ap-detail__badge ap-detail__badge--rejected';
+ return 'ap-detail__badge ap-detail__badge--pending';
+}
+
+const MOCK_TIMELINE = [
+ { role: '发起人', name: '提交申请', time: '', color: 'blue' as const },
+ { role: '部门主管', name: '审批通过', time: '2026-07-08 10:30', color: 'green' as const },
+ { role: '财务审核', name: '审批中', time: '', color: 'gray' as const },
+];
+
+export function ApprovalDetailPlaceholder({ item, onRefresh }: ApprovalDetailPlaceholderProps) {
+ const [activeTab, setActiveTab] = useState('detail');
+
+ if (!item) {
+ return (
+
+
+
+ );
+ }
+
+ if (item.typeLabel === '保险比价采购') {
+ return ;
+ }
+
+ const statusLabel = formatStatusLabel(item);
+ const typeLabel = getApprovalTypeLabel(item.type);
+
+ return (
+
+
+
+ 编号:
+ , text: item.id }}>{item.id}
+
+ } onClick={onRefresh}>
+ 刷新
+
+
+
+
+
+
+ {item.title}
+
+ {statusLabel}
+
+
+
+
+ } />
+ {item.initiatedBy}
+
+
+ 流程分类
+ {typeLabel}
+
+
+
+ 提交时间
+ {item.initiatedAt}
+
+
+
+
+
+
+ {item.subtitle ? (
+ {item.subtitle}
+ ) : null}
+
+ {item.keyFacts && item.keyFacts.length > 0 ? (
+
+ {item.keyFacts.map((fact) => (
+
+
- {fact.label}
+ -
+ {fact.value}
+
+
+ ))}
+
+ ) : null}
+
+ {item.risks && item.risks.length > 0 ? (
+
+ {item.risks.map((risk) => (
+
+ {risk.label}
+
+ ))}
+
+ ) : null}
+
+
+
+ 审批进度
+
+
({
+ color: step.color,
+ dot:
+ step.color === 'green' ? (
+
+ ) : undefined,
+ children: (
+
+
+
+ {step.role}
+ {step.name ? ` · ${step.name}` : ''}
+
+ {step.time ? (
+
+ {step.time}
+
+ ) : null}
+
+ {index === 0 ? (
+
{item.initiatedBy}
+ ) : null}
+
+ ),
+ }))}
+ />
+
+
+ ),
+ },
+ {
+ key: 'flow',
+ label: '审批流程图',
+ children: (
+
+
+
+ ),
+ },
+ ]}
+ />
+
+
+
+
+
+ );
+}
diff --git a/src/common/oneos-web-approval/components/InsuranceComparisonDetail.tsx b/src/common/oneos-web-approval/components/InsuranceComparisonDetail.tsx
new file mode 100644
index 0000000..ff49360
--- /dev/null
+++ b/src/common/oneos-web-approval/components/InsuranceComparisonDetail.tsx
@@ -0,0 +1,266 @@
+import React, { useState } from 'react';
+import {
+ Avatar,
+ Button,
+ Empty,
+ Space,
+ Table,
+ Tabs,
+ Tag,
+ Typography,
+} from 'antd';
+import type { ColumnsType } from 'antd/es/table';
+import {
+ ClockCircleOutlined,
+ CopyOutlined,
+ ReloadOutlined,
+ UserOutlined,
+} from '@ant-design/icons';
+import type { ApprovalCardItem } from '../types';
+import { formatStatusLabel } from '../config/approvalTypeConfig';
+
+const { Text, Title } = Typography;
+
+export interface InsuranceComparisonDetailProps {
+ item: ApprovalCardItem;
+ onRefresh?: () => void;
+}
+
+function getFact(item: ApprovalCardItem, label: string): string {
+ return item.keyFacts?.find((fact) => fact.label === label)?.value ?? '-';
+}
+
+interface VehicleRow {
+ key: string;
+ plateNo: string;
+ vin: string;
+ insuranceType: string;
+ latestPaymentDate: string;
+ finalQuote: string;
+ status: string;
+ approver: string;
+ remark: string;
+}
+
+interface QuoteRow {
+ key: string;
+ company: string;
+ amount: string;
+ isFinal: boolean;
+ remark: string;
+}
+
+function buildComparisonNo(item: ApprovalCardItem): string {
+ const datePart = item.initiatedAt.replace(/[-: ]/g, '').slice(0, 8);
+ const seq = item.id.replace(/\D/g, '').padStart(4, '0');
+ return `BXBJ${datePart}${seq}`;
+}
+
+function buildSummaryRows(item: ApprovalCardItem, comparisonNo: string) {
+ const finalQuote = getFact(item, '最终报价').replace('¥', '');
+ const insuranceType = getFact(item, '采购险种');
+ const companyCount = getFact(item, '保险公司数量');
+
+ return [
+ { label: '比价单号', value: comparisonNo },
+ { label: '采购状态', value: 审批中 },
+ { label: '创建人', value: item.initiatedBy },
+ { label: '创建时间', value: item.initiatedAt },
+ { label: '车辆数', value: '1' },
+ { label: '险种数', value: '1' },
+ { label: '已确认报价数', value: '1' },
+ { label: '确认报价总额', value: finalQuote },
+ { label: '当前审批人', value: item.currentApprover ?? '-' },
+ { label: '保险公司数量', value: companyCount },
+ { label: '采购险种', value: insuranceType },
+ { label: '中选保险公司', value: item.subtitle?.replace(/^中选:/, '') ?? '-' },
+ ];
+}
+
+function buildVehicleRows(item: ApprovalCardItem): VehicleRow[] {
+ const finalQuote = getFact(item, '最终报价').replace('¥', '');
+
+ return [
+ {
+ key: '1',
+ plateNo: item.title,
+ vin: '-',
+ insuranceType: getFact(item, '采购险种'),
+ latestPaymentDate: getFact(item, '最晚付费日'),
+ finalQuote,
+ status: '审批中',
+ approver: item.currentApprover ?? '-',
+ remark: item.subtitle ?? '-',
+ },
+ ];
+}
+
+function buildQuoteRows(item: ApprovalCardItem): QuoteRow[] {
+ const winner = item.subtitle?.replace(/^中选:/, '') ?? '国元农业保险上海分公司';
+ const finalAmount = getFact(item, '最终报价').replace('¥', '');
+
+ return [
+ { key: '1', company: '国任财产保险股份有限公司广东分公司', amount: '111.00', isFinal: false, remark: '-' },
+ { key: '2', company: winner, amount: finalAmount, isFinal: true, remark: '-' },
+ { key: '3', company: '中国平安财产保险股份有限公司上海分公司', amount: '888.00', isFinal: false, remark: '-' },
+ ];
+}
+
+export function InsuranceComparisonDetail({ item, onRefresh }: InsuranceComparisonDetailProps) {
+ const [activeTab, setActiveTab] = useState('detail');
+ const comparisonNo = buildComparisonNo(item);
+ const statusLabel = formatStatusLabel(item);
+ const typeLabel = item.typeLabel ?? '保险比价采购';
+ const summaryRows = buildSummaryRows(item, comparisonNo);
+ const vehicleRows = buildVehicleRows(item);
+ const quoteRows = buildQuoteRows(item);
+
+ const vehicleColumns: ColumnsType = [
+ { title: '车牌号', dataIndex: 'plateNo', width: 110 },
+ { title: 'VIN', dataIndex: 'vin', width: 120 },
+ { title: '险种', dataIndex: 'insuranceType', width: 90 },
+ { title: '最晚付费日', dataIndex: 'latestPaymentDate', width: 120 },
+ { title: '最终报价', dataIndex: 'finalQuote', width: 100 },
+ {
+ title: '采购状态',
+ dataIndex: 'status',
+ width: 90,
+ render: (value: string) => {value},
+ },
+ { title: '当前审批人', dataIndex: 'approver', width: 120 },
+ { title: '备注', dataIndex: 'remark', ellipsis: true },
+ ];
+
+ const quoteColumns: ColumnsType = [
+ { title: '保险公司', dataIndex: 'company', ellipsis: true },
+ { title: '报价金额', dataIndex: 'amount', width: 110 },
+ {
+ title: '最终',
+ dataIndex: 'isFinal',
+ width: 72,
+ render: (isFinal: boolean) =>
+ isFinal ? 是 : -,
+ },
+ { title: '备注', dataIndex: 'remark', width: 80 },
+ ];
+
+ return (
+
+
+
+ 编号:
+ , text: comparisonNo }}>{comparisonNo}
+
+ } onClick={onRefresh}>
+ 刷新
+
+
+
+
+
+
+ {typeLabel}审批-{comparisonNo}
+
+ {statusLabel}
+
+
+
+
+ } />
+ {item.initiatedBy}
+
+
+ 流程分类
+ {typeLabel}
+
+
+
+ 提交时间
+ {item.initiatedAt}
+
+
+
+
+
+
+
+
+ {Array.from({ length: Math.ceil(summaryRows.length / 2) }).map((_, rowIndex) => {
+ const left = summaryRows[rowIndex * 2];
+ const right = summaryRows[rowIndex * 2 + 1];
+ return (
+
+ | {left.label} |
+ {left.value} |
+ {right ? (
+ <>
+ {right.label} |
+ {right.value} |
+ >
+ ) : (
+ <>
+ |
+ |
+ >
+ )}
+
+ );
+ })}
+
+
+
+
+
+ 车辆明细
+
+
(
+
+ ),
+ defaultExpandedRowKeys: ['1'],
+ }}
+ scroll={{ x: 900 }}
+ />
+
+
+ ),
+ },
+ {
+ key: 'flow',
+ label: '审批流程图',
+ children: (
+
+
+
+ ),
+ },
+ ]}
+ />
+
+
+
+
+
+ );
+}
diff --git a/src/common/oneos-web-approval/config/approvalTypeConfig.ts b/src/common/oneos-web-approval/config/approvalTypeConfig.ts
new file mode 100644
index 0000000..406b6f6
--- /dev/null
+++ b/src/common/oneos-web-approval/config/approvalTypeConfig.ts
@@ -0,0 +1,71 @@
+import type { ApprovalCardItem, ApprovalStatus, ApprovalTypeKey, StatusFilterValue } from '../types';
+
+export interface ApprovalTypeOption {
+ value: ApprovalTypeKey;
+ label: string;
+ shortLabel: string;
+ color: string;
+}
+
+export const APPROVAL_TYPE_CONFIG: Record = {
+ parking: { value: 'parking', label: '停车场', shortLabel: '停车场', color: '#6366f1' },
+ vehicle_procurement: { value: 'vehicle_procurement', label: '车辆采购', shortLabel: '采购', color: '#8b5cf6' },
+ lease: { value: 'lease', label: '租赁合同', shortLabel: '租赁', color: '#2563eb' },
+ charter: { value: 'charter', label: '包车合同', shortLabel: '包车', color: '#0ea5e9' },
+ transfer: { value: 'transfer', label: '调拨', shortLabel: '调拨', color: '#14b8a6' },
+ vehicle_change: { value: 'vehicle_change', label: '异动', shortLabel: '异动', color: '#f59e0b' },
+ replacement: { value: 'replacement', label: '替换车', shortLabel: '替换', color: '#f97316' },
+ delivery: { value: 'delivery', label: '交车', shortLabel: '交车', color: '#10b981' },
+ return_settlement: { value: 'return_settlement', label: '还车应结款', shortLabel: '还车结款', color: '#ef4444' },
+ pickup_receivable: { value: 'pickup_receivable', label: '提车应收款', shortLabel: '提车应收', color: '#ec4899' },
+ billing: { value: 'billing', label: '租赁账单', shortLabel: '账单', color: '#a855f7' },
+ insurance: { value: 'insurance', label: '保险采购', shortLabel: '保险', color: '#22c55e' },
+ supplier: { value: 'supplier', label: '供应商准入', shortLabel: '供应商', color: '#64748b' },
+ customer_risk: { value: 'customer_risk', label: '客户风险标签', shortLabel: '风险标签', color: '#dc2626' },
+ third_party_return: { value: 'third_party_return', label: '三方退租', shortLabel: '退租', color: '#d97706' },
+ contract_template: { value: 'contract_template', label: '合同模板', shortLabel: '模板', color: '#7c3aed' },
+ annual_inspection: { value: 'annual_inspection', label: '年审', shortLabel: '年审', color: '#0891b2' },
+ finance_payment: { value: 'finance_payment', label: '付款申请', shortLabel: '付款', color: '#be185d' },
+ clearing: { value: 'clearing', label: '清分结算', shortLabel: '清分', color: '#4f46e5' },
+ energy_account: { value: 'energy_account', label: '能源账户', shortLabel: '能源', color: '#059669' },
+};
+
+export const APPROVAL_TYPE_OPTIONS = Object.values(APPROVAL_TYPE_CONFIG);
+
+export const STATUS_OPTIONS: { value: StatusFilterValue; label: string }[] = [
+ { value: 'all', label: '全部' },
+ { value: 'pending', label: '审批中' },
+ { value: 'approved', label: '已通过' },
+ { value: 'rejected', label: '已驳回' },
+];
+
+const STATUS_LABEL_MAP: Record = {
+ pending: '审批中',
+ processing: '审批中',
+ approved: '已通过',
+ rejected: '已驳回',
+};
+
+export function getApprovalTypeLabel(type: ApprovalTypeKey): string {
+ return APPROVAL_TYPE_CONFIG[type]?.label ?? type;
+}
+
+export function getApprovalTypeColor(type: ApprovalTypeKey): string {
+ return APPROVAL_TYPE_CONFIG[type]?.color ?? '#64748b';
+}
+
+export function formatStatusLabel(item: Pick): string {
+ const base = STATUS_LABEL_MAP[item.status] ?? item.status;
+ if ((item.status === 'pending' || item.status === 'processing') && item.currentApprover) {
+ return `审批中:${item.currentApprover}`;
+ }
+ return base;
+}
+
+export function matchesStatusFilter(status: ApprovalStatus, filter: StatusFilterValue): boolean {
+ if (filter === 'all') return true;
+ if (filter === 'pending') return status === 'pending' || status === 'processing';
+ if (filter === 'approved') return status === 'approved';
+ if (filter === 'rejected') return status === 'rejected';
+ return true;
+}
diff --git a/src/common/oneos-web-approval/data/mockApprovalCases.ts b/src/common/oneos-web-approval/data/mockApprovalCases.ts
new file mode 100644
index 0000000..ffddfef
--- /dev/null
+++ b/src/common/oneos-web-approval/data/mockApprovalCases.ts
@@ -0,0 +1,50 @@
+import type { ApprovalCardItem } from '../types';
+import { CURRENT_USER } from '../types';
+
+export const MOCK_APPROVAL_CASES: ApprovalCardItem[] = [
+ {
+ id: 'ac-22',
+ type: 'lease',
+ typeLabel: '合同审批',
+ status: 'rejected',
+ listTab: 'initiated',
+ title: '杭州迅达运输有限公司',
+ subtitle: '杭州城配项目',
+ keyFacts: [
+ { label: '租赁车辆数', value: '5 辆' },
+ { label: '租金及服务费合计', value: '192000.00 元' },
+ { label: '保证金总额', value: '40000.00 元' },
+ { label: '氢气预付款金额', value: '20000.00 元' },
+ ],
+ showInitiatorInFooter: true,
+ initiatedBy: CURRENT_USER,
+ initiatedAt: '2026-06-10 14:00',
+ },
+ {
+ id: 'ac-23',
+ type: 'insurance',
+ typeLabel: '保险比价采购',
+ status: 'processing',
+ listTab: 'initiated',
+ title: '沪A51676F',
+ subtitle: '中选:国元农业保险上海分公司',
+ keyFacts: [
+ { label: '采购险种', value: '商业险' },
+ { label: '最终报价', value: '¥1000.00' },
+ { label: '保险公司数量', value: '3家' },
+ { label: '最晚付费日', value: '2026-08-09' },
+ ],
+ currentApprover: '财务部-赵总',
+ showInitiatorInFooter: true,
+ initiatedBy: CURRENT_USER,
+ initiatedAt: '2026-06-10 14:00',
+ },
+];
+
+export function filterCasesByTab(
+ cases: ApprovalCardItem[],
+ tabKey?: string,
+): ApprovalCardItem[] {
+ if (!tabKey) return cases;
+ return cases.filter((item) => item.listTab === tabKey);
+}
diff --git a/src/common/oneos-web-approval/pages/ApprovalCenterPage.tsx b/src/common/oneos-web-approval/pages/ApprovalCenterPage.tsx
new file mode 100644
index 0000000..e18972e
--- /dev/null
+++ b/src/common/oneos-web-approval/pages/ApprovalCenterPage.tsx
@@ -0,0 +1,156 @@
+import React, { useEffect, useMemo, useState } from 'react';
+import { Input, Select, Tabs } from 'antd';
+import { SearchOutlined } from '@ant-design/icons';
+import type { ApprovalCardItem, ApprovalListTab, ApprovalStatus } from '../types';
+import { ApprovalCardList } from '../components/ApprovalCardList';
+import { ApprovalDetailPlaceholder } from '../components/ApprovalDetailPlaceholder';
+import {
+ filterCasesByTab,
+ MOCK_APPROVAL_CASES,
+} from '../data/mockApprovalCases';
+import {
+ APPROVAL_TYPE_OPTIONS,
+ formatStatusLabel,
+} from '../config/approvalTypeConfig';
+
+const TAB_ITEMS: { key: ApprovalListTab; label: string }[] = [
+ { key: 'todo', label: '我的待办' },
+ { key: 'initiated', label: '我发起的' },
+ { key: 'done', label: '我的已办' },
+ { key: 'cc', label: '我的抄送' },
+];
+
+const STATUS_OPTIONS: { value: ApprovalStatus | 'all'; label: string }[] = [
+ { value: 'all', label: '全部状态' },
+ { value: 'pending', label: '审批中' },
+ { value: 'approved', label: '已通过' },
+ { value: 'rejected', label: '已驳回' },
+];
+
+export interface ApprovalCenterPageProps {
+ tabKey?: ApprovalListTab;
+ pageTitle?: string;
+ showTabs?: boolean;
+}
+
+export function ApprovalCenterPage({
+ tabKey = 'todo',
+ pageTitle,
+ showTabs = false,
+}: ApprovalCenterPageProps) {
+ const [activeTab, setActiveTab] = useState(tabKey);
+ const [statusFilter, setStatusFilter] = useState('all');
+ const [typeFilter, setTypeFilter] = useState('all');
+ const [keyword, setKeyword] = useState('');
+ const [selectedId, setSelectedId] = useState(null);
+
+ useEffect(() => {
+ setActiveTab(tabKey);
+ }, [tabKey]);
+
+ const tabItems = useMemo(() => {
+ let list = filterCasesByTab(MOCK_APPROVAL_CASES, activeTab);
+
+ if (statusFilter !== 'all') {
+ list = list.filter((item) => item.status === statusFilter);
+ }
+ if (typeFilter !== 'all') {
+ list = list.filter((item) => item.type === typeFilter);
+ }
+ if (keyword.trim()) {
+ const q = keyword.trim().toLowerCase();
+ list = list.filter(
+ (item) =>
+ item.title.toLowerCase().includes(q) ||
+ (item.subtitle?.toLowerCase().includes(q) ?? false) ||
+ item.initiatedBy.toLowerCase().includes(q) ||
+ formatStatusLabel(item).toLowerCase().includes(q),
+ );
+ }
+ return list;
+ }, [activeTab, statusFilter, typeFilter, keyword]);
+
+ useEffect(() => {
+ if (tabItems.length === 0) {
+ setSelectedId(null);
+ return;
+ }
+ if (!selectedId || !tabItems.some((item) => item.id === selectedId)) {
+ setSelectedId(tabItems[0].id);
+ }
+ }, [tabItems, selectedId]);
+
+ const selectedItem = useMemo(
+ () => tabItems.find((item) => item.id === selectedId) ?? null,
+ [tabItems, selectedId],
+ );
+
+ const handleItemClick = (item: ApprovalCardItem) => {
+ setSelectedId(item.id);
+ };
+
+ const currentTabMeta = TAB_ITEMS.find((t) => t.key === activeTab);
+ const displayTitle = pageTitle ?? currentTabMeta?.label ?? '审批中心';
+
+ return (
+
+ {showTabs ? (
+
+ setActiveTab(key as ApprovalListTab)}
+ items={TAB_ITEMS.map((t) => ({ key: t.key, label: t.label }))}
+ />
+
+ ) : null}
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/common/oneos-web-approval/styles/index.css b/src/common/oneos-web-approval/styles/index.css
new file mode 100644
index 0000000..dbb4288
--- /dev/null
+++ b/src/common/oneos-web-approval/styles/index.css
@@ -0,0 +1,603 @@
+.ap-page {
+ --ap-primary: #165dff;
+ --ap-primary-soft: rgba(22, 93, 255, 0.08);
+ --ap-border: #e5e7eb;
+ --ap-surface: #ffffff;
+ --ap-muted: #64748b;
+ --ap-text: #0f172a;
+ --ap-radius: 12px;
+ --ap-shadow: 0 1px 2px rgba(15, 23, 42, 0.06), 0 4px 16px rgba(15, 23, 42, 0.04);
+ --ap-sidebar-width: 400px;
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ padding: 0;
+ background: var(--vm-bg, #f5f7fa);
+ overflow: hidden;
+}
+
+.ap-page__tabs-bar {
+ flex-shrink: 0;
+ padding: 12px 20px 0;
+ background: var(--ap-surface);
+ border-bottom: 1px solid var(--ap-border);
+}
+
+.ap-page__tabs-bar .ant-tabs-nav {
+ margin-bottom: 0;
+}
+
+.ap-page__shell {
+ display: flex;
+ flex: 1;
+ min-height: 0;
+ gap: 0;
+}
+
+.ap-page__sidebar {
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 0;
+ width: var(--ap-sidebar-width);
+ background: var(--ap-surface);
+ border-right: 1px solid var(--ap-border);
+ min-height: 0;
+}
+
+.ap-sidebar__head {
+ flex-shrink: 0;
+ padding: 20px 16px 12px;
+ border-bottom: 1px solid #f1f5f9;
+}
+
+.ap-sidebar__title {
+ margin: 0;
+ font-size: 18px;
+ font-weight: 600;
+ color: var(--ap-text);
+ line-height: 1.4;
+}
+
+.ap-sidebar__desc {
+ margin: 4px 0 0;
+ font-size: 12px;
+ color: var(--ap-muted);
+ line-height: 1.5;
+}
+
+.ap-filter {
+ margin-bottom: 0;
+}
+
+.ap-filter--sidebar {
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ padding: 12px 16px;
+ border-bottom: 1px solid #f1f5f9;
+}
+
+.ap-filter__grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 16px;
+}
+
+.ap-filter__item {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+.ap-filter__label {
+ font-size: 13px;
+ color: var(--ap-muted);
+ font-weight: 500;
+}
+
+.ap-filter__control {
+ width: 100%;
+}
+
+.ap-filter__search {
+ width: 100%;
+}
+
+.ap-sidebar__list {
+ flex: 1;
+ min-height: 0;
+ overflow-y: auto;
+ padding: 12px;
+}
+
+.ap-sidebar__foot {
+ flex-shrink: 0;
+ padding: 10px 16px;
+ border-top: 1px solid #f1f5f9;
+ font-size: 12px;
+ color: var(--ap-muted);
+ text-align: center;
+ background: #fafbfc;
+}
+
+.ap-page__detail {
+ flex: 1;
+ min-width: 0;
+ min-height: 0;
+ overflow: hidden;
+ background: var(--ap-surface);
+}
+
+.ap-list {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.ap-list--loading,
+.ap-list--empty {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 200px;
+ background: transparent;
+ border: 1px dashed var(--ap-border);
+ border-radius: var(--ap-radius);
+}
+
+.ap-card {
+ display: flex;
+ flex-direction: column;
+ background: var(--ap-surface);
+ border: 1px solid var(--ap-border);
+ border-radius: var(--ap-radius);
+ box-shadow: var(--ap-shadow);
+ cursor: pointer;
+ transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
+ overflow: hidden;
+ position: relative;
+}
+
+.ap-card:hover,
+.ap-card:focus-visible {
+ border-color: rgba(22, 93, 255, 0.35);
+ box-shadow: 0 4px 16px rgba(22, 93, 255, 0.08);
+ outline: none;
+}
+
+.ap-card--selected {
+ border-color: rgba(22, 93, 255, 0.5);
+ background: var(--ap-primary-soft);
+ box-shadow: 0 4px 16px rgba(22, 93, 255, 0.1);
+}
+
+.ap-card--selected::before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ width: 3px;
+ background: var(--ap-primary);
+ border-radius: var(--ap-radius) 0 0 var(--ap-radius);
+}
+
+.ap-card__header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 12px;
+ padding: 14px 16px 0;
+}
+
+.ap-card__type {
+ display: inline-flex;
+ align-items: center;
+ padding: 2px 10px;
+ border-radius: 999px;
+ border: 1px solid transparent;
+ font-size: 12px;
+ font-weight: 600;
+ line-height: 20px;
+}
+
+.ap-status {
+ font-size: 12px;
+ font-weight: 600;
+ line-height: 20px;
+}
+
+.ap-status--pending {
+ color: #d97706;
+}
+
+.ap-status--approved {
+ color: #16a34a;
+}
+
+.ap-status--rejected {
+ color: #dc2626;
+}
+
+.ap-card__body {
+ flex: 1;
+ padding: 12px 16px 0;
+}
+
+.ap-card__title {
+ margin: 0;
+ font-size: 16px;
+ font-weight: 600;
+ color: var(--ap-text);
+ line-height: 1.45;
+}
+
+.ap-card__subtitle {
+ margin: 6px 0 0;
+ font-size: 13px;
+ color: var(--ap-muted);
+ line-height: 1.5;
+}
+
+.ap-card__facts {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 10px 12px;
+ margin: 14px 0 0;
+ padding: 12px;
+ border-radius: 10px;
+ background: #f8fafc;
+}
+
+.ap-card--selected .ap-card__facts {
+ background: rgba(255, 255, 255, 0.7);
+}
+
+.ap-card__fact {
+ min-width: 0;
+}
+
+.ap-card__fact dt {
+ margin: 0;
+ font-size: 12px;
+ color: var(--ap-muted);
+ line-height: 1.4;
+}
+
+.ap-card__fact dd {
+ margin: 4px 0 0;
+ font-size: 13px;
+ color: var(--ap-text);
+ font-weight: 500;
+ line-height: 1.45;
+ word-break: break-word;
+}
+
+.ap-card__fact-value--emphasis {
+ color: var(--ap-primary);
+ font-weight: 700;
+}
+
+.ap-card__risks {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ margin-top: 12px;
+}
+
+.ap-card__risk {
+ display: inline-flex;
+ align-items: center;
+ padding: 2px 10px;
+ border-radius: 999px;
+ font-size: 12px;
+ font-weight: 500;
+ background: #fff7ed;
+ color: #c2410c;
+ border: 1px solid #fed7aa;
+}
+
+.ap-card__risk--high {
+ background: #fef2f2;
+ color: #b91c1c;
+ border-color: #fecaca;
+}
+
+.ap-card__risk--medium {
+ background: #fffbeb;
+ color: #b45309;
+ border-color: #fde68a;
+}
+
+.ap-card__footer {
+ display: flex;
+ align-items: flex-end;
+ justify-content: space-between;
+ gap: 12px;
+ margin-top: 10px;
+ padding: 8px 16px 10px;
+ border-top: 1px solid #f1f5f9;
+}
+
+.ap-card__footer-meta {
+ display: flex;
+ flex-direction: column;
+ gap: 2px;
+}
+
+.ap-card__footer-text {
+ font-size: 12px;
+ color: var(--ap-muted);
+ line-height: 1.4;
+}
+
+.ap-card__action {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--ap-primary);
+ line-height: 1.4;
+ flex-shrink: 0;
+}
+
+/* Detail panel */
+.ap-detail {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ min-height: 0;
+}
+
+.ap-detail--empty {
+ align-items: center;
+ justify-content: center;
+}
+
+.ap-detail__toolbar {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex-shrink: 0;
+ padding: 12px 24px;
+ border-bottom: 1px solid #f1f5f9;
+}
+
+.ap-detail__header {
+ flex-shrink: 0;
+ padding: 20px 24px 0;
+}
+
+.ap-detail__header-main {
+ display: flex;
+ align-items: flex-start;
+ gap: 12px;
+ flex-wrap: wrap;
+}
+
+.ap-detail__title {
+ margin: 0 !important;
+ flex: 1;
+ min-width: 0;
+}
+
+.ap-detail__badge {
+ flex-shrink: 0;
+ display: inline-flex;
+ align-items: center;
+ padding: 2px 10px;
+ border-radius: 999px;
+ font-size: 12px;
+ font-weight: 600;
+ line-height: 20px;
+}
+
+.ap-detail__badge--pending {
+ background: #fff7ed;
+ color: #d97706;
+}
+
+.ap-detail__badge--approved {
+ background: #f0fdf4;
+ color: #16a34a;
+}
+
+.ap-detail__badge--rejected {
+ background: #fef2f2;
+ color: #dc2626;
+}
+
+.ap-detail__meta {
+ margin-top: 12px;
+ padding-bottom: 4px;
+}
+
+.ap-detail__tabs {
+ flex: 1;
+ min-height: 0;
+ display: flex;
+ flex-direction: column;
+ padding: 0 24px;
+}
+
+.ap-detail__tabs .ant-tabs-content-holder {
+ flex: 1;
+ min-height: 0;
+ overflow-y: auto;
+}
+
+.ap-detail__tabs .ant-tabs-content {
+ height: 100%;
+}
+
+.ap-detail__content {
+ padding: 8px 0 24px;
+}
+
+.ap-detail__subtitle {
+ margin: 0 0 16px;
+ color: var(--ap-muted);
+ font-size: 14px;
+}
+
+.ap-detail__facts {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 12px 16px;
+ margin: 0 0 16px;
+ padding: 16px;
+ border-radius: 10px;
+ background: #f8fafc;
+}
+
+.ap-detail__fact dt {
+ margin: 0;
+ font-size: 12px;
+ color: var(--ap-muted);
+}
+
+.ap-detail__fact dd {
+ margin: 4px 0 0;
+ font-size: 14px;
+ color: var(--ap-text);
+ font-weight: 500;
+}
+
+.ap-detail__fact-value--emphasis {
+ color: var(--ap-primary);
+ font-weight: 700;
+}
+
+.ap-detail__risks {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ margin-bottom: 20px;
+}
+
+.ap-detail__timeline-section {
+ margin-top: 8px;
+}
+
+.ap-detail__section-title {
+ display: block;
+ margin-bottom: 16px;
+}
+
+.ap-detail__timeline {
+ margin-top: 8px;
+}
+
+.ap-detail__timeline-item {
+ padding-bottom: 4px;
+}
+
+.ap-detail__timeline-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 12px;
+ flex-wrap: wrap;
+}
+
+.ap-detail__timeline-time {
+ font-size: 12px;
+}
+
+.ap-detail__flow-placeholder {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 280px;
+}
+
+.ap-detail__actions {
+ flex-shrink: 0;
+ display: flex;
+ justify-content: flex-end;
+ gap: 8px;
+ padding: 12px 24px 20px;
+ border-top: 1px solid #f1f5f9;
+ background: var(--ap-surface);
+}
+
+.ap-insurance-summary {
+ width: 100%;
+ border-collapse: collapse;
+ margin-bottom: 20px;
+ border: 1px solid var(--ap-border);
+ border-radius: 8px;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.ap-insurance-summary th,
+.ap-insurance-summary td {
+ padding: 10px 14px;
+ border: 1px solid #f1f5f9;
+ vertical-align: middle;
+}
+
+.ap-insurance-summary th {
+ width: 14%;
+ background: #fafbfc;
+ color: var(--ap-muted);
+ font-weight: 500;
+ text-align: left;
+}
+
+.ap-insurance-summary td {
+ width: 36%;
+ color: var(--ap-text);
+}
+
+.ap-insurance-table-section {
+ margin-top: 8px;
+}
+
+.ap-insurance-table .ant-table,
+.ap-insurance-quote-table .ant-table {
+ font-size: 13px;
+}
+
+.ap-insurance-quote-table {
+ margin: 0;
+ background: #fafbfc;
+}
+
+.ap-insurance-quote-table .ant-table-thead > tr > th {
+ background: #f1f5f9;
+}
+
+@media (max-width: 960px) {
+ .ap-page {
+ height: auto;
+ min-height: 100vh;
+ overflow: auto;
+ }
+
+ .ap-page__shell {
+ flex-direction: column;
+ }
+
+ .ap-page__sidebar {
+ width: 100%;
+ max-height: 50vh;
+ border-right: none;
+ border-bottom: 1px solid var(--ap-border);
+ }
+
+ .ap-page__detail {
+ min-height: 50vh;
+ }
+
+ .ap-filter__grid {
+ grid-template-columns: 1fr;
+ }
+
+ .ap-detail__facts {
+ grid-template-columns: 1fr;
+ }
+}
diff --git a/src/common/oneos-web-approval/types.ts b/src/common/oneos-web-approval/types.ts
new file mode 100644
index 0000000..6d8bbdc
--- /dev/null
+++ b/src/common/oneos-web-approval/types.ts
@@ -0,0 +1,73 @@
+export type ApprovalStatus = 'pending' | 'processing' | 'approved' | 'rejected';
+
+export type ApprovalTabKey = 'todo' | 'done' | 'initiated' | 'cc';
+
+export type ApprovalTypeKey =
+ | 'parking'
+ | 'vehicle_procurement'
+ | 'lease'
+ | 'charter'
+ | 'transfer'
+ | 'vehicle_change'
+ | 'replacement'
+ | 'delivery'
+ | 'return_settlement'
+ | 'pickup_receivable'
+ | 'billing'
+ | 'insurance'
+ | 'supplier'
+ | 'customer_risk'
+ | 'third_party_return'
+ | 'contract_template'
+ | 'annual_inspection'
+ | 'finance_payment'
+ | 'clearing'
+ | 'energy_account';
+
+export type ApprovalListTab = ApprovalTabKey;
+
+export interface ApprovalKeyFact {
+ label: string;
+ value: string;
+ emphasis?: boolean;
+}
+
+export interface ApprovalRisk {
+ label: string;
+ level?: 'high' | 'medium' | 'low';
+}
+
+export interface ApprovalCardItem {
+ id: string;
+ type: ApprovalTypeKey;
+ status: ApprovalStatus;
+ listTab: ApprovalListTab;
+ title: string;
+ subtitle?: string;
+ keyFacts?: ApprovalKeyFact[];
+ risks?: ApprovalRisk[];
+ currentApprover?: string;
+ initiatedBy: string;
+ initiatedAt: string;
+ typeLabel?: string;
+ footerText?: string;
+ showInitiatorInFooter?: boolean;
+ ccUsers?: string[];
+ handledBy?: string;
+}
+
+export const CURRENT_USER = '张明辉';
+
+export type StatusFilterValue = 'all' | 'pending' | 'approved' | 'rejected';
+
+export interface ApprovalFilters {
+ status: StatusFilterValue;
+ type: ApprovalTypeKey | 'all';
+ keyword: string;
+}
+
+export const EMPTY_APPROVAL_FILTERS: ApprovalFilters = {
+ status: 'all',
+ type: 'all',
+ keyword: '',
+};
diff --git a/src/prototypes/oneos-prototype-nav/nav-menu.json b/src/prototypes/oneos-prototype-nav/nav-menu.json
index d646d72..e5bb4c6 100644
--- a/src/prototypes/oneos-prototype-nav/nav-menu.json
+++ b/src/prototypes/oneos-prototype-nav/nav-menu.json
@@ -11,6 +11,37 @@
"title": "工作台",
"itemKey": "prototypes/oneos-web-workbench"
},
+ {
+ "id": "folder-oneos-approval",
+ "kind": "folder",
+ "title": "审批中心",
+ "children": [
+ {
+ "id": "item:prototypes:oneos-web-approval-initiated",
+ "kind": "item",
+ "title": "我发起的",
+ "itemKey": "prototypes/oneos-web-approval-initiated"
+ },
+ {
+ "id": "item:prototypes:oneos-web-approval-todo",
+ "kind": "item",
+ "title": "我的待办",
+ "itemKey": "prototypes/oneos-web-approval-todo"
+ },
+ {
+ "id": "item:prototypes:oneos-web-approval-done",
+ "kind": "item",
+ "title": "我的已办",
+ "itemKey": "prototypes/oneos-web-approval-done"
+ },
+ {
+ "id": "item:prototypes:oneos-web-approval-cc",
+ "kind": "item",
+ "title": "我的抄送",
+ "itemKey": "prototypes/oneos-web-approval-cc"
+ }
+ ]
+ },
{
"id": "folder-1782874599304-roj8fd",
"kind": "folder",
diff --git a/src/prototypes/oneos-prototype-nav/prototype-registry.json b/src/prototypes/oneos-prototype-nav/prototype-registry.json
index 21159ac..ad3ed0a 100644
--- a/src/prototypes/oneos-prototype-nav/prototype-registry.json
+++ b/src/prototypes/oneos-prototype-nav/prototype-registry.json
@@ -1,6 +1,6 @@
{
"version": 1,
- "updatedAt": "2026-07-14T21:21:56.448Z",
+ "updatedAt": "2026-07-16T01:04:29.814Z",
"prototypes": {
"oneos-web-workbench": {
"title": "工作台",
@@ -3688,10 +3688,10 @@
},
"oneos-prototype-nav": {
"title": "oneos-prototype-nav",
- "version": "v1.5",
- "revision": 5,
- "lastUpdated": "2026-07-14T21:21:56.445Z",
- "contentHash": "b422bb06fbff539d5519aff93209c84331cf4e503733a2b3e149ae9425b00056",
+ "version": "v1.6",
+ "revision": 6,
+ "lastUpdated": "2026-07-16T01:04:20.841Z",
+ "contentHash": "93cb00f068ce0fb8e6b47f82419f13fc51c0bb2cd2a660b9d4f7bac3357f75b3",
"trackedFiles": [
".spec/prototype-comments.json",
"index.tsx",
@@ -3701,6 +3701,20 @@
"xll-nav-source.json"
],
"changelog": [
+ {
+ "version": "v1.6",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "合并远程审批中心:保留加氢订单/记录与数量统计,同步导航注册表",
+ "files": [
+ ".spec/prototype-comments.json",
+ "index.tsx",
+ "nav-data.ts",
+ "style.css",
+ "xll-nav-menu.json",
+ "xll-nav-source.json"
+ ]
+ },
{
"version": "v1.5",
"date": "2026-07-15",
@@ -6959,735 +6973,897 @@
]
}
]
+ },
+ "oneos-web-approval": {
+ "title": "oneos-web-approval",
+ "version": "v1.17",
+ "revision": 17,
+ "lastUpdated": "2026-07-16T01:04:28.186Z",
+ "contentHash": "d54f9542ce8e8bf62137245386bf33016140cbbe6e78243322c6a23130ae83fa",
+ "trackedFiles": [
+ "index.tsx"
+ ],
+ "changelog": [
+ {
+ "version": "v1.17",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "同步审批中心注册",
+ "files": [
+ "index.tsx"
+ ]
+ },
+ {
+ "version": "v1.16",
+ "date": "2026-07-14",
+ "time": "14:17",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ ".spec/prototype-comments.json",
+ "index.tsx"
+ ]
+ },
+ {
+ "version": "v1.15",
+ "date": "2026-07-14",
+ "time": "14:09",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "ApprovalApp.tsx"
+ ]
+ },
+ {
+ "version": "v1.14",
+ "date": "2026-07-14",
+ "time": "14:03",
+ "summary": "更新页面样式",
+ "files": [
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.13",
+ "date": "2026-07-14",
+ "time": "14:03",
+ "summary": "更新页面样式",
+ "files": [
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.12",
+ "date": "2026-07-14",
+ "time": "13:59",
+ "summary": "更新页面样式",
+ "files": [
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.11",
+ "date": "2026-07-14",
+ "time": "13:55",
+ "summary": "更新页面样式",
+ "files": [
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.10",
+ "date": "2026-07-14",
+ "time": "13:54",
+ "summary": "更新页面样式",
+ "files": [
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.9",
+ "date": "2026-07-14",
+ "time": "13:19",
+ "summary": "更新页面样式",
+ "files": [
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.8",
+ "date": "2026-07-14",
+ "time": "10:58",
+ "summary": "更新页面样式",
+ "files": [
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.7",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面样式",
+ "files": [
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "version": "v1.6",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面样式",
+ "files": [
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css"
+ ]
+ },
+ {
+ "version": "v1.5",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "components/ApprovalDetailPlaceholder.tsx"
+ ]
+ },
+ {
+ "version": "v1.4",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "components/ApprovalCardList.tsx"
+ ]
+ },
+ {
+ "version": "v1.3",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "components/ApprovalCard.tsx"
+ ]
+ },
+ {
+ "version": "v1.2",
+ "date": "2026-07-14",
+ "time": "10:55",
+ "summary": "更新 mockApprovalCases.ts",
+ "files": [
+ "data/mockApprovalCases.ts"
+ ]
+ },
+ {
+ "version": "v1.1",
+ "date": "2026-07-14",
+ "time": "10:55",
+ "summary": "更新 approvalTypeConfig.ts",
+ "files": [
+ "config/approvalTypeConfig.ts"
+ ]
+ }
+ ]
+ },
+ "oneos-web-approval-initiated": {
+ "title": "我发起的",
+ "version": "v1.1",
+ "revision": 1,
+ "lastUpdated": "2026-07-16T01:04:29.438Z",
+ "contentHash": "3fba821920f13c7fff1e25a0da4c8a905a733197fae9f50ceca853525580f9f7",
+ "trackedFiles": [
+ "index.tsx"
+ ],
+ "changelog": [
+ {
+ "version": "v1.1",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "同步我发起的注册",
+ "files": [
+ "index.tsx"
+ ]
+ }
+ ]
+ },
+ "oneos-web-approval-cc": {
+ "title": "我的抄送",
+ "version": "v1.1",
+ "revision": 1,
+ "lastUpdated": "2026-07-16T01:04:29.814Z",
+ "contentHash": "4d0ea26865ca537c9227a99441ff1e552c7f0d1df05ae1c995287123a72b1090",
+ "trackedFiles": [
+ "index.tsx"
+ ],
+ "changelog": [
+ {
+ "version": "v1.1",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "同步我的抄送注册",
+ "files": [
+ "index.tsx"
+ ]
+ }
+ ]
+ },
+ "oneos-web-approval-todo": {
+ "title": "我的待办",
+ "version": "v1.0",
+ "revision": 0,
+ "lastUpdated": "2026-07-16T01:04:28.611Z",
+ "contentHash": "5766a14e5522689fbc89ca50891095a00672ea52c596ad00f0f9151c9ce1f3ba",
+ "trackedFiles": [
+ "index.tsx"
+ ],
+ "changelog": []
+ },
+ "oneos-web-approval-done": {
+ "title": "我的已办",
+ "version": "v1.0",
+ "revision": 0,
+ "lastUpdated": "2026-07-16T01:04:29.023Z",
+ "contentHash": "a1e94700ad17be8996ba2bed95a12a975a7ead4fd640326d5742d74d06f9782a",
+ "trackedFiles": [
+ "index.tsx"
+ ],
+ "changelog": []
}
},
"recentUpdates": [
{
- "prototypeId": "oneos-prototype-nav",
- "title": "oneos-prototype-nav",
- "version": "v1.5",
- "date": "2026-07-15",
- "time": "05:21",
- "summary": "同步加氢站管理导航与加氢记录/订单变更",
+ "prototypeId": "oneos-web-approval-cc",
+ "title": "我的抄送",
+ "version": "v1.1",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "同步我的抄送注册",
"files": [
- ".spec/prototype-comments.json",
- "index.tsx",
- "nav-data.ts",
- "style.css",
- "xll-nav-menu.json",
- "xll-nav-source.json"
+ "index.tsx"
]
},
{
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.19",
- "date": "2026-07-15",
- "time": "05:21",
- "summary": "Web加氢记录字段与H5订单对齐:同Store/对账口径;保留导出与预约加氢",
+ "prototypeId": "oneos-web-approval-initiated",
+ "title": "我发起的",
+ "version": "v1.1",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "同步我发起的注册",
"files": [
- ".spec/record-data-model.md",
- ".spec/requirements-prd.md",
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
+ "index.tsx"
]
},
{
- "prototypeId": "oneos-prototype-nav",
- "title": "oneos-prototype-nav",
- "version": "v1.4",
- "date": "2026-07-15",
- "time": "05:20",
- "summary": "同步加氢站管理:站点信息/加氢订单/加氢记录导航与变更",
- "files": [
- ".spec/prototype-comments.json",
- "index.tsx",
- "nav-data.ts",
- "style.css",
- "xll-nav-menu.json",
- "xll-nav-source.json"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.32",
- "date": "2026-07-15",
- "time": "05:20",
- "summary": "H5加氢订单与Web加氢记录同源数据;站端上报与对账联动",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.18",
- "date": "2026-07-14",
- "time": "23:49",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/record-data-model.md",
- ".spec/requirements-prd.md",
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
- ]
- },
- {
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
"version": "v1.17",
- "date": "2026-07-14",
- "time": "23:49",
- "summary": "更新需求说明与标注",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "同步审批中心注册",
"files": [
- ".spec/record-data-model.md",
- ".spec/requirements-prd.md"
+ "index.tsx"
]
},
{
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.16",
- "date": "2026-07-14",
- "time": "23:47",
- "summary": "更新页面样式",
+ "prototypeId": "oneos-prototype-nav",
+ "title": "oneos-prototype-nav",
+ "version": "v1.6",
+ "date": "2026-07-16",
+ "time": "09:04",
+ "summary": "合并远程审批中心:保留加氢订单/记录与数量统计,同步导航注册表",
"files": [
+ ".spec/prototype-comments.json",
"index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
+ "nav-data.ts",
+ "style.css",
+ "xll-nav-menu.json",
+ "xll-nav-source.json"
]
},
{
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.15",
- "date": "2026-07-14",
- "time": "23:47",
- "summary": "更新页面样式",
- "files": [
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
- ]
- },
- {
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.14",
- "date": "2026-07-14",
- "time": "23:46",
- "summary": "更新页面样式",
- "files": [
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
- ]
- },
- {
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.13",
- "date": "2026-07-14",
- "time": "23:45",
- "summary": "更新页面样式",
- "files": [
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
- ]
- },
- {
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.12",
- "date": "2026-07-14",
- "time": "23:44",
- "summary": "更新页面样式",
- "files": [
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
- ]
- },
- {
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.11",
- "date": "2026-07-14",
- "time": "23:44",
- "summary": "更新页面样式",
- "files": [
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.31",
- "date": "2026-07-14",
- "time": "23:28",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.30",
- "date": "2026-07-14",
- "time": "23:28",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.29",
- "date": "2026-07-14",
- "time": "23:28",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.28",
- "date": "2026-07-14",
- "time": "23:27",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.27",
- "date": "2026-07-14",
- "time": "23:25",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.26",
- "date": "2026-07-14",
- "time": "23:25",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.25",
- "date": "2026-07-14",
- "time": "23:24",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.24",
- "date": "2026-07-14",
- "time": "23:24",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.23",
- "date": "2026-07-14",
- "time": "23:23",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/Icons.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.22",
- "date": "2026-07-14",
- "time": "23:23",
+ "prototypeId": "oneos-web-workbench",
+ "title": "工作台",
+ "version": "v1.6",
+ "date": "2026-07-15",
+ "time": "08:51",
"summary": "更新页面逻辑与交互",
"files": [
- "components/Icons.tsx"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.21",
- "date": "2026-07-14",
- "time": "23:22",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
"index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
+ "pages/01-工作台.jsx"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.20",
- "date": "2026-07-14",
- "time": "23:22",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.19",
- "date": "2026-07-14",
- "time": "23:22",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.18",
- "date": "2026-07-14",
- "time": "23:21",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
- "version": "v1.17",
- "date": "2026-07-14",
- "time": "23:18",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
"version": "v1.16",
"date": "2026-07-14",
- "time": "23:17",
- "summary": "更新需求说明与标注",
+ "time": "14:17",
+ "summary": "更新页面逻辑与交互",
"files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
+ ".spec/prototype-comments.json",
+ "index.tsx"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
"version": "v1.15",
"date": "2026-07-14",
- "time": "23:17",
- "summary": "更新需求说明与标注",
+ "time": "14:09",
+ "summary": "更新页面逻辑与交互",
"files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
+ "ApprovalApp.tsx"
]
},
{
- "prototypeId": "oneos-web-h2-station",
- "title": "加氢记录",
- "version": "v1.10",
- "date": "2026-07-14",
- "time": "23:15",
- "summary": "更新页面样式",
- "files": [
- "index.tsx",
- "pages/01-加氢订单.jsx",
- "pages/02-加氢记录.jsx",
- "pages/03-站点信息.jsx",
- "styles/h2-station-vm-filter.css"
- ]
- },
- {
- "prototypeId": "oneos-h5-h2-order",
- "title": "加氢订单",
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
"version": "v1.14",
"date": "2026-07-14",
- "time": "23:09",
- "summary": "更新需求说明与标注",
- "files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
- "index.tsx",
- "styles/index.css",
- "types.ts",
- "utils/format.ts"
- ]
- },
- {
- "prototypeId": "lease-business-line-overview",
- "title": "业务条线说明",
- "version": "v1.6",
- "date": "2026-07-14",
- "time": "23:09",
+ "time": "14:03",
"summary": "更新页面样式",
"files": [
".spec/prototype-comments.json",
- "data-foundations.ts",
- "hooks.ts",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
"index.tsx",
- "lines.ts",
- "style.css"
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
"version": "v1.13",
"date": "2026-07-14",
- "time": "23:09",
- "summary": "更新需求说明与标注",
+ "time": "14:03",
+ "summary": "更新页面样式",
"files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
"index.tsx",
+ "pages/ApprovalCenterPage.tsx",
"styles/index.css",
- "types.ts",
- "utils/format.ts"
+ "types.ts"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
"version": "v1.12",
"date": "2026-07-14",
- "time": "23:08",
- "summary": "更新需求说明与标注",
+ "time": "13:59",
+ "summary": "更新页面样式",
"files": [
- ".spec/reconcile-linkage.md",
- ".spec/requirements-prd.md"
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
"version": "v1.11",
"date": "2026-07-14",
- "time": "23:07",
- "summary": "更新需求说明与标注",
+ "time": "13:55",
+ "summary": "更新页面样式",
"files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
"index.tsx",
+ "pages/ApprovalCenterPage.tsx",
"styles/index.css",
- "types.ts",
- "utils/format.ts",
- "utils/ocr-mock.ts",
- "utils/orders.ts"
+ "types.ts"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
"version": "v1.10",
"date": "2026-07-14",
- "time": "23:07",
- "summary": "更新需求说明与标注",
+ "time": "13:54",
+ "summary": "更新页面样式",
"files": [
- ".spec/2026-07-14-implementation-plan.md",
- ".spec/2026-07-14-requirements-design.md",
- "components/CreateWizard.tsx",
- "components/OrderCard.tsx",
- "components/OrderDetail.tsx",
- "components/PhoneShell.tsx",
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
"index.tsx",
+ "pages/ApprovalCenterPage.tsx",
"styles/index.css",
- "types.ts",
- "utils/format.ts",
- "utils/ocr-mock.ts",
- "utils/orders.ts"
+ "types.ts"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
"version": "v1.9",
"date": "2026-07-14",
- "time": "23:07",
+ "time": "13:19",
+ "summary": "更新页面样式",
+ "files": [
+ ".spec/prototype-comments.json",
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "审批中心",
+ "version": "v1.8",
+ "date": "2026-07-14",
+ "time": "10:58",
+ "summary": "更新页面样式",
+ "files": [
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-workbench",
+ "title": "工作台",
+ "version": "v1.5",
+ "date": "2026-07-14",
+ "time": "10:58",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "index.tsx",
+ "pages/01-工作台.jsx"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
+ "version": "v1.7",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面样式",
+ "files": [
+ "components/ApprovalCard.tsx",
+ "components/ApprovalCardList.tsx",
+ "components/ApprovalDetailPlaceholder.tsx",
+ "config/approvalTypeConfig.ts",
+ "data/mockApprovalCases.ts",
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css",
+ "types.ts"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
+ "version": "v1.6",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面样式",
+ "files": [
+ "index.tsx",
+ "pages/ApprovalCenterPage.tsx",
+ "styles/index.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
+ "version": "v1.5",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "components/ApprovalDetailPlaceholder.tsx"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
+ "version": "v1.4",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "components/ApprovalCardList.tsx"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
+ "version": "v1.3",
+ "date": "2026-07-14",
+ "time": "10:56",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "components/ApprovalCard.tsx"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
+ "version": "v1.2",
+ "date": "2026-07-14",
+ "time": "10:55",
+ "summary": "更新 mockApprovalCases.ts",
+ "files": [
+ "data/mockApprovalCases.ts"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-approval",
+ "title": "oneos-web-approval",
+ "version": "v1.1",
+ "date": "2026-07-14",
+ "time": "10:55",
+ "summary": "更新 approvalTypeConfig.ts",
+ "files": [
+ "config/approvalTypeConfig.ts"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station-analysis",
+ "title": "oneos-web-h2-station-analysis",
+ "version": "v1.6",
+ "date": "2026-07-13",
+ "time": "15:20",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢站分析.jsx",
+ "shared/h2-analysis-charts.jsx",
+ "shared/h2-analysis-mock.js"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station-analysis",
+ "title": "oneos-web-h2-station-analysis",
+ "version": "v1.5",
+ "date": "2026-07-13",
+ "time": "15:20",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢站分析.jsx",
+ "shared/h2-analysis-charts.jsx",
+ "shared/h2-analysis-mock.js"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station-analysis",
+ "title": "oneos-web-h2-station-analysis",
+ "version": "v1.4",
+ "date": "2026-07-13",
+ "time": "15:19",
+ "summary": "更新页面逻辑与交互",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢站分析.jsx",
+ "shared/h2-analysis-charts.jsx",
+ "shared/h2-analysis-mock.js"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station-analysis",
+ "title": "oneos-web-h2-station-analysis",
+ "version": "v1.3",
+ "date": "2026-07-13",
+ "time": "15:18",
"summary": "更新页面逻辑与交互",
"files": [
"index.tsx"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
- "version": "v1.8",
- "date": "2026-07-14",
- "time": "23:07",
+ "prototypeId": "oneos-web-h2-station-analysis",
+ "title": "oneos-web-h2-station-analysis",
+ "version": "v1.2",
+ "date": "2026-07-13",
+ "time": "15:18",
"summary": "更新页面逻辑与交互",
"files": [
- "components/OrderDetail.tsx"
+ "pages/01-加氢站分析.jsx"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
- "version": "v1.7",
- "date": "2026-07-14",
- "time": "23:06",
+ "prototypeId": "oneos-web-h2-station-analysis",
+ "title": "oneos-web-h2-station-analysis",
+ "version": "v1.1",
+ "date": "2026-07-13",
+ "time": "15:18",
"summary": "更新页面逻辑与交互",
"files": [
- "components/CreateWizard.tsx"
+ "shared/h2-analysis-charts.jsx"
]
},
{
- "prototypeId": "oneos-h5-h2-order",
- "title": "oneos-h5-h2-order",
- "version": "v1.6",
- "date": "2026-07-14",
- "time": "23:06",
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.46",
+ "date": "2026-07-13",
+ "time": "14:55",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "pages/站点周报统计-需求内容.js",
+ "shared/h2-station-view-shared.jsx",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.45",
+ "date": "2026-07-13",
+ "time": "14:55",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "pages/站点周报统计-需求内容.js",
+ "shared/h2-station-view-shared.jsx",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.44",
+ "date": "2026-07-13",
+ "time": "14:55",
"summary": "更新页面逻辑与交互",
"files": [
- "components/OrderCard.tsx"
+ "shared/h2-station-view-shared.jsx"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.43",
+ "date": "2026-07-13",
+ "time": "14:30",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "pages/站点周报统计-需求内容.js",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.42",
+ "date": "2026-07-13",
+ "time": "14:30",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "pages/站点周报统计-需求内容.js",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.41",
+ "date": "2026-07-13",
+ "time": "14:30",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "pages/站点周报统计-需求内容.js",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.40",
+ "date": "2026-07-13",
+ "time": "14:30",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "pages/站点周报统计-需求内容.js",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.39",
+ "date": "2026-07-13",
+ "time": "14:30",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "pages/站点周报统计-需求内容.js",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.38",
+ "date": "2026-07-13",
+ "time": "14:29",
+ "summary": "更新需求说明与标注",
+ "files": [
+ "pages/站点周报统计-需求内容.js"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.37",
+ "date": "2026-07-13",
+ "time": "13:50",
+ "summary": "更新页面样式",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.36",
+ "date": "2026-07-13",
+ "time": "13:50",
+ "summary": "更新页面样式",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "styles/h2-station-vm-filter.css"
+ ]
+ },
+ {
+ "prototypeId": "oneos-web-h2-station",
+ "title": "加氢站管理",
+ "version": "v1.35",
+ "date": "2026-07-13",
+ "time": "13:50",
+ "summary": "更新页面样式",
+ "files": [
+ "index.tsx",
+ "pages/01-加氢订单.jsx",
+ "pages/02-加氢记录.jsx",
+ "pages/03-站点信息.jsx",
+ "pages/04-站点周报统计.jsx",
+ "styles/h2-station-vm-filter.css"
]
}
]
diff --git a/src/prototypes/oneos-prototype-nav/xll-nav-menu.json b/src/prototypes/oneos-prototype-nav/xll-nav-menu.json
index 5f73b90..5d6f5f2 100644
--- a/src/prototypes/oneos-prototype-nav/xll-nav-menu.json
+++ b/src/prototypes/oneos-prototype-nav/xll-nav-menu.json
@@ -1,6 +1,6 @@
{
"version": 1,
- "updatedAt": "2026-07-14T21:21:56.182Z",
+ "updatedAt": "2026-07-16T01:04:29.807Z",
"title": "小羚羚",
"sectionId": "folder-prototypes-xll-miniapp",
"description": "氢能车辆运营移动端原型;菜单与小羚羚「小程序」项目目录同步。",
diff --git a/src/prototypes/oneos-web-approval-cc/index.tsx b/src/prototypes/oneos-web-approval-cc/index.tsx
new file mode 100644
index 0000000..3e49269
--- /dev/null
+++ b/src/prototypes/oneos-web-approval-cc/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * @name 我的抄送
+ */
+import { ApprovalApp } from '../../common/oneos-web-approval/ApprovalApp';
+
+export default function OneosWebApprovalCc() {
+ return ;
+}
diff --git a/src/prototypes/oneos-web-approval-done/index.tsx b/src/prototypes/oneos-web-approval-done/index.tsx
new file mode 100644
index 0000000..abf4cd8
--- /dev/null
+++ b/src/prototypes/oneos-web-approval-done/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * @name 我的已办
+ */
+import { ApprovalApp } from '../../common/oneos-web-approval/ApprovalApp';
+
+export default function OneosWebApprovalDone() {
+ return ;
+}
diff --git a/src/prototypes/oneos-web-approval-initiated/index.tsx b/src/prototypes/oneos-web-approval-initiated/index.tsx
new file mode 100644
index 0000000..10cb134
--- /dev/null
+++ b/src/prototypes/oneos-web-approval-initiated/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * @name 我发起的
+ */
+import { ApprovalApp } from '../../common/oneos-web-approval/ApprovalApp';
+
+export default function OneosWebApprovalInitiated() {
+ return ;
+}
diff --git a/src/prototypes/oneos-web-approval-todo/index.tsx b/src/prototypes/oneos-web-approval-todo/index.tsx
new file mode 100644
index 0000000..f9a2bc6
--- /dev/null
+++ b/src/prototypes/oneos-web-approval-todo/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * @name 我的待办
+ */
+import { ApprovalApp } from '../../common/oneos-web-approval/ApprovalApp';
+
+export default function OneosWebApprovalTodo() {
+ return ;
+}
diff --git a/src/prototypes/oneos-web-approval/index.tsx b/src/prototypes/oneos-web-approval/index.tsx
new file mode 100644
index 0000000..2d4ce6a
--- /dev/null
+++ b/src/prototypes/oneos-web-approval/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * @name 审批中心
+ */
+import { ApprovalApp } from '../../common/oneos-web-approval/ApprovalApp';
+
+export default function OneosWebApproval() {
+ return ;
+}