Commit Graph
367 Commits
Author SHA1 Message Date
xiaozhuandtao.chen 5a90f7db36 部分样式调整 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 1f9c4a2cd9 update: style 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 250d953eb3 chore: STYLE_GUIDE.md 2026-09-02 10:10:41 +08:00
xiaozhuandtao.chen af2f035d03 updata:icon替换 2026-09-02 10:10:41 +08:00
xiaozhuandtao.chen 3a5cc12782 updata:admin.css替用 2026-09-02 10:10:41 +08:00
xiaozhuandtao.chen bf5e00fd4f fix:input边框 2026-09-02 10:10:41 +08:00
xiaozhuandtao.chen d0f0fd2922 update:Dialog替换 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen ed58344add refactor: replace Toast with Sonner 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 635d80e3cf update: ScriptsPage.tsx 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen df374d00c3 update: unify 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 2a81b98309 update: replace table component 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen c2f153cabd update: replace table component 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen bc617b6ade update: use components 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 77cabea834 feat: add ui components 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen ce77aa9e5d update: role_code 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 48a7cfc846 fix: literal_error 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen fbd4da5224 feat: role CRUD page 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen a65baea4d7 fix: soft-deleted permission readd 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 36c402d407 fix: soft-deleted permission readd 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 7c7e1a99a9 feat: role CRUD 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen dea6b4cfcf refactor: permission 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 1c220490cf refactor: use shadcn sidebar 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen fd724a1b45 update: use Button component in SchedulePage.tsx 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen ea2f92921b fix: build error 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen ae11fd6540 feat: add shadcn/ui 2026-09-02 10:10:41 +08:00
xiaozhuandtao.chen f452ba70fb update:css样式拆分 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen ef0000ebe5 chore: docs 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen ce7adce89c fix: notebook 2026-09-02 10:10:41 +08:00
c3947d6066 refactor(frontend): consolidate features & components into single tree
把 components/admin/* 和 components/platform/* 共 11 个文件
移到对应 features/<name>/ 下,components/ 只保留跨特性共享的
common/ 子目录(features/admin/* 之前和 components/admin/* 同名
共存,迫使 features/admin/AdminPages.tsx 出现 barrel,顺带消除了
barrel 副作用 CSS 丢失的隐患)。

新的目录约定:
  - features/<name>/  = 特性模块,所有页面 / Modal / state / hooks
                         / routes 都在内,无 components/<name>/ 并列
  - components/common/ = 仅放 ≥2 个特性共用的 widgets
                         (Icon、Sidebar、Toast、Topbar、WelcomePanel)

改动:
  - 11 文件 git mv (components/{admin,platform}/* → features/*)
  - 8 文件的 Icon 相对路径 '../common/Icon' → '../../components/common/Icon'
  - 2 文件补 admin.css side-effect import(UserManagementPage /
    ProjectManagementPage 之前依赖 AdminPages barrel)
  - 3 文件(引用方)更新 import:SystemAdminPage、DashboardRoute、
    ScriptsPage
  - 删除 features/admin/AdminPages.tsx barrel(无消费者)
  - 删除空目录 components/admin、components/platform

验证:
  - pnpm typecheck 通过
  - pnpm build 通过,CSS 体积 35.11 kB 与重构前一致(无样式增减)
  - routes.ts / routes/platform.tsx 路径未动,route id 不变

踩坑:
  第一轮把 '../common/Icon' 错改成 '../../../components/common/Icon',
  typecheck 报 11 个 Cannot find module。原因:features/admin/ 和
  components/admin/ 都是 depth 2,'../../X' 在两边都解析到 app/X,
  只有 '../X' 才需要多一层。正确改法是 '../../components/common/Icon'。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 10:10:41 +08:00
tao.chenandtao.chen e9d9bcfc97 refactor: scriptWorkspaceStore.ts 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 8278cdd8b0 refactor: useSchedulesStore.ts 2026-09-02 10:10:41 +08:00
a8826f7224 fix(frontend): restore login & auth-loading styles with Tailwind
提交 6b77018 把 frontend/app/app.css 从 112 行砍到 91 行,
删除了 .login-* 与 .auth-loading 选择器,但 login.tsx /
AuthContext.tsx 的类名没同步迁移,导致:

  - /login 页面无样式(背景渐变、卡片阴影、输入框焦点环全部失效)
  - AuthContext 初次加载时的旋转 spinner 无样式

两处都用 Tailwind 任意值 [..] 语法精确复刻原 CSS,精确到
原始色值(#1677ff、#eef5fb 等),不引入新的 CSS 文件,
不修改 app.css、路由配置或依赖。

Spinner 用 Tailwind 内置 animate-spin(1s)替代原 0.8s
keyframes auth-spin,视觉差异肉眼不可见,如需精确复刻可在
app.css @theme 加 --animate-auth-spin。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 9187724ceb update: replace Icon with lucide-react 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 9c67ae333c feat: add lucide-react Icon 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen e30e7740cc feat: register tailwindcss plugins 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen b2870fb568 refactor: style css -> tailwindcss 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen c6e931d1bc update: init tailwindcss 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen be162a9ee3 refactor: update artifact list style 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen b47848cc08 refactor: update artifact list style 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 4098e5482e update: delete schedule 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 872aff020c chore: remove print 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 65be676024 chore: web volumes 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 87ffe5bab6 chore: web volumes 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 81c83e5dc1 chore: initialContent 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 6f052b8847 chore: web volumes 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 9cf23330d3 chore: encrypt_secret.py 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 75ef8f32a0 chore: encrypt_secret.py 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 49f69129da chore: remove boto3 2026-09-02 10:10:41 +08:00
tao.chenandtao.chen 5d74285f34 test(common.storage): cover async-only registry + factory contract
The drop-sync refactor is now contractually enforced:

* create_storage({"mode": "sync"|"async"|<any>}) raises StorageConfigError
  -- the regression we most want to catch is someone "restoring" the
  sync shape by re-introducing mode= handling.
* create_storage() preserves caller's dict, returns an AsyncStorageBackend
  subclass, and wraps constructor TypeError into a useful StorageConfigError.
* build_storage_config emits no mode key on either local or s3 branch.
* register_backend() refuses to silently overwrite a different class on
  the same name (collision guard), and accepts same-class re-registration.
* registry surfaces the built-in local + s3 classes after import; the
  conflict-test cleanup pattern avoids leaking global state across tests.

Adds [tool.pytest.ini_options] (asyncio_mode=auto, testpaths=tests) so
uv run --package common pytest common/tests works from the workspace root.

17 new tests, all green. Backend suite still 136 passed.
2026-09-02 10:10:41 +08:00
tao.chenandtao.chen ba874579d3 refactor(common.storage): drop sync storage abstraction and example_usage
The async-only direction was already the only one used in production:
* create_storage never accepted mode=sync; build_storage_config always
  emitted mode=async; zero callers referenced StorageBackend / SyncData
  / S3StorageBackend.sync / LocalStorageBackend.sync anywhere.
* Drop the parallel sync base class, the sync concrete classes in
  backends/local.py and backends/s3.py, and the boto3 dependency.
* Drop example_usage.py (zero importers; demonstration code, not part
  of the public surface).
* Rename LocalAsyncStorageBackend -> LocalStorageBackend,
  S3AsyncStorageBackend -> S3StorageBackend to reflect the single
  remaining class per type.
* Tighten create_storage: any mode=... key now raises StorageConfigError
  with the new pointer (settings.storage_backend controls behavior).
* Cleanup call sites: schedule.application.service.build_object_store
  no longer passes mode=async to create_storage.
* Cosmetic touch-ups in backend/services/storage.py and
  common/config.py docstrings where they still said "boto3" instead of
  "S3 client".

Public API surface preserved: AsyncStorageBackend / ObjectMeta /
create_storage / build_storage_config / register_backend all keep
their names and call signatures. backend tests: 136 passed.
2026-09-02 10:10:41 +08:00