# Button System Upgrade Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Replace demo-like ERP buttons with a semantic, icon-backed, high-craft global button system without changing business logic.

**Architecture:** Add a small pure semantic mapper for button labels, test it first, then wire it into a browser-side enhancer that decorates existing plain buttons. Keep existing page templates and API calls intact; upgrade the shared CSS and existing `ActionButton`/`AppIcon` path so new and old buttons share one visual language.

**Tech Stack:** Vue 3, Vite, plain CSS, Node test runner, existing SVG icon map.

---

### Task 1: Button Semantics

**Files:**
- Create: `frontend/src/utils/buttonSemantics.js`
- Test: `frontend/src/utils/buttonSemantics.test.js`

- [ ] **Step 1: Write failing tests for label semantics**

Create tests that assert common terse labels become explicit business actions, including `刷新` -> `刷新数据`, `查看` -> `查看详情`, `编辑` -> `编辑资料`, `删除` -> `删除记录`, `增加一行` -> `添加明细行`, `保存` -> `保存信息`.

- [ ] **Step 2: Run the semantic tests and confirm failure**

Run: `node --test frontend/src/utils/buttonSemantics.test.js`

Expected: failure because the semantic mapper does not exist yet.

- [ ] **Step 3: Implement the mapper**

Implement `resolveButtonSemantics(label, className)` returning `{ label, icon, tone, kind }` with deterministic matching by label and risk class.

- [ ] **Step 4: Run semantic tests and confirm pass**

Run: `node --test frontend/src/utils/buttonSemantics.test.js`

Expected: all tests pass.

### Task 2: Runtime Button Enhancer

**Files:**
- Create: `frontend/src/utils/buttonEnhancer.js`
- Modify: `frontend/src/App.vue`

- [ ] **Step 1: Add DOM enhancer**

Create `installButtonEnhancer()` that scans ordinary buttons after route changes and DOM mutations. It skips buttons with `no-auto-icon`, existing SVG/icon content, table mode buttons, pagination arrows, tag close buttons, and menu items where decoration would hurt usability.

- [ ] **Step 2: Decorate compatible buttons**

For compatible buttons, update terse labels, set `data-button-kind`, `data-button-tone`, and prepend an SVG icon from the semantic mapper. Preserve click handlers, disabled state, type, and existing classes.

- [ ] **Step 3: Install once in `App.vue`**

Call the enhancer from `onMounted` and cleanup on unmount. Re-run after route navigation using the enhancer's MutationObserver instead of touching every page.

### Task 3: Visual System

**Files:**
- Modify: `frontend/src/utils/iconMap.js`
- Modify: `frontend/src/components/ActionButton.vue`
- Modify: `frontend/src/styles/main.css`

- [ ] **Step 1: Add action icons**

Add linear Iconsax-style paths for `save`, `edit`, `delete`, `view`, `import`, `export`, `filter`, `authorize`, `check`, `reject`, `upload`, `download`, and `rowAdd`.

- [ ] **Step 2: Upgrade `ActionButton`**

Expose semantic `data-button-kind` and `data-button-tone` attributes so component buttons and auto-enhanced buttons share CSS.

- [ ] **Step 3: Rewrite button styling**

Use industrial control-console styling: tactile shadows, clear tone colors, icon chip, press motion, compact table pills, and accessible focus rings. Keep motion short and non-distracting.

### Task 4: Verification

**Files:**
- Verify: `frontend`

- [ ] **Step 1: Run semantic tests**

Run: `node --test frontend/src/utils/buttonSemantics.test.js`

- [ ] **Step 2: Run production build**

Run: `npm run build`

- [ ] **Step 3: Browser verify current page**

Open `http://127.0.0.1:5173/operation-reports` and verify `刷新` becomes `刷新数据` with an icon and tactile styling. Check the table mode switch remains unchanged.

- [ ] **Step 4: Browser verify a CRUD page**

Open a typical master-data page and verify create/edit/delete/detail buttons receive explicit labels and appropriate tone.
