更新版本库

This commit is contained in:
ajaxfan
2021-01-16 11:29:42 +08:00
parent b42e0c1ddd
commit ff889c3db4
352 changed files with 39993 additions and 15507 deletions

View File

@ -1,14 +1,16 @@
import React, { useEffect, useRef, useState } from 'react';
import '@/utils/lq.style.less';
import { Button, Input, Form, Upload, Modal, DatePicker, Collapse, Radio, Checkbox, message, Space } from 'antd';
import { Button, Input, Form, Upload, Modal, DatePicker, Collapse, Radio, Checkbox, message, Space, Spin } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
import ProTable from '@ant-design/pro-table';
import { queryingPagingData } from '@/utils/PageUtils';
import { addClarify, clarifyReply, deleteClarify, getSectionList, releaseClarify, updateClarify } from '../service';
import { addClarify, clarifyReply, deleteClarify, getClarifyAnnoList, getSections, releaseClarify, submitClarify, updateClarify } from '../service';
import { isEmpty, isNotEmpty } from '@/utils/CommonUtils';
import { saveMessage } from '@/utils/MessageUtils';
import { dateTimeFormatter, echoDateTimeFormatter, saveDateTimeFormatter } from '@/utils/DateUtils';
import { downloadAttachmentPath } from '@/utils/DownloadUtils';
import { commonMessage, saveMessage } from '@/utils/MessageUtils';
import { datePickerDisabledDate, datePickerDisabledTime, dateTimeFormatter, echoDateTimeFormatter, getMaxDate, judgmentIntervalDay, judgmentOfTwoTimePeriods, saveDateTimeFormatter, showTimeDefaultValue } from '@/utils/DateUtils';
import { downloadAttachmentPath, downloadAttachmentPathOId } from '@/utils/DownloadUtils';
import { getSessionProjectData } from '@/utils/session';
import InquiryBox from '@/utils/InquiryBox';
const { Panel } = Collapse;
const layoutForm = {
@ -27,16 +29,24 @@ const status = {
* 回执状态
*/
const returnReceiptStatus = {
0:{text:'未回执'},
1:{text:'已回执'}
0: { text: '未回执' },
1: { text: '已回执' }
}
function getSectionCheckbox(data: any) {
let value = [];
let flag = true;
for (const item of data) {
value.push(<Checkbox key={item.id} value={item.id} >
{item.bidSectName}
</Checkbox>)
if (flag) {
value.push(<Checkbox style={{ marginLeft: '8px' }} key={item.id} value={item.id} >
{item.bidSectName}
</Checkbox>)
flag = false;
} else {
value.push(<Checkbox key={item.id} value={item.id} >
{item.bidSectName}
</Checkbox>)
}
}
return value;
}
@ -56,8 +66,10 @@ function sectionNameFormat(id: string, sectionList: any) {
}
const ClarifyTheList: React.FC<{}> = () => {
const projectId = '1111111';
//项目id
const projectId = getSessionProjectData().id;
//采购方式
const bidMethodDict = getSessionProjectData().bidMethodDict;
const [visible, setVisible] = useState<boolean>(false);
//谈判开始时间
const [negotiationStartTimeFlag, setNegotiationStartTimeFlag] = useState<boolean>(false);
@ -84,61 +96,26 @@ const ClarifyTheList: React.FC<{}> = () => {
//澄清回执信息
const [visibleModalReceipt, setVisibleModalReceipt] = useState<boolean>(false);
const [supplierData, setSupplierData] = useState<any>();
const [columns, setCoumns] = useState<any[]>([
{
title: '序号',
valueType: 'index'
},
{
title: '澄清标题',
dataIndex: 'clarifyTitle',
},
{
title: '关联标段',
dataIndex: 'packageId'
},
{
title: '澄清文件',
dataIndex: 'clarifyTheFile',
},
{
title: '状态',
dataIndex: 'clarifyStatus',
valueEnum: status
},
{
title: '操作',
width: 251,
render: (_: any, record: any) => {
return (
<Space size="middle">
{record.clarifyStatus === '5' ? (
<>
<a key="examine" onClick={() => examine(record)}></a>
<a key="viewReceipt" onClick={() => viewReceipt(record)}></a>
</>
) :
(<>
<a key="examine" onClick={() => examine(record)}></a>
<a key="edit" onClick={() => edit(record)}></a>
<a key="del" onClick={() => del(record.id)}></a>
<a key="release" onClick={() => release(record.id)}></a>
<a key="viewReceipt" onClick={() => viewReceipt(record)}></a>
</>
)
}
</Space>
)
}
},
]);
//查看回执遮罩
const [supplierLoading, setSupplierLoading] = useState<boolean>(false);
//上传文件列表
const [fileListData, setFileListData] = useState<any[]>([]);
//查看文件
const [viewFile, setViewFile] = useState<any>();
//上传文件数量限制
let fileNumber = 1;
const [columns, setCoumns] = useState<any[]>([]);
//保存按钮加载
const [buttonLoading, setButtonLoading] = useState<boolean>(false);
const [receiptInformationForm] = Form.useForm();
//提交确认框
const [visiblesubmit, setVisiblesubmit] = useState<boolean>(false);
//提交数据
const [submitData, setSubmitData] = useState<{}>({});
//澄清信息
const [clarifyData, setClarifyData] = useState<any>();
useEffect(() => {
getSectionList({ projectId: projectId }).then(res => {
getSections(projectId).then(res => {
setSectionList(res.data);
setSectionListCheckbox(getSectionCheckbox(res.data));
setCoumns([
@ -159,7 +136,15 @@ const ClarifyTheList: React.FC<{}> = () => {
},
{
title: '澄清文件',
dataIndex: 'clarifyTheFile',
dataIndex: 'attName',
render: (_: string, record: any) => {
if (_ === '-') {
return _;
}
return (
<a href={`${downloadAttachmentPath}${record.attDatasetId}`}>{_}</a>
)
}
},
{
title: '状态',
@ -168,24 +153,27 @@ const ClarifyTheList: React.FC<{}> = () => {
},
{
title: '操作',
width: 251,
width: 201,
render: (_: any, record: any) => {
return (
<Space size="middle">
{record.clarifyStatus === '5' ? (
{String(record.clarifyStatus) === '5' ? (
<>
<a key="examine" onClick={() => examine(record)}></a>
<a key="viewReceipt" onClick={() => viewReceipt(record)}></a>
</>
) :
(<>
<a key="examine" onClick={() => examine(record)}></a>
<a key="edit" onClick={() => edit(record)}></a>
<a key="del" onClick={() => del(record.id)}></a>
<a key="release" onClick={() => release(record.id)}></a>
<a key="viewReceipt" onClick={() => viewReceipt(record)}></a>
</>
)
) : String(record.clarifyStatus) === '1' ?
(<>
<a key="edit" onClick={() => edit(record)}></a>
<a key="del" onClick={() => del(record.id)}></a>
<a key="release" onClick={() => submitMethod(record)}></a>
</>
) : (
<>
<a key="examine" onClick={() => examine(record)}></a>
<a key="release" onClick={() => release(record.id)}></a>
</>
)
}
</Space>
)
@ -198,7 +186,7 @@ const ClarifyTheList: React.FC<{}> = () => {
//查看回执表头
const supplierColumns:any[] = [
const supplierColumns: any[] = [
{
title: '序号',
valueType: 'index'
@ -225,16 +213,29 @@ const ClarifyTheList: React.FC<{}> = () => {
const [attDatasetId, setAttDatasetId] = useState<string>();
const [attDatasetName, setAttDatasetName] = useState<string>();
const submitMethod = (data: any) => {
setVisiblesubmit(true)
setSubmitData(data);
}
const submitDataBasedOnId = (data: any) => {
setVisiblesubmit(false)
submitClarify(data).then(res => {
commonMessage(res);
actionRef.current.reload();
})
}
/**
* 供应商回执
* @param record
*/
const supplierReviewReceipt = (record:any) => {
console.log(record);
const supplierReviewReceipt = (record: any) => {
setVisibleModalReceipt(true);
receiptInformationForm.setFieldsValue(record);
setAttDatasetId(record.attDatasetId);
setAttDatasetName('aaa');
setAttDatasetName(record.attName);
}
/**
* 查看澄清回执信息
@ -245,12 +246,12 @@ const ClarifyTheList: React.FC<{}> = () => {
return (
<>
<Form form={receiptInformationForm}>
<Form.Item label="供应商名称" name="">
<Input bordered={false} readOnly/>
<Form.Item label="供应商名称" name="tendererOrgName">
<Input bordered={false} readOnly />
</Form.Item>
<Form.Item label="回执时间" name="clarifyCheckTime">
<Input bordered={false} readOnly/>
<Form.Item label="回执时间" name="createDate">
<Input bordered={false} readOnly />
</Form.Item>
<Form.Item label="回执附件">
@ -258,7 +259,7 @@ const ClarifyTheList: React.FC<{}> = () => {
</Form.Item>
<Form.Item label="回执内容" name="clarifyRespComment">
<Input.TextArea bordered={false} readOnly/>
<Input.TextArea bordered={false} readOnly />
</Form.Item>
</Form>
@ -267,7 +268,7 @@ const ClarifyTheList: React.FC<{}> = () => {
}
return (
<>
<Modal
<Modal
visible={visibleModalReceipt}
title="澄清回执信息"
onCancel={onCancel}
@ -286,10 +287,11 @@ const ClarifyTheList: React.FC<{}> = () => {
* 查看回执
* @param data
*/
const viewReceipt = (data:any) => {
const viewReceipt = (data: any) => {
setVisibleReceipt(true);
setSupplierLoading(true);
clarifyReply(data.id).then(res => {
console.log(res);
setSupplierLoading(false);
setSupplierData(res.data);
})
}
@ -299,14 +301,28 @@ const ClarifyTheList: React.FC<{}> = () => {
* @param data 数据
*/
const edit = (data: any) => {
setClarifyData(data);
setBidOpeningTimeFlag(data.modOpeningTime === '1');
setNegotiationStartTimeFlag(data.modNegotiationStartTime === '1');
data.tenderOpeningTime = echoDateTimeFormatter(data.tenderOpeningTime);
data.negotiationStartTime = echoDateTimeFormatter(data.negotiationStartTime);
data.replyEndTime = echoDateTimeFormatter(data.replyEndTime);
setFileListData(setFile(data));
setVisible(true);
form.setFieldsValue(data);
}
const setFile = (data: any) => {
if (isNotEmpty(data.attDatasetId) && isNotEmpty(data.attName)) {
return [{
oid: data.attDatasetId,
name: data.attName,
url: `${downloadAttachmentPath}${data.attDatasetId}`
}];
}
return [];
}
/**
* 删除
* @param data
@ -333,6 +349,8 @@ const ClarifyTheList: React.FC<{}> = () => {
setNegotiationStartTimeFlag(data.modNegotiationStartTime === '1');
data.tenderOpeningTime = echoDateTimeFormatter(data.tenderOpeningTime);
data.negotiationStartTime = echoDateTimeFormatter(data.negotiationStartTime);
data.replyEndTime = echoDateTimeFormatter(data.replyEndTime);
setViewFile(isEmpty(data.attDatasetId) ? '无' : <a href={`${downloadAttachmentPathOId}${data.attDatasetId}`}>{data.attName}</a>);
setVisible(true);
setWhetherReadonly(true);
form.setFieldsValue(data);
@ -368,9 +386,59 @@ const ClarifyTheList: React.FC<{}> = () => {
}
const save = () => {
let tenderOpeningTime = form.getFieldValue('tenderOpeningTime');
if (isNotEmpty(tenderOpeningTime)) {
if (verification()) {
return;
}
let packageIds = isNotEmpty(form.getFieldValue('packageId')) ? String(form.getFieldValue('packageId')).split(',') : [];
if (isNotEmpty(packageIds) && isNotEmpty(tenderOpeningTime) && packageIds.length !== 0) {
//获取公告信息 判断公告时间与开始时间是否大于20日
getClarifyAnnoList(packageIds).then(res => {
if (res.code === 200) {
let annoStartTimes = res.data.map((item: any) => item.annoStartTime);
let annoStartTime = getMaxDate(annoStartTimes);
if (judgmentIntervalDay(annoStartTime, tenderOpeningTime) < 20) {
Modal.confirm({
title: `您的公告发布时间为${annoStartTime},与您的开标时间${saveDateTimeFormatter(tenderOpeningTime)} 不足20日,请确认`,
onOk() {
form.submit();
},
onCancel() {
return;
},
centered: true
})
} else {
form.submit();
}
}
})
return;
}
}
form.submit();
}
const verification = () => {
if(isEmpty(form.getFieldValue('id'))){
return false;
}
//开标时间
let tenderOpeningTime = form.getFieldValue('tenderOpeningTime');
tenderOpeningTime = saveDateTimeFormatter(tenderOpeningTime);
if ((isNotEmpty(clarifyData.tenderOpeningTime) && isNotEmpty(tenderOpeningTime)) && judgmentOfTwoTimePeriods(clarifyData.tenderOpeningTime, tenderOpeningTime)) {
message.info("当前开标时间需大于原开标时间!");
return true;
}
//投标截止时间
let replyEndTime = saveDateTimeFormatter(form.getFieldValue('replyEndTime'));
if ((isNotEmpty(clarifyData.replyEndTime) && isNotEmpty(replyEndTime)) && judgmentOfTwoTimePeriods(clarifyData.replyEndTime, replyEndTime)) {
message.info("当前投标截止时间需大于原投标截止时间!");
return true;
}
return false;
}
/**
* 澄清保存
@ -378,10 +446,16 @@ const ClarifyTheList: React.FC<{}> = () => {
*/
const onFinish = (data: any) => {
setButtonLoading(true);
data.tenderOpeningTime = saveDateTimeFormatter(data.tenderOpeningTime);
data.negotiationStartTime = saveDateTimeFormatter(data.negotiationStartTime);
let packageId = typeof data.packageId === 'string' ? (data.packageId).split(',') : data.packageId;
data.packageId = packageId.join(',');
//获取附件
let file = fileListData[0];
data.attDatasetId = file.oid;
data.attName = file.name;
data.projectId = projectId;
data.tenderOpeningTime = saveDateTimeFormatter(data.tenderOpeningTime);
data.negotiationStartTime = saveDateTimeFormatter(data.negotiationStartTime);
data.replyEndTime = saveDateTimeFormatter(data.replyEndTime);
if (isEmpty(data.id)) {
addClarify(data).then(res => {
if (saveMessage(res)) {
@ -399,7 +473,6 @@ const ClarifyTheList: React.FC<{}> = () => {
setButtonLoading(false);
})
}
}
const onFinishFailed = (data: any) => {
@ -411,6 +484,7 @@ const ClarifyTheList: React.FC<{}> = () => {
setBidOpeningTimeFlag(false);
setNegotiationStartTimeFlag(false);
setVisible(true);
setFileListData([]);
form.resetFields();
}
@ -422,6 +496,58 @@ const ClarifyTheList: React.FC<{}> = () => {
setBidOpeningTimeFlag(data.target.value === '1');
}
//上传文件数量控制
const handleChange = (info: any) => {
if (whetherToUpload()) {
return;
}
let fileList = [...info.fileList];
fileList = fileList.map((file) => {
if (file.response) {
file.url = `${downloadAttachmentPathOId}${file.response.oid}`;
file.oid = file.response.oid;
}
return file;
});
setFileListData(fileList);
};
const whetherToUpload = () => {
if (fileNumber === -1) {
return false;
}
return fileListData.length >= fileNumber;
}
//上传文件大小控制
const beforeUpload = (file: any) => {
if (whetherToUpload()) {
message.info(`最多只能上传 ${fileNumber} 个文件`);
return false;
}
let flag = file.size > 52428800;
if (flag) {
message.info("上传文件大于50M请重新上传");
}
return !flag;
}
const onRemove = (e: any) => {
let data = fileListData;
let index = data.findIndex((item: any) => item.url === e.url);
data.splice(index, 1)
setFileListData([...data]);
form.resetFields(['attDatasetId']);
}
const uploadProps = {
action: '/api/core-service-ebtp-updownload/v1/attachment/upload',
onChange: handleChange,
onRemove: onRemove,
beforeUpload: beforeUpload,
};
/**
* 澄清
*/
@ -476,16 +602,19 @@ const ClarifyTheList: React.FC<{}> = () => {
</Radio.Group>
</Form.Item>
<Form.Item
label="是否修改谈判开始时间"
name="modNegotiationStartTime"
rules={[{ required: true }]}
>
<Radio.Group onChange={negotiationStartTimeRadio} disabled={whetherReadonly}>
<Radio value="0"></Radio>
<Radio value="1"></Radio>
</Radio.Group>
</Form.Item>
{
bidMethodDict !== 'procurement_mode_1' &&
<Form.Item
label="是否修改谈判开始时间"
name="modNegotiationStartTime"
rules={[{ required: true }]}
>
<Radio.Group onChange={negotiationStartTimeRadio} disabled={whetherReadonly}>
<Radio value="0"></Radio>
<Radio value="1"></Radio>
</Radio.Group>
</Form.Item>
}
{
bidOpeningTimeFlag && (
@ -494,9 +623,15 @@ const ClarifyTheList: React.FC<{}> = () => {
name="tenderOpeningTime"
rules={[{ required: true }]}
>
<DatePicker showTime format={dateTimeFormatter} disabled={whetherReadonly} />
<DatePicker
disabledDate={datePickerDisabledDate}
disabledTime={datePickerDisabledTime}
showTime={{ defaultValue: showTimeDefaultValue() }}
format={dateTimeFormatter}
disabled={whetherReadonly}
/>
</Form.Item>
)
)
}
{
@ -506,11 +641,31 @@ const ClarifyTheList: React.FC<{}> = () => {
name="negotiationStartTime"
rules={[{ required: true }]}
>
<DatePicker showTime format={dateTimeFormatter} disabled={whetherReadonly} />
<DatePicker
disabledDate={datePickerDisabledDate}
disabledTime={datePickerDisabledTime}
showTime={{ defaultValue: showTimeDefaultValue() }}
format={dateTimeFormatter}
disabled={whetherReadonly}
/>
</Form.Item>
)
}
<Form.Item
label="投标截止时间"
name="replyEndTime"
rules={[{ required: true }]}
>
<DatePicker
disabledDate={datePickerDisabledDate}
disabledTime={datePickerDisabledTime}
showTime={{ defaultValue: showTimeDefaultValue() }}
format={dateTimeFormatter}
disabled={whetherReadonly}
/>
</Form.Item>
<Form.Item
label="澄清标题"
name="clarifyTitle"
@ -530,11 +685,19 @@ const ClarifyTheList: React.FC<{}> = () => {
<Form.Item
label="澄清文件附件"
name="attDatasetId"
// rules={[{ required: true }]}
rules={[{
required: true,
message: '请上传澄清文件!'
}]}
>
<Upload name="logo" action="/upload.do" listType="picture" disabled={whetherReadonly} >
<Button icon={<UploadOutlined />}></Button>
</Upload>
{
whetherReadonly ? viewFile :
(
<Upload {...uploadProps} fileList={fileListData}>
<Button disabled={whetherReadonly}><UploadOutlined /></Button>
</Upload>
)
}
</Form.Item>
</Panel>
@ -547,6 +710,11 @@ const ClarifyTheList: React.FC<{}> = () => {
)
}
const createForm = () => {
return (
<>
@ -561,7 +729,7 @@ const ClarifyTheList: React.FC<{}> = () => {
<Button key="back" onClick={handleCancel}>
</Button>,
<Button key="submit" type="primary" loading={buttonLoading} onClick={save}>
<Button key="submit" type="primary" loading={buttonLoading} onClick={() => save()}>
</Button>,
]}
@ -572,19 +740,21 @@ const ClarifyTheList: React.FC<{}> = () => {
<Modal visible={visibleReceipt}
style={{ top: 20 }}
title="查看回执"
onCancel={() => {setVisibleReceipt(false);setSupplierData([])}}
onCancel={() => { setVisibleReceipt(false); setSupplierData([]) }}
maskClosable={false}
destroyOnClose={true}
footer={null}
centered
>
<ProTable
columns={supplierColumns}
dataSource={supplierData}
search={false}
options={false}
rowKey="id"
/>
<Spin spinning={supplierLoading}>
<ProTable
columns={supplierColumns}
dataSource={supplierData}
search={false}
options={false}
rowKey="id"
/>
</Spin>
{modalReceipt()}
</Modal>
<Modal // 删除
@ -606,6 +776,13 @@ const ClarifyTheList: React.FC<{}> = () => {
>
</Modal>
<InquiryBox
visible={visiblesubmit}
setVisible={setVisiblesubmit}
message={'确定要提交吗?'}
onOk={(data) => submitDataBasedOnId(data)}
data={submitData}
/>
</>
)
}
@ -616,6 +793,7 @@ const ClarifyTheList: React.FC<{}> = () => {
<ProTable
rowKey="id"
actionRef={actionRef}
params={{ projectId: projectId }}
columns={columns}
request={params => queryingPagingData('/api/biz-service-ebtp-tender/v1/clarifydissent/get_clarify_list', 'post', params)}
search={false}

View File

@ -1,7 +1,7 @@
/*
* @Author: liqiang
* @Date: 2020-11-30 10:37:26
* @LastEditTime: 2020-12-21 10:33:30
* @LastEditTime: 2021-01-13 14:43:50
* @LastEditors: Please set LastEditors
* @Description:
* @FilePath: \ebtp-cloud-frontend\src\pages\ClarificationAndResponse\ClarifyTheList\service.ts
@ -27,6 +27,16 @@ export async function updateClarify(data: any) {
data: data
});
}
/**
* 提交方法
* @param data
*/
export async function submitClarify(data: any) {
return request('/api/biz-service-ebtp-tender/v1/clarifydissent/submit_clarify', {
method: 'post',
data: data
});
}
/**
* 根据id查询数据
* @param id
@ -81,6 +91,25 @@ export function getSectionList(data: any) {
* 查看回执
* @param data
*/
export async function clarifyReply(id:any){
export async function clarifyReply(id: any) {
return request('/api/biz-service-ebtp-tender/v1/clarifydissent/clarify/reply/' + id);
}
/**
* 查询标段
* @param projectId
*/
export function getSections(projectId: any) {
return request('/api/biz-service-ebtp-tender/v1/clarifydissent/packages/' + projectId, {
method: 'put'
});
}
/**
* 根据标段id查询公告
* @param data
*/
export function getClarifyAnnoList(data: any) {
return request('/api/biz-service-ebtp-bid/v1/anno/clarifyAnnoList', {
method: 'post',
data: data
});
}

File diff suppressed because it is too large Load Diff

View File

@ -58,4 +58,15 @@ export async function changeMember(params?: any) {
...params
}
});
}
//提交申请
export async function applyFor(params?: any) {
return request(`/api/biz-service-ebtp-rsms/v1/jury/extract/apply/${params.id}`,{
method:'POST',
});
}
//查是否开启评标
export async function roomStatus(id?: any) {
return request(`/api/biz-service-ebtp-rsms/v1/jury/check/roomStatus/${id}`);
}