4.10 收藏需求

This commit is contained in:
jl-zhoujl2
2022-04-10 19:38:19 +08:00
parent fd1cfa84f2
commit 0aff663908
6 changed files with 508 additions and 137 deletions

View File

@ -5,7 +5,7 @@ import Tabs from '@material-ui/core/Tabs';
import { PageHeader, Button, message, Steps, Space, Card, Dropdown, Menu } from 'antd';
import { Link, history } from 'umi';
import './index.less';
import { menuList } from './service/service';
import { getReadInfo, menuList, updateReadStatus } from './service/service';
import { getProName, getSessionRoleData, getProTypeCode, getDefId, getPurchaseCanOperate, getReturnURL, getProId, getProMethod } from '@/utils/session';
import { Step, StepButton, StepLabel, Stepper, Toolbar, Popover, Typography } from '@material-ui/core';
import { isEmpty } from '@/utils/CommonUtils';
@ -35,7 +35,7 @@ function getUrlRelativePath() {
const Promenu: React.FC<{}> = () => {
//获取采购方式
const MethodDict = getProMethod();
const MethodDict = getProMethod();
const classes = useStyles();
//流程数据
const [data, setData] = React.useState<any>([]);
@ -51,6 +51,12 @@ const Promenu: React.FC<{}> = () => {
const defId = getDefId();
//项目名称
const [proName, setProName] = useState<string>("");
//收藏状态 0-已收藏 d-未收藏
const [subStatus, setSubStatus] = useState<string | null>(null);
//收藏数据
const [subData, setSubData] = useState<any>();
//收藏loading
const [subLoading, setSubLoading] = useState<boolean>(false);
const [anchorEl, setAnchorEl] = React.useState<HTMLElement | null>(null);
@ -68,6 +74,17 @@ const Promenu: React.FC<{}> = () => {
setButtonValue(stepButtonClick(findURL(data)));
}
})
getReadInfo({ projectId: projectId }).then(res => {
if (res?.code == 200) {
const data = res?.data;
if (data) {
setSubStatus(data.status);
setSubData(data);
} else {
setSubStatus("");
}
}
})
setProName(getProName());
}, []);
/**
@ -84,6 +101,27 @@ const Promenu: React.FC<{}> = () => {
return num;
}
/**
* 变更收藏状态
* @param status
* @returns
*/
const changeSubStatus = (data: any, status: string) => {
const params = {
id: data ? data?.id : null,
projectId: projectId,
status
}
setSubLoading(true);
updateReadStatus(params).then(res => {
if (res?.code == 200) {
setSubStatus(status);
message.success(status == '0' ? '添加收藏成功' : '移除收藏成功')
}
}).finally(() => {
setSubLoading(false);
})
}
const stepButtonClick = (data: any) => {
if (isEmpty(data) || isEmpty(data.funcList)) {
@ -163,12 +201,17 @@ const Promenu: React.FC<{}> = () => {
title="项目名称"
subTitle={proName}
extra={[
(randerRole == 'ebtp-supervision' && subStatus == "0")
? <Button key="qxdy" disabled={subLoading} onClick={() => changeSubStatus(subData, "d")}></Button> : null,
(randerRole == 'ebtp-supervision' && (subStatus == "d" || subStatus == ""))
? <Button key="daiyue" disabled={subLoading} onClick={() => changeSubStatus(subData, "0")}></Button> : null,
(randerRole == 'ebtp-agency-project-manager' || randerRole == 'ebtp-purchase' || randerRole == 'ebtp-supervision')
? <Button key="jiandang" onClick={() => history.push("/Project/ProjectManage/ProjectManager/ProjectInformationManagement")}></Button> : null,
(randerRole == 'ebtp-agency-project-manager' || randerRole == 'ebtp-purchase' || randerRole == 'ebtp-supervision') && defId != 'inquiry'
? <Button key="guidang" onClick={() =>{
? <Button key="guidang" onClick={() => {
history.push("/ProjectLayout/Archive/projectArchive")
setButtonValue(stepButtonClick(data?.[data?.length - 1]))}}></Button> : null,
setButtonValue(stepButtonClick(data?.[data?.length - 1]))
}}></Button> : null,
((randerRole == 'ebtp-agency-project-manager' || randerRole == 'ebtp-purchase' || randerRole == 'ebtp-supervision') && MethodDict != "procurement_mode_7")
? <Button key="manageyiyi" onClick={() => history.push("/Project/ProjectManage/ProjectManager/ObjectionComplaint")}></Button> : null,
(randerRole == 'ebtp-supplier' && MethodDict != "procurement_mode_7")

View File

@ -15,4 +15,26 @@ export async function menuList(params: any) {
method: 'GET',
params: { ...params }
});
}
/**
* 收藏用-查询收藏信息项目id或收藏id
* @param params
* @returns
*/
export async function getReadInfo(params: any) {
return request('/api/biz-service-ebtp-project/v1/notification/getReading', {
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 },
});
}

View File

@ -0,0 +1,205 @@
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(() => {
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;

View File

@ -0,0 +1,175 @@
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(() => {
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;

View File

@ -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>
)
}

View File

@ -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 },
});
}