准入查看与零星采购/应急采购/个人供应商和个人修改

This commit is contained in:
孙景学
2025-07-09 15:30:30 +08:00
parent b46b35cd4b
commit 7d1673f42d
11 changed files with 250 additions and 97 deletions

View File

@ -25,8 +25,13 @@ export interface Request {
socialCreditCode: string;
telephone: string;
workAddress: string;
coscoSupplierSurveyAttachments:coscoSupplierSurveyAttachments[];
[property: string]: any;
}
interface coscoSupplierSurveyAttachments {
fileUrl: string;
fileName: string;
}
interface BaseInfoTabProps {
viewType?:boolean;
@ -89,9 +94,9 @@ const BaseInfoTab: React.FC<BaseInfoTabProps> = (props) => {
<Descriptions.Item label="银行账号">
{registerInfo.coscoSupplierBase.personAccount}
</Descriptions.Item>
{/* <Descriptions.Item label="相关证照">
{registerInfo.coscoSupplierBase.socialCreditCode}
</Descriptions.Item> */}
<Descriptions.Item label="相关证照">
<a href={registerInfo.coscoSupplierSurveyAttachments[0].fileUrl} target="_blank" rel="noreferrer">{registerInfo.coscoSupplierSurveyAttachments[0].fileName}</a>
</Descriptions.Item>
</Descriptions>
<PeBaseInfoFormModal

View File

@ -107,7 +107,7 @@ const SupplierCategoryEntry: React.FC = () => {
<Select style={{ width: 150 }} placeholder="请选择准入方式" allowClear >
<Option value="online">线</Option>
<Option value="offline">线</Option>
<Option value="scattered">/</Option>
<Option value="scattered">//</Option>
</Select>
</Form.Item>
<Form.Item name="deptId" label="准入单位">

View File

@ -87,7 +87,7 @@ const SupplierCategoryEntryReview: React.FC = () => {
<Select style={{ width: 150 }} placeholder="请选择准入方式" allowClear >
<Option value="online">线</Option>
<Option value="offline">线</Option>
<Option value="scattered">/</Option>
<Option value="scattered">//</Option>
</Select>
</Form.Item>
<Form.Item name="deptId" label="准入单位">

View File

@ -9,6 +9,12 @@ interface Data {
coscoAccessSupplierList: coscoAccessSupplierLists[];
coscoAccessCategoryList: coscoAccessCategoryLists[];
coscoAccessUserls: coscoAccessUserl[];
coscoAccessWorkAttachments: coscoAccessWorkAttachments;
}
interface coscoAccessWorkAttachments {
fileName: string;
fileUrl: string;
}
interface coscoAccessUserl {
deptId: string;
@ -27,13 +33,15 @@ interface coscoAccessWorks {
startTime: string;
endTime: string;
reviewStatusText: string;
accessType: string;
accessDesc: string;
}
const ViewModal: React.FC<{
visible: boolean;
record?: string | null;
record?: any;
onCancel: () => void;
}> = ({ visible, record, onCancel }) => {
}> = ({ visible, record = {}, onCancel }) => {
//渲染数据
const [data, setData] = useState<Data | null>(null);
//初始化
@ -60,23 +68,44 @@ const ViewModal: React.FC<{
)
})}
</Descriptions.Item>
<Descriptions.Item label="申请准入品类">
{data.coscoAccessCategoryList.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.categoryName}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="评审开始时间">{data.coscoAccessWork.startTime}</Descriptions.Item>
<Descriptions.Item label="评审结束时间">{data.coscoAccessWork.endTime}</Descriptions.Item>
<Descriptions.Item label="评审专家">
{data.coscoAccessUserls.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.deptId} - {item.userId}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="审批结果">{data.coscoAccessWork.reviewStatusText}</Descriptions.Item>
{data.coscoAccessWork.accessType === 'scattered' && (
<>
<Descriptions.Item label="准入说明">{data.coscoAccessWork.accessDesc}</Descriptions.Item>
<Descriptions.Item label="附件">
<a href={data.coscoAccessWorkAttachments.fileUrl} target="_blank" rel="noreferrer">{data.coscoAccessWorkAttachments.fileName}</a>
</Descriptions.Item>
</>
)}
{data.coscoAccessWork.accessType === 'offline' && (
<Descriptions.Item label="供应商符合性审查">
<a href={data.coscoAccessWorkAttachments.fileUrl} target="_blank" rel="noreferrer">{data.coscoAccessWorkAttachments.fileName}</a>
</Descriptions.Item>
)}
{data.coscoAccessWork.accessType === 'online' && (
<>
<Descriptions.Item label="申请准入品类">
{data.coscoAccessCategoryList.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.categoryName}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="评审开始时间">{data.coscoAccessWork.startTime}</Descriptions.Item>
<Descriptions.Item label="评审结束时间">{data.coscoAccessWork.endTime}</Descriptions.Item>
<Descriptions.Item label="评审专家">
{data.coscoAccessUserls.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.deptId} - {item.userId}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="审批结果">{data.coscoAccessWork.reviewStatusText}</Descriptions.Item>
</>
)}
</Descriptions>
)}
</Modal>

View File

@ -23,24 +23,7 @@ interface ModalInfo {
visible: boolean;
record: string | null;
}
const statusColorMap: Record<string, string> = {
'未开始': 'default',
'进行中': 'processing',
'已完成': 'success',
};
const methodOptions = [
{ label: '全部', value: '' },
{ label: '线上准入', value: '线上准入' },
{ label: '线下准入', value: '线下准入' },
];
const statusOptions = [
{ label: '全部', value: '' },
{ label: '未开始', value: '未开始' },
{ label: '进行中', value: '进行中' },
{ label: '已完成', value: '已完成' },
];
const deptOptions = [
{ label: '全部', value: '' },
@ -142,22 +125,33 @@ const SupplierEntryReview: React.FC = () => {
title: '准入方式',
dataIndex: 'accessTypeText',
align: 'center',
ellipsis: true,
},
{
title: '准入品类',
dataIndex: 'categoryName',
dataIndex: 'categoryNameList',
align: 'center',
ellipsis: true,
render: (_: any, record: any) => {
return (
<>
{record.categoryNameList.map((item:string) => {
return <div>{`${item}`}</div>
})}
</>
)
},
},
{
title: '开始时间',
dataIndex: 'startTime',
align: 'center',
ellipsis: true,
},
{
title: '结束时间',
dataIndex: 'endTime',
align: 'center',
ellipsis: true,
},
{
title: '流程状态',
@ -173,7 +167,6 @@ const SupplierEntryReview: React.FC = () => {
title: '操作',
width: 120,
render: (_: any, record: any) => {
console.log(record, 'record');
return (
<Space>
<a onClick={() => openModal(record.id)}></a>
@ -195,7 +188,7 @@ const SupplierEntryReview: React.FC = () => {
<Select style={{ width: 150 }} placeholder="请选择准入方式" allowClear >
<Option value="online">线</Option>
<Option value="offline">线</Option>
<Option value="scattered">/</Option>
<Option value="scattered">//</Option>
</Select>
</Form.Item>
<Form.Item name="deptId" label="准入部门">

View File

@ -143,12 +143,14 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
accessType: string;
accessWorkName: string;
deptId: string;
accessDesc: string;
};
categoryIds: string[];
supplierIds: string[];
coscoAccessUserls: { userId: string; deptId: string; isLeader: number }[];
coscoAccessItems: { itemName: string; reviewBy: string[] }[];
coscoAccessWorkAttachments: any;
attachmentsType: any;
} = {
coscoAccessWork: {
startTime: '',
@ -156,12 +158,14 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
accessType: '',
accessWorkName: '',
deptId: '',
accessDesc: '',
},
categoryIds: [],
supplierIds: [],
coscoAccessUserls: [],
coscoAccessItems: [],
coscoAccessWorkAttachments: {},
attachmentsType: {},
};
//标题名称
@ -170,6 +174,8 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
finalPayload.coscoAccessWork.accessType = values.accessType;
//准入部门
finalPayload.coscoAccessWork.deptId = values.deptId;
// 准入说明
finalPayload.coscoAccessWork.accessDesc = values.accessDesc;
//品类选择
finalPayload.categoryIds = values.categoryIds;
//选择供应商
@ -200,7 +206,8 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
});
} else {
// 供应商符合性审查
finalPayload.coscoAccessWorkAttachments = values.supplierCompliance[0].response
finalPayload.coscoAccessWorkAttachments = values.supplierCompliance[0].response;
finalPayload.coscoAccessWorkAttachments.fileUrl = values.supplierCompliance[0].response.url;
}
const res = await add(finalPayload);
@ -278,7 +285,7 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
<Radio.Group onChange={onMethodChange} value={admissionMethod}>
<Radio value="online">线</Radio>
<Radio value="offline">线</Radio>
<Radio value="scattered">/</Radio>
<Radio value="scattered">//</Radio>
</Radio.Group>
</Form.Item>
@ -425,10 +432,54 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
</>
)}
{admissionMethod === 'scattered' && (
<>
<Form.Item
label="准入说明"
name="accessDesc"
rules={[{ required: true, message: '请输入准入说明' }]}
>
<Input.TextArea placeholder="请依照《集团供应商管理制度》填写准入说明" rows={2} maxLength={200} showCount />
</Form.Item>
<Form.Item
label="附件"
name="supplierCompliance"
valuePropName="fileList"
getValueFromEvent={e => (Array.isArray(e) ? e : e && e.fileList)}
>
<Upload
fileList={fileList}
customRequest={handleCustomRequest}
beforeUpload={(file) => {
if (fileList.length >= 1) {
message.error('只能上传一个文件');
return Upload.LIST_IGNORE;
}
return true; // 允许进入 customRequest
}}
onChange={({ fileList: newFileList }) => {
setFileList(newFileList);
form.setFieldsValue({ supplierCompliance: newFileList });
}}
onRemove={(file) => {
const newList = fileList.filter(item => item.uid !== file.uid);
setFileList(newList);
form.setFieldsValue({ supplierCompliance: newList });
}}
accept=".pdf,.doc,.docx" // 可选,限制文件类型
maxCount={1} // 只允许一个
>
<Button icon={<UploadOutlined />}></Button>
</Upload>
</Form.Item>
</>
)}
<Form.Item wrapperCol={{ offset: 6 }}>
<Button type="primary" htmlType="submit" style={{ marginRight: 8 }}>
{ admissionMethod === 'online'? '确认': admissionMethod === 'offline'? '提交审核':'提交' }
{admissionMethod === 'online' ? '确认' : admissionMethod === 'offline' ? '提交审核' : '提交'}
</Button>
<Button
onClick={() => {

View File

@ -9,6 +9,12 @@ interface Data {
coscoAccessSupplierList: coscoAccessSupplierLists[];
coscoAccessCategoryList: coscoAccessCategoryLists[];
coscoAccessUserls: coscoAccessUserl[];
coscoAccessWorkAttachments: coscoAccessWorkAttachments;
}
interface coscoAccessWorkAttachments {
fileName: string;
fileUrl: string;
}
interface coscoAccessUserl {
deptId: string;
@ -27,6 +33,8 @@ interface coscoAccessWorks {
startTime: string;
endTime: string;
reviewStatusText: string;
accessType: string;
accessDesc: string;
}
const ViewModal: React.FC<{
@ -60,23 +68,44 @@ const ViewModal: React.FC<{
)
})}
</Descriptions.Item>
<Descriptions.Item label="申请准入品类">
{data.coscoAccessCategoryList.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.categoryName}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="评审开始时间">{data.coscoAccessWork.startTime}</Descriptions.Item>
<Descriptions.Item label="评审结束时间">{data.coscoAccessWork.endTime}</Descriptions.Item>
<Descriptions.Item label="评审专家">
{data.coscoAccessUserls.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.deptId} - {item.userId}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="审批结果">{data.coscoAccessWork.reviewStatusText}</Descriptions.Item>
{data.coscoAccessWork.accessType === 'scattered' && (
<>
<Descriptions.Item label="准入说明">{data.coscoAccessWork.accessDesc}</Descriptions.Item>
<Descriptions.Item label="附件">
<a href={data.coscoAccessWorkAttachments.fileUrl} target="_blank" rel="noreferrer">{data.coscoAccessWorkAttachments.fileName}</a>
</Descriptions.Item>
</>
)}
{data.coscoAccessWork.accessType === 'offline' && (
<Descriptions.Item label="供应商符合性审查">
<a href={data.coscoAccessWorkAttachments.fileUrl} target="_blank" rel="noreferrer">{data.coscoAccessWorkAttachments.fileName}</a>
</Descriptions.Item>
)}
{data.coscoAccessWork.accessType === 'online' && (
<>
<Descriptions.Item label="申请准入品类">
{data.coscoAccessCategoryList.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.categoryName}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="评审开始时间">{data.coscoAccessWork.startTime}</Descriptions.Item>
<Descriptions.Item label="评审结束时间">{data.coscoAccessWork.endTime}</Descriptions.Item>
<Descriptions.Item label="评审专家">
{data.coscoAccessUserls.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.deptId} - {item.userId}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="审批结果">{data.coscoAccessWork.reviewStatusText}</Descriptions.Item>
</>
)}
</Descriptions>
)}
</Modal>

View File

@ -78,13 +78,14 @@ const AccessManagement: React.FC = () => {
{
title: '序号',
dataIndex: 'index',
width: 80,
render: (_: any, __: any, idx: number) => (((pagination.current ?? 1) - 1) * (pagination.pageSize ?? 10)) + idx + 1,
},
{ title: '准入工作', dataIndex: 'accessWorkName' },
{ title: '准入单位', dataIndex: 'deptId' },
{ title: '准入部门', dataIndex: 'deptId' },
{ title: '准入方式', dataIndex: 'accessTypeText' },
{ title: '申请时间', dataIndex: 'createTime' },
{ title: '准入工作', ellipsis: true, dataIndex: 'accessWorkName' },
{ title: '准入单位', ellipsis: true,dataIndex: 'deptId' },
{ title: '准入部门', ellipsis: true,dataIndex: 'deptId' },
{ title: '准入方式', ellipsis: true,dataIndex: 'accessTypeText' },
{ title: '申请时间', ellipsis: true,dataIndex: 'createTime' },
{ title: '状态', dataIndex: 'reviewStatusText' },
{
title: '操作',
@ -92,12 +93,12 @@ const AccessManagement: React.FC = () => {
render: (_: any, record: any) => (
<Space>
<a onClick={() => openModal('view', record)}></a>
{(record.reviewStatus === '3' && !record.approveStatusText) && (
{((record.reviewStatus === '3' && record.accessTypeText === 'online') && !record.approveStatusText) && (
<a onClick={() => handleApproval(record.id)}>
</a>
)}
{record.reviewStatus === '3' && (
{(record.reviewStatus === '3' && record.accessTypeText === 'online') && (
<>
<a onClick={() => openModal('result', record)}></a>
</>
@ -115,7 +116,7 @@ const AccessManagement: React.FC = () => {
<Select style={{ width: 150 }} placeholder="请选择准入方式" allowClear >
<Option value="online">线</Option>
<Option value="offline">线</Option>
<Option value="scattered">/</Option>
<Option value="scattered">//</Option>
</Select>
</Form.Item>
<Form.Item name="deptId" label="准入单位">
@ -137,7 +138,11 @@ const AccessManagement: React.FC = () => {
<Button type="primary" htmlType="submit"></Button>
</Form.Item>
<Form.Item>
<Button onClick={() => form.resetFields()}></Button>
<Button onClick={() => {
form.resetFields()
const values = form.getFieldsValue();
getList(values, 1, 10);
}}></Button>
</Form.Item>
</Form>
<div style={{ marginTop: 16, marginBottom: 16 }}>

View File

@ -9,6 +9,12 @@ interface Data {
coscoAccessSupplierList: coscoAccessSupplierLists[];
coscoAccessCategoryList: coscoAccessCategoryLists[];
coscoAccessUserls: coscoAccessUserl[];
coscoAccessWorkAttachments: coscoAccessWorkAttachments;
}
interface coscoAccessWorkAttachments {
fileName: string;
fileUrl: string;
}
interface coscoAccessUserl {
deptId: string;
@ -27,6 +33,8 @@ interface coscoAccessWorks {
startTime: string;
endTime: string;
reviewStatusText: string;
accessType: string;
accessDesc: string;
}
const ViewModal: React.FC<{
@ -60,23 +68,44 @@ const ViewModal: React.FC<{
)
})}
</Descriptions.Item>
<Descriptions.Item label="申请准入品类">
{data.coscoAccessCategoryList.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.categoryName}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="评审开始时间">{data.coscoAccessWork.startTime}</Descriptions.Item>
<Descriptions.Item label="评审结束时间">{data.coscoAccessWork.endTime}</Descriptions.Item>
<Descriptions.Item label="评审专家">
{data.coscoAccessUserls.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.deptId} - {item.userId}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="审批结果">{data.coscoAccessWork.reviewStatusText}</Descriptions.Item>
{data.coscoAccessWork.accessType === 'scattered' && (
<>
<Descriptions.Item label="准入说明">{data.coscoAccessWork.accessDesc}</Descriptions.Item>
<Descriptions.Item label="附件">
<a href={data.coscoAccessWorkAttachments.fileUrl} target="_blank" rel="noreferrer">{data.coscoAccessWorkAttachments.fileName}</a>
</Descriptions.Item>
</>
)}
{data.coscoAccessWork.accessType === 'offline' && (
<Descriptions.Item label="供应商符合性审查">
<a href={data.coscoAccessWorkAttachments.fileUrl} target="_blank" rel="noreferrer">{data.coscoAccessWorkAttachments.fileName}</a>
</Descriptions.Item>
)}
{data.coscoAccessWork.accessType === 'online' && (
<>
<Descriptions.Item label="申请准入品类">
{data.coscoAccessCategoryList.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.categoryName}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="评审开始时间">{data.coscoAccessWork.startTime}</Descriptions.Item>
<Descriptions.Item label="评审结束时间">{data.coscoAccessWork.endTime}</Descriptions.Item>
<Descriptions.Item label="评审专家">
{data.coscoAccessUserls.map((item) => {
return (
<div style={{ margin: '5px' }}>{item.deptId} - {item.userId}</div>
)
})}
</Descriptions.Item>
<Descriptions.Item label="审批结果">{data.coscoAccessWork.reviewStatusText}</Descriptions.Item>
</>
)}
</Descriptions>
)}
</Modal>

View File

@ -97,21 +97,33 @@ const CooperateEnterprise: React.FC = () => {
title: '发起单位',
dataIndex: 'deptId',
key: 'deptId',
ellipsis: true,
},
{
title: '准入部门',
dataIndex: 'deptId',
key: 'deptId',
ellipsis: true,
},
{
title: '品类',
dataIndex: 'categoryName',
key: 'categoryName',
title: '准入品类',
dataIndex: 'categoryNameList',
align: 'center',
render: (_: any, record: any) => {
return (
<>
{record.categoryNameList.map((item:string) => {
return <div>{`${item}`}</div>
})}
</>
)
},
},
{
title: '准入方式',
dataIndex: 'accessTypeText',
key: 'accessTypeText',
ellipsis: true,
},
{
title: '评审时间',