通知中心静态页面0910

This commit is contained in:
谢思 2021-09-10 18:23:28 +08:00
parent c477fbe89a
commit 4795de938e
13 changed files with 592 additions and 161 deletions

View File

@ -13,7 +13,6 @@ import '../../modules/tpm/TPMIndex.css';
import CheckProfile from '../Component/ProfileModal/Profile';
import './header.scss';
import '../SecuritySetting/notice/myNotice/Index.scss'
import NoticeContent from './NoticeContent';
const $ = window.$
// TODO 这部分脚本从公共脚本中直接调用
@ -49,7 +48,6 @@ class NewHeader extends Component {
settings: null,
visiblemyss: false,
openSearch:false,
noticeType:"0",
}
}
componentDidMount() {
@ -259,43 +257,6 @@ class NewHeader extends Component {
)
}
click = (e) =>{
this.setState({
noticeType: e.key,
})
}
messageList=()=>{
let { noticeType } = this.state;
return(
<div className="messageHoverDiv">
<div className="sshHead hoverNotice-head">
<Menu mode="horizontal" selectedKeys={noticeType} onClick={this.click}>
<Menu.Item key="0"><Badge count={5}>系统通知</Badge></Menu.Item>
<Menu.Item key="1" id="item"><Badge count={10}>私信</Badge></Menu.Item>
<Menu.Item key="2"><Badge count={99}>@</Badge></Menu.Item>
</Menu>
</div>
<div className="hoverNotice-body">
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
<NoticeContent noticeType={noticeType}></NoticeContent>
</div>
<div className="hoverNotice-buttom">
<a>全部消息</a>
<a>所有{noticeType==="0"?"系统消息":noticeType==="1"?"私信":"@我"}一键已读</a>
</div>
</div>
)
}
renderMenu=(personal)=>{
const { current_user } = this.props;
return(
@ -478,7 +439,7 @@ class NewHeader extends Component {
{/* {current_user && current_user.login && notice_url ? */}
{current_user && current_user.login ?
<Popover placement={`bottomRight`} content={this.messageList(settings && settings.personal)}>
<Popover placement={`bottomRight`} content={<NoticeContent/>}>
<a href={`/settings/notice/myNotice`} >
<i className="iconfont icon-xiaoxilingdang color-grey-6 ml15 mr15"></i>
<span className="newslight" style={{ display: this.props.Headertop === undefined ? "none" : this.props.Headertop.new_message === true ? "block" : "none" }}>

View File

@ -1,19 +1,285 @@
import React, { useEffect, useState } from 'react';
import { Badge} from 'antd';
import { Badge, Menu} from 'antd';
import './header.scss';
import '../SecuritySetting/notice/manager/Index.scss';
import '../SecuritySetting/Index.scss';
import '../SecuritySetting/notice/myNotice/Index.scss'
import { timeAgo } from '../../common/DateUtil';
import { Link } from 'react-router-dom';
function NoticeContent(props) {
const noticeType = props.noticeType;
const[noticeType,setNoticeType] = useState("0");
const[notice_unread_count,setNotice_unread_count]=useState(221);//
const[letter_unread_count,setLetter_unread_count]=useState(10);//
const[at_unread_count,setAt_unread_count]=useState(2);//@
const[notice_unread_list,setNotice_unread_list]=useState([
{
id: 11,
type: 1, //12345 ISSUE
read: 0, //01
url: "/jasder/courselist", ///issueissue/
content: "蒋宇航在 Gitlink/Gitlink 新建易修:<b>测试环境链接地址错误</b>", //<b></b>
create_time: "2019-03-04 18:08", //
},
{
id: 12,
type: 2,
read: 0,
url: "/jasder/courselist",
content: "你关注的仓库 <b>王涛/协同分析</b> 已被删除",
create_time: "2019-03-04 18:08",
},
{
id: 12,
type: 3,
read: 0,
url: "/jasder/courselist",
content: "蔡世新建易修<b> 【镜像项目-Github】私有项目 用户新建仓库,仓库转移到本地仓库的哈哈哈哈哈</b>",
create_time: "2019-03-04 18:08",
},
{
id: 12,
type: 4,
read: 0,
url: "/jasder/courselist",
content: "您的帐号<b> 小霞子1999 </b>于2021-08-11 10:52:29在非常用的IP地址113.218.1.188(湖南)",
create_time: "2019-03-04 18:08",
},
{
id: 12,
type: 5,
read: 0,
url: "/jasder/courselist",
content: "蔡世新建易修<b> 【镜像项目-Github】私有项目</b> 用户新建仓库,仓库转移到本地仓库的哈哈哈哈哈",
create_time: "2019-03-04 18:08",
},
{
id: 12,
type: 6,
read: 0,
url: "/jasder/courselist",
content: "蔡世新建易修<b> 【镜像项目-Github】私有项目 用户新建仓库,仓库转移到本地仓库的哈哈哈</b>",
create_time: "2019-03-04 18:08",
}
]);
const[letter_unread_list,setLetter_unread_list]=useState([
{
id: 122,
read: 0, //01
send_name: "蒋宇航", //
send_login: "jiangYuHang", //login
content: "私信内容", //
create_time: "2019-03-04 18:08", //
},
{
id: 122,
read: 0, //01
send_name: "景霞", //
send_login: "jiangYuHang", //login
content: "最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性、页面性能等方面进行深度优化提供简单控制台。", //
create_time: "2019-03-04 18:08", //
},
{
id: 122,
read: 0, //01
send_name: "陈银花", //
send_login: "jiangYuHang", //login
content: "A Vue 3 Component Library. Fairly Complete. Customizable Themes. Uses TypeScript. Not too Slow.", //
create_time: "2019-03-04 18:08", //
},
{
id: 122,
read: 0, //01
send_name: "蒋宇航", //
send_login: "jiangYuHang", //login
content: "您好?", //
create_time: "2019-03-04 18:08", //
},
{
id: 122,
read: 0, //01
send_name: "蒋宇航", //
send_login: "jiangYuHang", //login
content: "Open-source high-performance RISC-V processor", //
create_time: "2019-03-04 18:08", //
},
{
id: 122,
read: 0, //01
send_name: "蒋宇航", //
send_login: "jiangYuHang", //login
content: "构建卷积神经网络,训练模型,预测模型效果。", //
create_time: "2019-03-04 18:08", //
}
]);
const[at_unread_list,setAt_unread_list]=useState([
{
id: 122,
read: 0, //01
name: "蒋宇航", //@
content: "<b>钟景霞</b> 在易修 <b>【UI设计】用户public key添加功能</b> 中@我", //@<b></b>
create_time: "2019-03-04 18:08", //@
url: "/jasder/courselist", ///issue
},
{
id: 122,
read: 0, //01
name: "阿吧", //@
content: "<b>钟景霞</b> 在易修 <b>【UI设计】用户public key添加功能</b> 中@我【后端】代码库没有任何文件的情况下镜像项目创建/代码库页面一直处于loading状态需优化 ", //@<b></b>
create_time: "2019-03-04 18:08", //@
url: "/jasder/courselist", ///issue
}
,
{
id: 122,
read: 0, //01
name: "蒋宇航", //@
content: "<b>钟景霞</b> 在易修 <b>【UI设计】用s@我", //@<b></b>
create_time: "2019-03-04 18:08", //@
url: "/jasder/courselist", ///issue
}
,
{
id: 122,
read: 0, //01
name: "蒋宇航", //@
content: "<b>钟景霞</b> key添加功能</b> 中@我", //@<b></b>
create_time: "2019-03-04 18:08", //@
url: "/jasder/courselist", ///issue
}
,
{
id: 122,
read: 0, //01
name: "蒋宇航", //@
content: "<b>钟景霞</b> 在易修 <b>【UI设计】用户public key添加功能</b> 中@我axdsadasd", //@<b></b>
create_time: "2019-03-04 18:08", //@
url: "/jasder/courselist", ///issue
}
,
{
id: 122,
read: 0, //01
name: "蒋宇航", //@
content: "<b>钟景霞</b> 在易修 <b>【UI设计】用户public key添加功sdasd能</b> 中@我", //@<b></b>
create_time: "2019-03-04 18:08", //@
url: "/jasder/courselist", ///issue
}
,
{
id: 122,
read: 0, //01
name: "蒋宇航", //@
content: "<b>钟景霞</b> 在易修 <b>【UI设计】用户public key添加功能</b> 中@我", //@<b></b>
create_time: "2019-03-04 18:08", //@
url: "/jasder/courselist", ///issue
}
]);
return(
<div className="noticeCont">
<Badge color="#FA2020" />
{noticeType === "0" ? <i className="iconfont icon-yixiuicon1"></i> : ""}
<div className="text">
<span>蒋宇航</span>
<span className="boldSpan">最好的OpenStack控制台对标Open社区项目Horizon在易...</span>
<span className="timeSpan">4分钟前</span>
<div className="messageHoverDiv notice01">
<div className="sshHead hoverNotice-head">
<Menu mode="horizontal" selectedKeys={noticeType} onClick={(e)=>setNoticeType(e.key)}>
<Menu.Item key="0"><Badge count={notice_unread_count}>系统通知</Badge></Menu.Item>
<Menu.Item key="1" id="item-private"><Badge count={letter_unread_count}>私信</Badge></Menu.Item>
<Menu.Item key="2"><Badge count={at_unread_count}>@</Badge></Menu.Item>
</Menu>
</div>
<div className="hoverNotice-body">
{/* 系统消息 */}
{noticeType==="0"?notice_unread_list.length>0?notice_unread_list.map(item=>{
let contentStr = item.content.endsWith("</b>") && item.content.length>=50 && item.content.replace("</b>","").substr(0,40)+"...";
let iconName = item.type===1?"icon-xitongtongzhiicon":item.type===2?"icon-xiaoxi2":item.type===3?"icon-yixiuicon1":item.type===4?"icon-hebingqingqiuicon":item.type===5?"icon-lichengbeiicon":"icon-daimakuicon1";
return(
<div className="noticeCont-back">
<div className="noticeCont" style={{height:item.content.length>=30 && item.content.length<=34?'65px':""}}>
<Badge color="#FA2020" />
<i className={"iconfont "+iconName}></i>
<div className="noticeCont-text">
<span dangerouslySetInnerHTML={{__html:contentStr?contentStr: item.content.length>=48?item.content.substr(0,48)+"...":item.content}}></span>
<span className="timeSpan">{item.create_time?timeAgo(item.create_time):"刚刚"}</span>
</div>
</div>
</div>
)
}):"暂无数据":""}
{/* 私信 */}
{noticeType==="1"?letter_unread_list.length>0?letter_unread_list.map(item=>{
return(
<div className="noticeCont-back">
<div className="noticeCont" style={{height:item.content.length>=30 && item.content.length<=34?'65px':""}}>
<Badge color="#FA2020" />
<div className="noticeCont-text">
<span>{item.send_name}</span>
<span className="boldSpan" dangerouslySetInnerHTML={{__html:item.content.length>=50?item.content.substr(0,50)+"...":item.content}}></span>
<span className="timeSpan">{item.create_time?timeAgo(item.create_time):"刚刚"}</span>
</div>
</div>
</div>
)
}):"暂无数据":""}
{/* @我 */}
{noticeType==="2"?at_unread_list.length>0?at_unread_list.map(item=>{
return(
<div className="noticeCont-back">
<div className="noticeCont" style={{height:item.content.length>=30 && item.content.length<=42?'65px':""}}>
<Badge color="#FA2020" />
<div className="noticeCont-text">
{/* <span className="at-name">{item.name}</span> */}
<span dangerouslySetInnerHTML={{__html:item.content.length>=56?item.content.substr(0,56)+"...@我":item.content}}></span>
<span className="timeSpan">{item.create_time?timeAgo(item.create_time):"刚刚"}</span>
</div>
</div>
</div>
)
}):"暂无数据":""}
{/* <div className="noticeCont">
<Badge color="#FA2020" />
{noticeType === "0" ? <i className="iconfont icon-yixiuicon1"></i> : ""}
<div className="text">
<span>蒋宇航</span>
<span className="boldSpan">最好的OpenStack控制台对标Open社区项目Horizon在易...</span>
<span className="timeSpan">4分钟前</span>
</div>
</div>
<div className="noticeCont">
<Badge color="#FA2020" />
{noticeType === "0" ? <i className="iconfont icon-yixiuicon1"></i> : ""}
<div className="text">
<span>蒋宇航</span>
<span className="boldSpan">最好的OpenStack控制台对标Open社区项目Horizon在易...</span>
<span className="timeSpan">4分钟前</span>
</div>
</div>
<div className="noticeCont">
<Badge color="#FA2020" />
{noticeType === "0" ? <i className="iconfont icon-yixiuicon1"></i> : ""}
<div className="text">
<span>蒋宇航</span>
<span className="boldSpan">最好的OpenStack控制台对标Open社区项目Horizon在易...</span>
<span className="timeSpan">4分钟前</span>
</div>
</div>
<div className="noticeCont">
<Badge color="#FA2020" />
{noticeType === "0" ? <i className="iconfont icon-yixiuicon1"></i> : ""}
<div className="text">
<span>蒋宇航</span>
<span className="boldSpan">最好的OpenStack控制台对标Open社区项目Horizon在易...</span>
<span className="timeSpan">4分钟前</span>
</div>
</div> */}
</div>
<div className="hoverNotice-buttom">
<Link to="/settings/notice/myNotice">全部消息</Link>
<a>所有{noticeType==="0"?"系统消息":noticeType==="1"?"私信":"@我"}一键已读</a>
</div>
</div>
</div>
)
}
export default NoticeContent;

View File

@ -141,66 +141,84 @@
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
margin-top: -10px;
}
.hoverNotice-head>.ant-menu-horizontal {
border-bottom: 1px solid #e8e8e8 !important;
padding: 12px 1px 12px 0;
}
.hoverNotice-head .ant-badge{
font-size: 14px !important;
}
.hoverNotice-head{
margin-left: 18px;
& .ant-badge{
font-size: 14px !important;
}
&>.ant-menu-horizontal {
border-bottom: 1px solid #e8e8e8 !important;
}
}
.hoverNotice-body{
height: 342px;
overflow-y: scroll;
& b{
font-weight: 400;
text-shadow: 0.5px 0 0 #333;
}
}
.hoverNotice-buttom{
display: flex;
justify-content: space-between;
margin-top: 12px;
padding: 12px 18px;
a{
color: #466AFF;
}
a:hover{
opacity:0.85;
}
}
.noticeCont-back{
&:hover{
background: #F3F4F6;
}
}
.noticeCont{
display: flex;
padding:12px 10px 10px 0;
margin: 0 16px 0 18px;
padding: 12px 0 10px 0;
line-height: 24px;
border-bottom: 1px solid #EEEEEE;
i{
font-size: 16px !important;
margin-right: 5px;
font-size: 14px !important;
margin-right: 6px;
color: #333333;
}
.text{
.boldSpan{
font-weight: 400;
text-shadow: 0.5px 0 0 #333;
}
.noticeCont-text{
flex: auto;
position: relative;
max-height: 48px;
color:#333333;
.boldSpan{
font-weight: 600;
}
.timeSpan{
position: absolute;
right: 0px;
right: 3px;
bottom: 0px;
font-size: 12px;
color: #666666;
}
}
}
::-webkit-scrollbar {
width: 5px; /*对垂直流动条有效*/
}
/*定义滑块颜色、内阴影及圆角*/
::-webkit-scrollbar-thumb {
border-radius: 6px;
box-shadow: inset 0 0 6px #FFF;
background-color: #D4D4D4;
}
::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px #fff;
background-color: #FFF;
}
.at-name{
margin-right: 12px;
}
}
}

View File

@ -57,16 +57,16 @@ function Index(props){
</div>
<ul className="securityUl ul-border-buttom">
<li>个人信息</li>
<li className={pathname.indexOf("/settings/profile")>-1 ?"active":""}><Link to={`/settings/profile`}><i className="iconfont icon-gerenziliao mr5 font-14"></i>基本资料</Link></li>
<li className={pathname.indexOf("/settings/profile")>-1 ?"active":""}><Link to={`/settings/profile`}><i className="iconfont icon-gerenziliao mr5 font-14"></i><span className="text-shodow-bold">基本资料</span></Link></li>
</ul>
<ul className="securityUl ul-border-buttom">
<li>消息通知</li>
<li className={pathname.indexOf("/settings/notice/myNotice")>-1 || pathname.indexOf("/settings/notice/privateLetter")>-1 ?"active":""}><Link to={`/settings/notice/myNotice`}><i className="iconfont icon-wodetongzhi"></i><span>我的通知</span></Link></li>
<li className={pathname.indexOf("/settings/notice/noticeManager")>-1 ?"active":""}><Link to={`/settings/notice/noticeManager`}><i className="iconfont icon-tongzhiguanli"></i><span>通知管理</span></Link></li>
<li className={pathname.indexOf("/settings/notice/myNotice")>-1 || pathname.indexOf("/settings/notice/privateLetter")>-1 ?"active":""}><Link to={`/settings/notice/myNotice`}><i className="iconfont icon-wodetongzhi"></i><span className="text-shodow-bold">我的通知</span></Link></li>
<li className={pathname.indexOf("/settings/notice/noticeManager")>-1 ?"active":""}><Link to={`/settings/notice/noticeManager`}><i className="iconfont icon-tongzhiguanli"></i><span className="text-shodow-bold">通知管理</span></Link></li>
</ul>
<ul className="securityUl">
<li>安全设置</li>
<li className={pathname.indexOf("/settings/SSH")>-1 ?"active":""}><Link to={`/settings/SSH`}><i className="iconfont icon-xuanzhongssh_icon mr5 font-14"></i><span>SSH密钥</span></Link></li>
<li className={pathname.indexOf("/settings/SSH")>-1 ?"active":""}><Link to={`/settings/SSH`}><i className="iconfont icon-xuanzhongssh_icon mr5 font-14"></i><span className="text-shodow-bold">SSH密钥</span></Link></li>
</ul>
</div>
<LongWidth>

View File

@ -55,8 +55,9 @@
}
&.active a{
color: #333;
span{
font-weight: 600;
.text-shodow-bold{
font-weight: 400;
text-shadow: 0.5px 0 #333;
}
}
&.active::before{
@ -88,16 +89,23 @@
margin-bottom: 15px;
justify-content: space-between;
border-bottom: 1px solid #EEEEEE;
&>span{
&>.text-shadow07{
font-size: 18px;
font-weight: 600;
font-weight: 400;
color: #333333;
text-shadow: 0.5px 0 #333;
}
& .add-ssh-but{
&>.add-SSH-title{
font-size: 16px;
font-weight: 400;
color: #333333;
text-shadow: 0.5px 0 #333;
}
& .but25{
padding:0 12px;
margin-bottom: 5px;
}
}
.ant-list-item{
padding:20px;
border-bottom: 1px solid #eee!important;
@ -129,7 +137,7 @@
.questionLink{
padding:15px 20px;
a{
color: #4B7AFF;
color: #466AFF;
&:hover{
text-decoration: underline;
}
@ -167,4 +175,23 @@
flex:1;
}
}
}
.but25{
margin-bottom: 5px;
background-color: #466AFF;
color: #fff;
border-color: #466AFF;
&:hover{
opacity: 0.8;
background-color: #466AFF;
border-color: #466AFF;
}
&:active{
opacity: 1;
background-color: #466AFF;
border-color: #466AFF;
}
}
.blue-Purple{
color: #466AFF !important;
}

View File

@ -8,7 +8,7 @@ function NoticeManager(props){
return(
<div className="notice01">
<div className="sshHead">
<span>通知管理</span>
<span className="text-shadow07">通知管理</span>
</div>
<div>
<span className="notice-manager-tip">您可以通过通知管理来选择接受通知的方式</span>

View File

@ -24,8 +24,6 @@
.manager-cont-title{
width: 320px;
}
}
.notice01{
@ -57,21 +55,33 @@
background-color:#466AFF;
}
// .ant-radio-checked .ant-radio-inner {
// border-color: #466AFF;
// }
.but25{
background-color: #466AFF;
color: #fff;
border-color: #466AFF;
&:hover{
background-color: #4a76f8;
border-color: #4a76f8;
opacity: 0.8;
background-color: #466AFF;
border-color: #466AFF;
}
&:active{
opacity: 1;
background-color: #466AFF;
border-color: #466AFF;
}
}
::-webkit-scrollbar {
width: 5px; /*对垂直流动条有效*/
}
/*定义滑块颜色、内阴影及圆角*/
::-webkit-scrollbar-thumb {
border-radius: 6px;
box-shadow: inset 0 0 6px #FFF;
background-color: #D4D4D4;
}
::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px #fff;
background-color: #FFF;
}
}

View File

@ -6,8 +6,8 @@ import DelModal from '../../../Wiki/components/ModalFun';
function MyNotice(props) {
const [noticeType, setNoticeType] = useState("1");
const [selectedNum, setSelectedNum] = React.useState(0);
const [noticeType, setNoticeType] = useState("2");
const [selectedNum, setSelectedNum] = useState(0);
const [isBatchDelete, setIsBatchDelete] = useState(false);
function handleClick(e) {
@ -52,16 +52,14 @@ function MyNotice(props) {
<div className="sshHead">
<Menu mode="horizontal" selectedKeys={noticeType} onClick={handleClick}>
<Menu.Item key="0"><Badge count={5}>系统通知</Badge></Menu.Item>
<Menu.Item key="1" id="item"><Badge count={10}>私信</Badge></Menu.Item>
<Menu.Item key="2"><Badge count={99}>@</Badge></Menu.Item>
<Menu.Item key="1" id="item-private"><Badge count={10}>私信</Badge></Menu.Item>
<Menu.Item key="2"><Badge count={999}>@</Badge></Menu.Item>
</Menu>
<button>所有{noticeType==="0"?"系统通知":noticeType==="1"?"私信":"@我"}一键已读</button>
</div>
<div className={isBatchDelete ? "invisible " : "visible"}>
<div className="vertical-center-style">
{/* <input type="checkbox"></input>&nbsp;
仅看未读{noticeType === "1" ? "私信" : "消息"}12 */}
<Checkbox >仅看未读{noticeType === "1" ? "私信" : "消息"}12</Checkbox>
</div>
{noticeType === "2" ? <button onClick={() => { setIsBatchDelete(true); }}>批量删除</button> : ""}
@ -73,21 +71,21 @@ function MyNotice(props) {
全选&nbsp;&nbsp;&nbsp;已选择&nbsp;<span id="numberSpan">{selectedNum}</span>&nbsp;
</div>
<div>
<button onClick={() => { setIsBatchDelete(false); }}>取消</button>&nbsp;&nbsp;&nbsp;&nbsp;
<button className="deleteBut" onClick={selectedNum === 0 ? "" : deleteNotice}>删除</button>
<button onClick={() => { setIsBatchDelete(false);setSelectedNum(0); }}>取消</button>&nbsp;&nbsp;&nbsp;&nbsp;
<button className="deleteBut" onClick={selectedNum>0 ? deleteNotice:()=>{}}>删除</button>
</div>
</div>
{noticeType === "1" ?
<div className="mynotice-content vertical-center-style" onClick={() => props.history.push('/settings/notice/privateLetter')}>
<Badge count={5}><img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /></Badge>
<div className="mynotice-content vertical-center-style">
<Badge count={95}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" class="currentImg private-letter-img"/></Badge>
<div className="private-letter-right">
<div>
<span>蒋宇航</span>
<span className="timeSpan">4分钟前</span>
<a onClick={deleteNotice}>删除</a>
</div>
<div>
<div onClick={() => props.history.push('/settings/notice/privateLetter')}>
<span className="highlightSpan letter-length-limit">最好的OpenStack控制台对标OpenStack社区Horizon项目,最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
</div>
</div>
@ -98,9 +96,9 @@ function MyNotice(props) {
{/* 系统通知 */}
{noticeType === "0" ? <Badge color="#FA2020" /> : ""}
{noticeType === "0" ? <i className="iconfont icon-yixiuicon1"></i> : ""}
{noticeType === "2" ? <img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /> : ""}
{noticeType === "2" ? <Badge color="#FA2020" /> : ""}
<span className={noticeType==="0"?"sysNotice-length highlightSpan":"at-length highlightSpan"}>蒋宇航在<span className="boldSpan">Gitlink/Gitlink</span>新建易修:<span className="boldSpan">Bug链接地址错误</span></span>
{noticeType === "2" ? <img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" class="currentImg"/> : ""}
{/* {noticeType === "2" ? <Badge color="#FA2020" className="at-badge"/> : ""} */}
<span className={noticeType==="0"?"sysNotice-length highlightSpan":"at-length highlightSpan"}>{noticeType === "2" ? <Badge color="#FA2020" className="at-badge"/> : ""}蒋宇航在<span className="boldSpan">Gitlink/Gitlink</span>新建易修:<span className="boldSpan">Bug链接地址错误</span></span>
</div>
<div className="mynotice-cont vertical-center-style">
<span className="timeSpan">4分钟前</span>
@ -110,7 +108,7 @@ function MyNotice(props) {
{noticeType === "1" ?
<div className="mynotice-content vertical-center-style">
<Badge count={5}><img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /></Badge>
<Badge count={599}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" class="currentImg private-letter-img"/></Badge>
<div className="private-letter-right">
<div>
<span>段甲生</span>
@ -128,9 +126,9 @@ function MyNotice(props) {
{/* 系统通知 */}
{noticeType === "0" ? <Badge color="#FA2020" /> : ""}
{noticeType === "0" ? <i className="iconfont icon-hebingqingqiuicon"></i> : ""}
{noticeType === "2" ? <img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /> : ""}
{noticeType === "2" ? <Badge color="#FA2020" /> : ""}
<span className={noticeType==="0"?"sysNotice-length highlightSpan":"at-length highlightSpan"}>蒋宇航在<span className="boldSpan">蒋宇航/软件工程课程协同开发案例</span>指派给你一个合并请求<span className="boldSpan">请进行合并请求test</span>请进行合并请求test请进行合并请求test请进行合并请求test请进行合并请求test请进行合并请求test</span>
{noticeType === "2" ? <img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" class="currentImg"/> : ""}
{/* {noticeType === "2" ? <Badge color="#FA2020" className="at-badge"/> : ""} */}
<span className={noticeType==="0"?"sysNotice-length highlightSpan":"at-length highlightSpan"}>{noticeType === "2" ? <Badge color="#FA2020" className="at-badge"/> : ""}蒋宇航在<span className="boldSpan">蒋宇航/软件工程课程协同开发案例</span>指派给你一个合并请求<span className="boldSpan">请进行合并请求test</span>请进行合并请求test请进行合并请求test请进行合并请求test请进行合并请求test请进行合并请求test</span>
</div>
<div className="mynotice-cont vertical-center-style">
<span className="timeSpan">10分钟前</span>
@ -140,7 +138,7 @@ function MyNotice(props) {
{noticeType === "1" ?
<div className="mynotice-content vertical-center-style">
<Badge count={5}><img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /></Badge>
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" class="currentImg private-letter-img"/></Badge>
<div className="private-letter-right">
<div>
<span>巴拉迪维</span>
@ -158,7 +156,7 @@ function MyNotice(props) {
{/* 系统通知 */}
{noticeType === "0" ? <span>&nbsp;&nbsp;&nbsp;</span> : ""}
{noticeType === "0" ? <i className="iconfont icon-lichengbeiicon"></i> : ""}
{noticeType === "2" ? <img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /> : ""}
{noticeType === "2" ? <img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" class="currentImg"/> : ""}
<span className={noticeType==="0"?"sysNotice-length highlightSpan":"at-length highlightSpan"}>你关注的仓库<span className="boldSpan">王涛/协同案例分析</span>已被删除</span>
</div>
<div className="mynotice-cont vertical-center-style">

View File

@ -14,8 +14,8 @@
position: relative;
}
#item{
margin: 0 34px !important;
#item-private{
margin: 0 24px 0 34px !important;
}
li.ant-menu-item, .ant-menu-horizontal > .ant-menu-item {
@ -24,12 +24,15 @@
.ant-menu-item-selected{
color: #333333 !important;
font-weight: 600;
font-weight: 400;
text-shadow: 0.5px 0 #333;
border-bottom: 2px solid #2A61FF !important;
}
.ant-badge-count, .ant-badge-dot, .ant-badge .ant-scroll-number-custom-component {
right: -4px;
right: -6px;
-webkit-box-shadow: 0 0 0 0;
box-shadow: 0 0 0 0;
}
.ant-badge-multiple-words {
padding: 0 0px;
@ -78,6 +81,7 @@ button:active {
justify-content: space-between;
padding: 15px 0 15px 10px;
border-bottom: 1px solid #EEEEEE;
color: #333333;
&:hover{
background: #F3F4F6;
@ -102,17 +106,42 @@ button:active {
}
.boldSpan{
font-weight: 600;
font-weight: 400;
text-shadow: 0.5px 0 0 #333;
margin: 0 8px;
}
img{
& .currentImg{
width: 40px;
// margin-right: 10px;
height: 40px;
margin-left: 0px;
}
& .private-letter-img + .ant-badge-count{
top: 2px;
right: 5px;
height: 18px;
min-width: 18px;
line-height: 18px;
padding: 0 0;
}
.mynotice-cont{
padding:0;
position: relative;
& .at-badge{
position: absolute;
left: 50px;
}
}
& .ant-badge-count, .ant-badge-dot, .ant-badge .ant-scroll-number-custom-component {
-webkit-box-shadow: 0 0 0 0;
box-shadow: 0 0 0 0;
top: 3px;
right: 4px;
min-width: 8px;
height: 8px;
}
}
@ -135,17 +164,9 @@ button:active {
}
}
.ant-badge-count {
min-width: 16px;
height: 16px;
padding: 0 0;
font-size: 8px;
line-height: 16px;
}
.private-letter-right {
flex: auto;
margin: 0px 10px;
margin: 0px 10px 0 16px;
& div{
display: flex;
justify-content: space-between;
@ -172,6 +193,7 @@ button:active {
.at-length{
max-width: 48rem;
margin-left: 22px;
}
#numberSpan{
color: #466AFF;

View File

@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
import './Index.scss'
import '../manager/Index.scss'
import { Button, Input, Icon, Badge } from 'antd';
import { Link } from 'react-router-dom';
function PrivateLetter(props){
@ -15,12 +16,12 @@ function PrivateLetter(props){
<div className="private-letter notice01">
<div className="pl-content">
<div className="pl-name vertical-center-style">
<a href="/settings/notice/myNotice"><i className="iconfont icon-zuojiantou"></i></a>
<Link to="/settings/notice/myNotice"><i className="iconfont icon-zuojiantou"></i></Link>
<span>蒋宇航</span>
</div>
<div className="plcontent-list">
<div className="vertical-center-style plclo">
<img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
<img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg"/>
<div className="message-bubble mb-other"></div>
<div className="notice-content vertical-center-style">
嗨在吗哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
@ -30,7 +31,7 @@ function PrivateLetter(props){
</div>
<div className="notice-my vertical-center-style plclo">
<img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
<img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg"/>
<div className="message-bubble"></div>
<div className="notice-content vertical-center-style">
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
@ -42,7 +43,7 @@ function PrivateLetter(props){
</div>
<div className="private-letter-present">
<div>
<img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
<img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg"/>
<TextArea className="private-letter-cont" rows="2" />
</div>
<div className="presentNotice">
@ -62,7 +63,124 @@ function PrivateLetter(props){
</div>
<div className="list-scroll">
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /></Badge>
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>
<span className="private-letter-list-content-right-content-top-timeSpan">4分钟前</span>
</div>
<div className="ls-cont vertical-center-style">
<span className="ls-content-span">最好的OpenStack控制台对标OpenStack社区Horizon项目在易用性页面性能等方面进行深度优化提供简单控制台</span>
<a onClick={deleteNotice}>删除</a>
</div>
</div>
</div>
<div className="list-scroll-content vertical-center-style">
<Badge count={5}><img src="https://testforgeplus.trustie.net//system/lets/letter_avatars/2/D/208_124_118/120.png" className="currentImg private-letter-img"/></Badge>
<div className="private-letter-list-content-right">
<div className="ls-cont vertical-center-style">
<span>蒋宇航</span>

View File

@ -2,18 +2,28 @@
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(151, 151, 151, 0.24);
display: flex;
.currentImg{
width: 40px;
height: 40px;
margin-left: 0px;
}
& .private-letter-img + .ant-badge-count{
top: 2px;
right: 5px;
}
}
.pl-content{
flex: auto;
.pl-name{
height: 3rem;
// padding-left: 26px;
border-bottom: 1px solid #EEEEEE;
&>a{
position: relative;
left: 26px;
color:#999999;
}
span{
font-size: 16px;
@ -25,7 +35,7 @@
}
.plcontent-list{
height: 24rem;
padding:25px;
padding:20px;
overflow-y: scroll;
.plclo{
@ -85,7 +95,7 @@
}
}
.private-letter-present{
padding:20px 28px;
padding:20px 20px;
& div{
display: flex;
align-items: center;
@ -95,21 +105,18 @@
.private-letter-cont-mt25{
margin-top: 8px;
padding:0 22px;
// background-color: #2A61FF;
// color: #fff;
// border-color: #2A61FF;
// &:hover,&:focus,&:active{
// background-color: #4a76f8;
// border-color: #4a76f8;
// }
}
.private-letter-cont, .private-letter-cont .ant-input-suffix{
background-color: #F4F4F4 !important;
background-color: #fafafa !important;
margin-left: 17px;
}
.private-letter-cont:hover,.private-letter-cont:focus {
background-color: #F4F4F4 !important;
.private-letter-cont{
resize:none;
&:hover,&:focus{
background-color: #fafafa !important;
}
}
}
}
@ -131,6 +138,10 @@
& .ant-btn{
padding: 0;
}
// & .ant-input:hover{
// border: 1px solid red !important;
// }
}
.list-scroll{
@ -159,7 +170,7 @@
.ls-cont{
width: 13rem;
// flex: auto;
margin-left: 6px;
margin-left: 15px;
justify-content: space-between;
& .ls-content-span{
max-width: 11rem;

View File

@ -34,7 +34,7 @@ function New({ form , showNotification , history }) {
return(
<div>
<div className="sshHead">
<span><Link to={`/settings/SSH`} className="color-blue">SSH密钥</Link><i className="iconfont icon-youjiantou ml5 mr5 font-12"></i>添加SSH密钥</span>
<span className="add-SSH-title"><Link to={`/settings/SSH`} className="blue-Purple">SSH密钥</Link><i className="iconfont icon-youjiantou ml5 mr5 font-12"></i>添加SSH密钥</span>
</div>
<Form className="sshForm">
<Form.Item label="标题" validateStatus={msg && msg.status === 10001 ? "error":undefined} help={msg && msg.status === 10001 ? msg.message:undefined}>
@ -51,7 +51,7 @@ function New({ form , showNotification , history }) {
<TextArea placeholder="支持以'ssh-rsa','ssh-dss','ssh-ed25519','ecdsa-sha2-nistp256','ecdsa-sha2-nistp384','ecdsa-sha2-nistp521'开头" autoSize={{ minRows: 6, maxRows: 6 }}/>
)}
</Form.Item>
<Button type="primary" style={{width:"100px"}} onClick={submit}>确定</Button>
<button style={{width:"100px"}} onClick={submit} className="but25">确定</button>
</Form>
</div>
)

View File

@ -55,8 +55,8 @@ function SSH(props) {
<DeleteBox visible={visible} onCancel={()=>setVisible(false)} onSuccess={onSuccess}/>
<SSHDetail visible={visibleDesc} onCancel={()=>setVisibleDesc(false)} desc={content}/>
<div className="sshHead">
<span>SSH密钥</span>
<Button type="primary" size="large" onClick={()=>props.history.push('/settings/SSH/new')} className="add-ssh-but">添加SSH密钥</Button>
<span className="text-shadow07">SSH密钥</span>
<button type="primary" size="large" onClick={()=>props.history.push('/settings/SSH/new')} className="but25">添加SSH密钥</button>
</div>
{
list && list.length > 0 &&