分类之前只能新增,建错了只能干看着。补上三件事: - knowledge_category 加 color 列(迁移 0009,CHECK 卡 #RRGGBB), PATCH 支持改名与改色,空串表示取消上色;知识列表带出分类色,前端不用再查。 - 分类行悬停出「⋯」:改名、选色板/手填色值、建子分类、删除(有知识时确认后 force)。 - 选中分类改成主色浅底 + 描边 + 色点,列表头显示当前筛选;切分类时列表淡出并转圈, 不再一动不动等请求回来。 顺带给卡片画分类色上边线:扫一眼就能分出哪几条属于同一类。
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
"""知识分类配色(M3 补充)
|
||||
|
||||
Revision ID: 0009
|
||||
Revises: 0008
|
||||
Create Date: 2026-11-02
|
||||
|
||||
分类从"只能分级"变成"还能上色"。一列而已,但解决了卡片墙上的一个真问题:
|
||||
三十条知识平铺在一起,光看标题要逐条读才知道哪条属于部署、哪条属于业务。
|
||||
分类色让"归属"在扫视时就成立,不用读字。
|
||||
|
||||
三个取舍:
|
||||
|
||||
1. **颜色存分类上,不存知识上**。同一类的颜色必须一致,否则卡片墙会花成
|
||||
一盘散沙;存在分类上,改一次全类生效。
|
||||
2. **允许为空**。老数据(0007 建的分类)没有颜色,强行补一个默认值等于替用户
|
||||
做决定;为空时前端按分类 id 稳定地挑一个调色板色,看起来仍是"每类一色"。
|
||||
3. **CHECK 约束卡格式**。只接受 `#RRGGBB`,大写。前端传 `rgb(...)` 或带 alpha
|
||||
的值会被挡在数据库外——渲染层不会因为一个脏值悄悄丢样式。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
from alembic import op
|
||||
|
||||
revision: str = "0009"
|
||||
down_revision: str = "0008"
|
||||
branch_labels: Sequence[str] | None = None
|
||||
depends_on: Sequence[str] | None = None
|
||||
|
||||
UPGRADE_SQL = (
|
||||
"ALTER TABLE knowledge_category ADD COLUMN IF NOT EXISTS color varchar(7)",
|
||||
"ALTER TABLE knowledge_category DROP CONSTRAINT IF EXISTS ck_kcat_color",
|
||||
"ALTER TABLE knowledge_category ADD CONSTRAINT ck_kcat_color "
|
||||
"CHECK (color IS NULL OR color ~ '^#[0-9A-F]{6}$')",
|
||||
"COMMENT ON COLUMN knowledge_category.color IS '分类色 #RRGGBB,卡片上边线用它'",
|
||||
)
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
for statement in UPGRADE_SQL:
|
||||
op.execute(statement)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.execute("ALTER TABLE knowledge_category DROP CONSTRAINT IF EXISTS ck_kcat_color")
|
||||
op.execute("ALTER TABLE knowledge_category DROP COLUMN IF EXISTS color")
|
||||
Reference in New Issue
Block a user