forked from Gitlink/forgeplus-react
合并公告模块
This commit is contained in:
commit
2d7c6cb82d
Binary file not shown.
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 66 KiB |
14
src/App.js
14
src/App.js
|
@ -45,6 +45,11 @@ const OpsDetail = Loadable({
|
||||||
loader: () => import('./forge/DevOps/opsDetail'),
|
loader: () => import('./forge/DevOps/opsDetail'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
|
// Notice项目公告
|
||||||
|
const Notice = Loadable({
|
||||||
|
loader: () => import('./military/notice'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
//403页面
|
//403页面
|
||||||
const Shixunauthority = Loadable({
|
const Shixunauthority = Loadable({
|
||||||
loader: () => import('./modules/403/Shixunauthority'),
|
loader: () => import('./modules/403/Shixunauthority'),
|
||||||
|
@ -240,6 +245,15 @@ class App extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
{/*公告*/}
|
||||||
|
<Route
|
||||||
|
path={"/notice"}
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<Notice {...this.props} {...props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route>
|
||||||
{/*403*/}
|
{/*403*/}
|
||||||
<Route path="/403" component={Shixunauthority} />
|
<Route path="/403" component={Shixunauthority} />
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
import { notification } from 'antd';
|
||||||
|
import axios from 'axios';
|
||||||
|
import cookie from 'react-cookies';
|
||||||
|
|
||||||
|
// export const httpUrl='http://117.50.100.12:8001';
|
||||||
|
// export const httpUrl='http://192.168.31.72:8081';
|
||||||
|
// export const httpUrl='http://192.168.31.72:8083';
|
||||||
|
// export const httpUrl = 'http://106.75.31.211:58088'; //可视化
|
||||||
|
export const httpUrl = 'http://117.50.100.12:8008'; //公告
|
||||||
|
// export const httpUrl = 'http://117.50.100.12:8009'; //公告
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// const TokenKey = 'autologin_forge_military';
|
||||||
|
const TokenKey = 'autologin_trustie';
|
||||||
|
axios.defaults.withCredentials = true;
|
||||||
|
|
||||||
|
// 创建axios实例
|
||||||
|
const service = axios.create({
|
||||||
|
baseURL: httpUrl,
|
||||||
|
timeout: 5000 // 请求超时时间
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// request拦截器
|
||||||
|
service.interceptors.request.use(config => {
|
||||||
|
if (cookie.load(TokenKey)) {
|
||||||
|
config.headers['Authorization'] = cookie.load(TokenKey); // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}, error => {
|
||||||
|
// Do something with request error
|
||||||
|
console.log(error); // for debug
|
||||||
|
Promise.reject(error);
|
||||||
|
});
|
||||||
|
// respone拦截器
|
||||||
|
service.interceptors.response.use(
|
||||||
|
response => {
|
||||||
|
const res = response;
|
||||||
|
if (res.status === 400) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: '请求错误',
|
||||||
|
});
|
||||||
|
return Promise.reject('error');
|
||||||
|
}
|
||||||
|
if (res.status === 401) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: '未授权,请登录!',
|
||||||
|
});
|
||||||
|
return Promise.reject('error');
|
||||||
|
}
|
||||||
|
if (res.status === 40001) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: '账户或密码错误!',
|
||||||
|
});
|
||||||
|
return Promise.reject('error');
|
||||||
|
}
|
||||||
|
if (response.status !== 200 && res.status !== 200) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: res.message,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
console.log(error);
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: error.message,
|
||||||
|
});
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
export default service;
|
|
@ -0,0 +1,20 @@
|
||||||
|
import { Modal } from 'antd';
|
||||||
|
|
||||||
|
export default (
|
||||||
|
handleOk,
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
handleCancel) => {
|
||||||
|
return Modal.confirm({
|
||||||
|
title: title || "警告",
|
||||||
|
content: content || "确认删除?",
|
||||||
|
okText: '确定',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk() {
|
||||||
|
handleOk && handleOk();
|
||||||
|
},
|
||||||
|
onCancel() {
|
||||||
|
handleCancel && handleCancel();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
import './index.scss';
|
||||||
|
|
||||||
|
export default (props) => {
|
||||||
|
const { title, options, changeOptionId, type } = props;
|
||||||
|
|
||||||
|
const [option, setOption] = useState({ code: "", dicItemName: "" ,dicItemCode:""});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
changeOptionId(option, type);
|
||||||
|
}, [option])
|
||||||
|
|
||||||
|
return (
|
||||||
|
|
||||||
|
<div className="shop-box">
|
||||||
|
<div className="choose-title">{title}</div>
|
||||||
|
<div className="choose-list">
|
||||||
|
<div className={classNames({ "choose-item-checked": option.code === "", "choose-item": true })} key={"all"} onClick={() => { setOption({ code: "", dicItemName: "" }) }}>全部</div>
|
||||||
|
{
|
||||||
|
options.map((item) => {
|
||||||
|
return <div className={classNames({ "choose-item-checked": option.code === item.code, "choose-item": true })} key={item.dicItemName} onClick={() => { setOption(item) }} >{item.dicItemName}</div>
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
.nav-content {
|
||||||
|
margin:20px 0;
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: 1px solid #eaeaea;
|
||||||
|
box-shadow: #ddd 0px 0px 5px;
|
||||||
|
}
|
||||||
|
.shop-box {
|
||||||
|
width: 1280px;
|
||||||
|
border-top: 1px solid #eaeaea;
|
||||||
|
display: flex;
|
||||||
|
justify-content: start;
|
||||||
|
}
|
||||||
|
.choose-title {
|
||||||
|
width: 110px;
|
||||||
|
background: #f3f3f3;
|
||||||
|
text-align: center;
|
||||||
|
padding: 16px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.choose-list {
|
||||||
|
width: 1170px;
|
||||||
|
padding: 16px 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: start;
|
||||||
|
}
|
||||||
|
.choose-item {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
padding: 0 15px ;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover{
|
||||||
|
color: #0072ff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.choose-item-checked {
|
||||||
|
color: #0072ff;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { NewSvg } from '../../notice/svg';
|
||||||
|
import './index.scss';
|
||||||
|
export default (props) => {
|
||||||
|
const { list, itemClick, } = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
list.map(item => {
|
||||||
|
return (
|
||||||
|
<div className="list-box" key={item.id}>
|
||||||
|
<div className="list-title" onClick={() => { itemClick(item.id) }}>
|
||||||
|
{item.achievementName || item.title} {item.new && <NewSvg />}
|
||||||
|
</div>
|
||||||
|
<div className="list-other">
|
||||||
|
{item.publisher && <p>发布单位:{item.publisher}</p>}
|
||||||
|
<p>发布时间:{(item.publishDate && item.publishDate.split(' ')[0]) || (item.createTime && item.createTime.split(' ')[0])}</p>
|
||||||
|
<p><i className="iconfont icon-dianjiliang mr5 font-12" />{item.visits || 0}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
.list-box {
|
||||||
|
position: relative;
|
||||||
|
padding: 17px 20px;
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: 1px dashed #dedede;
|
||||||
|
}
|
||||||
|
.list-title {
|
||||||
|
font-size: 1rem;
|
||||||
|
color: #000;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
svg {
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.list-title:hover {
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
.list-title span {
|
||||||
|
padding: 3px 5px;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
background: #f8c753;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-other {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
& > p {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
color: #666;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
p:first-child{
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
p:nth-child(2){
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,150 @@
|
||||||
|
// 本模块公共样式
|
||||||
|
|
||||||
|
.centerbox {
|
||||||
|
width: 1200px;
|
||||||
|
margin: 40px auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.head-navigation{
|
||||||
|
position: absolute;
|
||||||
|
top:-2.3em;
|
||||||
|
span{
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
&:hover{
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.center-content {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #dedede;
|
||||||
|
box-shadow: #eee 0px 1px 1px 3px;
|
||||||
|
}
|
||||||
|
.centerScreen {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 46px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 1px solid #dedede;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内容标题左侧样式
|
||||||
|
.center-left-but {
|
||||||
|
display: flex;
|
||||||
|
justify-content: start;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 20px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.center-left-butD {
|
||||||
|
height: 24px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 24px;
|
||||||
|
color: #333;
|
||||||
|
padding: 0 10px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #dedede;
|
||||||
|
}
|
||||||
|
.center-left-butD:hover {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #409eff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.center-left-butDACT {
|
||||||
|
background-color: #409eff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内容标题右侧样式
|
||||||
|
.center-right-but {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.center-right-but > span {
|
||||||
|
margin: 0 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #0089ff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通用标签样式
|
||||||
|
.list-tag {
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 10px;
|
||||||
|
background: #cfe9ff;
|
||||||
|
color: #0089ff;
|
||||||
|
font-size: 14px;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 2px 5px;
|
||||||
|
line-height: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文件预览modal样式
|
||||||
|
.file-modal {
|
||||||
|
width: 800px !important;
|
||||||
|
.ant-modal-body {
|
||||||
|
padding-top: 40px;
|
||||||
|
.pdf-box {
|
||||||
|
height: 70vh;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ant-modal-close {
|
||||||
|
top: 0 !important;
|
||||||
|
}
|
||||||
|
.show-img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.react-pdf__Page__canvas,
|
||||||
|
.react-pdf__Page__textContent {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-input {
|
||||||
|
max-width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link{
|
||||||
|
color: #0089ff;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover{
|
||||||
|
color:#509eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-grey-a{
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.greater{
|
||||||
|
position: relative;
|
||||||
|
top:-1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.none_panels{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
height: 40vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.newFooter .footerInfos>ul {
|
||||||
|
padding: 0 40px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
max-width: 25%;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (max-width: 1200px){
|
||||||
|
.centerbox {
|
||||||
|
width: 98%;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
import React, { Component } from "react";
|
||||||
|
|
||||||
|
import { Route, Switch } from "react-router-dom";
|
||||||
|
import { withRouter } from "react-router";
|
||||||
|
import { SnackbarHOC } from "educoder";
|
||||||
|
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
|
||||||
|
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
|
||||||
|
import Loadable from "react-loadable";
|
||||||
|
import Loading from "../Loading";
|
||||||
|
import { ImageLayerOfCommentHOC } from "../modules/page/layers/ImageLayerOfCommentHOC";
|
||||||
|
import './index.scss';
|
||||||
|
|
||||||
|
const NoticeList = Loadable({
|
||||||
|
loader: () => import("./notice/noticeList"),
|
||||||
|
loading: Loading,
|
||||||
|
});
|
||||||
|
|
||||||
|
const NoticeDetail = Loadable({
|
||||||
|
loader: () => import("./notice/noticeDetail"),
|
||||||
|
loading: Loading,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
class Index extends Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="newMain clearfix">
|
||||||
|
<Switch {...this.props}>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
path="/notice/noticeDetail/:noticeId"
|
||||||
|
render={(props) => (
|
||||||
|
<NoticeDetail {...this.props} {...props} />
|
||||||
|
)}
|
||||||
|
></Route>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
path="/notice"
|
||||||
|
render={(props) => (
|
||||||
|
<NoticeList {...this.props} {...props} />
|
||||||
|
)}
|
||||||
|
></Route>
|
||||||
|
</Switch>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default withRouter(
|
||||||
|
ImageLayerOfCommentHOC({
|
||||||
|
imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
|
||||||
|
parentSelector: ".newMain",
|
||||||
|
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
|
||||||
|
);
|
|
@ -0,0 +1,39 @@
|
||||||
|
import fetch from '../../fetch';
|
||||||
|
import { notification } from 'antd';
|
||||||
|
|
||||||
|
|
||||||
|
// 公告列表查询
|
||||||
|
export async function getNoticeList(params) {
|
||||||
|
let res = await fetch({
|
||||||
|
url: '/api/announcements/',
|
||||||
|
method: 'get',
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
if (res.code === '1') {
|
||||||
|
return res.data;
|
||||||
|
} else {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: res.message || '请求错误',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 公告详情查询
|
||||||
|
export async function getNoticeDetail(id) {
|
||||||
|
let res = await fetch({
|
||||||
|
url: '/api/announcements/' + id,
|
||||||
|
method: 'get',
|
||||||
|
params:{flag:1}
|
||||||
|
});
|
||||||
|
if (res.code === '1') {
|
||||||
|
return res.data;
|
||||||
|
} else {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: res.message || '请求错误',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
|
@ -0,0 +1,78 @@
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import { Icon, } from 'antd';
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import { httpUrl } from '../../../fetch';
|
||||||
|
import { getNoticeDetail } from '../api';
|
||||||
|
import { noticeType } from '../static';
|
||||||
|
import './index.scss';
|
||||||
|
|
||||||
|
const noticeTypeArr = [];
|
||||||
|
for (const item of noticeType) {
|
||||||
|
noticeTypeArr[item.code]=item.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ({ match, history, showNotification }) => {
|
||||||
|
const [noticeData, setNoticeData] = useState({});
|
||||||
|
const id = match.params.noticeId;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
id && getNoticeDetail(id).then(data => {
|
||||||
|
if(data){
|
||||||
|
data.publishDate=data.publishDate.split(' ')[0];
|
||||||
|
data.createdAt=data.createdAt.split(' ')[0];
|
||||||
|
data.closingDate=data.closingDate.split(' ')[0];
|
||||||
|
}
|
||||||
|
setNoticeData(data || {});
|
||||||
|
})
|
||||||
|
}, [id]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
|
||||||
|
<div className="centerbox notice-detail">
|
||||||
|
<div className="head-navigation">
|
||||||
|
<Link to="/">首页<span className="greater"> > </span></Link>
|
||||||
|
<Link to="/notice">公告<span className="greater"> > </span></Link>
|
||||||
|
<span>公告详情<span className="greater"> > </span> </span>
|
||||||
|
</div>
|
||||||
|
<div className="center-content">
|
||||||
|
{/* <div className="notice-center-content"> */}
|
||||||
|
<div className="notice-title">
|
||||||
|
{noticeData.title}
|
||||||
|
</div>
|
||||||
|
<div className="notice-detail-content">
|
||||||
|
<div className="center-author">
|
||||||
|
<p key={0}>公告类型:{noticeTypeArr[noticeData.type]}</p>
|
||||||
|
{noticeData.publisher && <p key={1}>发布单位:{noticeData.publisher}</p>}
|
||||||
|
<p key={2}>发布时间:{noticeData.publishDate || noticeData.createdAt}</p>
|
||||||
|
<p key={3}>截止时间:{noticeData.closingDate}</p>
|
||||||
|
<p key={4}>浏览:{noticeData.visits || 0}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="content-text">
|
||||||
|
<div className="notice-content-title"><Icon type="caret-right" />公告主要内容</div>
|
||||||
|
<div dangerouslySetInnerHTML={{ __html: noticeData.text }}>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{
|
||||||
|
noticeData.fileDownloadPath &&
|
||||||
|
<React.Fragment>
|
||||||
|
<div className="notice-content-title"><Icon type="caret-right" />公告附件</div>
|
||||||
|
<p className="notice-content-download" >
|
||||||
|
<span onClick={() => { window.open(httpUrl + noticeData.fileDownloadPath) }}>
|
||||||
|
<i className="iconfont icon-fujian color-green font-14 mr3"></i>{noticeData.fileName}
|
||||||
|
</span>
|
||||||
|
<span className="link" onClick={() => { window.open(httpUrl + noticeData.fileDownloadPath) }}>下载</span>
|
||||||
|
</p>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</React.Fragment>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
.centerbox {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.notice-detail {
|
||||||
|
margin-top: 3.5rem;
|
||||||
|
.head-navigation {
|
||||||
|
top: -2.5rem;
|
||||||
|
}
|
||||||
|
.center-content {
|
||||||
|
overflow: auto;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-detail-content {
|
||||||
|
padding: 2rem 2.5rem 3rem;
|
||||||
|
|
||||||
|
.anticon-caret-right {
|
||||||
|
color: #1890ff;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-title {
|
||||||
|
margin: 3rem auto 0;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1.375rem;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.375rem;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内容详情
|
||||||
|
.item-content {
|
||||||
|
padding: 10px 10px 0 30px;
|
||||||
|
}
|
||||||
|
.content-notice {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center-author {
|
||||||
|
display: flex;
|
||||||
|
flex-flow:row wrap-reverse;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
padding: .5rem;
|
||||||
|
background: #f9f9f9;
|
||||||
|
color: #333;
|
||||||
|
p {
|
||||||
|
padding: 0 .5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-text {
|
||||||
|
margin: 1.25rem 0;
|
||||||
|
min-height: 30vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-content-title {
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-content-download {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 1rem;
|
||||||
|
background: #f9f9f9;
|
||||||
|
span:hover{
|
||||||
|
cursor: pointer;
|
||||||
|
color: #1890ff;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,333 @@
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
import { Pagination, Icon, Input, Tabs } from 'antd';
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import ItemList from '../../components/itemList';
|
||||||
|
import Nodata from '../../../forge/Nodata';
|
||||||
|
import Loading from "../../../Loading";
|
||||||
|
import { AbandonSvg, AllSvg, ChangeSvg, CheckSvg } from '../svg';
|
||||||
|
import noticePng from '../image/banner.png';
|
||||||
|
import { getNoticeList } from '../api';
|
||||||
|
|
||||||
|
import './index.scss';
|
||||||
|
const Search = Input.Search;
|
||||||
|
const { TabPane } = Tabs;
|
||||||
|
|
||||||
|
const defaultColor = '#1890ff';
|
||||||
|
const activeColor = '#fff';
|
||||||
|
|
||||||
|
export default (props) => {
|
||||||
|
|
||||||
|
const [tab, setTab] = useState('0');
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
|
const [title, setTitle] = useState(undefined);
|
||||||
|
const [orderBy, setOrderBy] = useState('publishDateDesc');
|
||||||
|
|
||||||
|
const [curPage, setCurPage] = useState(1);
|
||||||
|
const [total, setTotal] = useState(0);
|
||||||
|
const [noticeList, setNoticeList] = useState([]);
|
||||||
|
|
||||||
|
const [changeList, setChangeList] = useState([]);
|
||||||
|
const [checkList, setCheckList] = useState([]);
|
||||||
|
const [abandonList, setAbandonList] = useState([]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setLoading(true);
|
||||||
|
if (tab === '0') {
|
||||||
|
const params = {
|
||||||
|
orderBy,
|
||||||
|
curPage: 1,
|
||||||
|
isChecked: 1,
|
||||||
|
pageSize: 5,
|
||||||
|
status: 1,
|
||||||
|
type: 1,
|
||||||
|
title,
|
||||||
|
flag: 1, //后台管理查询:2;前台展示:1
|
||||||
|
};
|
||||||
|
getNoticeList(params).then(data => {
|
||||||
|
setChangeList(data.rows);
|
||||||
|
});
|
||||||
|
getNoticeList({ ...params, type: 2 }).then(data => {
|
||||||
|
setCheckList(data.rows);
|
||||||
|
});
|
||||||
|
getNoticeList({ ...params, type: 3 }).then(data => {
|
||||||
|
setAbandonList(data.rows);
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const params = {
|
||||||
|
orderBy,
|
||||||
|
curPage,
|
||||||
|
isChecked: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
status: 1,
|
||||||
|
title,
|
||||||
|
type: tab,
|
||||||
|
flag: 1, //后台管理查询:2;前台展示:1
|
||||||
|
};
|
||||||
|
getNoticeList(params).then(data => {
|
||||||
|
setNoticeList(data.rows);
|
||||||
|
setTotal(data.total);
|
||||||
|
setLoading(false);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, [tab, title, orderBy, curPage]);
|
||||||
|
|
||||||
|
|
||||||
|
function changeSort(sortType) {
|
||||||
|
setOrderBy(sortType);
|
||||||
|
setCurPage(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function noticeClick(id) {
|
||||||
|
props.history.push(`/notice/noticeDetail/${id}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortNav() {
|
||||||
|
return <div className="notice-sort-nav">
|
||||||
|
{/* <div className="center-left-but"> */}
|
||||||
|
<Search
|
||||||
|
maxLength={20}
|
||||||
|
style={{ width: "56%" }}
|
||||||
|
placeholder="输入标题关键字,不能超过20字符"
|
||||||
|
enterButton={<span><Icon type="search" className="mr5" /> 搜索</span>}
|
||||||
|
onSearch={(value) => setTitle(value)} />
|
||||||
|
{/* </div> */}
|
||||||
|
<div className="center-right-but">
|
||||||
|
<div className={classNames({sortLink:true,active:orderBy==='publishDateDesc'})} onClick={() => { changeSort('publishDateDesc') }}>时间降序<Icon type="arrow-down" /></div>
|
||||||
|
<span className="piece">|</span>
|
||||||
|
<div className={classNames({sortLink:true,active:orderBy==='publishDateAsc'})} onClick={() => { changeSort('publishDateAsc') }}>时间升序<Icon type="arrow-up" /></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeTab(key) {
|
||||||
|
setTab(key);
|
||||||
|
setCurPage(1);
|
||||||
|
setTitle('');
|
||||||
|
setOrderBy('publishDateDesc');
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
<img alt="图片加载失败" src={noticePng} width="100%"></img>
|
||||||
|
<div className="centerbox notice-list clearfix">
|
||||||
|
<div className="head-navigation">
|
||||||
|
<Link to="/">首页<span className="greater"> > </span></Link>
|
||||||
|
<span>公告<span className="greater"> > </span> </span>
|
||||||
|
</div>
|
||||||
|
<Tabs activeKey={tab} tabPosition="left" onChange={(key) => { changeTab(key) }}>
|
||||||
|
<TabPane
|
||||||
|
tab={
|
||||||
|
<React.Fragment>
|
||||||
|
<AllSvg color={tab === '0' ? activeColor : defaultColor} />
|
||||||
|
<span>全部公告</span>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
key="0">
|
||||||
|
|
||||||
|
|
||||||
|
<div className="notice-center-content">
|
||||||
|
{
|
||||||
|
sortNav()
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
loading ? <Loading /> :
|
||||||
|
<React.Fragment>
|
||||||
|
|
||||||
|
{changeList.length > 0 && <React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<ChangeSvg color={defaultColor} />
|
||||||
|
<span>更正公告</span>
|
||||||
|
</div>
|
||||||
|
{changeList.length === 5 && <span className="link" onClick={() => { changeTab('1') }}>查看更多 <Icon type="arrow-right" /></span>}
|
||||||
|
</div>
|
||||||
|
<ItemList
|
||||||
|
list={changeList}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
{checkList.length > 0 && <React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<ChangeSvg color={defaultColor} />
|
||||||
|
<span>中标公告</span>
|
||||||
|
</div>
|
||||||
|
{checkList.length === 5 && <span className="link" onClick={() => { changeTab('2') }}>查看更多 <Icon type="arrow-right" /></span>}
|
||||||
|
</div>
|
||||||
|
<ItemList
|
||||||
|
list={checkList}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
{abandonList.length > 0 && <React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<ChangeSvg color={defaultColor} />
|
||||||
|
<span>废标公告</span>
|
||||||
|
</div>
|
||||||
|
{abandonList.length === 5 && <span className="link" onClick={() => { changeTab('3') }}>查看更多 <Icon type="arrow-right" /></span>}
|
||||||
|
</div>
|
||||||
|
<ItemList
|
||||||
|
list={abandonList}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
{changeList.length === 0 && checkList.length === 0 && abandonList.length === 0 && <Nodata _html="暂无数据" />}
|
||||||
|
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</TabPane>
|
||||||
|
|
||||||
|
|
||||||
|
<TabPane
|
||||||
|
tab={
|
||||||
|
<React.Fragment>
|
||||||
|
<ChangeSvg color={tab === '1' ? activeColor : defaultColor} />
|
||||||
|
<span>更正公告</span>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
key="1">
|
||||||
|
|
||||||
|
<div className="notice-center-content">
|
||||||
|
{
|
||||||
|
sortNav()
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
loading ? <Loading /> :
|
||||||
|
<React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<ChangeSvg color={defaultColor} />
|
||||||
|
<span>更正公告</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ItemList
|
||||||
|
list={noticeList}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>
|
||||||
|
{noticeList.length > 0 ? <div className="edu-txt-center mt10">
|
||||||
|
<Pagination
|
||||||
|
showQuickJumper
|
||||||
|
onChange={(page) => { setCurPage(page) }}
|
||||||
|
current={curPage}
|
||||||
|
total={total}
|
||||||
|
showTotal={total => `共 ${total} 条`}
|
||||||
|
/>
|
||||||
|
</div> : <Nodata _html="暂无数据" />}
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</TabPane>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<TabPane
|
||||||
|
tab={
|
||||||
|
<React.Fragment>
|
||||||
|
<CheckSvg color={tab === '2' ? activeColor : defaultColor} />
|
||||||
|
<span>中标公告</span>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
key="2">
|
||||||
|
|
||||||
|
|
||||||
|
<div className="notice-center-content">
|
||||||
|
{
|
||||||
|
sortNav()
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
loading ? <Loading /> :
|
||||||
|
<React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<CheckSvg color={defaultColor} />
|
||||||
|
<span>中标公告</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ItemList
|
||||||
|
list={noticeList}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>
|
||||||
|
{noticeList.length > 0 ? <div className="edu-txt-center mt10">
|
||||||
|
<Pagination
|
||||||
|
showQuickJumper
|
||||||
|
onChange={(page) => { setCurPage(page) }}
|
||||||
|
current={curPage}
|
||||||
|
total={total}
|
||||||
|
showTotal={total => `共 ${total} 条`}
|
||||||
|
/>
|
||||||
|
</div> : <Nodata _html="暂无数据" />}
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</TabPane>
|
||||||
|
|
||||||
|
|
||||||
|
<TabPane
|
||||||
|
tab={
|
||||||
|
<React.Fragment>
|
||||||
|
<AbandonSvg color={tab === '3' ? activeColor : defaultColor} />
|
||||||
|
<span>废标公告</span>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
key="3">
|
||||||
|
|
||||||
|
<div className="notice-center-content">
|
||||||
|
{
|
||||||
|
sortNav()
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
loading ? <Loading /> :
|
||||||
|
<React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<ChangeSvg color={defaultColor} />
|
||||||
|
<span>废标公告</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ItemList
|
||||||
|
list={noticeList}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>
|
||||||
|
{noticeList.length > 0 ? <div className="edu-txt-center mt10">
|
||||||
|
<Pagination
|
||||||
|
showQuickJumper
|
||||||
|
onChange={(page) => { setCurPage(page) }}
|
||||||
|
current={curPage}
|
||||||
|
total={total}
|
||||||
|
showTotal={total => `共 ${total} 条`}
|
||||||
|
/>
|
||||||
|
</div> : <Nodata _html="暂无数据" />}
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</TabPane>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</React.Fragment>
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,95 @@
|
||||||
|
.notice-list{
|
||||||
|
.ant-tabs {
|
||||||
|
.ant-tabs-left-bar{
|
||||||
|
border: 1px solid #E5E5E5;
|
||||||
|
.ant-tabs-nav-container{
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
.ant-tabs-nav-wrap{
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg{
|
||||||
|
margin-right:.75em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ant-tabs-tab{
|
||||||
|
display: flex;
|
||||||
|
justify-content: start;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
width: 13.5rem;
|
||||||
|
height: 2.8125rem;
|
||||||
|
background: #fff;
|
||||||
|
font-size: 1.125rem;
|
||||||
|
|
||||||
|
}
|
||||||
|
.ant-tabs-left-content{
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
.ant-tabs-tab-active{
|
||||||
|
background: #1890FF;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.ant-tabs-ink-bar{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.notice-sort-nav{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: .625rem 1rem .5rem;
|
||||||
|
background: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-center-content{
|
||||||
|
padding:1.25rem;
|
||||||
|
background: #fff;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-head-title{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
// height: 3.75rem;
|
||||||
|
padding: 1.25rem 0 .6rem 0;
|
||||||
|
.item-head-title-content{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ant-input-group-addon{
|
||||||
|
border: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-head-title{
|
||||||
|
border-bottom: 1px solid #E5E5E5;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.center-right-but{
|
||||||
|
.piece{
|
||||||
|
margin:0 .8rem;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
.sortLink{
|
||||||
|
color: #333;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover{
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
&.active{
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
// 公告开始
|
||||||
|
export const noticeStatus = [
|
||||||
|
{ code: 0, name: "关闭", dicItemName: '关闭' },
|
||||||
|
{ code: 1, name: "正常", dicItemName: '正常' },
|
||||||
|
{ code: 2, name: "草稿", dicItemName: '草稿' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const noticeType = [
|
||||||
|
{ code: 1, name: "更正公告", dicItemName: "更正" },
|
||||||
|
{ code: 2, name: "中标公告", dicItemName: "中标" },
|
||||||
|
{ code: 3, name: "废标公告", dicItemName: "废标" },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const noticeChecked = [
|
||||||
|
{ code: 0, name: "未通过", dicItemName: "未通过" },
|
||||||
|
{ code: 1, name: "通过", dicItemName: "通过" },
|
||||||
|
{ code: 2, name: "未处理", dicItemName: "未处理" },
|
||||||
|
];
|
||||||
|
//公告结束
|
|
@ -0,0 +1,66 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export function AbandonSvg({color}) {
|
||||||
|
return <svg width="16" height="15.198" viewBox="0 0 16 15.198">
|
||||||
|
<g id="组_96" data-name="组 96" transform="translate(-54.703 -1778.755)">
|
||||||
|
<g id="组_87" data-name="组 87" transform="translate(63.014 1786.264)">
|
||||||
|
<path id="路径_334" data-name="路径 334" d="M365.033,2110.025H361.89a.591.591,0,1,1,0-1.183h3.143a.591.591,0,1,1,0,1.183Z" transform="translate(-359.618 -2105.589)" fill={color} />
|
||||||
|
<path id="路径_335" data-name="路径 335" d="M316.429,2010.462a3.844,3.844,0,1,0,1.126,2.718A3.819,3.819,0,0,0,316.429,2010.462Zm-.739,4.7a2.8,2.8,0,1,1,0-3.959A2.79,2.79,0,0,1,315.69,2015.16Z" transform="translate(-309.866 -2009.336)" fill={color} />
|
||||||
|
</g>
|
||||||
|
<g id="组_88" data-name="组 88" transform="translate(54.703 1778.755)">
|
||||||
|
<path id="路径_336" data-name="路径 336" d="M61.441,1790.478a5.6,5.6,0,0,1,5.545-5.651,5.476,5.476,0,0,1,1.02.1v-4.368a1.808,1.808,0,0,0-1.8-1.8H56.507a1.808,1.808,0,0,0-1.8,1.8v11.02a1.808,1.808,0,0,0,1.8,1.8h5.718A5.705,5.705,0,0,1,61.441,1790.478Zm-4.155-8.229a.7.7,0,0,1,.728-.666h6.692a.7.7,0,0,1,.728.666h0a.7.7,0,0,1-.728.666H58.014a.7.7,0,0,1-.728-.666Zm3.077,7.351h-2.5a.673.673,0,0,1,0-1.332h2.5a.673.673,0,0,1,0,1.332Zm-2.349-3.44a.7.7,0,0,1-.728-.666h0a.7.7,0,0,1,.728-.666h3.18a.7.7,0,0,1,.728.666h0a.7.7,0,0,1-.728.666Z" transform="translate(-54.703 -1778.755)" fill={color} />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function AllSvg({color}) {
|
||||||
|
return <svg width="16" height="15.198" viewBox="0 0 16 15.198">
|
||||||
|
<g id="组_93" data-name="组 93" transform="translate(696.223 -1778.755)">
|
||||||
|
<path id="路径_337" data-name="路径 337" d="M-365.778,2071.537l-1.4.948h-.467a.313.313,0,0,0-.311.315v1.263a.314.314,0,0,0,.311.316h.467l1.4.947a.315.315,0,0,0,.221-.094.314.314,0,0,0,.09-.222v-3.157A.314.314,0,0,0-365.778,2071.537Z" transform="translate(-317.611 -283.396)" fill={color} />
|
||||||
|
<g id="组_90" data-name="组 90" transform="translate(-688.125 1786.051)">
|
||||||
|
<path id="路径_338" data-name="路径 338" d="M-434.315,2010.493a3.925,3.925,0,0,0-2.794-1.157,3.925,3.925,0,0,0-2.794,1.157,3.925,3.925,0,0,0-1.157,2.794,3.925,3.925,0,0,0,1.157,2.794,3.926,3.926,0,0,0,2.794,1.157,3.926,3.926,0,0,0,2.794-1.157,3.925,3.925,0,0,0,1.157-2.794A3.925,3.925,0,0,0-434.315,2010.493Zm-.76,4.828a2.867,2.867,0,0,1-2.034.841,2.868,2.868,0,0,1-2.034-.841,2.858,2.858,0,0,1-.843-2.034,2.858,2.858,0,0,1,.843-2.034,2.858,2.858,0,0,1,2.034-.843,2.858,2.858,0,0,1,2.034.843A2.88,2.88,0,0,1-435.075,2015.321Z" transform="translate(441.06 -2009.336)" fill={color} />
|
||||||
|
</g>
|
||||||
|
<g id="组_91" data-name="组 91" transform="translate(-696.223 1778.755)">
|
||||||
|
<path id="路径_339" data-name="路径 339" d="M-689.3,1790.466a5.672,5.672,0,0,1,5.7-5.645,5.79,5.79,0,0,1,1.048.1v-4.363a1.832,1.832,0,0,0-1.854-1.8h-9.964a1.832,1.832,0,0,0-1.854,1.8v11.008a1.833,1.833,0,0,0,1.854,1.8h5.877A5.577,5.577,0,0,1-689.3,1790.466Zm-4.27-8.22a.712.712,0,0,1,.748-.665h6.878a.713.713,0,0,1,.748.665h0a.713.713,0,0,1-.748.665h-6.878a.713.713,0,0,1-.748-.665Zm3.163,7.343h-2.573a.633.633,0,0,1-.589-.665.633.633,0,0,1,.589-.665h2.573a.633.633,0,0,1,.589.665A.632.632,0,0,1-690.406,1789.588Zm-2.414-3.437a.713.713,0,0,1-.748-.665h0a.713.713,0,0,1,.748-.665h3.268a.713.713,0,0,1,.748.665h0a.713.713,0,0,1-.748.665Z" transform="translate(696.223 -1778.755)" fill={color} />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ChangeSvg({color}) {
|
||||||
|
return <svg width="16" height="15.176" viewBox="0 0 16 15.176">
|
||||||
|
<g id="组_94" data-name="组 94" transform="translate(-703.372 -1778.755)">
|
||||||
|
<path id="路径_331" data-name="路径 331" d="M1034.307,2069.547a1.2,1.2,0,0,0-1.2.934,1.17,1.17,0,0,0,.707,1.326c.044.219.063.475-.073.573a1.129,1.129,0,0,0-.885.486v.422h2.865v-.393a1.414,1.414,0,0,0-.949-.523.751.751,0,0,1-.032-.554,1.172,1.172,0,0,0,.739-1.309,1.2,1.2,0,0,0-1.175-.961Z" transform="translate(-318.75 -281.318)" fill={color} />
|
||||||
|
<path id="路径_332" data-name="路径 332" d="M965.772,2010.458a3.832,3.832,0,1,0,1.122,2.709A3.807,3.807,0,0,0,965.772,2010.458Zm-.737,4.682a2.79,2.79,0,1,1,0-3.946A2.781,2.781,0,0,1,965.035,2015.141Z" transform="translate(-247.522 -223.068)" fill={color} />
|
||||||
|
<g id="组_85" data-name="组 85" transform="translate(703.372 1778.755)">
|
||||||
|
<path id="路径_333" data-name="路径 333" d="M710.088,1790.463a5.586,5.586,0,0,1,5.527-5.643,5.441,5.441,0,0,1,1.017.1v-4.362a1.8,1.8,0,0,0-1.8-1.8H705.17a1.8,1.8,0,0,0-1.8,1.8v11.005a1.8,1.8,0,0,0,1.8,1.8h5.7A5.705,5.705,0,0,1,710.088,1790.463Zm-4.141-8.218a.7.7,0,0,1,.726-.665h6.67a.7.7,0,0,1,.726.665h0a.7.7,0,0,1-.726.665h-6.67a.7.7,0,0,1-.726-.665Zm3.067,7.341h-2.5a.673.673,0,0,1,0-1.33h2.5a.673.673,0,0,1,0,1.33Zm-2.341-3.436a.7.7,0,0,1-.726-.665h0a.7.7,0,0,1,.726-.665h3.169a.7.7,0,0,1,.726.665h0a.7.7,0,0,1-.726.665Z" transform="translate(-703.372 -1778.755)" fill={color} />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function CheckSvg({color}) {
|
||||||
|
return <svg width="16" height="14.548" viewBox="0 0 16 14.548">
|
||||||
|
<g id="组_95" data-name="组 95" transform="translate(-1325.073 -1778.755)">
|
||||||
|
<path id="路径_325" data-name="路径 325" d="M1655.311,1844.214" transform="translate(-319.943 -63.419)" fill={color}/>
|
||||||
|
<path id="路径_326" data-name="路径 326" d="M1680.948,2109.083a.659.659,0,1,0-.407.609.659.659,0,0,0,.407-.609Z" transform="translate(-343.504 -319.392)" fill={color}/>
|
||||||
|
<g id="组_82" data-name="组 82" transform="translate(1333.053 1785.974)">
|
||||||
|
<path id="路径_327" data-name="路径 327" d="M1587.227,2013.456a2.664,2.664,0,1,1-1.177-1.812l.058-.378.585-.39a3.665,3.665,0,1,0,1.565,3,3.7,3.7,0,0,0-.064-.686l-.541.361Z" transform="translate(-1580.931 -2010.216)" fill={color}/>
|
||||||
|
<path id="路径_328" data-name="路径 328" d="M1645.528,2074.812a1.261,1.261,0,1,1-.58-2.115l.479-.319a1.734,1.734,0,1,0,.941,1.542c0-.008,0-.016,0-.023l-.514.349A1.254,1.254,0,0,1,1645.528,2074.812Z" transform="translate(-1640.971 -2070.255)" fill={color}/>
|
||||||
|
</g>
|
||||||
|
<g id="组_83" data-name="组 83" transform="translate(1337.198 1786.341)">
|
||||||
|
<path id="路径_329" data-name="路径 329" d="M1717.735,2023.462h-.009l-.741-.124h0a.373.373,0,0,1-.271-.406v0l.186-.693,0-.01a.092.092,0,0,0-.05-.125l-.01,0-.009-.006a.132.132,0,0,0-.074-.023.134.134,0,0,0-.075.023l-1.335.89-.133.628-1.246.831.005,0a1.024,1.024,0,0,1,.608.916l1.238-.84.628.121,1.34-.893.005,0c.04-.02.049-.053.05-.148C1717.805,2023.516,1717.773,2023.462,1717.735,2023.462Z" transform="translate(-1713.97 -2022.066)" fill={color}/>
|
||||||
|
</g>
|
||||||
|
<path id="路径_330" data-name="路径 330" d="M1331.495,1789.957a5.343,5.343,0,0,1,5.285-5.4,5.206,5.206,0,0,1,.972.091v-4.174a1.725,1.725,0,0,0-1.719-1.72h-9.24a1.725,1.725,0,0,0-1.719,1.72v10.53a1.725,1.725,0,0,0,1.719,1.72h5.45A5.462,5.462,0,0,1,1331.495,1789.957Zm-3.96-7.863a.669.669,0,0,1,.694-.636h6.378a.669.669,0,0,1,.694.636h0a.669.669,0,0,1-.694.636h-6.378a.669.669,0,0,1-.694-.636Zm2.933,7.024h-2.386a.644.644,0,0,1,0-1.272h2.386a.644.644,0,0,1,0,1.272Zm-2.239-3.287a.669.669,0,0,1-.694-.636h0a.669.669,0,0,1,.694-.636h3.031a.669.669,0,0,1,.694.636h0a.669.669,0,0,1-.694.636Z" transform="translate(0 0)" fill={color}/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function NewSvg() {
|
||||||
|
return <svg width="33.091" height="14" viewBox="0 0 33.091 14">
|
||||||
|
<g id="组_137" data-name="组 137" transform="translate(-294 -259)">
|
||||||
|
<path id="路径_346" data-name="路径 346" d="M324.546,259h-28A2.553,2.553,0,0,0,294,261.545v8.909A2.553,2.553,0,0,0,296.545,273h28a2.553,2.553,0,0,0,2.545-2.545v-8.909A2.553,2.553,0,0,0,324.546,259ZM302.9,269.818a.642.642,0,0,1-.445.611.983.983,0,0,1-.191.025.664.664,0,0,1-.535-.28l-3.907-5.893v5.524a.636.636,0,1,1-1.273.013v-7.636a.632.632,0,0,1,1.158-.356l3.92,5.88v-5.524a.636.636,0,1,1,1.273,0Zm8.285-4.455a.636.636,0,1,1,0,1.273h-4.455v2.546h4.455a.636.636,0,1,1,0,1.273h-5.091a.63.63,0,0,1-.636-.636v-7.636a.63.63,0,0,1,.636-.636h5.091a.636.636,0,0,1,0,1.273h-4.455v2.545Zm13.211-3.029-2.52,7.522a.63.63,0,0,1-1.2,0l-1.922-5.74-1.922,5.74a.659.659,0,0,1-1.2,0l-2.52-7.522a.636.636,0,0,1,1.209-.395l1.922,5.74,1.922-5.74a.659.659,0,0,1,1.2,0l1.922,5.74,1.922-5.74a.624.624,0,1,1,1.184.395Zm0,0" fill="#ffb300"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
Loading…
Reference in New Issue