更新版本库

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,148 +1,159 @@
import { UnorderedListOutlined } from "@ant-design/icons"
import {UnorderedListOutlined} from "@ant-design/icons"
import ProTable, {ActionType, ProColumns} from "@ant-design/pro-table"
import {Button, Card, Divider, Drawer, message, Modal, Spin, Table} from "antd"
import React, {useEffect, useRef, useState} from "react"
import BiddingAnnouncement from "./BiddingAnnouncement"
import {GetfileList, GetNoticeList, removeNotice, releaseNotice, releaseNoticeAgain, ApprovalNotice} from "../service"
import {
GetfileList,
GetNoticeList,
removeNotice,
releaseNotice,
releaseNoticeAgain,
ApprovalNotice,
GetNoticeUsablePackage
} from "../service"
import style from "./style.less"
import {getProId} from "@/utils/session";
import {GetPublicityUsablePackage} from "@/pages/Calibration/BidPublicityResult/service";
/*
* 招标公告开始
*/
interface DataItem {
key:number,
announcementName: string,
associatedPackage: string,
writeTime: Date,
announcementState: string,
onSubmit: (values: any) => void;//点击保存的回调
key: number,
announcementName: string,
associatedPackage: string,
writeTime: Date,
announcementState: string,
onSubmit: (values: any) => void;//点击保存的回调
}
const BiddingAnnouncementList: React.FC<{}> = (props) => {
const [selectedRowsState, setSelectedRows] = useState<DataItem[]>([]);
const [updateVisible, setUpdateVisible] = useState<boolean>(false)
const [updateChange, setUpdateChange] = useState<string>('');//弹窗名
const [type, setType] = useState<any>('cease');//弹窗类型
const [pkId,setPkId] =useState<string>();//公告/邀请函id
const [tpId,setTpId] = useState<any>('4419993030303037111');//项目id
const [dataSource,setdataSource]= useState<any[]>([]); //公告列表数据
const [dataSourcePage,setDataSourcePage] = useState<any>(1);//当前页数
const [dataSourceAllNum,setDataSourceAllNum] = useState<any>();//总行数
const [dataSourceNum,setDataSourceNum] = useState<any>(20);//当前每页行数
const [ChangeNoticeListVisible,setChangeNoticeListVisible] =useState<boolean>(false); //变更公告列表窗状态
const [ChangeNoticeListdataSource,setChangeNoticeListdataSource]= useState<any[]>([]); //变更公告列表数据
const [Refresh, setRefresh] = useState<any>(Math.random);
const [pageloading,setPageloading]=useState<boolean>(false);//加载遮罩
const [selectedRowsState, setSelectedRows] = useState<DataItem[]>([]);
const [updateVisible, setUpdateVisible] = useState<boolean>(false)
const [updateChange, setUpdateChange] = useState<string>('');//弹窗名
const [type, setType] = useState<any>('cease');//弹窗类型
const [pkId, setPkId] = useState<string>();//公告/邀请函id
const [tpId, setTpId] = useState<any>(getProId);//项目id
const [dataSource, setdataSource] = useState<any[]>([]); //公告列表数据
const [dataSourcePage, setDataSourcePage] = useState<any>(1);//当前页数
const [dataSourceAllNum, setDataSourceAllNum] = useState<any>();//总行数
const [dataSourceNum, setDataSourceNum] = useState<any>(20);//当前每页行数
const [ChangeNoticeListVisible, setChangeNoticeListVisible] = useState<boolean>(false); //变更公告列表窗状态
const [ChangeNoticeListdataSource, setChangeNoticeListdataSource] = useState<any[]>([]); //变更公告列表数据
const [FpkId,setFpkId] = useState<string>("");//变更公告父id
const [pageloading, setPageloading] = useState<boolean>(false);//加载遮罩
const columns: ProColumns<DataItem>[] = [
{
title: '公告名称',
dataIndex: 'annoTitle',
key:'annoTitle',
align:'center',
{
title: '公告名称',
dataIndex: 'annoTitle',
key: 'annoTitle',
align: 'center',
},
{
title: '关联标段',
dataIndex: 'sectionNames',
key:'sectionNames',
align:'center',
},
{
title: '起草时间',
dataIndex: 'annoStartTime',
key:"annoStartTime",
align:'center',
valueType: 'dateTime',
},
{
title: '公告状态',
dataIndex: 'status',
key:"status",
align:'center',
valueEnum: {
1: { text: '起草', status: '' },
2: { text: '已提交', status: '' },
3: { text: '已审批', status: '' },
4: { text: '已拒绝', status: '' },
5: { text: '已发布', status: '' },
6: { text: '发布失败', status: '' },
},
},
{
title: '操作',
dataIndex: 'status',
key:"",
align:'center',
render: (_:any, record: any) => {
let btn1= (
<>
<a onClick={() => toEdit(record)}></a><Divider type="vertical"/>
<a onClick={() => handleApproval(record)}></a><Divider type="vertical"/>
<a onClick={() => handleRemove(record)}></a>
</>
);
let btn2= (
<>
<a onClick={() => toRead(record)}></a><Divider type="vertical"/>
</>
);
let btn3= (
<>
<a onClick={() => handleRelease(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
let btn4= (
<>
<a onClick={() => toEdit(record)}></a><Divider type="vertical"/>
<a onClick={() => handleApproval(record)}></a><Divider type="vertical"/>
<a onClick={() => handleRemove(record)}></a>
</>
);
let btn5= (
<>
<a onClick={() => toRead(record)}></a><Divider type="vertical"/>
<a onClick={() => handleReleaseAgain(record)}></a><Divider type="vertical"/>
<a onClick={() => toChange(record)}></a>
</>
);
let btn6= (
<>
<a onClick={() => handleRelease(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
},
{
title: '关联标段',
dataIndex: 'sectionNames',
key: 'sectionNames',
align: 'center',
},
{
title: '起草时间',
dataIndex: 'annoStartTime',
key: "annoStartTime",
align: 'center',
valueType: 'dateTime',
},
{
title: '公告状态',
dataIndex: 'status',
key: "status",
align: 'center',
valueEnum: {
1: {text: '起草', status: ''},
2: {text: '已提交', status: ''},
3: {text: '已审批', status: ''},
4: {text: '已拒绝', status: ''},
5: {text: '已发布', status: ''},
6: {text: '发布失败', status: ''},
},
},
{
title: '操作',
dataIndex: 'status',
key: "",
align: 'center',
render: (_: any, record: any) => {
let btn1 = (
<>
<a onClick={() => toEdit(record)}></a><Divider type="vertical"/>
<a onClick={() => handleApproval(record)}></a><Divider type="vertical"/>
<a onClick={() => handleRemove(record)}></a>
</>
);
let btn2 = (
<>
<a onClick={() => toRead(record)}></a><Divider type="vertical"/>
</>
);
let btn3 = (
<>
<a onClick={() => handleRelease(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
let btn4 = (
<>
<a onClick={() => toEdit(record)}></a><Divider type="vertical"/>
<a onClick={() => handleApproval(record)}></a><Divider type="vertical"/>
<a onClick={() => handleRemove(record)}></a>
</>
);
let btn5 = (
<>
<a onClick={() => toRead(record)}></a><Divider type="vertical"/>
<a onClick={() => handleReleaseAgain(record)}></a><Divider type="vertical"/>
<a onClick={() => toChange(record)}></a>
</>
);
let btn6 = (
<>
<a onClick={() => handleRelease(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
/*if(true){
return btn3;
}else*/ if(record.status==1){
return btn1;
}else if(record.status==2){
return btn2;
}else if(record.status==3){
return btn3;
}else if(record.status==4){
return btn4;
}else if(record.status==5){
return btn5;
}else if(record.status==6){
return btn6;
} else {
return (<></>)
}
},
/*if(true){
return btn3;
}else*/
if (record.status == 1) {
return btn1;
} else if (record.status == 2) {
return btn2;
} else if (record.status == 3) {
return btn3;
} else if (record.status == 4) {
return btn4;
} else if (record.status == 5) {
return btn5;
} else if (record.status == 6) {
return btn6;
} else {
return (<></>)
}
},
},
];
const ChangeNoticeListcolumns = [
},
];
const ChangeNoticeListcolumns :ProColumns<DataItem>[]= [
{
title: '公告标题',
dataIndex: 'annoTitle',
@ -156,44 +167,53 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
},
{
title: '公告状态',
dataIndex: 'docStartTime',
dataIndex: 'status',
key: "status",
align: 'center',
valueEnum: {
1: {text: '起草', status: '一'},
2: {text: '已提交', status: ''},
3: {text: '已审批', status: ''},
4: {text: '已拒绝', status: ''},
5: {text: '已发布', status: ''},
6: {text: '发布失败', status: ''},
},
},
{
title: '操作',
dataIndex: 'status',
render: (_: any, record: any) => {
let btn1= (
<>
<a onClick={() => toEdit4Change(record)}></a><Divider type="vertical"/>
<a onClick={() => handleApproval(record)}></a><Divider type="vertical"/>
<a onClick={() => handleRemove(record)}></a>
</>
);
let btn2= (
<>
<a onClick={() => toRead(record)}></a><Divider type="vertical"/>
</>
);
let btn3= (
<>
<a onClick={() => handleRelease(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
let btn4= (
let btn1 = (
<>
<a onClick={() => toEdit4Change(record)}></a><Divider type="vertical"/>
<a onClick={() => handleApproval(record)}></a><Divider type="vertical"/>
<a onClick={() => handleRemove(record)}></a>
</>
);
let btn5= (
let btn2 = (
<>
<a onClick={() => toRead(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
let btn6= (
let btn3 = (
<>
<a onClick={() => handleRelease(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
let btn4 = (
<>
<a onClick={() => toEdit4Change(record)}></a><Divider type="vertical"/>
<a onClick={() => handleApproval(record)}></a><Divider type="vertical"/>
<a onClick={() => handleRemove(record)}></a>
</>
);
let btn5 = (
<>
<a onClick={() => toRead(record)}></a>
</>
);
let btn6 = (
<>
<a onClick={() => handleRelease(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
@ -202,17 +222,18 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
/*if(true){
return btn3;
}else*/ if(record.status==1){
}else*/
if (record.status == 1) {
return btn1;
}else if(record.status==2){
} else if (record.status == 2) {
return btn2;
}else if(record.status==3){
} else if (record.status == 3) {
return btn3;
}else if(record.status==4){
} else if (record.status == 4) {
return btn4;
}else if(record.status==5){
} else if (record.status == 5) {
return btn5;
}else if(record.status==6){
} else if (record.status == 6) {
return btn6;
} else {
return (<></>)
@ -221,102 +242,110 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
},
];
/*拉取数据 beg*/
useEffect(()=>{
GetList("page")
},[tpId,dataSourceNum,dataSourcePage])
const GetList = (props: any)=>{
setPageloading(true);
if(props=="page"){//初始化页面
GetNoticeList({
"annoNature": 1,
"annoTitle": "",
"csAnnoId": "",
"pageNo": dataSourcePage,
"pageSize":dataSourceNum,
"source": 11,
"tpId": tpId
}).then(res => {
if(res!=null&&res.message=="success"){
setdataSource(res.data.records)
setDataSourceAllNum(res.total)
} else{
message.error('程序出错,亲您稍后在世');
}
setPageloading(false);
})
}else {
GetNoticeList({
"annoNature": 7,
"annoTitle": "",
"csAnnoId": props,
"pageNo": 1,
"pageSize": 100,
"source": 11,
"tpId": tpId
}).then(res => {
if (res.message== "success"&&res.data!=null) {
setChangeNoticeListdataSource(res.data.records);
setPageloading(false);
}else {
message.error('程序出错,亲您稍后在世');
setChangeNoticeListVisible(false);
setPageloading(false);
}
})
/*拉取数据 beg*/
useEffect(() => {
GetList("page")
}, [tpId, dataSourceNum, dataSourcePage,Refresh])
const GetList = (props: any) => {
setPageloading(true);
if (props == "page") {//初始化页面
GetNoticeList({
"annoNature": 1,
"annoTitle": "",
"csAnnoId": "",
"pageNo": dataSourcePage,
"pageSize": dataSourceNum,
"source": 11,
"tpId": tpId
}).then(res => {
if (res != null && res.message == "success") {
setdataSource(res.data.records)
setDataSourceAllNum(res.total)
} else {
message.error(res.message);
}
setPageloading(false);
})
} else {
GetNoticeList({
"annoNature": 7,
"annoTitle": "",
"csAnnoId": props,
"pageNo": 1,
"pageSize": 100,
"source": 11,
"tpId": tpId
}).then(res => {
if (res.message == "success" && res.data != null) {
setChangeNoticeListdataSource(res.data.records);
setPageloading(false);
} else {
message.error(res.message);
setChangeNoticeListVisible(false);
setPageloading(false);
}
})
}
/*拉取数据 end*/
/*新增招标公告*/
const toEditAdd = (props: any) => {
setUpdateVisible(true);
setUpdateChange('新建招标公告')
setType("new");
}
/*编辑招标公告*/
const toEdit = (props: any) => {
setUpdateVisible(true);
setUpdateChange('编辑招标公告')
setPkId(props.id);
setType("edit");
}
/*查看招标公告*/
const toRead = (props: any) => {
setUpdateVisible(true);
setUpdateChange('查看招标公告')
setType("read");
setPkId(props.id);
}
/*查询变更招标公告列表数据*/
const toChange = (props: any) => {
setChangeNoticeListVisible(true);
setPkId( props.id);
GetList(props.id);
}
/*创建变更公告*/
const creatChangeNotice = () => {
setUpdateVisible(true);
setUpdateChange('创建变更公告')
setType("changeNew");
}
/*编辑招标公告*/
const toEdit4Change = (props: any) => {
setUpdateVisible(true);
setUpdateChange('编辑招标公告')
setPkId(props.id);
setType("edit");
}
}
/*拉取数据 end*/
/*新增招标公告*/
const toEditAdd = (props: any) => {
GetNoticeUsablePackage(tpId).then(res=>{
if (res != null && res.message == "success") {
if (res.data.length == 0) {
message.warn("没有可关联的标包!")
}else{
setUpdateVisible(true);
setUpdateChange('新建招标公告')
setType("new");
}
}else {
message.error("查询标包信息失败:"+res.message)
}
})
}
/*编辑招标公告*/
const toEdit = (props: any) => {
setUpdateVisible(true);
setUpdateChange('编辑招标公告')
setPkId(props.id);
setType("edit");
}
/*查看招标公告*/
const toRead = (props: any) => {
setUpdateVisible(true);
setUpdateChange('查看招标公告')
setType("read");
setPkId(props.id);
}
/*查询变更招标公告列表数据*/
const toChange = (props: any) => {
setChangeNoticeListVisible(true);
setPkId(props.id);
setFpkId(props.id)
GetList(props.id);
}
/*创建变更公告*/
const creatChangeNotice = () => {
setUpdateVisible(true);
setUpdateChange('创建变更公告');
setType("changeNew");
}
/*编辑变更公告*/
const toEdit4Change = (props: any) => {
setUpdateVisible(true);
setUpdateChange('编辑变更公告')
setPkId(props.id);
setType("change");
}
/**
@ -325,12 +354,18 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
*/
const handleRemove = async (record: any) => {
setPageloading(true);
removeNotice(record.id).then(res=>{
if(res!=null&&res=="success"){
removeNotice(record.id).then(res => {
if (res != null && res.message== "success") {
message.success('删除成功');
}else {
message.error('删除失败');
if(type == "change"||type == "changeNew"){
GetList(FpkId);
}else{
setRefresh(Math.random()+1)
}
} else {
message.error('删除失败:'+res.message);
}
setRefresh(Math.random()+1)
setPageloading(false);
});
@ -339,18 +374,24 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
* 批量删除
* */
const handleRemoveMore = async () => {
if(selectedRowsState.length!=0){
if (selectedRowsState.length != 0) {
setPageloading(true);
let param=[]
for(const item of selectedRowsState){
let param = []
for (const item of selectedRowsState) {
param.push(item.id);
}
removeNotice(param).then(res=>{
if(res!=null&&res=="success"){
removeNotice(param).then(res => {
if (res != null && res.message == "success") {
message.success('删除成功');
}else {
message.error('删除失败');
if(type == "change"||type == "changeNew"){
GetList(FpkId);
}else{
setRefresh(Math.random()+1)
};
} else {
message.error('删除失败:'+res.message);
}
setRefresh(Math.random()+1)
setPageloading(false);
});
}
@ -358,103 +399,132 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
/**
* 发布
* */
const handleRelease = async (record:any) => {
const handleRelease = async (record: any) => {
setPageloading(true);
releaseNotice(record.id).then(res=>{
if(res!=null&&res=="success"){
releaseNotice(record.id).then(res => {
if (res != null && res.message == "success") {
message.success('发布成功');
}else {
message.error('发布失败');
if(type == "change"||type == "changeNew"){
GetList(FpkId);
}else{
setRefresh(Math.random()+1)
}
} else {
message.error('发布失败:'+res.message);
}
setPageloading(false);
});
};
/**
* 再次发布
* */
const handleReleaseAgain = async (record:any) => {
const handleReleaseAgain = async (record: any) => {
setPageloading(true);
releaseNoticeAgain(record.id).then(res=>{
if(res!=null&&res=="success"){
releaseNoticeAgain(record.id).then(res => {
if (res != null && res.message == "success") {
message.success('发布成功');
}else {
message.error('发布失败');
if(type == "change"||type == "changeNew"){
GetList(FpkId);
}else{
setRefresh(Math.random()+1)
}
} else {
message.error('发布失败:'+res.message);
}
setRefresh(Math.random()+1)
setPageloading(false);
});
};
/**
* 发起审批
* */
const handleApproval = async (record:any) => {
const handleApproval = async (record: any) => {
setPageloading(true);
ApprovalNotice(record.id).then(res=>{
if(res!=null&&res=="success"){
ApprovalNotice(record.id).then(res => {
if (res != null && res.message == "success") {
message.success('发起审批成功');
}else {
message.error('发起审批失败');
if(type == "change"||type == "changeNew"){
GetList(FpkId);
}else{
setRefresh(Math.random()+1)
}
} else {
message.error('发起审批失败:'+res.message);
}
setRefresh(Math.random()+1)
setPageloading(false);
});
};
return (
<>
return (
<>
<Card>
<Divider style={{margin: "8px 0px"}}/>
<div className={style.label}>
<UnorderedListOutlined style={{marginRight: "8px"}}/>
</div>
<ProTable
loading={pageloading}
toolBarRender={() => [
<Button type="primary" onClick={() => toEditAdd([])}></Button>,
<Button onClick={() => {
handleRemoveMore()
}}></Button>,
]}
search={false}
options={false}
columns={columns}
dataSource={dataSource}
rowKey={"id"}
rowSelection={{
onChange: (_, selectedRows) => setSelectedRows(selectedRows),
}}
pagination={{
hideOnSinglePage:true,
pageSize: dataSourceNum,
current: dataSourcePage,
total: dataSourceAllNum,
pageSizeOptions: ['10', '20', '50'],
onShowSizeChange: ((current, size) => setDataSourceNum(size)),
onChange: ((page, pageSize) => setDataSourcePage(page))
}}
<Card>
<Divider style={{margin: "8px 0px"}}/>
<div className={style.label}>
<UnorderedListOutlined style={{marginRight: "8px"}}/>
</div>
<ProTable
loading={pageloading}
toolBarRender={() => [
<Button type="primary" onClick={() => toEditAdd([])}></Button>,
<Button onClick={()=>{handleRemoveMore()}}></Button>,
]}
search={false}
options={false}
columns={columns}
dataSource={dataSource}
rowKey={"id"}
rowSelection={{
onChange: (_, selectedRows) => setSelectedRows(selectedRows),
}}
pagination={{
pageSize:dataSourceNum,
current:dataSourcePage,
total: dataSourceAllNum,
pageSizeOptions:['10','20','50'],
onShowSizeChange:((current, size)=>setDataSourceNum(size)),
onChange:((page, pageSize)=>setDataSourcePage(page))
}}
/>
/>
</Card>
{ChangeNoticeListVisible?(
<Modal
destroyOnClose
title={"招标文件变更列表"}
visible={ChangeNoticeListVisible}
onOk={() => {
setChangeNoticeListVisible(false)
}}
onCancel={() => setChangeNoticeListVisible(false)}
width={1000}
closable={false}
>
<Button type="primary" onClick={() => creatChangeNotice()}></Button>,
<ProTable
search={false}
options={false}
columns={ChangeNoticeListcolumns}
dataSource={ChangeNoticeListdataSource}
pagination={{ hideOnSinglePage:true,pageSize: 50}} scroll={{y: 240}}
loading={pageloading}
/>
</Modal>
):null}
</Card>
<Modal
destroyOnClose
title={"招标文件变更列表"}
visible={ChangeNoticeListVisible}
onOk={()=>{setChangeNoticeListVisible(false)}}
onCancel={()=>setChangeNoticeListVisible(false)}
width={1000}
closable={false}
>
<Button type="primary" onClick={()=>creatChangeNotice()} ></Button>,
<Table
columns={ChangeNoticeListcolumns}
dataSource={ChangeNoticeListdataSource}
pagination={{ pageSize: 50 }} scroll={{ y: 240 }}
loading={pageloading}
/>
</Modal>
<BiddingAnnouncement titleName={updateChange} pkId={pkId} type={type} tpId={tpId} onCancel={() => setUpdateVisible(false)} modalVisible={updateVisible} />
</>
)
{updateVisible?(
<BiddingAnnouncement key={Math.random()} SX={()=>setRefresh(Math.random()+1)} titleName={updateChange} pkId={pkId} type={type} tpId={tpId}
onCancel={() => setUpdateVisible(false)} modalVisible={updateVisible} FpkId={FpkId} ChangeSX={()=>GetList(FpkId)}/>
):null}
</>
)
}

View File

@ -1,216 +1,343 @@
import { BarsOutlined, UploadOutlined } from "@ant-design/icons"
import {BarsOutlined, UploadOutlined} from "@ant-design/icons"
import {Button, Card, Checkbox, Col, Collapse, Form, Input, message, Modal, Row, Spin, Upload} from "antd"
import React, {useEffect, useState} from "react"
import React, {useEffect, useRef, useState} from "react"
import style from './style.less'
import {GetfileUsablePackage, GetfileMsg, creatfile, creatNotice} from "../service";
import Weboffice from "@/pages/webOffice/weboffice";
import {deleteFileObjId, getFileBidList, SnowflakeID} from "@/services/untilService";
interface BiddingDocumentProps {
modalVisible: boolean;
titleName:string;
onCancel: () => void;
type:string;
tpId:string;
pkId:string;
}
const layout = {
labelCol: { span: 7 },
wrapperCol: { span: 10 },
};
modalVisible: boolean;
titleName: string;
onCancel: () => void;
type: string;
tpId: string;
pkId: string;
SX: () => void;
}
const layout = {
labelCol: {span: 7},
wrapperCol: {span: 10},
};
const BiddingDocument: React.FC<BiddingDocumentProps> = (props) => {
const { Panel } = Collapse;
const { titleName , modalVisible , onCancel,type ,tpId,pkId} = props;
const [TpPackageId,setTpPackageId] = useState<any[]>([]); //标包信息
const [spinning,setSping]=useState<boolean>();//加载遮罩
const [editInformation,setEditInformation]=useState<boolean>(false);//是否可编
const [form] =Form.useForm();
const {Panel} = Collapse;
const {titleName, modalVisible, onCancel, type, tpId, pkId, SX} = props;
const [TpPackageId, setTpPackageId] = useState<any[]>([]); //标包信息
const [spinning, setSping] = useState<boolean>();//加载遮罩
const [editInformation, setEditInformation] = useState<boolean>(false);//是否可编
const [form] = Form.useForm();
const [docFileCode, setDocFileCode] = useState<string>("");//文档id
const [docBtnName, setDocBtnName] = useState<any>("");//文档按钮文字
const [docReadOnly, setDocReadOnly] = useState<string>("false");//是否可编辑
const [docSaveBtn, setDocSaveBtn] = useState<string>("compact");//保存按钮是否展示
const [UploadList, setUploadList] = useState<any>(); //存upload列表
const [UploadID, setUploadID] = useState<any>(); //upload 业务id
/*weboffice 相关*/
const WebofficeRef = useRef<Weboffice>(null);
const onRef = (ref) => {
/* this.child= ref;*/
}
useEffect(()=>{
Int();
useEffect(() => {
SnowflakeID().then(res => {
Int();
});
form.resetFields();//清除form中数据
},[type,pkId]);
}, [type, pkId]);
useEffect(() => {
UploadMethod();
}, [UploadID]);
const Int = () => {
setSping(true);
if(type=="cease"){
return ;
}else if(type=="new") {//==========================================================新建
GetfileUsablePackage (tpId).then(res => {
if(res!=null&&res.message=="success"){
let thisData= [];
if (type == "cease") {
return;
} else if (type == "new") {//==========================================================新建
GetfileUsablePackage(tpId).then(res => {
if (res != null && res.message == "success") {
let thisData = [];
if (res.data.length == 0) {
message.warn("没有可关联的标包!")
onCancel();
}
for (const item of res.data) {
thisData.push({"label": item.bsName, "value": item.bsId})
}
SnowflakeID().then(res => {
setUploadID(res.id);
});
setTpPackageId(thisData);
}else {
message.error('程序出错,亲您稍后在世');
setDocReadOnly("false")
setDocSaveBtn("compact")
setDocBtnName("新建")
} else {
message.error('程序出错,请您稍后再试:'+res.message);
onCancel();
}
setSping(false);
setEditInformation(false);//可编辑
});
} else if(type=="edit") {//=========================================================修改
GetfileUsablePackage (tpId).then(res => {
if(res!=null&&res.message=="success"){
let thisData1 = [];
} else if (type == "edit") {//=========================================================修改
let thisData1:any [];
GetfileUsablePackage(tpId).then(res => {
if (res != null && res.message == "success") {
let thisData2 = [];
for (const item of res.data) {
thisData1.push({"label": item.bsName, "value": item.bsId})
thisData2.push({"label": item.bsName, "value": item.bsId})
}
GetfileMsg (pkId).then(res => {
if(res!=null&&res.message=="success"){
const data = res.data;
for(const item of data.sections){
thisData1.push({"label":item.bsName,"value":item.bsId})
}
setTpPackageId(thisData1);
form.setFieldsValue({
"documentName":data.documentName,
"documentSetId":data.documentSetId,
"sectionIds":data.sectionIds
},
)
setSping(false);
setEditInformation(false);//可编辑
}else {
message.error('程序出错,亲您稍后在世');
onCancel();
}
});
}else {
message.error('程序出错,亲您稍后在世');
thisData1=thisData2;
} else {
message.error('程序出错,请您稍后再试:'+res.message);
onCancel();
}
GetfileMsg(pkId).then(res => {
if (res != null && res.message == "success") {
const data = res.data;
let defPak=[];
for (const item of data.sections) {
thisData1.push({"label": item.bsName, "value": item.bsId})
defPak.push(item.bsId);
}
setTpPackageId(thisData1);
form.setFieldsValue({
"documentName": data.documentName,
"documentSetId": data.documentSetId,
"sectionIds":defPak,
},
)
setUploadID(data.documentSetId);
setSping(false);
setEditInformation(false);//可编辑
setDocFileCode(data.contentFileId);
setDocReadOnly("false")
setDocSaveBtn("compact")
setDocBtnName("编辑")
} else {
message.error('程序出错,请您稍后再试:'+res.message);
onCancel();
}
});
});
} else if(type=="read") {//=========================================================查看
GetfileMsg (pkId).then(res => {
if(res!=null&&res.message=="success"){
} else if (type == "read") {//=========================================================查看
GetfileMsg(pkId).then(res => {
if (res != null && res.message == "success") {
const data = res.data;
let thisData1=[];
for(const item of data.sections){
thisData1.push({"label":item.bsName,"value":item.bsId})
let thisData1 = [];
let defPak=[];
for (const item of data.sections) {
thisData1.push({"label": item.bsName, "value": item.bsId})
defPak.push(item.bsId);
}
setTpPackageId(thisData1);
form.setFieldsValue({
"documentName":data.documentName,
"documentSetId":data.documentSetId,
"sectionIds":data.sectionIds
"documentName": data.documentName,
"documentSetId": data.documentSetId,
"sectionIds":defPak,
},
)
setSping(false);
setEditInformation(true)
}else {
message.error('程序出错,亲您稍后在世');
setDocFileCode(data.contentFileId);
setUploadID(data.documentSetId);
setDocReadOnly("true")
setDocSaveBtn("none")
setDocBtnName("查看")
} else {
message.error('程序出错,请您稍后再试:'+res.message);
onCancel();
}
});
}
/*upload*/
}
const onFinish = (values: any) => {
const packageMsg=[];
for (const item of TpPackageId){//包数据
for (const item1 of form.getFieldValue("sectionIds"))
if(item.value== item1)
packageMsg.push({"bsId":item.value,"bsName":item.label})
}
const fromData ={
"documentName":form.getFieldValue("documentName"),
"documentSetId":form.getFieldValue("documentSetId")==null?"132456879":form.getFieldValue("documentSetId"),//附件id
"sectionIds":packageMsg,
}
creatfile(type,fromData).then(res => {
console.log(res.data);
});
console.log('Success:', fromData);
const onFinish = async (values: any) => {
form.validateFields().then(res => {
if (type == "new") {//==========================================================新建
if (WebofficeRef.current!.uninitialized == true) {//
message.warn("您未编辑office文件");
return;
} else {
if (WebofficeRef.current!.uploadDOCType != "success") {
message.warn("您未保存office文件");
return;
}
}
} else if (type == "edit") {//=========================================================修改
if (WebofficeRef.current!.uninitialized == false) {//
if (WebofficeRef.current!.uploadDOCType != "success") {
message.warn("您未保存office文件");
return;
}
}
}
const packageMsg = [];
for (const item of TpPackageId) {//包数据
for (const item1 of form.getFieldValue("sectionIds"))
if (item.value == item1)
packageMsg.push({"bsId": item.value, "bsName": item.label})
}
const fromData = {
"tpId": tpId,
"documentName": form.getFieldValue("documentName"),
"documentSetId": UploadID,
"sections": packageMsg,
"contentFileId": WebofficeRef.current!.DocfileCode,
"id": pkId
}
setSping(true);
creatfile(type, fromData).then(res => {
if (res != null && res.message == "success") {
message.success("成功");
setSping(true);
onCancel();
SX();
} else {
message.error("保存失败:"+res.message);
setSping(true);
}
});
}).catch(res => {
message.warn("您有未填写的选项!")
})
};
const renderFooter = () => {
if (type=="read") {
if (type == "read") {
return (
<>
<Button onClick={onCancel}></Button>
<Button onClick={onCancel}></Button>
</>
);
}else {
} else {
return (
<>
<Button onClick={onFinish}></Button>
<Button onClick={onFinish}></Button>
<Button onClick={onCancel}></Button>
</>
);
}
}
return (
<Modal
mask={true}
destroyOnClose
title={titleName}
visible={modalVisible}
onCancel={() => onCancel()}
className="返回"
width={1000}
bodyStyle={{ padding: '32px 40px 48px',height: "600px", overflowY: 'auto' }}
footer={renderFooter()}
>
<Spin spinning={spinning}>
<Card>
<Form
{...layout}
name="basic"
form={form}
>
<Form.Item
label="文件名称"
name="documentName"
>
<Input readOnly={editInformation} />
</Form.Item>
<Form.Item
label="关联标段"
name="sectionIds"
>
<Checkbox.Group
options={TpPackageId}
style={{ width: '100%' }}
disabled={editInformation}
>
</Checkbox.Group>
</Form.Item>
<Form.Item
label="招标文件附件"
name="documentSetId"
>
<div className={style.bidding}>
<div className="uploadTotal">
<Upload>
<Button type="primary" disabled={editInformation} className="upload"><UploadOutlined /></Button>
</Upload>
<p className="uploadLabel">100M文件</p>
</div>
</div>
</Form.Item>
</Form>
<Collapse defaultActiveKey={['1']} ghost expandIcon={() => <BarsOutlined />}>
<Panel header="招标文件内容" key="1">
<Card style={{textAlign: "center"}}>
<div >
<Button>PageOffice控件</Button>
<p style={{color: '#ff7070'}}></p>
</div>
</Card>
</Panel>
</Collapse>
</Card>
</Spin>
</Modal>
)
const UploadMethod = () => {
getFileBidList(UploadID).then(res => {
setUploadList(res)
})
}
const UploadOnchange = async (file:any) => {
let fileMsg = file.file;
if (fileMsg.status === 'removed') {
await deleteFileObjId(fileMsg.uid)
setUploadList(file.fileList)
}
if (fileMsg.status === 'done') {
message.success("上传成功");
await UploadMethod();
} else if (fileMsg.status === 'error') {
message.error("上传失败");
}
}
// @ts-ignore
return (
<Modal
mask={true}
destroyOnClose
title={titleName}
visible={modalVisible}
onCancel={() => onCancel()}
className="返回"
width={1000}
bodyStyle={{padding: '32px 40px 48px', height: "600px", overflowY: 'auto'}}
footer={renderFooter()}
>
<Spin spinning={spinning}>
<Card>
<Form
{...layout}
name="basic"
form={form}
>
<Form.Item
label="文件名称"
name="documentName"
rules={[
{
required: true,
message: '当前项不可为空',
},
]}
>
<Input readOnly={editInformation}/>
</Form.Item>
<Form.Item
label="关联标段"
name="sectionIds"
rules={[
{
required: true,
message: '当前项不可为空',
},
]}
>
<Checkbox.Group
options={TpPackageId}
style={{width: '100%'}}
disabled={editInformation}
>
</Checkbox.Group>
</Form.Item>
<Form.Item
label="招标文件附件"
name="documentSetId"
>
<div className={style.bidding}>
<div className="uploadTotal">
<Upload
{...UploadMethod}
action={'/api/core-service-ebtp-updownload/v1/attachment/upload'}
data={{"businessId": UploadID}}
fileList={UploadList}
onChange={UploadOnchange}
>
<Button type="primary" disabled={editInformation} className="upload"><UploadOutlined/></Button>
</Upload>
<p className="uploadLabel">100M文件</p>
</div>
</div>
</Form.Item>
</Form>
<Collapse defaultActiveKey={['1']} ghost expandIcon={() => <BarsOutlined/>}>
<Panel header="招标文件内容" key="1">
<Card style={{textAlign: "center"}}>
<div>
{docBtnName != "" ?
<Weboffice memberBtnName={docBtnName} readonly={docReadOnly} btnStyle={docSaveBtn} btnName={"保存"}
DocfileCode={docFileCode} ref={WebofficeRef} onRef={onRef}/>
: null
}
</div>
</Card>
</Panel>
</Collapse>
</Card>
</Spin>
</Modal>
)
}
export default BiddingDocument

View File

@ -1,11 +1,19 @@
import { UnorderedListOutlined } from "@ant-design/icons"
import ProTable, { ProColumns } from "@ant-design/pro-table"
import ProTable, {ActionType, ProColumns} from "@ant-design/pro-table"
import {Button, Card, Divider, message} from "antd"
import React, {useEffect, useState} from "react"
import React, {useEffect, useRef, useState} from "react"
import BiddingDocument from "./BiddingDocument"
import {GetfileList, removefile, RemoveList, removeNotice} from "../service"
import {
GetfileList,
GetfileUsablePackage,
GetNoticeUsablePackage,
removefile,
RemoveList,
removeNotice
} from "../service"
import style from "./style.less"
import {getProId} from "@/utils/session";
interface DataItem {
@ -24,14 +32,15 @@ interface DataItem {
const BiddingDocumentList: React.FC<{}> = (props) => {
const [Refresh,setRefresh] = useState<any>(Math.random);
const [selectedRowsState, setSelectedRows] = useState<DataItem[]>([]);
const [updateVisible, setUpdateVisible] = useState<boolean>(false)
const [updateChange, setUpdateChange] = useState<string>('')
/*列表数据*/
const [dataSource,setDataSource]= useState<any[]>([]);
const [type,setType] = useState<any>();// 状态 编辑or 查看
const [tpId,setTpId] = useState<any>("4419993030303037111");//项目id
const [pkId, setPkId] = useState<any>({});//公告id
const [tpId,setTpId] = useState<any>(getProId);//项目id
const [pkId, setPkId] = useState<any>("");//公告id
const [dataSourcePage,setDataSourcePage] = useState<any>(1);//当前页数
@ -39,6 +48,7 @@ const BiddingDocumentList: React.FC<{}> = (props) => {
const [dataSourceNum,setDataSourceNum] = useState<any>(20);//当前每页行数
const [pageloading,setPageloading]=useState<boolean>(false);//加载遮罩
const columns: ProColumns<DataItem>[] = [
{
title: '招标文件',
@ -69,7 +79,7 @@ const BiddingDocumentList: React.FC<{}> = (props) => {
);
let btn2= (
<>
<a onClick={() => toRead(record)}></a><Divider type="vertical"/>
<a onClick={() => toRead(record)}></a>
</>
);
/*if(true){
@ -85,6 +95,7 @@ const BiddingDocumentList: React.FC<{}> = (props) => {
},
];
useEffect(()=>{
setPageloading(true);
GetfileList({
"pageNo": dataSourcePage,
@ -95,40 +106,53 @@ const BiddingDocumentList: React.FC<{}> = (props) => {
setDataSource(res.data.records)
setDataSourceAllNum(res.data.total)
}else {
message.error('程序出错,您稍后在世');
message.error('程序出错,您稍后再试:'+res.message);
}
setPageloading(false);
})
},[tpId,dataSourcePage,dataSourceNum])
},[tpId,dataSourcePage,dataSourceNum,Refresh])
const toAdd = (props: any) => {
setUpdateVisible(true);
setUpdateChange('新建招标文件')
setType("new");
GetfileUsablePackage(tpId).then(res=>{
if (res != null && res.message == "success") {
if (res.data.length == 0) {
message.warn("没有可关联的标包!")
}else{
setUpdateChange('新建招标文件')
setType("new");
setUpdateVisible(true);
}
}else {
message.error("查询标包信息失败:"+res.message)
}
})
}
const toEdit = (props: any) => {
setUpdateVisible(true);
setUpdateChange('修改招标文件')
setPkId(props.id)
setType("edit");
setUpdateVisible(true);
}
const toRead = (props: any) => {
setUpdateVisible(true);
setUpdateChange('查看招标文件')
setPkId(props.id)
setType("read");
setUpdateVisible(true);
}
const toRemove = (props: any) => {
setPageloading(true);
removefile(props.id).then(res=>{
if(res!=null&&res.message=="success"){
message.success('删除成功');
}else {
message.error("删除失败");
message.error("删除失败:"+res.message);
}
setPageloading(false);
setRefresh(Math.random()+1)
})
}
@ -140,18 +164,20 @@ const BiddingDocumentList: React.FC<{}> = (props) => {
param.push(item.id);
}
removefile(param).then(res => {
console.log(res)
if (res != null && res.message == "success") {
message.success('删除成功');
} else {
message.error("删除失败");
message.error("删除失败:"+res.message);
}
setPageloading(false);
setRefresh(Math.random()+1)
});
}
}
const updateChangeProps =['新增招标文件','修改招标文件']
return (
<Card>
@ -175,6 +201,7 @@ const BiddingDocumentList: React.FC<{}> = (props) => {
onChange: (_, selectedRows) => setSelectedRows(selectedRows),
}}
pagination={{
hideOnSinglePage:true,
pageSize:dataSourceNum,
current:dataSourcePage,
total: dataSourceAllNum,
@ -182,10 +209,11 @@ const BiddingDocumentList: React.FC<{}> = (props) => {
onShowSizeChange:((current, size)=>setDataSourceNum(size)),
onChange:((page, pageSize)=>setDataSourcePage(page))
}}
/>
<BiddingDocument titleName={updateChange} type={type} tpId={tpId} pkId={pkId} onCancel={() => setUpdateVisible(false)} modalVisible={updateVisible}/>
{updateVisible?(
<BiddingDocument key={Math.random()} SX={()=>setRefresh(Math.random()+1)} titleName={updateChange} type={type} tpId={tpId} pkId={pkId} onCancel={() => setUpdateVisible(false)} modalVisible={updateVisible}/>
):null}
</Card>
)
}

View File

@ -30,7 +30,7 @@ interface BiddingAnnouncementProps {
titleName:string;
onCancel: () => void;
type:string;
tpId:"4419993030303037111";
tpId:string;
pkId:string;
}
@ -75,7 +75,7 @@ const BiddingInvitation: React.FC<BiddingAnnouncementProps> = (props) => {
setTpPackageId(value);
setSping(false);
}else{
message.error('程序出错,您稍后在世');
message.error('程序出错,您稍后再试');
onCancel();
}
});
@ -109,12 +109,12 @@ const BiddingInvitation: React.FC<BiddingAnnouncementProps> = (props) => {
setSping(false);
}else{
onCancel();
message.error('程序出错,您稍后在世');
message.error('程序出错,您稍后再试');
}
});
}else{
onCancel();
message.error('程序出错,您稍后在世');
message.error('程序出错,您稍后再试');
}
@ -142,7 +142,7 @@ const BiddingInvitation: React.FC<BiddingAnnouncementProps> = (props) => {
});
setSping(false);
}else{
message.error('程序出错,您稍后在世');
message.error('程序出错,您稍后再试');
onCancel();
}
});
@ -191,7 +191,13 @@ const BiddingInvitation: React.FC<BiddingAnnouncementProps> = (props) => {
"sections":packageMsg,
}
creatNotice(type,fromData).then(res => {
console.log(res.data);
if(res!=null&&res.message=="success"){
message.success("成功");
onCancel();
}else{
message.error("失败");
}
});
}
}
@ -200,7 +206,6 @@ const BiddingInvitation: React.FC<BiddingAnnouncementProps> = (props) => {
/*提交数据校验 beg*/
const check = (data:any) => {
let msg="false";
console.log("",form.validateFields);
// docStartTime 招标文件获取开始时间
// docEndTime 招标文件获取截止时间
// replyEndTime 投标截止时间
@ -290,7 +295,7 @@ const BiddingInvitation: React.FC<BiddingAnnouncementProps> = (props) => {
setChoiceHallData(res.data)
setChoiceHallType(true);
}else{
message.error('程序出错,您稍后在世');
message.error('程序出错,您稍后再试');
}
})
@ -308,7 +313,6 @@ num: "0"
openDate: "2020-12-09 (14:30~16:00)"
ruleId: "1322091125061713920"
startTime: "14:30"*/
console.log("确认",data);
}
return (
<Modal

View File

@ -5,6 +5,7 @@ import React, {useEffect, useRef, useState} from "react"
import BiddingInvitation from "./BiddingInvitation"
import {GetfileList, GetNoticeList, removeNotice, releaseNotice, releaseNoticeAgain, ApprovalNotice} from "../service"
import style from "./style.less"
import {getProId} from "@/utils/session";
/*
* 招标公告开始
@ -25,7 +26,7 @@ const BiddingInvitationList: React.FC<{}> = (props) => {
const [updateChange, setUpdateChange] = useState<string>('');//弹窗名
const [type, setType] = useState<any>('cease');//弹窗类型
const [pkId,setPkId] =useState<string>();//公告/邀请函id
const [tpId,setTpId] = useState<any>('4419993030303037111');//项目id
const [tpId,setTpId] = useState<any>(getProId);//项目id
const [dataSource,setdataSource]= useState<any[]>([]); //公告列表数据
const [dataSourcePage,setDataSourcePage] = useState<any>(1);//当前页数
const [dataSourceAllNum,setDataSourceAllNum] = useState<any>();//总行数
@ -153,7 +154,7 @@ const BiddingInvitationList: React.FC<{}> = (props) => {
setdataSource(res.data.records)
setDataSourceAllNum(res.total)
} else{
message.error('程序出错,您稍后在世');
message.error('程序出错,您稍后再试');
}
setPageloading(false);
})

View File

@ -1,3 +1,4 @@
export interface NoticeData {
key?: number;
annoEndTime?:string;//结束日期

View File

@ -106,6 +106,6 @@ export async function removefile(params?:any){
/*开标大厅选择*/
export async function getChooseRoom(params?:any){
let method="get";
return request('/api/biz-service-ebtp-bid/v1/bizbidopenhall/list?opendate'+params,{method:method})
return request('/api/biz-service-ebtp-opening/v1/bizbidopenhall/list?openDate='+params,{method:method})
}