更新报告寄送位置

This commit is contained in:
xianyi
2025-12-08 09:26:40 +08:00
parent a5fa94145e
commit 5f81667c60
5 changed files with 75 additions and 42 deletions

View File

@@ -16,17 +16,20 @@ export const ExamModal = ({ client, tab, onTabChange, onClose }: ExamModalProps)
{ key: 'sign', label: '签到' }, { key: 'sign', label: '签到' },
{ key: 'addon', label: '加项' }, { key: 'addon', label: '加项' },
{ key: 'print', label: '打印导检单' }, { key: 'print', label: '打印导检单' },
{ key: 'delivery', label: '报告寄送' },
]; ];
const signDone = client.signStatus === '已登记' || client.checkedItems.includes('签到'); const signDone = client.signStatus === '已登记' || client.checkedItems.includes('签到');
const addonDone = (client.addonCount || 0) > 0; const addonDone = (client.addonCount || 0) > 0;
const printDone = !!client.guidePrinted; const printDone = !!client.guidePrinted;
const deliveryDone = !!client.deliveryDone;
const tabDone: Record<ExamModalTab, boolean> = { const tabDone: Record<ExamModalTab, boolean> = {
detail: false, detail: false,
sign: signDone, sign: signDone,
addon: addonDone, addon: addonDone,
print: printDone, print: printDone,
delivery: deliveryDone,
}; };
const handleDoubleClick = (e: React.MouseEvent) => { const handleDoubleClick = (e: React.MouseEvent) => {
@@ -122,6 +125,7 @@ export const ExamModal = ({ client, tab, onTabChange, onClose }: ExamModalProps)
{tab === 'sign' && <ExamSignPanel />} {tab === 'sign' && <ExamSignPanel />}
{tab === 'addon' && <ExamAddonPanel client={client} />} {tab === 'addon' && <ExamAddonPanel client={client} />}
{tab === 'print' && <ExamPrintPanel client={client} />} {tab === 'print' && <ExamPrintPanel client={client} />}
{tab === 'delivery' && <ExamDeliveryPanel client={client} />}
</div> </div>
</div> </div>
@@ -519,6 +523,41 @@ const ExamDetailInfo = ({ client }: { client: ExamClient }) => {
); );
}; };
const ExamDeliveryPanel = ({ client }: { client: ExamClient }) => (
<div className='flex justify-center'>
<div className='w-full rounded-2xl border shadow-sm px-6 py-4 text-xs text-gray-800'>
<div className='text-lg font-semibold text-gray-900 mb-3'></div>
<div className='grid grid-cols-2 gap-3 mb-3'>
<div>
<Input placeholder='请输入收件人姓名' className='mt-1' />
</div>
<div>
<Input placeholder='用于快递联系' className='mt-1' />
</div>
<div className='col-span-2'>
<Input placeholder='请输入详细寄送地址' className='mt-1' />
</div>
</div>
<div className='space-y-2'>
<div></div>
<textarea
className='w-full rounded-2xl border px-3 py-2 text-xs outline-none focus:ring-2 focus:ring-gray-200 min-h-[80px]'
placeholder='如需多份报告、加急寄送等,请在此备注'
/>
</div>
<div className='mt-4 flex items-center justify-between text-[11px] text-gray-500'>
<div>
<span className='font-medium text-gray-800'>{client.name}</span>{client.id}
</div>
<Button className='px-4 py-1.5 text-xs'></Button>
</div>
</div>
</div>
);
const ExamPrintPanel = ({ client }: { client: ExamClient }) => ( const ExamPrintPanel = ({ client }: { client: ExamClient }) => (
<div className='flex justify-center'> <div className='flex justify-center'>
<div className='w-[520px] max-w-[95%] bg-white rounded-2xl border shadow-sm px-6 py-4 text-xs text-gray-800'> <div className='w-[520px] max-w-[95%] bg-white rounded-2xl border shadow-sm px-6 py-4 text-xs text-gray-800'>

View File

@@ -118,6 +118,17 @@ export const ExamSection = ({
<span></span> <span></span>
{printDone && <span></span>} {printDone && <span></span>}
</button> </button>
<button
type='button'
className='px-2 py-0.5 rounded-2xl border bg-white hover:bg-gray-100 flex items-center gap-1'
onClick={(e) => {
e.stopPropagation();
openModal('delivery');
}}
>
<span></span>
</button>
</div> </div>
</button> </button>
); );

View File

@@ -45,17 +45,30 @@ export const Sidebar = ({ active, onNavigate, onQuickAction }: SidebarProps) =>
<section className='mt-2 p-3 rounded-2xl border bg-gray-50/50'> <section className='mt-2 p-3 rounded-2xl border bg-gray-50/50'>
<div className='text-sm text-gray-700 mb-2'></div> <div className='text-sm text-gray-700 mb-2'></div>
<div className='grid grid-cols-2 gap-2 text-xs'> <div className='grid grid-cols-2 gap-2 text-xs'>
<Button className='justify-center py-1.5' onClick={() => onQuickAction('meal')}> <Button
className='min-h-[52px] justify-center py-2 bg-white border-gray-200 hover:bg-gray-50'
onClick={() => onQuickAction('meal')}
>
<div className='flex flex-col leading-tight text-sm text-gray-800'>
<span></span>
<span></span>
</div>
</Button> </Button>
<Button className='justify-center py-1.5' onClick={() => onQuickAction('vip')}> <Button
VIP认证 className='min-h-[52px] justify-center py-2 bg-white border-gray-200 hover:bg-gray-50'
onClick={() => onQuickAction('note')}
>
<div className='flex flex-col leading-tight text-sm text-gray-800'>
<span></span>
</div>
</Button> </Button>
<Button className='justify-center py-1.5' onClick={() => onQuickAction('delivery')}> <Button
className='min-h-[52px] col-span-2 justify-center py-2 bg-white border-gray-200 hover:bg-gray-50'
</Button> onClick={() => onQuickAction('vip')}
<Button className='justify-center py-1.5' onClick={() => onQuickAction('note')}> >
<div className='flex flex-col leading-tight text-sm text-gray-800'>
<span>VIP认证</span>
</div>
</Button> </Button>
</div> </div>
</section> </section>

View File

@@ -1,6 +1,6 @@
import type { ExamClient, QuickActionType } from '../../data/mockData'; import type { ExamClient, QuickActionType } from '../../data/mockData';
import { EXAM_CLIENTS } from '../../data/mockData'; import { EXAM_CLIENTS } from '../../data/mockData';
import { Button, InfoCard, Input } from '../ui'; import { InfoCard } from '../ui';
import vipQr from '../../assets/image/vip-qr.png'; import vipQr from '../../assets/image/vip-qr.png';
interface QuickActionModalProps { interface QuickActionModalProps {
action: QuickActionType; action: QuickActionType;
@@ -28,7 +28,6 @@ export const QuickActionModal = ({
const titleMap: Record<Exclude<QuickActionType, 'none'>, string> = { const titleMap: Record<Exclude<QuickActionType, 'none'>, string> = {
meal: '用餐登记', meal: '用餐登记',
vip: '太平 VIP 认证说明', vip: '太平 VIP 认证说明',
delivery: '报告寄送登记',
note: '备注窗', note: '备注窗',
}; };
@@ -92,35 +91,6 @@ export const QuickActionModal = ({
</div> </div>
)} )}
{action === 'delivery' && (
<div className='space-y-3 text-xs text-gray-700'>
<div className='grid grid-cols-2 gap-3'>
<div>
<Input placeholder='请输入收件人姓名' className='mt-1' />
</div>
<div>
<Input placeholder='用于快递联系' className='mt-1' />
</div>
<div className='col-span-2'>
<Input placeholder='请输入详细寄送地址' className='mt-1' />
</div>
</div>
<div>
<textarea
className='w-full mt-1 rounded-2xl border px-3 py-2 text-xs outline-none focus:ring-2 focus:ring-gray-200 min-h-[72px]'
placeholder='如需多份报告、加急寄送等,请在此备注'
/>
</div>
<div className='text-right'>
<Button></Button>
</div>
</div>
)}
{action === 'note' && ( {action === 'note' && (
<div className='space-y-3 text-xs text-gray-700'> <div className='space-y-3 text-xs text-gray-700'>
<div></div> <div></div>

View File

@@ -18,8 +18,8 @@ export interface ExamClient {
[key: string]: unknown; [key: string]: unknown;
} }
export type ExamModalTab = 'detail' | 'sign' | 'addon' | 'print'; export type ExamModalTab = 'detail' | 'sign' | 'addon' | 'print' | 'delivery';
export type QuickActionType = 'none' | 'meal' | 'vip' | 'delivery' | 'note'; export type QuickActionType = 'none' | 'meal' | 'vip' | 'note';
export const HOME_STATS: [string, number][] = [ export const HOME_STATS: [string, number][] = [
['今日预约', 80], ['今日预约', 80],