沉淀页面设计规则(page-design-rules-audit)
这个提交包含在:
@@ -160,6 +160,48 @@ change the visual treatment once while preserving component contracts.
|
||||
- Focused Playwright screenshot coverage when changing login, Portal, primary
|
||||
PC list pages or command-bar/table styling.
|
||||
|
||||
## Convention: Page Template Taxonomy
|
||||
|
||||
**What**: hyb-oa frontend pages use six layout templates. New or redesigned
|
||||
pages must pick one primary template before implementation:
|
||||
|
||||
- `工作台总览`: Portal and mobile home. Compact summary, today's actionable
|
||||
items, conditional progress/blocker/reminder sections.
|
||||
- `任务处理列表`: workflow task queues. Pending summary, task list, processed
|
||||
records and advanced filters.
|
||||
- `业务台账列表`: reimbursement, contracts, projects, payments, AP and invoices.
|
||||
Page-header primary action, command bar, list/table body and folded ledger
|
||||
tools.
|
||||
- `主从工作台`: procurement, assets and inventory checks. Left/index list plus
|
||||
right/current-object detail and actions.
|
||||
- `详情工作区`: reimbursement detail, workflow task detail, project detail and
|
||||
future contract detail. Overview, facts/evidence, right-side summary/command
|
||||
panel and history.
|
||||
- `管理配置页`: people, organization, master data, approval rules, workflow
|
||||
definitions, feature flags and audit logs. Grouped settings, searchable
|
||||
tables and confirmed destructive/configuration actions.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- A page has one primary template. Local sections may reuse shared components,
|
||||
but the page must not mix ledger, configuration, detail and dashboard patterns
|
||||
without an explicit Trellis task.
|
||||
- Mobile is the responsive expression of these templates: top status/focus,
|
||||
card list or sectioned detail, bottom primary action. Do not create a PC shell
|
||||
inside mobile routes.
|
||||
- B-class business pages should usually choose `业务台账列表` or `主从工作台`.
|
||||
Use a ledger when records open into details; use master-detail when users
|
||||
select one object and edit/process it in the same workspace.
|
||||
- A-class task pages must not drift into configuration surfaces. C-class
|
||||
configuration pages must not appear as ordinary employee task pages.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright or screenshot checks for changed A-class, mobile or shared
|
||||
template surfaces.
|
||||
|
||||
## Convention: Global Shell And Page Header Baseline
|
||||
|
||||
**What**: PC page redesigns should preserve the shared Wave0-2 shell and
|
||||
@@ -168,8 +210,10 @@ header baseline instead of recreating page-local wrappers:
|
||||
- `AppShellLayout` owns the PC shell background and content offset through
|
||||
`app-shell` and `app-shell-main`.
|
||||
- `Sidebar` and `NavLinks` own role-aware task navigation. The mental model is
|
||||
a short primary task list plus collapsed `更多`; management configuration is
|
||||
represented by one `管理` entry instead of many sidebar rows.
|
||||
a task-first primary list plus collapsed `更多`; enabled OA-owned business
|
||||
ledgers such as contracts, procurement, assets and projects should not be
|
||||
hidden in `更多` by default when the current role has access. Management
|
||||
configuration is represented by one `管理` entry instead of many sidebar rows.
|
||||
- `Topbar` is a compact command surface: page title, group badge, user context,
|
||||
global search and notifications. Do not expand it back into a large hero.
|
||||
- `PageHeader` and `WorkspaceHeader` should use `page-header-shell`,
|
||||
@@ -187,6 +231,10 @@ point and prevents each route from inventing a different title/action layout.
|
||||
- Sidebar entries should be role-aware and task-first for domestic tech startups
|
||||
under 10 people; do not expose all permission-allowed modules as a default
|
||||
module catalog.
|
||||
- Do show enabled, permission-allowed day-to-day business ledgers directly in
|
||||
the primary sidebar, including `合同`, `采购`, `资产` and `项目` when relevant.
|
||||
`更多` is for low-frequency, frozen, staged or occasional entries, not a
|
||||
place to bury common work.
|
||||
- Approvers see `待我处理`; ordinary employees should not see `待办` or
|
||||
`审批待办` in the sidebar by default.
|
||||
- PC leave navigation uses `请假记录` unless the current task explicitly opens OA
|
||||
@@ -196,8 +244,9 @@ point and prevents each route from inventing a different title/action layout.
|
||||
- Finance labels should use work names such as `付款`, `应付账款` and `票据`;
|
||||
internal platform words like `AP 运营`, `ERP 集成` and `功能开关` should be
|
||||
hidden behind management wording or renamed for users.
|
||||
- `更多` is a lightweight collapsed row for low-frequency entries; do not add a
|
||||
sidebar explanation card, subtitle or onboarding copy around it.
|
||||
- `更多` is a lightweight collapsed row for low-frequency, frozen, staged or
|
||||
occasional entries; do not add a sidebar explanation card, subtitle or
|
||||
onboarding copy around it.
|
||||
- Playwright navigation helpers should use exact names or anchored regex for
|
||||
short sidebar labels such as `管理`, otherwise fuzzy role-name matching can
|
||||
click longer labels such as `预算管理`.
|
||||
@@ -220,6 +269,823 @@ point and prevents each route from inventing a different title/action layout.
|
||||
`Topbar`, `NavLinks`, `PageHeader`, `WorkspaceHeader`, login, Portal or other
|
||||
A-class pages.
|
||||
|
||||
## Convention: Action Placement Baseline
|
||||
|
||||
**What**: Page actions, filters, ledger tools and destructive commands use one
|
||||
system-wide coordinate model. New and redesigned pages should not invent
|
||||
page-local action placement.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- PC page primary action lives in the page header action area
|
||||
(`WorkspaceHeader` / `PageHeader` actions). Keep one primary action per page
|
||||
surface and at most two visible secondary actions.
|
||||
- List filters live in the first command bar below the page header. Search,
|
||||
status, scope and other common filters stay on the left; ledger tools such as
|
||||
export, batch, statistics, templates and advanced filters stay on the right or
|
||||
inside `台账工具` / `更多`.
|
||||
- Row-level actions live at the right edge of a table row or at the tail of a
|
||||
card. Prefer `查看详情`, `查看处理` and `继续编辑` over broad verbs that hide the
|
||||
result.
|
||||
- Detail pages keep facts and evidence in the main content. High-risk actions
|
||||
such as approve, reject, return, pay, publish, delete and configuration
|
||||
switching live in the right command panel or a clearly separated
|
||||
`detail-action-stack`, with confirmation that includes the current object
|
||||
summary.
|
||||
- Form save/submit actions live at the form bottom on PC. Long forms may add a
|
||||
right-side summary command panel, but the same action should not be repeated in
|
||||
unrelated header, row and footer locations.
|
||||
- Mobile pages use top status/focus content plus a bottom safe-area action
|
||||
surface for the primary action. Do not copy PC command bars or wide tables
|
||||
into mobile routes.
|
||||
- Batch actions only appear after selection, as a contextual command bar or
|
||||
bottom sticky bar.
|
||||
- Destructive, financial, approval and configuration-changing actions must be
|
||||
visually and structurally separated from normal navigation/edit actions.
|
||||
|
||||
**Why**: hyb-oa targets small teams where one person may switch roles many times
|
||||
per day. Stable action coordinates reduce relearning and help a solo developer
|
||||
avoid page-by-page exceptions.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright or screenshot checks when changing shared page headers,
|
||||
command bars, task lists, detail action panels or mobile bottom actions.
|
||||
|
||||
## Convention: State-Driven Actions
|
||||
|
||||
**What**: Business actions are derived from explicit object state and current
|
||||
actor context. Do not scatter page-local button conditions across route
|
||||
components.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Before redesigning a page with mutable business records, define or reference a
|
||||
state matrix. The matrix must cover object state, actor role, primary action,
|
||||
secondary actions, forbidden actions, reason text, risk level and confirmation
|
||||
requirement.
|
||||
- Common lifecycle states include draft, submitted, in approval, returned or
|
||||
rejected, approved, pending execution or payment, completed or paid,
|
||||
cancelled, abnormal and archived. Use the business module's real names when
|
||||
they differ.
|
||||
- Draft states prioritize edit, submit and delete draft. Do not show approval or
|
||||
payment actions there.
|
||||
- In-approval states prioritize progress, withdraw and supplement-material
|
||||
actions. Approve, reject and return actions belong to the current user's
|
||||
workflow task detail, not broad ledger rows.
|
||||
- Returned or rejected states prioritize correction and resubmission.
|
||||
- Approved-but-not-paid states route payment work to finance or cashier views;
|
||||
ordinary employee views should explain the next step instead of exposing
|
||||
executable payment controls.
|
||||
- Payment actions such as mark paid, register payment, cancel payment, batch
|
||||
payment and execute payment live only in payment, finance-processing,
|
||||
payment-batch detail or an explicitly current finance task panel.
|
||||
Reimbursement, procurement, contract and project ledgers/details show payment
|
||||
status, receipt status, `查看付款`, `补回单` or a payment-record link instead
|
||||
of executable payment controls.
|
||||
- Paid, completed, archived and cancelled states are read-mostly. Print, export,
|
||||
attachment download and history belong in `更多` or audit paths when allowed.
|
||||
- Abnormal states must explain source, impact and next step. A red status label
|
||||
alone is insufficient.
|
||||
- Destructive, financial, approval and configuration-changing actions require
|
||||
confirmation that shows the current object summary and writes audit evidence
|
||||
when the backend supports it.
|
||||
- The frontend may hide disabled actions or show reason text, but the backend
|
||||
remains the source of truth for permission and state validation.
|
||||
- Use destructive lifecycle verbs consistently: `删除` only for drafts,
|
||||
non-effective temporary records or wrong materials that have not entered a
|
||||
business process; `撤回` for initiator withdrawal during allowed workflow
|
||||
states; `取消` when the business will not continue; `作废` when a numbered,
|
||||
signed, paid, published or effective object becomes invalid; `归档` when a
|
||||
completed object is locked for retention. Submitted business records should
|
||||
not be physically deleted from ordinary UI paths.
|
||||
|
||||
**Why**: State-driven actions prevent pages from showing buttons that the user
|
||||
cannot complete and keep reimbursement, procurement, contracts, assets and
|
||||
payments consistent as the system grows.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright coverage for changed state/action behavior, especially
|
||||
draft, rejected/returned, in-approval, approved, paid/completed, cancelled and
|
||||
abnormal states.
|
||||
|
||||
## Convention: Role-Scoped Data Surfaces
|
||||
|
||||
**What**: The backend is the source of truth for permissions and data scope. The
|
||||
frontend shapes the authorized capabilities into the current task role instead
|
||||
of exposing every allowed tool at once.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Ordinary employee views default to `我的`, `与我相关`, `我发起` and
|
||||
`需要我补充`. Do not show company-wide ledgers, batch tools, export, audit,
|
||||
configuration, internal IDs or other people's sensitive attachments by
|
||||
default.
|
||||
- Initiator views emphasize current status, next step, supplement-material
|
||||
needs, approval/payment progress and whether edit or withdraw is allowed.
|
||||
- Approver and processor views emphasize `待我处理` and the current node task.
|
||||
Show approve, reject, return or transfer actions only when the server-backed
|
||||
task assignment says the current user can act.
|
||||
- Approval actions such as approve, reject, return and transfer execute only in
|
||||
`待我处理`, workflow task detail, mobile approval detail or an explicitly
|
||||
current task-processing panel. Business ledger rows and ordinary business
|
||||
details use `查看处理`, `查看进度`, `补材料` or a link into the workflow task;
|
||||
they must not duplicate approval action buttons.
|
||||
- Finance and cashier views may expose authorized reimbursement, payment,
|
||||
invoice, AP, receipt and exception operations. Full-scope, export, batch,
|
||||
delegated creation and statistics tools belong in `台账工具`, `更多` or
|
||||
role-only panels.
|
||||
- Owner and project-lead views emphasize team/project scope, blockers, risks and
|
||||
approvals. They should not drift into system configuration unless the route is
|
||||
a management route.
|
||||
- Admin views live under `管理` and cover people, organization, workflow,
|
||||
feature flags, integrations, audit and troubleshooting. Do not mix these
|
||||
controls into ordinary employee paths.
|
||||
- Read-only or audit views can show authorized evidence but must not show
|
||||
mutable edit, approval, payment, publish or disable actions.
|
||||
- Do not add a global role or identity switcher. Multi-role users do not choose
|
||||
`员工` / `财务` / `管理员` before using the system. Routes infer the most
|
||||
relevant task view by default.
|
||||
- Multi-role users may switch scope inside a specific authorized ledger, but the
|
||||
default scope follows the page purpose: reimbursement starts with mine,
|
||||
workflow tasks start with my tasks, ledgers start with relevant or recent
|
||||
records, management starts with management scope. Use route-local scope
|
||||
controls such as `我相关` / `我负责` / `财务处理` / `全范围`.
|
||||
- Use explicit controls such as `我的 / 团队 / 全范围` only when the server grants
|
||||
those scopes. Hiding controls in the frontend is not a security boundary.
|
||||
- Unauthorized actions should usually be hidden. When explanation is useful,
|
||||
show short natural Chinese reasons such as `当前节点不是你处理`, `已支付单据不可编辑`
|
||||
or `仅财务可导出`.
|
||||
|
||||
**Why**: hyb-oa users often wear several hats. Role-scoped surfaces keep one
|
||||
person's broad authority from turning every page into an admin console.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Role-focused Playwright coverage when changing visibility for employee,
|
||||
approver, finance/owner or admin paths.
|
||||
|
||||
## Convention: User-Facing Identifiers And Copy Semantics
|
||||
|
||||
**What**: Ordinary product surfaces use business identifiers and natural
|
||||
Chinese. Internal identifiers are auxiliary evidence for audit and
|
||||
troubleshooting, not primary user-facing content.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Use business identifiers, names or summaries as primary labels: reimbursement
|
||||
number, purchase request number, contract number, asset number, payment batch
|
||||
number and project name.
|
||||
- Do not show UUID, taskId, entityId, permission code, role code, internal state
|
||||
code, raw payload, full local path, API path, database field name, OCR
|
||||
provider, debug trace, Secret or token on ordinary employee, approver,
|
||||
finance or mobile paths.
|
||||
- Audit logs, admin troubleshooting, integration failure details, printed
|
||||
evidence and export handoff files may show necessary internal IDs when
|
||||
authorized. Place them in low-priority areas such as `技术信息`, `审计信息` or
|
||||
`排障信息`; never use them as the page title, card title, button label or
|
||||
first ordinary list column.
|
||||
- Show one primary identifier for the same object in one surface. Avoid placing
|
||||
business number, UUID, taskId and entityId together unless the route is an
|
||||
audit/troubleshooting route.
|
||||
- Translate technical enum values and platform words into natural Chinese:
|
||||
`PENDING_APPROVAL` becomes `审批中`; `REJECTED` becomes `已驳回` or
|
||||
`被退回待补正`; `AP Operations` becomes `应付账款`; `Feature Flag` becomes
|
||||
management wording.
|
||||
- Time copy should answer the business question. Prefer `已等待多久`, `接收于`,
|
||||
`提交于`, `支付于` and `归档于` over generic `更新时间` when the user needs to
|
||||
decide what to do.
|
||||
- Errors and abnormal states must explain source, impact and next step in
|
||||
natural Chinese. Do not surface only HTTP codes, backend enum names or red
|
||||
badges.
|
||||
- Notifications and mobile cards use the shortest useful business identifier or
|
||||
summary. Do not pack long technical IDs into small surfaces.
|
||||
|
||||
**Why**: Internal implementation language makes the product feel complex and
|
||||
unfamiliar. Business identifiers and natural Chinese keep small-team workflows
|
||||
legible.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- UI tests or screenshot review for changed list/detail/notification/mobile
|
||||
surfaces to confirm internal IDs and technical enum names are not visible.
|
||||
|
||||
## Convention: Ledger List Defaults
|
||||
|
||||
**What**: Business list and ledger pages default to a light, task-oriented list.
|
||||
Advanced ledger capabilities remain available but must not dominate the first
|
||||
screen.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Keep 3 to 5 high-frequency filters visible by default. Prioritize search,
|
||||
status, scope and date/time; add business-specific filters such as project,
|
||||
person or type only when they are genuinely frequent.
|
||||
- The default view must match the route's main job: `我的报销`, `待我处理`,
|
||||
`合同台账`, `资产台账` and similar task nouns. Do not default ordinary users
|
||||
into company-wide management views.
|
||||
- Rows and cards must answer what the object is, current state, why it relates
|
||||
to the current user and the next action.
|
||||
- Place common filters on the left side of the command bar below the page
|
||||
header. Put export, batch, statistics, templates, full-scope, advanced
|
||||
filters, delegated creation and low-frequency module links in `台账工具`,
|
||||
`更多` or role-only panels.
|
||||
- Batch actions appear only after selection, as a contextual command bar or
|
||||
bottom sticky bar. High-risk batch actions such as approve, pay, delete or
|
||||
publish require summary confirmation and result details.
|
||||
- Export is not a primary page action. Explain export scope and sensitive
|
||||
content when relevant; finance, contract, asset and invoice exports must stay
|
||||
permissioned and auditable.
|
||||
- PC ledgers may use pagination, sorting and density controls. Default columns
|
||||
should be decision-supporting fields only; low-frequency fields belong in
|
||||
details, column configuration or advanced filters.
|
||||
- Empty states are status-specific. `没有草稿`, `没有被驳回`, `没有待处理` and
|
||||
`没有异常` should not all share one generic explanatory panel.
|
||||
- Mobile routes do not copy PC ledger tools. Use search, status filtering, card
|
||||
lists and one primary action; leave complex analysis, export and broad-scope
|
||||
management to PC.
|
||||
- Contract, procurement, project and finance ledgers use a list-to-detail
|
||||
boundary. The list is for discovery, filtering, status reading and navigation.
|
||||
High-risk or sensitive actions such as contract download, archive, payment,
|
||||
export, batch processing, void/cancel and sensitive attachment viewing belong
|
||||
in detail workspaces, detail command panels or `台账工具`, with permission,
|
||||
audit and confirmation.
|
||||
- Default ledger scope follows the current task role: ordinary employees see
|
||||
`我发起` / `我相关`, owners and project leads see `我负责` / `项目相关`, finance
|
||||
sees `待复核` / `待付款` / `异常`, and admins may enter or switch to `全范围`.
|
||||
Full scope, export and batch commands stay in `台账工具` or role-only panels,
|
||||
not ordinary first screens.
|
||||
- Contract ledgers in V1 are registration, archive, due/renewal reminder and
|
||||
relation surfaces for project, procurement and payment context. Do not design
|
||||
`/contracts-registry` as e-signature, legal-review, clause-library,
|
||||
version-collaboration or full CLM software. If contract approval is needed,
|
||||
link to the OA approval center or a separate future task instead of adding an
|
||||
approval workspace inside the contract ledger.
|
||||
- Procurement ledgers in V1 are request, approval, attachment, light
|
||||
acceptance/archive and relation surfaces for project, contract and payment/AP
|
||||
context. Do not design `/purchase-requests` as purchase-order lifecycle,
|
||||
inventory, three-way matching, supplier-lifecycle, tendering or ERP software.
|
||||
Approved procurement means the request was approved; it does not imply paid,
|
||||
received into inventory or converted into a fixed asset.
|
||||
- Project pages in V1 are light project ledgers for status, owner/member,
|
||||
milestone/task, risk, delivery-record and related reimbursement, procurement,
|
||||
contract and payment context. Do not design `/projects` as full project
|
||||
management software with Gantt charts, complex dependencies, timesheets,
|
||||
resource scheduling, OKR, portfolio management or large collaboration suites.
|
||||
Project pages summarize and route; source records stay in their business
|
||||
modules.
|
||||
- Finance ledgers in V1 are payment-preparation, payment-batch, receipt-audit,
|
||||
AP-status, invoice/OCR-status and agency-accounting handover summaries. Do
|
||||
not design payment, AP or invoice pages as online banking, bank-statement
|
||||
ingestion, ERP/general-ledger, voucher-generation, auto-reconciliation, tax
|
||||
filing or full accounting software. Real payment stays in offline banking or
|
||||
existing finance/accounting workflows; OA records status, evidence and
|
||||
handover summaries.
|
||||
- Payment actions require the finance/payment context: amount, payee or target
|
||||
object, source records, offline payment explanation, evidence completeness,
|
||||
receipt requirement and correction boundary. Do not place `标记已付款`,
|
||||
`取消付款`, `批量付款` or `执行付款` directly in reimbursement, procurement,
|
||||
contract or project ledgers/details.
|
||||
- Cross-module relation sections are summary-and-route surfaces. Project,
|
||||
procurement, contract, reimbursement, asset and payment pages may show related
|
||||
business number/name, status, amount or quantity, owner, evidence completeness
|
||||
and next-step summary, then link to the owning detail/task/finance page. Do not
|
||||
duplicate the owning module's approval actions, payment actions, invoice/OCR
|
||||
processing, contract-body download, sensitive attachment actions, state machine
|
||||
or batch tools inside another module's relation card.
|
||||
|
||||
**Why**: The product's main complexity complaint is too many visible operations.
|
||||
Light default ledgers keep daily work simple while preserving advanced finance
|
||||
and management workflows.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright or screenshot checks when changing list filters, command
|
||||
bars, `台账工具`, batch selection behavior, empty states or mobile list cards.
|
||||
|
||||
## Convention: Asset Registry Pages
|
||||
|
||||
**What**: Asset pages render `FA` fixed assets as a lightweight responsibility
|
||||
ledger inside the unified asset registry, not as a full accounting fixed-asset
|
||||
subsystem.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- The default `/assets` view answers where the asset is, who uses it, who is
|
||||
responsible for it, what state it is in and whether it needs inventory or
|
||||
handover. Do not lead with depreciation, accounting subjects or ERP sync.
|
||||
- Register physical items that must be returned, transferred, inventoried or
|
||||
protected, such as computers, monitors, disks, equipment and security media.
|
||||
Do not create `FA` cards for ordinary consumables.
|
||||
- Every `FA` card needs an asset number. Physical assets that can carry labels
|
||||
should expose QR-label status for scan, inventory, assignment and return
|
||||
workflows. Assets that cannot be labeled must still expose serial number,
|
||||
custodian and location as the lookup fallback.
|
||||
- Inventory cadence is lightweight: quarterly routine checks by default, event
|
||||
checks for departure, transfer, repair and retirement, and monthly custodian
|
||||
plus location confirmation for high-risk physical assets such as backup disks,
|
||||
security media and critical equipment.
|
||||
- Assignment, return and transfer are daily flow actions that admins may record
|
||||
with audit evidence. Disposal actions such as retirement, loss, sale and gift
|
||||
require owner confirmation, a reason and consequence summary. If compensation,
|
||||
money or responsibility is disputed, the asset UI records pending/confirmed
|
||||
outcomes only and must not complete the dispute in one click.
|
||||
- Keep acquisition source, business number, owner/custodian, location, status,
|
||||
assignment, return, transfer, repair, retirement, inventory result and
|
||||
handover evidence visible in the business flow.
|
||||
- Procurement or reimbursement records may expose an asset-candidate signal, but
|
||||
they must not create an `FA` asset card automatically after approval,
|
||||
submission or payment. The asset registry UI may guide admins from candidates
|
||||
to `新建资产卡片`, but the card is created only after manual verification of
|
||||
delivery, quantity, owner/custodian, consumable status, returns and gifts.
|
||||
- Move depreciation, residual value, accounting subject and monthly
|
||||
depreciation voucher concepts out of the OA primary UI unless a later Trellis
|
||||
task explicitly scopes accounting-ledger work.
|
||||
- Keep classification maintenance, ERP sync, raw metadata and advanced filters
|
||||
behind management, collapsed or advanced surfaces so they do not dominate the
|
||||
asset list/detail first screen.
|
||||
- Mobile asset lookup should prefer QR scan and fall back to asset number or
|
||||
serial number input. Do not require heavy photo inventory unless a later task
|
||||
explicitly scopes it.
|
||||
- Asset list/detail UI may show last inventory, next inventory and overdue
|
||||
hints. Do not turn cadence into a complex scheduling/configuration console in
|
||||
the default asset registry view.
|
||||
- Disposal commands must be visually separated from assignment/return/transfer
|
||||
commands and use confirmation that shows asset number, name, owner, current
|
||||
custodian, location, reason and effect on asset status.
|
||||
- Electronic assets (`EA-DOC`, `EA-SYS`, `EA-REPO`, `EA-BKP`) are metadata and
|
||||
responsibility indexes. Show owner, custodian/admin, permission-recovery
|
||||
requirement, backup or restore-verification date, sensitivity level and
|
||||
archive-location summary. Do not display or store source packages, secrets,
|
||||
tokens, full configs, real full paths or backup contents.
|
||||
- `EA-DOC` list/detail views show document name, type, hash or verification
|
||||
summary, sensitivity level, owner, related project/contract/payment and
|
||||
archive-location summary. Contract text, bank statements, certificate
|
||||
originals, customer materials, sensitive quotes, payroll/social-security data
|
||||
and personal identity materials must not appear as ordinary asset-page
|
||||
content; route business originals through their module attachment permissions
|
||||
or offline controlled archive.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- Asset page screenshots or E2E assertions should verify the first screen is
|
||||
asset-list/detail/task oriented, with classification and integration tooling
|
||||
demoted.
|
||||
- Mobile asset scan tests should cover lookup, summary and one allowed action;
|
||||
mobile must not expose classification maintenance or full metadata editing.
|
||||
Include QR scan or manual asset-number/serial-number fallback when this
|
||||
surface changes.
|
||||
- Electronic asset UI changes should assert that sensitive source/config/backup
|
||||
content and full paths are not visible in ordinary list/detail/mobile views.
|
||||
- `EA-DOC` UI changes should assert that high-sensitive originals are not
|
||||
rendered in ordinary asset list/detail/mobile views.
|
||||
|
||||
## Convention: Forms, Drafts And Validation
|
||||
|
||||
**What**: Long business forms support interruption and recovery. Save draft and
|
||||
submit are distinct actions with different consequences.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Long forms should support drafts by default when the business object requires
|
||||
multiple fields, line items or materials, including reimbursements,
|
||||
procurement, contract drafting, asset intake and payment supplement flows.
|
||||
- `保存草稿` stores progress only. It must not trigger approval, payment,
|
||||
publishing or external synchronization. `提交` enters the business workflow.
|
||||
- Draft save may allow incomplete data, but it must preserve entered fields,
|
||||
line items, attachment references and the recoverable object state.
|
||||
- Before submit, run business validation and show a summary confirmation with
|
||||
the object summary, amount or quantity, important contract/asset/payment
|
||||
facts, attachment or invoice completeness, and next node or consequence.
|
||||
- Material upload is type-first. Let the user choose or enter the material type
|
||||
before upload, then apply type-specific copy, validation, permissions, audit
|
||||
and display placement. Do not use one generic attachment uploader for PDF
|
||||
invoices, ordinary attachments, contract files, payment receipts, acceptance
|
||||
materials, asset materials and electronic-document indexes.
|
||||
- Upload labels must describe the result, such as `上传 PDF 发票`,
|
||||
`补充付款回单`, `上传合同文件`, `补充验收材料` or `登记资产材料`.
|
||||
- Validation errors must point to the field, line item, invoice, attachment,
|
||||
contract material or asset section that needs work. A top-level `提交失败`
|
||||
message alone is insufficient.
|
||||
- Separate blocking errors from warnings. Blocking errors prevent submit;
|
||||
warnings may allow users to confirm and continue when the business rule
|
||||
permits it.
|
||||
- Server-side validation failures must preserve user input and show repair
|
||||
guidance in natural Chinese.
|
||||
- Warn before navigation when the form has unsaved changes, including leaving
|
||||
the route, closing a modal, switching record or returning to the list.
|
||||
- Autosave can be used as an enhancement, but the visible state must still make
|
||||
clear whether the object is draft, submitted or failed to save.
|
||||
- Mobile forms keep only necessary fields, material upload, status explanation
|
||||
and a bottom safe-area primary action. Do not move admin configuration,
|
||||
complex configuration matrices, bulk import or workflow design into mobile
|
||||
forms.
|
||||
- Mobile validation messages should appear near the field or material card, and
|
||||
bottom actions must not cover the final input.
|
||||
|
||||
**Why**: Small-team users often switch tasks mid-form. Drafts and precise
|
||||
validation prevent repeated re-entry and reduce support/debugging cost.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright coverage for draft save, submit validation, unsaved-change
|
||||
protection and server-validation failure paths when changing form behavior.
|
||||
|
||||
## Convention: Detail Evidence Layout
|
||||
|
||||
**What**: Detail pages use one evidence-first structure so users can understand
|
||||
state, facts and consequences before acting.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Use this order for reimbursement, workflow task, procurement, contract, asset,
|
||||
project and payment details: status/next step, business summary, evidence
|
||||
materials, risk or validation signals, approval/processing history, actions.
|
||||
- The top overview shows business number or name, current state, critical amount
|
||||
or object facts, current handler or next node, and a clear return path.
|
||||
- The first content block is `当前状态与下一步`: explain where the object is,
|
||||
who needs to act, what happens next and whether there are blockers or
|
||||
warnings.
|
||||
- The business summary block shows the fields needed before approval or review:
|
||||
requester, amount, project, purchase object, contract counterparty, asset
|
||||
owner, payment batch and similar module facts.
|
||||
- Evidence materials sit in the main content, grouped by business meaning:
|
||||
line items, PDF invoices, attachments, contract files, asset photos/numbers,
|
||||
receipts and acceptance materials.
|
||||
- Risk or validation sections appear only when there is a real signal such as
|
||||
budget issue, duplicate invoice, missing attachment, contract expiry, asset
|
||||
anomaly or payment failure.
|
||||
- Approval and processing history is for traceability. Keep a useful summary
|
||||
visible, but do not let full history crowd out current status and evidence.
|
||||
- PC high-risk actions live in the right command panel or separated action
|
||||
stack. Mobile high-risk actions live in the bottom action surface or a
|
||||
confirmation panel.
|
||||
- Approve, reject, return, pay, publish, delete and void actions must show the
|
||||
object summary and consequence before execution.
|
||||
- When evidence is incomplete, change the primary action to supplement material,
|
||||
view issues or an explained disabled state. Do not leave users guessing from a
|
||||
disabled button alone.
|
||||
- List and ledger rows show only evidence completeness summaries, missing
|
||||
evidence hints and a detail entry. Invoice preview, attachment download,
|
||||
contract file viewing, receipt download, evidence deletion and bulk packaging
|
||||
belong in detail workspaces, detail command panels, `台账工具` or authorized
|
||||
audit paths.
|
||||
- Sensitive evidence such as invoices, contracts, receipts and attachments must
|
||||
be permissioned; download and export belong in `更多` or audit paths when
|
||||
appropriate.
|
||||
- Detail evidence sections group materials by type. Do not mix invoices,
|
||||
ordinary attachments, contract files, receipts, asset materials and
|
||||
electronic-document indexes in one undifferentiated list.
|
||||
- Mobile details use a top focus card, sectioned cards and bottom safe-area
|
||||
actions. Do not copy PC two-column detail or wide tables into mobile.
|
||||
|
||||
**Why**: Detail pages are the place where users decide whether to approve,
|
||||
reject, pay or supplement materials. Consistent evidence order reduces
|
||||
misreads and accidental actions.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright or screenshot checks when changing detail overview,
|
||||
evidence sections, history placement, right command panels or mobile detail
|
||||
bottom actions.
|
||||
|
||||
## Convention: Mobile Lightweight Surfaces
|
||||
|
||||
**What**: Mobile and Enterprise WeChat WebView routes are lightweight action
|
||||
surfaces. They are not compressed PC management consoles.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Mobile may support lightweight submit, supplement-material, status lookup,
|
||||
task handling, scanning, upload and message-deeplink flows.
|
||||
- Keep mobile pages to top status or focus card, card list or sectioned detail,
|
||||
and bottom safe-area primary action.
|
||||
- Mobile home should show compact status and today's actionable items. Do not
|
||||
add a full module directory or dashboard.
|
||||
- Mobile lists use search/status filtering, cards and one primary action. Do not
|
||||
use wide tables, column configuration, complex multi-column filters,
|
||||
full-scope management, admin configuration, batch export, bulk approval or
|
||||
bulk payment.
|
||||
- Mobile details use a focus card, sectioned evidence and bottom actions. Do not
|
||||
copy PC two-column layouts.
|
||||
- Mobile forms keep necessary fields, material upload, field-local validation
|
||||
and a bottom action. Do not put admin configuration, workflow configuration,
|
||||
feature flags, statistics dashboards or bulk import into mobile forms.
|
||||
- Bottom actions must account for safe area and keyboard overlap. Button text
|
||||
must remain readable on narrow screens.
|
||||
- Dangerous mobile actions must open a confirmation panel that shows object
|
||||
summary and consequence.
|
||||
- Ordinary mobile paths must not show internal IDs, permission codes,
|
||||
configuration matrices or audit troubleshooting panels.
|
||||
- Enterprise WeChat remains the primary owner for daily HR/attendance actions
|
||||
such as leave, missed punch, outing, overtime and check-in. OA mobile shows
|
||||
mirror/history/exception/emergency takeover according to the business
|
||||
boundary.
|
||||
|
||||
**Why**: Most mobile use happens from notifications or quick context switches.
|
||||
Reducing mobile scope keeps the phone path fast and prevents PC admin
|
||||
complexity from leaking into WeChat.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Playwright or screenshot coverage for representative narrow viewports when
|
||||
changing mobile home, mobile lists, mobile details, bottom actions, upload
|
||||
surfaces or Enterprise WeChat WebView flows.
|
||||
- If true Enterprise WeChat device validation is unavailable, record it as
|
||||
paused manual validation; do not claim full WebView acceptance.
|
||||
|
||||
## Convention: Notifications Versus Tasks
|
||||
|
||||
**What**: Task queues and notifications have separate jobs. A task queue is for
|
||||
action; a notification center is for event awareness and navigation.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- `待我处理` is an action list. Include only items that require the current user
|
||||
to process, supplement material, review, pay, approve, confirm or resolve an
|
||||
exception.
|
||||
- Task rows must have a clear next step, object summary, business state and
|
||||
processing entry.
|
||||
- Completed items, read-only progress, announcements, successful sync notices
|
||||
and ordinary system messages do not belong in the pending task list.
|
||||
- `通知中心` is an event inbox for status changes, reminders, failures, sync
|
||||
results, workflow transitions, invoice/attachment recognition results and
|
||||
Enterprise WeChat delivery results.
|
||||
- Notifications should support read/unread, view, jump target and failure
|
||||
explanation. Do not rebuild the full workflow task list inside the
|
||||
notification center.
|
||||
- Notification clicks must deep-link to the business detail, workflow task,
|
||||
mobile target page or failure explanation. Do not send users back to a
|
||||
generic notification list as the final destination.
|
||||
- Notification copy should explain what happened, who or what is affected, and
|
||||
the next useful step. Do not expose raw payloads, internal state codes or
|
||||
debug fields.
|
||||
- Workbench `今日待处理` aggregates only actionable items. Ordinary
|
||||
notifications, read-only progress, completed activity and announcements are
|
||||
not counted as pending work.
|
||||
- If a notification represents real work, the backend or aggregation layer
|
||||
should expose it as an explicit task item; the frontend should not infer every
|
||||
notification is a task.
|
||||
- The topbar bell is the notification entry. Do not add notification center as a
|
||||
default sidebar row.
|
||||
- Enterprise WeChat messages are an external delivery channel. Keep message
|
||||
content desensitized and deep-link into the OA business or task detail.
|
||||
|
||||
**Why**: Separating event awareness from action prevents Portal, task queue and
|
||||
notification center from showing the same thing in three different ways.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright coverage when changing task aggregation, notification
|
||||
center rows, topbar bell behavior, notification deep links or workbench
|
||||
`今日待处理` counts.
|
||||
|
||||
## Convention: Sensitive Data And Exports
|
||||
|
||||
**What**: Contracts, finance, invoices, receipts, payments, assets and
|
||||
attachments are sensitive by default. Frontend surfaces show the minimum useful
|
||||
summary unless a permissioned workflow requires more.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Treat contract text and attachments, quotations, acceptance materials,
|
||||
invoices, receipts, payment information, bank accounts, supplier details,
|
||||
asset serial/location/owner data, personnel records, payroll/performance,
|
||||
audit records, original file names and export files as sensitive.
|
||||
- Workbench, notifications, ordinary lists, mobile cards and Enterprise WeChat
|
||||
messages show desensitized summaries only.
|
||||
- Ordinary surfaces must not show full bank/account numbers, full local paths,
|
||||
storage paths, raw payloads, full sensitive attachment names, Secrets, tokens
|
||||
or high-sensitive contract/finance details.
|
||||
- Previewing contract text, invoices, receipts and attachments requires
|
||||
server-side permission checks. Frontend visibility is not a security boundary.
|
||||
- High-sensitive previews should explain context or purpose when useful and
|
||||
record view evidence when the backend supports it.
|
||||
- Download, batch download, export, print, attachment packaging, contract text
|
||||
export and finance ledger export must be controlled by server permissions and
|
||||
data scope.
|
||||
- Export is never the primary first-screen action. Put exports in `台账工具`,
|
||||
`更多` or role-only finance/admin panels.
|
||||
- Before exporting sensitive ledgers, explain scope and sensitive contents.
|
||||
Finance, contract, asset and invoice exports should write audit records.
|
||||
- Export file names use business numbers and dates. Do not concatenate complete
|
||||
personal accounts, complete supplier secrets or internal filesystem paths.
|
||||
- Audit sensitive operations with actor, time, object, action, scope and result
|
||||
where supported.
|
||||
- Permission-denied and failure messages use natural Chinese without leaking
|
||||
full paths, permission codes, raw URLs, payloads, Secrets or tokens.
|
||||
|
||||
**Why**: The product is for small teams, but the data is still financial,
|
||||
contractual and operationally sensitive. Small team convenience must not turn
|
||||
into broad accidental disclosure.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright or screenshot checks when changing attachment preview,
|
||||
contract/invoice/receipt surfaces, export controls, mobile summaries,
|
||||
notification copy or permission-denied states.
|
||||
|
||||
## Convention: Permission Empty And Error States
|
||||
|
||||
**What**: Permission-denied, empty and error states use natural Chinese that
|
||||
explains cause and next step. Ordinary users should not inspect platform
|
||||
internals to understand what happened.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Hide unauthorized actions by default. If a route is opened directly or the
|
||||
user needs context, show a natural Chinese explanation and a real next step
|
||||
such as returning to workbench, viewing related records or contacting an
|
||||
admin.
|
||||
- Empty states are scoped to the current filter, status or section. Explain what
|
||||
is absent and show one useful next step; if there is no real next step, hide
|
||||
the section instead of adding instructional copy.
|
||||
- Error states explain business cause, impact and recovery path such as retry,
|
||||
supplement material, return to list or contact admin.
|
||||
- Ordinary user paths must not show raw `403`, API route names, permission
|
||||
codes, internal state codes, route stacks, full paths, raw payloads or long
|
||||
technical error dumps.
|
||||
- Admin, audit and troubleshooting routes may show the minimum technical
|
||||
details needed to diagnose a problem, but the business reason and next step
|
||||
remain primary.
|
||||
- Mobile and notification targets use shorter copy, but must still include
|
||||
cause and next step.
|
||||
|
||||
**Why**: Small-team users do not have time to decode implementation details.
|
||||
Clear failure states reduce support work and avoid leaking internal platform
|
||||
structure.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright or screenshot checks when changing empty states,
|
||||
permission-denied pages, notification failure targets or shared error
|
||||
components.
|
||||
|
||||
## Convention: Dangerous Action Confirmation
|
||||
|
||||
**What**: Destructive, financial, approval, configuration, batch and external
|
||||
sync actions require meaningful confirmation. A generic `确定吗?` dialog is not
|
||||
enough.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Treat delete, void, revoke, archive, restore, disable, publish, configuration
|
||||
switching, workflow switching and feature-flag changes as dangerous actions.
|
||||
- Treat pay, batch pay, sensitive export, batch download, contract text
|
||||
download and attachment packaging as dangerous or high-sensitive actions.
|
||||
- Treat approve, reject, return, transfer, batch approve and batch reject as
|
||||
approval-risk actions that need context before execution.
|
||||
- Treat external synchronization, retry external write and Enterprise
|
||||
WeChat/OA emergency-takeover switching as integration-risk actions.
|
||||
- Confirmation UI must show object summary: business number, name, requester or
|
||||
counterparty, amount or quantity and current state when relevant.
|
||||
- Confirmation UI must explain consequences: target state, reversibility,
|
||||
notifications, payment/approval/configuration impact and external-system
|
||||
effect.
|
||||
- Confirmation UI must show impact scope for batch, export, configuration and
|
||||
integration actions: selected count, data range, external system, Enterprise
|
||||
WeChat message or audit scope.
|
||||
- Rejection and return require a reason. Payment, publishing, batch and
|
||||
configuration actions may require a confirmation word, explicit checkbox or
|
||||
selected reason when risk is high.
|
||||
- Dangerous actions must be visually separated from normal view, edit, save and
|
||||
submit actions.
|
||||
- Mobile dangerous actions use bottom or full-screen confirmation panels, not
|
||||
instant execution from an easy-to-mistap control.
|
||||
- Confirmation failure must preserve user input and show result details plus the
|
||||
next repair action.
|
||||
- Audited actions should record actor, time, object, action, scope, reason and
|
||||
result where backend support exists.
|
||||
- Delete, withdraw, cancel, void and archive confirmations must use the exact
|
||||
business verb and explain the target state. Do not label cancel, void or
|
||||
archive as `删除`.
|
||||
|
||||
**Why**: These actions can change finance, contracts, workflow, approvals,
|
||||
configuration and external integrations. Users need context before execution,
|
||||
and support needs an audit trail after execution.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright coverage when changing delete, payment, approval,
|
||||
publish/disable, batch, configuration or external-sync confirmations.
|
||||
|
||||
## Convention: Integration Boundary And External Status
|
||||
|
||||
**What**: External-system state is conservative. OA shows facts confirmed by its
|
||||
own backend and explicit external acknowledgements; it does not present a queued
|
||||
request, frontend click or message attempt as final business completion.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- OA owns reimbursement, procurement, contracts, projects, payments, AP,
|
||||
invoices, assets, sensitive attachments, audit and OA workflow handling.
|
||||
- Enterprise WeChat owns daily HR/attendance actions: check-in, leave, missed
|
||||
punch, outing and overtime. OA shows mirror, history, exception, audit and
|
||||
emergency-takeover records for those domains.
|
||||
- ERP, agency accounting, bank, OCR and Enterprise WeChat messages are external
|
||||
capabilities or delivery channels. They do not replace OA server-side
|
||||
permissions or state machines.
|
||||
- Show final labels such as `已同步`, `已发送`, `已付款` and `识别完成` only when the
|
||||
relevant external system has returned a clear success acknowledgement.
|
||||
- Use in-progress labels such as `同步中`, `等待回执`, `银行处理中`, `识别中` and
|
||||
`消息发送中` when the request has started but is not confirmed.
|
||||
- External failures must show source, impact and next step in natural Chinese,
|
||||
such as `银行回执未返回` or `OCR 识别失败,需重新上传 PDF`.
|
||||
- Do not expose raw external error codes, payloads, full URLs, secrets, tokens
|
||||
or debug traces to ordinary users.
|
||||
- External writes, payment execution, ERP sync, Enterprise WeChat resend and OCR
|
||||
retry must be controlled by permissions and state-driven actions.
|
||||
- Retry confirmation should explain which object will be retried, whether it may
|
||||
send duplicate external messages, external-system impact and audit effect.
|
||||
- External sync state should not block unrelated primary flows. If it blocks a
|
||||
flow, show the blocker and manual repair path.
|
||||
- Ordinary routes show summary, failure reason and next step. Admin, finance or
|
||||
troubleshooting routes may show deeper diagnostics when authorized.
|
||||
- HR/attendance routes should default to Enterprise WeChat record, sync mirror
|
||||
or exception handling copy. Do not expose OA daily leave/missed-punch paths
|
||||
unless OA emergency takeover is explicitly enabled.
|
||||
- Enterprise WeChat messages carry desensitized summary and OA deeplink only;
|
||||
they do not carry sensitive attachment text or final payment/approval actions.
|
||||
- If bank, ERP, agency accounting or another integration is not connected or not
|
||||
confirmed, UI copy must not imply the capability already completed.
|
||||
|
||||
**Why**: External integrations are asynchronous and failure-prone. Conservative
|
||||
copy prevents users from trusting a state the system has not actually verified.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- `cd client && npm run typecheck`
|
||||
- `cd client && npm run build`
|
||||
- Focused Playwright coverage when changing Enterprise WeChat boundary copy,
|
||||
OCR status, bank/payment callbacks, ERP/accounting sync status, retry
|
||||
controls, external failure messages or integration diagnostics.
|
||||
|
||||
## Convention: Verification And User-Testable Claims
|
||||
|
||||
**What**: Verification claims must describe the actual validation level. Local
|
||||
checks, screenshots and mock Playwright runs do not mean a user can test the
|
||||
change online.
|
||||
|
||||
**Contracts**:
|
||||
|
||||
- Local build passing means only the local code built successfully.
|
||||
- Playwright passing means the specified automated path passed in the specified
|
||||
environment and data state.
|
||||
- Screenshot review passing means only the captured viewport and state were
|
||||
reviewed.
|
||||
- Deployment passing must identify the deployed environment, version or commit
|
||||
and health check result when available.
|
||||
- Say `可以线上测试` only after deployment, public access check, key-path smoke
|
||||
testing and necessary screenshot evidence are complete.
|
||||
- Before deployment, say `本地验证通过,尚未线上可测`.
|
||||
- After deployment but before public access check, say `已部署,公网检查未完成`.
|
||||
- If real-device or Enterprise WeChat WebView validation is unavailable, record
|
||||
it as paused manual validation. Do not substitute automation for full WebView
|
||||
acceptance.
|
||||
- A-class page changes should keep build, focused Playwright or screenshot
|
||||
evidence according to risk.
|
||||
- Changes touching permissions, state machines, approval, payment, Enterprise
|
||||
WeChat, external systems, sensitive downloads or production configuration
|
||||
need rollback or manual repair notes.
|
||||
- Updating this design/spec documentation does not mean pages were refactored,
|
||||
deployed or accepted for live trial.
|
||||
|
||||
**Why**: This keeps delivery status honest and prevents the user from trying a
|
||||
change that has not actually reached a public environment.
|
||||
|
||||
**Tests Required**:
|
||||
|
||||
- Documentation-only changes: Trellis task validation, governance check and
|
||||
`git diff --check`.
|
||||
- Frontend implementation changes: `cd client && npm run typecheck`,
|
||||
`cd client && npm run build`, plus focused Playwright or screenshots based on
|
||||
affected surface.
|
||||
|
||||
## Convention: A-Class PC Task-First Pages
|
||||
|
||||
**What**: A-class PC pages such as Portal, approvals, reimbursement list and
|
||||
@@ -296,6 +1162,10 @@ a later Trellis task adds an explicit backend eligibility contract.
|
||||
but normal approval remains in Enterprise WeChat.
|
||||
- Reimbursement, procurement, travel, contract and other amount/evidence-heavy
|
||||
OA-owned tasks should route through `查看处理` first.
|
||||
- Business ledgers and ordinary business details must follow the same rule:
|
||||
show the task entry or progress, but do not place `通过`, `驳回`, `退回` or
|
||||
`转审` directly in reimbursement, procurement, contract, project or asset
|
||||
tables/details.
|
||||
- Future list-level quick approval requires the backend to expose an explicit
|
||||
eligibility flag such as `quickApproveEligible=true`, plus task-domain and
|
||||
audit semantics in the current Trellis task. Frontend heuristics based only on
|
||||
@@ -319,10 +1189,15 @@ training or permission-maintenance surfaces:
|
||||
`处理待办`, `提交报销` or `请假`; do not use explanatory entries like
|
||||
`了解流程`, and do not route users to settings or notifications as a
|
||||
substitute for task guidance.
|
||||
- `个人设置` default content is account identity, notification preference and
|
||||
Enterprise WeChat binding. Organization, report line and role summary may be
|
||||
folded under `账号详情`; permission code lists and full employee dossier fields
|
||||
stay out of the default view.
|
||||
- `个人设置` default content is personal profile, password/security,
|
||||
notification preference and Enterprise WeChat binding. Organization, report
|
||||
line and role summary may be folded under `账号详情`; permission code lists
|
||||
and full employee dossier fields stay out of the default view.
|
||||
- Keep account settings separate from admin configuration. `个人设置` may show
|
||||
personal profile, password/security, notification preferences and Enterprise
|
||||
WeChat binding only. Organization maintenance, role assignment, approval
|
||||
rules, feature flags, master data, audit logs, employee maintenance and
|
||||
system configuration belong under `管理`, not the ordinary profile route.
|
||||
|
||||
**Why**: Small teams need fewer default decisions. Persistent onboarding and
|
||||
permission-heavy profile pages make ordinary users inspect system internals
|
||||
|
||||
在新工单中引用
屏蔽一个用户