From abc0a6051dfc9575a119eabfe8a51a5dbdf4822e Mon Sep 17 00:00:00 2001 From: xx Date: Thu, 5 Feb 2026 11:25:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 15 ++++++++++++++ package.json | 4 ++-- src/App.tsx | 6 +++++- src/api/request.ts | 2 +- src/components/exam/ExamDetailPanel.tsx | 4 ++++ src/components/exam/ExamModal.tsx | 11 +++++++++++ src/components/layout/Sidebar.tsx | 16 +++++++++++---- src/components/layout/TopBar.tsx | 8 ++++---- src/components/modals/NoteModal.tsx | 4 ++-- src/components/support/SupportSection.tsx | 24 +++++++++++------------ src/index.css | 12 ++++++++++-- vite.config.ts | 3 +++ 12 files changed, 81 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fcc1f5..5260ccc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -76,6 +76,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1835,6 +1836,7 @@ "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1845,6 +1847,7 @@ "integrity": "sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1905,6 +1908,7 @@ "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.47.0", "@typescript-eslint/types": "8.47.0", @@ -2153,6 +2157,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2367,6 +2372,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -2775,6 +2781,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3888,6 +3895,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4089,6 +4097,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -4098,6 +4107,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -4493,6 +4503,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4552,6 +4563,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4645,6 +4657,7 @@ "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -4738,6 +4751,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4810,6 +4824,7 @@ "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index d422150..42fadae 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "export NODE_ENV=development && vite --host 0.0.0.0", + "dev": "export NODE_ENV=development && vite --host 0.0.0.0 --port 5777", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview" @@ -33,4 +33,4 @@ "typescript-eslint": "^8.46.4", "vite": "^7.2.4" } -} +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index eeb4a74..e1dfeff 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,7 +4,11 @@ import { RouterProvider } from 'react-router-dom'; import { router } from './router'; function App() { - return ; + return ( +
+ +
+ ); } export default App; diff --git a/src/api/request.ts b/src/api/request.ts index 4d7e2f7..3b802f5 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -11,7 +11,7 @@ const API_CONFIG = { // 开发环境使用内网,生产环境使用外网 BASE_URL: import.meta.env.NODE_ENV === 'development' ? 'http://10.1.5.118:8077/platform-api' - : 'http://apihis.circleharmonyhospital.cn:8982/platform-api', + : '/platform-api', // 请求超时时间(120秒) TIMEOUT: 120000, }; diff --git a/src/components/exam/ExamDetailPanel.tsx b/src/components/exam/ExamDetailPanel.tsx index 1a2afee..5f8252f 100644 --- a/src/components/exam/ExamDetailPanel.tsx +++ b/src/components/exam/ExamDetailPanel.tsx @@ -16,6 +16,7 @@ interface ExamDetailPanelProps { addItemInfoList: CustomerExamAddItem[] | null; progressList: PhysicalExamProgressItem[] | null; loading: boolean; + onCustomerUpdated?: () => void; } const getMaritalCodeFromText = (text: string): number => { @@ -33,6 +34,7 @@ export const ExamDetailPanel = ({ addItemInfoList, progressList, loading, + onCustomerUpdated, }: ExamDetailPanelProps) => { const basePhone = customerInfo?.phone || (client['mobile' as keyof ExamClient] as string | undefined) || ''; const baseMaritalText = @@ -108,6 +110,7 @@ export const ExamDetailPanel = ({ if (res.Status === 200) { setEditMessage('保存成功'); setPhoneEditing(false); + onCustomerUpdated?.(); setTimeout(() => setEditMessage(null), 2000); } else { setEditMessage(res.Message || '保存失败'); @@ -140,6 +143,7 @@ export const ExamDetailPanel = ({ if (res.Status === 200) { setEditMessage('保存成功'); setMaritalEditing(false); + onCustomerUpdated?.(); setTimeout(() => setEditMessage(null), 2000); } else { setEditMessage(res.Message || '保存失败'); diff --git a/src/components/exam/ExamModal.tsx b/src/components/exam/ExamModal.tsx index a2a24cd..8b869f6 100644 --- a/src/components/exam/ExamModal.tsx +++ b/src/components/exam/ExamModal.tsx @@ -76,6 +76,16 @@ export const ExamModal = ({ client, tab, onTabChange, onClose }: ExamModalProps) .finally(() => setDetailLoading(false)); }, [client.id]); + const refetchDetail = () => { + const physical_exam_id = Number(client.id); + if (!physical_exam_id) return; + getCustomerDetail({ physical_exam_id }).then((detailRes) => { + setCustomerInfo(detailRes.Data?.customerInfo ?? null); + setAppointmentInfo(detailRes.Data?.appointmentInfo ?? null); + setAddItemInfoList(detailRes.Data?.addItemInfoList ?? null); + }); + }; + return (
)} {tab === 'sign' && } diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index ef999b1..33ce2c7 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -22,10 +22,18 @@ const NAV_ITEMS = [ { key: 'support', icon: IconSupport, label: '客服咨询' }, ] as const; +const toggleFullscreen = () => { + if (!document.fullscreenElement) { + document.documentElement.requestFullscreen?.(); + } else { + document.exitFullscreen?.(); + } +}; + export const Sidebar = ({ active, onNavigate, onQuickAction }: SidebarProps) => ( -
-
+ {/*
💻 客服 / IT 支持
遇到系统问题可一键联系 IT / 运营支持。
-
+
*/} ); diff --git a/src/components/layout/TopBar.tsx b/src/components/layout/TopBar.tsx index 98f6662..4871a4d 100644 --- a/src/components/layout/TopBar.tsx +++ b/src/components/layout/TopBar.tsx @@ -28,18 +28,18 @@ export const TopBar = ({ enableSearch = true, operatorName, onLoginClick, onLogo return (
- {enableSearch ? ( + {/* {enableSearch ? (
- {/* onSearch(e.target.value)} className='text-sm' - /> */} + />
) : (
圆和医疗 · 体检驾驶舱
- )} + )} */}
-
+ {/*
备注内容会同步至客户详情页,供前台和导检护士查看。 -
+
*/} diff --git a/src/components/support/SupportSection.tsx b/src/components/support/SupportSection.tsx index a140b6b..d1632bf 100644 --- a/src/components/support/SupportSection.tsx +++ b/src/components/support/SupportSection.tsx @@ -2,10 +2,10 @@ import { Card, CardContent, CardHeader } from '../ui'; export const SupportSection = () => ( - 客服咨询 · 圆圆客服台卡 + {/* 客服咨询 · 圆圆客服台卡 */} -
-
+
+ {/*

通过「圆圆客服」二维码,客户可获得一站式健康服务:包含体检预约、报告查询、报告解读等。

  • 支持体检当天现场扫码添加,绑定客户信息
  • @@ -13,19 +13,19 @@ export const SupportSection = () => (
  • 提供一对一健康咨询与报告解读服务
注:实际系统中可上传设计好的「圆圆客服二维码台卡」图片,用于前台展示与打印。
-
+
*/} -
-
-
CIRCLE HARMONY · 圆和医疗
-
圆圆客服 · 一站式健康服务
-
-
+
+
+
CIRCLE HARMONY · 圆和医疗
+
圆圆客服 · 一站式健康服务
+
+
圆圆客服二维码
-
一对一专属服务
-
+
一对一专属服务
+
服务预约 / 报告查询 diff --git a/src/index.css b/src/index.css index a686785..5a5e3d0 100644 --- a/src/index.css +++ b/src/index.css @@ -7,17 +7,21 @@ scrollbar-width: none; scrollbar-color: #cbd5e1 #f8fafc; } + .custom-scroll::-webkit-scrollbar { width: 8px; } + .custom-scroll::-webkit-scrollbar-track { background: #f8fafc; border-radius: 9999px; } + .custom-scroll::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 9999px; } + .custom-scroll::-webkit-scrollbar-thumb:hover { background: #94a3b8; } @@ -30,9 +34,13 @@ -webkit-font-smoothing: antialiased; } -body { +html, +body, +#root { margin: 0; - min-height: 100vh; + height: 100%; + max-height: 100%; + overflow: hidden; background-color: #f8fafc; } diff --git a/vite.config.ts b/vite.config.ts index 2328e17..ac1fc1f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,4 +4,7 @@ import react from '@vitejs/plugin-react-swc' // https://vite.dev/config/ export default defineConfig({ plugins: [react()], + server: { + allowedHosts: ['ipad.shenynet.com'], + }, })