import { useEffect, useState } from "react"; import { Modal, Table, message, Space, Typography, Input, Select, Button, } from "antd"; import { resource } from "../../../api"; import { useLocation } from "react-router-dom"; import { ExclamationCircleFilled } from "@ant-design/icons"; import type { ColumnsType } from "antd/es/table"; import { dateFormat } from "../../../utils/index"; import { TreeCategory, UploadCoursewareButton } from "../../../compenents"; import { CoursewareUpdateDialog } from "./compenents/update-dialog"; const { confirm } = Modal; interface DataType { admin_id: number; created_at: string; disk: string; extension: string; file_id: string; id: React.Key; name: string; parent_id: number; path: string; size: number; type: string; url: string; } type AdminUsersModel = { [key: number]: string; }; const ResourceCoursewarePage = () => { const result = new URLSearchParams(useLocation().search); const [list, setList] = useState([]); const [adminUsers, setAdminUsers] = useState({}); const [existingTypes, setExistingTypes] = useState([]); const [refresh, setRefresh] = useState(false); const [page, setPage] = useState(1); const [size, setSize] = useState(10); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(true); const [category_ids, setCategoryIds] = useState([]); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [type, setType] = useState("WORD,EXCEL,PPT,PDF,TXT,RAR,ZIP"); const [title, setTitle] = useState(""); const [multiConfig, setMultiConfig] = useState(false); const [selLabel, setLabel] = useState( result.get("label") ? String(result.get("label")) : "全部课件" ); const [cateId, setCateId] = useState(Number(result.get("cid"))); const [updateId, setUpdateId] = useState(0); const [updateVisible, setUpdateVisible] = useState(false); const types = [ { label: "全部", value: "WORD,EXCEL,PPT,PDF,TXT,RAR,ZIP" }, { label: "WORD", value: "WORD" }, { label: "EXCEL", value: "EXCEL" }, { label: "PPT", value: "PPT" }, { label: "PDF", value: "PDF" }, { label: "TXT", value: "TXT" }, { label: "RAR", value: "RAR" }, { label: "ZIP", value: "ZIP" }, ]; useEffect(() => { setCateId(Number(result.get("cid"))); if (Number(result.get("cid"))) { let arr = []; arr.push(Number(result.get("cid"))); setCategoryIds(arr); } }, [result.get("cid")]); // 加载课件列表 useEffect(() => { getList(); }, [category_ids, refresh, page, size]); const getList = () => { setLoading(true); let categoryIds = category_ids.join(","); resource .resourceList(page, size, "", "", title, type, categoryIds) .then((res: any) => { setTotal(res.data.result.total); setList(res.data.result.data); setExistingTypes(res.data.existing_types); setAdminUsers(res.data.admin_users); setLoading(false); }) .catch((err: any) => { console.log("错误,", err); }); }; const columns: ColumnsType = [ { title: "课件名称", render: (_, record: any) => (
{record.name}.{record.extension}
), }, { title: "课件格式", dataIndex: "type", render: (type: string) => {type}, }, { title: "课件大小", dataIndex: "size", render: (size: number) => {(size / 1024 / 1024).toFixed(2)}M, }, { title: "创建人", dataIndex: "admin_id", render: (text: number) => JSON.stringify(adminUsers) !== "{}" && {adminUsers[text]}, }, { title: "创建时间", dataIndex: "created_at", render: (text: string) => {dateFormat(text)}, }, { title: "操作", key: "action", fixed: "right", width: 180, render: (_, record: any) => { return (
); }, }, ]; const paginationProps = { current: page, //当前页码 pageSize: size, total: total, // 总条数 onChange: (page: number, pageSize: number) => handlePageChange(page, pageSize), //改变页码的函数 showSizeChanger: true, }; const handlePageChange = (page: number, pageSize: number) => { setPage(page); setSize(pageSize); }; const rowSelection = { onChange: (selectedRowKeys: React.Key[], selectedRows: DataType[]) => { setSelectedRowKeys(selectedRowKeys); }, }; // 重置列表 const resetList = () => { setPage(1); setSize(10); setList([]); setTitle(""); setSelectedRowKeys([]); setType("WORD,EXCEL,PPT,PDF,TXT,RAR,ZIP"); setRefresh(!refresh); }; // 删除课件 const removeResource = (id: number) => { if (id === 0) { return; } confirm({ title: "操作确认", icon: , content: "删除前请检查选中课件文件无关联课程,确认删除?", centered: true, okText: "确认", cancelText: "取消", onOk() { resource.destroyResource(id).then(() => { message.success("删除成功"); resetList(); }); }, onCancel() { console.log("Cancel"); }, }); }; // 批量删除课件 const removeResourceMulti = () => { if (selectedRowKeys.length === 0) { return; } confirm({ title: "操作确认", icon: , content: "删除前请检查选中课件文件无关联课程,确认删除?", centered: true, okText: "确认", cancelText: "取消", onOk() { resource.destroyResourceMulti(selectedRowKeys).then(() => { message.success("删除成功"); resetList(); }); }, onCancel() { console.log("Cancel"); }, }); }; const downLoadFile = (url: string) => { console.log(url); window.open(url); }; return ( <>
{ setPage(1); setCategoryIds(keys); if (typeof title === "string") { setLabel(title); } else { setLabel(title.props.children[0]); } }} />
课件 | {selLabel}
{ resetList(); }} >
名称: { setTitle(e.target.value); }} allowClear style={{ width: 160 }} placeholder="请输入名称关键字" />
格式: