Compare commits

..

No commits in common. "da6fc9639f917d8f7c6d34ec6a66210377bf5108" and "d06214aec022943112e9d4c374846aa8f4d9d5ca" have entirely different histories.

9 changed files with 27 additions and 132 deletions

View File

@ -1,5 +1,5 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Row, Col, Empty, Table, Spin, Typography, Input, Button } from "antd"; import { Row, Col, Empty, Table, Spin } from "antd";
import type { ColumnsType } from "antd/es/table"; import type { ColumnsType } from "antd/es/table";
import { resource } from "../../api"; import { resource } from "../../api";
import styles from "./index.module.less"; import styles from "./index.module.less";
@ -47,7 +47,6 @@ export const UploadCoursewareSub = (props: PropsInterface) => {
const [size, setSize] = useState(10); const [size, setSize] = useState(10);
const [total, setTotal] = useState(0); const [total, setTotal] = useState(0);
const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]); const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]);
const [title, setTitle] = useState("");
// 加载列表 // 加载列表
useEffect(() => { useEffect(() => {
@ -71,7 +70,7 @@ export const UploadCoursewareSub = (props: PropsInterface) => {
size, size,
"", "",
"", "",
title, "",
"WORD,EXCEL,PPT,PDF,TXT,RAR,ZIP", "WORD,EXCEL,PPT,PDF,TXT,RAR,ZIP",
categoryIds categoryIds
) )
@ -93,7 +92,6 @@ export const UploadCoursewareSub = (props: PropsInterface) => {
const resetVideoList = () => { const resetVideoList = () => {
setPage(1); setPage(1);
setVideoList([]); setVideoList([]);
setTitle("");
setRefresh(!refresh); setRefresh(!refresh);
}; };
@ -180,42 +178,14 @@ export const UploadCoursewareSub = (props: PropsInterface) => {
</Col> </Col>
<Col span={17}> <Col span={17}>
<Row style={{ marginBottom: 24, paddingLeft: 10 }}> <Row style={{ marginBottom: 24, paddingLeft: 10 }}>
<div className="float-left j-b-flex"> <Col span={24}>
<UploadCoursewareButton <UploadCoursewareButton
categoryIds={category_ids} categoryIds={category_ids}
onUpdate={() => { onUpdate={() => {
resetVideoList(); resetVideoList();
}} }}
></UploadCoursewareButton> ></UploadCoursewareButton>
<div className="d-flex"> </Col>
<div className="d-flex mr-24">
<Typography.Text></Typography.Text>
<Input
value={title}
onChange={(e) => {
setTitle(e.target.value);
}}
allowClear
style={{ width: 160 }}
placeholder="请输入名称关键字"
/>
</div>
<div className="d-flex">
<Button className="mr-16" onClick={resetVideoList}>
</Button>
<Button
type="primary"
onClick={() => {
setPage(1);
setRefresh(!refresh);
}}
>
</Button>
</div>
</div>
</div>
</Row> </Row>
{init && ( {init && (
<div className="float-left text-center mt-30"> <div className="float-left text-center mt-30">

View File

@ -1,5 +1,5 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Row, Col, Empty, Table, Spin, Typography, Input, Button } from "antd"; import { Row, Col, Empty, Table, Spin } from "antd";
import type { ColumnsType } from "antd/es/table"; import type { ColumnsType } from "antd/es/table";
import { resource } from "../../api"; import { resource } from "../../api";
import styles from "./index.module.less"; import styles from "./index.module.less";
@ -48,7 +48,6 @@ export const UploadVideoSub = (props: PropsInterface) => {
const [size, setSize] = useState(10); const [size, setSize] = useState(10);
const [total, setTotal] = useState(0); const [total, setTotal] = useState(0);
const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]); const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]);
const [title, setTitle] = useState("");
// 加载列表 // 加载列表
useEffect(() => { useEffect(() => {
@ -67,7 +66,7 @@ export const UploadVideoSub = (props: PropsInterface) => {
setLoading(true); setLoading(true);
let categoryIds = category_ids.join(","); let categoryIds = category_ids.join(",");
resource resource
.resourceList(page, size, "", "", title, "VIDEO", categoryIds) .resourceList(page, size, "", "", "", "VIDEO", categoryIds)
.then((res: any) => { .then((res: any) => {
setTotal(res.data.result.total); setTotal(res.data.result.total);
setVideoExtra(res.data.videos_extra); setVideoExtra(res.data.videos_extra);
@ -86,7 +85,6 @@ export const UploadVideoSub = (props: PropsInterface) => {
const resetVideoList = () => { const resetVideoList = () => {
setPage(1); setPage(1);
setVideoList([]); setVideoList([]);
setTitle("");
setRefresh(!refresh); setRefresh(!refresh);
}; };
@ -172,42 +170,14 @@ export const UploadVideoSub = (props: PropsInterface) => {
</Col> </Col>
<Col span={17}> <Col span={17}>
<Row style={{ marginBottom: 24, paddingLeft: 10 }}> <Row style={{ marginBottom: 24, paddingLeft: 10 }}>
<div className="float-left j-b-flex"> <Col span={24}>
<UploadVideoButton <UploadVideoButton
categoryIds={category_ids} categoryIds={category_ids}
onUpdate={() => { onUpdate={() => {
resetVideoList(); resetVideoList();
}} }}
></UploadVideoButton> ></UploadVideoButton>
<div className="d-flex"> </Col>
<div className="d-flex mr-24">
<Typography.Text></Typography.Text>
<Input
value={title}
onChange={(e) => {
setTitle(e.target.value);
}}
allowClear
style={{ width: 160 }}
placeholder="请输入名称关键字"
/>
</div>
<div className="d-flex">
<Button className="mr-16" onClick={resetVideoList}>
</Button>
<Button
type="primary"
onClick={() => {
setPage(1);
setRefresh(!refresh);
}}
>
</Button>
</div>
</div>
</div>
</Row> </Row>
{init && ( {init && (
<div className="float-left text-center mt-30"> <div className="float-left text-center mt-30">

View File

@ -20,10 +20,6 @@ code {
monospace; monospace;
} }
.w-100 {
width: 100%;
}
.w-174px { .w-174px {
max-width: 134px; max-width: 134px;
overflow: hidden; overflow: hidden;

View File

@ -234,7 +234,7 @@ export const CourseHourUpdate: React.FC<PropInterface> = ({
const arr = [...chapters]; const arr = [...chapters];
if (arr[index].id) { if (arr[index].id) {
courseChapter courseChapter
.updateCourseChapter(id, Number(arr[index].id), value, index + 1) .updateCourseChapter(id, Number(arr[index].id), value, arr.length)
.then((res: any) => { .then((res: any) => {
console.log("ok"); console.log("ok");
getDetail(); getDetail();

View File

@ -65,7 +65,6 @@ export const TreeHours = (props: PropInterface) => {
} }
props.onRemoveItem(id); props.onRemoveItem(id);
}; };
const onDrop: TreeProps["onDrop"] = (info) => { const onDrop: TreeProps["onDrop"] = (info) => {
const dropKey = info.node.key; const dropKey = info.node.key;
const dragKey = info.dragNode.key; const dragKey = info.dragNode.key;
@ -97,35 +96,23 @@ export const TreeHours = (props: PropInterface) => {
// Find dragObject // Find dragObject
let dragObj: DataNode; let dragObj: DataNode;
let dragLength = (info.dragNode as any).props.pos.split("-").length; loop(data, dragKey, (item, index, arr) => {
let dropLength = (info.node as any).props.pos.split("-").length; arr.splice(index, 1);
dragObj = item;
});
if (!info.dropToGap) { if (!info.dropToGap) {
// Drop on the content // Drop on the content
if ( loop(data, dropKey, (item) => {
(dropPosition == 0 && dropPos.length == 3) || item.children = item.children || [];
(dropPosition == 0 && dropPos.length == 2 && dragLength == 2) // where to insert 示例添加到头部,可以是随意位置
) { item.children.unshift(dragObj);
} else { });
loop(data, dragKey, (item, index, arr) => {
arr.splice(index, 1);
dragObj = item;
});
loop(data, dropKey, (item) => {
item.children = item.children || [];
// where to insert 示例添加到头部,可以是随意位置
item.children.unshift(dragObj);
});
}
} else if ( } else if (
((info.node as any).props.children || []).length > 0 && // Has children ((info.node as any).props.children || []).length > 0 && // Has children
(info.node as any).props.expanded && // Is expanded (info.node as any).props.expanded && // Is expanded
dropPosition === 1 // On the bottom gap dropPosition === 1 // On the bottom gap
) { ) {
loop(data, dragKey, (item, index, arr) => {
arr.splice(index, 1);
dragObj = item;
});
loop(data, dropKey, (item) => { loop(data, dropKey, (item) => {
item.children = item.children || []; item.children = item.children || [];
// where to insert 示例添加到头部,可以是随意位置 // where to insert 示例添加到头部,可以是随意位置
@ -134,16 +121,6 @@ export const TreeHours = (props: PropInterface) => {
// item to the tail of the children // item to the tail of the children
}); });
} else { } else {
if (
(dragLength == 3 && dropLength == 2) ||
(dragLength == 2 && dropLength == 3)
) {
return;
}
loop(data, dragKey, (item, index, arr) => {
arr.splice(index, 1);
dragObj = item;
});
let ar: DataNode[] = []; let ar: DataNode[] = [];
let i: number; let i: number;
loop(data, dropKey, (_item, index, arr) => { loop(data, dropKey, (_item, index, arr) => {

View File

@ -222,7 +222,7 @@ export const MemberLearnProgressDialog: React.FC<PropInterface> = ({
maskClosable={false} maskClosable={false}
footer={null} footer={null}
> >
<div className="w-100 d-flex mt-24"> <div className="d-flex mt-24">
<PerButton <PerButton
type="primary" type="primary"
text="重置学习记录" text="重置学习记录"
@ -236,7 +236,7 @@ export const MemberLearnProgressDialog: React.FC<PropInterface> = ({
/> />
</div> </div>
<div <div
className="w-100 d-flex mt-24" className="d-flex mt-24"
style={{ maxHeight: 800, overflowY: "auto" }} style={{ maxHeight: 800, overflowY: "auto" }}
> >
<Table <Table

View File

@ -57,22 +57,6 @@ type DepartmentsListModel = {
updated_at: string; updated_at: string;
}; };
type PerCourseRecordsModel = {
[key: number]: {
course_id: number;
created_at: string;
finished_at: string;
finished_duration: number;
hour_id: number;
id: number;
is_finished: number;
real_duration: number;
total_duration: number;
updated_at: string;
user_id: number;
};
};
const MemberLearnPage = () => { const MemberLearnPage = () => {
let chartRef = useRef(null); let chartRef = useRef(null);
const navigate = useNavigate(); const navigate = useNavigate();
@ -85,7 +69,6 @@ const MemberLearnPage = () => {
const [currentCourses, setCurrentCourses] = useState<DataType[]>([]); const [currentCourses, setCurrentCourses] = useState<DataType[]>([]);
const [openCourses, setOpenCourses] = useState<CourseModel[]>([]); const [openCourses, setOpenCourses] = useState<CourseModel[]>([]);
const [records, setRecords] = useState<UserCourseRecordsModel>({}); const [records, setRecords] = useState<UserCourseRecordsModel>({});
const [perRecords, setPerRecords] = useState<PerCourseRecordsModel>({});
const [hourCount, setHourCount] = useState<HourCountModel>({}); const [hourCount, setHourCount] = useState<HourCountModel>({});
const [total2, setTotal2] = useState(0); const [total2, setTotal2] = useState(0);
const [refresh2, setRefresh2] = useState(false); const [refresh2, setRefresh2] = useState(false);
@ -211,7 +194,6 @@ const MemberLearnPage = () => {
setOpenCourses(res.data.open_courses); setOpenCourses(res.data.open_courses);
setHourCount(res.data.user_course_hour_count); setHourCount(res.data.user_course_hour_count);
setRecords(res.data.user_course_records); setRecords(res.data.user_course_records);
setPerRecords(res.data.per_course_earliest_records);
if (res.data.departments.length > 0) { if (res.data.departments.length > 0) {
let box: OptionModel[] = []; let box: OptionModel[] = [];
res.data.departments.map((item: any) => { res.data.departments.map((item: any) => {
@ -265,8 +247,8 @@ const MemberLearnPage = () => {
dataIndex: "created_at", dataIndex: "created_at",
render: (_, record: any) => ( render: (_, record: any) => (
<> <>
{perRecords[record.id] ? ( {records[record.id] ? (
<span>{dateFormat(perRecords[record.id].created_at)}</span> <span>{dateFormat(records[record.id].created_at)}</span>
) : ( ) : (
<span>-</span> <span>-</span>
)} )}

View File

@ -149,12 +149,12 @@ export const SystemAdministratorCreate: React.FC<PropInterface> = ({
<Form.Item <Form.Item
label="邮箱" label="邮箱"
name="email" name="email"
rules={[{ required: true, message: "请输入管理员邮箱!" }]} rules={[{ required: true, message: "请输入员邮箱!" }]}
> >
<Input <Input
allowClear allowClear
style={{ width: 200 }} style={{ width: 200 }}
placeholder="请输入管理员邮箱" placeholder="请输入员邮箱"
/> />
</Form.Item> </Form.Item>
<Form.Item <Form.Item

View File

@ -111,7 +111,7 @@ export const SystemAdministratorUpdate: React.FC<PropInterface> = ({
<> <>
{open ? ( {open ? (
<Modal <Modal
title="编辑管理员" title="编辑管理员"
centered centered
forceRender forceRender
open={true} open={true}
@ -168,12 +168,12 @@ export const SystemAdministratorUpdate: React.FC<PropInterface> = ({
<Form.Item <Form.Item
label="邮箱" label="邮箱"
name="email" name="email"
rules={[{ required: true, message: "请输入管理员邮箱!" }]} rules={[{ required: true, message: "请输入员邮箱!" }]}
> >
<Input <Input
allowClear allowClear
style={{ width: 200 }} style={{ width: 200 }}
placeholder="请输入管理员邮箱" placeholder="请输入员邮箱"
/> />
</Form.Item> </Form.Item>
<Form.Item label="密码" name="password"> <Form.Item label="密码" name="password">