Merge branch '20220413-zjl-公共服务平台' into 'master-20220527'

5.27 公共服务平台对接

See merge request eshop/fe_service_ebtp_frontend!88
This commit is contained in:
周建龙
2022-05-27 15:56:46 +08:00
13 changed files with 610 additions and 92 deletions

View File

@ -71,6 +71,10 @@ export default [
},
],
},
{//公共服务平台
path: '/PublicPlatform',
component: './Bid/BiddingAnnouncement/components/PublicPlatform',
},
//==============================================================引入的业务路由
...approvalForm,//审批单

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

View File

@ -18,6 +18,7 @@ import { history } from "umi";
import { btnAuthority } from "@/utils/authority";
import { getApprProcessList } from "@/utils/SeleApprovalProcess/service"
import SeleApprovalProcess from "@/utils/SeleApprovalProcess"
import { isEmpty } from "@/utils/CommonUtils"
import { checkObjectId } from "@/utils/DownloadUtils"
/*
@ -158,6 +159,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit(record)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -167,6 +169,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn3 = (
@ -176,6 +179,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn4 = (
@ -185,6 +189,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -194,6 +199,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button type="text" onClick={() => toChange(record)}></Button>
</>
);
@ -205,6 +211,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
@ -272,6 +279,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit4Change(record)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -281,6 +289,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn3 = (
@ -290,6 +299,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn4 = (
@ -299,6 +309,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -308,6 +319,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn6 = (
@ -317,6 +329,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);

View File

@ -1,4 +1,5 @@
import { Checkbox, Col, Form, Row } from "antd";
import { getDefId } from "@/utils/session";
import { Checkbox, Col, Form, Row, Typography } from "antd";
import React, { useEffect, useState } from "react"
import { getMediaService } from "../service";
@ -26,7 +27,8 @@ const Media: React.FC<MediaProps> = (props) => {
} = props;
//============================================================state
const [medias, mediasSet] = useState<any>([]);
const { Text } = Typography
const defId = getDefId(); //流程id
//mediaReleases: [{mediaId: "9", status: 1}] 9-无需推送外网; 0没发 1发布成功 2发布失败
let mediaStatus = {};//媒体对应发布状态
mediaReleases?.length > 0 && mediaReleases.map((item: any) => {
@ -81,7 +83,19 @@ const Media: React.FC<MediaProps> = (props) => {
{
medias?.length != 0 &&
medias.map((item: any) => {
return (
return defId == "recruit_multi" ? (
item.id != "6" && <Col span={24} key={item.id + 'Col'}>
<Checkbox disabled={item.id != '9' && mediaType} key={item.id} value={item.id}>
{item.webName}
<span style={{ color: mediaStatus[item.id] == '发布成功' ? 'rgb(7,193,96)' : 'red' }}>
{
mediaReleases?.length > 0 && mediaStatus[item.id] != undefined && item.id != '9' &&
`${mediaStatus[item.id]}`
}
</span>
</Checkbox>
</Col>
) : (
<Col span={24} key={item.id + 'Col'}>
<Checkbox disabled={item.id != '9' && mediaType} key={item.id} value={item.id}>
{item.webName}
@ -99,6 +113,7 @@ const Media: React.FC<MediaProps> = (props) => {
</Row>
</Checkbox.Group>
</Form.Item>
{defId != "recruit_multi" && <Text type="secondary"></Text>}
</>
)
}

View File

@ -0,0 +1,406 @@
import React, { useEffect, useState } from 'react';
import logo from '@/images/opening/logo.svg';
import styles from './style.less';
import './style.less';
import { Anchor, BackTop, Button, Collapse, Descriptions, Form, Input, message, Modal, PageHeader, Space, Spin, Tooltip, Typography } from 'antd';
import { btnAuthority } from '@/utils/authority';
import { ArrowUpOutlined, CaretRightOutlined, InfoCircleOutlined } from '@ant-design/icons';
import { getURLInformation, isNotEmpty, returnDictVal } from '@/utils/CommonUtils';
import ExtendUpload from '@/utils/ExtendUpload';
import { getPublicData, savePublicData } from '../service';
import { getDefId, getDicData, getProMethod } from '@/utils/session';
import { getAllFlowNameByRoomType } from '@/utils/FlowUtils';
import exampleImg from '@/images/stamp/stamp_example.png'
const layout = {
labelCol: {
span: 6,
},
wrapperCol: {
span: 17,
},
};
const validateMessages = {
required: '请填写当前项内容',
};
const PublicPlatform: React.FC<{}> = () => {
//loading
const [loading, setLoading] = useState<boolean>(false);
//右侧浮动层监听Dom
const [container, setContainer] = useState<HTMLDivElement | null>(null);
//初始数据
const [initialData, setInitialData] = useState<any>({});
//只读状态readOnly 默认只读
const [readOnly, setReadOnly] = useState<boolean>(true);
//公示or公告 true-公示 false-公告
const [annoType, setAnnoType] = useState<boolean>(false);
//示例弹窗Example
const [exampleVisible, setExampleVisible] = useState<boolean>(false);
//annoId 公告公示id
const annoId = getURLInformation("id");
//资审流程所处阶段 (roomType 2是后审1是预审)
const roomType = getURLInformation('roomType') === null ? '2' : getURLInformation('roomType');
//采购方式
const proMethod = getProMethod();
//所有流程名
const flowName = getAllFlowNameByRoomType(proMethod, roomType);
//流程id
const defId = getDefId();
//获取字典
const getDict: any = getDicData();
const dictData = JSON.parse(getDict);
const { TextArea } = Input;
const { Panel } = Collapse;
const { Text } = Typography;
const { Link } = Anchor;
const [form] = Form.useForm();
//Input
function returnInput(name: string | string[], label: string, readonly: boolean, initialValue: string | number | null, rules?: any[], placeholder?: string, maxLength?: number, extra?: React.ReactNode, width?: string | number, type?: string, suffix?: React.ReactNode) {
return (
<Form.Item
name={name}
label={label}
rules={rules}
extra={extra}
initialValue={initialValue}
>
<Input
bordered={!readonly}
readOnly={readonly}
placeholder={placeholder}
style={{ width }}
maxLength={maxLength ? maxLength : 20}
type={type}
suffix={suffix}
/>
</Form.Item>
)
}
//TextArea
function returnArea(name: string | string[], label: string, readonly: boolean, initialValue: string | null, rules?: any[], placeholder?: string, extra?: React.ReactNode, maxLength?: number) {
return (
<Form.Item
name={name}
label={label}
rules={rules}
extra={extra}
initialValue={initialValue}
>
<TextArea
bordered={!readonly}
showCount={!readonly}
readOnly={readonly}
maxLength={maxLength ? maxLength : 1000}
rows={3}
autoSize={readonly}
placeholder={placeholder}
/>
</Form.Item>
)
}
//Upload
function returnUpload(name: string | string[], label: string, readonly: boolean, initialValue?: string, rules?: any[], extra?: React.ReactNode) {
return (
<Form.Item
name={name}
label={label}
rules={rules}
extra={
<div style={{ color: '#b30000', marginTop: 16 }}>
<p>1pdf文件</p>
<p>2pdf请务必进行手写签名及盖章
<Tooltip title="查看示例">
<InfoCircleOutlined style={{ marginLeft: 4 }} onClick={() => setExampleVisible(true)} />
</Tooltip>
</p>
<p></p>
</div>
}
>
<ExtendUpload bid={initialValue} btnName="上传文件" maxCount={1} uploadProps={{ disabled: readonly, accept: ".pdf" }} />
</Form.Item>
)
}
//公示-标段(包)遍历
const sectionsRender = (sections: any[] | null, readonly: boolean) => {
if (isNotEmpty(sections)) {
const activeKeyList = (length: number) => {
const list: number[] = []
for (let i = 0; i < length; i++) {
list.push(i);
}
return list;
}
return sections?.map((item, index) => (
<Descriptions bordered key={index}>
<Descriptions.Item label="标段(包)名称" span={2} key="1">
{item.bidSectName}
</Descriptions.Item>
<Descriptions.Item label="标段(包)编号" key="2">
{item.bidSectBizNum}
</Descriptions.Item>
<Descriptions.Item label="中标候选人" key="3">
<Collapse
defaultActiveKey={isNotEmpty(item.suppliers) ? activeKeyList(item.suppliers.length) : []}
expandIcon={({ isActive }) => <CaretRightOutlined rotate={isActive ? 90 : 0} />}
>
{suppliersRender(item.suppliers, readonly)}
</Collapse>
</Descriptions.Item>
</Descriptions>
))
}
return null;
}
//公示-中标候选人遍历
const suppliersRender = (suppliers: any[] | null, readonly: boolean) => {
if (isNotEmpty(suppliers)) {
return suppliers?.map((item, index) => (
<Panel header={item.companyName} key={index}>
{returnInput([item.sectionId, item.id, 'pmName'], "项目负责人姓名", readonly, item.pmName, [{ required: !readonly }], "项目负责人姓名")}
{returnInput([item.sectionId, item.id, 'pmCode'], "项目负责人证件号码", readonly, item.pmCode, [{ required: !readonly }], "项目负责人证件号码", 18)}
{returnArea([item.sectionId, item.id, 'pmCeritficates'], "项目负责人相关证书和编号", readonly, item.pmCeritficates, [{ required: !readonly }], "项目负责人相关证书和编号")}
{returnArea([item.sectionId, item.id, 'quality'], "质量", readonly, item.quality, [{ required: !readonly }], "质量")}
{returnArea([item.sectionId, item.id, 'evaluationStatus'], "评标情况", readonly, item.evaluationStatus, [{ required: !readonly }], "评标情况")}
{returnArea([item.sectionId, item.id, 'winCandidateQualification'], "资格能力条件", readonly, item.winCandidateQualification, [{ required: !readonly }], "中标候选人响应招标文件的资格能力条件")}
{returnInput([item.sectionId, item.id, 'timeLimit'], "工期/交货期/服务期", readonly, readonly ? item.timeLimit + "天" : item.timeLimit, [{ required: !readonly }], "天数", void 0, null, 100, readonly ? void 0 : "number", readonly ? null : "天")}
</Panel>
))
}
return null;
}
//项目信息
const projectRender = (project: any, tenderer: any, agency: any, projectRecord: any, readonly: boolean) => {
if (isNotEmpty(project) && isNotEmpty(tenderer) && isNotEmpty(agency) && isNotEmpty(projectRecord)) {
const rel: boolean = readonly || project.readonly;
return (
<>
{returnInput("tenderProjectCode", "项目编号", true, project.tenderProjectCode)}
{returnArea("projectName", "项目名称", true, projectRecord.projectName)}
{returnInput("agencyCode", "招标代理机构代码", true, agency.code)}
{returnInput("agencyCompanyName", "招标代理机构名称", true, agency.companyName)}
{returnInput("bidOrgDict", "招标组织形式", true, returnDictVal(dictData['organization=entrust'], projectRecord.bidOrgDict))}
{returnInput("constant", "招标代理机构联系人", true, agency.constant)}
{returnInput("tel", "招标代理机构联系电话", true, agency.tel)}
{returnInput("name", "招标人名称", rel, tenderer.name, [{ required: !rel }], "招标人名称")}
{returnInput("code", "招标人代码", rel, tenderer.code, [{ required: !rel }], "统一社会信用代码")}
{returnArea("projectScale", "项目规模", rel, project.projectScale, [{ required: !rel }], "项目规模", null, 500)}
{returnArea("tenderContent", "招标内容与范围及招标方案说明", rel, project.tenderContent, [{ required: !rel }], "招标内容与范围及招标方案说明")}
</>
)
}
return null;
}
//公告&公示信息
const annoRender = (anno: any, readonly: boolean) => {
if (isNotEmpty(anno)) {
if (anno.annoNature === 1 || anno.annoNature === 7 || anno.annoNature === 8) {//公告&变更公告&再次发布
return (
<>
{returnArea("annoTitle", "公告名称", true, anno.annoTitle)}
{returnInput("docStartTime", flowName['fileName'] + "文件获取开始时间", true, anno.docStartTime)}
{returnInput("docEndTime", flowName['fileName'] + "文件获取截止时间", true, anno.docEndTime)}
{returnInput("replyEndTime", flowName['response'] + "截止时间", true, anno.replyEndTime)}
{defId != "recruit_multi" && returnInput("openingTime", flowName['review'] + "时间", true, anno.openingTime)}
{returnUpload("ctpspFileId", "PDF公告文件", readonly, anno.ctpspFileId, [{ required: !readonly, message: '请上传' }])}
</>
)
} else if (anno.annoNature === 4) {//失败公告
return (
<>
{returnArea("annoTitle", "失败公告名称", true, anno.annoTitle)}
{returnInput("annoStartTime", "失败公告发布时间", true, anno.annoStartTime)}
{returnInput("annoEndTime", "失败公告结束时间", true, anno.annoEndTime)}
{returnUpload("ctpspFileId", "PDF公告文件", readonly, anno.ctpspFileId, [{ required: !readonly, message: '请上传' }])}
</>
)
} else if (anno.annoNature === 201) {//公示
return (
<>
{returnArea("annoTitle", "公示名称", true, anno.annoTitle)}
{returnInput("docStartTime", "公示开始时间", true, anno.docStartTime)}
{returnInput("docEndTime", "公示结束时间", true, anno.docEndTime)}
{returnUpload("ctpspFileId", "PDF公示文件", readonly, anno.ctpspFileId, [{ required: !readonly, message: '请上传' }])}
</>
)
}
return
}
return null;
}
//保存方法
const onSave = () => {
form.validateFields()
.then(values => {
setLoading(true);
console.log('success', values);
const data = JSON.parse(JSON.stringify(initialData));//深拷贝
console.log('init', data);
//项目
if (isNotEmpty(data?.project)) {
data.project.projectScale = values.projectScale;
data.project.tenderContent = values.tenderContent;
}
//投标人
if (isNotEmpty(data?.tenderer)) {
data.tenderer.name = values.name;
data.tenderer.code = values.code;
}
//公告&公示
if (isNotEmpty(data?.anno)) {
data.anno.ctpspFileId = values.ctpspFileId;
}
//标段 中标候选人公示
if (isNotEmpty(data?.sections)) {
for (const item of data?.sections) {
if (isNotEmpty(item.suppliers)) {
for (const val of item.suppliers) {
const formData: any = form.getFieldValue([item.id, val.id]);
val.pmName = formData.pmName;
val.pmCode = formData.pmCode;
val.pmCeritficates = formData.pmCeritficates;
val.quality = formData.quality;
val.evaluationStatus = formData.evaluationStatus;
val.winCandidateQualification = formData.winCandidateQualification;
val.timeLimit = formData.timeLimit;
}
}
}
}
//保存数据
savePublicData(data).then(res => {
if (res?.code == 200 && res?.success) {
message.success('保存成功');
}
}).finally(() => {
setLoading(false);
})
})
.catch(errorInfo => {
console.log('error', errorInfo)
});
};
const handleClick = (
e: React.MouseEvent<HTMLElement>,
link: {
title: React.ReactNode;
href: string;
},
) => {
e.preventDefault();
console.log(link);
};
useEffect(() => {
if (isNotEmpty(annoId)) {
setLoading(true);
//获取公共服务平台数据
getPublicData(annoId).then(res => {
if (res?.code == 200) {
const data = res?.data;
setInitialData(data);
if (isNotEmpty(data.anno)) {
setAnnoType(data.anno.annoNature === 201);
setReadOnly(data.anno.status != 1 && data.anno.status != 4);
}
}
}).finally(() => {
setLoading(false);
})
} else {
message.error('获取公共服务平台数据失败,请联系管理员');
}
}, []);
return (
<div style={{ height: '100%', background: 'rgb(240,242,245)' }}>
<div className={styles.header}>
<div className={styles.headerAlign}>
<img src={logo} style={{ height: '30px', position: 'relative', top: '-2px' }} />
<span style={{ marginLeft: '10px', height: '30px' }}> | </span>
</div>
</div>
<Spin spinning={loading} size='large'>
<PageHeader
title={
<Space>
{!readOnly && <Button type='primary' key='save' hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} onClick={() => onSave()}></Button>}
<Button key='close' onClick={() => window.close()}></Button>
</Space>
}
/>
<div style={{ width: '100%', height: 16, backgroundColor: 'rgb(240,242,245)', }}></div>
<div style={{ padding: '0px 24px' }} className="public-platform-header">
<div style={{ width: '85%', float: 'left', borderRadius: '8px', }}>
<PageHeader
title={<Text strong></Text>}
extra={<Text strong style={{ color: '#b30000' }}>/15</Text>}
/>
<div style={{ height: innerHeight - 180, overflowY: 'auto' }} className="public-platform" ref={setContainer}>
<Form {...layout} form={form} scrollToFirstError name="public-platform" validateMessages={validateMessages}>
<Collapse
defaultActiveKey={['1', '2', '3', '4']}
expandIcon={({ isActive }) => <CaretRightOutlined rotate={isActive ? 90 : 0} />}
>
<Panel
header={<Text strong></Text>}
id="panel1"
key="1"
>
{projectRender(initialData?.project, initialData?.tenderer, initialData?.agency, initialData?.projectRecord, readOnly)}
</Panel>
{annoType && <Panel
header={<Text strong></Text>}
id="panel2"
key="2"
>
{sectionsRender(initialData?.sections, readOnly)}
</Panel>}
<Panel
header={<Text strong>{annoType ? "公示信息" : "公告信息"}</Text>}
id="panel3"
key="3"
>
{annoRender(initialData?.anno, readOnly)}
</Panel>
</Collapse>
</Form>
</div>
</div>
<div style={{ width: '15%', float: 'right' }}>
<div style={{ margin: '0px 16px', border: '1px solid rgb(179,0,0)', borderRadius: '8px', padding: '8px 0px', backgroundColor: 'white', width: '12%' }} className='anchor-father'>
{container && (
<Anchor getContainer={() => container} style={{ overflow: 'hidden' }} onClick={handleClick}>
<Link href="#panel1" title="项目信息" />
{annoType && <Link href="#panel2" title="中标候选人信息" />}
<Link href="#panel3" title={annoType ? "公示信息" : "公告信息"} />
</Anchor>
)}
</div>
<BackTop style={{ right: '100vh-40px' }}>
<div className='backtop'><ArrowUpOutlined /></div>
</BackTop>
</div>
</div>
</Spin>
<Modal
destroyOnClose
title="PDF文件手写签名及盖章示例"
visible={exampleVisible}
onCancel={() => setExampleVisible(false)}
cancelText="关闭"
okButtonProps={{ hidden: true }}
bodyStyle={{ padding: 48 }}
centered
width={921}
>
<img src={exampleImg} width="825" height="501" />
</Modal>
</div>
)
}
export default PublicPlatform;

View File

@ -1,90 +1,91 @@
//新增招标公告
// .bidding {
// margin-bottom: 8px;
// :global {
// .biddingLabel {
// width: 30%;
// display: inline-block;
// text-align: right;
// // padding-left: 20px;
// padding-right: 10px;
// }
// .biddingIndex {
// width: 40%;
// display: inline-block;
// justify-content: right;
// }
// .biddingDatePicker {
// width: 40%;
// }
// .biddingRadio {
// // display: inline-block;
// width: 40%;
// margin-top:24px;
// }
// .ant-row .ant-col {
// margin: 6px 0px;
// }
// .uploadTotal {
// display: inline-block;
// width: 40%;
// .upload {
// --antd-wave-shadow-color:#1c84c6;
// background: #1c84c6;
// color:#fff;
// border-color: #1c84c6;
// }
// .uploadLabel {
// // display: inline;
// font-size: 13px;
// color: #c8ced1;
// margin-top: 5px;
// }
// }
// }
// }
// .announcementFootButton {
// :global{
// display: flex;
// justify-content: center;
// margin-top: 15px;
// .save{
// --antd-wave-shadow-color:#f7ab59;
// background: #f7ab59;
// color:#fff;
// border-color: #f7ab59;
// }
// }
// }
// //招标公告
// .label {
// :global {
// color:#f62a2b;
// }
// }
// .ant-pro-table-toolbar {
// :global {
// margin: -12px 0px;
// }
// }
@import '~antd/lib/style/themes/default.less';
.card-onmouse {
// margin:auto;
.ant-image {
position: absolute;
left: 0px;
z-index: 1,
z-index: 1;
}
.text-css {
width:100%;
text-align: center;
font-size: 20px;
position: absolute;
z-index: 99;
color: white;
top: 50%;
z-index: 99;
width: 100%;
color: white;
font-size: 20px;
text-align: center;
transform: translateY(-50%);
}
}
.card-onmouse:hover {
box-shadow: 8px 8px 5px #9e9e9e; /*设置阴影,可以自定义参数*/
}
.header {
display: flex;
height: 56px;
color: white;
font-weight: 600;
font-size: 16px;
line-height: 56px;
background-color: #b30000;
.headerAlign {
align-self: center;
margin-left: 20px;
}
.proName {
font-weight: 300;
font-size: 30px;
}
.closeButton {
position: absolute;
right: 20px;
}
}
.anchor-father {
position: fixed;
.ant-anchor {
padding: 0px;
overflow: hidden;
}
.ant-anchor-ink {
position: fixed;
margin: 0px;
}
.ant-anchor-wrapper {
margin-left: 0px;
padding: 0px;
// border-radius: 8px;
}
.ant-anchor-ink-ball.visible {
display: none;
}
.ant-anchor-ink::before {
display: none;
}
.ant-anchor-link-active {
background-color: rgb(179, 0, 0);
}
.ant-anchor-link-title-active {
color: rgb(255, 255, 255);
}
.ant-affix {
top: 135px !important;
}
}
.backtop {
width: 40px;
height: 40px;
color: #fff;
font-size: 14px;
line-height: 40px;
text-align: center;
background-color: rgb(179, 0, 0);
border-radius: 4px;
}
.public-platform .ant-form-item {
margin-bottom: 22px;
}
.public-platform-header .ant-page-header-heading {
align-items: center;
}

View File

@ -204,3 +204,22 @@ export async function TOrF(params: any, id: any) {//{skip:'true/false'}
data: params
});
}
/**
* 公共服务平台-获取数据
* @param params
* @returns
*/
export async function getPublicData(params: any) {
return request('/api/biz-service-ebtp-bid/v1/ctpsp/get/' + params);
}
/**
* 公共服务平台-保存数据
* @param params
* @returns
*/
export async function savePublicData(params: any) {
return request('/api/biz-service-ebtp-bid/v1/ctpsp/save', {
method: "POST",
data: params
});
}

View File

@ -18,6 +18,7 @@ import { btnAuthority } from "@/utils/authority";
import { getApprProcessList } from "@/utils/SeleApprovalProcess/service"
import SeleApprovalProcess from "@/utils/SeleApprovalProcess"
import { releaseNoticeOffline } from "@/pages/Bid/BiddingAnnouncement/service"
import { isEmpty } from "@/utils/CommonUtils"
import { checkObjectId } from "@/utils/DownloadUtils"
/*
@ -157,6 +158,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit(record)}></Button>&nbsp;&nbsp;
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>&nbsp;&nbsp;
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -166,6 +168,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn3 = (
@ -175,6 +178,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn4 = (
@ -184,6 +188,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -193,6 +198,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Popconfirm
title={`确定要${name5}结束吗?`}
onConfirm={async () => {
@ -219,6 +225,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);

View File

@ -1,4 +1,5 @@
import { btnAuthority } from '@/utils/authority';
import { isEmpty } from '@/utils/CommonUtils';
import { checkObjectId } from '@/utils/DownloadUtils';
import SeleApprovalProcess from '@/utils/SeleApprovalProcess';
import { getApprProcessList } from '@/utils/SeleApprovalProcess/service';
@ -351,6 +352,7 @@ const ExceptionHandling: React.FC<ExceptionHandlingProps> = (props) => {
</Button>
</Popconfirm>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.sendMessageId)}></Button>
<Popconfirm
title="确定要删除吗?"
onConfirm={() => toDelete(record)}
@ -373,6 +375,7 @@ const ExceptionHandling: React.FC<ExceptionHandlingProps> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.sendMessageId)}></Button>
<Popconfirm
title="确定要删除吗?"
onConfirm={() => toDelete(record)}
@ -405,6 +408,7 @@ const ExceptionHandling: React.FC<ExceptionHandlingProps> = (props) => {
</Button>
</Popconfirm>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.sendMessageId)}></Button>
<Popconfirm
title="确定要删除吗?"
onConfirm={() => toDelete(record)}
@ -437,6 +441,7 @@ const ExceptionHandling: React.FC<ExceptionHandlingProps> = (props) => {
</Button>
</Popconfirm>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.sendMessageId)}></Button>
<Popconfirm
title="确定要删除吗?"
onConfirm={() => toDelete(record)}
@ -462,6 +467,7 @@ const ExceptionHandling: React.FC<ExceptionHandlingProps> = (props) => {
<Button type="text" key="4" onClick={() => toTakeEffect(record)} hidden={btnAuthority(["ebtp-agency-project-manager", "ebtp-purchase"])}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.sendMessageId)}></Button>
</>
) : record.status == 0 && record.sendMessageStatus == 6 ? ( //草稿-公告发布失败
<>
@ -484,6 +490,7 @@ const ExceptionHandling: React.FC<ExceptionHandlingProps> = (props) => {
</Button>
</Popconfirm>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.sendMessageId)}></Button>
<Popconfirm
title="确定要删除吗?"
onConfirm={() => toDelete(record)}
@ -506,6 +513,7 @@ const ExceptionHandling: React.FC<ExceptionHandlingProps> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.sendMessageId)}></Button>
</>
) : null,
},

View File

@ -19,6 +19,7 @@ import { checkConflict } from "@/pages/Bid/BiddingAnnouncement/service";
import { btnAuthority } from "@/utils/authority";
import { getApprProcessList } from "@/utils/SeleApprovalProcess/service"
import SeleApprovalProcess from "@/utils/SeleApprovalProcess"
import { isEmpty } from "@/utils/CommonUtils"
import { checkObjectId } from "@/utils/DownloadUtils"
/*
@ -127,6 +128,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit(record)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -136,6 +138,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
</>
);
let btn3 = (
@ -145,6 +148,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
</>
);
let btn4 = (
@ -154,6 +158,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -163,6 +168,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
<Button type="text" onClick={() => toChange(record)}></Button>
</>
);
@ -174,6 +180,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
</>
);
@ -241,6 +248,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit4Change(record)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -250,6 +258,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
</>
);
let btn3 = (
@ -259,6 +268,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
</>
);
let btn4 = (
@ -268,6 +278,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -277,6 +288,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
</>
);
let btn6 = (
@ -286,6 +298,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id + '&roomType=1')}></Button>
</>
);

View File

@ -19,6 +19,7 @@ import { checkConflict } from "@/pages/Bid/BiddingAnnouncement/service";
import { btnAuthority } from "@/utils/authority";
import { getApprProcessList } from "@/utils/SeleApprovalProcess/service"
import SeleApprovalProcess from "@/utils/SeleApprovalProcess"
import { isEmpty } from "@/utils/CommonUtils"
import { checkObjectId } from "@/utils/DownloadUtils"
/*
@ -119,6 +120,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit(record)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -128,6 +130,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn3 = (
@ -137,6 +140,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn4 = (
@ -146,6 +150,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -155,6 +160,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button type="text" onClick={() => toChange(record)}></Button>
{getProMethod() == "procurement_mode_4" ?
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleReleaseAgain(record)}></Button> : null}
@ -168,6 +174,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
@ -256,6 +263,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit4Change(record)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -265,6 +273,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn3 = (
@ -274,6 +283,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn4 = (
@ -283,6 +293,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -292,6 +303,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
{getProMethod() == "procurement_mode_4" ?
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleReleaseAgain(record)}></Button> : null}
</>
@ -303,6 +315,7 @@ const BiddingAnnouncementList: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);

View File

@ -17,6 +17,7 @@ import { getProId } from "@/utils/session";
import { btnAuthority } from "@/utils/authority";
import { getApprProcessList } from "@/utils/SeleApprovalProcess/service"
import SeleApprovalProcess from "@/utils/SeleApprovalProcess"
import { isEmpty } from "@/utils/CommonUtils"
import { checkObjectId } from "@/utils/DownloadUtils"
/*
@ -111,6 +112,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => toEdit(record)}></Button>&nbsp;&nbsp;
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" disabled={pageloading} onClick={() => handleApproval(record)}></Button>&nbsp;&nbsp;
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -120,6 +122,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn3 = (
@ -129,6 +132,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn4 = (
@ -138,6 +142,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
<Button type="text" onClick={() => handleRemove(record)}></Button>
</>
);
@ -147,6 +152,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);
let btn6 = (
@ -156,6 +162,7 @@ const BidPublicityResult: React.FC<{}> = (props) => {
<Button type="text" key="9" onClick={() => toApprovalFor(record)} hidden={!checkObjectId(record.id)}>
</Button>
<Button hidden={isEmpty(record.hasCtpsp) || !record.hasCtpsp} type="text" key="common" onClick={() => window.open('/PublicPlatform' + '?id=' + record.id)}></Button>
</>
);

View File

@ -302,6 +302,18 @@ export const numberToChinese = (num: any) => {
re = re.replace("一", "");
return re;
}
/**
* 页面内锚点滚动方法
* @param anchorName
*/
export const scrollToAnchor = (anchorName: string) => {
if (anchorName) {
// 找到锚点
let anchorElement = document.getElementById(anchorName);
// 如果对应id的锚点存在就跳转到锚点
if (anchorElement) { anchorElement.scrollIntoView({ block: 'start', behavior: 'smooth' }); }
}
}
/**
* 删除行首行尾的空白字符方法(包括空格、制表符、换页符等等)
* @param str