6.28 党建攻坚第二版

This commit is contained in:
jl-zhoujl2
2022-06-28 16:48:36 +08:00
parent 39fc4276ec
commit 918c790b06
24 changed files with 415 additions and 387 deletions

View File

@ -1,10 +1,10 @@
export default [
{
name: 'partyMemberTopic',
name: '党建攻坚',
path: '/partyMemberTopic',
routes: [
{//首页
name: 'home',
name: '首页',
path: '/partyMemberTopic/home',
component: './PartyMemberTopic/Home',
},

BIN
src/assets/topic/branch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
src/assets/topic/emblem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 519 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 KiB

After

Width:  |  Height:  |  Size: 353 KiB

View File

@ -58,28 +58,28 @@ export default {
'menu.bidOpening': '开标',
'menu.bidOpening.openList': '开标列表',
'menu.list.ProjectDocumentation':'项目管理',
'menu.list.ProjectInformationManagement':'项目信息管理',
'menu.list.ProjectComplaint':'异议投诉',
'menu.list.ProjectDocumentation': '项目管理',
'menu.list.ProjectInformationManagement': '项目信息管理',
'menu.list.ProjectComplaint': '异议投诉',
// 'menu.list.packageDivided':'标段划分',
'menu.biddingInvitation':'投标邀请',
'menu.biddingInvitation.biddingAnnouncement':'招标公告',
'menu.biddingInvitation.responseFormat':'应答格式',
'menu.list.packageInformation':'标包信息',
'menu.profile.biddingAnnouncement':'招标公告',
'menu.list.LookingForBusinessOpportunities':'寻找商机',
'menu.list.IParticipate':'我要参与',
'menu.list.DownloadPurchasingDocuments':'下载招标文件',
'menu.list.SupplierQuestionsOrObjections':'供应商质疑或异议列表',
'menu.supplierClarificationList':'供应商澄清列表',
'menu.clarificationOfTheBid':'标中质询澄清列表',
'menu.challengeListInTheIndex':'标中质询列表',
'menu.clarifyTheList':'澄清列表',
'menu.invitationLetter':'邀请函',
'menu.mentionDoubtReply':'项目经理提疑回复列表',
'menu.reviewResults.manager':'评审结果-项目经理',
'menu.reviewResults.groupLeader':'评审结果-组长',
'menu.reviewResults.jury':'评审结果-评委',
'menu.biddingInvitation': '投标邀请',
'menu.biddingInvitation.biddingAnnouncement': '招标公告',
'menu.biddingInvitation.responseFormat': '应答格式',
'menu.list.packageInformation': '标包信息',
'menu.profile.biddingAnnouncement': '招标公告',
'menu.list.LookingForBusinessOpportunities': '寻找商机',
'menu.list.IParticipate': '我要参与',
'menu.list.DownloadPurchasingDocuments': '下载招标文件',
'menu.list.SupplierQuestionsOrObjections': '供应商质疑或异议列表',
'menu.supplierClarificationList': '供应商澄清列表',
'menu.clarificationOfTheBid': '标中质询澄清列表',
'menu.challengeListInTheIndex': '标中质询列表',
'menu.clarifyTheList': '澄清列表',
'menu.invitationLetter': '邀请函',
'menu.mentionDoubtReply': '项目经理提疑回复列表',
'menu.reviewResults.manager': '评审结果-项目经理',
'menu.reviewResults.groupLeader': '评审结果-组长',
'menu.reviewResults.jury': '评审结果-评委',
'menu.Tender': '发标',
'menu.Tender.UploadResponse': '上传应答文件',
@ -161,15 +161,15 @@ export default {
'menu.Auction.AuctionLookingForInnerShot': '寻找内拍项目',
'menu.Auction.AuctionMyLookingForInnerShot': '我参与的内拍项目',
'menu.Auction.AuctionManagerProject': '我发起的内拍项目',
"menu.Auction.AuctionAnnouncementData":'公告信息',
"menu.Auction.AuctionInfoupdateManage":'公告信息2',
"menu.Auction.AuctionAnnouncementData": '公告信息',
"menu.Auction.AuctionInfoupdateManage": '公告信息2',
//项目委托
'menu.entrust': '项目委托管理',
'menu.entrust.manager': '委托管理(管理员)',
'menu.entrust.operator': '委托管理(操作员)',
'menu.entrust.mandatoryAdministration':'项目经理的委托管理',
'menu.entrust.mandatoryAdministration': '项目经理的委托管理',
//招标项目
'menu.bidManage': '招标项目管理',
'menu.bidManage.projectManage': '项目管理',
@ -182,13 +182,13 @@ export default {
'menu.Calibration.ViewNotice': '查看通知书',
'menu.BiddingDocumentsDecrypt': '投标文件查看',/*BiddingDocumentsDecrypt_pg*/
'menu.BiddingDocumentsDecrypt.BiddingDocumentsDecrypt_pg': '投标文件查看页面',
'menu.BidAssessmentResults':'评审结果',
'menu.BidAssessmentResults.BidAssessmentResults_pg':'评审结果页面',
'menu.BidPublicityResult':'结果公示',
'menu.BidPublicityResult.BidPublicityResult_pg':'结果公示页面',
'menu.NtkoPage':'weboffice',
'menu.NtkoPage.NtkoPage_pg':'ntko',
'menu.finance.RevenueRecognition':'收入确认审核(项目经理)',
'menu.BidAssessmentResults': '评审结果',
'menu.BidAssessmentResults.BidAssessmentResults_pg': '评审结果页面',
'menu.BidPublicityResult': '结果公示',
'menu.BidPublicityResult.BidPublicityResult_pg': '结果公示页面',
'menu.NtkoPage': 'weboffice',
'menu.NtkoPage.NtkoPage_pg': 'ntko',
'menu.finance.RevenueRecognition': '收入确认审核(项目经理)',
//发票管理
'menu.Invoice': '发票管理',
'menu.Invoice.InvoiceManager': '发票列表',
@ -222,4 +222,6 @@ export default {
'menu.Recruit.ProjectsInvolved': '你参与的项目',
'menu.Recruit.Find': '寻找商机',
'menu.Recruit.Letter': '邀请函',
//党建攻坚
'menu.topic.home': '党建攻坚',
};

View File

@ -1,49 +1,30 @@
import React, { useEffect, useState } from 'react';
import '../Style/ld_style.less';
import { Input, List, Pagination } from 'antd';
import topic_activity_default2 from '@/assets/topic/topic_activity_default2.jpg'
import { Input, List, Spin } from 'antd';
import topic_activity_default from '@/assets/topic/topic_activity_default.jpg'
import time_icon from '@/assets/topic/timeIcon.png'
import { getGracefulList } from './service';
import { formatTime, getImageUrl } from '../utils';
import { getImageUrl } from '../utils';
import { history } from 'umi';
const { Search } = Input;
const data = [
{
title: '集团党支部',
name: '张三',
position: '党委书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
}
];
const PersonInfor: React.FC<{}> = () => {
//graceful data
const [gracefulList, setGracefulList] = useState<any[]>([]);
//loading
const [loading, setLoading] = useState<boolean>(false);
//get graceful
const getGracefulData = () => {
getGracefulList().then(async res => {
const getGracefulData = (value: string) => {
setLoading(true);
getGracefulList({ param: value }).then(async res => {
if (res?.code == 200) {
const data = await getImageUrl(res?.data, 'image', topic_activity_default2);
const data = await getImageUrl(res?.data, 'image', topic_activity_default);
setGracefulList(data);
}
}).finally(() => {
setLoading(false);
})
}
//onclick
@ -61,7 +42,7 @@ const PersonInfor: React.FC<{}> = () => {
}
useEffect(() => {
getGracefulData();
getGracefulData('');
}, [])
return (
<div className="page-container">
@ -71,38 +52,41 @@ const PersonInfor: React.FC<{}> = () => {
<span onClick={() => toGoBack()}></span>
</div>
</div>
<div className="search">
<span className="text"><span></span></span>
<div className="search-box">
<Search
placeholder="输入标题"
allowClear
enterButton="搜索"
style={{ width: 322 }}
<Spin spinning={loading}>
<div className="search">
<span className="text"><span></span></span>
<div className="search-box">
<Search
placeholder="输入标题"
allowClear
enterButton="搜索"
style={{ width: 322 }}
onSearch={getGracefulData}
/>
</div>
</div>
<div className="list-content">
<List
itemLayout="horizontal"
pagination={{
size: 'small',
showTotal: (total) => `${total}`,
pageSize: 10,
}}
dataSource={gracefulList}
renderItem={item => (
<List.Item>
<div className="list-pic">
<img src={item.imageUrl} />
<p className="tit"><span onClick={() => clickTitle(item)}>{item.title}</span></p>
<p className="detail">{item.secordTitle}</p>
<span className="time"><img src={time_icon} />{item.createTime}</span>
</div>
</List.Item>
)}
/>
</div>
</div>
<div className="list-content">
<List
itemLayout="horizontal"
pagination={{
size: 'small',
showTotal: (total) => `${total}`,
pageSize: 10,
}}
dataSource={gracefulList}
renderItem={item => (
<List.Item>
<div className="list-pic">
<img src={item.imageUrl} />
<p className="tit" onClick={() => clickTitle(item)}>{item.title}</p>
<p className="detail">{item.content}</p>
<span className="time"><img src={time_icon} />{item.createTime}</span>
</div>
</List.Item>
)}
/>
</div>
</Spin>
</div>
)
}

View File

@ -1,6 +1,9 @@
import request from '@/utils/request';
//活动风采列表
export async function getGracefulList() {
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventStyle/list');
export async function getGracefulList(data: any) {
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventStyle/list', {
method: 'POST',
data: { ...data }
});
}

View File

@ -1,9 +1,12 @@
import React, { useEffect } from 'react';
import React from 'react';
import '../Style/detailStyle.less';
import bannerProjectPic from '@/assets/topic/bannerProjectPic.jpg'
import { history } from 'umi'
import { getDetailData } from '../utils';
const HardDetail: React.FC<{}> = () => {
//session detailData
const item = getDetailData();
//to home
const toHome = () => {
history.push("/partyMemberTopic/home");
@ -18,12 +21,9 @@ const HardDetail: React.FC<{}> = () => {
<span onClick={() => toHome()}></span>
</div>
<div className="contentBlock01">
<h3></h3>
<h3>{item?.title}</h3>
<div className="informText01">
<p> 线 5G业务研发与试验5G网络和工业网络融合系统架构5G网络应用指标线5G统一接入网关和CPE终端设备</p>
<p>5G工业互联网试验验证平台UPF下沉到园区的5G本地专网方案AGV5G公网方案5G网络进行优化配置广</p>
<p>2021CUBE-Net3.0ICT融合服务CUBE-Net3.05G确定性网络关键技术5G高速率+5G和工业应用的深度融合</p>
<p>100</p>
<div dangerouslySetInnerHTML={{ __html: item?.content }}></div>
</div>
</div>
</div>

View File

@ -33,6 +33,7 @@
background-size: 100%;
display: flex;
align-items: flex-end;
cursor: pointer;
.carousel-textbg {
display: flex;
@ -54,16 +55,15 @@
.carousel-text-click {
font-size: 14px;
margin-left: 10px;
cursor: pointer;
}
.carousel-text-click:hover {
color: #fff;
text-decoration: underline;
}
}
}
}
.carousel-content:hover {
-webkit-filter: brightness(105%);
filter: brightness(105%);
}
}
.left-carousel .slick-dots-bottom {
@ -151,7 +151,7 @@
.left-graceful {
background: #fff;
padding: 24px 24px 50px;
padding: 16px 24px 50px;
.left-graceful-bg {
height: 198px;
@ -189,7 +189,7 @@
.left-project {
margin-top: 20px;
background: #fff;
padding: 24px 24px 40px;
padding: 16px 24px 40px;
.left-project-content {
display: flex;
@ -279,7 +279,7 @@
letter-spacing: 1px;
.right-display-content-percentage {
margin-left: 12px;
margin-left: 8px;
.right-display-content-percentage-increase {
color: #28e099;
@ -317,6 +317,10 @@
}
}
.right-display-content-pointer {
cursor: pointer;
}
}
.right-divider {
@ -352,7 +356,7 @@
.bottom-global {
margin: 0px 12px 84px;
background: #fff;
padding: 24px 24px 28px;
padding: 16px 24px 28px;
.left-card-top {
display: flex;
@ -468,6 +472,12 @@
vertical-align: text-bottom;
margin-left: 5px;
}
.bottom-close-icon {
transform: rotate(-90deg);
vertical-align: text-bottom;
margin-left: 5px;
}
}
}
}
@ -508,18 +518,23 @@
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
background: #eeeeee;
padding: 12px;
padding: 16px;
}
.topic-home-modal .ant-modal-content .ant-modal-body .bottom-modal-body {
display: flex;
flex-direction: column;
align-items: center;
.radio-group {
padding: 0 40px 8px;
width: 260px;
margin-bottom: 12px;
.radio-content {
font-size: 17.16px;
font-family: '黑体';
color: #939393;
margin-left: 12px;
margin-left: 16px;
}
}
@ -533,11 +548,18 @@
justify-content: space-between;
align-items: center;
margin-top: 8px;
width: 100%;
.submit-text {
color: #939393;
}
.submit-cancelbutton {
border-radius: 8px;
border-color: #d44026;
color: #d44026;
}
.submit-button {
border-radius: 8px;
background: #d44026;

View File

@ -20,8 +20,9 @@ import topic_header_img from '@/assets/topic/topic_header_img.png'
import topic_banner_default from '@/assets/topic/topic_banner_default.jpg'
import topic_activity_default from '@/assets/topic/topic_activity_default.jpg'
import { getHomeActivity, getHomeBanner, getHomeContact, getHomeGraceful, getHomeProject, getHomeRight, submitAdvice } from './service';
import { formatTime, getImageUrl } from '../utils';
import { formatTime, getImageUrl, isEmpty, isNotEmpty } from '../utils';
//卡片头
const LeftCardTop = (props: any) => {
return (
<>
@ -39,7 +40,7 @@ const LeftCardTop = (props: any) => {
</>
)
}
//右侧专业线标题
const RightDisplayTitle = (props: any) => {
return (
<div className='right-display-title'>
@ -47,11 +48,18 @@ const RightDisplayTitle = (props: any) => {
</div>
)
}
//右侧专业线内容
const RightDisplayContent = (props: any) => {
const displayContentClick = () => {
if (props.index == 0) {//党员数量
window.open("/partyMemberTopic/personInfor");
} else if (props.index == 1) {//党支部数量
window.open("/partyMemberTopic/partyBranch");
}
}
return (
props.data?.length > 0 ? (
<div className='right-display-content'>
<div className={props.index == 0 || props.index == 1 ? 'right-display-content right-display-content-pointer' : 'right-display-content'} onClick={() => displayContentClick()}>
<img src={props.img} className='right-display-content-img' />
<div className='right-display-content-right'>
<div className='right-display-content-title'>
@ -74,7 +82,7 @@ const RightDisplayContent = (props: any) => {
) : null
)
}
//右侧图表内容
const RightGraphContent = (props: any) => {
const random = Math.random().toString();
useEffect(() => {
@ -94,7 +102,7 @@ const RightGraphContent = (props: any) => {
data: props.data,
label: {
formatter: props.type != null ? `{b}\n\n{c}${props.type} {d}%` : '{b}',
fontSize: 14,
fontSize: '90%',
color: '#fff',
position: 'inner',
},
@ -114,7 +122,7 @@ const RightGraphContent = (props: any) => {
<div id={random} style={{ width: '100%', height: '100%' }}></div>
)
}
//活动联系人卡片内容
const BottomCardContent = (props: any) => {
return (
@ -124,7 +132,7 @@ const BottomCardContent = (props: any) => {
<div className='bottom-card-title'>
<Tooltip placement="topLeft" title={`${props.data.remark} ${props.data.contactName}`}>
<span>{props.data.contactName}</span>
<span className='bottom-card-title-type'>({props.data.remark})</span>
{isNotEmpty(props.data.remark) && <span className='bottom-card-title-type'>({props.data.remark})</span>}
</Tooltip>
</div>
@ -139,7 +147,7 @@ const BottomCardContent = (props: any) => {
</Col>
)
}
//活动联系人-我要提意见Modal
const CommentModal = (props: any) => {
const { TextArea } = Input;
const [modalLoading, setModalLoading] = useState<boolean>(false);
@ -161,7 +169,7 @@ const CommentModal = (props: any) => {
}
const onSubmit = async () => {
if (textRef.current == '' || textRef.current == null) {
if (isEmpty(textRef.current)) {
message.info("请先输入意见内容");
return;
}
@ -200,7 +208,7 @@ const CommentModal = (props: any) => {
footer={null}
centered
maskStyle={{ backgroundColor: 'rgba(0, 0, 0, 0.3)' }}
width={350}
width={450}
>
<Spin spinning={modalLoading}>
<div className='bottom-modal-body'>
@ -213,20 +221,23 @@ const CommentModal = (props: any) => {
</Radio.Group>
</div>
<TextArea
rows={6}
rows={11}
className='bottom-modal-textarea'
maxLength={50}
allowClear
showCount
defaultValue={''}
onChange={onTextChange}
placeholder="在这里输入我要提出的意见"
placeholder="在这里输入我要提出的意见最多输入50字"
/>
<div className='bottom-modal-submit'>
<span className='submit-text'>{props.data?.contactDepartment}{props.data?.contactName}</span>
<Button type='primary' className='submit-button' onClick={onSubmit}>
</Button>
<div>
<Button className='submit-cancelbutton' onClick={onCancel}>
</Button>
<Button type='primary' className='submit-button' onClick={onSubmit}>
</Button>
</div>
</div>
</div>
</Spin>
@ -333,7 +344,7 @@ const Home: React.FC<{}> = () => {
if (res?.code == 200) {
const data = Object.entries(res?.data);
if (data.length > 3) {
setContactData(data.slice(0, 6));
setContactData(data.slice(0, 3));
totalContactData.current = data;
} else {
setContactData(data);
@ -354,6 +365,15 @@ const Home: React.FC<{}> = () => {
window.open("/partyMemberTopic/newsDetail");
}
//other buttom onclick
const bottomOtherClick = (param: string) => {
if (param == '0') {
setContactData([...totalContactData.current]);
} else {
setContactData([...totalContactData.current.slice(0, 3)]);
}
}
useEffect(() => {
getBannerList();
getGracefulList();
@ -374,11 +394,11 @@ const Home: React.FC<{}> = () => {
<Carousel className='left-carousel' autoplay>
{bannerList?.length > 0 && bannerList.map(item => (
<div key={item.id}>
<div className='carousel-content' style={{ backgroundImage: `url(${item.imageUrl})` }}>
<div className='carousel-content' style={{ backgroundImage: `url(${item.imageUrl})` }} onClick={() => newsDetailClick(item)}>
<div className='carousel-textbg'>
<div className='carousel-text'>
<span className='carousel-text-content'>{item.imageWord}</span>
<span className='carousel-text-click' onClick={() => newsDetailClick(item)}></span>
<span className='carousel-text-click'></span>
</div>
</div>
</div>
@ -417,7 +437,7 @@ const Home: React.FC<{}> = () => {
<Col span={8} key={index}>
<div className='left-graceful-bg' style={{ backgroundImage: `url(${item.imageUrl})` }} onClick={() => newsDetailClick(item)}>
<div className='left-graceful-textbg'>
<span className='left-graceful-text'>{item.imageWord}</span>
<span className='left-graceful-text'>{item.title}</span>
</div>
</div>
</Col>
@ -473,7 +493,7 @@ const Home: React.FC<{}> = () => {
{item.dataClass}
</div>
<div className='right-graph-subtitle'>
{item.dataName != null && `${item.dataName}${item.dataValue}${item.dataType}`}
{isNotEmpty(item.dataName) && `${item.dataName}${item.dataValue}${item.dataType}`}
</div>
<div className='right-graph-content'>
<RightGraphContent name={item.dataClass} type={item.dataType} data={item.data} />
@ -496,11 +516,11 @@ const Home: React.FC<{}> = () => {
</div>
</div>
))}
{totalContactData.current != null && (
{contactData.length != 0 && contactData.length > 2 && (
<div className='bottom-other'>
<div>
<span className='bottom-other-text'></span>
<img src={topic_other} className='bottom-other-icon' />
<span className='bottom-other-text' onClick={() => bottomOtherClick(contactData.length > 3 ? '1' : '0')}>{contactData.length > 3 ? '收起' : '更多'}</span>
<img src={topic_other} className={contactData.length > 3 ? 'bottom-close-icon' : 'bottom-other-icon'} />
</div>
</div>
)}

View File

@ -7,7 +7,10 @@ export async function getHomeBanner() {
//活动风采列表
export async function getHomeGraceful() {
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventStyle/list');
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventStyle/list', {
method: 'POST',
data: {},
});
}
//活动宣言
@ -17,7 +20,10 @@ export async function getHomeActivity() {
//攻坚克难项目
export async function getHomeProject() {
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventSubject/list');
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventSubject/list', {
method: 'POST',
data: {},
});
}
//右侧专业线数据

View File

@ -1,11 +1,11 @@
import React, { useEffect } from 'react';
import React from 'react';
import '../Style/detailStyle.less';
import bannerPic from '@/assets/topic/bannerPic.jpg'
import newsTempPic from '@/assets/topic/newsTempPic.jpg'
import { formatTime, getDetailData } from '../utils';
import { history } from 'umi';
const NewsDetail: React.FC<{}> = () => {
//session detailData
const item = getDetailData();
//to home
const toHome = () => {
@ -25,9 +25,7 @@ const NewsDetail: React.FC<{}> = () => {
<span>{formatTime(item?.createTime, 'MM-DD HH:mm')}</span>
<div className="informText02">
<img src={item?.imageUrl} alt="" />
<p>218 202220212022</p>
<p>202220222022</p>
<p>2021</p>
<div dangerouslySetInnerHTML={{ __html: item?.content }}></div>
</div>
</div>
</div>

View File

@ -1,60 +1,27 @@
import React, { useEffect, useState } from 'react';
import '../Style/ld_style.less';
import { Input, List, Pagination } from 'antd';
import { Input, List, Spin } from 'antd';
import { getProjectList } from './service';
import { formatTime } from '../utils';
import { history } from 'umi';
const { Search } = Input;
const data = [
{
title: '集团党支部',
name: '张三',
position: '党委书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
}
];
const PersonInfor: React.FC<{}> = () => {
//project data
const [projectList, setProjectList] = useState<any[]>([]);
//loading
const [loading, setLoading] = useState<boolean>(false);
//get project
const getProjectData = () => {
getProjectList().then(res => {
const getProjectData = (value: string) => {
setLoading(true);
getProjectList({ param: value }).then(res => {
if (res?.code == 200) {
setProjectList(res?.data);
}
}).finally(() => {
setLoading(false);
})
}
@ -73,7 +40,7 @@ const PersonInfor: React.FC<{}> = () => {
}
useEffect(() => {
getProjectData();
getProjectData('');
}, [])
return (
@ -84,36 +51,39 @@ const PersonInfor: React.FC<{}> = () => {
<span onClick={() => toGoBack()}></span>
</div>
</div>
<div className="search">
<span className="text"><span></span></span>
<div className="search-box">
<Search
placeholder="输入标题"
allowClear
enterButton="搜索"
style={{ width: 322 }}
<Spin spinning={loading}>
<div className="search">
<span className="text"><span></span></span>
<div className="search-box">
<Search
placeholder="输入标题"
allowClear
enterButton="搜索"
style={{ width: 322 }}
onSearch={getProjectData}
/>
</div>
</div>
<div className="list-content">
<List
itemLayout="horizontal"
pagination={{
size: 'small',
showTotal: (total) => `${total}`,
pageSize: 10,
}}
dataSource={projectList}
renderItem={item => (
<List.Item>
<div className="list-box">
<p onClick={() => clickTitle(item)}>{item.title}</p>
<span>{formatTime(item.createTime, 'YYYY-MM-DD')}</span>
</div>
</List.Item>
)}
/>
</div>
</div>
<div className="list-content">
<List
itemLayout="horizontal"
pagination={{
size: 'small',
showTotal: (total) => `${total}`,
pageSize: 10,
}}
dataSource={projectList}
renderItem={item => (
<List.Item>
<div className="list-box">
<p onClick={() => clickTitle(item)}>{item.title}</p>
<span>{formatTime(item.createTime, 'YYYY-MM-DD')}</span>
</div>
</List.Item>
)}
/>
</div>
</Spin>
</div>
)
}

View File

@ -1,6 +1,9 @@
import request from '@/utils/request';
//攻坚克难项目
export async function getProjectList() {
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventSubject/list');
export async function getProjectList(data: any) {
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/eventSubject/list', {
method: 'POST',
data: { ...data },
});
}

View File

@ -3,78 +3,11 @@ import '../Style/ld_style.less';
import { Input, List } from 'antd';
import { history } from 'umi'
import { getBranchList, getMemberAndBranch } from './service';
import person from '@/assets/topic/person.png'
import branch from '@/assets/topic/branch.png'
const { Search } = Input;
const data = [
{
title: '集团党支部',
num: 987,
},
{
title: '北京分公司党支部',
num: 127,
},
{
title: '山东分公司党支部',
num: 110,
},
{
title: '吉林分公司党支部',
num: 121,
},
{
title: '辽宁分公司党支部',
num: 130,
},
{
title: '陕西分公司党支部',
num: 105,
},
{
title: '山西分公司党支部',
num: 104,
},
{
title: '湖北分公司党支部',
num: 113,
},
{
title: '湖南分公司党支部',
num: 111,
},
{
title: '江苏分公司党支部',
num: 987,
},
{
title: '河南分公司党支部',
num: 121,
},
{
title: '河北分公司党支部',
num: 100,
},
{
title: '天津分公司党支部',
num: 86,
},
{
title: '上海分公司党支部',
num: 98,
},
{
title: '安徽分公司党支部',
num: 105,
},
{
title: '江西分公司党支部',
num: 121,
},
];
const PartyBranch: React.FC<{}> = () => {
//member number and branch number
const [memberNumber, setMemberNumber] = useState<any>({});
@ -97,11 +30,17 @@ const PartyBranch: React.FC<{}> = () => {
}
})
}
//search params redirect
const onSearch = (value: string) => {
const params = {
param: value
}
history.push({ pathname: "/partyMemberTopic/personInfor", state: params });
}
//onclick
const clickCard = (data: any) => {
sessionStorage.setItem("detailData", JSON.stringify(data));
history.push("/partyMemberTopic/personInfor");
history.push({ pathname: "/partyMemberTopic/personInfor", state: data });
}
//to home
@ -121,13 +60,14 @@ const PartyBranch: React.FC<{}> = () => {
</div>
</div>
<div className="search">
<span className="text"><span></span>(270)</span>
<span className="text"><span></span>({memberNumber?.member})</span>
<div className="search-box">
<Search
placeholder="输入姓名/邮箱/电话"
allowClear
enterButton="搜索"
style={{ width: 322 }}
onSearch={onSearch}
/>
</div>
</div>
@ -144,9 +84,23 @@ const PartyBranch: React.FC<{}> = () => {
<div className="wrapper" onClick={() => clickCard(item)}>
<div className="pic-bg">{item.branchName}</div>
<div className="mess">
<div className="mess-left"></div>
{/* <div className="mess-left">党员数量</div>
<div className="mess-right">
<span>{item.count}</span>人
</div> */}
<div className="mess-left">
<span>{item.branchCount}</span>
<div>
<img src={branch} />
<span></span>
</div>
</div>
<div className="mess-right">
<span>{item.count}</span>
<div>
<img src={person} />
<span></span>
</div>
</div>
</div>
</div>

View File

@ -1,62 +1,44 @@
import React, { useEffect, useState } from 'react';
import '../Style/ld_style.less';
import { Input, List } from 'antd';
import { getMemberList } from './service';
import { getDetailData } from '../utils';
import { Input, List, Spin } from 'antd';
import { getMemberList, memberListSearch } from './service';
import { isNotEmpty } from '../utils';
import emblem from '@/assets/topic/emblem.png'
import { history } from 'umi';
const { Search } = Input;
const data = [
{
title: '集团党支部',
name: '张三',
position: '党委书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
},
{
title: '集团党支部',
name: '李四',
position: '党委副书记',
}
];
const PersonInfor: React.FC<{}> = () => {
const PersonInfor: React.FC<{}> = (props: any) => {
//member list
const [memberData, setMemberData] = useState<any[]>([]);
//get session
const item = getDetailData();
//loading
const [loading, setLoading] = useState<boolean>(false);
//get member list
const getMemberData = () => {
getMemberList({ belongBranch: 4 }).then(res => {
const getMemberData = (branchCode: string) => {
setLoading(true);
getMemberList({ belongBranch: branchCode }).then(res => {
if (res?.code == 200) {
setMemberData(res?.data);
}
}).finally(() => {
setLoading(false);
})
}
//search member
const onSearch = (value: string) => {
const params = {
param: value
}
if (isNotEmpty(props.location.state?.branchCode)) {
params['belongBranch'] = props.location.state?.branchCode;
}
setLoading(true);
memberListSearch(params).then(res => {
if (res?.code == 200) {
setMemberData(res?.data);
}
}).finally(() => {
setLoading(false);
})
}
//to home
@ -68,8 +50,13 @@ const PersonInfor: React.FC<{}> = () => {
window.history.go(-1);
}
useEffect(() => {
getMemberData();
if (isNotEmpty(props.location.state?.branchCode)) {//有党支部
getMemberData(props.location.state?.branchCode);
} else {
onSearch(props.location.state?.param);
}
}, [])
return (
<div className="page-container">
<div className="top-banner">
@ -78,39 +65,45 @@ const PersonInfor: React.FC<{}> = () => {
<span onClick={() => toGoBack()}></span>
</div>
</div>
<div className="search">
<span className="text"><span></span>(270)</span>
<div className="search-box">
<Search
placeholder="输入姓名/邮箱/电话"
allowClear
enterButton="搜索"
style={{ width: 322 }}
<Spin spinning={loading}>
<div className="search">
<span className="text"><span></span>({memberData.length})</span>
<div className="search-box">
<Search
placeholder="输入姓名/邮箱/电话"
allowClear
defaultValue={props.location.state?.param}
enterButton="搜索"
style={{ width: 322 }}
onSearch={onSearch}
/>
</div>
</div>
<div className="mess-box mess-detail">
<List
grid={{ gutter: 16, column: 4 }}
dataSource={memberData}
renderItem={item => (
<List.Item>
<div className="wrapper">
<div className="top-bg">
<div className="tit">{item.branchName}</div>
<div className="text-r">
<img src={emblem} />{item.contactName}
</div>
<div className="text-r yellow">{item.job}</div>
</div>
<div className="mess-content">
<div>{item.contactUnit}</div>
<div>{item.contactEmail}</div>
<div>{item.contactMobiphone}</div>
</div>
</div>
</List.Item>
)}
/>
</div>
</div>
<div className="mess-box mess-detail">
<List
grid={{ gutter: 16, column: 4 }}
dataSource={memberData}
renderItem={item => (
<List.Item>
<div className="wrapper">
<div className="top-bg">
<div className="tit">{item.branchName}</div>
<div className="text-r">{item.contactName}</div>
<div className="text-r yellow">{item.contactUnit}</div>
</div>
<div className="mess">
<div>{item.contactUnit}</div>
<div>{item.contactEmail}</div>
<div>{item.contactMobiphone}</div>
</div>
</div>
</List.Item>
)}
/>
</div>
</Spin>
</div>
)
}

View File

@ -7,3 +7,11 @@ export async function getMemberList(params: any) {
params: params
});
}
//党员列表模糊查询
export async function memberListSearch(data: any) {
return request('/api/biz-service-ebtp-extend/v1/eventpartybranch/partyMember/paramQuery', {
method: 'POST',
data: { ...data },
});
}

View File

@ -103,6 +103,7 @@
.contentBlock02 .informText02 img {
display: inherit;
margin: 10px auto;
height: 488px;
}
.contentBlock02 .informText02 p {

View File

@ -28,6 +28,10 @@
display: inline-block;
cursor: pointer;
}
span:hover {
text-decoration: underline;
}
}
}
@ -120,29 +124,64 @@
.mess {
border: 1px solid #aaaaaa;
border-top: 0;
padding: 24px;
display: flex;
justify-content: space-around;
}
.mess-content {
border: 1px solid #aaaaaa;
border-top: 0;
padding: 24px;
}
.mess-left {
display: inline-block;
width: 50%;
background: url("../../../assets/topic/person.png") no-repeat 30px 10px;
font-size: 22px;
padding-top: 56px;
padding-left: 26px;
font-size: 20px;
color: #959595;
text-align: center;
}
.mess-left span {
font-size: 36px;
color: #fd0100;
font-weight: 600;
color: #302f2f;
}
.mess-left div {
img {
vertical-align: text-bottom;
}
span {
font-size: 20px;
color: #000;
margin-left: 4px;
font-weight: normal;
}
}
.mess-right {
display: inline-block;
width: 50%;
font-size: 20px;
color: #959595;
font-size: 24px;
text-align: center;
}
.mess-right span {
font-size: 36px;
color: #ffb119;
font-weight: 600;
}
.mess-right div {
img {
vertical-align: text-bottom;
}
span {
color: #ffb119;
font-size: 70px;
font-weight: 600;
font-size: 20px;
color: #000;
margin-left: 4px;
font-weight: normal;
}
}
}
@ -177,6 +216,14 @@
font-size: 18px;
}
.text-r img {
height: 18px;
width: 18px;
position: relative;
top: -2px;
margin-right: 4px;
}
.yellow {
color: #ffd03f;
font-size: 14px;
@ -252,10 +299,13 @@
font-size: 18px;
color: #333;
font-weight: 600;
}
.tit span {
cursor: pointer;
}
.tit:hover {
.tit span:hover {
color: #a81c0c;
text-decoration: underline;
}

View File

@ -39,3 +39,17 @@ export const formatTime = (time: string, format: string) => {
export const getDetailData = () => {
return JSON.parse(sessionStorage.getItem('detailData') as any);
}
/**
* 判断是否等于空
* @param value
*/
export function isEmpty(value: any) {
return value === null || value === void 0 || value === '';
}
/**
* 判断不等于空
* @param value
*/
export function isNotEmpty(value: any) {
return value !== null && value !== void 0 && value !== '';
}