From 4cd4e844f5d5ade0b19c38b92f745e4926edc115 Mon Sep 17 00:00:00 2001 From: yuchenglong Date: Tue, 25 Nov 2025 10:04:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20VIP=20=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=BA=20is-taiping-vip=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=8E=B7=E5=8F=96=E5=8F=AF=E9=80=89=E5=A5=97=E9=A4=90?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/hisApi.ts | 9 +++++--- src/pages/U2/u2.tsx | 53 +++++++++++++++++++++++++++++++++++---------- src/pages/U3/u3.tsx | 38 +++++++++++++++++++++++++++----- src/pages/U4/u4.css | 17 ++++++++++++++- src/pages/U4/u4.tsx | 44 ++++++++++++++++--------------------- 5 files changed, 116 insertions(+), 45 deletions(-) diff --git a/src/api/hisApi.ts b/src/api/hisApi.ts index 887b367..73aa9e0 100644 --- a/src/api/hisApi.ts +++ b/src/api/hisApi.ts @@ -163,9 +163,12 @@ export async function getPatientInfo( export async function getVipStatus( id_no: string ): Promise> { - const response = await axiosInstance.post>("is-vip", { - id_no, - }); + const response = await axiosInstance.post>( + "is-taiping-vip", + { + id_no, + } + ); return response.data; } diff --git a/src/pages/U2/u2.tsx b/src/pages/U2/u2.tsx index bc6ceb8..753e7b2 100644 --- a/src/pages/U2/u2.tsx +++ b/src/pages/U2/u2.tsx @@ -6,11 +6,15 @@ import avatar from "../../assets/avatar.png"; import semicircle from "../../assets/semicircle.png"; import BackButton from "../../components/BackButton"; import ConfirmButton from "../../components/ConfirmButton"; -import { getPatientInfo, getVipStatus, PatientInfo } from "../../api/hisApi"; +import { + getPatientInfo, + getVipStatus, + getOptionalItemList, + PatientInfo, +} from "../../api/hisApi"; const U2: React.FC = () => { const navigate = useNavigate(); - // 不再通过路由传参,直接从 localStorage 读取上次保存的身份证号 const idCardNo = localStorage.getItem("lastIdCardNo"); const [patientInfo, setPatientInfo] = useState(null); const [loading, setLoading] = useState(false); @@ -38,7 +42,7 @@ const U2: React.FC = () => { } }, [idCardNo]); - // 获取 VIP 状态,避免重复请求(用 ref 保护) + // 获取 VIP 状态,避免重复请求 useEffect(() => { if (!idCardNo) return; if (vipCalledRef.current) return; @@ -63,19 +67,46 @@ const U2: React.FC = () => { }; const handleConfirm = () => { + if (!idCardNo) { + alert("未获取到身份证号,请重新刷卡"); + navigate("/"); + return; + } + // 判断是否为 VIP 客户(0 否,1 是) if (isVip === 1) { navigate("/u3"); return; - } else { - // 是否套餐待定 - const isPackageUndecided = false; // 这里可以替换为实际的判断逻辑 - if (isPackageUndecided) { - navigate("/u4"); - } else { - navigate("/u5"); - } } + + // 调用接口判断是否有可选套餐 + getOptionalItemList(idCardNo) + .then((res) => { + if (res.Status === 200) { + const isPackageUndecided = + res.Data?.packageInfo?.is_optional_package === 1; + if (isPackageUndecided) { + navigate("/u4", { state: { optionalData: res.Data } }); + } else { + // 如果没有可选套餐,检查是否有错误消息需要提示 + if (!res.Data?.packageInfo && res.Message) { + alert(res.Message); + } else { + navigate("/u5"); + } + } + } else { + if (res.Message) { + alert(res.Message); + } else { + navigate("/u5"); + } + } + }) + .catch((err) => { + console.error("getOptionalItemList error", err); + navigate("/u5"); + }); }; return ( diff --git a/src/pages/U3/u3.tsx b/src/pages/U3/u3.tsx index 2653df0..e550950 100644 --- a/src/pages/U3/u3.tsx +++ b/src/pages/U3/u3.tsx @@ -2,6 +2,7 @@ import React from "react"; import "./u3.css"; import { useNavigate } from "react-router-dom"; import DecorLine from "../../components/DecorLine"; +import { getOptionalItemList } from "../../api/hisApi"; import BackButton from "../../components/BackButton"; import ConfirmButton from "../../components/ConfirmButton"; @@ -16,13 +17,40 @@ const U3: React.FC = () => { }; const handleConfirm = () => { - // 是否套餐待定 - const isPackageUndecided = true; - if (isPackageUndecided) { - navigate("/u4"); - } else { + // 根据本地身份证号检查是否有可选套餐 + const idCardNo = localStorage.getItem("lastIdCardNo"); + if (!idCardNo) { + // 没有身份证号,直接跳转到下一步 navigate("/u5"); + return; } + + // 调用接口判断是否有可选套餐 + getOptionalItemList(idCardNo) + .then((res) => { + if (res.Status === 200) { + if (res.Data?.packageInfo?.is_optional_package === 1) { + navigate("/u4", { state: { optionalData: res.Data } }); + } else { + // 如果没有可选套餐,检查是否有错误消息需要提示 + if (!res.Data?.packageInfo && res.Message) { + alert(res.Message); + } else { + navigate("/u5"); + } + } + } else { + if (res.Message) { + alert(res.Message); + } else { + navigate("/u5"); + } + } + }) + .catch((err) => { + console.error("getOptionalItemList error", err); + navigate("/u5"); + }); }; return ( diff --git a/src/pages/U4/u4.css b/src/pages/U4/u4.css index fcf6a13..1c300ae 100644 --- a/src/pages/U4/u4.css +++ b/src/pages/U4/u4.css @@ -61,6 +61,9 @@ flex-direction: column; gap: 30px; cursor: pointer; + position: relative; + justify-content: center; + align-items: center; } .u4-card:hover { @@ -76,6 +79,8 @@ display: flex; align-items: center; gap: 12px; + justify-content: center; + width: 100%; } .u4-radio { @@ -83,12 +88,22 @@ height: 34px; display: block; object-fit: contain; + position: absolute; + top: 40px; + left: 40px; } .u4-card-title { - font-size: 36px; + font-size: 34px; color: rgba(0, 45, 93, 0.95); font-weight: 700; + text-align: center; + white-space: normal; + word-break: break-word; + overflow-wrap: break-word; + line-height: 1.4; + margin-top: 8px; + margin-bottom: 8px; } .u4-card-body { diff --git a/src/pages/U4/u4.tsx b/src/pages/U4/u4.tsx index 2d50ed2..ce82cb2 100644 --- a/src/pages/U4/u4.tsx +++ b/src/pages/U4/u4.tsx @@ -1,6 +1,7 @@ import React from "react"; import "./u4.css"; import { useNavigate } from "react-router-dom"; +import { useLocation } from "react-router-dom"; import DecorLine from "../../components/DecorLine"; import LongButton from "../../components/LongButton"; import radio0 from "../../assets/radio-0.png"; @@ -14,25 +15,29 @@ interface testType { const U4: React.FC = () => { const navigate = useNavigate(); + const location = useLocation(); + const optionalData = (location.state as any)?.optionalData; const [test, setTest] = React.useState([]); const handleConfirm = () => { navigate("/UI6"); }; React.useEffect(() => { - setTest([ - { - id: 1, - title: "乳腺 B 超", - desc: "适合 40 岁", - taboo: "无特别限制", - }, - { - id: 2, - title: "乳腺钼靶", - desc: "适合40岁以上", - taboo: "孕期、哺乳期", - }, - ]); + if ( + optionalData && + optionalData.listOptionalItem && + optionalData.listOptionalItem.length + ) { + const items = optionalData.listOptionalItem.map((it: any) => ({ + id: it.combination_code, + title: it.combination_name, + desc: "", + taboo: "", + })); + setTest(items); + } else { + alert("未获取到可选套餐信息,无需选择套餐"); + navigate("/UI6"); + } }, []); const [selectedId, setSelectedId] = React.useState(1); @@ -61,17 +66,6 @@ const U4: React.FC = () => { />
{t.title}
- -
-
-
-
{t.desc}
-
-
-
-
禁忌:{t.taboo}
-
-
))}