Merge branch '20221026-公开比选(多阶段、一阶段)初审汇总环节,供应商不足三家增加是否继续详审' into 'release_20230317'
3.17 公开比选(多阶段、一阶段)初审汇总环节,供应商不足三家增加是否继续详审 See merge request eshop/fe_service_ebtp_frontend!188
This commit is contained in:
@ -755,7 +755,6 @@ const Index: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
//处理汇总表返回的数据
|
//处理汇总表返回的数据
|
||||||
const getRemarkList = (data: any) => {
|
const getRemarkList = (data: any) => {
|
||||||
console.log('data', data);
|
|
||||||
const List: any[] = []
|
const List: any[] = []
|
||||||
for (const item of totalSupplierColumns) {
|
for (const item of totalSupplierColumns) {
|
||||||
const obj = data[data.length - 1][item?.supplierRegisterId]
|
const obj = data[data.length - 1][item?.supplierRegisterId]
|
||||||
@ -904,13 +903,12 @@ const Index: React.FC<{}> = () => {
|
|||||||
})
|
})
|
||||||
}, [count]);
|
}, [count]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 风控中心校验
|
* 风控中心校验
|
||||||
* @param params
|
|
||||||
*/
|
*/
|
||||||
const verificationRiskControl = () => {
|
const verificationRiskControl = () => {
|
||||||
const remarkList = getRemarkList(ref.current);
|
const remarkList = getRemarkList(ref.current);
|
||||||
console.log(remarkList);
|
if (remarkList) {
|
||||||
let submitData = {
|
let submitData = {
|
||||||
reviewStatus: '2',
|
reviewStatus: '2',
|
||||||
reviewTurnId: getURLInformation("turnId"),
|
reviewTurnId: getURLInformation("turnId"),
|
||||||
@ -927,7 +925,8 @@ const Index: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
@ -1,13 +1,30 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { Table } from 'antd';
|
import { Form, Input, Radio, Table } from 'antd';
|
||||||
import '@/assets/ld_style.less';
|
import '@/assets/ld_style.less';
|
||||||
import { getJuryDetailScoreData, getJuryList } from '../service';
|
import { checkShowData, getJuryDetailScoreData, getJuryList } from '../service';
|
||||||
import { getURLInformation } from '@/utils/CommonUtils';
|
import { getURLInformation } from '@/utils/CommonUtils';
|
||||||
import { getRoomId } from '@/utils/session';
|
import { getRoomId } from '@/utils/session';
|
||||||
|
import ExtendUpload from '@/utils/ExtendUpload';
|
||||||
|
|
||||||
|
const layout = {
|
||||||
|
labelCol: { span: 2 },
|
||||||
|
wrapperCol: { span: 16 },
|
||||||
|
};
|
||||||
|
const validateMessages = {
|
||||||
|
required: '请填写${label}',
|
||||||
|
};
|
||||||
|
|
||||||
const DetailedSummary: React.FC<{}> = () => {
|
const DetailedSummary: React.FC<{}> = () => {
|
||||||
//存储表
|
//存储表
|
||||||
const [scheduleTable, setScheduleTable] = useState<any>();
|
const [scheduleTable, setScheduleTable] = useState<any>();
|
||||||
|
//单选数值存储
|
||||||
|
const [radioValue, setRadioValue] = useState<number>(1);
|
||||||
|
//是否显示合格供应商不足三家
|
||||||
|
const [isShowFoot, setIsShowFoot] = useState<boolean>(false);
|
||||||
|
//说明文件fileId
|
||||||
|
const [fileId, setFileId] = useState<string>('');
|
||||||
|
const { TextArea } = Input;
|
||||||
|
const [form] = Form.useForm();
|
||||||
//初始化表
|
//初始化表
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
//全部参数
|
//全部参数
|
||||||
@ -21,12 +38,12 @@ const DetailedSummary: React.FC<{}> = () => {
|
|||||||
//获取评委
|
//获取评委
|
||||||
getJuryList(juryParams).then((res) => {
|
getJuryList(juryParams).then((res) => {
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
|
|
||||||
//获取汇总表数据
|
//获取汇总表数据
|
||||||
getJuryDetailScoreData(juryDataParams).then((response) => {
|
getJuryDetailScoreData(juryDataParams).then((response) => {
|
||||||
if (response.code == 200) {
|
if (response.code == 200) {
|
||||||
//调用数据处理方法并初始化表格
|
//调用数据处理方法并初始化表格
|
||||||
InitializeTable(res.data, response.data);
|
InitializeTable(res.data, response.data);
|
||||||
|
getFooterData();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -46,7 +63,7 @@ const DetailedSummary: React.FC<{}> = () => {
|
|||||||
inner.scoreMap[key] = inner.scoreMap[key] == undefined ? "-" : inner.scoreMap[key].score
|
inner.scoreMap[key] = inner.scoreMap[key] == undefined ? "-" : inner.scoreMap[key].score
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Object.assign(inner,inner.scoreMap)
|
Object.assign(inner, inner.scoreMap)
|
||||||
totalData.push(inner)
|
totalData.push(inner)
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -83,17 +100,62 @@ const DetailedSummary: React.FC<{}> = () => {
|
|||||||
title: ele.name,
|
title: ele.name,
|
||||||
dataIndex: ele.userId,
|
dataIndex: ele.userId,
|
||||||
key: ele.userId,
|
key: ele.userId,
|
||||||
render:(value: any,record: any,index: any) => {
|
render: (value: any, record: any, index: any) => {
|
||||||
return value == undefined ? "-" : value
|
return value == undefined ? "-" : value
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
setScheduleTable(
|
setScheduleTable(
|
||||||
// <div className="bidContent" key="1">
|
// <div className="bidContent" key="1">
|
||||||
<Table bordered pagination={false} columns={tcolumns} dataSource={totalData} key="1"/>
|
<Table bordered pagination={false} columns={tcolumns} dataSource={totalData} key="1" />
|
||||||
// </div>,
|
// </div>,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
return <>{scheduleTable}</>;
|
|
||||||
|
//radio单选onChange方法
|
||||||
|
const radioOnChange = (e: any) => {
|
||||||
|
setRadioValue(e.target.value);
|
||||||
|
};
|
||||||
|
//获取不满足三家数据
|
||||||
|
const getFooterData = () => {
|
||||||
|
checkShowData(getRoomId()).then(response => {
|
||||||
|
if (response?.code == 200) {
|
||||||
|
if (response?.data == undefined) { } else {
|
||||||
|
setIsShowFoot(true)
|
||||||
|
setRadioValue(response.data?.continueStatus)
|
||||||
|
if (response.data?.continueStatus == 1) {
|
||||||
|
setFileId(response.data?.fileId)
|
||||||
|
form.setFieldsValue({
|
||||||
|
remarks: response.data?.remarks
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{scheduleTable}
|
||||||
|
{isShowFoot ? (
|
||||||
|
<div>
|
||||||
|
<div style={{ margin: '8px 0px' }}>
|
||||||
|
<span style={{ color: '#b30000' }}>合格供应商不足三家,是否继续进行详审:</span>
|
||||||
|
<Radio.Group onChange={radioOnChange} value={radioValue} disabled>
|
||||||
|
<Radio value={1}>是,继续进行</Radio>
|
||||||
|
<Radio value={0}>否,终止评审</Radio>
|
||||||
|
</Radio.Group>
|
||||||
|
</div>
|
||||||
|
<Form {...layout} form={form} name="control-hooks" validateMessages={validateMessages}>
|
||||||
|
<Form.Item name="remarks" label="说明" hidden={radioValue == 0}>
|
||||||
|
<TextArea maxLength={500} readOnly bordered={false} style={{ resize: 'none' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item name="fileId" label="说明文件" hidden={radioValue == 0}>
|
||||||
|
<ExtendUpload bid={fileId} uploadProps={{ disabled: true }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Form>
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
</>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
export default DetailedSummary;
|
export default DetailedSummary;
|
||||||
|
@ -116,3 +116,13 @@ export async function getRoomDataById(params: any) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初审汇总表-提交汇总后回显少于三家判断数据
|
||||||
|
* @param params
|
||||||
|
*/
|
||||||
|
export async function checkShowData(params: any) {
|
||||||
|
return request(`/api/biz-service-ebtp-rsms/v1/bid/early/warn/room/${params}`, {
|
||||||
|
method: 'GET'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { useEffect, useImperativeHandle, useRef, useState } from 'react';
|
import React, { useEffect, useImperativeHandle, useRef, useState } from 'react';
|
||||||
import '@/assets/ld_style.less';
|
import '@/assets/ld_style.less';
|
||||||
import { getJuryDetailScoreData, getJuryList } from '../service';
|
import { getJuryDetailScoreData, getJuryList, isCheckShow } from '../service';
|
||||||
import { getURLInformation } from '@/utils/CommonUtils';
|
import { getURLInformation } from '@/utils/CommonUtils';
|
||||||
import { getRoomId } from '@/utils/session';
|
import { getRoomId } from '@/utils/session';
|
||||||
import ProTable, { ActionType } from '@ant-design/pro-table';
|
import ProTable, { ActionType } from '@ant-design/pro-table';
|
||||||
@ -11,6 +11,7 @@ interface BidDetailSummaryProps {
|
|||||||
reload: any;//重新加载
|
reload: any;//重新加载
|
||||||
readOnly: boolean;//是否查看状态 true-是 false-否
|
readOnly: boolean;//是否查看状态 true-是 false-否
|
||||||
summaryRef: React.MutableRefObject<Array<{}> | undefined>//ref传入
|
summaryRef: React.MutableRefObject<Array<{}> | undefined>//ref传入
|
||||||
|
onSubmit: (value: any) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
//是否通过详审options
|
//是否通过详审options
|
||||||
@ -20,15 +21,18 @@ const selectOptions = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
const BidDetailSummary: React.FC<BidDetailSummaryProps> = (props) => {
|
const BidDetailSummary: React.FC<BidDetailSummaryProps> = (props) => {
|
||||||
const { reload, readOnly, summaryRef } = props
|
const { reload, readOnly, summaryRef, onSubmit } = props
|
||||||
//存储表
|
//存储表
|
||||||
const [scheduleTable, setScheduleTable] = useState<boolean>(false);
|
const [scheduleTable, setScheduleTable] = useState<boolean>(false);
|
||||||
//表格columns存储
|
//表格columns存储
|
||||||
const [tableColumns, setTableColumns] = useState<any[]>([]);
|
const [tableColumns, setTableColumns] = useState<any[]>([]);
|
||||||
//表格dataSource存储
|
//表格dataSource存储
|
||||||
const [tableDataSource, setTableDataSource] = useState<any[]>([]);
|
const [tableDataSource, setTableDataSource] = useState<any[]>([]);
|
||||||
|
const tableDataRef = useRef<any[]>([]);
|
||||||
|
tableDataRef.current = tableDataSource;
|
||||||
//表格接口ref
|
//表格接口ref
|
||||||
const actionRef = useRef<ActionType>();
|
const actionRef = useRef<ActionType>();
|
||||||
|
const isShowRef = useRef<boolean>(false);
|
||||||
|
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
|
|
||||||
@ -55,8 +59,26 @@ const BidDetailSummary: React.FC<BidDetailSummaryProps> = (props) => {
|
|||||||
//获取初审汇总表数据
|
//获取初审汇总表数据
|
||||||
getJuryDetailScoreData(juryDataParams).then((response) => {
|
getJuryDetailScoreData(juryDataParams).then((response) => {
|
||||||
if (response.code == 200) {
|
if (response.code == 200) {
|
||||||
|
const data = response?.data;
|
||||||
|
//判断采购方式是否符合
|
||||||
|
isCheckShow(juryDataParams.assessRoomId).then((_res) => {
|
||||||
|
if (_res.code == 200) {
|
||||||
|
isShowRef.current = _res.data;
|
||||||
|
let count = 0;
|
||||||
|
data.forEach((ele: any) => {
|
||||||
|
if (ele.qualifiedStatus == '1' || ele.qualifiedStatus == null) {
|
||||||
|
count = count + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (count < 3 && _res.data == true) {
|
||||||
|
onSubmit(true)
|
||||||
|
} else {
|
||||||
|
onSubmit(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
//调用数据处理方法并初始化表格
|
//调用数据处理方法并初始化表格
|
||||||
InitializeTable(res.data, response.data);
|
InitializeTable(res.data, data);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -119,8 +141,26 @@ const BidDetailSummary: React.FC<BidDetailSummaryProps> = (props) => {
|
|||||||
<Select
|
<Select
|
||||||
options={selectOptions}
|
options={selectOptions}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
record.qualifiedStatus = e
|
record.qualifiedStatus = e;
|
||||||
|
tableDataRef.current.forEach(ele => {
|
||||||
|
if (ele.supplierRegisterId == record.supplierRegisterId) {
|
||||||
|
ele.qualifiedStatus = e;
|
||||||
|
}
|
||||||
|
})
|
||||||
actionRef.current?.reloadAndRest?.();
|
actionRef.current?.reloadAndRest?.();
|
||||||
|
if (isShowRef.current) {
|
||||||
|
let count = 0;
|
||||||
|
tableDataRef.current.forEach((ele: any) => {
|
||||||
|
if (ele.qualifiedStatus == '1' || ele.qualifiedStatus == null) {
|
||||||
|
count = count + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (count < 3) {
|
||||||
|
onSubmit(true)
|
||||||
|
} else {
|
||||||
|
onSubmit(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
defaultValue={_}
|
defaultValue={_}
|
||||||
/>
|
/>
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useEffect, useRef, useState } from 'react';
|
||||||
import { Button, Table, Tabs, Space, Progress, Radio, Input, Checkbox, Select, Modal, Menu, Pagination, Spin, Form, message, Collapse, Upload, Tooltip } from 'antd';
|
import { Button, Table, Tabs, Space, Progress, Radio, Input, Checkbox, Select, Modal, Menu, Pagination, Spin, Form, message, Collapse, Upload, Tooltip } from 'antd';
|
||||||
import { getTabList, getProgress, getScoreDetail, getRegister, submitDetail, updateJudgesStatus, getMemberInfo, getEval, getUnlock, getCheckData, isStatus, getFile } from './service';
|
import { getTabList, getProgress, getScoreDetail, getRegister, submitDetail, updateJudgesStatus, getMemberInfo, getEval, getUnlock, getCheckData, isStatus, getFile, submitSummary, checkShowData, beforeRiskControl } from './service';
|
||||||
import '@/assets/ld_style.less'
|
import '@/assets/ld_style.less'
|
||||||
import FirstTrialTableLimitedQuantity from '../BidNumberManager/module/FirstTrialTableLimitedQuantity';
|
import FirstTrialTableLimitedQuantity from '../BidNumberManager/module/FirstTrialTableLimitedQuantity';
|
||||||
import { getExperts } from '../BidDetailedManager/service';
|
import { getExperts } from '../BidDetailedManager/service';
|
||||||
import ConsistencyCheck from './components/ConsistencyCheck';
|
import ConsistencyCheck from './components/ConsistencyCheck';
|
||||||
import BidDetailSummary from './components/BidDetailSummary';
|
import BidDetailSummary from './components/BidDetailSummary';
|
||||||
import BidDetailSpeed from './components/BidDetailSpeed';
|
import BidDetailSpeed from './components/BidDetailSpeed';
|
||||||
import { handleSubmit } from './utils';
|
|
||||||
import { getRoomId, getSessionUserData, getUserToken } from '@/utils/session';
|
import { getRoomId, getSessionUserData, getUserToken } from '@/utils/session';
|
||||||
import FileDown from '@/utils/Download';
|
import FileDown from '@/utils/Download';
|
||||||
import { getURLInformation, isEmpty } from '@/utils/CommonUtils';
|
import { getURLInformation, isEmpty } from '@/utils/CommonUtils';
|
||||||
import { btnAuthority } from '@/utils/authority';
|
import { btnAuthority } from '@/utils/authority';
|
||||||
|
import ExtendUpload from '@/utils/ExtendUpload';
|
||||||
|
import RiskPreventionSoft from '@/utils/RiskPreventionSoft';
|
||||||
|
|
||||||
const { TabPane } = Tabs;
|
const { TabPane } = Tabs;
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
@ -22,13 +23,19 @@ const { Panel } = Collapse;
|
|||||||
let assessRoomId: any, reviewTurnId: any, reviewType: any, bidEvalId: any, reviewStatus: any
|
let assessRoomId: any, reviewTurnId: any, reviewType: any, bidEvalId: any, reviewStatus: any
|
||||||
let bidEvalDetailDTOList: any = [];
|
let bidEvalDetailDTOList: any = [];
|
||||||
let totalQualified: any = [];
|
let totalQualified: any = [];
|
||||||
|
const layout = {
|
||||||
|
labelCol: { span: 2 },
|
||||||
|
wrapperCol: { span: 16 },
|
||||||
|
};
|
||||||
|
const validateMessages = {
|
||||||
|
required: '请填写${label}',
|
||||||
|
};
|
||||||
|
|
||||||
const Index: React.FC<{}> = () => {
|
const Index: React.FC<{}> = () => {
|
||||||
const [plainList, setPlainList] = useState([]); // 评审解锁专家
|
const [plainList, setPlainList] = useState([]); // 评审解锁专家
|
||||||
const [bidDetailVisible, setBidDetailVisible] = useState<boolean>(false); // 初审(有限数量制)详情
|
const [bidDetailVisible, setBidDetailVisible] = useState<boolean>(false); // 初审(有限数量制)详情
|
||||||
const [lockVisible, setLockVisible] = useState<boolean>(false); // 初审(有限数量制)记录表-解锁
|
const [lockVisible, setLockVisible] = useState<boolean>(false); // 初审(有限数量制)记录表-解锁
|
||||||
const [tabList, setTabList] = useState<any>([]); // tab
|
const [tabList, setTabList] = useState<any>([]); // tab
|
||||||
const [typeId, setTypeId] = useState<any>(); // tabId
|
|
||||||
const [typeCategory, setTypeCategory] = useState<any>(); // tab类型
|
const [typeCategory, setTypeCategory] = useState<any>(); // tab类型
|
||||||
const [process, setProcess] = useState<any>(); // 我的进度
|
const [process, setProcess] = useState<any>(); // 我的进度
|
||||||
const [totalSupplier, setTotalSupplier] = useState<any>([]); // 总供应商列头
|
const [totalSupplier, setTotalSupplier] = useState<any>([]); // 总供应商列头
|
||||||
@ -46,9 +53,13 @@ const Index: React.FC<{}> = () => {
|
|||||||
const [checkData, setCheckData] = useState<any>([]); // 一致性检查数据
|
const [checkData, setCheckData] = useState<any>([]); // 一致性检查数据
|
||||||
const [checkVisible, setCheckVisible] = useState<boolean>(false); // 一致性检查显隐
|
const [checkVisible, setCheckVisible] = useState<boolean>(false); // 一致性检查显隐
|
||||||
const [tableDisplay, setTableDisplay] = useState<boolean>(false); // 汇总表进度和汇总表显示
|
const [tableDisplay, setTableDisplay] = useState<boolean>(false); // 汇总表进度和汇总表显示
|
||||||
const [submitStatus, setSubmitStatus] = useState<boolean>(false); // 当前页面评审汇总显隐
|
// const [submitStatus, setSubmitStatus] = useState<boolean>(false); // 当前页面评审汇总显隐
|
||||||
const [dateLength, setDateLength] = useState<any>([]); // tab签长度
|
const [dateLength, setDateLength] = useState<any>([]); // tab签长度
|
||||||
const [submitLoading, setSubmitLoading] = useState<boolean>(false); // 提交汇总loading
|
const [submitLoading, setSubmitLoading] = useState<boolean>(false); // 提交汇总loading
|
||||||
|
const [uploadId, setUploadId] = useState<any>();//上传文件id存储
|
||||||
|
const [radioValue, setRadioValue] = useState<number>();//单选数值存储
|
||||||
|
const [isShowFoot, setIsShowFoot] = useState<boolean>(false);//是否显示合格供应商不足三家
|
||||||
|
const [form] = Form.useForm();//动态获取表单
|
||||||
|
|
||||||
//获取数据的参数
|
//获取数据的参数
|
||||||
const [findScoreRecordData, setFindScoreRecordData] = useState<any>();
|
const [findScoreRecordData, setFindScoreRecordData] = useState<any>();
|
||||||
@ -56,6 +67,10 @@ const Index: React.FC<{}> = () => {
|
|||||||
const [allFirstTrialTableData, setAllFirstTrialTableData] = useState<any>(null);
|
const [allFirstTrialTableData, setAllFirstTrialTableData] = useState<any>(null);
|
||||||
//用于显示初审(有限数量制)表数据
|
//用于显示初审(有限数量制)表数据
|
||||||
const [preliminaryDetails, setPreliminaryDetails] = useState<any>();
|
const [preliminaryDetails, setPreliminaryDetails] = useState<any>();
|
||||||
|
//风控弹窗 2022.10.27 zhoujianlong
|
||||||
|
const [riskVisible, setRiskVisible] = useState<boolean>(false);
|
||||||
|
//风控数据 2022.10.27 zhoujianlong
|
||||||
|
const [riskData, setRiskData] = useState<any[]>([]);
|
||||||
//评审室id
|
//评审室id
|
||||||
const roomId = getRoomId();
|
const roomId = getRoomId();
|
||||||
const [count, setCount] = useState<any>(0);
|
const [count, setCount] = useState<any>(0);
|
||||||
@ -932,6 +947,31 @@ const Index: React.FC<{}> = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 风控中心校验
|
||||||
|
*/
|
||||||
|
const verificationRiskControl = () => {
|
||||||
|
const remarkList = getRemarkList(ref.current);
|
||||||
|
if (remarkList) {
|
||||||
|
let submitData = {
|
||||||
|
reviewStatus: '2',
|
||||||
|
reviewTurnId: getURLInformation("turnId"),
|
||||||
|
reviewType: '1',
|
||||||
|
remarkList: remarkList,
|
||||||
|
}
|
||||||
|
beforeRiskControl(submitData).then(res => {
|
||||||
|
if (res?.code == 200) {
|
||||||
|
if (res?.data.length > 0) {
|
||||||
|
setRiskData(res?.data);
|
||||||
|
setRiskVisible(true);
|
||||||
|
} else {
|
||||||
|
submitClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const submitClick = async () => {
|
const submitClick = async () => {
|
||||||
let juryData = {
|
let juryData = {
|
||||||
reviewTurnId: getURLInformation("turnId"),
|
reviewTurnId: getURLInformation("turnId"),
|
||||||
@ -978,6 +1018,9 @@ const Index: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const finalSubmit = async () => {
|
const finalSubmit = async () => {
|
||||||
|
if (isShowFoot == true) {
|
||||||
|
form.submit();
|
||||||
|
} else {
|
||||||
const remarkList = getRemarkList(ref.current);
|
const remarkList = getRemarkList(ref.current);
|
||||||
if (remarkList) {
|
if (remarkList) {
|
||||||
let submitData = {
|
let submitData = {
|
||||||
@ -986,10 +1029,7 @@ const Index: React.FC<{}> = () => {
|
|||||||
reviewType: '1',
|
reviewType: '1',
|
||||||
remarkList: remarkList,
|
remarkList: remarkList,
|
||||||
}
|
}
|
||||||
const success = await handleSubmit(submitData)
|
await toSubmit(submitData)
|
||||||
if (success) {
|
|
||||||
setCount(count + 1)
|
|
||||||
setCheckVisible(false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1032,6 +1072,45 @@ const Index: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
//radio单选onChange方法
|
||||||
|
const radioOnChange = (e: any) => {
|
||||||
|
setRadioValue(e.target.value);
|
||||||
|
};
|
||||||
|
//表单提交
|
||||||
|
const onFinish = async (values: any) => {
|
||||||
|
let data = {
|
||||||
|
continueStatus: radioValue
|
||||||
|
}
|
||||||
|
if (radioValue == 1) {
|
||||||
|
data["remarks"] = values.remarks
|
||||||
|
data["fileId"] = values.fileId
|
||||||
|
}
|
||||||
|
const remarkList = getRemarkList(ref.current)
|
||||||
|
if (remarkList) {
|
||||||
|
let submitData = {
|
||||||
|
reviewStatus: '2',
|
||||||
|
reviewTurnId: getURLInformation("turnId"),
|
||||||
|
reviewType: '1',
|
||||||
|
earlyWarn: { ...data },
|
||||||
|
remarkList: remarkList,
|
||||||
|
}
|
||||||
|
await toSubmit(submitData)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const toSubmit = async (params: any) => {
|
||||||
|
setSubmitLoading(true)
|
||||||
|
setSpinVisible(true)
|
||||||
|
await submitSummary(params).then(res => { //提交汇总方法
|
||||||
|
if (res?.code == 200) {
|
||||||
|
message.success('提交成功');
|
||||||
|
setCount(count + 1)
|
||||||
|
}
|
||||||
|
}).finally(() => {
|
||||||
|
setSubmitLoading(false)
|
||||||
|
setCheckVisible(false);
|
||||||
|
setSpinVisible(false)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
bidEvalDetailDTOList = []
|
bidEvalDetailDTOList = []
|
||||||
@ -1055,9 +1134,19 @@ const Index: React.FC<{}> = () => {
|
|||||||
createBy: 101
|
createBy: 101
|
||||||
}
|
}
|
||||||
//初始化汇总表显示状态
|
//初始化汇总表显示状态
|
||||||
isStatus(statusProps).then(res => {
|
isStatus(statusProps).then(async res => {
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
setTableDisplay(res.data)
|
setTableDisplay(res.data);
|
||||||
|
//初始化三家供应商判断数据
|
||||||
|
await checkShowData(assessRoomId).then(response => {
|
||||||
|
if (response?.code == 200) {
|
||||||
|
setUploadId(response?.data?.fileId)
|
||||||
|
setRadioValue(response?.data?.continueStatus == undefined ? 1 : response?.data?.continueStatus)
|
||||||
|
form.setFieldsValue({
|
||||||
|
remarks: response.data?.remarks
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -1088,10 +1177,10 @@ const Index: React.FC<{}> = () => {
|
|||||||
if (item.name == '评审汇总') {
|
if (item.name == '评审汇总') {
|
||||||
return (
|
return (
|
||||||
<TabPane tab={item.name} key={index}>
|
<TabPane tab={item.name} key={index}>
|
||||||
{reviewStatus == 2 || reviewStatus == 3 || submitStatus ? null : (
|
{reviewStatus == 2 || reviewStatus == 3 ? null : (
|
||||||
<div>
|
<div>
|
||||||
{tableDisplay == true ? (
|
{tableDisplay == true ? (
|
||||||
<Button hidden={btnAuthority(['ebtp-expert'])} type="primary" size="small" className="fr ml10 mb10" onClick={submitClick} loading={submitLoading}>提交汇总</Button>
|
<Button hidden={btnAuthority(['ebtp-expert'])} type="primary" size="small" className="fr ml10 mb10" onClick={verificationRiskControl} loading={submitLoading}>提交汇总</Button>
|
||||||
) : null}
|
) : null}
|
||||||
<Button hidden={btnAuthority(['ebtp-expert'])} onClick={getLock} type="primary" size="small" className="fr mb10">评审解锁</Button>
|
<Button hidden={btnAuthority(['ebtp-expert'])} onClick={getLock} type="primary" size="small" className="fr mb10">评审解锁</Button>
|
||||||
</div>
|
</div>
|
||||||
@ -1099,7 +1188,55 @@ const Index: React.FC<{}> = () => {
|
|||||||
{tableDisplay == true ? (
|
{tableDisplay == true ? (
|
||||||
<>
|
<>
|
||||||
<p className="red">初审(有限数量制)结果汇总表</p>
|
<p className="red">初审(有限数量制)结果汇总表</p>
|
||||||
<BidDetailSummary reload={count} readOnly={reviewStatus == 2 || reviewStatus == 3} summaryRef={ref} />
|
<BidDetailSummary reload={count} readOnly={reviewStatus == 2 || reviewStatus == 3} summaryRef={ref} onSubmit={(value) => {
|
||||||
|
setIsShowFoot(value)
|
||||||
|
}} />
|
||||||
|
{isShowFoot ? (
|
||||||
|
<div>
|
||||||
|
<div style={{ margin: '8px 0px' }}>
|
||||||
|
<span style={{ color: '#b30000' }}>合格供应商不足三家,是否继续进行详审:</span>
|
||||||
|
<Radio.Group onChange={radioOnChange} value={radioValue} disabled={reviewStatus == 2 || reviewStatus == 3}>
|
||||||
|
<Radio value={1}>是,继续进行</Radio>
|
||||||
|
<Radio value={0}>否,终止评审</Radio>
|
||||||
|
</Radio.Group>
|
||||||
|
</div>
|
||||||
|
<Form
|
||||||
|
{...layout}
|
||||||
|
form={form}
|
||||||
|
name="control-hooks"
|
||||||
|
onFinish={onFinish}
|
||||||
|
validateMessages={validateMessages}
|
||||||
|
>
|
||||||
|
<Form.Item
|
||||||
|
name="remarks"
|
||||||
|
label="说明"
|
||||||
|
rules={[{ required: !(reviewStatus == 2 || reviewStatus == 3) && radioValue == 1 }]}
|
||||||
|
hidden={radioValue == 0}
|
||||||
|
>
|
||||||
|
<TextArea maxLength={500} disabled={reviewStatus == 2 || reviewStatus == 3} placeholder="请填写说明" style={{ resize: reviewStatus == 2 || reviewStatus == 3 ? 'none' : 'vertical' }} />
|
||||||
|
</Form.Item>
|
||||||
|
{reviewStatus == 2 || reviewStatus == 3 ? (
|
||||||
|
<Form.Item
|
||||||
|
name="fileId"
|
||||||
|
label="说明文件"
|
||||||
|
hidden={radioValue == 0}
|
||||||
|
>
|
||||||
|
<ExtendUpload bid={uploadId} uploadProps={{ disabled: true }} />
|
||||||
|
</Form.Item>
|
||||||
|
) : (
|
||||||
|
|
||||||
|
<Form.Item
|
||||||
|
name="fileId"
|
||||||
|
label="说明文件"
|
||||||
|
hidden={radioValue == 0}
|
||||||
|
extra="最多上传一个文件,每个最大30MB"
|
||||||
|
>
|
||||||
|
<ExtendUpload maxSize={30} bid={uploadId} uploadProps={{}} maxCount={1}></ExtendUpload>
|
||||||
|
</Form.Item>
|
||||||
|
)}
|
||||||
|
</Form>
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
@ -1208,6 +1345,16 @@ const Index: React.FC<{}> = () => {
|
|||||||
modalVisible={checkVisible}
|
modalVisible={checkVisible}
|
||||||
values={checkData}
|
values={checkData}
|
||||||
/>
|
/>
|
||||||
|
{/**风控组件 */}
|
||||||
|
{riskVisible && <RiskPreventionSoft
|
||||||
|
modalVisible={riskVisible}
|
||||||
|
onCancel={() => {
|
||||||
|
setRiskVisible(false);
|
||||||
|
setRiskData([]);
|
||||||
|
}}
|
||||||
|
onSubmit={() => submitClick()}
|
||||||
|
data={riskData}
|
||||||
|
/>}
|
||||||
</Spin>
|
</Spin>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
@ -78,7 +78,7 @@ export async function updateJudgesStatus(data: any) { // 提交
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getMemberInfo(id: any) { // 评审解锁
|
export async function getMemberInfo(id: any) { // 评审解锁
|
||||||
return request('/api/biz-service-ebtp-rsms/v1/jury/member/info/'+id, {
|
return request('/api/biz-service-ebtp-rsms/v1/jury/member/info/' + id, {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ export async function getUnlock(data: any) { // 评审解锁
|
|||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function getJuryDetailScoreData(params: any) {
|
export async function getJuryDetailScoreData(params: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/bxmulti/eval/summary/findScoreDetailSummary`,{
|
return request(`/api/biz-service-ebtp-rsms/v1/bxmulti/eval/summary/findScoreDetailSummary`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: params
|
data: params
|
||||||
})
|
})
|
||||||
@ -114,7 +114,7 @@ export async function getJuryDetailScoreData(params: any) {
|
|||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function getJuryList(params: any) {
|
export async function getJuryList(params: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/jury/member/info/${params}`,{
|
return request(`/api/biz-service-ebtp-rsms/v1/jury/member/info/${params}`, {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -124,7 +124,7 @@ export async function getJuryList(params: any) {
|
|||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function getJuryScoreData(params: any) {
|
export async function getJuryScoreData(params: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/summary/findProgressSummary`,{
|
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/summary/findProgressSummary`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: params
|
data: params
|
||||||
})
|
})
|
||||||
@ -135,7 +135,7 @@ export async function getJuryScoreData(params: any) {
|
|||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function getCheckData(params: any) {
|
export async function getCheckData(params: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/bxmulti/eval/summary/findConsistentResult`,{
|
return request(`/api/biz-service-ebtp-rsms/v1/bxmulti/eval/summary/findConsistentResult`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
params: params
|
params: params
|
||||||
})
|
})
|
||||||
@ -146,7 +146,7 @@ export async function getCheckData(params: any) {
|
|||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function submitSummary(params: any) {
|
export async function submitSummary(params: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/bxmulti/eval/summary/submitSummary`,{
|
return request(`/api/biz-service-ebtp-rsms/v1/bxmulti/eval/summary/submitSummary`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: params
|
data: params
|
||||||
})
|
})
|
||||||
@ -157,15 +157,42 @@ export async function submitSummary(params: any) {
|
|||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function isStatus(params: any) {
|
export async function isStatus(params: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/category/findAllJudgesStatus`,{
|
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/category/findAllJudgesStatus`, {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
params: params
|
params: params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getFile(id: any) { // 查找是否有应答文件
|
export async function getFile(id: any) { // 查找是否有应答文件
|
||||||
return request('/api/biz-service-ebtp-rsms/v1/review/config/detail/doc/list?detailId='+id, {
|
return request('/api/biz-service-ebtp-rsms/v1/review/config/detail/doc/list?detailId=' + id, {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 初审汇总表-提交汇总后回显少于三家判断数据
|
||||||
|
* @param params
|
||||||
|
*/
|
||||||
|
export async function checkShowData(params: any) {
|
||||||
|
return request(`/api/biz-service-ebtp-rsms/v1/bid/early/warn/room/${params}`, {
|
||||||
|
method: 'GET'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 初审汇总表-判断是否需要供应商少于三家判断
|
||||||
|
* @param params
|
||||||
|
*/
|
||||||
|
export async function isCheckShow(params: any) {
|
||||||
|
return request(`/api/biz-service-ebtp-process/v1/process/check/effective/supplier/${params}`, {
|
||||||
|
method: 'GET'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 提交前风险防控校验接口
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export function beforeRiskControl(data: any) {
|
||||||
|
return request("/api/biz-service-ebtp-rsms/v1/riskcenter/getRemindEarlySummary", {
|
||||||
|
method: 'post',
|
||||||
|
data: data,
|
||||||
|
});
|
||||||
|
}
|
Reference in New Issue
Block a user