Merge branch '20220408-zjl-监督人员查看监督项目功能优化' into 'master-0422-合并'
4.22 监督人员查看监督项目功能优化 See merge request eshop/fe_service_ebtp_frontend!24
This commit is contained in:
@ -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<FavoritesListProps> = (props) => {
|
||||
const { projectName, bidMethodDict, current, tabs } = props
|
||||
|
||||
const [spin, spinSet] = useState<boolean>(false);
|
||||
//查询分页数据
|
||||
const [pageData, pageDataSet] = useState<any>({
|
||||
pageNo: tabs === 'favoritesList' ? isNotEmpty(current) ? Number(current) : 1 : 1,
|
||||
pageSize: 10
|
||||
});
|
||||
//项目列表参数
|
||||
const [projectParams, setProjectParams] = useState<string>("");
|
||||
//获取字典
|
||||
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<ActionType>();
|
||||
const columns: ProColumns<any>[] = [
|
||||
{
|
||||
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) => [
|
||||
<Button
|
||||
key="followUpProject"
|
||||
type="text"
|
||||
onClick={() =>
|
||||
followUpProject(record)
|
||||
}
|
||||
>
|
||||
项目跟进
|
||||
</Button>,
|
||||
<Popconfirm
|
||||
title="您确定要移除收藏吗?"
|
||||
onConfirm={() => removeFavorites(record)}
|
||||
okText="确定"
|
||||
cancelText="取消"
|
||||
>
|
||||
<Button
|
||||
key="remove"
|
||||
type="text"
|
||||
>
|
||||
移除收藏
|
||||
</Button>
|
||||
</Popconfirm>,
|
||||
]
|
||||
},
|
||||
]
|
||||
|
||||
/**
|
||||
* 项目跟进
|
||||
* @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 (
|
||||
<Spin spinning={spin}>
|
||||
<div className="zjl-entrust confirm">
|
||||
<ProTable
|
||||
columns={columns}
|
||||
options={false}
|
||||
bordered={false}
|
||||
size='small'
|
||||
actionRef={ref}
|
||||
search={{ labelWidth: 'auto', span: 6 }}
|
||||
loading={false}
|
||||
request={async (params) => {
|
||||
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 }) }}
|
||||
/>
|
||||
</div>
|
||||
</Spin>
|
||||
)
|
||||
}
|
||||
export default FavoritesList;
|
@ -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<ProjectManageProps> = (props) => {
|
||||
const { projectName, bidMethodDict, current, tabs } = props
|
||||
|
||||
const [spin, spinSet] = useState<boolean>(false);
|
||||
//查询分页数据
|
||||
const [pageData, pageDataSet] = useState<any>({
|
||||
pageNo: tabs === 'projectList' ? isNotEmpty(current) ? Number(current) : 1 : 1,
|
||||
pageSize: 10
|
||||
});
|
||||
//项目列表参数
|
||||
const [projectParams, setProjectParams] = useState<string>("");
|
||||
//获取字典
|
||||
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<any>[] = [
|
||||
{
|
||||
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) =>
|
||||
(
|
||||
<>
|
||||
<Button
|
||||
key="followUpProject"
|
||||
type="text"
|
||||
onClick={() =>
|
||||
followUpProject(record)
|
||||
}
|
||||
>
|
||||
项目跟进
|
||||
</Button>
|
||||
</>
|
||||
)
|
||||
},
|
||||
]
|
||||
|
||||
/**
|
||||
* 项目跟进
|
||||
* @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 (
|
||||
<Spin spinning={spin}>
|
||||
<div className="zjl-entrust confirm">
|
||||
<ProTable
|
||||
columns={columns}
|
||||
options={false}
|
||||
bordered={false}
|
||||
size='small'
|
||||
search={{ labelWidth: 'auto', span: 6 }}
|
||||
loading={false}
|
||||
request={async (params) => {
|
||||
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 }) }}
|
||||
/>
|
||||
</div>
|
||||
</Spin>
|
||||
)
|
||||
}
|
||||
export default ProjectManage;
|
@ -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<boolean>(false);
|
||||
//查询分页数据
|
||||
const [pageData, pageDataSet] = useState<any>({
|
||||
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<any>[] = [
|
||||
{
|
||||
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) =>
|
||||
(
|
||||
<>
|
||||
<Button
|
||||
key="followUpProject"
|
||||
type="text"
|
||||
onClick={() =>
|
||||
followUpProject(record)
|
||||
}
|
||||
>
|
||||
项目跟进
|
||||
</Button>
|
||||
</>
|
||||
)
|
||||
},
|
||||
]
|
||||
//================================================================================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<string>(isNotEmpty(tabs) ? String(tabs) : 'projectList');
|
||||
|
||||
const handleModeChange = (e: any) => {
|
||||
const mode = e.target.value;
|
||||
setMode(mode);
|
||||
};
|
||||
|
||||
return (
|
||||
<Card title="项目管理" style={{ borderRadius: 6 }} bodyStyle={{ padding: '1px 24px 0px' }}>
|
||||
<Spin spinning={spin}>
|
||||
<ProTable
|
||||
columns={columns}
|
||||
options={false}
|
||||
bordered={false}
|
||||
size='small'
|
||||
search={{ labelWidth: 'auto', span: 6 }}
|
||||
request={(params) =>
|
||||
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 }) }}
|
||||
/>
|
||||
</Spin>
|
||||
<Card style={{ borderRadius: 6 }} bodyStyle={{ padding: '16px 24px 0px' }}>
|
||||
<Radio.Group onChange={handleModeChange} value={mode} buttonStyle="solid">
|
||||
<Radio.Button value="projectList">项目管理</Radio.Button>
|
||||
<Radio.Button value="favoritesList">监督项目收藏列表</Radio.Button>
|
||||
</Radio.Group>
|
||||
{
|
||||
mode === 'projectList' ? (
|
||||
<ProjectManage projectName={projectName} bidMethodDict={bidMethodDict} current={current} tabs={tabs} />
|
||||
) : (
|
||||
<FavoritesList projectName={projectName} bidMethodDict={bidMethodDict} current={current} tabs={tabs} />
|
||||
)
|
||||
}
|
||||
</Card>
|
||||
)
|
||||
}
|
||||
|
@ -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 },
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user