添加供应商点击弹框

This commit is contained in:
linxd
2025-07-16 09:26:08 +08:00
parent b8f9763f4a
commit aebb615fb6
16 changed files with 277 additions and 86 deletions

View File

@ -21,11 +21,13 @@ import {
} from '@ant-design/icons';
import { history, useLocation, useIntl } from 'umi';
import { getEvaluateSupplierList, getAllEvaluateRules } from '@/servers/api/supplierEvaluate';
import { useSupplierDetailModal } from '@/components/SupplierDetailModalContext/SupplierDetailModalContext';
const { Option } = Select;
const SupplierEvaluateResultInfo: React.FC = () => {
const intl = useIntl();
const supplierDetailModal = useSupplierDetailModal();
const location = useLocation<{ record: SupplierEvaluateResult.EvaluateTaskItem }>();
const [loading, setLoading] = useState<boolean>(false);
const [form] = Form.useForm();
@ -201,9 +203,9 @@ const SupplierEvaluateResultInfo: React.FC = () => {
ellipsis: {
showTitle: false,
},
render: (supplierName: string) => (
render: (supplierName: string, record: SupplierEvaluateResult.EvaluateSupplierItem) => (
<Tooltip placement="topLeft" title={supplierName}>
{supplierName}
<Button type="link" onClick={() => supplierDetailModal?.(record.supplierId)}>{supplierName}</Button>
</Tooltip>
),
},

View File

@ -1,18 +1,11 @@
// 供应商评价结果打分情况
import React, { useState, useEffect } from 'react';
import {
Form,
Input,
Select,
Button,
Table,
Tooltip,
message,
} from 'antd';
import { Form, Input, Select, Button, Table, Tooltip, message } from 'antd';
import type { TablePaginationConfig } from 'antd';
import { SearchOutlined, DeleteOutlined, ArrowLeftOutlined } from '@ant-design/icons';
import { history, useLocation, useIntl } from 'umi';
import { getEvaluateScoreList, getAllEvaluateRules } from '@/servers/api/supplierEvaluate';
import { useSupplierDetailModal } from '@/components/SupplierDetailModalContext/SupplierDetailModalContext';
// 自定义类型用于传递给详情页的数据
interface DetailPageState {
@ -24,6 +17,7 @@ const { Option } = Select;
const SupplierEvaluateResultScoreByList: React.FC = () => {
const intl = useIntl();
const supplierDetailModal = useSupplierDetailModal();
const location = useLocation<{
record: SupplierEvaluateResult.EvaluateSupplierItem;
}>();
@ -36,14 +30,15 @@ const SupplierEvaluateResultScoreByList: React.FC = () => {
total: 0,
showSizeChanger: true,
showQuickJumper: true,
showTotal: (total) => intl.formatMessage(
{ id: 'supplierEvaluateResult.pagination.total' },
{ total }
),
showTotal: (total) =>
intl.formatMessage({ id: 'supplierEvaluateResult.pagination.total' }, { total }),
});
const [searchParams, setSearchParams] = useState<SupplierEvaluateResult.EvaluateScoreSearchParams>({});
const [searchParams, setSearchParams] =
useState<SupplierEvaluateResult.EvaluateScoreSearchParams>({});
const [record, setRecord] = useState<SupplierEvaluateResult.EvaluateSupplierItem | null>(null);
const [evaluateRules, setEvaluateRules] = useState<SupplierEvaluateRuleManage.EvaluateRuleItem[]>([]);
const [evaluateRules, setEvaluateRules] = useState<SupplierEvaluateRuleManage.EvaluateRuleItem[]>(
[],
);
// 获取评价规则列表
const fetchEvaluateRules = async () => {
@ -52,7 +47,10 @@ const SupplierEvaluateResultScoreByList: React.FC = () => {
if (response.success && response.data) {
setEvaluateRules(response.data);
} else {
message.error(response.message || intl.formatMessage({ id: 'supplierEvaluateResult.message.fetchRulesFailed' }));
message.error(
response.message ||
intl.formatMessage({ id: 'supplierEvaluateResult.message.fetchRulesFailed' }),
);
}
} catch (error) {
console.error('获取评价规则列表失败:', error);
@ -142,7 +140,10 @@ const SupplierEvaluateResultScoreByList: React.FC = () => {
message.info(intl.formatMessage({ id: 'supplierEvaluateResult.message.noScoreData' }));
}
} else {
message.error(response.message || intl.formatMessage({ id: 'supplierEvaluateResult.message.fetchScoreFailed' }));
message.error(
response.message ||
intl.formatMessage({ id: 'supplierEvaluateResult.message.fetchScoreFailed' }),
);
}
} catch (error) {
console.error('获取评价打分情况列表失败:', error);
@ -179,7 +180,7 @@ const SupplierEvaluateResultScoreByList: React.FC = () => {
const handleViewDetail = (scoreItem: SupplierEvaluateResult.ScoreDataItem) => {
const detailState: DetailPageState = {
record: scoreItem,
parentRecord: record
parentRecord: record,
};
history.push({
pathname: 'supplierEvaluateResultByZb',
@ -207,9 +208,11 @@ const SupplierEvaluateResultScoreByList: React.FC = () => {
ellipsis: {
showTitle: false,
},
render: (supplierName: string) => (
render: (supplierName: string, rowData: SupplierEvaluateResult.ScoreDataItem) => (
<Tooltip placement="topLeft" title={supplierName}>
{supplierName}
<Button type="link" onClick={() => supplierDetailModal?.(rowData.supplierId)}>
{supplierName}
</Button>
</Tooltip>
),
},
@ -285,12 +288,25 @@ const SupplierEvaluateResultScoreByList: React.FC = () => {
<div className="common-container">
<div className="filter-action-row">
<Form form={form} layout="inline" onFinish={handleSearch} className="filter-form">
<Form.Item name="supplierName" label={intl.formatMessage({ id: 'supplierEvaluateResult.form.supplierName' })}>
<Input placeholder={intl.formatMessage({ id: 'supplierEvaluateResult.form.placeholder.supplierName' })} allowClear />
<Form.Item
name="supplierName"
label={intl.formatMessage({ id: 'supplierEvaluateResult.form.supplierName' })}
>
<Input
placeholder={intl.formatMessage({
id: 'supplierEvaluateResult.form.placeholder.supplierName',
})}
allowClear
/>
</Form.Item>
<Form.Item name="level" label={intl.formatMessage({ id: 'supplierEvaluateResult.form.levelName' })}>
<Form.Item
name="level"
label={intl.formatMessage({ id: 'supplierEvaluateResult.form.levelName' })}
>
<Select
placeholder={intl.formatMessage({ id: 'supplierEvaluateResult.form.placeholder.levelName' })}
placeholder={intl.formatMessage({
id: 'supplierEvaluateResult.form.placeholder.levelName',
})}
allowClear
style={{ width: 150 }}
>

View File

@ -21,6 +21,7 @@ import {
} from '@/servers/api/supplierEvaluate';
import { getDictList } from '@/servers/api/dicts';
import type { DictItem } from '@/servers/api/dicts';
import { useSupplierDetailModal } from '@/components/SupplierDetailModalContext/SupplierDetailModalContext';
const { Title } = Typography;
const { TabPane } = Tabs;
@ -29,6 +30,7 @@ const { Option } = Select;
const SupplierEvaluateScore: React.FC = () => {
const intl = useIntl();
const supplierDetailModal = useSupplierDetailModal();
const [filterForm] = Form.useForm();
// 新增状态
const [activeTab, setActiveTab] = useState<string>('supplier');
@ -265,6 +267,9 @@ status状态
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.supplierName' }),
dataIndex: 'name',
key: 'name',
render: (text: string, record: any) => (
<Button type="link" onClick={() => supplierDetailModal?.(record.supplierId)}>{text}</Button>
),
},
{
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.evaluateTheme' }),

View File

@ -2,6 +2,7 @@ import React from 'react';
import { Card, Table, Button, message } from 'antd';
import styles from '../../supplierTaskManageDetail.less';
import { useIntl } from 'umi';
import { useSupplierDetailModal } from '@/components/SupplierDetailModalContext/SupplierDetailModalContext';
interface SupplierInfoProps {
taskData: SupplierTaskManage.TaskDetailData;
@ -10,7 +11,7 @@ interface SupplierInfoProps {
const SupplierInfo: React.FC<SupplierInfoProps> = ({ taskData, onViewEvaluators }) => {
const intl = useIntl();
const supplierDetailModal = useSupplierDetailModal();
// 查看供应商评价人员
const handleViewSupplierEvaluators = (record: any) => {
if (!taskData || !taskData.supplierIds) {
@ -34,7 +35,9 @@ const SupplierInfo: React.FC<SupplierInfoProps> = ({ taskData, onViewEvaluators
userList: userList,
});
} else {
message.error(intl.formatMessage({ id: 'supplierTaskManage.message.noSupplierEvaluatorsFound' }));
message.error(
intl.formatMessage({ id: 'supplierTaskManage.message.noSupplierEvaluatorsFound' }),
);
}
};
@ -50,6 +53,9 @@ const SupplierInfo: React.FC<SupplierInfoProps> = ({ taskData, onViewEvaluators
title: intl.formatMessage({ id: 'supplierTaskManage.column.supplierName' }),
dataIndex: 'supplierName',
key: 'supplierName',
render: (text: string, record: any) => (
<Button type="link" onClick={() => supplierDetailModal?.(record.supplierId)}>{text}</Button>
),
},
{
title: intl.formatMessage({ id: 'supplierTaskManage.column.deptName' }),
@ -66,10 +72,7 @@ const SupplierInfo: React.FC<SupplierInfoProps> = ({ taskData, onViewEvaluators
title: intl.formatMessage({ id: 'supplierTaskManage.column.action' }),
key: 'action',
render: (record: any) => (
<Button
type="link"
onClick={() => handleViewSupplierEvaluators(record)}
>
<Button type="link" onClick={() => handleViewSupplierEvaluators(record)}>
{intl.formatMessage({ id: 'supplierTaskManage.button.viewEvaluators' })}
</Button>
),
@ -77,7 +80,11 @@ const SupplierInfo: React.FC<SupplierInfoProps> = ({ taskData, onViewEvaluators
];
if (!taskData || !taskData.blackSupplierVos || taskData.blackSupplierVos.length === 0) {
return <div className={styles.emptyData}>{intl.formatMessage({ id: 'supplierTaskManage.text.noSupplierData' })}</div>;
return (
<div className={styles.emptyData}>
{intl.formatMessage({ id: 'supplierTaskManage.text.noSupplierData' })}
</div>
);
}
return (