Merge branch '20220523-公开比选一阶段二次项目,资格审查合格供应商为一家时可增加自定义流程' into 'release_20230317'
3.17 公开比选一阶段二次项目,资格审查合格供应商为一家时可增加自定义流程 See merge request eshop/fe_service_ebtp_frontend!187
This commit is contained in:
@ -31,6 +31,8 @@ const BiddingRoom = (props) => {
|
|||||||
const IPassDecode = getIPassDecode();
|
const IPassDecode = getIPassDecode();
|
||||||
//获取用户数据
|
//获取用户数据
|
||||||
let data = getSessionUserData();
|
let data = getSessionUserData();
|
||||||
|
//获取比选一阶段二次项目,自定义流程,当前供应商
|
||||||
|
const isBxOneSecondCustom = sessionStorage.getItem("isBxOneSecondCustom");
|
||||||
//获取评审室id
|
//获取评审室id
|
||||||
const roomId = getRoomId();
|
const roomId = getRoomId();
|
||||||
const [list, setList] = useState();
|
const [list, setList] = useState();
|
||||||
@ -289,7 +291,7 @@ const BiddingRoom = (props) => {
|
|||||||
//供应商是否用ipass解密判断
|
//供应商是否用ipass解密判断
|
||||||
IPassDecode == 0 ? null : supplierList.splice(2, 1)
|
IPassDecode == 0 ? null : supplierList.splice(2, 1)
|
||||||
//供应商是否显示评审进展判断(招标类不显示)
|
//供应商是否显示评审进展判断(招标类不显示)
|
||||||
isBidProcess ? supplierList.splice(1, 1) : null
|
isBidProcess && (isBxOneSecondCustom != "1") ? supplierList.splice(1, 1) : null
|
||||||
//项目经理澄清说明判断
|
//项目经理澄清说明判断
|
||||||
NoClarification.findIndex(item => item == defId) == -1 ? null : managerList.splice(5, 1)
|
NoClarification.findIndex(item => item == defId) == -1 ? null : managerList.splice(5, 1)
|
||||||
//专家算数错误调整判断
|
//专家算数错误调整判断
|
||||||
|
@ -43,6 +43,8 @@ const Index: React.FC<{}> = () => {
|
|||||||
const [singUserId, singUserIdSet] = useState<any>([]); //评审专家id
|
const [singUserId, singUserIdSet] = useState<any>([]); //评审专家id
|
||||||
const userId = getSessionUserData().userId;
|
const userId = getSessionUserData().userId;
|
||||||
const role = getSessionRoleData().roleCode;
|
const role = getSessionRoleData().roleCode;
|
||||||
|
//获取比选一阶段二次项目,自定义流程,当前供应商
|
||||||
|
const isBxOneSecondCustom = sessionStorage.getItem("isBxOneSecondCustom");
|
||||||
function showConfirm(mes?: any, confirmFlag?: boolean) {
|
function showConfirm(mes?: any, confirmFlag?: boolean) {
|
||||||
//环节流转提示
|
//环节流转提示
|
||||||
mes == '是否开启' ? (mes = mes + instTurnName + '?') : mes;
|
mes == '是否开启' ? (mes = mes + instTurnName + '?') : mes;
|
||||||
@ -454,6 +456,7 @@ const Index: React.FC<{}> = () => {
|
|||||||
selectedKeys={selectedKeysTransfer}
|
selectedKeys={selectedKeysTransfer}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onSelectChange={onSelectChange}
|
onSelectChange={onSelectChange}
|
||||||
|
disabled={isBxOneSecondCustom == "1"}
|
||||||
selectAllLabels={[, (info: { selectedCount: number, totalCount: number }) => <>
|
selectAllLabels={[, (info: { selectedCount: number, totalCount: number }) => <>
|
||||||
{
|
{
|
||||||
info.selectedCount != 0 && `${info.selectedCount}/`
|
info.selectedCount != 0 && `${info.selectedCount}/`
|
||||||
@ -555,11 +558,14 @@ const Index: React.FC<{}> = () => {
|
|||||||
let url = makeUrl(item2.moduleUrl, leader) + `?turnId=${item2.instTurnId}&nodeId=${item2.id}&turnSort=${item2.instTurnSort}`;
|
let url = makeUrl(item2.moduleUrl, leader) + `?turnId=${item2.instTurnId}&nodeId=${item2.id}&turnSort=${item2.instTurnSort}`;
|
||||||
//报价评审 只有评审分工分到的专家能点
|
//报价评审 只有评审分工分到的专家能点
|
||||||
let offerDis = item2.moduleUrl === '/EvaRoom/Eva/BidOffer' && userId != offerUserId;
|
let offerDis = item2.moduleUrl === '/EvaRoom/Eva/BidOffer' && userId != offerUserId;
|
||||||
|
//是否跳过节点 0-不跳过 1-跳过节点
|
||||||
|
let skipStatus = item2.skipStatus == 1;
|
||||||
let disabled = item2.status == 3 ||
|
let disabled = item2.status == 3 ||
|
||||||
item2.moduleUrl == null ||
|
item2.moduleUrl == null ||
|
||||||
item2.moduleUrl == undefined ||
|
item2.moduleUrl == undefined ||
|
||||||
offerDis ||
|
offerDis ||
|
||||||
singDis
|
singDis ||
|
||||||
|
skipStatus
|
||||||
return (
|
return (
|
||||||
<Menu.Item
|
<Menu.Item
|
||||||
key={`${item.instTurnSort}${index}MenuItem`}
|
key={`${item.instTurnSort}${index}MenuItem`}
|
||||||
|
@ -93,5 +93,15 @@ export async function saveClosingReason(param: any) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比选一阶段二次项目,获取最新轮的供应商
|
||||||
|
* @param param
|
||||||
|
*/
|
||||||
|
export async function getMaxTurnSortSupplier(param: any) {
|
||||||
|
return request(`/api/biz-service-ebtp-tender/v1/supplier_register/turnSort/max/${param}`, {
|
||||||
|
method: 'GET',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -425,7 +425,7 @@ class manager extends PureComponent {
|
|||||||
</Button>
|
</Button>
|
||||||
</Popconfirm>
|
</Popconfirm>
|
||||||
{
|
{
|
||||||
this.methodStatus().visible &&
|
(this.methodStatus().visible || (record.bxOneSecondProjectStatus && record.instFlowType == 2)) &&
|
||||||
<Button type="text" key="7"
|
<Button type="text" key="7"
|
||||||
onClick={() => { this.flowConfig(record) }}
|
onClick={() => { this.flowConfig(record) }}
|
||||||
hidden={btnAuthority(["ebtp-agency-project-manager", "ebtp-purchase"]) || proMethod == 'procurement_mode_9'}>
|
hidden={btnAuthority(["ebtp-agency-project-manager", "ebtp-purchase"]) || proMethod == 'procurement_mode_9'}>
|
||||||
|
@ -2,10 +2,11 @@ import React, {PureComponent} from 'react';
|
|||||||
import { Divider, Button, Form, Card, Tabs, Table, Tooltip, Input, Select, Row, Col, message } from 'antd';
|
import { Divider, Button, Form, Card, Tabs, Table, Tooltip, Input, Select, Row, Col, message } from 'antd';
|
||||||
import './index.less';
|
import './index.less';
|
||||||
import { connect } from "dva";
|
import { connect } from "dva";
|
||||||
import { getProId,getProMethod,getDefId, getQuotationMethodById } from '@/utils/session';
|
import { getProId, getProMethod, getDefId, getQuotationMethodById, getSessionUserData } from '@/utils/session';
|
||||||
import { routerRedux } from 'dva/router';
|
import { routerRedux } from 'dva/router';
|
||||||
import { getURLInformation } from '@/utils/CommonUtils';
|
import { getURLInformation } from '@/utils/CommonUtils';
|
||||||
import { btnAuthority } from '@/utils/authority';
|
import { btnAuthority } from '@/utils/authority';
|
||||||
|
import { getMaxTurnSortSupplier } from './components/service';
|
||||||
@connect(({ bidev, loading }) => ({
|
@connect(({ bidev, loading }) => ({
|
||||||
...bidev,
|
...bidev,
|
||||||
supplierlistLoading: loading.effects['bidev/fetchSupplierList'],
|
supplierlistLoading: loading.effects['bidev/fetchSupplierList'],
|
||||||
@ -14,7 +15,7 @@ class supplier extends PureComponent {
|
|||||||
state = {
|
state = {
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
tpId: getProId(),
|
tpId: getProId(),
|
||||||
sectionName: "采购包",
|
sectionName: "采购包",
|
||||||
sectionType: "评审",
|
sectionType: "评审",
|
||||||
defId: getDefId(),
|
defId: getDefId(),
|
||||||
@ -40,7 +41,7 @@ class supplier extends PureComponent {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
tpId: getProId()
|
tpId: getProId()
|
||||||
})
|
})
|
||||||
const { dispatch } = this.props;
|
const { dispatch } = this.props;
|
||||||
// const {pageNo,pageSize}=this.state;
|
// const {pageNo,pageSize}=this.state;
|
||||||
@ -64,6 +65,12 @@ class supplier extends PureComponent {
|
|||||||
sessionStorage.setItem("expertGroupId", record.expertChatGroupId)
|
sessionStorage.setItem("expertGroupId", record.expertChatGroupId)
|
||||||
this.setState({ loading: true })
|
this.setState({ loading: true })
|
||||||
await getQuotationMethodById(record.id)
|
await getQuotationMethodById(record.id)
|
||||||
|
const res = await getMaxTurnSortSupplier(record.id);//获取最新轮次的供应商信息
|
||||||
|
if (record.bxOneSecondProjectStatus && (record.instFlowType == 2) && (getSessionUserData()?.userId == res?.data[0].bidUserId)) {//比选一阶段二次项目,选择自定义流程
|
||||||
|
sessionStorage.setItem("isBxOneSecondCustom", "1")
|
||||||
|
} else {
|
||||||
|
sessionStorage.setItem("isBxOneSecondCustom", "0")
|
||||||
|
}
|
||||||
this.setState({ loading: false })
|
this.setState({ loading: false })
|
||||||
// this.props.dispatch(routerRedux.push('/ProjectLayout/EvaRoom'))
|
// this.props.dispatch(routerRedux.push('/ProjectLayout/EvaRoom'))
|
||||||
window.open('/EvaRoom')
|
window.open('/EvaRoom')
|
||||||
@ -113,26 +120,34 @@ class supplier extends PureComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const columns = [
|
const columns = [
|
||||||
{ title: '序号', dataIndex: 'id', width: '10%',
|
{
|
||||||
|
title: '序号', dataIndex: 'id', width: '10%',
|
||||||
render: (text, record, index) => {
|
render: (text, record, index) => {
|
||||||
return (index + 1)
|
return (index + 1)
|
||||||
}},
|
}
|
||||||
|
},
|
||||||
{ title: `${sectionName}名称`, dataIndex: 'sectionName', width: '10%' },
|
{ title: `${sectionName}名称`, dataIndex: 'sectionName', width: '10%' },
|
||||||
{ title: `${sectionName}编号`, dataIndex: 'sectionNum', width: '10%' },
|
{ title: `${sectionName}编号`, dataIndex: 'sectionNum', width: '10%' },
|
||||||
{ title: `${sectionType}次数`, dataIndex: 'roomSort', width: '10%',
|
{
|
||||||
|
title: `${sectionType}次数`, dataIndex: 'roomSort', width: '10%',
|
||||||
render: (text, record, index) => {
|
render: (text, record, index) => {
|
||||||
return defId == "recruit_multi" ? <>第{text}轮</> : record.reviewMark == 1 ? <>第{text + record.reviewSort}次{sectionType}</> : <>第{text}次{sectionType}</>
|
return defId == "recruit_multi" ? <>第{text}轮</> : record.reviewMark == 1 ? <>第{text + record.reviewSort}次{sectionType}</> : <>第{text}次{sectionType}</>
|
||||||
}},
|
}
|
||||||
|
},
|
||||||
{ title: `${sectionType}开始时间`, dataIndex: 'openTime', width: '10%' },
|
{ title: `${sectionType}开始时间`, dataIndex: 'openTime', width: '10%' },
|
||||||
{ title: '状态', dataIndex: 'status', width: '10%',
|
{
|
||||||
|
title: '状态', dataIndex: 'status', width: '10%',
|
||||||
render: (text, record, index) => {
|
render: (text, record, index) => {
|
||||||
let txt = record.status
|
let txt = record.status
|
||||||
return txt == 0 || txt == 1 ? `准备${sectionType}` : (txt == 2 ? `正在${sectionType}` : (txt == 3 ? `${sectionType}结束` : null))
|
return txt == 0 || txt == 1 ? `准备${sectionType}` : (txt == 2 ? `正在${sectionType}` : (txt == 3 ? `${sectionType}结束` : null))
|
||||||
}},
|
}
|
||||||
{ title: '操作', dataIndex: 'operation', width: '10%',
|
},
|
||||||
|
{
|
||||||
|
title: '操作', dataIndex: 'operation', width: '10%',
|
||||||
render: (text, record, index) => {
|
render: (text, record, index) => {
|
||||||
return <><Button type="text" onClick={() => { this.handleRedirect(record) }} hidden={btnAuthority(["ebtp-supplier"])}>进入{sectionType}室</Button></>
|
return <><Button type="text" onClick={() => { this.handleRedirect(record) }} hidden={btnAuthority(["ebtp-supplier"])}>进入{sectionType}室</Button></>
|
||||||
}}
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
|
@ -4,7 +4,7 @@ import '@/assets/ld_style.less';
|
|||||||
import { checkShowData, getSupplierScoreData } from '../service';
|
import { checkShowData, getSupplierScoreData } from '../service';
|
||||||
import { CheckOutlined, CloseOutlined } from '@ant-design/icons';
|
import { CheckOutlined, CloseOutlined } from '@ant-design/icons';
|
||||||
import { getProMethod, getRoomId } from '@/utils/session';
|
import { getProMethod, getRoomId } from '@/utils/session';
|
||||||
import { getURLInformation } from '@/utils/CommonUtils';
|
import { getURLInformation, isNotEmpty } from '@/utils/CommonUtils';
|
||||||
import ExtendUpload from '@/utils/ExtendUpload';
|
import ExtendUpload from '@/utils/ExtendUpload';
|
||||||
import MACAddressPrompt from '@/pages/Evaluation/BidControl/BidControlManager/components/MACAddressPrompt';
|
import MACAddressPrompt from '@/pages/Evaluation/BidControl/BidControlManager/components/MACAddressPrompt';
|
||||||
|
|
||||||
@ -32,6 +32,10 @@ const PreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
|||||||
const [isShowFoot, setIsShowFoot] = useState<boolean>(false);
|
const [isShowFoot, setIsShowFoot] = useState<boolean>(false);
|
||||||
//说明文件fileId
|
//说明文件fileId
|
||||||
const [fileId, setFileId] = useState<string>('');
|
const [fileId, setFileId] = useState<string>('');
|
||||||
|
//比选一阶段二次项目自定义评审流程单选数值存储
|
||||||
|
const [processValue, setProcessValue] = useState<number>();
|
||||||
|
//是否公开比选一阶段二次项目
|
||||||
|
const [isBxOneSecond, setIsBxOneSecond] = useState<boolean>(false);
|
||||||
//每页显示数量常量
|
//每页显示数量常量
|
||||||
const pageSize = 3;
|
const pageSize = 3;
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
@ -55,6 +59,10 @@ const PreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
|||||||
const radioOnChange = (e: any) => {
|
const radioOnChange = (e: any) => {
|
||||||
setRadioValue(e.target.value);
|
setRadioValue(e.target.value);
|
||||||
};
|
};
|
||||||
|
//流程单选onChange方法
|
||||||
|
const processOnChange = (e: any) => {
|
||||||
|
setProcessValue(e.target.value);
|
||||||
|
};
|
||||||
//截取字符串方法
|
//截取字符串方法
|
||||||
const getCaption = (obj: any) => {
|
const getCaption = (obj: any) => {
|
||||||
var index = obj.lastIndexOf("\-");
|
var index = obj.lastIndexOf("\-");
|
||||||
@ -226,13 +234,15 @@ const PreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const getFooterData = () => {
|
const getFooterData = () => {
|
||||||
checkShowData(getRoomId()).then(response => {
|
checkShowData(getRoomId(), getURLInformation('nodeId')).then(response => {
|
||||||
if (response?.code == 200) {
|
if (response?.code == 200) {
|
||||||
if (response?.data == undefined) { } else {
|
if (response?.data == undefined) { } else {
|
||||||
setIsShowFoot(true)
|
setIsShowFoot(true)
|
||||||
setRadioValue(response.data?.continueStatus)
|
setRadioValue(response.data?.continueStatus)
|
||||||
if (response.data?.continueStatus == 1) {
|
if (response.data?.continueStatus == 1) {
|
||||||
setFileId(response.data?.fileId)
|
setFileId(response.data?.fileId)
|
||||||
|
setProcessValue(response?.data?.customizeFlowStatus);
|
||||||
|
setIsBxOneSecond(response?.data?.bxOneSecondProjectStatus);
|
||||||
form.setFieldsValue({
|
form.setFieldsValue({
|
||||||
remarks: response.data?.remarks
|
remarks: response.data?.remarks
|
||||||
})
|
})
|
||||||
@ -283,15 +293,22 @@ const PreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
|||||||
{isShowFoot ? (
|
{isShowFoot ? (
|
||||||
<div>
|
<div>
|
||||||
<div style={{ margin: '8px 0px' }}>
|
<div style={{ margin: '8px 0px' }}>
|
||||||
<span style={{ color: '#b30000' }}>合格供应商不足三家,是否继续进行详审:</span>
|
<span style={{ color: '#b30000' }}>{(isBxOneSecond && isNotEmpty(processValue)) ? '合格供应商仅一家,是否继续进行' : '合格供应商不足三家,是否继续进行详审'}:</span>
|
||||||
<Radio.Group onChange={radioOnChange} value={radioValue} disabled>
|
<Radio.Group onChange={radioOnChange} value={radioValue} disabled>
|
||||||
<Radio value={1}>是,继续进行</Radio>
|
<Radio value={1}>是,继续进行</Radio>
|
||||||
<Radio value={0}>否,终止评审</Radio>
|
<Radio value={0}>否,终止评审</Radio>
|
||||||
</Radio.Group>
|
</Radio.Group>
|
||||||
</div>
|
</div>
|
||||||
|
{isBxOneSecond && isNotEmpty(processValue) && <div style={{ margin: '8px 70px' }}>
|
||||||
|
<span style={{ color: '#b30000' }}>是否需自定义评审流程:</span>
|
||||||
|
<Radio.Group onChange={processOnChange} value={processValue} disabled>
|
||||||
|
<Radio value={1}>是,需自定义评审流程</Radio>
|
||||||
|
<Radio value={0}>否,继续原流程</Radio>
|
||||||
|
</Radio.Group>
|
||||||
|
</div>}
|
||||||
<Form {...layout} form={form} name="control-hooks" validateMessages={validateMessages}>
|
<Form {...layout} form={form} name="control-hooks" validateMessages={validateMessages}>
|
||||||
<Form.Item name="remarks" label="说明" hidden={radioValue == 0}>
|
<Form.Item name="remarks" label="说明" hidden={radioValue == 0}>
|
||||||
<TextArea maxLength={500} readOnly bordered={false} style={{ resize: 'none' }} />
|
<TextArea maxLength={500} readOnly bordered={false} autoSize />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item name="fileId" label="说明文件" hidden={radioValue == 0}>
|
<Form.Item name="fileId" label="说明文件" hidden={radioValue == 0}>
|
||||||
<ExtendUpload bid={fileId} uploadProps={{ disabled: true }} />
|
<ExtendUpload bid={fileId} uploadProps={{ disabled: true }} />
|
||||||
|
@ -81,8 +81,8 @@ export function getAbstractVO(params: any) {
|
|||||||
* 初审汇总表-提交汇总后回显少于三家判断数据
|
* 初审汇总表-提交汇总后回显少于三家判断数据
|
||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function checkShowData(params: any) {
|
export async function checkShowData(params: any, nodeId: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/early/warn/room/${params}`, {
|
return request(`/api/biz-service-ebtp-rsms/v1/bid/early/warn/room/${params}?nodeId=${nodeId}`, {
|
||||||
method: 'GET'
|
method: 'GET'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -13,10 +13,12 @@ interface BidPreliminarySummaryProps {
|
|||||||
reload: any;
|
reload: any;
|
||||||
readOnly: boolean;
|
readOnly: boolean;
|
||||||
summaryRef: React.MutableRefObject<Array<{}> | undefined>
|
summaryRef: React.MutableRefObject<Array<{}> | undefined>
|
||||||
|
isBxOneSecond: boolean;
|
||||||
|
isNodeEnd: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BidPreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
const BidPreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
||||||
const { totalSupplier, onSubmit, reload, readOnly, summaryRef } = props;
|
const { totalSupplier, onSubmit, reload, readOnly, summaryRef, isBxOneSecond, isNodeEnd } = props;
|
||||||
//存储表
|
//存储表
|
||||||
// const [scheduleTable, setScheduleTable] = useState<any>();
|
// const [scheduleTable, setScheduleTable] = useState<any>();
|
||||||
const [scheduleTable, setScheduleTable] = useState<boolean>(false);
|
const [scheduleTable, setScheduleTable] = useState<boolean>(false);
|
||||||
@ -90,11 +92,7 @@ const BidPreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
|||||||
count = count + 1;
|
count = count + 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (count < 3 && res.data == true) {
|
onSubmit(count);
|
||||||
onSubmit(true)
|
|
||||||
} else {
|
|
||||||
onSubmit(false)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//调用数据处理方法并初始化表格
|
//调用数据处理方法并初始化表格
|
||||||
@ -298,16 +296,14 @@ const BidPreliminarySummary: React.FC<BidPreliminarySummaryProps> = (props) => {
|
|||||||
tableDataRef.current[tableDataRef.current.length - 1][ele.supplierRegisterId].judgesResult = !!e;
|
tableDataRef.current[tableDataRef.current.length - 1][ele.supplierRegisterId].judgesResult = !!e;
|
||||||
setTableDataSource([...tableDataRef.current])
|
setTableDataSource([...tableDataRef.current])
|
||||||
if (isShowRef.current) {
|
if (isShowRef.current) {
|
||||||
|
if (isBxOneSecond && isNodeEnd) { } else {//公开比选一阶段二次项目 节点结束
|
||||||
let count = 0;
|
let count = 0;
|
||||||
totalSupplier.forEach((ele: any) => {
|
totalSupplier.forEach((ele: any) => {
|
||||||
if (tableDataRef.current[tableDataRef.current.length - 1][ele.supplierRegisterId].judgesResult) {
|
if (tableDataRef.current[tableDataRef.current.length - 1][ele.supplierRegisterId].judgesResult) {
|
||||||
count = count + 1;
|
count = count + 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (count < 3) {
|
onSubmit(count);
|
||||||
onSubmit(true)
|
|
||||||
} else {
|
|
||||||
onSubmit(false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
@ -75,8 +75,14 @@ const Index: React.FC<{}> = () => {
|
|||||||
const [uploadId, setUploadId] = useState<any>();
|
const [uploadId, setUploadId] = useState<any>();
|
||||||
//单选数值存储
|
//单选数值存储
|
||||||
const [radioValue, setRadioValue] = useState<number>();
|
const [radioValue, setRadioValue] = useState<number>();
|
||||||
//是否显示合格供应商不足三家
|
//比选一阶段二次项目自定义评审流程单选数值存储
|
||||||
const [isShowFoot, setIsShowFoot] = useState<boolean>(false);
|
const [processValue, setProcessValue] = useState<number>();
|
||||||
|
//合格供应商数量
|
||||||
|
const [qualifyNumber, setQualifyNumber] = useState<number>(3);
|
||||||
|
//是否公开比选一阶段二次项目
|
||||||
|
const [isBxOneSecond, setIsBxOneSecond] = useState<boolean>(false);
|
||||||
|
//二次项目是否可编辑两个单选
|
||||||
|
const [isNodeEnd, setIsNodeEnd] = useState<boolean>(false);
|
||||||
//动态获取表单
|
//动态获取表单
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
//当前页 初审详情
|
//当前页 初审详情
|
||||||
@ -91,6 +97,7 @@ const Index: React.FC<{}> = () => {
|
|||||||
showNameT = { tbr: '投标人', pb: '评标', tb: '投标' };
|
showNameT = { tbr: '投标人', pb: '评标', tb: '投标' };
|
||||||
} else {
|
} else {
|
||||||
showNameT = { tbr: '供应商', pb: '评审', tb: '应答' }
|
showNameT = { tbr: '供应商', pb: '评审', tb: '应答' }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const columns: any[] = [ // 列表数据
|
const columns: any[] = [ // 列表数据
|
||||||
@ -717,7 +724,7 @@ const Index: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const finalSubmit = async () => {
|
const finalSubmit = async () => {
|
||||||
if (isShowFoot == true) {
|
if (qualifyNumber < 3) {
|
||||||
form.submit();
|
form.submit();
|
||||||
} else {
|
} else {
|
||||||
const remarkList = getRemarkList(ref.current)
|
const remarkList = getRemarkList(ref.current)
|
||||||
@ -815,6 +822,10 @@ const Index: React.FC<{}> = () => {
|
|||||||
const radioOnChange = (e: any) => {
|
const radioOnChange = (e: any) => {
|
||||||
setRadioValue(e.target.value);
|
setRadioValue(e.target.value);
|
||||||
};
|
};
|
||||||
|
//流程单选onChange方法
|
||||||
|
const processOnChange = (e: any) => {
|
||||||
|
setProcessValue(e.target.value);
|
||||||
|
};
|
||||||
//表单提交
|
//表单提交
|
||||||
const onFinish = async (values: any) => {
|
const onFinish = async (values: any) => {
|
||||||
let data = {
|
let data = {
|
||||||
@ -823,6 +834,12 @@ const Index: React.FC<{}> = () => {
|
|||||||
if (radioValue == 1) {
|
if (radioValue == 1) {
|
||||||
data["remarks"] = values.remarks
|
data["remarks"] = values.remarks
|
||||||
data["fileId"] = values.fileId
|
data["fileId"] = values.fileId
|
||||||
|
if (isBxOneSecond && qualifyNumber == 1) {//比选一阶段二次项目 只有一家供应商合格
|
||||||
|
data["operationType"] = 1
|
||||||
|
data["customizeFlowStatus"] = processValue
|
||||||
|
} else {
|
||||||
|
data["operationType"] = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const remarkList = getRemarkList(ref.current)
|
const remarkList = getRemarkList(ref.current)
|
||||||
if (remarkList) {
|
if (remarkList) {
|
||||||
@ -869,10 +886,13 @@ const Index: React.FC<{}> = () => {
|
|||||||
if (res?.code == 200) {
|
if (res?.code == 200) {
|
||||||
setTableDisplay(res.data)
|
setTableDisplay(res.data)
|
||||||
//初始化三家供应商判断数据
|
//初始化三家供应商判断数据
|
||||||
await checkShowData(assessRoomId).then(response => {
|
await checkShowData(assessRoomId, getURLInformation('nodeId')).then(response => {
|
||||||
if (response?.code == 200) {
|
if (response?.code == 200) {
|
||||||
setUploadId(response?.data?.fileId)
|
setUploadId(response?.data?.fileId)
|
||||||
setRadioValue(response?.data?.continueStatus == undefined ? 1 : response?.data?.continueStatus)
|
setRadioValue(response?.data?.continueStatus == undefined ? 1 : response?.data?.continueStatus)
|
||||||
|
setProcessValue(response?.data?.customizeFlowStatus == undefined ? 1 : response?.data?.customizeFlowStatus);
|
||||||
|
setIsBxOneSecond(response?.data?.bxOneSecondProjectStatus);
|
||||||
|
setIsNodeEnd(response?.data?.nodeEndStatus);
|
||||||
form.setFieldsValue({
|
form.setFieldsValue({
|
||||||
remarks: response.data?.remarks
|
remarks: response.data?.remarks
|
||||||
})
|
})
|
||||||
@ -944,17 +964,24 @@ const Index: React.FC<{}> = () => {
|
|||||||
<>
|
<>
|
||||||
<p className="red mb0">初审结果汇总表</p>
|
<p className="red mb0">初审结果汇总表</p>
|
||||||
<BidPreliminarySummary readOnly={reviewStatus == 2 || reviewStatus == 3} summaryRef={ref} reload={count} totalSupplier={totalSupplierColumns} onSubmit={(value) => {
|
<BidPreliminarySummary readOnly={reviewStatus == 2 || reviewStatus == 3} summaryRef={ref} reload={count} totalSupplier={totalSupplierColumns} onSubmit={(value) => {
|
||||||
setIsShowFoot(value)
|
setQualifyNumber(value);
|
||||||
}} />
|
}} isBxOneSecond={isBxOneSecond} isNodeEnd={isNodeEnd} />
|
||||||
{isShowFoot ? (
|
{qualifyNumber < 3 ? (
|
||||||
<div>
|
<div>
|
||||||
<div style={{ margin: '8px 0px' }}>
|
<div style={{ margin: '8px 0px' }}>
|
||||||
<span style={{ color: '#b30000' }}>合格供应商不足三家,是否继续进行详审:</span>
|
<span style={{ color: '#b30000' }}>{qualifyNumber == 1 && isBxOneSecond ? '合格供应商仅一家,是否继续进行' : '合格供应商不足三家,是否继续进行详审'}:</span>
|
||||||
<Radio.Group onChange={radioOnChange} value={radioValue} disabled={reviewStatus == 2 || reviewStatus == 3}>
|
<Radio.Group onChange={radioOnChange} value={radioValue} disabled={reviewStatus == 2 || reviewStatus == 3 || (qualifyNumber == 1 && isBxOneSecond && isNodeEnd)}>
|
||||||
<Radio value={1}>是,继续进行</Radio>
|
<Radio value={1}>是,继续进行</Radio>
|
||||||
<Radio value={0}>否,终止评审</Radio>
|
<Radio value={0}>否,终止评审</Radio>
|
||||||
</Radio.Group>
|
</Radio.Group>
|
||||||
</div>
|
</div>
|
||||||
|
{qualifyNumber == 1 && isBxOneSecond && radioValue == 1 && <div style={{ margin: '8px 70px' }}>
|
||||||
|
<span style={{ color: '#b30000' }}>是否需自定义评审流程:</span>
|
||||||
|
<Radio.Group onChange={processOnChange} value={processValue} disabled={reviewStatus == 2 || reviewStatus == 3 || (qualifyNumber == 1 && isBxOneSecond && isNodeEnd)}>
|
||||||
|
<Radio value={1}>是,需自定义评审流程</Radio>
|
||||||
|
<Radio value={0}>否,继续原流程</Radio>
|
||||||
|
</Radio.Group>
|
||||||
|
</div>}
|
||||||
<Form
|
<Form
|
||||||
{...layout}
|
{...layout}
|
||||||
form={form}
|
form={form}
|
||||||
@ -965,12 +992,12 @@ const Index: React.FC<{}> = () => {
|
|||||||
<Form.Item
|
<Form.Item
|
||||||
name="remarks"
|
name="remarks"
|
||||||
label="说明"
|
label="说明"
|
||||||
rules={[{ required: !(reviewStatus == 2 || reviewStatus == 3) && radioValue == 1 }]}
|
rules={[{ required: !(reviewStatus == 2 || reviewStatus == 3 || (qualifyNumber == 1 && isBxOneSecond && isNodeEnd)) && radioValue == 1 }]}
|
||||||
hidden={radioValue == 0}
|
hidden={radioValue == 0}
|
||||||
>
|
>
|
||||||
<TextArea maxLength={500} disabled={reviewStatus == 2 || reviewStatus == 3} placeholder="请填写说明" style={{ resize: reviewStatus == 2 || reviewStatus == 3 ? 'none' : 'vertical' }} />
|
<TextArea maxLength={500} disabled={reviewStatus == 2 || reviewStatus == 3 || (qualifyNumber == 1 && isBxOneSecond && isNodeEnd)} bordered={!(reviewStatus == 2 || reviewStatus == 3 || (qualifyNumber == 1 && isBxOneSecond && isNodeEnd))} placeholder="请填写说明" rows={3} autoSize={reviewStatus == 2 || reviewStatus == 3 || (qualifyNumber == 1 && isBxOneSecond && isNodeEnd)} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
{reviewStatus == 2 || reviewStatus == 3 ? (
|
{reviewStatus == 2 || reviewStatus == 3 || (qualifyNumber == 1 && isBxOneSecond && isNodeEnd) ? (
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name="fileId"
|
name="fileId"
|
||||||
label="说明文件"
|
label="说明文件"
|
||||||
|
@ -178,8 +178,8 @@ export async function isCheckShow(params: any) {
|
|||||||
* 初审汇总表-提交汇总后回显少于三家判断数据
|
* 初审汇总表-提交汇总后回显少于三家判断数据
|
||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
export async function checkShowData(params: any) {
|
export async function checkShowData(params: any, nodeId: any) {
|
||||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/early/warn/room/${params}`, {
|
return request(`/api/biz-service-ebtp-rsms/v1/bid/early/warn/room/${params}?nodeId=${nodeId}`, {
|
||||||
method: 'GET'
|
method: 'GET'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ const layout = {
|
|||||||
const Index: React.FC<{}> = () => {
|
const Index: React.FC<{}> = () => {
|
||||||
const [packageList, setPackageList] = useState([]);
|
const [packageList, setPackageList] = useState([]);
|
||||||
const method = getProMethod()
|
const method = getProMethod()
|
||||||
|
const roomId = getRoomId()
|
||||||
const actionRef = useRef<ActionType>();
|
const actionRef = useRef<ActionType>();
|
||||||
const [count, countSet] = useState<any>(0);//触发useEffect
|
const [count, countSet] = useState<any>(0);//触发useEffect
|
||||||
const [maxturndata, maxturn] = useState<any>([]); //最大轮次
|
const [maxturndata, maxturn] = useState<any>([]); //最大轮次
|
||||||
@ -45,6 +46,9 @@ const Index: React.FC<{}> = () => {
|
|||||||
title: '操作',
|
title: '操作',
|
||||||
width: '25%',
|
width: '25%',
|
||||||
render: (text: any, record: any, index: any) => {
|
render: (text: any, record: any, index: any) => {
|
||||||
|
if (record.skipStatus == 1) {//跳过节点
|
||||||
|
return null
|
||||||
|
}
|
||||||
if (record.instTurnType == 2) {
|
if (record.instTurnType == 2) {
|
||||||
if (record.nowTurnStatus == 1) {
|
if (record.nowTurnStatus == 1) {
|
||||||
// 只要轮次处于进行中时,改模块不可‘删除’
|
// 只要轮次处于进行中时,改模块不可‘删除’
|
||||||
@ -182,13 +186,13 @@ const Index: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
// 删除轮次
|
// 删除轮次
|
||||||
const delTurn = async (turnId: any) => {
|
const delTurn = async (turnId: any) => {
|
||||||
countSet(count + 1);
|
|
||||||
const hide = message.loading('正在删除');
|
const hide = message.loading('正在删除');
|
||||||
try {
|
try {
|
||||||
const success = await deleteTurn(turnId).then((res) => res?.code == 200);
|
const success = await deleteTurn(turnId).then((res) => res?.code == 200);
|
||||||
hide();
|
hide();
|
||||||
if (success) {
|
if (success) {
|
||||||
message.success('删除成功');
|
message.success('删除成功');
|
||||||
|
countSet(count + 1);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -203,13 +207,13 @@ const Index: React.FC<{}> = () => {
|
|||||||
|
|
||||||
//删除模块
|
//删除模块
|
||||||
const delNode = async (nodeId: any) => {
|
const delNode = async (nodeId: any) => {
|
||||||
countSet(count + 1);
|
|
||||||
const hide = message.loading('正在删除');
|
const hide = message.loading('正在删除');
|
||||||
try {
|
try {
|
||||||
const success = await deleteNode(nodeId).then((res) => res?.code == 200);
|
const success = await deleteNode(nodeId).then((res) => res?.code == 200);
|
||||||
hide();
|
hide();
|
||||||
if (success) {
|
if (success) {
|
||||||
message.success('删除成功');
|
message.success('删除成功');
|
||||||
|
countSet(count + 1);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -222,7 +226,6 @@ const Index: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let roomId = getRoomId()
|
|
||||||
getConfigList(roomId).then((res) => {
|
getConfigList(roomId).then((res) => {
|
||||||
if (res?.code == 200) {
|
if (res?.code == 200) {
|
||||||
setPackageList(res.data)
|
setPackageList(res.data)
|
||||||
@ -234,21 +237,24 @@ const Index: React.FC<{}> = () => {
|
|||||||
maxturn(res.data)
|
maxturn(res.data)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
getNodeList("TP").then((res) => {
|
|
||||||
if (res?.code == 200) {
|
|
||||||
allNodeList(res.data)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
getAssessRoom(roomId).then((res) => {
|
|
||||||
if (res?.code == 200) {
|
|
||||||
setAssessRoom(res.data)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
countSet(count + 1);
|
countSet(count + 1);
|
||||||
}, 4000)
|
}, 4000)
|
||||||
}, [count]);
|
}, [count]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
getAssessRoom(roomId).then((res) => {
|
||||||
|
if (res?.code == 200) {
|
||||||
|
setAssessRoom(res.data)
|
||||||
|
getNodeList(res?.data?.bxOneSecondProjectStatus ? "BX2nd" : "TP").then((res) => {
|
||||||
|
if (res?.code == 200) {
|
||||||
|
allNodeList(res.data)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, [])
|
||||||
|
|
||||||
function methodStatus() {
|
function methodStatus() {
|
||||||
let procurementMethod;
|
let procurementMethod;
|
||||||
switch (method) {
|
switch (method) {
|
||||||
|
@ -247,6 +247,7 @@ export async function jurySaveInfo(record: any) {
|
|||||||
sessionStorage.setItem('roomId', record.id);
|
sessionStorage.setItem('roomId', record.id);
|
||||||
sessionStorage.setItem("groupId", record.chatGroupId)
|
sessionStorage.setItem("groupId", record.chatGroupId)
|
||||||
sessionStorage.setItem("expertGroupId", record.expertChatGroupId)
|
sessionStorage.setItem("expertGroupId", record.expertChatGroupId)
|
||||||
|
sessionStorage.setItem("roomTypeByEva", record.roomType)
|
||||||
await getQuotationMethodById(record.id)
|
await getQuotationMethodById(record.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user