Merge branch 'gitlink_server' into new_final

This commit is contained in:
namezlx 2023-09-25 08:56:51 +08:00
commit 72d28f49e4
18 changed files with 148 additions and 87 deletions

View File

@ -23,7 +23,7 @@ function MyEditor(props) {
const toolbarConfig = {};
//
toolbarConfig.excludeKeys = [
'todo'
'todo', "fullScreen"
]
//

View File

@ -364,13 +364,14 @@ class NewHeader extends Component {
onMouseOut={ () => { this.setState( {showSubMenu: false }) } }
>
<a onClick={ () => { this.setState( {showSubMenu: true }) } }>特色专区</a>
<ul className={ `drop-down ${ showSubMenu ? 'drop-down-show' : '' }` } style={{ height : showSubMenu ? `${ current_user && current_user.login ? ((zoneList.length+1) * 46) : (zoneList.length * 46)}px` : 0 }}>
{/* 放开申请创建专区 需要修改height 登录状态length+1 */}
<ul className={ `drop-down ${ showSubMenu ? 'drop-down-show' : '' }` } style={{ height : showSubMenu ? `${ current_user && current_user.login ? ((zoneList.length) * 46) : (zoneList.length * 46)}px` : 0 }}>
{
zoneList.map((e, k) => {
return <li className="drop-down-item" key={ k }><a href={ e.link } className="task-hide" title={ e.name } target="_blank">{ e.name }</a></li>
})
}
{current_user && current_user.login && <li className="drop-down-item"><Link to="/zone/apply" target="_blank">+申请创建</Link></li> }
{/* {current_user && current_user.login && <li className="drop-down-item"><Link to="/zone/apply" target="_blank">+申请创建</Link></li> } */}
</ul>
</li>
}

View File

@ -2,17 +2,23 @@ import React, { useEffect } from 'react';
import { Form , Input , Row , Col, Button } from 'antd';
import '../index.scss';
import { postCreateZone } from '../api';
import cookie from 'react-cookies';
const { TextArea } = Input;
const phonereg = /^([1][3456789])\d{9}$/
function Apply(props){
const { form } = props;
const { form , current_user } = props;
const { getFieldDecorator , validateFields } = form;
console.log(props);
useEffect(()=>{
document.title = '申请创建专区';
},[])
useEffect(()=>{
if(!(current_user && current_user.login)){
props.history.push("/403");
}
},[current_user])
function submitFunc(){
validateFields((error,values)=>{
if(!error){
@ -22,7 +28,7 @@ console.log(props);
props.showNotification("提交成功!");
setTimeout(() => {
window.location.href="/";
}, 200);
}, 70);
}
}).catch(error=>{})
}
@ -39,13 +45,6 @@ console.log(props);
callback();
}
// function checkIndentity(rule, value, callback){
// if(value && !idenReg.test(value)){
// callback("2-20线线");
// }
// callback();
// }
return(
<div className="applyBox">

View File

@ -16,20 +16,6 @@ import Slider from 'react-slick';
import Left from '../../../home/Img/left.png';
import Right from '../../../home/Img/right.png';
const setting = {
dots: true,
infinite: true,
speed: 2000,
slidesToShow: 1,
slidesToScroll: 1,
pauseOnDotsHover: true,
autoplaySpeed: 5000,
pauseOnFocus: true,
autoplay: true,
arrows: true,
prevArrow: <img className='slick-prev slick-arrow' src={Left} width="70px" alt="" />,
nextArrow: <img className='slick-prev slick-arrow' src={Right} width="70px" alt="" />
}
function HeaderPageCCF(props) {
const [projectList, setProjectList] = useState(undefined);
@ -39,6 +25,22 @@ function HeaderPageCCF(props) {
const { deptId, cateId } = props.match.params;
const { data, id, temp } = props;
const [mainList, setMainList] = useState(undefined);
const [tag,setTag] = useState(0);
const setting = {
dots: true,
infinite: true,
speed: 2000,
slidesToShow: 1,
slidesToScroll: 1,
pauseOnDotsHover: true,
autoplaySpeed: 5000,
pauseOnFocus: true,
autoplay: true,
arrows: true,
prevArrow: <img className='slick-prev slick-arrow' src={Left} width="70px" alt="" />,
nextArrow: <img className='slick-prev slick-arrow' src={Right} width="70px" alt="" />,
afterChange: (index)=> setTag(index)
}
useEffect(() => {
if (id||cateId) {
@ -140,7 +142,7 @@ function HeaderPageCCF(props) {
newsList.map((i, k) => {
return (
<li key={k} style={{boxShadow:"0px 0px 20px rgba(35, 54, 185, 0.06)"}}>
<Link className="zone_n_title" to={`/zone/${deptId}/newdetail/${i.id}`}>{i.name}</Link>
<Link className="zone_n_title" to={`/zone/${deptId}/newdetail/${i.id}`} style={{color:k===tag?"#466aff":""}} >{i.name}</Link>
<p className="zone_n_value">
<span className="font-15" style={{ color: "#8d95a3" }}>
<img src={shijian} alt="" className="mr3 photo" />
@ -165,7 +167,7 @@ function HeaderPageCCF(props) {
<p className="font-17">
<img src={xuexi} alt="" className="mr10"></img>
{i.name}
<i className="iconfont icon-youhua font-12 lg lh26 icontianjiadaohangcolors you " onClick={()=>{window.location.href=`/zone/${deptId}/news/${i.id}`}}></i></p>
<Link to={`/zone/${deptId}/news/${i.id}`}><i className="iconfont icon-youhua font-12 lg lh26 icontianjiadaohangcolors you " ></i></Link></p>
{
i.cmsDocList && i.cmsDocList.length > 0 ?
i.cmsDocList.map((j, k) => {
@ -243,23 +245,29 @@ function HeaderPageCCF(props) {
//
data && data.memberShow === 1 && personList && personList.length > 0 &&
<div className={`zone_contributor boxmain ${temp}_VIP_box`}>
<p className="in_title">{data.homepageMemberTitle}</p>
<MemberList vipLists={personList} temp={temp}/>
{/* {
<ul className="boxmain zone_c_lists">
<p className="in_title mb50">{data.homepageMemberTitle}</p>
{/* <MemberList vipLists={personList} temp={temp}/> */}
{personList && personList.map(item=>{
return <div>
<p className='font-18'>{item.typeName}</p>
<ul className="boxmain zone_c_lists mt20">
{
personList.map((i, k) => {
item.zoneMemberList.map((i, k) => {
return (
<li key={k}>
<Link to={`/${i.login}`}><img src={i.imageUrl} alt="" /></Link>
<span>{i.name}</span>
<div className='mb10'>
<span>{i.name}</span>
{i.memberLevel && <span className="memberLevel_tag ml10">{i.memberLevel}</span> }
</div>
<p className="task-hide-2" style={{ display: i.introduction ? "" : "flex" }}>{i.introduction || "暂无~"}</p>
</li>
)
})
}
</ul>
} */}
</div>
})}
</div>
}

View File

@ -122,14 +122,14 @@ function Main(props){
<div className="boxmain">
<div className='titleButBox'>
<p className="in_title">{tempConfig[temp].mainTitle}</p>
{role && role.role !== "None" && <div className='createButs'>
{/* {role && role.role !== "None" && <div className='createButs mt10'>
{role.role === "Member" && <Button type="primary" ghost className='mr20'>
<Link to={`/zone/${deptId}/news/self`}>我的文章</Link>
</Button>}
{role.role === "Member" ? <Dropdown overlay={menu}>
<Button icon='plus' type="primary" ghost>新建</Button>
</Dropdown> : <Button type="primary" ghost onClick={()=>{window.open(role.docManageUrl)}}>管理资讯</Button>}
</div>}
</div>} */}
</div>
{
mainList && mainList.length>0 &&

View File

@ -90,22 +90,26 @@ function NewsCreate(props){
const {data:{code, msg}} = res;
setLoading(false);
if(code === 200){
message.success("更新成功");
history.push(`/zone/${deptId}/news/self`);
message.success("提交成功");
history.push(`/zone/${deptId}/newdetail/${newsId}`);
}else{
message.error(msg || '更新失败,请联系管理员!')
message.error(msg || '提交失败,请联系管理员!')
}
}).catch(e=>{
setLoading(false);
})
}
addNewsByDirId(fieldsValue.dirId, params).then(res=>{
const {data:{code, msg}} = res;
const {data:{code, msg, data}} = res;
setLoading(false);
if(code === 200){
message.success("新增成功");
history.push(`/zone/${deptId}/news/self`);
message.success("提交成功");
history.push(`/zone/${deptId}/newdetail/${data}`);
}else{
message.error(msg || '新增失败,请联系管理员!')
message.error(msg || '提交失败,请联系管理员!')
}
}).catch(e=>{
setLoading(false);
})
})
}
@ -153,7 +157,7 @@ function NewsCreate(props){
type === "richEditor" ? <RichEditor uploadUrl={`${httpUrl}/file/common/upload`} videoUploadUrl={`${httpUrl}/file/common/upload?type=cms`} setValue={(value)=>{setFieldsValue({"content": value})}}/> : <MdEditor
placeholder={"请输入详细介绍"}
height={500}
mdID={"order-new-description"}
className='editNewsMd'
initValue={value}
onChange={(value)=>{setFieldsValue({"content": value})}}
imageExpand={false}

View File

@ -1,5 +1,5 @@
import React,{ useState , useEffect } from 'react';
import { Breadcrumb , Divider, Spin } from 'antd';
import { Badge, Breadcrumb , Divider, Spin } from 'antd';
import liulan from '../img/liulan.png';
import RenderHtml from '../../../components/render-html';
import { Base64 } from 'js-base64';
@ -107,7 +107,9 @@ function NewsDetail(props){
<ul className="i_ul_value">
{ cmsDir && <li><a href={ detail.publishUserUrl } ><img src={ detail.publishUserImage } alt="" className="headimg" /> { detail.publishUserNickname }</a></li> }
{ cmsDir && <li>{ detail.isFirstPublish ? '创建于' : '更新于' }{detail.publishTime}</li> }
{ detail.visits && <li><img src={liulan} alt="" className="mr5" />{detail.visits}</li> }
{ !!detail.visits && <li><img src={liulan} alt="" className="mr5" />{detail.visits}</li> }
{ detail.auditStatus === '2' && <li><Badge color={temp === "zone" ? "#466aff" : "#089f7f"} text="待审核" className='pass'/></li>}
{ detail.auditStatus === '0' && <li><Badge color="#eb1212" text="未通过" className='failed'/></li>}
</ul>
</div>
{ !IsPC() && <Divider dashed={true} /> }

View File

@ -4,6 +4,8 @@ import { Link } from 'react-router-dom';
import { getNewsMyList , getSourceMyList , delNewsMyList , delSourceMyList } from '../api';
import moment from 'moment';
import nodata from '../img/nodata.png';
import { tempEnum } from '../tempInfo';
import emptydata from '../../Images/nodata.png';
import '../index.scss';
@ -19,22 +21,35 @@ function SelfList(props){
const [ deleId , setDeleId] = useState(undefined);
const pathname = props.location.pathname;
const { deptId} = props.match.params;
const { id , temp } = props;
const { id , temp , data } = props;
const limit = 15;
useEffect(()=>{
if(id){
setIsSpin(true);
if(source===true){
getSource();
}
if(source===false){
getNew();
}
getFunc(source);
}
},[status, page , id,source])
},[id,source,page])
useEffect(()=>{
if(page===1){
setIsSpin(true);
getFunc(source);
}else{
setPage(1);
}
},[status])
function getFunc(s){
if(s===true){
getSource();
}
if(s===false){
getNew();
}
}
useEffect(()=>{
if(pathname){
if(pathname.indexOf("/source/self")>-1){
@ -85,8 +100,7 @@ function SelfList(props){
delNewsMyList(deleId).then(response=>{
setVisible(false);
if(status ===1){
props.history.push(`/zone/${deptId}/newdetail/${deleId}`);
props.showNotification("已提交删除申请,待管理员审核通过后改文章将被删除");
props.showNotification("提交成功!");
}else{
props.showNotification("删除成功!");
getNew();
@ -109,16 +123,16 @@ function SelfList(props){
<i className="iconfont icon-shanchu_tc_icon font-22 mr15" style={{color:"#ca0002"}}></i>
<div>
<p className="font-15 mb15 mt5" style={{color:"#202d40"}}>确定删除该{source?"资源":"文章"}?</p>
{(source || (!source && status === 1)) && <p style={{color:"#5f6872"}}>{source?"删除后所有资源文件将被清除,请谨慎操作":"此操作将提交删除申请,管理员同意申请后该文章将被删除"}</p> }
{(source || (!source && status === 1 && (data && data.docNeedAudit===1))) && <p style={{color:"#5f6872"}}>{source?"删除后所有资源文件将被清除,请谨慎操作":"此操作将提交删除申请,管理员同意申请后该文章将被删除"}</p> }
</div>
</div>
<div className="delBoxBtn">
<Button onClick={cancelFunc}>取消</Button>
<Button type="primary" onClick={sureFunc} style={{backgroundColor:"#fff",color:"#466aff"}}>确认</Button>
<Button onClick={cancelFunc} style={{borderColor:"#d9d9d9",color:"rgba(0, 0, 0, 0.65)"}}>取消</Button>
<Button type="primary" onClick={sureFunc} style={{backgroundColor:"#fff"}}>确认</Button>
</div>
</Modal>
<Breadcrumb separator=">" style={{paddingTop:"20px"}}>
<Breadcrumb.Item><Link className="primaryColor" to={pathname.replace("/self","")}>{source ? "资源发布": temp==="zone1" ? "新闻资讯":"领域资讯"}</Link></Breadcrumb.Item>
<Breadcrumb.Item><Link className="primaryColor" to={pathname.replace("/self","")}>{source ? "资源发布": temp === tempEnum.zone1 ? "新闻资讯":"领域资讯"}</Link></Breadcrumb.Item>
<Breadcrumb.Item>我的{source ? "资源":"文章"}</Breadcrumb.Item>
</Breadcrumb>
<ul className="selfMenu">
@ -132,7 +146,7 @@ function SelfList(props){
{
list && list.length === 0 &&
<div style={{display:"flex",justifyContent:"center",alignItems:"center",flexDirection:"column",height:500}}>
<img src={ nodata } alt="" width="300"/>
<img src={ temp === tempEnum.zone1 ? nodata : emptydata } alt="" width="300"/>
<p className="font-15 color-grey-6 mt20">暂无数据~</p>
</div>
}

View File

@ -91,12 +91,12 @@ function Source(props){
allowClear
enterButton={temp === "zone" ? <span><i className="iconfont icon-sousuo5 font-15"/>搜索</span> :undefined}
/>
{role && role.role !== "None" && <div className='createButs'>
{/* {role && role.role !== "None" && <div className='createButs'>
{role.role === "Member" && <Button size='large' type="primary" ghost className='mr20'>
<Link to={`/zone/${deptId}/source/self`}>我的资源</Link>
</Button>}
<Button size='large' icon={role.role === "Member" && 'plus'} type="primary" ghost onClick={addSource}>{role.role === "Member" ? '新建' : '管理资源'}</Button>
</div>}
</div>} */}
</div>
</div>
<div className="sources">

View File

@ -68,7 +68,7 @@ function SourceCreate(props){
}).catch(error=>{})
}
//
// /
function submit(e){
e.preventDefault();
validateFields((err, fieldsValue)=>{
@ -89,21 +89,21 @@ function SourceCreate(props){
updateMyResource(params).then((res)=>{
const {data:{code, msg}} = res;
if(code === 200){
message.success("编辑成功");
history.push(`/zone/${deptId}/source/self`);
message.success("提交成功");
history.push(`/zone/${deptId}/source/${sourceid}`);
}else{
message.error(msg || '编辑失败,请联系管理员!')
message.error(msg || '提交失败,请联系管理员!')
}
})
return;
}
addResource(params).then((res)=>{
const {data:{code, msg}} = res;
const {data:{code, msg, data}} = res;
if(code === 200){
message.success("新增成功");
history.push(`/zone/${deptId}/source/self`);
message.success("提交成功");
history.push(`/zone/${deptId}/source/${data.id}`);
}else{
message.error(msg || '新增失败,请联系管理员!')
message.error(msg || '提交失败,请联系管理员!')
}
})
})
@ -203,8 +203,8 @@ function SourceCreate(props){
{getFieldDecorator("fileList", {
rules:[{ required:true,message:"请上传资源附件!" }]
})(
<Upload action={getZoneUrl(`/api/file/common/upload?type=resource`)} showUploadList={false} beforeUpload={beforeUpload} onChange={onChange} withCredentials={true}>
<Button>
<Upload action={getZoneUrl(`/api/file/common/upload?type=resource`)} showUploadList={false} beforeUpload={beforeUpload} onChange={onChange} withCredentials={true} headers={{Authorization: "3e33a5b0a35824f93666b1084488f0bd5f010025"}}>
<Button className='hoverThemeColorBut'>
<Icon type="upload" />单击上传
</Button>
</Upload>

View File

@ -1,11 +1,8 @@
import React , { useEffect , useState } from 'react';
import { Breadcrumb } from 'antd';
import { Badge, Breadcrumb } from 'antd';
import SourceFile from '../img/sourceFile.png';
import RenderHtml from '../../../components/render-html';
import { getSourceDetail } from '../api';
import { Link } from 'react-router-dom';
import axios from 'axios';
import { Base64 } from 'js-base64';
import { httpUrl } from '../fetch';
import { AlignCenter, FlexAJ } from '../../Component/layout';
import SourceIcon from '../img/sourceIcon.png';
@ -16,6 +13,7 @@ function SourceDetail(props){
const { deptId , sourceid } = props.match.params;
const [ detail , setDetail ] = useState(undefined);
const zonedetail = props.data;
const {temp} = props;
useEffect(()=>{
if(sourceid){
@ -69,7 +67,9 @@ function SourceDetail(props){
</FlexAJ>
{detail.createUser && detail.createUser.avatar && <Link to={`/${detail.createUser.userName}`}><img alt='' src={detail.createUser.avatar} className='publicUserAvatar mr10'/></Link>}
{detail.createUser && <Link className='mr20' to={`/${detail.createUser.userName}`}>{detail.createUser.nickName}</Link>}
<span>发布于{detail.updateTime || detail.createTime}</span>
<span className='mr20'>发布于{detail.updateTime || detail.createTime}</span>
{detail.auditStatus === '0' && <Badge color={temp === "zone" ? "#466aff" : "#089f7f"} text="待审核" className='pass'/> }
{detail.auditStatus === '2' && <Badge color="#eb1212" text="未通过" className='failed'/> }
</div>
<div className='pb20'>{detail.summary}</div>
{

View File

@ -172,6 +172,8 @@ export function delSourceMyList(id){
export function postCreateZone(data) {
return fetch({
url: `/zone/application`,
method: 'post',
data: data
})
}

View File

@ -7,7 +7,7 @@ function beforeFetch(actionUrl){
}
const service = axios.create({
headers:{Authorization:"0cd46d63363af9205eb7ccecff574309ce069a97"},
headers:{Authorization:"fb55fcaae60bb0c341078dade4b37c965e285394"},
baseURL: actionUrl,
timeout: 1800000, // 请求超时时间
});

View File

@ -159,7 +159,7 @@ function Index(props){
<Route
path="/zone/:deptId/news/self"
render={(p) => (
<SourceSelfList {...props} {...p} id={id} temp={ temp }/>
<SourceSelfList {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route
@ -189,7 +189,7 @@ function Index(props){
<Route
path="/zone/:deptId/source/self"
render={(p) => (
<SourceSelfList {...props} {...p} id={id} temp={ temp }/>
<SourceSelfList {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route

View File

@ -28,6 +28,12 @@
background-color: var(--primary-color);
}
}
.hoverThemeColorBut{
&:hover, &:active, &:focus{
border-color: var(--light-color);
color: var(--light-color);
}
}
.information_main{
background-color:#f3f5f8;
@ -568,7 +574,7 @@
align-items: center;
height: 20px;
overflow: visible;
color: #466aff;
color: var(--primary-color);
}
.headimg {
width: 26px;
@ -1547,7 +1553,7 @@
button{
border-color: var(--primary-color);
color: var(--primary-color);
&:hover{
&:hover, &:active, &:focus{
border-color: var(--light-color);
color: var(--light-color);
}
@ -1562,6 +1568,12 @@
padding: 30px 35px 50px;
}
}
.editNewsMd .editormd-dialog-header{
padding: 5px 20px;
}
.editNewsMd .number-input{
width: 60px !important;
}
// 新增资源
.sourceCreateBox{
.sourceFilesBox{
@ -1580,6 +1592,13 @@
color: var(--primary-color)!important;
}
.failed .ant-badge-status-text{
color: #eb1212;
}
.pass .ant-badge-status-text{
color: var(--primary-color);
}
// --------------新建专区
.applyBox{
background-color: #fff;
@ -1723,6 +1742,10 @@
.ant-btn{
width: 95px;
margin:0px 20px;
&.ant-btn-primary{
color: var(--primary-color);
border-color: var(--primary-color);
}
}
}
}

View File

@ -258,4 +258,12 @@
font-size: 32px;
text-align: center;
margin-top: 40px;
}
.memberLevel_tag{
padding: 0px 5px;
line-height: 25px;
display: inline-block;
border: 1px solid var(--primary-color);
color: var(--primary-color);
}

View File

@ -60,7 +60,7 @@ function MySiteList(props){
<div className="siteBox">
<i className="iconfont icon-cangkuyuyanicon font-16 mr5 color-grey-6"></i>
{state && build_state ? <a className={`font-16 siteName`} onClick={()=>{window.open(url)}}>{item.site_name}</a> : <span className={`font-16`}>{item.site_name}</span>}
<span className={`statusBot ml20 font-12 ${state ? build_state ? "public" : "private" : "error"}`}>{state ? build_state ? "已部署" : "未部署" : '被关闭'}</span>
<span className={`statusBot ml20 font-12 ${state ? build_state!== null ? build_state ? "public" : "error" : "private" : "error"}`}>{state ? build_state!== null ? build_state ? "已部署" : "部署失败" : "未部署" : '被关闭'}</span>
<div className="color-grey-6 mt8">
<span className="">主题</span> {item.theme}
<span className="ml5 mr5 color-grey-ccc">|</span>

View File

@ -30,11 +30,11 @@ function UploadImage({ getImage , url, getImageId, maxSize = 2, action = getUplo
if (!isLt2M) {
message.error(`上传的图片不能超过${maxSize}MB!`);
}
isJpgOrPng && isLt2M && setLoading(true);
return isJpgOrPng && isLt2M;
}
//
function handleChange(info){
setLoading(true);
if(info && info.file && info.file.status === "done"){
setLoading(false);
getImageId && getImageId(info.file.response.id);