3.10 工程代码同步master

This commit is contained in:
jl-zhoujl2
2022-03-10 14:24:13 +08:00
parent 41ab55a4ac
commit 62f6b07ee2
914 changed files with 143121 additions and 29110 deletions

View File

@ -1,18 +1,17 @@
import React, { useEffect, useRef, useState } from 'react';
import '@/utils/lq.style.less';
import { Button, Input, Form, Upload, Modal, DatePicker, Checkbox, message } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
import { Button, Input, Form, Modal, DatePicker, Checkbox, message, Card } from 'antd';
import ProTable from '@ant-design/pro-table';
import { dateTimeFormatter, echoDateTimeFormatter, saveDateTimeFormatter } from '@/utils/DateUtils';
import { evaluationquestionIinsert, evaluationquestionSend, getAssessroomSuppliers } from '../service';
import { datePickerDisabledDate, datePickerDisabledTime, dateTimeFormatter, echoDateTimeFormatter, saveDateTimeFormatter, showTimeDefaultValue } from '@/utils/DateUtils';
import { evaluationquestionIinsert, evaluationquestionSend, evaluationquestionUpdate, getAssessroomSuppliers } from '../service';
import { commonMessage, saveMessage } from '@/utils/MessageUtils';
import { queryingPagingData } from '@/utils/PageUtils';
import InquiryBox from '@/utils/InquiryBox';
import { downloadAttachmentPath, downloadAttachmentPathOId, getUploadContent } from '@/utils/DownloadUtils';
import { Divider } from '@material-ui/core';
import UploadModule from '@/utils/UploadModule';
import { getProMethod, getRoomId, getSessionProjectData } from '@/utils/session';
import ExtendUpload from '@/utils/ExtendUpload';
import { btnAuthority } from '@/utils/authority';
import { isEmpty } from '@/utils/CommonUtils';
import { getRoomId, getSessionProjectData } from '@/utils/session';
import { getAssessRoomStatus } from '../../ReviewResults/service';
const layout = {
@ -25,21 +24,46 @@ const layout = {
*/
function getSectionCheckbox(data: any[]) {
let value = [];
let flag = true;
for (const item of data) {
value.push(
<Checkbox key={item.companyId} value={item.companyId} >
{item.companyName}
</Checkbox>
)
if (flag) {
value.push(
<Checkbox key={item.companyId} style={{ marginLeft: '8px' }} value={item.companyId + '-' + item.companyName} >
{item.companyName}
</Checkbox>
)
flag = false;
} else {
value.push(
<Checkbox key={item.companyId} value={item.companyId + '-' + item.companyName} >
{item.companyName}
</Checkbox>
)
}
}
return value;
}
function selectByCompanyId(companyId: any, data: any[]) {
let arr = [];
for (const item of data) {
if (item.companyId == companyId) {
arr.push(<Input key={item.companyId} value={item.companyName} bordered={false} readOnly />)
break;
}
}
return arr;
}
const ClarificationOfTheBid: React.FC = () => {
//评审室id
const assessRoomId = getRoomId();
//项目信息
const projectData = getSessionProjectData();
//项目id
const projectId = getSessionProjectData().id;
const projectId = projectData.id;
//采购方式
const proMethod = getProMethod();
//form弹窗
const [visible, setVisible] = useState<boolean>(false);
const [form] = Form.useForm();
@ -57,12 +81,24 @@ const ClarificationOfTheBid: React.FC = () => {
const actionRef = useRef<any>();
//保存遮罩
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
//上传文件列表
const [fileListData, setFileListData] = useState<any[]>([]);
//查看文件
const [viewFile, setViewFile] = useState<any>();
//上传文件数量限制
let num = 1;
//附件bid
const [bid, setBid] = useState<string>('');
//是否新建
const [whetherTheNew, setWhetherTheNew] = useState<boolean>(false);
//选择当前供应商
const [suppliersOne, setSuppliersOne] = useState<any>();
//回复附件id
const [attReplyId, setAttReplyId] = useState<string>("");
//评审室信息
const [assessRoomData, setAssessRoomData] = useState<any>({});
let showNameT: any = { tbr: '', pb: '', tb: '' }//投标人供应商
if (proMethod === 'procurement_mode_1' || proMethod === 'procurement_mode_2') {//招标
showNameT = { tbr: '投标人', pb: '评标', tb: '投标' };
} else {
showNameT = { tbr: '供应商', pb: '评审', tb: '应答' }
}
const columns: any = [
{
title: '序号',
@ -72,34 +108,30 @@ const ClarificationOfTheBid: React.FC = () => {
title: '标题',
dataIndex: 'questionTitle',
},
{
title: '质询文件',
dataIndex: 'attName',
render: (_: string, record: any) => {
if (_ === '-') {
return _;
}
return (
<a href={`${downloadAttachmentPath}${record.attId}`}>{_}</a>
)
}
},
{
title: '提问时间',
dataIndex: 'sendTime',
},
{
title: '要求回复时间',
title: '回复截止时间',
dataIndex: 'deadlineTime',
},
{
title: '投标人',
title: showNameT.tbr,
dataIndex: 'companyName',
},
{
title: '回复时间',
dataIndex: 'replyTime',
},
{
title: '状态',
dataIndex: 'editStatus',
valueEnum: {
1: { text: '未发送' },
2: { text: '已发送' }
}
},
{
title: '操作',
width: 130,
@ -107,10 +139,11 @@ const ClarificationOfTheBid: React.FC = () => {
render: (_: any, record: any) =>
String(record.editStatus) === '1' ?
[
<a key="send" onClick={() => send(record.id)}></a>
<Button type="link" hidden={btnAuthority(["ebtp-agency-project-manager", "ebtp-purchase"])} danger key="edit" onClick={() => edit(record)}></Button>,
<Button type="link" hidden={String(assessRoomData?.status) === "3" || btnAuthority(["ebtp-agency-project-manager", "ebtp-purchase"])} danger key="send" onClick={() => send(record)}></Button>
] :
[
<a key="view" onClick={() => view(record)}></a>
<Button type="link" danger key="view" onClick={() => view(record)}></Button>
]
},
]
@ -118,30 +151,61 @@ const ClarificationOfTheBid: React.FC = () => {
useEffect(() => {
//获取供应商数据
getAssessroomSuppliers(assessRoomId, projectId).then(res => {
setSuppliersData(res.data);
setSuppliersCheckbox(getSectionCheckbox(res.data));
if (res.code === 200) {
setSuppliersData(res.data);
setSuppliersCheckbox(getSectionCheckbox(res.data));
}
});
//查询评审室信息
getAssessRoomStatus(assessRoomId).then(res => {
if (res.code === 200) {
setAssessRoomData(res.data);
}
})
}, []);
/**
* 查看
* @param e 数据
* 编辑
* @param record 数据
*/
const view = (e: any) => {
let data = { ...e };
const edit = (record: any) => {
let data = { ...record };
setVisible(true);
setWhetherReadonly(true);
setBid(data.attId);
setAttReplyId(data.attReplyId);
setSuppliersOne(selectByCompanyId(data.companyId, suppliersData));
data.deadlineTime = echoDateTimeFormatter(data.deadlineTime);
data.openTime = echoDateTimeFormatter(data.openTime);
form.setFieldsValue(data);
}
/**
* 查看
* @param data 数据
*/
const view = (data: any) => {
setBid(data.attId);
setAttReplyId(data.attReplyId);
setVisible(true);
setWhetherReadonly(true);
setSuppliersOne(selectByCompanyId(data.companyId, suppliersData));
data.deadlineTime = echoDateTimeFormatter(data.deadlineTime);
data.openTime = echoDateTimeFormatter(data.openTime);
form.setFieldsValue(data);
setViewFile(isEmpty(data.attId) ? '无' : <a href={`${downloadAttachmentPathOId}${data.attId}`}>{data.attName}</a>);
}
/**
* 发送
* @param id 数据
* @param data 数据
*/
const send = (id: string) => {
const send = (data: any) => {
//回复截止时间
let deadlineTime = isEmpty(data.deadlineTime) ? null : new Date(data.deadlineTime).getTime();
let date = new Date().getTime();
if (deadlineTime !== null && deadlineTime < date) {
message.info('回复截止时间应晚于发送时间!');
return;
}
setVisibleSend(true);
setSendId(id);
setSendId(data.id);
}
/**
* 发送
@ -161,6 +225,7 @@ const ClarificationOfTheBid: React.FC = () => {
*/
const handleCancel = () => {
setVisible(false);
setWhetherTheNew(false);
setWhetherReadonly(false);
}
@ -168,91 +233,52 @@ const ClarificationOfTheBid: React.FC = () => {
* 保存
*/
const onFinish = (data: any) => {
let file = getUploadContent(data.attId);
setSubmitLoading(true);
data.attId = file.id;
data.attName = file.name;
data.assessRoomId = assessRoomId;
data.deadlineTime = saveDateTimeFormatter(data.deadlineTime);
data.openTime = saveDateTimeFormatter(data.openTime);
evaluationquestionIinsert(data).then(res => {
saveMessage(res);
setSubmitLoading(false);
setVisible(false);
actionRef.current.reload();
})
}
//上传文件数量控制
const handleChange = (info: any) => {
if (whetherToUpload()) {
return;
if (isEmpty(data.id)) {
evaluationquestionIinsert(data).then(res => {
saveMessage(res);
setSubmitLoading(false);
setVisible(false);
setWhetherTheNew(false);
setWhetherReadonly(false);
actionRef.current.reload();
})
} else {
evaluationquestionUpdate(data).then(res => {
saveMessage(res);
setSubmitLoading(false);
setVisible(false);
setWhetherTheNew(false);
setWhetherReadonly(false);
actionRef.current.reload();
})
}
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 (num === -1) {
return false;
}
return fileListData.length >= num;
}
//上传文件大小控制
const beforeUpload = (file: any) => {
if (whetherToUpload()) {
message.info(`最多只能上传 ${num} 个文件`);
return false;
}
let flag = file.size > 52428800;
if (flag) {
message.info("上传文件大于50M请重新上传");
}
return !flag;
}
const onRemove = (e: any) => {
let data = fileListData;
let a = data.findIndex(item => item.url === e.url);
data.splice(a, 1)
setFileListData([...data]);
}
const uploadProps = {
action: '/api/core-service-ebtp-updownload/v1/attachment/upload',
onChange: handleChange,
onRemove: onRemove,
beforeUpload: beforeUpload,
};
const createForm = () => {
return (
<>
<Modal visible={visible}
style={{ top: 20 }}
centered
width="50%"
title="质询内容"
width="45%"
title="澄清说明内容"
onCancel={handleCancel}
maskClosable={false}
destroyOnClose={true}
footer={whetherReadonly ? null : [
footer={whetherReadonly ? [
<Button key="back" onClick={handleCancel}>
</Button>
] : [
<Button key="back" onClick={handleCancel}>
</Button>,
<Button key="submit" type="primary" loading={submitLoading} onClick={() => form.submit()}>
</Button>,
</Button>
]}
>
<Form
@ -260,39 +286,49 @@ const ClarificationOfTheBid: React.FC = () => {
onFinish={onFinish}
form={form}
>
<Form.Item
label="选择供应商"
name="companyIdList"
rules={[{ required: true }]}
>
<Checkbox.Group disabled={whetherReadonly}>
{suppliersCheckbox}
</Checkbox.Group>
<Form.Item name="id" hidden>
<Input />
</Form.Item>
{
whetherTheNew ? (
<Form.Item
label="指定供应商"
name="companyIdList"
rules={[{ required: true, message: '请选择供应商' }]}
>
<Checkbox.Group disabled={whetherReadonly}>
{suppliersCheckbox}
</Checkbox.Group>
</Form.Item>
) : (
<Form.Item
label="指定供应商"
>
{suppliersOne}
</Form.Item>
)
}
<Form.Item
label="应答截止时间"
name="deadlineTime"
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="openTime"
rules={[{ required: true }]}
>
<DatePicker showTime format={dateTimeFormatter} disabled={whetherReadonly} />
</Form.Item>
<Form.Item
label="主题"
name="questionTitle"
rules={[{ required: true }]}
>
<Input maxLength={140} disabled={whetherReadonly} readOnly={whetherReadonly} />
<Input maxLength={100} disabled={whetherReadonly} readOnly={whetherReadonly} />
</Form.Item>
<Form.Item
@ -305,23 +341,57 @@ const ClarificationOfTheBid: React.FC = () => {
},
]}
>
{
whetherReadonly ? viewFile :
(
<Upload {...uploadProps} fileList={fileListData}>
<Button disabled={whetherReadonly}><UploadOutlined /></Button>
</Upload>
)
}
<ExtendUpload
bid={bid}
btnName="上传附件"
maxCount={1}
uploadProps={{ name: "attId", disabled: whetherReadonly }}
/>
</Form.Item>
<Form.Item
label="内容"
name="questionContext"
rules={[{ required: true }]}
>
<Input.TextArea maxLength={900} disabled={whetherReadonly} readOnly={whetherReadonly} rows={4} />
<Input.TextArea
className={whetherReadonly ? "input-invariable-grey input-text-resize" : ""}
maxLength={200}
allowClear={true}
readOnly={whetherReadonly}
bordered={!whetherReadonly}
/>
</Form.Item>
{
whetherReadonly && (
<>
<Form.Item
label="回复内容"
name="replyContext"
>
<Input.TextArea
className={whetherReadonly ? "input-invariable-grey input-text-resize" : ""}
maxLength={200}
allowClear={true}
readOnly={whetherReadonly}
bordered={!whetherReadonly}
/>
</Form.Item>
<Form.Item
label="回复材料附件"
name="attReplyId"
>
<ExtendUpload
bid={attReplyId}
btnName="附件"
maxCount={1}
uploadProps={{ name: "attReplyId", disabled: true }}
/>
</Form.Item>
</>
)
}
</Form>
</Modal>
</>
@ -332,36 +402,40 @@ const ClarificationOfTheBid: React.FC = () => {
*/
const added = () => {
setVisible(true);
setWhetherTheNew(true);
setBid('');
setAttReplyId("");
form.resetFields();
}
return (
<>
<div className="background">
<ProTable
rowKey="id"
actionRef={actionRef}
columns={columns}
params={{ assessRoomId: assessRoomId }}
request={params => queryingPagingData('/api/biz-service-ebtp-tender/v1/evaluationquestion/list', 'post', params)}
search={false}
toolBarRender={() => [
<Button key="added" onClick={added} type="primary">
<Card bordered={false} bodyStyle={{ padding: '0px 24px' }}>
<ProTable
rowKey="id"
size="small"
actionRef={actionRef}
columns={columns}
params={{ assessRoomId: assessRoomId }}
request={params => queryingPagingData('/api/biz-service-ebtp-tender/v1/evaluationquestion/list', 'post', params)}
search={false}
options={false}
pagination={{ defaultPageSize: 10 }}
toolBarRender={() => [
<Button key="added" onClick={added} type="primary" hidden={String(assessRoomData?.status) === "3" || btnAuthority(["ebtp-agency-project-manager", "ebtp-purchase"])}>
</Button>,
]}
/>
<InquiryBox
visible={visibleSend}
setVisible={setVisibleSend}
message={'确定要发送吗?'}
onOk={(data) => sendDataBasedOnId(data)}
data={sendId}
/>
{createForm()}
</div>
</>
]}
/>
<InquiryBox
visible={visibleSend}
setVisible={setVisibleSend}
message={'确定要发送吗?'}
onOk={(data) => sendDataBasedOnId(data)}
data={sendId}
/>
{createForm()}
</Card>
)
}

View File

@ -3,9 +3,7 @@ import ClarificationOfTheBid from './components/ClarificationOfTheBid';
// 标中质询澄清列表(澄清说明)
const Index: React.FC = () => {
return (
<ClarificationOfTheBid />
)
return <ClarificationOfTheBid />
}
export default Index;

View File

@ -3,7 +3,7 @@ import request from "@/utils/request";
/*
* @Author: liqiang
* @Date: 2020-12-29 10:02:56
* @LastEditTime: 2020-12-29 14:59:35
* @LastEditTime: 2021-03-29 10:27:00
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \ebtp-cloud-frontend\src\pages\Evaluation\supplier\ChallengeListInTheIndex\service.ts
@ -21,7 +21,7 @@ export function evaluationquestionIinsert(data: any) {
/**
* 获取供应商
*/
export function getAssessroomSuppliers(assessRoomId: string, projectId:string) {
export function getAssessroomSuppliers(assessRoomId: any, projectId:string) {
return request(`/api/biz-service-ebtp-tender/v1/supplier_register/assessroom/suppliers?assessRoomId=${assessRoomId}&projectId=${projectId}`);
}
/**
@ -31,3 +31,14 @@ export function getAssessroomSuppliers(assessRoomId: string, projectId:string) {
export function evaluationquestionSend(id:string){
return request('/api/biz-service-ebtp-tender/v1/evaluationquestion/send/' + id)
}
/**
* 编辑标中质询
* @param data
* @returns
*/
export function evaluationquestionUpdate (data: any) {
return request('/api/biz-service-ebtp-tender/v1/evaluationquestion/update', {
method: 'post',
data: data
});
}