xiaozhu and tao.chen
b7b8e28b52
update:添加分页、成员添加优化
2026-09-02 10:10:41 +08:00
xiaozhu and tao.chen
5a90f7db36
部分样式调整
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
1f9c4a2cd9
update: style
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
250d953eb3
chore: STYLE_GUIDE.md
2026-09-02 10:10:41 +08:00
xiaozhu and tao.chen
af2f035d03
updata:icon替换
2026-09-02 10:10:41 +08:00
xiaozhu and tao.chen
3a5cc12782
updata:admin.css替用
2026-09-02 10:10:41 +08:00
xiaozhu and tao.chen
bf5e00fd4f
fix:input边框
2026-09-02 10:10:41 +08:00
xiaozhu and tao.chen
d0f0fd2922
update:Dialog替换
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
ed58344add
refactor: replace Toast with Sonner
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
635d80e3cf
update: ScriptsPage.tsx
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
df374d00c3
update: unify
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
2a81b98309
update: replace table component
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
c2f153cabd
update: replace table component
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
bc617b6ade
update: use components
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
77cabea834
feat: add ui components
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
ce77aa9e5d
update: role_code
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
48a7cfc846
fix: literal_error
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
fbd4da5224
feat: role CRUD page
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
a65baea4d7
fix: soft-deleted permission readd
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
36c402d407
fix: soft-deleted permission readd
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
7c7e1a99a9
feat: role CRUD
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
dea6b4cfcf
refactor: permission
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
1c220490cf
refactor: use shadcn sidebar
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
fd724a1b45
update: use Button component in SchedulePage.tsx
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
ea2f92921b
fix: build error
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
ae11fd6540
feat: add shadcn/ui
2026-09-02 10:10:41 +08:00
xiaozhu and tao.chen
f452ba70fb
update:css样式拆分
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
ef0000ebe5
chore: docs
2026-09-02 10:10:41 +08:00
tao.chen and tao.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.chen and tao.chen
e9d9bcfc97
refactor: scriptWorkspaceStore.ts
2026-09-02 10:10:41 +08:00
tao.chen and tao.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.chen and tao.chen
9187724ceb
update: replace Icon with lucide-react
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
9c67ae333c
feat: add lucide-react Icon
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
e30e7740cc
feat: register tailwindcss plugins
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
b2870fb568
refactor: style css -> tailwindcss
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
c6e931d1bc
update: init tailwindcss
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
be162a9ee3
refactor: update artifact list style
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
b47848cc08
refactor: update artifact list style
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
4098e5482e
update: delete schedule
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
872aff020c
chore: remove print
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
65be676024
chore: web volumes
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
87ffe5bab6
chore: web volumes
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
81c83e5dc1
chore: initialContent
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
6f052b8847
chore: web volumes
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
9cf23330d3
chore: encrypt_secret.py
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
75ef8f32a0
chore: encrypt_secret.py
2026-09-02 10:10:41 +08:00
tao.chen and tao.chen
49f69129da
chore: remove boto3
2026-09-02 10:10:41 +08:00
tao.chen and tao.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