From 2fcd2fd066b5a65cd2b497bcda5196adc1d68857 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Fri, 2 Apr 2021 14:08:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Settings/Collaborator.js | 2 +- src/forge/Settings/CollaboratorMember.jsx | 2 - src/forge/Source/Upload.jsx | 95 +++++++++++++++++++++++ src/forge/Upload/Index.js | 27 +++---- 4 files changed, 108 insertions(+), 18 deletions(-) create mode 100644 src/forge/Source/Upload.jsx diff --git a/src/forge/Settings/Collaborator.js b/src/forge/Settings/Collaborator.js index 90b1b6a73..734219170 100644 --- a/src/forge/Settings/Collaborator.js +++ b/src/forge/Settings/Collaborator.js @@ -42,7 +42,7 @@ function Collaborator(props){
{ nav === "1" ? - + : } diff --git a/src/forge/Settings/CollaboratorMember.jsx b/src/forge/Settings/CollaboratorMember.jsx index fa307a972..9c617f112 100644 --- a/src/forge/Settings/CollaboratorMember.jsx +++ b/src/forge/Settings/CollaboratorMember.jsx @@ -20,8 +20,6 @@ function CollaboratorMember({projectsId,owner,project_id,author,showNotification const [ role , setRole ] = useState(undefined); const [ listData , setListData ] = useState(undefined); const [ total , setTotal ] = useState(0); - - useEffect(()=>{ if(newId){ addCollaborator(newId); diff --git a/src/forge/Source/Upload.jsx b/src/forge/Source/Upload.jsx new file mode 100644 index 000000000..1897b959a --- /dev/null +++ b/src/forge/Source/Upload.jsx @@ -0,0 +1,95 @@ +import React, { useEffect, useState } from "react"; +import { Upload, Icon , Button } from 'antd'; +import { appendFileSizeToUploadFileAll } from 'educoder'; + +import axios from 'axios'; +const { Dragger } = Upload; +function Upload({isComplete, icon , btn , className , size , actionUrl,fileList}) { + const [ files , setFiles ] = useState(undefined); + + useEffect(()=>{ + init(); + },[fileList]); + + function init(){ + let f = appendFileSizeToUploadFileAll(fileList); + setFiles(f); + } + function onAttachmentRemove(file){ + if (!file.percent || file.percent === 100) { + deleteAttachment(file); + return false; + } + } + function deleteAttachment(file){ + const url = `/attachments/${file.response ? file.response.id : file.uid}.json` + axios.delete(url, { + }).then((response) => { + if (response.data) { + if (response.data.status === 0) { + let index = files.indexOf(file); + let newFileList = files.slice(); + let nf = newFileList.splice(index, 1); + setFiles(nf); + fileIdList(nf); + } else { + showNotification(response.data.message) + } + } + }).catch(function (error) { + console.log(error); + }); + } + + + function handleChange (info) { + if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') { + let fileList = info.fileList; + + setFiles(appendFileSizeToUploadFileAll(fileList)); + fileIdList(fileList); + } + } + + function fileIdList (fileList) { + let array = []; + fileList && fileList.length > 0 && fileList.map((item) => { + return array.push(item.response && (item.response.id || (item.response.data && item.response.data.id))); + }) + array && load && load(array); + } + + function beforeUpload(file){ + const isLt100M = file.size / 1024 / 1024 < size; + if (!isLt100M) { + showNotification(`文件大小必须小于${size}MB!`); + } + return isLt100M; + } + + //判断是否已经提交,如已提交评论则上一条评论数据清除 + + const upload = { + name: 'file', + fileList: files, + action: actionUrl, + onChange:handleChange, + onRemove:onAttachmentRemove, + beforeUpload:beforeUpload + }; + + return ( + btn ? + + + (你可以上传小于{size}MB的文件) + + : + + {icon || } +

拖动文件或点击此处上传

+
+ ) + } +} +export default Upload; \ No newline at end of file diff --git a/src/forge/Upload/Index.js b/src/forge/Upload/Index.js index 46f05b7e8..5b09ca071 100644 --- a/src/forge/Upload/Index.js +++ b/src/forge/Upload/Index.js @@ -1,6 +1,7 @@ import React, { Component } from "react"; -import { Upload, Button, Icon } from 'antd'; +import { Upload, Icon , Button } from 'antd'; import { getUploadActionUrl, appendFileSizeToUploadFileAll } from 'educoder'; +import { AlignCenter } from '../Component/layout'; import axios from 'axios'; const { Dragger } = Upload; @@ -28,22 +29,12 @@ class Index extends Component { onAttachmentRemove = (file) => { if (!file.percent || file.percent === 100) { - // this.props.confirm({ - // content: '是否确认删除?', - // onOk: () => { - // this.deleteAttachment(file) - // }, - // onCancel() { - // console.log('Cancel'); - // }, - // }); this.deleteAttachment(file) return false; } } deleteAttachment = (file) => { - const url = `/attachments/${file.response ? file.response.id : file.uid}.json` axios.delete(url, { }).then((response) => { @@ -82,7 +73,7 @@ class Index extends Component { fileIdList = (fileList) => { let array = []; fileList && fileList.length > 0 && fileList.map((item) => { - return array.push(item.response && item.response.id); + return array.push(item.response && (item.response.id || (item.response.data && item.response.data.id))); }) array && this.props.load && this.props.load(array); } @@ -98,21 +89,27 @@ class Index extends Component { render() { //判断是否已经提交,如已提交评论则上一条评论数据清除 - const { isComplete, icon } = this.props; + const { isComplete, icon , btn , className , size , actionUrl } = this.props; const { fileList } = this.state; let list = isComplete === true ? fileList : undefined; const upload = { name: 'file', fileList: list, - action: `${getUploadActionUrl()}`, + action: actionUrl || `${getUploadActionUrl()}`, onChange: this.handleChange, onRemove: this.onAttachmentRemove, beforeUpload: this.beforeUpload }; return ( - + btn ? + + + (你可以上传小于{size}MB的文件) + + : + {icon || }

拖动文件或点击此处上传