Files
live-hub-py/web/frontend
yml2213 cb87a844b3 refactor(ui): 账号列表按「只做管理」重做 —— 砍掉凭据/标签/时间列与批量操作
承接上一个提交。按确认的结果,四类老壳子残留一并移除:

## ① 「显示凭据」开关 + 密码 / 邮箱 / 邮箱密码 三列

这是老「卖号」视图的残留。移掉后列表不再有任何凭据字段,
`include_sensitive` 参数不再从列表请求里传(后端能力保留,需要时仍可显式请求)。

⚠️ 副作用:**界面上暂时没有地方能看到账号密码了**。当前重登全自动,
不需要人工读凭据;但如果你偶尔要抄出来核对,告诉我,我在**详情页**加一个
带权限校验 + 写审计的「查看凭据」,而不是把三列塞回列表。

## ② 「标签」列

标签仍可**筛选**(顶部下拉),但不再占一列。设置标签的入口统一到**详情页**
(S6 已在状态卡里做了就地编辑),列表里那个内联编辑框随之删除 ——
所以 `handleSetTag` / `tagColorMap` / `TAG_COLORS` 一并清掉。

## ③ 「导入时间」列

去掉(详情页仍有完整的导入时间与状态变更时间)。

## ④ 「批量打标签」「批量删除」按钮

随之移除**整套勾选机制**:`rowSelection`、`selectedRowKeys`、
`selectedAllMatching`、「已选择 N 个 / 选择当前筛选下全部」提示条、
批量设置标签弹窗、以及两个 handler。**单条删除保留**(操作列,受 `account:delete` 管)。
批量接口在后端保留不动(S4 已给它们接了逐账号事件,别浪费)。

## 结果

- 列表列:**账号 / 状态 / 绑定 / 积分·鱼翅 / 分配给 / 操作**
- 工具栏:筛选(标签 / CK / 绑定 / 搜索)+ 批量导入
- 文件 601 → 478 行;`Alert` / `TagOutlined` / `Eye*` / `App` / `modal` 等
  随之失效的导入与变量全部清掉(靠 `tsc --noUnusedLocals` 逐个抓出来)

## 验证

- `TZ=Asia/Shanghai`:500 passed / 6 skipped;ruff 全绿
- 前端 build 通过、`npm run lint` **0 errors**
- 逐个删除后都用 `tsc` 反查死代码,没有留下未使用变量
2026-10-04 17:01:34 +08:00
..
2026-06-22 13:11:15 +08:00
2026-06-22 13:11:15 +08:00
2026-07-05 12:25:18 +08:00
2026-06-22 13:11:15 +08:00
2026-06-22 13:11:15 +08:00
2026-06-22 13:11:15 +08:00
2026-06-22 13:11:15 +08:00
2026-06-22 13:11:15 +08:00

React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

React Compiler

The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.

Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:

export default defineConfig([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...

      // Remove tseslint.configs.recommended and replace with this
      tseslint.configs.recommendedTypeChecked,
      // Alternatively, use this for stricter rules
      tseslint.configs.strictTypeChecked,
      // Optionally, add this for stylistic rules
      tseslint.configs.stylisticTypeChecked,

      // Other configs...
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])

You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:

// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'

export default defineConfig([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...
      // Enable lint rules for React
      reactX.configs['recommended-typescript'],
      // Enable lint rules for React DOM
      reactDom.configs.recommended,
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])