登录 个人 与 零星采购
This commit is contained in:
@ -278,6 +278,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.Group>
|
||||
</Form.Item>
|
||||
|
||||
@ -313,7 +314,7 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
|
||||
</Button>
|
||||
</Form.Item>
|
||||
|
||||
{admissionMethod !== 'online' && (
|
||||
{admissionMethod === 'offline' && (
|
||||
<>
|
||||
<Form.Item
|
||||
label="供应商符合性审查"
|
||||
@ -321,7 +322,7 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
|
||||
rules={[
|
||||
{
|
||||
validator: (_, value) => {
|
||||
if (admissionMethod === 'online') {
|
||||
if (admissionMethod === 'offline') {
|
||||
if (!value || value.length === 0) {
|
||||
return Promise.reject(new Error('请上传供应商符合性审查文件'));
|
||||
}
|
||||
@ -426,7 +427,8 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
|
||||
|
||||
<Form.Item wrapperCol={{ offset: 6 }}>
|
||||
<Button type="primary" htmlType="submit" style={{ marginRight: 8 }}>
|
||||
提交
|
||||
{ admissionMethod === 'online'? '确认': admissionMethod === 'offline'? '提交审核':'提交' }
|
||||
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
|
@ -1,10 +1,11 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Modal, Table, Button, Select, Spin, message } from 'antd';
|
||||
import { reviewInfoData } from '../services';
|
||||
import { Modal, Table, Button, Spin } from 'antd';
|
||||
import { reviewInfoData, groupByList } from '../services';
|
||||
import { connect } from 'umi';
|
||||
|
||||
interface ResultModalProps {
|
||||
visible: boolean;
|
||||
record?: { id?: string;[key: string]: any } | null;
|
||||
record?: { id?: string; [key: string]: any } | null;
|
||||
onCancel: () => void;
|
||||
dispatch: any;
|
||||
}
|
||||
@ -15,7 +16,7 @@ const RemarkViewModal: React.FC<{
|
||||
onCancel: () => void;
|
||||
remark: string;
|
||||
file?: any;
|
||||
}> = ({ visible, onCancel, remark, file, }) => (
|
||||
}> = ({ visible, onCancel, remark, file }) => (
|
||||
<Modal
|
||||
visible={visible}
|
||||
title="备注信息"
|
||||
@ -49,31 +50,59 @@ const ResultModal: React.FC<ResultModalProps> = ({
|
||||
const [suppliers, setSuppliers] = useState<any[]>([]);
|
||||
const [items, setItems] = useState<any[]>([]);
|
||||
const [groupSummaryResult, setGroupSummaryResult] = useState<{ [k: string]: '0' | '1' | undefined }>({});
|
||||
// 查看备注弹窗
|
||||
const [remarkModal, setRemarkModal] = useState({ open: false, remark: '', file: undefined as any });
|
||||
|
||||
// 拉取数据
|
||||
useEffect(() => {
|
||||
if (visible && record?.id) {
|
||||
setLoading(true);
|
||||
reviewInfoData({ id: record.id })
|
||||
.then((res: any) => {
|
||||
const supplierList = res?.data || [];
|
||||
setSuppliers(supplierList);
|
||||
// 所有项,取第一家公司
|
||||
const allItems = (supplierList[0]?.coscoAccessItemList || []);
|
||||
// 非summary项
|
||||
setItems(allItems.filter((item: any) => item.itemType !== 'summary'));
|
||||
// summary 行初始化
|
||||
const summaryMap: { [k: string]: '0' | '1' | undefined } = {};
|
||||
supplierList.forEach((sup: any) => {
|
||||
// summary 行
|
||||
const summaryItem = (sup.coscoAccessItemList || []).find((i: any) => i.itemType === 'summary');
|
||||
console.log(summaryItem, 'summaryItem');
|
||||
summaryMap[sup.supplierId] = summaryItem.coscoAccessUserItemList[0]?.reviewResult;
|
||||
// 拉取评审项(groupByList)+供应商+评审数据(reviewInfoData)
|
||||
Promise.all([
|
||||
groupByList({ accessWorkId: record.id }),
|
||||
reviewInfoData({ id: record.id })
|
||||
]).then(([groupRes, reviewRes]: any) => {
|
||||
// 评审项(按接口数据确定字段,兼容你的接口:itemType !== 'summary')
|
||||
const allItems = (groupRes?.data || []).filter((it: any) => it.itemType !== 'summary');
|
||||
setItems(allItems);
|
||||
|
||||
// 供应商及评审数据
|
||||
const supplierList = reviewRes?.data || [];
|
||||
// 为每个 supplier 构造 coscoAccessItemList(根据 groupByList 的 items + supplier.coscoAccessUserItemList 拼装),这样 columns 渲染就不依赖接口中的 coscoAccessItemList
|
||||
supplierList.forEach((sup: any) => {
|
||||
// 按 itemName+itemType 拆分(兼容后续render逻辑)
|
||||
const itemList = allItems.map((item: any) => {
|
||||
// 找所有该供应商的userItem(同一itemName, itemType)
|
||||
const userItems = (sup.coscoAccessUserItemList || []).filter(
|
||||
(u: any) => u.itemName === item.itemName && u.itemType === item.itemType
|
||||
);
|
||||
return {
|
||||
...item,
|
||||
coscoAccessUserItemList: userItems
|
||||
}
|
||||
});
|
||||
setGroupSummaryResult(summaryMap);
|
||||
})
|
||||
.finally(() => setLoading(false));
|
||||
// summary 行
|
||||
const summaryItems = (sup.coscoAccessUserItemList || []).filter(
|
||||
(u: any) => u.itemType === 'summary'
|
||||
);
|
||||
if (summaryItems.length) {
|
||||
itemList.push({
|
||||
itemName: summaryItems[0].itemName,
|
||||
itemType: 'summary',
|
||||
coscoAccessUserItemList: summaryItems
|
||||
});
|
||||
}
|
||||
sup.coscoAccessItemList = itemList;
|
||||
});
|
||||
setSuppliers(supplierList);
|
||||
|
||||
// 汇总行初始化
|
||||
const summaryMap: { [k: string]: '0' | '1' | undefined } = {};
|
||||
supplierList.forEach((sup: any) => {
|
||||
const summaryItem = (sup.coscoAccessItemList || []).find((i: any) => i.itemType === 'summary');
|
||||
summaryMap[sup.supplierId] = summaryItem?.coscoAccessUserItemList?.[0]?.reviewResult;
|
||||
});
|
||||
setGroupSummaryResult(summaryMap);
|
||||
}).finally(() => setLoading(false));
|
||||
} else if (!visible) {
|
||||
setSuppliers([]);
|
||||
setItems([]);
|
||||
@ -81,8 +110,6 @@ const ResultModal: React.FC<ResultModalProps> = ({
|
||||
}
|
||||
}, [visible, record]);
|
||||
|
||||
|
||||
|
||||
// 构造二级表头
|
||||
const columns: any[] = [
|
||||
{
|
||||
@ -103,7 +130,6 @@ const ResultModal: React.FC<ResultModalProps> = ({
|
||||
}
|
||||
});
|
||||
const reviewers = Array.from(reviewerSet);
|
||||
console.log(sup, 'sup');
|
||||
|
||||
return {
|
||||
title: (
|
||||
@ -130,7 +156,9 @@ const ResultModal: React.FC<ResultModalProps> = ({
|
||||
align: 'center',
|
||||
render: (_: any, row: any) => {
|
||||
// 在sup.coscoAccessItemList里找该itemName下该人员
|
||||
const item = (sup.coscoAccessItemList || []).find((it: any) => it.itemName === row.itemName && it.itemType !== 'summary');
|
||||
const item = (sup.coscoAccessItemList || []).find(
|
||||
(it: any) => it.itemName === row.itemName && it.itemType !== 'summary'
|
||||
);
|
||||
if (!item) return null;
|
||||
const userItem = (item.coscoAccessUserItemList || []).find((u: any) => u.reviewBy === reviewBy);
|
||||
if (!userItem) return null;
|
||||
@ -181,7 +209,12 @@ const ResultModal: React.FC<ResultModalProps> = ({
|
||||
// summary 行
|
||||
const summaryRow = (
|
||||
<Table.Summary.Row>
|
||||
<Table.Summary.Cell index={-1}>结果汇总</Table.Summary.Cell>
|
||||
<Table.Summary.Cell
|
||||
index={-1}
|
||||
className="summary-sticky-cell"
|
||||
>
|
||||
结果汇总
|
||||
</Table.Summary.Cell>
|
||||
{suppliers.map((sup, index) => {
|
||||
// 统计reviewer个数
|
||||
const reviewerSet = new Set<string>();
|
||||
@ -193,10 +226,11 @@ const ResultModal: React.FC<ResultModalProps> = ({
|
||||
}
|
||||
});
|
||||
const colSpan = reviewerSet.size || 1;
|
||||
|
||||
return (
|
||||
<Table.Summary.Cell index={index} key={sup.supplierId} colSpan={colSpan} align="center">
|
||||
<span style={{ color: groupSummaryResult[sup.supplierId] === '0' ? '#52c41a' : '#f5222d' }}> {groupSummaryResult[sup.supplierId] === '0' ? '合格' : '不合格'}</span>
|
||||
<span style={{ color: groupSummaryResult[sup.supplierId] === '0' ? '#52c41a' : '#f5222d' }}>
|
||||
{groupSummaryResult[sup.supplierId] === '0' ? '合格' : '不合格'}
|
||||
</span>
|
||||
</Table.Summary.Cell>
|
||||
)
|
||||
})}
|
||||
|
Reference in New Issue
Block a user