From 24fb5f8f71c9bcf4b025eb798c9b2aaf69bad4aa Mon Sep 17 00:00:00 2001 From: v6ole Date: Sun, 12 Jul 2026 20:06:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E5=8A=A8=E7=AB=AF=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E8=AE=A1=E5=88=92/=E5=95=86=E6=9C=BA=E8=B7=9F?= =?UTF-8?q?=E5=8D=95/=E8=A6=81=E5=AE=A2=E6=8B=9C=E8=AE=BF=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=BC=96=E8=BE=91=E5=92=8C=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 三个表单均支持 create+edit 双模式(通过 route.params.id 判断) - 编辑模式: 加载已有数据 → 修改 → PUT 更新 - 编辑模式增加删除按钮 - 列表页卡片点击跳转编辑页 - 新增 6 条编辑路由 Co-Authored-By: Claude --- frontend/src/router/index.ts | 3 + frontend/src/views/mobile/KeyVisitForm.vue | 54 ++++++++++++---- frontend/src/views/mobile/KeyVisitsList.vue | 2 +- frontend/src/views/mobile/MiniBizList.vue | 2 +- .../src/views/mobile/MiniBusinessForm.vue | 62 +++++++++++++++---- frontend/src/views/mobile/PlansList.vue | 2 +- frontend/src/views/mobile/WorkPlanForm.vue | 61 ++++++++++++++---- 7 files changed, 145 insertions(+), 41 deletions(-) diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index f3893cc..e8f2bf6 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -39,8 +39,11 @@ const router = createRouter({ { path: 'visit/new', name: 'VisitForm', component: () => import('@/views/mobile/VisitForm.vue') }, { path: 'visit/:id/edit', name: 'VisitEdit', component: () => import('@/views/mobile/VisitForm.vue') }, { path: 'work-plan/new', name: 'WorkPlanForm', component: () => import('@/views/mobile/WorkPlanForm.vue') }, + { path: 'work-plan/:id/edit', name: 'WorkPlanEdit', component: () => import('@/views/mobile/WorkPlanForm.vue') }, { path: 'mini-biz/new', name: 'MiniBusinessForm', component: () => import('@/views/mobile/MiniBusinessForm.vue') }, + { path: 'mini-biz/:id/edit', name: 'MiniBusinessEdit', component: () => import('@/views/mobile/MiniBusinessForm.vue') }, { path: 'key-visit/new', name: 'KeyVisitForm', component: () => import('@/views/mobile/KeyVisitForm.vue') }, + { path: 'key-visit/:id/edit', name: 'KeyVisitEdit', component: () => import('@/views/mobile/KeyVisitForm.vue') }, { path: 'note/new', name: 'DailyNoteForm', component: () => import('@/views/mobile/DailyNoteForm.vue') }, { path: 'note/:id/edit', name: 'DailyNoteEdit', component: () => import('@/views/mobile/DailyNoteForm.vue') }, { path: 'plans', name: 'PlansList', component: () => import('@/views/mobile/PlansList.vue') }, diff --git a/frontend/src/views/mobile/KeyVisitForm.vue b/frontend/src/views/mobile/KeyVisitForm.vue index 2aff126..16a8659 100644 --- a/frontend/src/views/mobile/KeyVisitForm.vue +++ b/frontend/src/views/mobile/KeyVisitForm.vue @@ -1,14 +1,16 @@ @@ -278,4 +305,7 @@ async function handleSubmit() { .quick-create-btn { display: inline-flex; align-items: center; gap: 4px; background: none; border: 1px dashed var(--gold); padding: 8px 14px; color: var(--gold-dark); font-family: var(--font-body); font-size: 13px; cursor: pointer; transition: all 0.2s; letter-spacing: 0.03em; } .quick-create-btn:hover { border-color: var(--vermilion); color: var(--vermilion); background: rgba(184,71,46,0.03); } .select-empty-create { padding: 8px 12px; text-align: center; } +.form-actions { display: flex; gap: 10px; margin-top: 24px; } +.delete-btn { padding: 16px 24px; background: var(--surface); color: var(--vermilion); border: 1px solid var(--vermilion); font-family: var(--font-heading); font-size: 16px; letter-spacing: 0.08em; cursor: pointer; transition: all 0.25s; } +.delete-btn:hover { background: var(--vermilion); color: #fff; } diff --git a/frontend/src/views/mobile/KeyVisitsList.vue b/frontend/src/views/mobile/KeyVisitsList.vue index b026e7e..53063d6 100644 --- a/frontend/src/views/mobile/KeyVisitsList.vue +++ b/frontend/src/views/mobile/KeyVisitsList.vue @@ -43,7 +43,7 @@ async function handleDelete(id: string) {

暂不要客记录

-
+
diff --git a/frontend/src/views/mobile/MiniBizList.vue b/frontend/src/views/mobile/MiniBizList.vue index ca87c9a..25c57aa 100644 --- a/frontend/src/views/mobile/MiniBizList.vue +++ b/frontend/src/views/mobile/MiniBizList.vue @@ -43,7 +43,7 @@ async function handleDelete(id: string) {

暂无商机记录

-
+
diff --git a/frontend/src/views/mobile/MiniBusinessForm.vue b/frontend/src/views/mobile/MiniBusinessForm.vue index db62702..e6eee4e 100644 --- a/frontend/src/views/mobile/MiniBusinessForm.vue +++ b/frontend/src/views/mobile/MiniBusinessForm.vue @@ -1,14 +1,16 @@ @@ -217,4 +244,13 @@ async function handleSubmit() { .quick-create-btn { display: inline-flex; align-items: center; gap: 4px; background: none; border: 1px dashed var(--gold); padding: 8px 14px; color: var(--gold-dark); font-family: var(--font-body); font-size: 13px; cursor: pointer; transition: all 0.2s; letter-spacing: 0.03em; } .quick-create-btn:hover { border-color: var(--vermilion); color: var(--vermilion); background: rgba(184,71,46,0.03); } .select-empty-create { padding: 8px 12px; text-align: center; } +.form-actions { display: flex; gap: 10px; margin-top: 24px; } +.submit-btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: 8px; padding: 16px; background: var(--ink); color: #fff; border: none; font-family: var(--font-heading); font-size: 16px; letter-spacing: 0.08em; cursor: pointer; transition: all 0.25s; } +.submit-btn:hover { background: var(--ink-light); } +.submit-btn:active { transform: scale(0.98); } +.submit-btn:disabled { opacity: 0.6; cursor: not-allowed; } +.delete-btn { padding: 16px 24px; background: var(--surface); color: var(--vermilion); border: 1px solid var(--vermilion); font-family: var(--font-heading); font-size: 16px; letter-spacing: 0.08em; cursor: pointer; transition: all 0.25s; } +.delete-btn:hover { background: var(--vermilion); color: #fff; } +.btn-loading { width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.3); border-top-color: #fff; border-radius: 50%; animation: spin 0.6s linear infinite; } +@keyframes spin { to { transform: rotate(360deg); } } diff --git a/frontend/src/views/mobile/PlansList.vue b/frontend/src/views/mobile/PlansList.vue index 477efcd..ccf03a2 100644 --- a/frontend/src/views/mobile/PlansList.vue +++ b/frontend/src/views/mobile/PlansList.vue @@ -41,7 +41,7 @@ async function handleDelete(id: string) {

暂无工作计划

-
+
diff --git a/frontend/src/views/mobile/WorkPlanForm.vue b/frontend/src/views/mobile/WorkPlanForm.vue index 6c2581f..42dea6f 100644 --- a/frontend/src/views/mobile/WorkPlanForm.vue +++ b/frontend/src/views/mobile/WorkPlanForm.vue @@ -1,7 +1,7 @@ @@ -197,4 +223,13 @@ async function handleSubmit() { .quick-create-btn { display: inline-flex; align-items: center; gap: 4px; background: none; border: 1px dashed var(--gold); padding: 8px 14px; color: var(--gold-dark); font-family: var(--font-body); font-size: 13px; cursor: pointer; transition: all 0.2s; letter-spacing: 0.03em; } .quick-create-btn:hover { border-color: var(--vermilion); color: var(--vermilion); background: rgba(184,71,46,0.03); } .select-empty-create { padding: 8px 12px; text-align: center; } +.form-actions { display: flex; gap: 10px; margin-top: 24px; } +.submit-btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: 8px; padding: 16px; background: var(--ink); color: #fff; border: none; font-family: var(--font-heading); font-size: 16px; letter-spacing: 0.08em; cursor: pointer; transition: all 0.25s; } +.submit-btn:hover { background: var(--ink-light); } +.submit-btn:active { transform: scale(0.98); } +.submit-btn:disabled { opacity: 0.6; cursor: not-allowed; } +.delete-btn { padding: 16px 24px; background: var(--surface); color: var(--vermilion); border: 1px solid var(--vermilion); font-family: var(--font-heading); font-size: 16px; letter-spacing: 0.08em; cursor: pointer; transition: all 0.25s; } +.delete-btn:hover { background: var(--vermilion); color: #fff; } +.btn-loading { width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.3); border-top-color: #fff; border-radius: 50%; animation: spin 0.6s linear infinite; } +@keyframes spin { to { transform: rotate(360deg); } }