添加加项接口
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { useEffect, useMemo, useState, useRef } from 'react';
|
||||
|
||||
import type { ExamClient } from '../../data/mockData';
|
||||
import { searchPhysicalExamAddItem } from '../../api';
|
||||
import { searchPhysicalExamAddItem, getAddItemCustomerInfo } from '../../api';
|
||||
import { Button, Input } from '../ui';
|
||||
|
||||
interface AddonTag {
|
||||
@@ -31,6 +31,29 @@ export const ExamAddonPanel = ({ client }: ExamAddonPanelProps) => {
|
||||
const debounceTimerRef = useRef<number | null>(null);
|
||||
const [addonLoading, setAddonLoading] = useState(false);
|
||||
const [addonError, setAddonError] = useState<string | null>(null);
|
||||
const [discountRatio, setDiscountRatio] = useState<number>(1);
|
||||
|
||||
// 获取体检加项客户信息(用于拿到渠道折扣等信息)
|
||||
useEffect(() => {
|
||||
const physical_exam_id = Number(client.id);
|
||||
if (!physical_exam_id) return;
|
||||
|
||||
const fetchCustomerInfo = async () => {
|
||||
try {
|
||||
const res = await getAddItemCustomerInfo({ physical_exam_id });
|
||||
if (res.Status === 200 && res.Data?.listChannelDiscount && res.Data.listChannelDiscount.length > 0) {
|
||||
const rate = res.Data.listChannelDiscount[0]?.discount_rate;
|
||||
if (typeof rate === 'number' && rate > 0) {
|
||||
setDiscountRatio(rate);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('获取加项客户信息失败', err);
|
||||
}
|
||||
};
|
||||
|
||||
fetchCustomerInfo();
|
||||
}, [client.id]);
|
||||
|
||||
// 防抖:当输入值变化时,延迟 0.5 秒后更新 debouncedAddonSearch(用于 API 调用)
|
||||
useEffect(() => {
|
||||
@@ -51,28 +74,28 @@ export const ExamAddonPanel = ({ client }: ExamAddonPanelProps) => {
|
||||
|
||||
// 拉取加项列表
|
||||
useEffect(() => {
|
||||
const physical_exam_id = Number(client.id);
|
||||
if (!physical_exam_id) {
|
||||
setAddonError('缺少体检ID');
|
||||
return;
|
||||
}
|
||||
|
||||
const fetchList = async () => {
|
||||
setAddonLoading(true);
|
||||
setAddonError(null);
|
||||
try {
|
||||
const res = await searchPhysicalExamAddItem({
|
||||
physical_exam_id,
|
||||
discount_ratio: discountRatio || 1,
|
||||
item_name: debouncedAddonSearch.trim() || null,
|
||||
});
|
||||
if (res.Status === 200 && res.Data?.addItemList) {
|
||||
const list: AddonItem[] = res.Data.addItemList.map((item) => ({
|
||||
if (res.Status === 200 && Array.isArray(res.Data)) {
|
||||
const list: AddonItem[] = res.Data.map((item) => ({
|
||||
id: item.item_id ? String(item.item_id) : `addon_${item.item_name}`,
|
||||
name: item.item_name || '',
|
||||
originalPrice: item.original_price !== undefined ? Number(item.original_price).toFixed(2) : '0.00',
|
||||
currentPrice: item.actual_received_amount !== undefined
|
||||
? Number(item.actual_received_amount).toFixed(2)
|
||||
: (item.original_price !== undefined ? Number(item.original_price).toFixed(2) : '0.00'),
|
||||
originalPrice:
|
||||
item.original_price !== undefined && item.original_price !== null
|
||||
? Number(item.original_price).toFixed(2)
|
||||
: '0.00',
|
||||
currentPrice:
|
||||
item.actual_received_amount !== undefined && item.actual_received_amount !== null
|
||||
? Number(item.actual_received_amount).toFixed(2)
|
||||
: item.original_price !== undefined && item.original_price !== null
|
||||
? Number(item.original_price).toFixed(2)
|
||||
: '0.00',
|
||||
tags: [],
|
||||
paid: false,
|
||||
}));
|
||||
@@ -90,7 +113,7 @@ export const ExamAddonPanel = ({ client }: ExamAddonPanelProps) => {
|
||||
}
|
||||
};
|
||||
fetchList();
|
||||
}, [debouncedAddonSearch, client.id]);
|
||||
}, [debouncedAddonSearch, discountRatio]);
|
||||
|
||||
const allAddons = useMemo(() => addonList, [addonList]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user