合并资源库

This commit is contained in:
caishi 2021-04-02 17:31:15 +08:00
parent 2fcd2fd066
commit b9a8becec3
3 changed files with 201 additions and 76 deletions

View File

@ -4,6 +4,7 @@ import { Blueback , FlexAJ } from '../Component/layout';
import { Dropdown, Input , Menu , Pagination } from 'antd'; import { Dropdown, Input , Menu , Pagination } from 'antd';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import UploadSource from './UploadSource'; import UploadSource from './UploadSource';
import { getImageUrl } from 'educoder';
import axios from 'axios'; import axios from 'axios';
const { Search } = Input; const { Search } = Input;
@ -19,6 +20,7 @@ function Index(props){
const [ page , setPage ] = useState(1); const [ page , setPage ] = useState(1);
const [ total , setTotal ] = useState(0); const [ total , setTotal ] = useState(0);
const [ search , setSearch ] = useState(undefined); const [ search , setSearch ] = useState(undefined);
const [ data , setData ] = useState(undefined);
const [ visible , setVisible ] = useState(false); const [ visible , setVisible ] = useState(false);
const repo_id = props.projectDetail && props.projectDetail.repo_id; const repo_id = props.projectDetail && props.projectDetail.repo_id;
@ -42,7 +44,8 @@ function Index(props){
} }
}).then(result=>{ }).then(result=>{
if(result && result.data){ if(result && result.data){
setData(result.data.data.rows);
setTotal(result.data.data.total);
} }
}).catch(error=>{}) }).catch(error=>{})
} }
@ -54,7 +57,6 @@ function Index(props){
// //
function changeSort(e,index){ function changeSort(e,index){
console.log(index);
setSortValue(index); setSortValue(index);
} }
@ -79,9 +81,9 @@ function Index(props){
</Menu> </Menu>
) )
// //
function onOk(){ function onOk(){
getData();
} }
// //
@ -91,7 +93,14 @@ function Index(props){
return( return(
<div className="sourcePanel"> <div className="sourcePanel">
<UploadSource visible={visible} onCancel={()=>setVisible(false)} onOk={onOk} showNotification={props.showNotification}/> <UploadSource
visible={visible}
onCancel={()=>setVisible(false)}
onOk={onOk}
showNotification={props.showNotification}
owner={owner}
projectsId={repo_id}
/>
<div className="headtitle"> <div className="headtitle">
<FlexAJ> <FlexAJ>
<span className="font-18">资源库(18)</span> <span className="font-18">资源库(18)</span>
@ -112,27 +121,40 @@ function Index(props){
</FlexAJ> </FlexAJ>
<div className="bodycontent"> <div className="bodycontent">
<ul className="bodycontentul"> <ul className="bodycontentul">
<li> {
<Link to= {`/users/`} className="infoImg"><img src={`https://testforgeplus.trustie.net/images/avatars/User/b`} alt="" /></Link> data && data.length> 0 && data.map((item,key)=>{
<div style={{flex:'1',width:"0"}}> return(
<FlexAJ> <li>
<a href={``} className="infoname">DaVinci.fdb</a> <Link to= {`/users/${item.login}`} className="infoImg"><img src={getImageUrl(`${item.imageUrl}`)} alt="" /></Link>
<Dropdown overlay={listmenu} placement={'bottomRight'}> <div style={{flex:'1',width:"0"}}>
<i className="iconfont icon-gengduo1 color-grey-6"></i> <FlexAJ>
</Dropdown> <a href={``} className="infoname">{item.fileName}</a>
</FlexAJ> <Dropdown overlay={listmenu} placement={'bottomRight'}>
<p className="infos"> <i className="iconfont icon-gengduo1 color-grey-6"></i>
<span>上传时间<span>2021-03-30</span></span> </Dropdown>
<span>上传类型<span>软件版本</span></span> </FlexAJ>
<span>文件大小<span>10KB</span></span> <p className="infos">
<span>下载<span>111</span></span> <span>上传时间<span>{item.uploadTime}</span></span>
</p> <span>文件大小<span>{item.fileSize}</span></span>
<p className="infodesc task-hide-2">资源描述资源描述资源描述资源描述资源描述资源描述资源描述</p> <span>下载<span>{item.download}</span></span>
<div className="infotag"> </p>
<span>软件版本<i className="iconfont icon-guanbi font-12 ml2" onClick={removeTagFunc}></i></span> <p className="infodesc task-hide-2">{item.remark}</p>
</div> { item.tags && item.tags.length>0 &&
</div> <div className="infotag">
</li> {
item.tags.map((i,k)=>{
return(
<span>{i}<i className="iconfont icon-guanbi font-12 ml2" onClick={removeTagFunc}></i></span>
)
})
}
</div>
}
</div>
</li>
)
})
}
</ul> </ul>
{ {
total > limit && total > limit &&

View File

@ -1,14 +1,15 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Upload, Icon , Button } from 'antd'; import { Upload, Button } from 'antd';
import { appendFileSizeToUploadFileAll } from 'educoder'; import { appendFileSizeToUploadFileAll } from 'educoder';
import axios from 'axios'; import axios from 'axios';
const { Dragger } = Upload; function Uploads({ className , size , actionUrl,fileList,showNotification , load}) {
function Upload({isComplete, icon , btn , className , size , actionUrl,fileList}) {
const [ files , setFiles ] = useState(undefined); const [ files , setFiles ] = useState(undefined);
useEffect(()=>{ useEffect(()=>{
init(); if(fileList){
init();
}
},[fileList]); },[fileList]);
function init(){ function init(){
@ -22,14 +23,12 @@ function Upload({isComplete, icon , btn , className , size , actionUrl,fileList}
} }
} }
function deleteAttachment(file){ function deleteAttachment(file){
const url = `/attachments/${file.response ? file.response.id : file.uid}.json` let id = file.response && file.response.data && file.response.data.id;
axios.delete(url, { const url = actionUrl + `/busiAttachments/${id}`;
}).then((response) => { axios.delete(url).then((response) => {
if (response.data) { if (response.data) {
if (response.data.status === 0) { if (response.data.code === "1") {
let index = files.indexOf(file); let nf = files.filter(item=>item.response.data.id !== id);
let newFileList = files.slice();
let nf = newFileList.splice(index, 1);
setFiles(nf); setFiles(nf);
fileIdList(nf); fileIdList(nf);
} else { } else {
@ -45,18 +44,15 @@ function Upload({isComplete, icon , btn , className , size , actionUrl,fileList}
function handleChange (info) { function handleChange (info) {
if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') { if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') {
let fileList = info.fileList; let fileList = info.fileList;
let len = info.fileList && info.fileList.length;
setFiles(appendFileSizeToUploadFileAll(fileList)); setFiles(appendFileSizeToUploadFileAll([fileList[len-1]]));
fileIdList(fileList); fileIdList(fileList[len-1]);
} }
} }
function fileIdList (fileList) { function fileIdList (fileList) {
let array = []; let data = fileList.response && fileList.response.data;
fileList && fileList.length > 0 && fileList.map((item) => { fileList && load && load(data && data.id,data && data.fileName);
return array.push(item.response && (item.response.id || (item.response.data && item.response.data.id)));
})
array && load && load(array);
} }
function beforeUpload(file){ function beforeUpload(file){
@ -67,29 +63,20 @@ function Upload({isComplete, icon , btn , className , size , actionUrl,fileList}
return isLt100M; return isLt100M;
} }
// const upload = {
name: 'file',
const upload = { fileList: files,
name: 'file', action: actionUrl+`/busiAttachments/upload`,
fileList: files, onChange:handleChange,
action: actionUrl, onRemove:onAttachmentRemove,
onChange:handleChange, beforeUpload:beforeUpload,
onRemove:onAttachmentRemove, maxCount:1
beforeUpload:beforeUpload };
}; return (
<Upload {...upload} className={className}>
return ( <Button type={"default"}>上传文件</Button>
btn ? <span className="ml10 color-grey-9">(你可以上传小于<span className="color-red">{size}MB</span>的文件)</span>
<Upload {...upload} className={className}> </Upload>
<Button type={"default"}>上传文件</Button> )
<span className="ml10 color-grey-9">(你可以上传小于<span className="color-red">{size}MB</span>的文件)</span>
</Upload>
:
<Dragger {...upload} className={className}>
{icon || <Icon type="inbox" />}
<p className="ant-upload-text font-14">拖动文件或<span className="color-blue">点击此处上传</span></p>
</Dragger>
)
}
} }
export default Upload; export default Uploads;

View File

@ -1,22 +1,138 @@
import React from 'react'; import React , { forwardRef, useEffect, useState } from 'react';
import { Modal } from 'antd'; import { Modal , Form , Checkbox , Input , Table } from 'antd';
import Upload from './Upload';
import { AlignCenter } from '../Component/layout';
import axios from 'axios';
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';
function UploadSource({ form , visible , onCancel , onOk , showNotification ,owner,projectsId}){
const [ tableData , setTableData ] = useState(data);
const [ fileId , setFilesId ] = useState(undefined);
const [ fileName , setFileName ] = useState(undefined);
const { getFieldDecorator, validateFields , setFieldsValue } = form;
function UploadSource({ visible , onCancel , onOk }){ // id
function UploadFunc(id,name){
setFilesId(id);
setFileName(name);
}
const columns = [
{
dataIndex:"name",
key:"name",
title:"资源名称",
width:"45%",
ellipsis:true,
render:(value,item,key)=>{
return <AlignCenter>
<div className="task-hide" style={{maxWidth:key===0 ? "250px":"100%"}}>{value}</div>
{ key === 0 && <span className="currentTip">当前版本</span> }
</AlignCenter>
}
},
{
dataIndex:"loadNum",
key:"loadNum",
title:"下载数",
width:"15%",
className:"edu-txt-center"
},
{
dataIndex:"citeNum",
key:"citeNum",
title:"引用数",
width:"15%",
className:"edu-txt-center"
},
{
dataIndex:"time",
key:"time",
title:"上传时间",
width:"25%"
}
]
//
function submit(){
if(fileId){
validateFields((error,values)=>{
if(!error){
postInfo(values);
}
})
}else{
showNotification("请先上传文件!");
}
}
function postInfo(values){
const url = https+`/api/project/achievement/`;
axios.post(url,{
fileId:`${fileId}`,
fileName,
login:owner,
projectId:projectsId,
...values
}).then(result=>{
if(result && result.data){
onOk();
}
}).catch(error=>{})
}
return( return(
<Modal <Modal
title={"上传资源"} title={"上传资源"}
closable={false} closable={false}
visible={visible} visible={visible}
onCancel={onCancel} onCancel={onCancel}
onOk={onOk} onOk={submit}
cancelText="取消" cancelText="取消"
okText="确定" okText="确定"
width="600px" width="600px"
centered centered
> >
<div></div> <div>
<Form>
<Table className="versionTable" columns={columns} dataSource={tableData} pagination={false} size={"small"}/>
<Form.Item>
{getFieldDecorator("tagNames",{
rules:[]
})(
<Checkbox.Group>
<Checkbox value="软件版本">软件版本</Checkbox>
<Checkbox value="文档">文档</Checkbox>
<Checkbox value="代码">代码</Checkbox>
<Checkbox value="媒体">媒体</Checkbox>
<Checkbox value="论文">论文</Checkbox>
<Checkbox value="其它">其它</Checkbox>
</Checkbox.Group>
)}
</Form.Item>
<Upload
className="commentStyle"
load={UploadFunc}
size={100}
showNotification={showNotification}
actionUrl= {https}
/>
<Form.Item className="mt20">
{getFieldDecorator("remark",{
rules:[]
})(
<TextArea rows={4} placeholder="请输入资源描述" />
)}
</Form.Item>
</Form>
</div>
</Modal> </Modal>
) )
} }
export default UploadSource; export default Form.create()(forwardRef(UploadSource));;