fix(V0.2): BUILD_ID 时区 / 新建弹框残留 / 项目信息块
Docker Build and Push / build-image (push) Successful in 4m19s
Docker Build and Push / build-image (push) Successful in 4m19s
1. BUILD_ID 改用 UTC+8 生成: CI runner 是 UTC 时区, 原来取本地时间会错位;
统一偏移 +8h 后按 UTC 读取 (vite.config.js makeBuildId)
2. 修复「我的项目」页反复弹新建框: createSignal 一次性消费,
ProjectList 处理后回调清零 (此前 TaskPage 状态在 /task 与 /task/list
间保留, 信号残留导致每次进入都触发)
3. 新增项目信息块 (T-PJ-13):
- Project.notes Json ([{title,content}], <=50 块 / 标题<=50 字 / 内容<=20000 字)
- 迁移 20261024130000: 加列(NULL)->回填'[]'->收紧 NOT NULL, 存量行安全
- GET 详情返回 notes; PUT 接受 notes 整体替换
- 项目管理新增「信息块」分区: 列表预览 + 底部弹层独立编辑(标题+多行
textarea+删除), 键盘弹出复用 useKeyboardInset 抬升
- 文档: 需求 T-PJ-13 (149 条) + 功能设计对应行
已验证: 109 文件语法 0 错误、文档 149/149 覆盖
This commit is contained in:
@@ -80,6 +80,7 @@ export default function TaskPage() {
|
||||
onOpen={(id) => { selectProject(id); navigate('/task') }}
|
||||
onChanged={load}
|
||||
createSignal={createSignal}
|
||||
onCreateConsumed={() => setCreateSignal(0)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -132,7 +133,7 @@ const MOVE_TOLERANCE = 8
|
||||
|
||||
// 完整项目列表 (从「更多项目」进入)
|
||||
// 顺序: 手动排序(recentOrder, 拖动结果)优先 > 最近访问 > 列表序; 已归档固定在底部
|
||||
function ProjectList({ projects, err, onRetry, onOpen, onChanged, createSignal }) {
|
||||
function ProjectList({ projects, err, onRetry, onOpen, onChanged, createSignal, onCreateConsumed }) {
|
||||
const [creating, setCreating] = useState(false)
|
||||
const [name, setName] = useState('')
|
||||
const [saving, setSaving] = useState(false)
|
||||
@@ -144,8 +145,14 @@ function ProjectList({ projects, err, onRetry, onOpen, onChanged, createSignal }
|
||||
const activeRef = useRef(false)
|
||||
const dragIdRef = useRef(null)
|
||||
|
||||
// 头部「+ 新建」→ 弹起新建对话框
|
||||
useEffect(() => { if (createSignal) setCreating(true) }, [createSignal])
|
||||
// 头部「+ 新建」→ 弹起新建对话框 (一次性: 消费后清零, 否则下次进入该页会再次弹出)
|
||||
useEffect(() => {
|
||||
if (createSignal) {
|
||||
setCreating(true)
|
||||
onCreateConsumed?.()
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [createSignal])
|
||||
|
||||
const active = useMemo(() => {
|
||||
const manual = getRecentOrder()
|
||||
|
||||
Reference in New Issue
Block a user