封装供应商弹框详情组件

This commit is contained in:
linxd
2025-07-15 16:58:54 +08:00
parent 14c6dd9040
commit afeb2fb899
9 changed files with 95 additions and 55 deletions

View File

@ -340,7 +340,6 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
const updateDataSource = (newData: TableRowItem[]) => { const updateDataSource = (newData: TableRowItem[]) => {
// 确保每行都有唯一稳定的key // 确保每行都有唯一稳定的key
const finalData = ensureUniqueKeys(newData); const finalData = ensureUniqueKeys(newData);
console.log('finalData', finalData);
setDataSource(finalData); setDataSource(finalData);
if (onChange) { if (onChange) {
// 转换回API格式再传递给父组件 // 转换回API格式再传递给父组件
@ -369,7 +368,6 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
// 处理输入变化 // 处理输入变化
const handleInputChange = (val: any, record: TableRowItem, field: string) => { const handleInputChange = (val: any, record: TableRowItem, field: string) => {
console.log('handleInputChange', val, record, field);
const newData = [...dataSource]; const newData = [...dataSource];
const index = newData.findIndex((item) => item.key === record.key); const index = newData.findIndex((item) => item.key === record.key);
if (index > -1) { if (index > -1) {

View File

@ -0,0 +1,12 @@
import React, { useState, useEffect } from 'react';
const SupplierDetail = ({ supplierId }: { supplierId: string | null }) => {
const [supplierDetail, setSupplierDetail] = useState(null);
useEffect(() => {
console.log(supplierId);
}, [supplierId]);
return <div>SupplierDetail</div>;
};
export default SupplierDetail;

View File

@ -0,0 +1,25 @@
import React, { useState } from 'react';
import { Modal } from 'antd';
import SupplierDetail from './SupplierDetail';
const SupplierDetailModalContext = React.createContext<((id: string) => void) | null>(null);
export const useSupplierDetailModal = () => React.useContext(SupplierDetailModalContext);
export const SupplierDetailModalProvider = ({ children }: { children: React.ReactNode }) => {
const [visible, setVisible] = useState(false);
const [supplierId, setSupplierId] = useState<string | null>(null);
const showSupplierDetail = (id: string) => {
setSupplierId(id);
setVisible(true);
};
return (
<SupplierDetailModalContext.Provider value={showSupplierDetail}>
{children}
<Modal visible={visible} onCancel={() => setVisible(false)} footer={null}>
<SupplierDetail supplierId={supplierId} />
</Modal>
</SupplierDetailModalContext.Provider>
);
};

View File

@ -0,0 +1,3 @@
// 任何页面/组件
const showSupplierDetail = useSupplierDetailModal();
<span onClick={() => showSupplierDetail(supplier.id)}>{supplier.name}</span>

View File

@ -233,6 +233,11 @@ const SupplierSelector: React.FC<SupplierSelectorProps> = ({
})); }));
}; };
// 显示供应商详情
const showSupplierDetail = (record: SupplierItem) => {
console.log(record);
};
// 表格列定义 // 表格列定义
const columns = [ const columns = [
{ {
@ -240,9 +245,9 @@ const SupplierSelector: React.FC<SupplierSelectorProps> = ({
dataIndex: 'supplierName', dataIndex: 'supplierName',
width: 120, width: 120,
ellipsis: true, ellipsis: true,
render: (supplierName: string) => ( render: (supplierName: string, record: SupplierItem) => (
<Tooltip placement="topLeft" title={supplierName}> <Tooltip placement="topLeft" title={supplierName}>
{supplierName} <span onClick={()=>showSupplierDetail(record)}>{supplierName}</span>
</Tooltip> </Tooltip>
), ),
}, },

View File

@ -8,8 +8,8 @@ import routes from '../../config/router.config'; // 引入你的自定义路由
import { ConfigProvider, Breadcrumb } from 'antd'; import { ConfigProvider, Breadcrumb } from 'antd';
import HeaderComponent from './Header'; import HeaderComponent from './Header';
import IconFont from '@/components/IconFont/IconFont'; import IconFont from '@/components/IconFont/IconFont';
import { BreadcrumbState } from '@/models/breadcrumb'; import type { BreadcrumbState } from '@/models/breadcrumb';
import { SupplierDetailModalProvider } from '@/components/SupplierDetailModalContext/SupplierDetailModalContext';
const MenuRender = (item: any, isSubMenu: boolean) => { const MenuRender = (item: any, isSubMenu: boolean) => {
const intl = useIntl(); const intl = useIntl();
@ -38,7 +38,7 @@ const MenuRender = (item: any, isSubMenu: boolean) => {
function filterMenuByRouter(routes: any, menuRoutes: any) { function filterMenuByRouter(routes: any, menuRoutes: any) {
return routes.reduce((result: any, route: any) => { return routes.reduce((result: any, route: any) => {
// 只看有 name 的节点 // 只看有 name 的节点
const menu = menuRoutes.find(m => m.name === route.name); const menu = menuRoutes.find((m) => m.name === route.name);
if (menu) { if (menu) {
// 匹配到后,递归处理 children // 匹配到后,递归处理 children
let children = []; let children = [];
@ -56,7 +56,12 @@ function filterMenuByRouter(routes:any, menuRoutes:any) {
}, []); }, []);
} }
const BreadcrumbRender = (routeBreadcrumb: any, intl: any, history: any, dynamicBreadcrumbName: string | null) => { const BreadcrumbRender = (
routeBreadcrumb: any,
intl: any,
history: any,
dynamicBreadcrumbName: string | null,
) => {
const breadcrumbRoutes = routeBreadcrumb?.routes; const breadcrumbRoutes = routeBreadcrumb?.routes;
return ( return (
<Breadcrumb> <Breadcrumb>
@ -65,22 +70,17 @@ const BreadcrumbRender = (routeBreadcrumb: any, intl: any, history: any, dynamic
history.push('/'); history.push('/');
}} }}
> >
<span style={{ cursor: 'pointer' }}> <span style={{ cursor: 'pointer' }}>{intl.formatMessage({ id: 'menu.首页' })}</span>
{intl.formatMessage({ id: 'menu.首页' })}
</span>
</Breadcrumb.Item> </Breadcrumb.Item>
{breadcrumbRoutes?.map((item: any, index: number) => { {breadcrumbRoutes?.map((item: any, index: number) => {
// 判断是否是最后一个面包屑项且存在动态名称 // 判断是否是最后一个面包屑项且存在动态名称
const isLastItem = index === (breadcrumbRoutes.length - 1); const isLastItem = index === breadcrumbRoutes.length - 1;
const displayName = (isLastItem && dynamicBreadcrumbName) const displayName =
isLastItem && dynamicBreadcrumbName
? dynamicBreadcrumbName ? dynamicBreadcrumbName
: intl.formatMessage({ id: `menu.${item.breadcrumbName}` || '' }); : intl.formatMessage({ id: `menu.${item.breadcrumbName}` || '' });
return ( return <Breadcrumb.Item key={item.path}>{displayName}</Breadcrumb.Item>;
<Breadcrumb.Item key={item.path}>
{displayName}
</Breadcrumb.Item>
);
})} })}
</Breadcrumb> </Breadcrumb>
); );
@ -111,9 +111,9 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
} }
}, []); }, []);
return ( return (
<ConfigProvider> <ConfigProvider>
<SupplierDetailModalProvider>
<ProLayout <ProLayout
{...defaultSettings} {...defaultSettings}
route={{ routes }} route={{ routes }}
@ -142,11 +142,11 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
{children} {children}
</PageContainer> </PageContainer>
</ProLayout> </ProLayout>
</SupplierDetailModalProvider>
</ConfigProvider> </ConfigProvider>
); );
}; };
export default connect(({ breadcrumb }: { breadcrumb: BreadcrumbState }) => ({ export default connect(({ breadcrumb }: { breadcrumb: BreadcrumbState }) => ({
breadcrumb breadcrumb,
}))(BasicLayout); }))(BasicLayout);

View File

@ -203,7 +203,6 @@ const supplierAnnualTaskManage: SupplierTaskModelType = {
} }
// 处理评价人员更新 - 更新后要保留原有对象中的indicatorIds // 处理评价人员更新 - 更新后要保留原有对象中的indicatorIds
console.log(updatedFormData)
// 保存更新后的表单数据 // 保存更新后的表单数据
yield put({ type: 'saveTaskFormData', payload: updatedFormData }); yield put({ type: 'saveTaskFormData', payload: updatedFormData });

View File

@ -263,7 +263,6 @@ const SupplierTaskModel: SupplierTaskModelType = {
if (payload.taskDeptWeightList) { if (payload.taskDeptWeightList) {
updatedFormData.taskDeptWeightList = payload.taskDeptWeightList; updatedFormData.taskDeptWeightList = payload.taskDeptWeightList;
} }
console.log(updatedFormData)
// 保存更新后的表单数据 // 保存更新后的表单数据
yield put({ type: 'saveTaskFormData', payload: updatedFormData }); yield put({ type: 'saveTaskFormData', payload: updatedFormData });

View File

@ -310,7 +310,6 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
// 处理指标数据变更 // 处理指标数据变更
const handleTemplateDataChange = (data: SupplierTemplateManage.IndicatorSt[]) => { const handleTemplateDataChange = (data: SupplierTemplateManage.IndicatorSt[]) => {
console.log('handleTemplateDataChange', data);
setTemplateData(data); setTemplateData(data);
}; };