From 32d5dd02625ad11708213f24b844eb4bc99d5fd5 Mon Sep 17 00:00:00 2001 From: LoveLosita <2810873701@qq.com> Date: Tue, 28 Apr 2026 08:25:48 +0800 Subject: [PATCH] =?UTF-8?q?Version:=200.9.49.dev.260428=20=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=EF=BC=9A=201.=20AssistantPanel=20=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=9B=9E=E5=A1=AB=E8=A1=A5=E9=BD=90=E2=80=9C?= =?UTF-8?q?=E7=89=A9=E7=90=86=E5=88=A0=E9=99=A4=E2=80=9D=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E2=80=94=E2=80=94=E6=89=B9=E9=87=8F=E6=8B=89=E5=8F=96=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=90=8E=EF=BC=8C=E5=AF=B9=E6=9C=AA=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E5=9C=A8=E5=9B=9E=E4=BC=A0=E5=88=97=E8=A1=A8=E7=9A=84=20task?= =?UTF-8?q?=5Fid=20=E6=A0=87=E8=AE=B0=20is=5Fdeleted=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E5=B7=B2=E5=88=A0=E9=99=A4=E4=BB=BB=E5=8A=A1=E5=9C=A8?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E7=BB=A7=E7=BB=AD=E8=A2=AB=E5=BD=93=E4=BD=9C?= =?UTF-8?q?=E6=9C=89=E6=95=88=E4=BB=BB=E5=8A=A1=E5=B1=95=E7=A4=BA=202.=20?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=BC=96=E8=BE=91=E5=BC=B9=E7=AA=97=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E4=B8=BA=20premium=20=E4=BA=A4=E4=BA=92=E9=A3=8E?= =?UTF-8?q?=E6=A0=BC=E2=80=94=E2=80=94=E6=A0=87=E9=A2=98=E6=96=87=E6=A1=88?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=EF=BC=88=E7=BC=96=E8=BE=91/=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=EF=BC=89=E3=80=81=E8=A1=A8=E5=8D=95=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=20top=20label=20=E5=B8=83=E5=B1=80=EF=BC=8C=E8=B1=A1=E9=99=90?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=94=B9=E4=B8=BA=E4=B8=8B=E6=8B=89=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E2=80=9C=E7=B4=A7=E6=80=A5=E9=98=88=E5=80=BC?= =?UTF-8?q?=E2=80=9D=E6=97=B6=E9=97=B4=E8=BE=93=E5=85=A5=E4=B8=8E=E5=8F=8C?= =?UTF-8?q?=E5=88=97=E6=97=B6=E9=97=B4=E5=8C=BA=EF=BC=8C=E5=BA=95=E9=83=A8?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=94=B9=E4=B8=BA=E4=B8=BB=E6=AC=A1=E5=88=86?= =?UTF-8?q?=E7=A6=BB=E7=9A=84=E8=87=AA=E5=AE=9A=E4=B9=89=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=8C=BA=203.=20=E5=BC=B9=E7=AA=97=E6=A0=B7=E5=BC=8F=E4=BD=93?= =?UTF-8?q?=E7=B3=BB=E6=94=B6=E6=95=9B=E2=80=94=E2=80=94=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=97=A7=20task-edit-dialog/priority-radio=20=E9=A3=8E?= =?UTF-8?q?=E6=A0=BC=EF=BC=8C=E7=BB=9F=E4=B8=80=E4=B8=BA=20premium-dialog?= =?UTF-8?q?=20+=20premium-select-popper=20=E6=96=B9=E6=A1=88=EF=BC=8C?= =?UTF-8?q?=E8=A1=A5=E9=BD=90=E8=BE=93=E5=85=A5=E6=A1=86=E3=80=81=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E3=80=81=E5=85=B3=E9=97=AD=E6=8C=89=E9=92=AE=E4=B8=8E?= =?UTF-8?q?=20footer=20=E7=9A=84=E4=B8=80=E8=87=B4=E5=8C=96=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E8=A1=A8=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/dashboard/AssistantPanel.vue | 372 +++++++++++------- 1 file changed, 226 insertions(+), 146 deletions(-) diff --git a/frontend/src/components/dashboard/AssistantPanel.vue b/frontend/src/components/dashboard/AssistantPanel.vue index 5f18c9c..7141a67 100644 --- a/frontend/src/components/dashboard/AssistantPanel.vue +++ b/frontend/src/components/dashboard/AssistantPanel.vue @@ -406,6 +406,8 @@ async function hydrateTaskStatuses(conversationId: string) { try { const items = await getTaskBatchStatus(idList) + const returnedIdSet = new Set(items.map(item => Number(item.id))) + items.forEach(item => { const id = Number(item.id) if (taskStatusMap[id]) { @@ -416,6 +418,18 @@ async function hydrateTaskStatuses(conversationId: string) { taskStatusMap[id] = { is_completed: item.is_completed, syncing: false } } }) + + // 处理不在回传列表中的 ID,说明该任务已被物理删除 + idList.forEach(id => { + if (!returnedIdSet.has(id)) { + if (taskStatusMap[id]) { + taskStatusMap[id].is_deleted = true + taskStatusMap[id].syncing = false + } else { + taskStatusMap[id] = { is_completed: false, syncing: false, is_deleted: true } + } + } + }) } catch (err) { console.error('[Hydration] Batch status fetch failed:', err) } finally { @@ -3515,62 +3529,70 @@ onBeforeUnmount(() => { @saved="handleScheduleSaved" /> - + -
-
- + + -
- -
- - - 重要紧急 - 重要不紧急 - 简单琐碎 - 暂缓处理 - -
- -
-
- + + + + + + + + + +
+ -
+ + + +
-
- + @@ -5465,127 +5487,185 @@ onBeforeUnmount(() => { background: rgba(255, 255, 255, 0.9) !important; } -:global(.task-edit-dialog) { - border-radius: 32px !important; - overflow: hidden !important; - border: none !important; - box-shadow: 0 40px 100px rgba(15, 23, 42, 0.18) !important; - background: #ffffff !important; -} - -:global(.task-edit-dialog .el-dialog__header) { - margin: 0 !important; - padding: 40px 40px 10px !important; - border-bottom: none !important; -} - -:global(.task-edit-dialog .el-dialog__title) { - font-size: 26px !important; - font-weight: 900 !important; - color: #0f172a !important; - letter-spacing: -0.04em !important; -} - -:global(.task-edit-dialog .el-dialog__headerbtn) { - top: 40px !important; - right: 40px !important; - width: 40px !important; - height: 40px !important; - background: #f8fafc !important; - border: none !important; -} - -:global(.task-edit-dialog .el-dialog__body) { - padding: 10px 40px 40px !important; -} - -:global(.task-edit-dialog .el-dialog__footer) { - padding: 0 40px 40px !important; -} - -.task-form { - display: flex; - flex-direction: column; - gap: 32px; -} - -.form-item label { - display: block; - font-size: 11px; - font-weight: 900; - color: #cbd5e1; - margin-bottom: 14px; - margin-left: 2px; - text-transform: uppercase; - letter-spacing: 0.15em; -} - -.task-form :deep(.el-input__wrapper) { - background: #fcfdfe !important; - box-shadow: none !important; - border: 2px solid #f1f5f9 !important; +/* --- Premium Dialog Styles --- */ +:global(.premium-dialog) { border-radius: 20px !important; - padding: 14px 22px !important; -} - -.task-form :deep(.el-input__wrapper.is-focus) { background: #ffffff !important; - border-color: #3b82f6 !important; - box-shadow: 0 10px 30px rgba(59, 130, 246, 0.08) !important; + border: 1px solid rgba(15, 23, 42, 0.08) !important; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25) !important; + overflow: hidden; } -.priority-selector { - display: flex; - width: 100%; - gap: 10px; +:global(.premium-dialog .el-dialog__header) { + padding: 24px 28px 12px !important; + margin-right: 0 !important; + text-align: left; +} + +:global(.premium-dialog .el-dialog__title) { + font-size: 18px !important; + font-weight: 800 !important; + color: #0f172a !important; + letter-spacing: -0.02em; +} + +:global(.premium-dialog .el-dialog__body) { + padding: 12px 28px 20px !important; +} + +:global(.premium-dialog .el-dialog__footer) { + padding: 0 !important; +} + +.premium-dialog__footer { + padding: 16px 28px 24px; background: #f8fafc; - padding: 8px; - border-radius: 24px; -} - -.priority-selector :deep(.el-radio-button__inner) { - width: 100% !important; - border: none !important; - background: transparent !important; - font-size: 12px; - font-weight: 800; - color: #94a3b8; - padding: 14px 4px !important; - border-radius: 18px !important; -} - -.priority-selector :deep(.el-radio-button.is-active .el-radio-button__inner) { - background: #ffffff !important; - color: #3b82f6 !important; - box-shadow: 0 8px 20px rgba(15, 23, 42, 0.06) !important; -} - -.dialog-footer { display: flex; - flex-direction: column; + justify-content: flex-end; + gap: 12px; + border-top: 1px solid #f1f5f9; +} + +.dialog-double-row { + display: flex; gap: 12px; width: 100%; + overflow: hidden; +} +.dialog-double-row .half { + flex: 1; + min-width: 0; } -.dialog-footer .el-button { - width: 100%; - margin: 0 !important; - height: 60px; - font-size: 16px; - font-weight: 900; - border-radius: 22px; +.premium-btn { + height: 40px; + padding: 0 20px; + border-radius: 12px; + font-size: 14px; + font-weight: 700; + cursor: pointer; + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + border: none; + display: inline-flex; + align-items: center; + justify-content: center; } -.dialog-footer .el-button--primary { - background: #0f172a !important; /* Midnight flat style */ - color: #ffffff !important; - box-shadow: 0 20px 40px rgba(15, 23, 42, 0.2); +.premium-btn--primary { + background: #3b82f6; + color: #ffffff; + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2); } -.dialog-footer .el-button--primary:hover { - background: #1e293b !important; - transform: translateY(-2px); - box-shadow: 0 25px 50px rgba(15, 23, 42, 0.25); +.premium-btn--primary:hover:not(:disabled) { + background: #2563eb; + transform: translateY(-1px); + box-shadow: 0 6px 16px rgba(59, 130, 246, 0.3); +} + +.premium-btn--ghost { + background: #ffffff; + color: #64748b; + border: 1px solid #e2e8f0; +} + +.premium-btn--ghost:hover { + background: #f1f5f9; + color: #0f172a; +} + +/* 表单美化 */ +:global(.premium-dialog .el-form-item__label) { + font-weight: 700 !important; + color: #475569 !important; + font-size: 13px !important; + margin-bottom: 6px !important; +} + +:global(.premium-dialog .el-input__wrapper), +:global(.premium-dialog .el-select__wrapper), +:global(.premium-dialog .el-date-editor.el-input__wrapper) { + background-color: #f8fafc !important; + box-shadow: 0 0 0 1px #e2e8f0 inset !important; + border-radius: 10px !important; + padding: 4px 12px !important; + width: 100% !important; +} + +:global(.premium-dialog .el-input__wrapper.is-focus), +:global(.premium-dialog .el-select__wrapper.is-focused) { + box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2) inset !important; + background-color: #ffffff !important; +} + +:global(.premium-dialog .el-dialog__headerbtn) { + top: 20px !important; + right: 20px !important; + width: 32px !important; + height: 32px !important; + border-radius: 50% !important; + background: #f1f5f9 !important; + transition: all 0.2s !important; + display: flex !important; + align-items: center !important; + justify-content: center !important; +} + +:global(.premium-dialog .el-dialog__headerbtn:hover) { + background: #e2e8f0 !important; + transform: rotate(90deg); +} + +:global(.premium-dialog .el-dialog__headerbtn .el-dialog__close) { + color: #64748b !important; + font-size: 16px !important; + font-weight: 800 !important; +} + +/* 统一输入框高度与背景 */ +:global(.premium-dialog .el-input__inner), +:global(.premium-dialog .el-select .el-input__inner) { + height: 38px !important; + color: #0f172a !important; + font-weight: 600 !important; +} + +/* --- 下拉菜单扁平化 --- */ +:global(.premium-select-popper) { + border-radius: 16px !important; + border: 1px solid rgba(15, 23, 42, 0.08) !important; + box-shadow: 0 12px 30px -5px rgba(0, 0, 0, 0.12) !important; + background: #ffffff !important; + overflow: hidden !important; + margin-top: 8px !important; +} + +:global(.premium-select-popper .el-select-dropdown__list) { + padding: 6px !important; +} + +:global(.premium-select-popper .el-select-dropdown__item) { + border-radius: 10px !important; + height: 38px !important; + line-height: 38px !important; + margin-bottom: 2px !important; + font-weight: 600 !important; + color: #475569 !important; + padding: 0 12px !important; +} + +:global(.premium-select-popper .el-select-dropdown__item.is-selected) { + background: #eff6ff !important; + color: #3b82f6 !important; +} + +:global(.premium-select-popper .el-select-dropdown__item:hover) { + background: #f1f5f9 !important; + color: #0f172a !important; +} + +:global(.premium-select-popper .el-popper__arrow) { + display: none !important; } :global(.premium-msg-box .el-message-box__header) {