import { useEffect, useState } from "react"; import { Modal, Table, message, Space, Dropdown, Typography, Input, Button, } from "antd"; import type { MenuProps } from "antd"; import { resource } from "../../../api"; import { useLocation } from "react-router-dom"; import { DownOutlined, ExclamationCircleFilled } from "@ant-design/icons"; import type { ColumnsType } from "antd/es/table"; import { dateFormat } from "../../../utils/index"; import { TreeCategory, DurationText } from "../../../compenents"; import { UploadVideoButton } from "../../../compenents/upload-video-button"; import { VideoPlayDialog } from "./compenents/video-play-dialog"; import { VideosUpdateDialog } from "./compenents/update-dialog"; const { confirm } = Modal; interface DataType { id: React.Key; admin_id: number; created_at: string; disk: string; extension: string; file_id: string; name: string; parent_id: number; path: string; size: number; type: string; url: string; } type VideosExtraModel = { [key: number]: VideoModel; }; type VideoModel = { duration: number; poster: string; rid: number; }; type AdminUsersModel = { [key: number]: string; }; const ResourceVideosPage = () => { const result = new URLSearchParams(useLocation().search); const [videoList, setVideoList] = useState([]); const [videosExtra, setVideoExtra] = useState({}); const [adminUsers, setAdminUsers] = 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 [selLabel, setLabel] = useState( result.get("label") ? String(result.get("label")) : "全部视频" ); const [cateId, setCateId] = useState(Number(result.get("cid"))); const [updateVisible, setUpdateVisible] = useState(false); const [playVisible, setPlayeVisible] = useState(false); const [multiConfig, setMultiConfig] = useState(false); const [updateId, setUpdateId] = useState(0); const [playUrl, setPlayUrl] = useState(""); const [title, setTitle] = useState(""); useEffect(() => { setCateId(Number(result.get("cid"))); if (Number(result.get("cid"))) { let arr = []; arr.push(Number(result.get("cid"))); setCategoryIds(arr); } }, [result.get("cid")]); const columns: ColumnsType = [ { title: "视频名称", dataIndex: "name", render: (text: string) => (
{text}
), }, { title: "视频时长", dataIndex: "id", render: (id: number) => ( ), }, { title: "创建人", dataIndex: "admin_id", render: (admin_id: number) => JSON.stringify(adminUsers) !== "{}" && ( {adminUsers[admin_id]} ), }, { title: "创建时间", dataIndex: "created_at", render: (created_at: string) => {dateFormat(created_at)}, }, { title: "操作", key: "action", fixed: "right", width: 160, render: (_, record: any) => { const items: MenuProps["items"] = [ { key: "1", label: ( ), }, { key: "2", label: ( ), }, ]; return (
); }, }, ]; // 删除图片 const removeResource = (id: number) => { if (id === 0) { return; } confirm({ title: "操作确认", icon: , content: "删除前请检查选中视频文件无关联课程,确认删除?", centered: true, okText: "确认", cancelText: "取消", onOk() { resource.destroyResource(id).then(() => { message.success("删除成功"); resetVideoList(); }); }, 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("删除成功"); resetVideoList(); }); }, onCancel() { console.log("Cancel"); }, }); }; // 获取视频列表 const getVideoList = () => { setLoading(true); let categoryIds = category_ids.join(","); resource .resourceList(page, size, "", "", title, "VIDEO", categoryIds) .then((res: any) => { setTotal(res.data.result.total); setVideoList(res.data.result.data); setVideoExtra(res.data.videos_extra); setAdminUsers(res.data.admin_users); setLoading(false); }) .catch((err: any) => { console.log("错误,", err); }); }; // 重置列表 const resetVideoList = () => { setPage(1); setSize(10); setVideoList([]); setSelectedRowKeys([]); setTitle(""); setRefresh(!refresh); }; // 加载视频列表 useEffect(() => { getVideoList(); }, [category_ids, refresh, page, size]); 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); }, }; return ( <>
{ setPage(1); setCategoryIds(keys); if (typeof title === "string") { setLabel(title); } else { setLabel(title.props.children[0]); } }} />
视频 | {selLabel}
{ resetVideoList(); }} >
名称: { setTitle(e.target.value); }} allowClear style={{ width: 160 }} placeholder="请输入名称关键字" />
{multiConfig ? ( record.id} /> ) : (
record.id} /> )} setPlayeVisible(false)} > setUpdateVisible(false)} onSuccess={() => { setUpdateVisible(false); setRefresh(!refresh); }} > ); }; export default ResourceVideosPage;