From 216406326a07be85415a92ee990b242759baf811 Mon Sep 17 00:00:00 2001 From: v6ole Date: Sun, 12 Jul 2026 20:20:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0=E5=8D=95=E6=9D=A1?= =?UTF-8?q?=E8=AE=B0=E5=BD=95GET=E7=AB=AF=E7=82=B9=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=A7=BB=E5=8A=A8=E7=AB=AF=E7=BC=96=E8=BE=91=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - work-plans/mini-business/key-visits 均新增 GET /{id} 端点 - 三个移动端编辑表单改用单条端点加载数据 - 修复点击卡片进入编辑时空白的 bug Co-Authored-By: Claude --- backend/app/api/key_visits.py | 15 +++++++++++++++ backend/app/api/mini_business.py | 15 +++++++++++++++ backend/app/api/work_plans.py | 15 +++++++++++++++ frontend/src/views/mobile/KeyVisitForm.vue | 7 +++---- frontend/src/views/mobile/MiniBusinessForm.vue | 7 +++---- 5 files changed, 51 insertions(+), 8 deletions(-) diff --git a/backend/app/api/key_visits.py b/backend/app/api/key_visits.py index 8a98a76..2f18bc4 100644 --- a/backend/app/api/key_visits.py +++ b/backend/app/api/key_visits.py @@ -49,6 +49,21 @@ async def list_key_visits( return [await _enrich(k, db) for k in result.scalars().all()] +@router.get("/{item_id}") +async def get_key_visit( + item_id: str, + current_user: dict = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + result = await db.execute(select(KeyVisit).where(KeyVisit.id == item_id)) + k = result.scalar_one_or_none() + if not k: + raise HTTPException(status_code=404, detail="Not found") + if current_user["role"] == "manager" and str(k.manager_id) != current_user["user_id"]: + raise HTTPException(status_code=403, detail="Access denied") + return await _enrich(k, db) + + @router.post("/") async def create_key_visit( data: KeyVisitCreate, diff --git a/backend/app/api/mini_business.py b/backend/app/api/mini_business.py index 390ac04..040146e 100644 --- a/backend/app/api/mini_business.py +++ b/backend/app/api/mini_business.py @@ -48,6 +48,21 @@ async def list_mini_business( return [await _enrich(m, db) for m in result.scalars().all()] +@router.get("/{item_id}") +async def get_mini_business( + item_id: str, + current_user: dict = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + result = await db.execute(select(MiniBusiness).where(MiniBusiness.id == item_id)) + m = result.scalar_one_or_none() + if not m: + raise HTTPException(status_code=404, detail="Not found") + if current_user["role"] == "manager" and str(m.manager_id) != current_user["user_id"]: + raise HTTPException(status_code=403, detail="Access denied") + return await _enrich(m, db) + + @router.post("/") async def create_mini_business( data: MiniBusinessCreate, diff --git a/backend/app/api/work_plans.py b/backend/app/api/work_plans.py index b8075e3..7897736 100644 --- a/backend/app/api/work_plans.py +++ b/backend/app/api/work_plans.py @@ -48,6 +48,21 @@ async def list_work_plans( return [await _enrich(w, db) for w in result.scalars().all()] +@router.get("/{item_id}") +async def get_work_plan( + item_id: str, + current_user: dict = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + result = await db.execute(select(WorkPlan).where(WorkPlan.id == item_id)) + wp = result.scalar_one_or_none() + if not wp: + raise HTTPException(status_code=404, detail="Not found") + if current_user["role"] == "manager" and str(wp.manager_id) != current_user["user_id"]: + raise HTTPException(status_code=403, detail="Access denied") + return await _enrich(wp, db) + + @router.post("/") async def create_work_plan( data: WorkPlanCreate, diff --git a/frontend/src/views/mobile/KeyVisitForm.vue b/frontend/src/views/mobile/KeyVisitForm.vue index 16a8659..8e7dfd4 100644 --- a/frontend/src/views/mobile/KeyVisitForm.vue +++ b/frontend/src/views/mobile/KeyVisitForm.vue @@ -44,10 +44,9 @@ onMounted(async () => { } if (isEdit.value) { try { - const res = await keyVisitsApi.list() - const items = Array.isArray(res.data) ? res.data : (res.data.items || []) - const d = items.find((x: any) => x.id === route.params.id) - if (d) form.value = { customer_id: d.customer_id, urgency_level: d.urgency_level, description: d.description || '', progress_status: d.progress_status, planned_date: d.planned_date, planned_visitor: d.planned_visitor, visit_target: d.visit_target, manager_id: d.manager_id || auth.userId || '' } + const res = await api.get(`/key-visits/${route.params.id}`) + const d = res.data + form.value = { customer_id: d.customer_id, urgency_level: d.urgency_level, description: d.description || '', progress_status: d.progress_status, planned_date: d.planned_date, planned_visitor: d.planned_visitor, visit_target: d.visit_target, manager_id: d.manager_id || auth.userId || '' } } catch (_) {} } }) diff --git a/frontend/src/views/mobile/MiniBusinessForm.vue b/frontend/src/views/mobile/MiniBusinessForm.vue index e6eee4e..a4c6ae5 100644 --- a/frontend/src/views/mobile/MiniBusinessForm.vue +++ b/frontend/src/views/mobile/MiniBusinessForm.vue @@ -32,10 +32,9 @@ onMounted(async () => { } if (isEdit.value) { try { - const res = await miniBusinessApi.list() - const items = Array.isArray(res.data) ? res.data : (res.data.items || []) - const d = items.find((x: any) => x.id === route.params.id) - if (d) form.value = { customer_id: d.customer_id, product_type: d.product_type, amount: d.amount, follow_up_detail: d.follow_up_detail || '', status: d.status, expected_revenue_date: d.expected_revenue_date, manager_id: d.manager_id || auth.userId || '' } + const res = await api.get(`/mini-business/${route.params.id}`) + const d = res.data + form.value = { customer_id: d.customer_id, product_type: d.product_type, amount: d.amount, follow_up_detail: d.follow_up_detail || '', status: d.status, expected_revenue_date: d.expected_revenue_date, manager_id: d.manager_id || auth.userId || '' } } catch (_) {} } })