import { useEffect, useState } from "react"; import { Button, Modal, Image, Table, Typography, Input, message, Space, Tabs, Dropdown, } from "antd"; import { course } from "../../api"; import styles from "./index.module.less"; import { PlusOutlined, DownOutlined, ExclamationCircleFilled, } from "@ant-design/icons"; import type { MenuProps } from "antd"; import type { ColumnsType } from "antd/es/table"; import { dateFormat } from "../../utils/index"; import { Link, useNavigate } from "react-router-dom"; import { TreeDepartment, TreeCategory, PerButton } from "../../compenents"; import type { TabsProps } from "antd"; import { CourseCreate } from "./compenents/create"; import { CourseUpdate } from "./compenents/update"; import { CourseHourUpdate } from "./compenents/hour-update"; const { confirm } = Modal; interface DataType { id: React.Key; title: string; created_at: string; thumb: string; charge: number; is_show: number; } export const CoursePage = () => { const navigate = useNavigate(); const [list, setList] = 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 [title, setTitle] = useState(""); const [dep_ids, setDepIds] = useState([]); const [selLabel, setLabel] = useState("全部课程"); const [course_category_ids, setCourseCategoryIds] = useState({}); const [course_dep_ids, setCourseDepIds] = useState({}); const [categories, setCategories] = useState({}); const [departments, setDepartments] = useState({}); const [tabKey, setTabKey] = useState(1); const [createVisible, setCreateVisible] = useState(false); const [updateVisible, setUpdateVisible] = useState(false); const [updateHourVisible, setHourUpdateVisible] = useState(false); const [cid, setCid] = useState(0); const items: TabsProps["items"] = [ { key: "1", label: `分类`, children: (
{ setCategoryIds(keys); if (typeof title == "string") { setLabel(title); } else { setLabel(title.props.children[0]); } }} />
), }, { key: "2", label: `部门`, children: (
{ setDepIds(keys); setLabel(title); }} />
), }, ]; const columns: ColumnsType = [ { title: "课程名称", width: 350, render: (_, record: any) => (
{record.title}
), }, { title: "课程分类", dataIndex: "id", render: (id: number) => (
{course_category_ids[id].map((item: any, index: number) => { return ( {index === course_category_ids[id].length - 1 ? categories[item] : categories[item] + "、"} ); })}
), }, { title: "指派部门", dataIndex: "id", render: (id: number) => (
{course_dep_ids[id] && course_dep_ids[id].map((item: any, index: number) => { return ( {index === course_dep_ids[id].length - 1 ? departments[item] : departments[item] + "、"} ); })} {!course_dep_ids[id] && 公开课}
), }, { title: "必修/选修", dataIndex: "isRequired", width: 120, render: (isRequired: number) => ( {isRequired === 1 ? "必修课" : "选修课"} ), }, { title: "创建时间", dataIndex: "created_at", width: 200, render: (text: string) => {dateFormat(text)}, }, { title: "操作", key: "action", fixed: "right", width: 160, render: (_, record: any) => { const items: MenuProps["items"] = [ { key: "1", label: ( ), }, { key: "2", label: ( ), }, { key: "3", label: ( ), }, ]; return ( { setCid(Number(record.id)); console.log("学员" + record.id); }} disabled={null} />
); }, }, ]; // 删除课程 const delItem = (id: number) => { if (id === 0) { return; } confirm({ title: "操作确认", icon: , content: "确认删除此课程?", centered: true, okText: "确认", cancelText: "取消", onOk() { course.destroyCourse(id).then(() => { message.success("删除成功"); resetList(); }); }, onCancel() { console.log("Cancel"); }, }); }; // 获取视频列表 const getList = () => { setLoading(true); let categoryIds = category_ids.join(","); let depIds = dep_ids.join(","); course .courseList(page, size, "", "", title, depIds, categoryIds) .then((res: any) => { setTotal(res.data.total); setList(res.data.data); setCourseCategoryIds(res.data.course_category_ids); setCourseDepIds(res.data.course_dep_ids); setCategories(res.data.categories); setDepartments(res.data.departments); setLoading(false); }) .catch((err: any) => { console.log("错误,", err); }); }; // 重置列表 const resetList = () => { setPage(1); setSize(10); setList([]); setTitle(""); setRefresh(!refresh); }; // 加载列表 useEffect(() => { getList(); }, [category_ids, dep_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 onChange = (key: string) => { setTabKey(Number(key)); }; return ( <>
{selLabel}
} p="course" onClick={() => setCreateVisible(true)} disabled={null} />
课程名称: { setTitle(e.target.value); }} style={{ width: 160 }} placeholder="请输入名称关键字" />
record.id} /> { setCreateVisible(false); setRefresh(!refresh); }} /> { setHourUpdateVisible(false); setRefresh(!refresh); }} /> { setUpdateVisible(false); setRefresh(!refresh); }} /> ); };