From 22f7bb2f7919f72f105c54ff7938e9720fbbdf5b Mon Sep 17 00:00:00 2001 From: duxingchen Date: Wed, 5 Aug 2026 15:22:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E6=A0=88:=20Task=E6=A8=A1=E5=9E=8B+re?= =?UTF-8?q?mark=E5=AD=97=E6=AE=B5=20+=20=E5=89=8D=E7=AB=AF=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=8D=A1=E7=89=87=E5=88=9D=E5=A7=8B=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../versions/f6a7b8c9d0e1_add_task_remark.py | 23 +++++++++++++++++++ backend/app/models/task.py | 3 +++ backend/app/schemas/task.py | 1 + .../pages/scan/components/TaskTreeNode.vue | 15 ++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 backend/alembic/versions/f6a7b8c9d0e1_add_task_remark.py diff --git a/backend/alembic/versions/f6a7b8c9d0e1_add_task_remark.py b/backend/alembic/versions/f6a7b8c9d0e1_add_task_remark.py new file mode 100644 index 0000000..d8d8092 --- /dev/null +++ b/backend/alembic/versions/f6a7b8c9d0e1_add_task_remark.py @@ -0,0 +1,23 @@ +"""add_task_remark + +Revision ID: f6a7b8c9d0e1 +Revises: e5f6a7b8c9d0 +Create Date: 2026-08-05 + +""" +from typing import Sequence, Union +from alembic import op +import sqlalchemy as sa + +revision: str = "f6a7b8c9d0e1" +down_revision: Union[str, None] = "e5f6a7b8c9d0" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.add_column("tasks", sa.Column("remark", sa.String(2000), nullable=True, comment="任务初始描述/交接备注")) + + +def downgrade() -> None: + op.drop_column("tasks", "remark") diff --git a/backend/app/models/task.py b/backend/app/models/task.py index 63f5997..ff919d6 100644 --- a/backend/app/models/task.py +++ b/backend/app/models/task.py @@ -69,6 +69,9 @@ class Task(Base): is_rework: Mapped[bool] = mapped_column( Boolean, default=False, comment="是否为返工任务", ) + remark: Mapped[str | None] = mapped_column( + String(2000), nullable=True, comment="任务初始描述/交接备注", + ) # ---- 关系 ---- product: Mapped["Product"] = relationship("Product", lazy="selectin") diff --git a/backend/app/schemas/task.py b/backend/app/schemas/task.py index e94318e..a0e11c8 100644 --- a/backend/app/schemas/task.py +++ b/backend/app/schemas/task.py @@ -102,6 +102,7 @@ class TaskSummaryResponse(BaseModel): status: str notify_parent_on_complete: bool is_rework: bool = False + remark: str | None = None reject_reason: str | None = None received_at: datetime | None = None completed_at: datetime | None = None diff --git a/track-uniapp/src/pages/scan/components/TaskTreeNode.vue b/track-uniapp/src/pages/scan/components/TaskTreeNode.vue index d471bbe..04ca546 100644 --- a/track-uniapp/src/pages/scan/components/TaskTreeNode.vue +++ b/track-uniapp/src/pages/scan/components/TaskTreeNode.vue @@ -15,6 +15,12 @@ 负责人: {{ task.assignee_id }} 驳回: {{ task.reject_reason }} + + + + 📌 初始说明: + {{ task.remark || task.description }} + {{ statusLabel(task.status) }} @@ -172,6 +178,15 @@ export default { .tnode-meta { margin-top: 2px; font-size: 11px; color: #9ca3af; display: flex; gap: 8px; flex-wrap: wrap; } .reject-reason { color: #ef4444; } +/* 任务初始描述(常驻,区别于动态记录) */ +.task-initial-remark { + margin-top: 10rpx; padding: 12rpx 16rpx; + background: linear-gradient(135deg, #fefce8, #fef9c3); + border-left: 6rpx solid #eab308; border-radius: 8rpx; +} +.remark-label { font-size: 22rpx; font-weight: 700; color: #a16207; } +.remark-text { font-size: 26rpx; color: #713f12; line-height: 1.5; word-break: break-all; } + /* 进度记录 */ .records-area { background-color: #f9f9f9; padding: 0; border-radius: 10rpx; margin-top: 16rpx; margin-bottom: 6rpx; overflow: hidden; } .records-bar {