修改项目首页 进行中的项目 以及项目建档相关页面信息
This commit is contained in:
@ -46,6 +46,19 @@ export default [
|
|||||||
path: '/ProjectLayout/Supplier/HomePageSectionList',
|
path: '/ProjectLayout/Supplier/HomePageSectionList',
|
||||||
component: './Project/ProjectManage/Supplier/HomePageSectionList',
|
component: './Project/ProjectManage/Supplier/HomePageSectionList',
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 项目建档
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
// 项目建档列表
|
||||||
|
path: '/ProjectLayout/ProjectFiles',
|
||||||
|
component: './ProjectFiles',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// 项目建档新增
|
||||||
|
path: '/ProjectLayout/ProjectFiles/file',
|
||||||
|
component: './ProjectFiles/file',
|
||||||
|
},
|
||||||
...bid,
|
...bid,
|
||||||
...tender,
|
...tender,
|
||||||
...open,
|
...open,
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
fetchDowntlist, fetchprojectRecords, fetchJuryUpList, fetchJuryDownlist, fetchSupplierUpList, fetchDisposalList, fetchParticipants,
|
fetchDowntlist, fetchprojectRecords, fetchJuryUpList, fetchJuryDownlist, fetchSupplierUpList, fetchDisposalList, fetchParticipants,
|
||||||
fetchSupplierDownLeftList, fetchSupplierDownRightList, fetchtlist, fetchtlistre, fetchtPageList, fetchtShotList, fetchtClarify,
|
fetchSupplierDownLeftList, fetchSupplierDownRightList, fetchtlist, fetchtlistre, fetchtPageList, fetchtShotList, fetchtClarify
|
||||||
fetchProjectFileList
|
|
||||||
} from '../services/dashboard';
|
} from '../services/dashboard';
|
||||||
import { message } from 'antd';
|
import { message } from 'antd';
|
||||||
import { getProId } from '@/utils/session';
|
import { getProId } from '@/utils/session';
|
||||||
@ -198,13 +197,13 @@ export default {
|
|||||||
yield put({ type: 'save', payload: { downlist: response.data } })
|
yield put({ type: 'save', payload: { downlist: response.data } })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
*fetchProjectFileList({ payload, callback }, { call, put }) {
|
// *fetchProjectFileList({ payload, callback }, { call, put }) {
|
||||||
const response = yield call(fetchProjectFileList, payload)
|
// const response = yield call(fetchProjectFileList, payload)
|
||||||
console.log(123)
|
// console.log(123)
|
||||||
if (response.code == 200) {
|
// if (response.code == 200) {
|
||||||
yield put({ type: 'save', payload: { projectInProgressList: response.data.records } })
|
// yield put({ type: 'save', payload: { projectInProgressList: response.data.records } })
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
*fetchprojectRecords({ payload, callback }, { call, put }) {
|
*fetchprojectRecords({ payload, callback }, { call, put }) {
|
||||||
const response = yield call(fetchprojectRecords, payload)
|
const response = yield call(fetchprojectRecords, payload)
|
||||||
if (response.code == 200 && response.data.length > 0) {
|
if (response.code == 200 && response.data.length > 0) {
|
||||||
|
@ -274,7 +274,11 @@ class manager extends PureComponent {
|
|||||||
render: (text, record) => (
|
render: (text, record) => (
|
||||||
<>
|
<>
|
||||||
<Button type="link" onClick={() => {
|
<Button type="link" onClick={() => {
|
||||||
|
sessionStorage.setItem("projectData",JSON.stringify(record))
|
||||||
|
sessionStorage.setItem("opt","view")
|
||||||
|
history.push({
|
||||||
|
pathname: '/ProjectLayout/Manager/HomePageSectionList'
|
||||||
|
});
|
||||||
|
|
||||||
}}>项目跟进
|
}}>项目跟进
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useEffect, useRef, useState } from 'react';
|
||||||
import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
|
import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
|
||||||
import { getSectionList } from './service';
|
import { getSectionList ,getRegisterInfo } from './service';
|
||||||
import { changeDict } from './utils';
|
import { changeDict } from './utils';
|
||||||
import { getDefId, getDicData, getProId, getProMethod } from '@/utils/session';
|
import { getDefId, getDicData, getProId, getProMethod } from '@/utils/session';
|
||||||
import { Card } from 'antd';
|
import {Card, Typography} from 'antd';
|
||||||
import '@/assets/zjl_style.less';
|
import '@/assets/zjl_style.less';
|
||||||
|
const { Text } = Typography;
|
||||||
import {
|
import {
|
||||||
getBidOpenTime,
|
getBidOpenTime,
|
||||||
getStartReviewTime,
|
getStartReviewTime,
|
||||||
@ -31,6 +32,15 @@ const HomePageSectionList: React.FC<{}> = () => {
|
|||||||
const [isReviewRule, setIsReviewRule] = useState<boolean>(false);
|
const [isReviewRule, setIsReviewRule] = useState<boolean>(false);
|
||||||
//进度环节有无 true-有 false-无
|
//进度环节有无 true-有 false-无
|
||||||
const [isProcess, setIsProcess] = useState<boolean>(true);
|
const [isProcess, setIsProcess] = useState<boolean>(true);
|
||||||
|
const [data,setData] = useState({
|
||||||
|
companyName: '',
|
||||||
|
contactName: '',
|
||||||
|
contactTelephone: '',
|
||||||
|
contactFax: '',
|
||||||
|
contactAddress:'',
|
||||||
|
contactEmail:'',
|
||||||
|
fixedLine: ''
|
||||||
|
});
|
||||||
//资审开标时间有无 true-有 false-无
|
//资审开标时间有无 true-有 false-无
|
||||||
const [preBidOpen, setPreBidOpen] = useState<any>({
|
const [preBidOpen, setPreBidOpen] = useState<any>({
|
||||||
preBidOpenName: '资审开标时间',
|
preBidOpenName: '资审开标时间',
|
||||||
@ -48,7 +58,20 @@ const HomePageSectionList: React.FC<{}> = () => {
|
|||||||
const [operationSele, setOperationSele] = useState<any>({
|
const [operationSele, setOperationSele] = useState<any>({
|
||||||
sectionName: '采购包跟进',
|
sectionName: '采购包跟进',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let registerInfo: any = {};
|
||||||
|
const fetchData = async () =>{
|
||||||
|
getRegisterInfo(getProId()).then((res: any) => {
|
||||||
|
console.log(res.data)
|
||||||
|
registerInfo = res.data
|
||||||
|
setData(res.data);
|
||||||
|
});
|
||||||
|
}
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
||||||
|
fetchData();
|
||||||
|
|
||||||
|
|
||||||
//初始化column字段显示
|
//初始化column字段显示
|
||||||
if (defId == 'bid_prequalification') {
|
if (defId == 'bid_prequalification') {
|
||||||
//公开招标(预审+后审)
|
//公开招标(预审+后审)
|
||||||
@ -154,7 +177,7 @@ const HomePageSectionList: React.FC<{}> = () => {
|
|||||||
|
|
||||||
const columns: ProColumns<any>[] = [
|
const columns: ProColumns<any>[] = [
|
||||||
{
|
{
|
||||||
title: '序号',
|
title: '序号112233',
|
||||||
render: (_: any, record: any, index: any) => {
|
render: (_: any, record: any, index: any) => {
|
||||||
return index + 1;
|
return index + 1;
|
||||||
},
|
},
|
||||||
@ -238,7 +261,51 @@ const HomePageSectionList: React.FC<{}> = () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card bodyStyle={{ padding: '24px 24px 0px' }} bordered={false}>
|
<div style={{ padding: 24 }}>
|
||||||
|
<Card title="报名信息" bordered={false}>
|
||||||
|
{/* 报名单位名称 - 独占一行 */}
|
||||||
|
<div style={{ marginBottom: 16, display: 'flex', alignItems: 'center' }}>
|
||||||
|
<Text type="secondary" style={{ width: '160px', display: 'inline-block' }}>报名单位名称</Text>
|
||||||
|
<Text>{data.companyName}</Text>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 使用Flex布局实现统一对齐 */}
|
||||||
|
<div style={{ display: 'flex', flexWrap: 'wrap', gap: 32 }}>
|
||||||
|
{/* 联系人名称和联系人地址 - 优化对齐 */}
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', marginBottom: 16, flex: '1 1 45%' }}>
|
||||||
|
<Text type="secondary" style={{ width: '160px', display: 'inline-block' }}>联系人名称</Text>
|
||||||
|
<Text style={{ marginRight: 40, maxWidth: 300 }}>{data.contactName}</Text>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', marginBottom: 16, flex: '1 1 45%' }}>
|
||||||
|
<Text type="secondary" style={{ width: '160px', display: 'inline-block' }}>联系人地址</Text>
|
||||||
|
<Text style={{ maxWidth: 300 }}>{data.contactAddress}</Text>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 联系电话和联系人邮箱 - 优化对齐 */}
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', marginBottom: 16, flex: '1 1 45%' }}>
|
||||||
|
<Text type="secondary" style={{ width: '160px', display: 'inline-block' }}>联系电话</Text>
|
||||||
|
<Text style={{ marginRight: 40, maxWidth: 300 }}>{data.contactTelephone}</Text>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', marginBottom: 16, flex: '1 1 45%' }}>
|
||||||
|
<Text type="secondary" style={{ width: '160px', display: 'inline-block' }}>联系人邮箱</Text>
|
||||||
|
<Text style={{ maxWidth: 300 }}>{data.contactEmail}</Text>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 固话和传真 - 优化对齐 */}
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', marginBottom: 16, flex: '1 1 45%' }}>
|
||||||
|
<Text type="secondary" style={{ width: '160px', display: 'inline-block' }}>固话</Text>
|
||||||
|
<Text style={{ maxWidth: 300 }}>{data.fixedLine}</Text>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', marginBottom: 16, flex: '1 1 45%' }}>
|
||||||
|
<Text type="secondary" style={{ width: '160px', display: 'inline-block' }}>传真</Text>
|
||||||
|
<Text style={{ maxWidth: 300 }}>{data.contactFax}</Text>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
<Card bodyStyle={{ padding: '24px 24px 0px' }} bordered={false} title={"标段信息"}>
|
||||||
<ProTable
|
<ProTable
|
||||||
columns={columns}
|
columns={columns}
|
||||||
actionRef={actionRef}
|
actionRef={actionRef}
|
||||||
@ -248,43 +315,43 @@ const HomePageSectionList: React.FC<{}> = () => {
|
|||||||
//调用分页方法
|
//调用分页方法
|
||||||
request={async (params) =>
|
request={async (params) =>
|
||||||
await getSectionList(getProId()).then(async (response: any) => {
|
await getSectionList(getProId()).then(async (response: any) => {
|
||||||
let data = response.data;
|
let data = response.data;
|
||||||
let param = {
|
let param = {
|
||||||
sectionIds: data.map((ele: any) => ele.id),
|
sectionIds: data.map((ele: any) => ele.id),
|
||||||
};
|
};
|
||||||
//获取资审开标时间&开标时间
|
//获取资审开标时间&开标时间
|
||||||
await getBidOpenTime({ ...param }).then(async (res) => {
|
await getBidOpenTime({ ...param }).then(async (res) => {
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
const openTimeData = res.data;
|
const openTimeData = res.data;
|
||||||
//获取开始评审时间
|
//获取开始评审时间
|
||||||
await getStartReviewTime({ ...param }).then((resp) => {
|
await getStartReviewTime({ ...param }).then((resp) => {
|
||||||
if (resp.code == 200) {
|
if (resp.code == 200) {
|
||||||
data.forEach((e: any) => {
|
data.forEach((e: any) => {
|
||||||
e.preOpenTime =
|
e.preOpenTime =
|
||||||
openTimeData[`${e.id}_1`] == undefined ? '未定' : openTimeData[`${e.id}_1`];
|
openTimeData[`${e.id}_1`] == undefined ? '未定' : openTimeData[`${e.id}_1`];
|
||||||
e.openTime =
|
e.openTime =
|
||||||
openTimeData[`${e.id}_2`] == undefined ? '未定' : openTimeData[`${e.id}_2`];
|
openTimeData[`${e.id}_2`] == undefined ? '未定' : openTimeData[`${e.id}_2`];
|
||||||
e.time = "未定";
|
e.time = "未定";
|
||||||
if (resp.data.length == 0) {
|
if (resp.data.length == 0) {
|
||||||
} else {
|
} else {
|
||||||
resp.data.forEach((ele: any) => {
|
resp.data.forEach((ele: any) => {
|
||||||
if (ele.sectionId == e.id) {
|
if (ele.sectionId == e.id) {
|
||||||
e.time = ele.openTime;
|
e.time = ele.openTime;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
data: getDataInPage(params.pageSize, params.current, data),
|
data: getDataInPage(params.pageSize, params.current, data),
|
||||||
success: response.success,
|
success: response.success,
|
||||||
total: data.length,
|
total: data.length,
|
||||||
pageSize: params.pageSize,
|
pageSize: params.pageSize,
|
||||||
current: params.current,
|
current: params.current,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
rowKey="id"
|
rowKey="id"
|
||||||
@ -295,6 +362,7 @@ const HomePageSectionList: React.FC<{}> = () => {
|
|||||||
dateFormatter="string"
|
dateFormatter="string"
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,3 +28,15 @@ export async function getSectionList(params: any) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询标段列表
|
||||||
|
* @method POST
|
||||||
|
*/
|
||||||
|
export async function getRegisterInfo(params: any) {
|
||||||
|
return request('/api/biz-service-ebtp-tender/v1/supplier_register/packages/supplied/getSupplierRegisterInfo/' + params, {
|
||||||
|
method: 'GET',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ const ProjectFiles: React.FC = () => {
|
|||||||
{(
|
{(
|
||||||
<Button type="link" onClick={() =>
|
<Button type="link" onClick={() =>
|
||||||
history.push({
|
history.push({
|
||||||
pathname: '/ProjectFiles/file',
|
pathname: '/ProjectLayout/ProjectFiles/file',
|
||||||
state: {
|
state: {
|
||||||
record: record,
|
record: record,
|
||||||
opt: 'view',
|
opt: 'view',
|
||||||
@ -108,7 +108,7 @@ const ProjectFiles: React.FC = () => {
|
|||||||
{(record.status=== 4) &&(
|
{(record.status=== 4) &&(
|
||||||
<Button type="link" onClick={() =>
|
<Button type="link" onClick={() =>
|
||||||
history.push({
|
history.push({
|
||||||
pathname: '/ProjectFiles/file',
|
pathname: '/ProjectLayout/ProjectFiles/file',
|
||||||
state: {
|
state: {
|
||||||
record: record,
|
record: record,
|
||||||
opt: 'edit'
|
opt: 'edit'
|
||||||
@ -120,7 +120,7 @@ const ProjectFiles: React.FC = () => {
|
|||||||
{(record.status=== 1) && (
|
{(record.status=== 1) && (
|
||||||
<Button type="link" onClick={() => {
|
<Button type="link" onClick={() => {
|
||||||
history.push({
|
history.push({
|
||||||
pathname: '/ProjectFiles/file',
|
pathname: '/ProjectLayout/ProjectFiles/file',
|
||||||
state: {
|
state: {
|
||||||
record: record,
|
record: record,
|
||||||
opt: 'assign',
|
opt: 'assign',
|
||||||
|
@ -14,7 +14,7 @@ import ProForm, {
|
|||||||
} from '@ant-design/pro-form';
|
} from '@ant-design/pro-form';
|
||||||
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
|
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
|
||||||
import {
|
import {
|
||||||
dispatch, initProjectEntrustForCosco,
|
dispatch, getProjectOne, initProjectEntrustForCosco,
|
||||||
updateProjectEntrust
|
updateProjectEntrust
|
||||||
} from './service';
|
} from './service';
|
||||||
import styles from './style.less';
|
import styles from './style.less';
|
||||||
@ -184,9 +184,10 @@ const ProjectFileCreate: React.FC<Record<string, any>> = () => {
|
|||||||
const formRef = useRef<FormInstance>();
|
const formRef = useRef<FormInstance>();
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const recordInfo = location?.state?.record;
|
const projectData: any | null = sessionStorage.getItem('projectData');
|
||||||
|
const recordInfo = location?.state?.record?location?.state?.record: projectData?JSON.parse(projectData): undefined;
|
||||||
const myRoleCode = location?.state?.myRoleCode;
|
const myRoleCode = location?.state?.myRoleCode;
|
||||||
const opt = location?.state?.opt;
|
const opt = location?.state?.opt? location?.state?.opt:sessionStorage.getItem("opt")?sessionStorage.getItem("opt"):null;
|
||||||
const isAgencyAdmin = myRoleCode === 'ebtp-agency-admin' || false;//是否是代理机构管理员
|
const isAgencyAdmin = myRoleCode === 'ebtp-agency-admin' || false;//是否是代理机构管理员
|
||||||
const isDrafts = recordInfo?.status === 4;//ProjectEntrust表中 status 4 代表 草稿
|
const isDrafts = recordInfo?.status === 4;//ProjectEntrust表中 status 4 代表 草稿
|
||||||
const isEntrustProject = recordInfo?.organization === 'organization_1';
|
const isEntrustProject = recordInfo?.organization === 'organization_1';
|
||||||
@ -239,11 +240,11 @@ const ProjectFileCreate: React.FC<Record<string, any>> = () => {
|
|||||||
regionDict = regionDictId
|
regionDict = regionDictId
|
||||||
}
|
}
|
||||||
if(recordInfo.bidOrgDict === 'organization_2'){
|
if(recordInfo.bidOrgDict === 'organization_2'){
|
||||||
if(recordInfo.openTenderForm === 'open_tender_form_1'){
|
// if(recordInfo.openTenderForm === 'open_tender_form_1'){
|
||||||
recordInfo.openTenderForm = '001'
|
// recordInfo.openTenderForm = '001'
|
||||||
}else if(recordInfo.openTenderForm === 'open_tender_form_2'){
|
// }else if(recordInfo.openTenderForm === 'open_tender_form_2'){
|
||||||
recordInfo.openTenderForm = '002'
|
// recordInfo.openTenderForm = '002'
|
||||||
}
|
// }
|
||||||
recordInfo.openTenderForm = openTenderFormMap.get(recordInfo.openTenderForm);
|
recordInfo.openTenderForm = openTenderFormMap.get(recordInfo.openTenderForm);
|
||||||
//委托代理项目表中 跟 项目建档 表字段数据统一
|
//委托代理项目表中 跟 项目建档 表字段数据统一
|
||||||
recordInfo.procurementMode = recordInfo.bidMethodDict ;
|
recordInfo.procurementMode = recordInfo.bidMethodDict ;
|
||||||
@ -265,6 +266,10 @@ const ProjectFileCreate: React.FC<Record<string, any>> = () => {
|
|||||||
}
|
}
|
||||||
}, [formRef, recordInfo, opt])
|
}, [formRef, recordInfo, opt])
|
||||||
|
|
||||||
|
// useEffect( () => {
|
||||||
|
|
||||||
|
// },[projectId,opt]);
|
||||||
|
|
||||||
const [error, setError] = useState<ErrorField[]>([]);
|
const [error, setError] = useState<ErrorField[]>([]);
|
||||||
const getErrorInfo = (errors: ErrorField[]) => {
|
const getErrorInfo = (errors: ErrorField[]) => {
|
||||||
const errorCount = errors.filter((item) => item.errors.length > 0).length;
|
const errorCount = errors.filter((item) => item.errors.length > 0).length;
|
||||||
|
@ -291,6 +291,8 @@ const ProjectFiles: React.FC = () => {
|
|||||||
type="primary"
|
type="primary"
|
||||||
key="primary"
|
key="primary"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
sessionStorage.removeItem("projectData");
|
||||||
|
sessionStorage.removeItem("opt")
|
||||||
history.push('/ProjectFiles/file?action=create');
|
history.push('/ProjectFiles/file?action=create');
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
Reference in New Issue
Block a user