From ceacd3bd09d6e1c5fce025194e46bc1ddf6c3cef Mon Sep 17 00:00:00 2001 From: linxd <544554903@qq.com> Date: Mon, 16 Jun 2025 22:01:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=BF=E7=AD=96=E6=B3=95=E8=A7=84=E5=92=8C?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/router.config.ts | 5 + src/pages/notice/notice.less | 64 +++++++ src/pages/notice/notice.tsx | 193 +++++++++++++++++++- src/pages/notice/noticeInfo.less | 99 +++++++++++ src/pages/notice/noticeInfo.tsx | 245 +++++++++++++++++++++++++- src/pages/policy/policy.less | 28 +++ src/pages/policy/policy.tsx | 145 ++++++++++++++- src/pages/policy/policyInfo.less | 107 +++++++++++ src/pages/policy/policyInfo.tsx | 293 +++++++++++++++++++++++++++++++ 9 files changed, 1172 insertions(+), 7 deletions(-) create mode 100644 src/pages/notice/notice.less create mode 100644 src/pages/notice/noticeInfo.less create mode 100644 src/pages/policy/policy.less create mode 100644 src/pages/policy/policyInfo.less create mode 100644 src/pages/policy/policyInfo.tsx diff --git a/config/router.config.ts b/config/router.config.ts index 143a7ac..87f4e06 100644 --- a/config/router.config.ts +++ b/config/router.config.ts @@ -44,6 +44,11 @@ export default [ path: '/policy', component: '@/pages/policy/policy', }, + { + name: 'policyInfo', + path: '/policy/policyInfo', + component: '@/pages/policy/policyInfo', + }, { name: 'notice', path: '/notice', diff --git a/src/pages/notice/notice.less b/src/pages/notice/notice.less new file mode 100644 index 0000000..3a9f0c4 --- /dev/null +++ b/src/pages/notice/notice.less @@ -0,0 +1,64 @@ +@import '~antd/es/style/themes/default.less'; + +.noticeContainer { + min-height: calc(100vh - 200px); + padding: 24px; + background-color: #fff; +} + +.noticeHeader { + margin-bottom: 24px; +} + +.pageTitle { + margin-bottom: 24px; + color: rgb(0, 79, 142); + font-weight: 500; + text-align: center; +} + +.noticeRow { + width: 100%; +} + +.menuCol { + margin-bottom: 24px; +} + +.menuTitle { + margin-bottom: 16px; + padding: 0 16px; + color: rgb(0, 79, 142); + font-weight: 500; + text-align: center; +} + +.noticeMenu { + border-right: none; +} + +.contentCard { + border-radius: 4px; +} + +.noticeContent { + width: 100%; +} + +.tableHeader { + margin-bottom: 16px; +} + +.tableTitle { + color: rgb(0, 79, 142); + font-weight: 500; +} + +.noticeTitle { + color: #333; + transition: color 0.3s; + + &:hover { + color: rgb(0, 79, 142); + } +} diff --git a/src/pages/notice/notice.tsx b/src/pages/notice/notice.tsx index 4afabca..9443c57 100644 --- a/src/pages/notice/notice.tsx +++ b/src/pages/notice/notice.tsx @@ -1,5 +1,194 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; +import { Table, Menu, Typography, Row, Col, Card } from 'antd'; +import { history } from 'umi'; +import { BellOutlined, AppstoreOutlined } from '@ant-design/icons'; +import styles from './notice.less'; + +const { Title } = Typography; + +// 模拟系统更新通知数据 +const mockSystemNotices = [ + { + id: '1', + title: '系统将于2023年9月15日进行版本升级', + publishDate: '2023-09-10', + type: 'system', + }, + { + id: '2', + title: '招标模块功能优化更新通知', + publishDate: '2023-08-25', + type: 'system', + }, + { + id: '3', + title: '系统安全性能升级维护通知', + publishDate: '2023-08-10', + type: 'system', + }, + { + id: '4', + title: '移动端应用同步更新通知', + publishDate: '2023-07-28', + type: 'system', + }, + { + id: '5', + title: '供应商管理模块功能升级通知', + publishDate: '2023-07-15', + type: 'system', + }, +]; + +// 模拟其他通知数据 +const mockOtherNotices = [ + { + id: '6', + title: '关于开展2023年度供应商评估工作的通知', + publishDate: '2023-09-05', + type: 'other', + }, + { + id: '7', + title: '关于调整采购审批流程的通知', + publishDate: '2023-08-20', + type: 'other', + }, + { + id: '8', + title: '关于加强信息安全管理的通知', + publishDate: '2023-08-05', + type: 'other', + }, + { + id: '9', + title: '关于开展采购人员培训的通知', + publishDate: '2023-07-25', + type: 'other', + }, + { + id: '10', + title: '关于优化供应商准入机制的通知', + publishDate: '2023-07-10', + type: 'other', + }, +]; + const NoticePage: React.FC = () => { - return <>NoticePage; + const [activeMenu, setActiveMenu] = useState('system'); + const [noticeData, setNoticeData] = useState([]); + const [loading, setLoading] = useState(true); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 0, + }); + + // 根据当前选中的菜单加载对应的通知数据 + useEffect(() => { + setLoading(true); + // 模拟API请求 + setTimeout(() => { + const data = activeMenu === 'system' ? mockSystemNotices : mockOtherNotices; + setNoticeData(data); + setPagination((prevPagination) => ({ + ...prevPagination, + total: data.length, + })); + setLoading(false); + }, 500); + }, [activeMenu]); + + // 处理菜单切换 + const handleMenuClick = (e: any) => { + setActiveMenu(e.key); + setPagination({ + ...pagination, + current: 1, + }); + }; + + // 处理表格分页变化 + const handleTableChange = (newPagination: any) => { + setPagination(newPagination); + }; + + // 处理点击通知标题 + const handleNoticeClick = (id: string) => { + history.push(`/notice/noticeInfo?id=${id}`); + }; + + // 定义表格列 + const columns = [ + { + title: '序号', + dataIndex: 'index', + key: 'index', + width: 80, + render: (_: any, __: any, index: number) => { + return (pagination.current - 1) * pagination.pageSize + index + 1; + }, + }, + { + title: '标题', + dataIndex: 'title', + key: 'title', + render: (text: string, record: any) => ( + handleNoticeClick(record.id)} className={styles.noticeTitle}> + {text} + + ), + }, + { + title: '发布时间', + dataIndex: 'publishDate', + key: 'publishDate', + width: 150, + align: 'center' as 'center', + }, + ]; + + return ( +
+ + + + }> + 系统更新通知 + + }> + 其他通知 + + + + + +
+ `共 ${total} 条记录`, + showSizeChanger: true, + showQuickJumper: true, + }} + loading={loading} + onChange={handleTableChange} + bordered + className={styles.noticeTable} + /> + + + + + ); }; + export default NoticePage; diff --git a/src/pages/notice/noticeInfo.less b/src/pages/notice/noticeInfo.less new file mode 100644 index 0000000..1d12208 --- /dev/null +++ b/src/pages/notice/noticeInfo.less @@ -0,0 +1,99 @@ +@import '~antd/es/style/themes/default.less'; + +.noticeInfoContainer { + padding: 24px; + background-color: #fff; + min-height: calc(100vh - 200px); +} + +.noticeInfoHeader { + margin-bottom: 24px; +} + +.backButton { + color: rgb(0, 79, 142); + padding: 0; + + &:hover { + color: lighten(rgb(0, 79, 142), 10%); + } +} + +.noticeInfoContent { + width: 100%; + max-width: 1000px; + margin: 0 auto; +} + +.titleContainer { + text-align: center; + margin-bottom: 24px; +} + +.title { + color: rgb(0, 79, 142); + font-weight: 500; +} + +.metaInfo { + display: flex; + justify-content: space-between; + margin-bottom: 24px; + color: #999; + + .metaLeft, .metaCenter, .metaRight { + flex: 1; + } + + .metaCenter { + text-align: center; + } + + .metaRight { + text-align: right; + } +} + +.divider { + margin: 16px 0; + border-top: 1px solid #e8e8e8; +} + +.contentBody { + font-size: 16px; + line-height: 1.8; + + p { + margin-bottom: 16px; + } + + strong { + font-weight: 500; + color: rgb(0, 79, 142); + } + + ol, ul { + margin-bottom: 16px; + padding-left: 24px; + + li { + margin-bottom: 8px; + } + } +} + +.loadingContainer { + display: flex; + justify-content: center; + align-items: center; + height: 400px; +} + +.notFoundContainer { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 400px; + gap: 24px; +} diff --git a/src/pages/notice/noticeInfo.tsx b/src/pages/notice/noticeInfo.tsx index 602b462..9ea78f9 100644 --- a/src/pages/notice/noticeInfo.tsx +++ b/src/pages/notice/noticeInfo.tsx @@ -1,8 +1,247 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import { useLocation } from 'umi'; +import { Typography, Button, Divider, Spin, message } from 'antd'; +import { ArrowLeftOutlined } from '@ant-design/icons'; +import styles from './noticeInfo.less'; + +const { Title, Text } = Typography; + +interface NoticeDetail { + id: string; + title: string; + content: string; + publishDate: string; + publisher: string; + type: string; +} + +interface NoticeDetails { + [key: string]: NoticeDetail; +} + +// 模拟通知详情数据 +const mockNoticeDetails: NoticeDetails = { + '1': { + id: '1', + title: '系统将于2023年9月15日进行版本升级', + publishDate: '2023-09-10', + publisher: '系统管理员', + type: 'system', + content: ` +

尊敬的用户:

+

为了提供更好的用户体验和系统功能,我们计划于2023年9月15日晚上22:00至次日凌晨2:00进行系统版本升级。在此期间,系统将暂停服务,请您提前做好相关工作安排。

+ +

本次升级内容:

+
    +
  1. 优化招标采购流程,提高操作效率
  2. +
  3. 增加供应商评价功能,完善评价体系
  4. +
  5. 优化系统响应速度,提升用户体验
  6. +
  7. 修复已知问题,提高系统稳定性
  8. +
  9. 增强系统安全性,保障数据安全
  10. +
+ +

升级注意事项:

+
    +
  1. 请您在系统升级前保存并提交所有未完成的工作
  2. +
  3. 系统升级后,建议清除浏览器缓存再登录系统
  4. +
  5. 如遇到任何问题,请联系系统管理员
  6. +
+ +

感谢您的理解与支持!

+

系统管理团队

+

2023年9月10日

+ ` + }, + '2': { + id: '2', + title: '招标模块功能优化更新通知', + publishDate: '2023-08-25', + publisher: '系统管理员', + type: 'system', + content: ` +

尊敬的用户:

+

我们很高兴地通知您,招标模块已完成功能优化升级,现已上线。本次更新主要针对招标流程进行了优化,提高了操作效率和用户体验。

+ +

主要更新内容:

+
    +
  1. 简化招标发布流程,减少操作步骤
  2. +
  3. 优化投标文件管理功能,支持批量上传和下载
  4. +
  5. 增加招标项目进度跟踪功能,实时掌握项目状态
  6. +
  7. 完善评标功能,支持多种评标方法
  8. +
  9. 增加中标结果自动生成功能,提高工作效率
  10. +
+ +

使用建议:

+
    +
  1. 请参考系统内置的操作指南熟悉新功能
  2. +
  3. 如有任何问题或建议,请通过系统反馈功能提交
  4. +
+ +

感谢您对我们工作的支持!

+

系统管理团队

+

2023年8月25日

+ ` + }, + '6': { + id: '6', + title: '关于开展2023年度供应商评估工作的通知', + publishDate: '2023-09-05', + publisher: '采购管理部', + type: 'other', + content: ` +

各相关部门:

+

为加强供应商管理,提高采购质量,根据《中远海运集团供应商管理实施细则》的要求,现决定开展2023年度供应商评估工作,具体事项通知如下:

+ +

一、评估对象

+

2023年度与我集团有业务往来的所有供应商。

+ +

二、评估时间

+

2023年9月15日至10月15日。

+ +

三、评估内容

+
    +
  1. 供应商资质情况
  2. +
  3. 产品质量及服务水平
  4. +
  5. 价格合理性
  6. +
  7. 交货及时性
  8. +
  9. 售后服务响应速度
  10. +
  11. 合同履约情况
  12. +
  13. 社会责任履行情况
  14. +
+ +

四、评估方法

+

采用百分制评分,根据评分结果将供应商分为A、B、C、D四个等级。

+ +

五、工作要求

+
    +
  1. 各部门应指定专人负责本部门供应商评估工作
  2. +
  3. 评估过程应客观公正,实事求是
  4. +
  5. 评估结果应于10月20日前报送采购管理部汇总
  6. +
+ +

特此通知。

+

采购管理部

+

2023年9月5日

+ ` + }, + '7': { + id: '7', + title: '关于调整采购审批流程的通知', + publishDate: '2023-08-20', + publisher: '采购管理部', + type: 'other', + content: ` +

各相关部门:

+

为提高采购效率,优化业务流程,经公司研究决定,对采购审批流程进行调整,现将有关事项通知如下:

+ +

一、调整内容

+
    +
  1. 采购金额50万元以下的项目,由部门经理审批后直接提交采购部执行,无需总经理审批
  2. +
  3. 采购金额50万元至200万元的项目,由部门经理和分管副总经理审批后提交采购部执行
  4. +
  5. 采购金额200万元以上的项目,仍按原流程执行,需经总经理审批
  6. +
+ +

二、实施时间

+

本通知自2023年9月1日起实施。

+ +

三、注意事项

+
    +
  1. 各部门应严格按照新的审批流程执行,不得擅自变更
  2. +
  3. 采购部应加强对采购项目的监督管理,确保采购质量
  4. +
  5. 审批人应认真履行审批职责,对采购项目的必要性、合理性进行审核
  6. +
+ +

特此通知。

+

采购管理部

+

2023年8月20日

+ ` + } +}; + const NoticeInfo: React.FC = () => { const location = useLocation(); - const id = new URLSearchParams(location.search).get("id") - return <>NoticeInfo -------- {id}; + const id = new URLSearchParams(location.search).get("id"); + const [noticeDetail, setNoticeDetail] = useState(null); + const [loading, setLoading] = useState(true); + + // 模拟获取通知详情数据 + useEffect(() => { + // 实际项目中应该通过API获取数据 + setTimeout(() => { + if (id && mockNoticeDetails[id]) { + setNoticeDetail(mockNoticeDetails[id]); + } else { + // 处理ID不存在的情况 + message.error('通知不存在'); + } + setLoading(false); + }, 500); + }, [id]); + + // 处理返回列表 + const handleBack = () => { + window.history.back(); + }; + + if (loading) { + return ( +
+ +
+ ); + } + + if (!noticeDetail) { + return ( +
+ 未找到相关通知 + +
+ ); + } + + return ( +
+
+ +
+ +
+
+ + {noticeDetail.title} + +
+ +
+
+ 发布时间: {noticeDetail.publishDate} +
+
+ 发布人: {noticeDetail.publisher} +
+
+ + 通知类型: {noticeDetail.type === 'system' ? '系统更新通知' : '其他通知'} + +
+
+ + + +
+
+
+
+
+ ); }; + export default NoticeInfo; diff --git a/src/pages/policy/policy.less b/src/pages/policy/policy.less new file mode 100644 index 0000000..1349f32 --- /dev/null +++ b/src/pages/policy/policy.less @@ -0,0 +1,28 @@ +@import '~antd/es/style/themes/default.less'; + +.policyContainer { + padding: 10px; + background-color: #fff; + // min-height: calc(100vh - 200px); +} + +.policyHeader { + margin-bottom: 24px; +} + +.pageTitle { + color: rgb(0, 79, 142); + font-weight: 500; + text-align: center; + margin-bottom: 24px; +} + + +.policyTitle { + color: #333; + transition: color 0.3s; + + &:hover { + color: rgb(0, 79, 142); + } +} diff --git a/src/pages/policy/policy.tsx b/src/pages/policy/policy.tsx index 519bb58..1f48e14 100644 --- a/src/pages/policy/policy.tsx +++ b/src/pages/policy/policy.tsx @@ -1,5 +1,146 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; +import { Table, Typography } from 'antd'; +import { history } from 'umi'; +import styles from './policy.less'; + +const { Title } = Typography; + +// 模拟政策法规数据 +const mockPolicyData = [ + { + id: '1', + title: '关于进一步规范招标采购活动的管理办法', + publishDate: '2023-08-15', + }, + { + id: '2', + title: '中远海运集团供应商管理实施细则(2023年修订版)', + publishDate: '2023-07-20', + }, + { + id: '3', + title: '关于加强采购合同履约管理的通知', + publishDate: '2023-06-10', + }, + { + id: '4', + title: '中远海运集团招标采购管理办法', + publishDate: '2023-05-25', + }, + { + id: '5', + title: '关于优化招标采购流程提高采购效率的实施意见', + publishDate: '2023-04-18', + }, + { + id: '6', + title: '中远海运集团电子招标采购平台操作指南', + publishDate: '2023-03-30', + }, + { + id: '7', + title: '关于进一步加强采购风险防控的指导意见', + publishDate: '2023-02-15', + }, + { + id: '8', + title: '中远海运集团采购评审专家管理办法', + publishDate: '2023-01-10', + }, + { + id: '9', + title: '关于推进绿色采购的实施方案', + publishDate: '2022-12-20', + }, + { + id: '10', + title: '中远海运集团采购人员职业道德规范', + publishDate: '2022-11-05', + }, +]; + const PolicyPage: React.FC = () => { - return <>PolicyPage; + const [policyData, setPolicyData] = useState([]); + const [loading, setLoading] = useState(true); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 0, + }); + + // 模拟获取政策法规数据 + useEffect(() => { + // 实际项目中应该通过API获取数据 + setTimeout(() => { + setPolicyData(mockPolicyData); + setPagination((prevPagination) => ({ + ...prevPagination, + total: mockPolicyData.length, + })); + setLoading(false); + }, 500); + }, []); + + // 处理表格分页变化 + const handleTableChange = (newPagination: any) => { + setPagination(newPagination); + }; + + // 处理点击政策标题 + const handlePolicyClick = (id: string) => { + history.push(`/policy/policyInfo?id=${id}`); + }; + + // 定义表格列 + const columns = [ + { + title: '序号', + dataIndex: 'index', + key: 'index', + width: 80, + render: (_: any, __: any, index: number) => { + return (pagination.current - 1) * pagination.pageSize + index + 1; + }, + }, + { + title: '标题', + dataIndex: 'title', + key: 'title', + render: (text: string, record: any) => ( + handlePolicyClick(record.id)} className={styles.policyTitle}> + {text} + + ), + }, + { + title: '发布时间', + dataIndex: 'publishDate', + key: 'publishDate', + width: 150, + align: 'center' as 'center', + }, + ]; + + return ( +
+
+
`共 ${total} 条记录`, + showSizeChanger: true, + showQuickJumper: true, + }} + loading={loading} + onChange={handleTableChange} + bordered + /> + + + ); }; + export default PolicyPage; diff --git a/src/pages/policy/policyInfo.less b/src/pages/policy/policyInfo.less new file mode 100644 index 0000000..197af99 --- /dev/null +++ b/src/pages/policy/policyInfo.less @@ -0,0 +1,107 @@ +@import '~antd/es/style/themes/default.less'; + +.policyInfoContainer { + padding: 24px; + background-color: #fff; + min-height: calc(100vh - 200px); +} + +.policyInfoHeader { + margin-bottom: 24px; +} + +.backButton { + color: rgb(0, 79, 142); + padding: 0; + + &:hover { + color: lighten(rgb(0, 79, 142), 10%); + } +} + +.policyInfoContent { + width: 100%; + max-width: 1000px; + margin: 0 auto; +} + +.titleContainer { + text-align: center; + margin-bottom: 24px; +} + +.title { + color: rgb(0, 79, 142); + font-weight: 500; +} + +.metaInfo { + display: flex; + justify-content: space-between; + margin-bottom: 24px; + color: #999; + + .metaLeft, .metaRight { + flex: 1; + } + + .metaRight { + text-align: right; + } +} + +.divider { + margin: 16px 0; + border-top: 1px solid #e8e8e8; +} + +.contentBody { + font-size: 16px; + line-height: 1.8; + + p { + margin-bottom: 16px; + } + + strong { + font-weight: 500; + color: rgb(0, 79, 142); + } +} + +.attachmentsSection { + margin-top: 40px; +} + +.attachmentsTitle { + font-size: 18px; + font-weight: 500; + color: rgb(0, 79, 142); + margin-bottom: 16px; +} + +.attachmentsList { + display: flex; + flex-wrap: wrap; + gap: 12px; +} + +.attachmentButton { + margin-bottom: 12px; +} + +.loadingContainer { + display: flex; + justify-content: center; + align-items: center; + height: 400px; +} + +.notFoundContainer { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 400px; + gap: 24px; +} diff --git a/src/pages/policy/policyInfo.tsx b/src/pages/policy/policyInfo.tsx new file mode 100644 index 0000000..98a1615 --- /dev/null +++ b/src/pages/policy/policyInfo.tsx @@ -0,0 +1,293 @@ +import React, { useState, useEffect } from 'react'; +import { useLocation } from 'umi'; +import { Typography, Button, Space, Divider, Row, Col, Spin, message } from 'antd'; +import { DownloadOutlined, ArrowLeftOutlined, FilePdfOutlined, FileWordOutlined, FileExcelOutlined } from '@ant-design/icons'; +import styles from './policyInfo.less'; + +const { Title, Text } = Typography; + +interface PolicyDetail { + id: string; + title: string; + publishDate: string; + publisher: string; + content: string; + attachments: { + name: string; + url: string; + type: string; + }[]; +} + +interface PolicyDetails { + [key: string]: PolicyDetail; +} + +// 模拟政策法规详情数据 +const mockPolicyDetails: PolicyDetails = { + '1': { + id: '1', + title: '关于进一步规范招标采购活动的管理办法', + publishDate: '2023-08-15', + publisher: '中远海运集团采购管理部', + content: ` +

第一章 总则

+

第一条 为进一步规范集团招标采购活动,提高采购效率,降低采购成本,防范采购风险,根据《中华人民共和国招标投标法》《中华人民共和国招标投标法实施条例》等法律法规,结合集团实际情况,制定本办法。

+

第二条 本办法适用于集团总部及各下属单位的招标采购活动。

+

第三条 招标采购活动应当遵循公开、公平、公正和诚实信用的原则。

+ +

第二章 招标采购组织机构及职责

+

第四条 集团设立采购管理委员会,负责审议集团采购管理制度、采购策略、重大采购事项等。

+

第五条 集团采购管理部是集团采购管理的职能部门,负责组织实施集团采购管理工作。

+

第六条 各单位应当设立采购管理部门,负责本单位采购管理工作。

+ +

第三章 招标采购方式

+

第七条 招标采购方式包括公开招标、邀请招标、竞争性谈判、竞争性磋商、询价采购、单一来源采购等。

+

第八条 采购金额达到下列标准之一的,应当采用公开招标方式:

+

(一)货物类项目采购金额在200万元以上;

+

(二)工程类项目采购金额在400万元以上;

+

(三)服务类项目采购金额在100万元以上。

+

第九条 符合下列情形之一的,可以采用邀请招标方式:

+

(一)技术复杂、有特殊要求或者受自然环境限制,只有少量供应商可供选择;

+

(二)采用公开招标方式的费用占采购项目总价值的比例过大。

+ +

第四章 招标采购程序

+

第十条 招标采购程序包括:采购需求提出、采购方式确定、采购文件编制、采购公告发布、投标文件接收与开标、评标、定标、合同签订等环节。

+

第十一条 采购需求部门应当提出书面采购申请,明确采购需求、技术规格、数量、交货期等要求。

+

第十二条 采购管理部门根据采购金额、采购内容等因素,确定采购方式。

+

第十三条 采购文件应当包括采购项目的技术要求、商务条件、评标方法与标准、合同主要条款等内容。

+ +

第五章 评标与定标

+

第十四条 评标委员会由采购人代表和评审专家组成,成员人数为5人以上单数,其中评审专家不得少于成员总数的三分之二。

+

第十五条 评标方法可以采用最低评标价法、综合评分法等。

+

第十六条 评标委员会按照招标文件确定的评标方法和标准,对投标文件进行评审和比较,提出书面评标报告。

+ +

第六章 合同管理

+

第十七条 采购合同应当明确双方的权利义务、技术要求、合同价格、履行期限、履行地点和方式、验收标准和方法、违约责任等内容。

+

第十八条 采购合同签订后,采购人应当加强对合同履行情况的监督检查,确保合同全面履行。

+ +

第七章 供应商管理

+

第十九条 集团应当建立供应商库,对供应商实行动态管理。

+

第二十条 对供应商的考核评价应当包括供应商资质、产品质量、价格水平、交货期、售后服务等方面。

+ +

第八章 监督检查

+

第二十一条 集团审计部门应当对招标采购活动进行监督检查。

+

第二十二条 任何单位和个人不得以任何方式干涉招标采购活动。

+ +

第九章 附则

+

第二十三条 本办法由集团采购管理部负责解释。

+

第二十四条 本办法自发布之日起施行。

+ `, + attachments: [ + { name: '招标采购管理办法.pdf', url: '/files/招标采购管理办法.pdf', type: 'pdf' }, + { name: '招标采购流程图.docx', url: '/files/招标采购流程图.docx', type: 'word' } + ] + }, + '2': { + id: '2', + title: '中远海运集团供应商管理实施细则(2023年修订版)', + publishDate: '2023-07-20', + publisher: '中远海运集团采购管理部', + content: ` +

第一章 总则

+

第一条 为规范集团供应商管理工作,建立健全供应商评价体系,提高采购质量和效率,根据《中远海运集团招标采购管理办法》,制定本细则。

+

第二条 本细则适用于集团总部及各下属单位的供应商管理工作。

+ +

第二章 供应商分类

+

第三条 供应商按照提供的产品或服务类型,分为货物类供应商、工程类供应商和服务类供应商。

+

第四条 供应商按照合作关系,分为战略供应商、核心供应商和一般供应商。

+ +

第三章 供应商准入

+

第五条 供应商准入应当符合以下基本条件:

+

(一)具有独立承担民事责任的能力;

+

(二)具有良好的商业信誉和健全的财务会计制度;

+

(三)具有履行合同所必需的设备和专业技术能力;

+

(四)有依法缴纳税收和社会保障资金的良好记录;

+

(五)参加采购活动前三年内,在经营活动中没有重大违法记录;

+

(六)法律、行政法规规定的其他条件。

+ +

第四章 供应商评价

+

第六条 供应商评价指标包括企业资质、财务状况、技术能力、质量保证、价格水平、交货期、售后服务、社会责任等。

+

第七条 供应商评价采用百分制,评价结果分为A、B、C、D四个等级:

+

(一)A级:90分以上,优秀供应商;

+

(二)B级:75-89分,良好供应商;

+

(三)C级:60-74分,合格供应商;

+

(四)D级:60分以下,不合格供应商。

+ +

第五章 供应商退出

+

第八条 供应商有下列情形之一的,应当从供应商库中退出:

+

(一)连续两次评价结果为D级;

+

(二)提供虚假材料谋取中标、成交的;

+

(三)与采购人、其他供应商恶意串通的;

+

(四)向采购人、评标委员会成员行贿或者提供其他不正当利益的;

+

(五)在采购活动中有其他违法违规行为的。

+ +

第六章 附则

+

第九条 本细则由集团采购管理部负责解释。

+

第十条 本细则自发布之日起施行。

+ `, + attachments: [ + { name: '供应商管理实施细则.pdf', url: '/files/供应商管理实施细则.pdf', type: 'pdf' }, + { name: '供应商评价表.xlsx', url: '/files/供应商评价表.xlsx', type: 'excel' } + ] + }, + '3': { + id: '3', + title: '关于加强采购合同履约管理的通知', + publishDate: '2023-06-10', + publisher: '中远海运集团采购管理部', + content: ` +

各单位:

+

为进一步加强采购合同履约管理,防范合同风险,提高采购质量,经集团研究决定,现就加强采购合同履约管理有关事项通知如下:

+ +

一、高度重视采购合同履约管理

+

各单位要充分认识加强采购合同履约管理的重要性,将合同履约管理作为采购管理的重要环节,纳入采购全过程管理。要明确合同履约管理责任,建立健全合同履约管理制度,规范合同履约管理流程。

+ +

二、严格合同签订管理

+

各单位要严格执行合同审查制度,重点审查合同主体、标的、数量、质量、价款、履行期限、履行地点和方式、违约责任等内容。要加强合同条款设计,合理设置付款条件、验收标准、质保期、违约责任等条款,防范合同风险。

+ +

三、加强合同履行监督

+

各单位要建立合同履行台账,对合同履行情况进行动态跟踪。要加强对供应商履约情况的监督检查,重点关注产品质量、交货期、服务质量等方面。对发现的问题,要及时督促供应商整改。

+ +

四、规范合同验收程序

+

各单位要严格执行合同验收制度,按照合同约定的验收标准和方法进行验收。验收人员应当如实记录验收情况,出具验收报告。验收不合格的,要及时通知供应商整改或者退货。

+ +

五、加强合同档案管理

+

各单位要建立健全合同档案管理制度,对合同文本、履行记录、验收报告、付款凭证等资料进行归档管理。要加强合同信息化管理,提高合同管理效率。

+ +

六、严肃合同履约考核

+

各单位要将合同履约情况纳入供应商评价体系,对供应商履约情况进行考核评价。对履约情况良好的供应商,可以在同等条件下优先考虑;对履约情况不良的供应商,要依据合同约定追究违约责任,并在供应商评价中予以扣分或者降级。

+ +

特此通知。

+ `, + attachments: [ + { name: '合同履约管理通知.pdf', url: '/files/合同履约管理通知.pdf', type: 'pdf' } + ] + } +}; + +const PolicyInfo: React.FC = () => { + const location = useLocation(); + const id = new URLSearchParams(location.search).get("id"); + const [policyDetail, setPolicyDetail] = useState(null); + const [loading, setLoading] = useState(true); + + // 模拟获取政策法规详情数据 + useEffect(() => { + // 实际项目中应该通过API获取数据 + setTimeout(() => { + if (id && mockPolicyDetails[id]) { + setPolicyDetail(mockPolicyDetails[id]); + } else { + // 处理ID不存在的情况 + message.error('政策法规不存在'); + } + setLoading(false); + }, 500); + }, [id]); + + // 处理返回列表 + const handleBack = () => { + window.history.back(); + }; + + // 处理下载附件 + const handleDownload = (url: string, name: string) => { + message.success(`开始下载: ${name}`); + console.log('下载附件:', url, name); + // 实际项目中应该调用下载API + // window.open(url); + }; + + // 根据文件类型获取图标 + const getFileIcon = (type: string) => { + switch (type) { + case 'pdf': + return ; + case 'word': + return ; + case 'excel': + return ; + default: + return ; + } + }; + + if (loading) { + return ( +
+ +
+ ); + } + + if (!policyDetail) { + return ( +
+ 未找到相关政策法规 + +
+ ); + } + + return ( +
+
+ +
+ +
+
+ + {policyDetail.title} + +
+ +
+
+ 发布时间: {policyDetail.publishDate} +
+
+ 发布人: {policyDetail.publisher} +
+
+ + + +
+
+
+ + {policyDetail.attachments && policyDetail.attachments.length > 0 && ( +
+ +
附件下载
+
+ {policyDetail.attachments.map((attachment: any, index: number) => ( + + ))} +
+
+ )} +
+
+ ); +}; + +export default PolicyInfo;