Toblerone0629 / Employee-Management-System

0 stars 0 forks source link

file uploading #12

Open DDDDDeng2022 opened 8 months ago

DDDDDeng2022 commented 8 months ago

components: 这是伪代码,其中FileItem、PreviweDialog、FilesBox可另开一个jsx文件,这三个组件复用将是整个项目最高的

提取文件名字

const getfileName = (filelink) => {
        const parsedUrl = new URL(filelink);
        const pathname = parsedUrl.pathname;
        const filename = pathname.substring(pathname.lastIndexOf("/") + 1, pathname.indexOf("-", pathname.lastIndexOf("/")));
        console.log(filename);
        return filename;
    }
  1. FileItem

    const FileItem=({fileLink,isEditable})=>{
    
    解析fileLink >> file(filename.extension)
    const DefinedIcon = (extension)=>{
    if extention === 图片类  >> PhotoIcon(带颜色)
    if extention === pdf >> PictureAsPdfIcon(带颜色)
    if extention === 文档类   >> DescriptionIcon(带颜色)
    }
    const [openPreviweDialog, setOpenPreviweDialog]=useState(false);
    return
    <>
    <> DefinedIcon + {file}</>
    <> 
      <button onClick={setOpenPreviweDialog(true)}> view </button>
      <button>  download     </button>
      {isEditable && <button>  remove </button>}
    </>
    <PreviweDialog filelink={filelink} handleDialogClose={handleDialogClose}/>
    </>
    }

    甚至可以使用这个查看和下载

      import DownloadIcon from "@mui/icons-material/Download";
      import PreviewIcon from "@mui/icons-material/Preview"; 
      <IconButton onClick={() => { /* 预览文档逻辑 */ }}><PreviewIcon /></IconButton>
    <IconButton component="a" href={filelink} download> <GetAppIcon /></IconButton>

    参考

    Screen Shot 2024-01-23 at 20 42 23 Screen Shot 2024-01-23 at 20 42 31 Screen Shot 2024-01-23 at 20 42 41 Screen Shot 2024-01-24 at 01 22 29
  2. PreviweDialog

    const PreviweDialog = ({ filelink, handleDialogClose })=>{
      preview
    }

    3.FilesBox

    const FilesBox=({filelinks,isEditable})=>{
    return filelinks.map((fileLink)=>
    <FileItem fileLink={fileLink} isEditable={isEditable}/>
    )
    }

    4.VisaPage

    const VisaPage=()=>{
    const [filelinks,setFilelinks]=useState();
    const [isEditable,setIsEditable]=useState(false);
    if step completed   >> setIsEditable(false)
    if step==activeStep(curDoc)  >>  setIsEditable(true)
    return 
    ...
    <button >choose files</>(上传文件)
    < FilesBox fileLink={fileLink}  isEditable={isEditable}/>
    <button onClick={post filelinks}>upload</button>
    ....
    }
DDDDDeng2022 commented 8 months ago

@donnalovescoding