= (props) => {
return (
<>
-
-
{
- let params = ''
- for (const key in form?.getFieldsValue()) {
- let element = form?.getFieldsValue()[key];
- if (element != undefined) {
- params = params + '&' + key + '=' + element
+
+
+
{
+ let params = ''
+ for (const key in form?.getFieldsValue()) {
+ let element = form?.getFieldsValue()[key];
+ if (element != undefined) {
+ params = params + '&' + key + '=' + element
+ }
}
- }
- return [
- ,
- ,
- ,
- ];
- },
- }}
- columns={columns}
- options={false}
- request={(params) =>
- getAgencyGetPagelist({ ...params, pageNo: params.current }).then((res: any) => {
- const result = {
- data: res.data?.records,
- total: res.data?.total,
- success: res.success,
- pageSize: res.data?.size,
- current: res.data?.current
- }
- return result;
- })
- }
- pagination={{ defaultPageSize: 10, showSizeChanger: false }}
- />
-
+ return [
+ ,
+ ,
+ ,
+ ];
+ },
+ }}
+ columns={columns}
+ options={false}
+ loading={false}
+ request={(params) => {
+ setLoading(true);
+ return getAgencyGetPagelist({ ...params, pageNo: params.current }).then((res: any) => {
+ const result = {
+ data: res.data?.records,
+ total: res.data?.total,
+ success: res.success,
+ pageSize: res.data?.size,
+ current: res.data?.current
+ }
+ return result;
+ }).finally(() => {
+ setLoading(false);
+ })
+ }}
+ pagination={{ defaultPageSize: 10, showSizeChanger: false }}
+ />
+
+
{
viewInvoiceValues ? (
diff --git a/src/pages/MainPage/ProjectManager/manager.js b/src/pages/MainPage/ProjectManager/manager.js
index 6728594..a9ed872 100644
--- a/src/pages/MainPage/ProjectManager/manager.js
+++ b/src/pages/MainPage/ProjectManager/manager.js
@@ -14,8 +14,9 @@ import { getURLInformation } from '@/utils/CommonUtils';
import MessageDetail from '@/pages/SystemMessage/message/components/messageDetail'
import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail'
import QuestDetail from '@/pages/SystemMessage/message/components/questDetail'
-import ChatUI from '@/pages/customerservice/support/conversation'
import { getQuestList } from '@/pages/SystemMessage/message/service'
+import ApprovalDetail from '@/pages/SystemMessage/message/components/approvalDetail'
+import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服
@connect(({ dashboard, loading }) => ({
...dashboard,
downlistLoading: loading.effects['dashboard/fetchDowntlist'],
@@ -30,7 +31,8 @@ class manager extends PureComponent {
detailId: '1', // 公告id
noticeDetail: false, // 公告弹窗
questData: {},//问卷数据
- questVisible: false, //问卷弹窗
+ questVisible: false,//问卷弹窗
+ mainDetail: false, // 审批单消息弹窗
isModalVisible: false, //智慧客服
isFlash: false, //智慧客服
isCloseWs: true, //智慧客服
@@ -65,6 +67,10 @@ class manager extends PureComponent {
type: "dashboard/fetchtlistre",
payload: { pageNo: 1, pageSize: 7 }
})
+ this.props.dispatch({
+ type: "dashboard/fetchtClarify",
+ payload: { authorizestate: '0', templatetype: '4', size: 6 }
+ })
NTKF_PARAM = {
siteid: "bl_1000", //企业ID,,为固定值
settingid: "bl_1000_1492484340268", //接待组ID,为固定值,必填
@@ -80,6 +86,7 @@ class manager extends PureComponent {
this.setState({staffId: userData.userId})
this.setState({staffName: userData.fullName})
this.setState({supplierNumber: userData? userData.organizationId: 'EMPTY'})
+ this.approvalDetail()
}
onChange = (date, dateString) => {
this.setState({
@@ -106,7 +113,8 @@ class manager extends PureComponent {
}
closeModel = () => { // 关闭消息弹窗
this.setState({
- messageDetail: false
+ messageDetail: false,
+ mainDetail: false,
})
}
lookInfo = (id) => { // 公告查看
@@ -120,17 +128,22 @@ class manager extends PureComponent {
noticeDetail: false
})
}
+ approvalDetail = () => { // 审批单消息查看详情
+ this.setState({
+ mainDetail: true
+ })
+ }
toParticipate = async (servicecode) => {//问卷调查弹窗
const { questId } = JSON.parse(servicecode);
await getQuestList({ id: questId }).then(res => {
- if (res?.code == 200 && res?.success) {
- this.setState({
- questData: res?.data,
- questVisible: true,
- })
- }
+ if (res?.code == 200 && res?.success) {
+ this.setState({
+ questData: res?.data,
+ questVisible: true,
+ })
+ }
})
- }
+ }
closeParticipate = () => { // 关闭问卷调查弹窗
this.setState({
questVisible: false
@@ -159,26 +172,27 @@ class manager extends PureComponent {
history.push('/ProjectLayout/Manager/HomePageSectionList');
};
render() {
- const { downlist, projectlist, staloading, tlist, trelist } = this.props;
- const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName,} = this.state; //智慧客服
+ const { downlist, projectlist, staloading, tlist, trelist, idList, dateNum } = this.props;
+ const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, mainDetail, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, } = this.state;
return (
<>
{
- START_ENV == 'UAT' || START_ENV == 'DEV' || START_ENV == 'sim' ? '' :
- this.talkXy()}>咨询服务︵8:30|12:3013:00|17:00︶
+ START_ENV == 'UAT' || START_ENV == 'DEV' || START_ENV == 'sim' ? '' :
+ this.talkXy()}>咨询服务︵8:30|12:3013:00|17:00︶
}
- {
- /*history.push('/SystemMessage/message')*/
- if(isCloseWs){
+ {
+ //history.push('/SystemMessage/message')
+ //智慧客服
+ if(isCloseWs){
this.setState({optionsModal: true})
}else{
this.setState({isModalVisible: true})
this.setState({isCloseWs: false})
this.setState({isFlash :false})
}
- }}>更多
}>
+ }}>更多}>
{trelist != [] && trelist.map((item, index) => {
return (
{ item.templatetype == '3' ? this.toParticipate(item.servicecode) : this.lookDetail(item.msgId) }} className="messagetre" key={item.id}>
@@ -295,11 +309,14 @@ class manager extends PureComponent {
/>
- {messageDetail ? { this.closeModel(), this.props.dispatch({type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 }}) }} modalVisible={messageDetail} /> : null}
- {questVisible ? { this.closeParticipate(), this.props.dispatch({type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 }}) }} modalVisible={questVisible} /> : null}
+ {messageDetail ? { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 } }) }} modalVisible={messageDetail} /> : null}
+ {questVisible ? { this.closeParticipate(), this.props.dispatch({ type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 } }) }} modalVisible={questVisible} /> : null}
{noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />}
- {/*智慧客服*/}
- 0 ? { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtClarify", payload: { authorizestate: '0', templatetype: '4', size: 6 } }) }} modalVisible={mainDetail} /> : null
+ }
+ {/*智慧客服*/}
+ {
this.setState({projectModal: true})
}}
diff --git a/src/pages/MainPage/ProjectManager/purchaseManager.js b/src/pages/MainPage/ProjectManager/purchaseManager.js
index 61177a3..1ffb5e3 100644
--- a/src/pages/MainPage/ProjectManager/purchaseManager.js
+++ b/src/pages/MainPage/ProjectManager/purchaseManager.js
@@ -15,6 +15,7 @@ import MessageDetail from '@/pages/SystemMessage/message/components/messageDetai
import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail'
import QuestDetail from '@/pages/SystemMessage/message/components/questDetail'
import { getQuestList } from '@/pages/SystemMessage/message/service'
+import ApprovalDetail from '@/pages/SystemMessage/message/components/approvalDetail'
@connect(({ dashboard, loading }) => ({
...dashboard,
@@ -30,7 +31,8 @@ class manager extends PureComponent {
detailId: '1', // 公告id
noticeDetail: false, // 公告弹窗
questData: {},//问卷数据
- questVisible: false //问卷弹窗
+ questVisible: false, //问卷弹窗
+ mainDetail: false, // 审批单消息弹窗
}
componentDidMount() {
this.props.dispatch({
@@ -49,6 +51,10 @@ class manager extends PureComponent {
type: "dashboard/fetchtlistre",
payload: { pageNo: 1, pageSize: 7 }
})
+ this.props.dispatch({
+ type: "dashboard/fetchtClarify",
+ payload: { authorizestate: '0', templatetype: '4', size: 6 }
+ })
NTKF_PARAM = {
siteid: "bl_1000", //企业ID,,为固定值
settingid: "bl_1000_1492484340268", //接待组ID,为固定值,必填
@@ -58,6 +64,7 @@ class manager extends PureComponent {
userlevel: "1", //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端
erpparam: "abc" //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成
}
+ this.approvalDetail()
}
onChange = (date, dateString) => {
this.setState({
@@ -84,7 +91,8 @@ class manager extends PureComponent {
}
closeModel = () => { // 关闭消息弹窗
this.setState({
- messageDetail: false
+ messageDetail: false,
+ mainDetail: false,
})
}
lookInfo = (id) => { // 公告查看
@@ -98,17 +106,22 @@ class manager extends PureComponent {
noticeDetail: false
})
}
+ approvalDetail = () => { // 审批单消息查看详情
+ this.setState({
+ mainDetail: true
+ })
+ }
toParticipate = async (servicecode) => {//问卷调查弹窗
const { questId } = JSON.parse(servicecode);
await getQuestList({ id: questId }).then(res => {
- if (res?.code == 200 && res?.success) {
- this.setState({
- questData: res?.data,
- questVisible: true,
- })
- }
+ if (res?.code == 200 && res?.success) {
+ this.setState({
+ questData: res?.data,
+ questVisible: true,
+ })
+ }
})
- }
+ }
closeParticipate = () => { // 关闭问卷调查弹窗
this.setState({
questVisible: false
@@ -119,20 +132,20 @@ class manager extends PureComponent {
history.push('/ProjectLayout/Manager/HomePageSectionList');
};
talkXy = () => {
- if(NTKF){
+ if (NTKF) {
NTKF.im_openInPageChat('bl_1000_1492484340268');
} else {
message.warn('小优客服初始化失败,请联系系统管理员!')
}
}
render() {
- const { downlist, projectlist, staloading, tlist, trelist } = this.props;
- const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible } = this.state;
+ const { downlist, projectlist, staloading, tlist, trelist, idList, dateNum } = this.props;
+ const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, mainDetail } = this.state;
return (
<>
{
START_ENV == 'UAT' || START_ENV == 'DEV' || START_ENV == 'sim' ? '' :
- this.talkXy()}>咨询服务︵8:30|12:3013:00|17:00︶
+ this.talkXy()}>咨询服务︵8:30|12:3013:00|17:00︶
}
@@ -249,9 +262,12 @@ class manager extends PureComponent {
/>
- {messageDetail ? { this.closeModel(), this.props.dispatch({type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 }}) }} modalVisible={messageDetail} /> : null }
- {questVisible ? { this.closeParticipate(), this.props.dispatch({type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 }}) }} modalVisible={questVisible} /> : null}
+ {messageDetail ? { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 } }) }} modalVisible={messageDetail} /> : null}
+ {questVisible ? { this.closeParticipate(), this.props.dispatch({ type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 } }) }} modalVisible={questVisible} /> : null}
{noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />}
+ {
+ idList.length > 0 ? { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtClarify", payload: { authorizestate: '0', templatetype: '4', size: 6 } }) }} modalVisible={mainDetail} /> : null
+ }
>
)
}
diff --git a/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectDocumentation.tsx b/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectDocumentation.tsx
index 29107d0..a1bd77b 100644
--- a/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectDocumentation.tsx
+++ b/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectDocumentation.tsx
@@ -57,6 +57,8 @@ const ProjectDocumentation: React.FC = () => {
render: (_: any, record: any) => {
//标段信息
let sectionFirst = record?.sectionFirst;
+ //获取字段名称
+ let openingName = openingTimeText(record?.bidMethodDict, record?.examinationMethodDict);
return (
<>
@@ -73,7 +75,10 @@ const ProjectDocumentation: React.FC = () => {
{sectionFirst.bidSectName}
- {createSection(record)}
+ {createSection(record, openingName)}
+
+ {openingName}时间:{isEmpty(sectionFirst.sectionOpenTime) ? '-' : sectionFirst.sectionOpenTime}
+
>
)
}
@@ -154,7 +159,7 @@ const ProjectDocumentation: React.FC = () => {
* @param record
* @returns
*/
- const createSection = (record: any) => {
+ const createSection = (record: any, openingName: string) => {
//标段信息
let sectionFirst = record?.sectionFirst;
//是否异常
@@ -222,7 +227,7 @@ const ProjectDocumentation: React.FC = () => {
sectionFirst.sectionCount > 1 && (
+
)}
trigger="hover"
overlayStyle={{ width: "45%" }}
@@ -236,7 +241,36 @@ const ProjectDocumentation: React.FC = () => {
)
}
-
+ /**
+ * 开标时间,评审开始时间字段显示
+ * @param bidMethod
+ * @param examinationMethod
+ */
+ const openingTimeText = (bidMethod: string, examinationMethod: string | null) => {
+ const bid = '开标';
+ const bid_pre = '资审开标';
+ const comparison = '开启';
+ const comparison_pre = '资审开启';
+ const negotiation = '谈判开始';
+ const review = '评审开始';
+ if (bidMethod == 'procurement_mode_1' || bidMethod == 'procurement_mode_2') {
+ if (examinationMethod == 'examination_method_1') { //预审
+ return bid_pre;
+ } else {
+ return bid;
+ }
+ } else if (bidMethod == 'procurement_mode_5' || bidMethod == 'procurement_mode_6') {
+ return negotiation;
+ } else if (bidMethod == 'procurement_mode_3') {
+ if (examinationMethod == 'examination_method_1') { //预审
+ return comparison_pre;
+ } else {
+ return comparison;
+ }
+ } else {
+ return review;
+ }
+ };
/**
* 项目跟进
diff --git a/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectSectionInfo.tsx b/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectSectionInfo.tsx
index 80e7a6f..811f35b 100644
--- a/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectSectionInfo.tsx
+++ b/src/pages/Project/ProjectManage/ProjectManager/ProjectDocumentation/components/ProjectSectionInfo.tsx
@@ -8,14 +8,15 @@ import { getBusinessModuleName, getSectionBybidMethodDict, getTagColor } from ".
interface ProjectSectionInfoItem {
projectId: string,
- bidMethodDict: string
+ bidMethodDict: string,
+ openingName: string,
}
//进度条长度
const progressWidth = {
width: '180px'
}
const ProjectSectionInfo: React.FC = (props) => {
- const { projectId, bidMethodDict } = props;
+ const { projectId, bidMethodDict, openingName } = props;
const [listData, setListData] = useState([]);
const [loading, setLoading] = useState(false);
//获取字典
@@ -48,6 +49,9 @@ const ProjectSectionInfo: React.FC = (props) => {
{createSection(record)}
+
+ {openingName}时间:{isEmpty(record.sectionOpenTime) ? '-' : record.sectionOpenTime}
+
)
@@ -108,7 +112,7 @@ const ProjectSectionInfo: React.FC = (props) => {
archiveStatus
?
已归档
-
+
:
{getBusinessModuleName(dictData, bidMethodDict, sectionFirst?.businessModule)}
@@ -120,7 +124,7 @@ const ProjectSectionInfo: React.FC = (props) => {
异常
}
- 报名人数:{isEmpty(sectionFirst.applyCount) ? "0" : sectionFirst.applyCount}
+ 报名人数:{isEmpty(sectionFirst.applyCount) ? "0" : sectionFirst.applyCount}
)
}
diff --git a/src/pages/Project/ProjectManage/Supervision/components/FavoritesList.tsx b/src/pages/Project/ProjectManage/Supervision/components/FavoritesList.tsx
new file mode 100644
index 0000000..14c24fe
--- /dev/null
+++ b/src/pages/Project/ProjectManage/Supervision/components/FavoritesList.tsx
@@ -0,0 +1,206 @@
+import { getUrlRelativePath, isEmpty, isNotEmpty, proTableValueEnum } from '@/utils/CommonUtils';
+import { followUpAProjectManager, getDicData, setPurchaseCanOperate } from '@/utils/session';
+import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table';
+import { Button, message, Popconfirm, Spin } from 'antd';
+import React, { useRef, useState } from 'react';
+import { useHistory } from 'umi';
+import { getFavoritesList, updateReadStatus } from '../service';
+
+interface FavoritesListProps {
+ projectName?: string | null,
+ bidMethodDict?: string | null,
+ current?: string | null,
+ tabs: string | null,
+}
+/**
+ * 监督项目收藏列表
+ * @param props
+ * @returns
+ */
+const FavoritesList: React.FC = (props) => {
+ const { projectName, bidMethodDict, current, tabs } = props
+
+ const [spin, spinSet] = useState(false);
+ //查询分页数据
+ const [pageData, pageDataSet] = useState({
+ pageNo: tabs === 'favoritesList' ? isNotEmpty(current) ? Number(current) : 1 : 1,
+ pageSize: 10
+ });
+ //项目列表参数
+ const [projectParams, setProjectParams] = useState("");
+ //获取字典
+ const getDict: any = getDicData();
+ const dictData = JSON.parse(getDict);
+ //标的类型
+ const procurementTypeEntrust = 'procurement_type=entrust';
+ //采购方式
+ const procurementModeEntrust = 'procurement_mode=entrust';
+ const history = useHistory();
+ const ref = useRef();
+ const columns: ProColumns[] = [
+ {
+ title: '序号',
+ valueType: 'index',
+ width: 50,
+ },
+ {
+ title: '采购方式',
+ dataIndex: 'bidMethodDict',
+ width: '8%',
+ valueEnum: proTableValueEnum(dictData[procurementModeEntrust]),
+ initialValue: tabs === 'favoritesList' ? isNotEmpty(bidMethodDict) ? bidMethodDict : null : null,
+ },
+ {
+ title: '项目名称',
+ dataIndex: 'projectName',
+ initialValue: tabs === 'favoritesList' ? isNotEmpty(projectName) ? projectName : null : null,
+ },
+ {
+ title: '项目编号',
+ dataIndex: 'ebpProjectNumber',
+ search: false,
+ width: '10%',
+ },
+ {
+ title: '采购人',
+ dataIndex: 'tendereeOrgName',
+ search: false,
+ width: '15%',
+ },
+ {
+ title: '建档时间',
+ dataIndex: 'createDate',
+ search: false,
+ width: '10%',
+ },
+ {
+ title: '标的类型',
+ dataIndex: 'procurementType',
+ width: '8%',
+ search: false,
+ valueEnum: proTableValueEnum(dictData[procurementTypeEntrust]),
+ },
+ {
+ title: '所属区域',
+ dataIndex: 'regionDictName',
+ search: false,
+ width: '10%',
+ },
+ {
+ title: '操作',
+ valueType: 'option',
+ width: 150,
+ render: (_: any, record: any) => [
+ ,
+ removeFavorites(record)}
+ okText="确定"
+ cancelText="取消"
+ >
+
+ ,
+ ]
+ },
+ ]
+
+ /**
+ * 项目跟进
+ * @param data
+ */
+ const followUpProject = async (data: any) => {
+ data.returnURL = getReturnURL();
+ await followUpAProjectManager(data);
+ setPurchaseCanOperate();
+ history.push('/ProjectLayout/Manager/HomePageSectionList');
+ };
+
+ /**
+ * 移除收藏
+ * @param data
+ */
+ const removeFavorites = async (data: any) => {
+ const params = {
+ id: data.notificationId,
+ projectId: data.id,
+ status: 'd',
+ }
+ spinSet(true);
+ await updateReadStatus(params).then(res => {
+ if (res?.code == 200) {
+ message.success('移除收藏成功');
+ ref.current?.reload();
+ }
+ })
+ };
+
+ /**
+ * 获取返回路径
+ * @returns
+ */
+ const getReturnURL = () => {
+ let projectURLParams = JSON.parse(projectParams);
+ let params = `${'?current=' + projectURLParams.current}${isEmpty(projectURLParams.projectName) ? '' : '&projectName=' + projectURLParams.projectName}${isEmpty(projectURLParams.bidMethodDict) ? '' : '&bidMethodDict=' + projectURLParams.bidMethodDict}&tabs=favoritesList`;
+ return getUrlRelativePath() + params;
+ }
+
+ return (
+
+
+
{
+ setProjectParams(JSON.stringify(params));
+ spinSet(true);
+ return await getFavoritesList({
+ ...params,
+ basePageRequest: { pageNo: pageData.pageNo, pageSize: pageData.pageSize },
+ }).then((res) => {
+ const result = {
+ data: res.data.records,
+ total: res.data.total,
+ success: res.success,
+ pageSize: res.data.size,
+ current: res.data.current
+ }
+ return result;
+ }).finally(() => {
+ isNotEmpty(window.location.search) && history.push(window.location.pathname);
+ spinSet(false);
+ })
+ }
+ }
+ pagination={{
+ defaultPageSize: 10,
+ defaultCurrent: tabs === 'favoritesList' ? isNotEmpty(current) ? Number(current) : 1 : 1,
+ size: "small",
+ showSizeChanger: false,
+ onChange: (page, pageSize) => pageDataSet({ pageNo: page, pageSize: pageSize }),
+ onShowSizeChange: (current, size) => pageDataSet({ pageNo: current, pageSize: size }),
+ }}
+ onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }) }}
+ />
+
+
+ )
+}
+export default FavoritesList;
\ No newline at end of file
diff --git a/src/pages/Project/ProjectManage/Supervision/components/ProjectManage.tsx b/src/pages/Project/ProjectManage/Supervision/components/ProjectManage.tsx
new file mode 100644
index 0000000..e556efa
--- /dev/null
+++ b/src/pages/Project/ProjectManage/Supervision/components/ProjectManage.tsx
@@ -0,0 +1,176 @@
+import { getUrlRelativePath, isEmpty, isNotEmpty, proTableValueEnum } from '@/utils/CommonUtils';
+import { followUpAProjectManager, getDicData, setPurchaseCanOperate } from '@/utils/session';
+import ProTable, { ProColumns } from '@ant-design/pro-table';
+import { Button, Spin } from 'antd';
+import React, { useState } from 'react';
+import { useHistory } from 'umi';
+import { getPage } from '../service';
+
+interface ProjectManageProps {
+ projectName?: string | null,
+ bidMethodDict?: string | null,
+ current?: string | null,
+ tabs: string | null,
+}
+/**
+ * 项目管理列表
+ * @param props
+ * @returns
+ */
+const ProjectManage: React.FC = (props) => {
+ const { projectName, bidMethodDict, current, tabs } = props
+
+ const [spin, spinSet] = useState(false);
+ //查询分页数据
+ const [pageData, pageDataSet] = useState({
+ pageNo: tabs === 'projectList' ? isNotEmpty(current) ? Number(current) : 1 : 1,
+ pageSize: 10
+ });
+ //项目列表参数
+ const [projectParams, setProjectParams] = useState("");
+ //获取字典
+ const getDict: any = getDicData();
+ const dictData = JSON.parse(getDict);
+ //标的类型
+ const procurementTypeEntrust = 'procurement_type=entrust';
+ //采购方式
+ const procurementModeEntrust = 'procurement_mode=entrust';
+ const history = useHistory();
+
+ const columns: ProColumns[] = [
+ {
+ title: '序号',
+ valueType: 'index',
+ width: 50,
+ },
+ {
+ title: '采购方式',
+ dataIndex: 'bidMethodDict',
+ width: '8%',
+ valueEnum: proTableValueEnum(dictData[procurementModeEntrust]),
+ initialValue: tabs === 'projectList' ? isNotEmpty(bidMethodDict) ? bidMethodDict : null : null,
+ },
+ {
+ title: '项目名称',
+ dataIndex: 'projectName',
+ initialValue: tabs === 'projectList' ? isNotEmpty(projectName) ? projectName : null : null,
+ },
+ {
+ title: '项目编号',
+ dataIndex: 'ebpProjectNumber',
+ search: false,
+ width: '10%',
+ },
+ {
+ title: '采购人',
+ dataIndex: 'tendereeOrgName',
+ search: false,
+ width: '15%',
+ },
+ {
+ title: '建档时间',
+ dataIndex: 'createDate',
+ search: false,
+ width: '10%',
+ },
+ {
+ title: '标的类型',
+ dataIndex: 'procurementType',
+ width: '8%',
+ search: false,
+ valueEnum: proTableValueEnum(dictData[procurementTypeEntrust]),
+ },
+ {
+ title: '所属区域',
+ dataIndex: 'regionDictName',
+ search: false,
+ width: '10%',
+ },
+ {
+ title: '操作',
+ valueType: 'option',
+ width: 150,
+ render: (_: any, record: any) =>
+ (
+ <>
+
+ >
+ )
+ },
+ ]
+
+ /**
+ * 项目跟进
+ * @param data
+ */
+ const followUpProject = async (data: any) => {
+ data.returnURL = getReturnURL();
+ await followUpAProjectManager(data);
+ setPurchaseCanOperate();
+ history.push('/ProjectLayout/Manager/HomePageSectionList');
+ };
+
+ /**
+ * 获取返回路径
+ * @returns
+ */
+ const getReturnURL = () => {
+ let projectURLParams = JSON.parse(projectParams);
+ let params = `${'?current=' + projectURLParams.current}${isEmpty(projectURLParams.projectName) ? '' : '&projectName=' + projectURLParams.projectName}${isEmpty(projectURLParams.bidMethodDict) ? '' : '&bidMethodDict=' + projectURLParams.bidMethodDict}&tabs=projectList`;
+ return getUrlRelativePath() + params;
+ }
+
+ return (
+
+
+
{
+ setProjectParams(JSON.stringify(params));
+ spinSet(true);
+ return await getPage({
+ ...params,
+ basePageRequest: { pageNo: pageData.pageNo, pageSize: pageData.pageSize },
+ }).then((res) => {
+ const result = {
+ data: res.data.records,
+ total: res.data.total,
+ success: res.success,
+ pageSize: res.data.size,
+ current: res.data.current
+ }
+ return result;
+ }).finally(() => {
+ isNotEmpty(window.location.search) && history.push(window.location.pathname);
+ spinSet(false);
+ })
+ }
+ }
+ pagination={{
+ defaultPageSize: 10,
+ defaultCurrent: tabs === 'projectList' ? isNotEmpty(current) ? Number(current) : 1 : 1,
+ size: "small",
+ showSizeChanger: false,
+ onChange: (page, pageSize) => pageDataSet({ pageNo: page, pageSize: pageSize }),
+ onShowSizeChange: (current, size) => pageDataSet({ pageNo: current, pageSize: size }),
+ }}
+ onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }) }}
+ />
+
+
+ )
+}
+export default ProjectManage;
\ No newline at end of file
diff --git a/src/pages/Project/ProjectManage/Supervision/index.tsx b/src/pages/Project/ProjectManage/Supervision/index.tsx
index e24ebbf..26db24d 100644
--- a/src/pages/Project/ProjectManage/Supervision/index.tsx
+++ b/src/pages/Project/ProjectManage/Supervision/index.tsx
@@ -1,136 +1,42 @@
-import { proTableValueEnum } from '@/utils/CommonUtils';
-import { followUpAProjectManager, getDicData, setPurchaseCanOperate } from '@/utils/session';
-import ProTable, { ProColumns } from '@ant-design/pro-table';
-import { Button, Card, Spin } from 'antd';
-import React, { useEffect, useState } from 'react';
-import { useHistory } from 'umi';
-import { getPage } from './service';
-/**/
+import { getURLInformation, getUrlParam, isNotEmpty } from '@/utils/CommonUtils';
+import { Card, Radio } from 'antd';
+import React, { useState } from 'react';
+import FavoritesList from './components/FavoritesList';
+import ProjectManage from './components/ProjectManage';
+/**
+ * 监督项目管理
+ * @returns
+ */
const Index: React.FC<{}> = () => {
- const [spin, spinSet] = useState(false);
- //查询分页数据
- const [pageData, pageDataSet] = useState({
- pageNo: 1,
- pageSize: 10
- });
- //获取字典
- const getDict: any = getDicData();
- const dictData = JSON.parse(getDict);
- //标的类型
- const procurementTypeEntrust = 'procurement_type=entrust';
- //采购方式
- const procurementModeEntrust = 'procurement_mode=entrust';
- const history = useHistory();
- const columns: ProColumns[] = [
- {
- title: '序号',
- valueType: 'index',
- width: 50,
- },
- {
- title: '采购方式',
- dataIndex: 'bidMethodDict',
- width: '8%',
- valueEnum: proTableValueEnum(dictData[procurementModeEntrust]),
- },
- {
- title: '项目名称',
- dataIndex: 'projectName',
- },
- {
- title: '项目编号',
- dataIndex: 'ebpProjectNumber',
- search: false,
- width: '10%',
- },
- {
- title: '采购人',
- dataIndex: 'tendereeOrgName',
- search: false,
- width: '15%',
- },
- {
- title: '建档时间',
- dataIndex: 'createDate',
- search: false,
- width: '10%',
- },
- {
- title: '标的类型',
- dataIndex: 'procurementType',
- width: '8%',
- search: false,
- valueEnum: proTableValueEnum(dictData[procurementTypeEntrust]),
- },
- {
- title: '所属区域',
- dataIndex: 'regionDictName',
- search: false,
- width: '10%',
- },
- {
- title: '操作',
- valueType: 'option',
- width: 150,
- render: (_: any, record: any) =>
- (
- <>
-
- >
- )
- },
- ]
- //================================================================================FUNC
- /**
- * 项目跟进
- * @param data
- */
- const followUpProject = async (data: any) => {
- await followUpAProjectManager(data);
- setPurchaseCanOperate();
- history.push('/ProjectLayout/Manager/HomePageSectionList');
+ //url项目名称
+ const projectName = getUrlParam("projectName");
+ //url采购方式
+ const bidMethodDict = getURLInformation("bidMethodDict");
+ //url分页信息
+ const current = getURLInformation("current");
+ //url标签信息
+ const tabs = getURLInformation("tabs");
+ //radio value
+ const [mode, setMode] = useState(isNotEmpty(tabs) ? String(tabs) : 'projectList');
+
+ const handleModeChange = (e: any) => {
+ const mode = e.target.value;
+ setMode(mode);
};
+
return (
-
-
-
- getPage({
- ...params,
- basePageRequest: { pageNo: pageData.pageNo, pageSize: pageData.pageSize },
- }).then((res) => {
- const result = {
- data: res.data.records,
- total: res.data.total,
- success: res.success,
- pageSize: res.data.size,
- current: res.data.current
- }
- return result;
- })
- }
- pagination={{
- defaultPageSize: 10,
- showSizeChanger: false,
- onChange: (page, pageSize) => pageDataSet({ pageNo: page, pageSize: pageSize }),
- onShowSizeChange: (current, size) => pageDataSet({ pageNo: current, pageSize: size }),
- }}
- onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }) }}
- />
-
+
+
+ 项目管理
+ 监督项目收藏列表
+
+ {
+ mode === 'projectList' ? (
+
+ ) : (
+
+ )
+ }
)
}
diff --git a/src/pages/Project/ProjectManage/Supervision/service.ts b/src/pages/Project/ProjectManage/Supervision/service.ts
index 329963a..2b3a22f 100644
--- a/src/pages/Project/ProjectManage/Supervision/service.ts
+++ b/src/pages/Project/ProjectManage/Supervision/service.ts
@@ -4,9 +4,29 @@ import request from '@/utils/request';
* @param params
*/
export async function getPage(params?: any) {
- return request('/api/biz-service-ebtp-project/v1/projectRecord/supervisor/getPage',{
+ return request('/api/biz-service-ebtp-project/v1/projectRecord/supervisor/getPage', {
method: 'POST',
- data:params,
-
+ data: params,
+ });
+}
+/**
+ * 查询项目监督收藏列表
+ * @param params
+ */
+export async function getFavoritesList(params?: any) {
+ return request('/api/biz-service-ebtp-project/v1/notification/supervisor/getPage', {
+ method: 'POST',
+ data: params,
+ });
+}
+/**
+ * 收藏用-变更收藏状态(0-已收藏 d-未收藏)
+ * @param params
+ * @returns
+ */
+export async function updateReadStatus(params: any) {
+ return request('/api/biz-service-ebtp-project/v1/notification/addOrUpdate', {
+ method: 'POST',
+ data: { ...params },
});
}
\ No newline at end of file
diff --git a/src/pages/SystemMessage/message/components/approvalDetail.tsx b/src/pages/SystemMessage/message/components/approvalDetail.tsx
new file mode 100644
index 0000000..6b360f7
--- /dev/null
+++ b/src/pages/SystemMessage/message/components/approvalDetail.tsx
@@ -0,0 +1,179 @@
+import { Button, Form, Input, Modal } from "antd"
+import React, { useEffect, useState } from "react"
+import { describeSiteMsgDetail, getProjectById, selectMsgRead } from '../service'
+import '@/assets/ld_style.less'
+import { history } from 'umi';
+import { followUpAProjectManager, getDefId } from '@/utils/session';
+
+const { TextArea } = Input;
+
+interface ApprovalDetailProps {
+ modalVisible: boolean;
+ approvalId: string;
+ dateNum: Number;
+ trelist: any[];
+ onCancel: () => void;
+}
+
+const layout = {
+ labelCol: { span: 6 },
+ wrapperCol: { span: 15 },
+};
+
+const ApprovalDetail: React.FC = (props) => {
+ const { modalVisible, approvalId, onCancel, trelist, dateNum } = props;
+ const [form] = Form.useForm();
+ const [detailId, setDetailId] = useState(approvalId); // 详情id
+ const [lastVisible, setLastVisible] = useState(trelist?.indexOf(approvalId) == 0 ? true : false); // 上一条禁用
+ const [nextVisible, setNextVisible] = useState(trelist?.indexOf(approvalId) == trelist?.length - 1 ? true : false); // 下一条禁用
+ const [knowVisible, setKnowVisible] = useState(false); // 知道了禁用
+ const [projectId, setProjectId] = useState(); // 项目id
+ const [roomType, setRoomType] = useState(); // 判断资审候审
+ const [disFollowUp, setDisFollowUp] = useState(false) //跟进按钮隐藏
+
+ useEffect(() => {
+ Int(approvalId);
+ setDetailId(approvalId)
+ }, [approvalId]);
+ const Int = (detailId: any) => {
+ describeSiteMsgDetail(detailId).then(res => {
+ // if(res.code == 200){
+ if (res?.servicecode) {
+ let detailMess = JSON.parse(res.servicecode)
+ setProjectId(detailMess.tp_id)
+ setRoomType(detailMess.room_type)
+ } else {
+ // message.error('项目数据错误,无法获取流程,请联系管理员!')
+ setDisFollowUp(true)
+ }
+ res.authorizestate == '0' ? setKnowVisible(false) : setKnowVisible(true)
+ form.setFieldsValue({
+ "title": res.title,
+ "createtime": res.createtime,
+ "content": res.content
+ });
+ // }
+ });
+ };
+
+ const next = () => { // 下一条
+ setLastVisible(false)
+ let current = trelist.indexOf(detailId)
+ if (current < trelist.length - 2 && current != trelist.length - 2) {
+ setDetailId(trelist[current + 1])
+ Int(trelist[current + 1])
+ } else if (current == trelist.length - 2) {
+ setDetailId(trelist[current + 1])
+ Int(trelist[current + 1])
+ setNextVisible(true)
+ } else {
+ setNextVisible(true)
+ }
+ }
+
+ const last = () => { // 上一条
+ setNextVisible(false)
+ let current: any = trelist.indexOf(detailId)
+ if (current > 0 && current != 1) {
+ setDetailId(trelist[current - 1])
+ Int(trelist[current - 1])
+ } else if (current == 1) {
+ setDetailId(trelist[current - 1])
+ Int(trelist[current - 1])
+ setLastVisible(true)
+ } else {
+ setLastVisible(true)
+ }
+ }
+
+ const getRead = () => { // 知道了
+ selectMsgRead(detailId).then(res => {
+ setKnowVisible(true)
+ });
+ }
+
+ const getFollow = async () => { // 跟进
+ await getProjectById(projectId).then(async response => {
+ if (response?.code == 200 && response?.success == true) {
+ const resData = response?.data
+ await followUpAProjectManager(resData);
+ const defId = getDefId();
+ if (roomType == '1' && (defId == 'bid_prequalification' || defId == 'comparison_one_prequalification')) { //公开招标资格预审,公开比选一阶段资格预审
+ history.push('/ProjectLayout/ZYuShen/senior/Notice?roomType=1')
+ } else if (roomType == '2' && (defId == 'bid_prequalification' || defId == 'comparison_one_prequalification')) { //公开招标资格预审后审阶段,公开比选一阶段资格预审后审阶段
+ history.push('/ProjectLayout/biddingAnnouncement/BiddingInvitationList?roomType=2')
+ } else if (
+ defId == 'bid_qualification' ||
+ defId == 'comparison_one' ||
+ defId == 'comparison_multi' ||
+ defId == 'recruit' ||
+ defId == 'negotiation_competitive_public'
+ ) { //公开招标后审,公开比选一阶段后审,公开比选多阶段,招募单轮,竞争性谈判发公告
+ history.push('/ProjectLayout/biddingAnnouncement/BiddingAnnouncementList')
+ } else if (
+ defId == 'bid_invitation' ||
+ defId == 'negotiation_competitive_invite' ||
+ defId == 'negotiation_single'
+ ) { //邀请招标,竞争性谈判发邀请函,单一来源
+ history.push('/ProjectLayout/biddingAnnouncement/BiddingInvitationList')
+ } else if (
+ defId == 'recruit_multi'
+ ) { //多轮招募
+ history.push('/ProjectLayout/ZZhaoMu/Bid/BiddingAnnouncement/BiddingAnnouncementList')
+ }
+ }
+ })
+ }
+
+ return (
+ <>
+ onCancel()}
+ width={800}
+ centered
+ footer={[
+ ,
+ ,
+ ]}
+ >
+ 您有 {dateNum} 条公告审批结束消息,当前只显示 6 条最新的公告审批结束提示,请到 history.push('/SystemMessage/message')}> 这里 查看全部提示信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
+
+export default ApprovalDetail
+
diff --git a/src/pages/SystemMessage/message/components/messageDetail.tsx b/src/pages/SystemMessage/message/components/messageDetail.tsx
index 984e6f8..b78ed42 100644
--- a/src/pages/SystemMessage/message/components/messageDetail.tsx
+++ b/src/pages/SystemMessage/message/components/messageDetail.tsx
@@ -1,4 +1,4 @@
-import { followUpAProjectManager, followUpAProjectSupplier, getSessionRoleData } from "@/utils/session";
+import { followUpAProjectManager, followUpAProjectSupplier, getDefId, getSessionRoleData } from "@/utils/session";
import { Button, Form, Input, Modal } from "antd"
import React, { useEffect, useState } from "react"
import { describeSiteMsgDetail, selectMsgRead, getProjectById } from '../service'
@@ -90,6 +90,31 @@ const filesManageComponents: React.FC = (props) => {
} else {
history.push('/ProjectLayout/Tender/ProjectManager/ClarifyTheList?roomType=2')
}
+ } else if (routeType == 'approval') { //公告审批
+ const defId = getDefId();
+ if (roomType == '1' && (defId == 'bid_prequalification' || defId == 'comparison_one_prequalification')) { //公开招标资格预审,公开比选一阶段资格预审
+ history.push('/ProjectLayout/ZYuShen/senior/Notice?roomType=1')
+ } else if (roomType == '2' && (defId == 'bid_prequalification' || defId == 'comparison_one_prequalification')) { //公开招标资格预审后审阶段,公开比选一阶段资格预审后审阶段
+ history.push('/ProjectLayout/biddingAnnouncement/BiddingInvitationList?roomType=2')
+ } else if (
+ defId == 'bid_qualification' ||
+ defId == 'comparison_one' ||
+ defId == 'comparison_multi' ||
+ defId == 'recruit' ||
+ defId == 'negotiation_competitive_public'
+ ) { //公开招标后审,公开比选一阶段后审,公开比选多阶段,招募单轮,竞争性谈判发公告
+ history.push('/ProjectLayout/biddingAnnouncement/BiddingAnnouncementList')
+ } else if (
+ defId == 'bid_invitation' ||
+ defId == 'negotiation_competitive_invite' ||
+ defId == 'negotiation_single'
+ ) { //邀请招标,竞争性谈判发邀请函,单一来源
+ history.push('/ProjectLayout/biddingAnnouncement/BiddingInvitationList')
+ } else if (
+ defId == 'recruit_multi'
+ ) { //多轮招募
+ history.push('/ProjectLayout/ZZhaoMu/Bid/BiddingAnnouncement/BiddingAnnouncementList')
+ }
} else {
history.push('/ProjectLayout/Tender/ProjectManager/MentionDoubtReply')
}
diff --git a/src/pages/SystemMessage/message/index.tsx b/src/pages/SystemMessage/message/index.tsx
index a9020a1..b095af0 100644
--- a/src/pages/SystemMessage/message/index.tsx
+++ b/src/pages/SystemMessage/message/index.tsx
@@ -34,6 +34,7 @@ const FilesList: React.FC<{}> = () => {
1: { text: '提疑消息' },
2: { text: '澄清消息' },
3: { text: '调查问卷' },
+ 4: { text: '公告审批' },
},
},
{
diff --git a/src/pages/Tender/ProjectManager/MentionDoubtReply/components/MentionDoubtReply.tsx b/src/pages/Tender/ProjectManager/MentionDoubtReply/components/MentionDoubtReply.tsx
index 31c7972..4939dbf 100644
--- a/src/pages/Tender/ProjectManager/MentionDoubtReply/components/MentionDoubtReply.tsx
+++ b/src/pages/Tender/ProjectManager/MentionDoubtReply/components/MentionDoubtReply.tsx
@@ -121,6 +121,15 @@ const MentionDoubtReply: React.FC<{}> = () => {
3: { text: '已回复' }
}
},
+ {
+ title: '供应商查阅回复',
+ dataIndex: 'replyReadStatus',
+ width: 150,
+ valueEnum: {
+ 0: { text: '未查看' },
+ 1: { text: '已查看' },
+ }
+ },
{
title: '操作',
width: 150,
diff --git a/src/pages/Tender/supplier/SupplierQuestionsOrObjections/components/SupplierQuestionsOrObjections.tsx b/src/pages/Tender/supplier/SupplierQuestionsOrObjections/components/SupplierQuestionsOrObjections.tsx
index cba10d0..31efac2 100644
--- a/src/pages/Tender/supplier/SupplierQuestionsOrObjections/components/SupplierQuestionsOrObjections.tsx
+++ b/src/pages/Tender/supplier/SupplierQuestionsOrObjections/components/SupplierQuestionsOrObjections.tsx
@@ -4,7 +4,7 @@ import { Button, Input, Select, Form, Upload, Modal, Checkbox, Card, message, Sp
import { UploadOutlined } from '@ant-design/icons';
import ProTable from '@ant-design/pro-table';
import { queryingPagingData } from '@/utils/PageUtils';
-import { deleteDissent, getSections, saveDissent, submitDissent, updateDissent } from '../service';
+import { changeSupStatus, deleteDissent, getSections, saveDissent, submitDissent, updateDissent } from '../service';
import InquiryBox from '@/utils/InquiryBox';
import { commonMessage, deleteMessage, saveMessage } from '@/utils/MessageUtils';
import { getURLInformation, isEmpty } from '@/utils/CommonUtils';
@@ -197,13 +197,20 @@ const SupplierQuestionsOrObjections: React.FC<{}> = () => {
* 查看
* @param data
*/
- const view = (data: any) => {
+ const view = async (data: any) => {
+ if (data.dissentStatus == '3' && data.replyReadStatus != '1') {//已回复状态点击查看更新代理状态
+ setSping(true);
+ const res = await changeSupStatus(data.id).finally(() => {
+ setSping(false);
+ });
+ if (res) { } else { return }
+ }
setWhetherReadonly(true);
- setVisible(true);
setBid(data.dissentDatasetId);
setResultsDatasetId(data.resultsDatasetId);
setWhetherToDisplayTheReply(String(data.dissentStatus) === '3');
form.setFieldsValue(data);
+ setVisible(true);
}
/**
diff --git a/src/pages/Tender/supplier/SupplierQuestionsOrObjections/service.ts b/src/pages/Tender/supplier/SupplierQuestionsOrObjections/service.ts
index e9ebce2..e4e1308 100644
--- a/src/pages/Tender/supplier/SupplierQuestionsOrObjections/service.ts
+++ b/src/pages/Tender/supplier/SupplierQuestionsOrObjections/service.ts
@@ -29,10 +29,10 @@ export function saveDissent(data: any) {
* 修改数据
* @param data
*/
-export function updateDissent(data:any){
+export function updateDissent(data: any) {
return request('/api/biz-service-ebtp-tender/v1/clarifydissent/update_dissent', {
- method:'post',
- data:data
+ method: 'post',
+ data: data
});
}
@@ -50,6 +50,16 @@ export function submitDissent(data: any) {
* 选择 标段
* @param projectId
*/
-export function getSections (projectId:any) {
+export function getSections(projectId: any) {
return request('/api/biz-service-ebtp-tender/v1/supplier_register/packages/supplied/' + projectId);
}
+
+/**
+ * 供应商查看已回复提疑
+ * @param dissentId
+ */
+export function changeSupStatus(dissentId: any) {
+ return request('/api/biz-service-ebtp-tender/v1/clarifydissent/checkReply/' + dissentId, {
+ method: 'PUT',
+ });
+}
diff --git a/src/pages/webOffice/weboffice0609.tsx b/src/pages/webOffice/weboffice0609.tsx
index e91b84a..fadad0b 100644
--- a/src/pages/webOffice/weboffice0609.tsx
+++ b/src/pages/webOffice/weboffice0609.tsx
@@ -2,7 +2,7 @@
* @Author: zhoujianlong
* @Date: 2021-06-09 15:29:07
* @Last Modified by: zhoujianlong
- * @Last Modified time: 2022-03-07 10:51:39
+ * @Last Modified time: 2022-04-11 20:13:27
*/
import { Button, Modal } from 'antd';
import { LoadingOutlined } from '@ant-design/icons';
@@ -259,7 +259,8 @@ const WebOffice0609: React.FC = (props) => {
}
openUrl += `.html?readonly=${readOnly}&DocfileCode=${docFileCode_}&PDFfileCode=${pdfFileCode_}&HTMLfileCode=${htmlFileCode_}&savePDF=${savePDF}&saveHTML=${saveHTML}`;
if (fileName != '') {
- openUrl += `&fileName=${fileName}`
+ const format = fileName.replace(/\//g, "-") //格式化文件名称
+ openUrl += `&fileName=${format}`
}
window.ntkoBrowser.openWindow(openUrl);
}}