资源库模块测试版第一次上线
This commit is contained in:
parent
f0858e7ecc
commit
b6dc01b0be
|
|
@ -0,0 +1,47 @@
|
||||||
|
import React , { forwardRef, useEffect } from 'react';
|
||||||
|
import { Modal , Form , Input } from 'antd';
|
||||||
|
|
||||||
|
function AddTag({form , visible , onCancel ,onOk}){
|
||||||
|
const { getFieldDecorator, validateFields , setFieldsValue } = form;
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
setFieldsValue({tagName:undefined})
|
||||||
|
},[visible])
|
||||||
|
|
||||||
|
function submit(){
|
||||||
|
validateFields((error,values)=>{
|
||||||
|
if(!error){
|
||||||
|
onOk(values);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const layout = {
|
||||||
|
labelCol: { span: 5 },
|
||||||
|
wrapperCol: { span: 18 },
|
||||||
|
};
|
||||||
|
return(
|
||||||
|
<Modal
|
||||||
|
title={"新增标签"}
|
||||||
|
closable={false}
|
||||||
|
visible={visible}
|
||||||
|
onCancel={onCancel}
|
||||||
|
onOk={submit}
|
||||||
|
cancelText="取消"
|
||||||
|
okText="确定"
|
||||||
|
width="400px"
|
||||||
|
centered
|
||||||
|
>
|
||||||
|
<Form {...layout}>
|
||||||
|
<Form.Item label="标签名">
|
||||||
|
{getFieldDecorator("tagName",{
|
||||||
|
rules:[{required:true,message:"请输入标签名"}]
|
||||||
|
})(
|
||||||
|
<Input placeholder="请输入标签名" width="200px" autoComplete="off" />
|
||||||
|
)}
|
||||||
|
</Form.Item>
|
||||||
|
</Form>
|
||||||
|
</Modal>
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
export default Form.create()(forwardRef(AddTag));
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import './Index.scss';
|
import './Index.scss';
|
||||||
import { Blueback , FlexAJ } from '../Component/layout';
|
import { AlignCenter, Blueback , FlexAJ } from '../Component/layout';
|
||||||
import { Dropdown, Input , Menu , Pagination, Spin , Popconfirm } from 'antd';
|
import { Dropdown, Input , Menu , Pagination, Spin , Popconfirm, Button } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import UploadSource from './UploadSource';
|
import UploadSource from './UploadSource';
|
||||||
|
import AddTag from './AddTag';
|
||||||
import { getImageUrl } from 'educoder';
|
import { getImageUrl } from 'educoder';
|
||||||
import Nodata from '../Nodata';
|
import Nodata from '../Nodata';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
|
@ -29,6 +30,8 @@ function Index(props){
|
||||||
const [ id , setId ] = useState(undefined);
|
const [ id , setId ] = useState(undefined);
|
||||||
|
|
||||||
const [ visible , setVisible ] = useState(false);
|
const [ visible , setVisible ] = useState(false);
|
||||||
|
const [ addVisible , setAddVisible ] = useState(false);
|
||||||
|
|
||||||
const repo_id = props.projectDetail && props.projectDetail.repo_id;
|
const repo_id = props.projectDetail && props.projectDetail.repo_id;
|
||||||
const owner = props.match.params.owner;
|
const owner = props.match.params.owner;
|
||||||
const current_user = props.current_user;
|
const current_user = props.current_user;
|
||||||
|
|
@ -83,32 +86,52 @@ function Index(props){
|
||||||
</Menu>
|
</Menu>
|
||||||
)
|
)
|
||||||
|
|
||||||
function listmenu(id,attachments){
|
function listmenu(id,attachments,isPublic){
|
||||||
return(
|
return(
|
||||||
<Menu>
|
<Menu>
|
||||||
<Menu.Item onClick={()=>{setId(id);setVisible(true);setAttachments(attachments)}}>更新版本</Menu.Item>
|
<Menu.Item onClick={()=>{setId(id);setVisible(true);setAttachments(attachments)}}>更新版本</Menu.Item>
|
||||||
<Menu.Item>设为私有</Menu.Item>
|
<Menu.Item onClick={()=>changeStatus(id,isPublic===1?0:1)}>{isPublic === 1 ? "设为私有":"设为公开"}</Menu.Item>
|
||||||
<Menu.Item onClick={()=>deleteSourceFunc(id)}>删除资源</Menu.Item>
|
<Menu.Item onClick={()=>deleteSourceFunc(id)}>删除资源</Menu.Item>
|
||||||
</Menu>
|
</Menu>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
// 更细私有状态
|
||||||
// 删除资源方法
|
function changeStatus(id,isPublic){
|
||||||
function deleteSourceFunc(id){
|
const url = https+`/api/project/achievement/updateStatus`;
|
||||||
const url = https + `/api/project/achievement/${id}`;
|
axios.put(url,{
|
||||||
axios.delete(url).then(result=>{
|
id,status:isPublic
|
||||||
if(result && result.data && result.data.code === "1"){
|
}).then(result=>{
|
||||||
props.showNotification("资源删除成功");
|
if(result && result.data){
|
||||||
|
props.showNotification(`资源${isPublic === 1 ? "设为公开":"设为私有"}成功!`);
|
||||||
setIsSpin(true);
|
setIsSpin(true);
|
||||||
getData();
|
getData();
|
||||||
}
|
}
|
||||||
|
}).catch({})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除资源方法
|
||||||
|
function deleteSourceFunc(id){
|
||||||
|
props.confirm({
|
||||||
|
content: "是否确认删除所选资源文件?",
|
||||||
|
onOk: () => {
|
||||||
|
const url = https + `/api/project/achievement/${id}`;
|
||||||
|
axios.delete(url).then(result=>{
|
||||||
|
if(result && result.data && result.data.code === "1"){
|
||||||
|
props.showNotification("资源删除成功");
|
||||||
|
setIsSpin(true);
|
||||||
|
getData();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 上传资源成功
|
// 上传资源成功
|
||||||
function onOk(){
|
function onOk(){
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
|
setIsSpin(true);
|
||||||
getData();
|
getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -126,9 +149,36 @@ function Index(props){
|
||||||
}).then(error=>{})
|
}).then(error=>{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addPanel(id){
|
||||||
|
setAddVisible(true);
|
||||||
|
setId(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onCancelAdd(){
|
||||||
|
setId(undefined);
|
||||||
|
setAddVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加标签
|
||||||
|
function sureAddTag(values){
|
||||||
|
const url = https+`/api/project/achievement/addTag?id=`+id+`&tagName=`+values.tagName;
|
||||||
|
axios.put(url).then(result=>{
|
||||||
|
if(result){
|
||||||
|
setId(undefined);
|
||||||
|
setAddVisible(false);
|
||||||
|
setIsSpin(true);
|
||||||
|
getData();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<div className="sourcePanel">
|
<div className="sourcePanel">
|
||||||
|
<AddTag
|
||||||
|
visible={addVisible}
|
||||||
|
onCancel={onCancelAdd}
|
||||||
|
onOk={sureAddTag}
|
||||||
|
/>
|
||||||
<UploadSource
|
<UploadSource
|
||||||
visible={visible}
|
visible={visible}
|
||||||
onCancel={()=>setVisible(false)}
|
onCancel={()=>setVisible(false)}
|
||||||
|
|
@ -142,8 +192,8 @@ function Index(props){
|
||||||
<div className="headtitle">
|
<div className="headtitle">
|
||||||
<FlexAJ>
|
<FlexAJ>
|
||||||
<span className="font-18">资源库(18)</span>
|
<span className="font-18">资源库(18)</span>
|
||||||
{ current_user && current_user.login &&
|
{ current_user && current_user.login && (props.projectDetail && props.projectDetail.permission) ?
|
||||||
<Blueback onClick={()=>{setId(undefined);setVisible(true);}}>上传资源</Blueback>
|
<Blueback onClick={()=>{setId(undefined);setVisible(true);}}>上传资源</Blueback>:""
|
||||||
}
|
}
|
||||||
</FlexAJ>
|
</FlexAJ>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -171,9 +221,13 @@ function Index(props){
|
||||||
<Link to= {`/users/${item.login}`} className="infoImg"><img src={getImageUrl(`${item.imageUrl}`)} alt="" /></Link>
|
<Link to= {`/users/${item.login}`} className="infoImg"><img src={getImageUrl(`${item.imageUrl}`)} alt="" /></Link>
|
||||||
<div style={{flex:'1',width:"0"}}>
|
<div style={{flex:'1',width:"0"}}>
|
||||||
<FlexAJ>
|
<FlexAJ>
|
||||||
<a href={``} className="infoname">{item.fileName}</a>
|
<AlignCenter>
|
||||||
|
<a href={https+`/busiAttachments/download/${item.attachId}`} download className="infoname">{item.fileName}</a>
|
||||||
|
<a href={https + `/busiAttachments/view/${item.attachId}`}><i className="iconfont icon-shenqinggongkai font-15 ml10 color-grey-9"></i></a>
|
||||||
|
{item.isPublic === 0 && <span className="privateTip">私有</span>}
|
||||||
|
</AlignCenter>
|
||||||
{ current_user && current_user.login &&
|
{ current_user && current_user.login &&
|
||||||
<Dropdown overlay={()=>listmenu(item.id,item.attachments)} placement={'bottomRight'}>
|
<Dropdown overlay={()=>listmenu(item.id,item.attachments,item.isPublic)} placement={'bottomRight'}>
|
||||||
<i className="iconfont icon-gengduo1 color-grey-6"></i>
|
<i className="iconfont icon-gengduo1 color-grey-6"></i>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
}
|
}
|
||||||
|
|
@ -184,24 +238,26 @@ function Index(props){
|
||||||
<span>下载:<span>{item.download}</span></span>
|
<span>下载:<span>{item.download}</span></span>
|
||||||
</p>
|
</p>
|
||||||
<p className="infodesc task-hide-2">{item.remark}</p>
|
<p className="infodesc task-hide-2">{item.remark}</p>
|
||||||
{ item.tags && item.tags.length>0 &&
|
<div className="infotag">
|
||||||
<div className="infotag">
|
{
|
||||||
{
|
item.tags && item.tags.length>0 && item.tags.map((i,k)=>{
|
||||||
item.tags.map((i,k)=>{
|
return(
|
||||||
return(
|
<span>{i}
|
||||||
<span>{i}
|
{
|
||||||
{
|
current_user && (current_user.login === item.login) ?
|
||||||
current_user && (current_user.login === item.login) ?
|
<Popconfirm title="确定要删除当前标签?" onConfirm={()=>removeTagFunc(item.id,i)} okText="是" cancelText="否">
|
||||||
<Popconfirm title="确定要删除当前标签?" onConfirm={()=>removeTagFunc(item.id,i)} okText="是" cancelText="否">
|
<i className="iconfont icon-guanbi font-12 ml2"></i>
|
||||||
<i className="iconfont icon-guanbi font-12 ml2"></i>
|
</Popconfirm>:""
|
||||||
</Popconfirm>:""
|
}
|
||||||
}
|
</span>
|
||||||
</span>
|
)
|
||||||
)
|
})
|
||||||
})
|
}
|
||||||
}
|
{
|
||||||
</div>
|
current_user && (current_user.login === item.login) &&
|
||||||
}
|
<a className="color-blue font-12" onClick={()=>addPanel(item.id)} style={{height:"20px",lineHeight:"20px"}}>+新增标签</a>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@
|
||||||
.infoname{
|
.infoname{
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
.privateTip{
|
||||||
|
display: block;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-left: 10px;
|
||||||
|
background-color: orange;
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
padding:0px 3px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
.infos{
|
.infos{
|
||||||
& > span{
|
& > span{
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,6 @@ import { AlignCenter } from '../Component/layout';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
|
|
||||||
const data = [
|
|
||||||
{name:"sdfkjsfj.pdf",loadNum:"10",citeNum:"15",time:"2021-04-01 10:45"},
|
|
||||||
{name:"sdfkjsfj.pdf",loadNum:"10",citeNum:"15",time:"2021-04-01 10:45"},
|
|
||||||
{name:"sdfkjsfj.pdf",loadNum:"10",citeNum:"15",time:"2021-04-01 10:45"}
|
|
||||||
]
|
|
||||||
const https = 'https://testfiles.trustie.net';
|
const https = 'https://testfiles.trustie.net';
|
||||||
function UploadSource({ form , visible , onCancel , onOk , showNotification , attachments , id ,owner,projectsId}){
|
function UploadSource({ form , visible , onCancel , onOk , showNotification , attachments , id ,owner,projectsId}){
|
||||||
const [ tableData , setTableData ] = useState(undefined);
|
const [ tableData , setTableData ] = useState(undefined);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue