From 409fa080fc43fe28977da2d54e9bcd516f09265d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Fri, 21 Apr 2023 10:27:54 +0800 Subject: [PATCH 01/27] =?UTF-8?q?=E5=AD=A6=E5=91=98=E5=90=84=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/compenents/keep-alive/index.tsx | 29 ++++++++++++++++++++++++++++ src/compenents/left-menu/index.tsx | 2 +- src/pages/dashboard/index.tsx | 2 +- src/pages/department/index.tsx | 2 +- src/routes/index.tsx | 30 ++++++++++++++++------------- 6 files changed, 50 insertions(+), 16 deletions(-) create mode 100644 src/compenents/keep-alive/index.tsx diff --git a/package.json b/package.json index c89999d..83edae1 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@reduxjs/toolkit": "^1.9.3", + "ahooks": "^3.7.6", "antd": "^5.3.2", "axios": "^1.3.4", "echarts": "^5.4.2", diff --git a/src/compenents/keep-alive/index.tsx b/src/compenents/keep-alive/index.tsx new file mode 100644 index 0000000..94a10f4 --- /dev/null +++ b/src/compenents/keep-alive/index.tsx @@ -0,0 +1,29 @@ +import { useUpdate } from "ahooks"; +import { useEffect, useRef } from "react"; +import { useLocation, useOutlet } from "react-router-dom"; + +function KeepAlive() { + const componentList = useRef(new Map()); + const outLet = useOutlet(); + const { pathname } = useLocation(); + const forceUpdate = useUpdate(); + + useEffect(() => { + if (!componentList.current.has(pathname)) { + componentList.current.set(pathname, outLet); + } + forceUpdate(); + }, [pathname]); + + return ( +
+ {Array.from(componentList.current).map(([key, component]) => ( +
+ {component} +
+ ))} +
+ ); +} + +export default KeepAlive; diff --git a/src/compenents/left-menu/index.tsx b/src/compenents/left-menu/index.tsx index c3ce869..07d4b24 100644 --- a/src/compenents/left-menu/index.tsx +++ b/src/compenents/left-menu/index.tsx @@ -50,7 +50,7 @@ const items = [ "user", , [ - getItem("学员", "/member", null, null, null), + getItem("学员", "/member/index", null, null, null), getItem("部门", "/department", null, null, null), ], null diff --git a/src/pages/dashboard/index.tsx b/src/pages/dashboard/index.tsx index 1fa89ef..efa7120 100644 --- a/src/pages/dashboard/index.tsx +++ b/src/pages/dashboard/index.tsx @@ -199,7 +199,7 @@ const DashboardPage = () => {
{ - navigate("/member"); + navigate("/member/index"); }} > { type="link" style={{ paddingLeft: 4, paddingRight: 4 }} danger - onClick={() => navigate("/member")} + onClick={() => navigate("/member/index")} > ({res.data.users.length}个学员), diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 2f1ee5d..1e0c7af 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -4,6 +4,7 @@ import { login, system } from "../api"; import InitPage from "../pages/init"; import { getToken } from "../utils"; +import KeepAlive from "../compenents/keep-alive"; import LoginPage from "../pages/login"; import HomePage from "../pages/home"; @@ -94,19 +95,22 @@ const routes: RouteObject[] = [ }, { path: "/member", - element: , - }, - { - path: "/member/import", - element: , - }, - { - path: "/member/learn", - element: , - }, - { - path: "/member/departmentUser", - element: , + element: , + children: [ + { path: "/member/index", element: }, + { + path: "/member/import", + element: , + }, + { + path: "/member/learn", + element: , + }, + { + path: "/member/departmentUser", + element: , + }, + ], }, { path: "/system/config/index", From 1aa209640d6408cdd7c93d3c55ba231aeaee5d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Sun, 23 Apr 2023 09:17:45 +0800 Subject: [PATCH 02/27] =?UTF-8?q?=E5=AD=A6=E5=91=98=E5=90=84=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=BC=93=E5=AD=98=E6=83=85=E5=86=B5=E4=B8=8B=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/departmentUser.tsx | 5 +++++ src/pages/member/learn.tsx | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx index de96f52..96f916c 100644 --- a/src/pages/member/departmentUser.tsx +++ b/src/pages/member/departmentUser.tsx @@ -43,6 +43,11 @@ const MemberDepartmentProgressPage = () => { const [did, setDid] = useState(Number(result.get("id"))); const [title, setTitle] = useState(String(result.get("title"))); + useEffect(() => { + setDid(Number(result.get("id"))); + resetData(); + }, [Number(result.get("id"))]); + useEffect(() => { getData(); }, [refresh, page, size]); diff --git a/src/pages/member/learn.tsx b/src/pages/member/learn.tsx index ec3d42a..bf6c870 100644 --- a/src/pages/member/learn.tsx +++ b/src/pages/member/learn.tsx @@ -38,6 +38,10 @@ const MemberLearnPage = () => { const [refresh2, setRefresh2] = useState(false); const [uid, setUid] = useState(Number(result.get("id"))); + useEffect(() => { + setUid(Number(result.get("id"))); + }, [Number(result.get("id"))]); + useEffect(() => { getZxtData(); return () => { @@ -47,11 +51,11 @@ const MemberLearnPage = () => { useEffect(() => { getLearnHours(); - }, [refresh, page, size]); + }, [refresh, page, size, uid]); useEffect(() => { getLearnCourses(); - }, [refresh2, page2, size2]); + }, [refresh2, page2, size2, uid]); const getZxtData = () => { member.learnStats(uid).then((res: any) => { From c7fa24021bf9dcc68b262affa9c7ea4dde859c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Sun, 23 Apr 2023 14:54:23 +0800 Subject: [PATCH 03/27] =?UTF-8?q?=E5=AD=A6=E5=91=98=E7=BA=BF=E4=B8=8A?= =?UTF-8?q?=E8=AF=BE=E5=AD=A6=E4=B9=A0=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/user.ts | 22 ++ .../member/compenents/progress.module.scss | 0 src/pages/member/compenents/progress.tsx | 252 ++++++++++++++++++ src/pages/member/learn.tsx | 115 +++----- 4 files changed, 307 insertions(+), 82 deletions(-) create mode 100644 src/pages/member/compenents/progress.module.scss create mode 100644 src/pages/member/compenents/progress.tsx diff --git a/src/api/user.ts b/src/api/user.ts index c1165e1..5c29e45 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -121,3 +121,25 @@ export function departmentProgress( ...params, }); } + +export function learnCoursesProgress( + id: number, + courseId: number, + params: any +) { + return client.get(`/backend/v1/user/${id}/learn-course/${courseId} `, params); +} + +export function destroyAllUserLearned(id: number, courseId: number) { + return client.destroy(`/backend/v1/user/${id}/learn-course/${courseId}`); +} + +export function destroyUserLearned( + id: number, + courseId: number, + hourId: number +) { + return client.destroy( + `/backend/v1/user/${id}/learn-course/${courseId}/hour/${hourId}` + ); +} diff --git a/src/pages/member/compenents/progress.module.scss b/src/pages/member/compenents/progress.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/member/compenents/progress.tsx b/src/pages/member/compenents/progress.tsx new file mode 100644 index 0000000..6e4ffc2 --- /dev/null +++ b/src/pages/member/compenents/progress.tsx @@ -0,0 +1,252 @@ +import { useState, useEffect } from "react"; +import styles from "./progrss.module.less"; +import { Table, Modal, message } from "antd"; +import { PerButton, DurationText } from "../../../compenents"; +import { user as member } from "../../../api/index"; +import type { ColumnsType } from "antd/es/table"; +import { dateFormat } from "../../../utils/index"; +import { ExclamationCircleFilled } from "@ant-design/icons"; +const { confirm } = Modal; + +interface DataType { + id: React.Key; + title: string; + type: string; + created_at: string; + duration: number; + finished_duration: number; + is_finished: boolean; + finished_at: boolean; +} + +interface PropInterface { + open: boolean; + uid: number; + id: number; + onCancel: () => void; +} + +export const MemberLearnProgressDialog: React.FC = ({ + open, + uid, + id, + onCancel, +}) => { + const [loading, setLoading] = useState(false); + const [list, setList] = useState([]); + const [records, setRecords] = useState({}); + const [refresh, setRefresh] = useState(false); + + useEffect(() => { + if (open) { + getData(); + } + }, [uid, id, open, refresh]); + + const getData = () => { + if (loading) { + return; + } + setLoading(true); + member.learnCoursesProgress(uid, id, {}).then((res: any) => { + setList(res.data.hours); + setRecords(res.data.learn_records); + setLoading(false); + }); + }; + + const column: ColumnsType = [ + { + title: "课时标题", + dataIndex: "title", + + render: (title: string) => ( + <> + {title} + + ), + }, + { + title: "总时长", + width: 120, + dataIndex: "duration", + render: (duration: number) => ( + <> + + + ), + }, + { + title: "已学习时长", + width: 120, + dataIndex: "finished_duration", + render: (_, record: any) => ( + <> + {records && records[record.id] ? ( + + + + ) : ( + - + )} + + ), + }, + { + title: "是否学完", + width: 100, + dataIndex: "is_finished", + render: (_, record: any) => ( + <> + {records && + records[record.id] && + records[record.id].is_finished === 1 ? ( + 已学完 + ) : ( + 未学完 + )} + + ), + }, + { + title: "开始时间", + width: 150, + dataIndex: "created_at", + render: (_, record: any) => ( + <> + {records && records[record.id] ? ( + {dateFormat(records[record.id].created_at)} + ) : ( + - + )} + + ), + }, + { + title: "学完时间", + width: 150, + dataIndex: "finished_at", + render: (_, record: any) => ( + <> + {records && records[record.id] ? ( + {dateFormat(records[record.id].finished_at)} + ) : ( + - + )} + + ), + }, + { + title: "操作", + key: "action", + fixed: "right", + width: 70, + render: (_, record: any) => ( + <> + {records && records[record.id] ? ( + { + clearSingleProgress(records[record.id].hour_id); + }} + disabled={null} + /> + ) : ( + - + )} + + ), + }, + ]; + + const clearProgress = () => { + confirm({ + title: "操作确认", + icon: , + content: "确认删除此课程下所有课时的学习记录?", + centered: true, + okText: "确认", + cancelText: "取消", + onOk() { + member.destroyAllUserLearned(uid, id).then((res: any) => { + message.success("操作成功"); + setRefresh(!refresh); + }); + }, + onCancel() { + console.log("Cancel"); + }, + }); + }; + + const clearSingleProgress = (hour_id: number) => { + if (hour_id === 0) { + return; + } + confirm({ + title: "操作确认", + icon: , + content: "确认删除此课时的学习记录?", + centered: true, + okText: "确认", + cancelText: "取消", + onOk() { + member.destroyUserLearned(uid, id, hour_id).then((res: any) => { + message.success("操作成功"); + setRefresh(!refresh); + }); + }, + onCancel() { + console.log("Cancel"); + }, + }); + }; + + return ( + <> + onCancel()} + onCancel={() => onCancel()} + maskClosable={false} + footer={null} + > +
+ { + clearProgress(); + }} + disabled={null} + /> +
+
+ record.id} + pagination={false} + /> + + + + ); +}; diff --git a/src/pages/member/learn.tsx b/src/pages/member/learn.tsx index bf6c870..1587407 100644 --- a/src/pages/member/learn.tsx +++ b/src/pages/member/learn.tsx @@ -1,13 +1,13 @@ import { useState, useEffect, useRef } from "react"; import styles from "./learn.module.less"; -import { Row, Image, Table } from "antd"; -import { useLocation } from "react-router-dom"; +import { Row, Image, Table, Button } from "antd"; +import { useLocation, useNavigate } from "react-router-dom"; import { BackBartment, DurationText } from "../../compenents"; import { dateFormat } from "../../utils/index"; import { user as member } from "../../api/index"; import * as echarts from "echarts"; import type { ColumnsType } from "antd/es/table"; -import { duration } from "moment"; +import { MemberLearnProgressDialog } from "./compenents/progress"; interface DataType { id: React.Key; @@ -21,6 +21,7 @@ interface DataType { const MemberLearnPage = () => { let chartRef = useRef(null); + const navigate = useNavigate(); const result = new URLSearchParams(useLocation().search); const [loading, setLoading] = useState(false); const [page, setPage] = useState(1); @@ -37,6 +38,8 @@ const MemberLearnPage = () => { const [total2, setTotal2] = useState(0); const [refresh2, setRefresh2] = useState(false); const [uid, setUid] = useState(Number(result.get("id"))); + const [visiable, setVisiable] = useState(false); + const [courseId, setcourseId] = useState(0); useEffect(() => { setUid(Number(result.get("id"))); @@ -169,20 +172,6 @@ const MemberLearnPage = () => { }); }; - 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 paginationProps2 = { current: page2, //当前页码 pageSize: size2, @@ -197,59 +186,6 @@ const MemberLearnPage = () => { setSize2(pageSize); }; - const columns: ColumnsType = [ - { - title: "课时标题", - dataIndex: "title", - render: (_, record: any) => ( - <> - {hours[record.hour_id].title} - - ), - }, - { - title: "课时类型", - dataIndex: "type", - render: (_, record: any) => ( - <> - {hours[record.hour_id].type} - - ), - }, - { - title: "总时长", - dataIndex: "total_duration", - render: (_, record: any) => ( - <> - - - ), - }, - { - title: "已学习时长", - dataIndex: "finished_duration", - render: (_, record: any) => ( - <> - - - ), - }, - { - title: "状态", - dataIndex: "is_finished", - render: (_, record: any) => ( - <> - {record.is_finished === 1 ? 已学完 : 未学完} - - ), - }, - { - title: "时间", - dataIndex: "created_at", - render: (text: string) => {dateFormat(text)}, - }, - ]; - const column2: ColumnsType = [ { title: "课程名称", @@ -306,11 +242,38 @@ const MemberLearnPage = () => { ), }, + { + title: "操作", + key: "action", + fixed: "right", + width: 100, + render: (_, record: any) => ( + + ), + }, ]; return ( <> + { + setVisiable(false); + setRefresh2(!refresh2); + }} + >
@@ -334,18 +297,6 @@ const MemberLearnPage = () => { />
- {/*
-
课时学习记录
-
-
record.id} - /> - - */} ); }; From 27ec0e6c4adedf4a49c0fe74f5823e11574dc579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Sun, 23 Apr 2023 15:43:21 +0800 Subject: [PATCH 04/27] =?UTF-8?q?=E9=83=A8=E9=97=A8=E5=AD=A6=E5=91=98?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E8=BF=9B=E5=BA=A6=E5=88=97=E8=A1=A8=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E8=A1=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/departmentUser.tsx | 100 ++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 12 deletions(-) diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx index 96f916c..2db7ba7 100644 --- a/src/pages/member/departmentUser.tsx +++ b/src/pages/member/departmentUser.tsx @@ -9,12 +9,14 @@ import { Space, message, Table, + Select, } from "antd"; import { useNavigate, useLocation } from "react-router-dom"; import { BackBartment, DurationText } from "../../compenents"; import { dateFormat } from "../../utils/index"; import { user as member } from "../../api/index"; const { Column, ColumnGroup } = Table; +import * as XLSX from "xlsx"; interface DataType { id: React.Key; @@ -40,8 +42,14 @@ const MemberDepartmentProgressPage = () => { const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [id_card, setIdCard] = useState(""); + const [showMode, setShowMode] = useState("all"); const [did, setDid] = useState(Number(result.get("id"))); const [title, setTitle] = useState(String(result.get("title"))); + const [exportLoading, setExportLoading] = useState(false); + const modes = [ + { label: "全部", value: "all" }, + { label: "不显示公开课", value: "only_dep" }, + ]; useEffect(() => { setDid(Number(result.get("id"))); @@ -64,6 +72,7 @@ const MemberDepartmentProgressPage = () => { name: name, email: email, id_card: id_card, + show_mode: showMode, }) .then((res: any) => { setList(res.data.data); @@ -86,6 +95,7 @@ const MemberDepartmentProgressPage = () => { setName(""); setEmail(""); setIdCard(""); + setShowMode("all"); setPage(1); setSize(10); setList([]); @@ -130,14 +140,80 @@ const MemberDepartmentProgressPage = () => { } }; + const exportExcel = () => { + if (exportLoading) { + return; + } + setExportLoading(true); + let filter = { + sort_field: "", + sort_algo: "", + name: name, + email: email, + id_card: id_card, + show_mode: showMode, + }; + member.departmentProgress(did, page, total, filter).then((res: any) => { + if (res.data.total === 0) { + message.error("数据为空"); + setExportLoading(false); + return; + } + let filename = title + "学习进度.xlsx"; + let sheetName = "sheet1"; + let data = []; + let arr = ["学员"]; + courses.map((item: any) => { + arr.push(item.title); + }); + arr.push("总计课时"); + data.push(arr); + + res.data.data.forEach((item: any) => { + let arr = [item.name]; + courses.map((it: any) => { + if (records && records[item.id] && records[item.id][it.id]) { + if (records && records[item.id][it.id].is_finished === 1) { + arr.push("已完成"); + } else { + arr.push( + records && + records[item.id][it.id].finished_count + " / " + it.class_hour + ); + } + } else { + arr.push(0 + " / " + it.class_hour); + } + }); + arr.push(getFinishedHours(records[item.id]) + " / " + totalHour); + data.push(arr); + }); + + const jsonWorkSheet = XLSX.utils.json_to_sheet(data); + const workBook: XLSX.WorkBook = { + SheetNames: [sheetName], + Sheets: { + [sheetName]: jsonWorkSheet, + }, + }; + XLSX.writeFile(workBook, filename); + setExportLoading(false); + }); + }; + return (
-
- (以下表格内数字对应的是表头课程的“已学完课时数/总课时数”) +
+ +
+ (以下表格内数字对应的是表头课程的“已学完课时数/总课时数”) +
@@ -162,17 +238,17 @@ const MemberDepartmentProgressPage = () => { placeholder="请输入邮箱" />
- {/*
- 身份证号: - { - setIdCard(e.target.value); - }} +
+ 模式: + setDepValue(Number(value))} + options={deps} + /> +
+ )}
record.id} /> From ea934eae072cefbd2750e84fb9de76c46cd25cf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Mon, 24 Apr 2023 10:45:37 +0800 Subject: [PATCH 08/27] =?UTF-8?q?=E9=83=A8=E9=97=A8=E5=AD=A6=E9=99=A2?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/learn.tsx | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/pages/member/learn.tsx b/src/pages/member/learn.tsx index 7b4b8dd..ce75818 100644 --- a/src/pages/member/learn.tsx +++ b/src/pages/member/learn.tsx @@ -60,9 +60,9 @@ const MemberLearnPage = () => { if (depValue === 0) { return; } - let arr = courses[depValue]; - let arr2 = openCourses; - if (arr.length > 0) { + let arr = [...courses[depValue]]; + let arr2 = [...openCourses]; + if (arr2.length > 0) { var data = arr.concat(arr2); setCurrentCourses(data); } else { @@ -154,15 +154,20 @@ const MemberLearnPage = () => { setCourses(res.data.dep_courses); setOpenCourses(res.data.open_courses); setRecords(res.data.user_course_records); - let box: any = []; - res.data.departments.map((item: any) => { - box.push({ - label: item.name, - value: String(item.id), + if (res.data.departments.length > 0) { + let box: any = []; + res.data.departments.map((item: any) => { + box.push({ + label: item.name, + value: String(item.id), + }); }); - }); - setDepValue(Number(box[0].value)); - setDeps(box); + setDepValue(Number(box[0].value)); + setDeps(box); + } else { + setDepValue(0); + setDeps([]); + } setLoading2(false); }); }; From 0dfbaaf5a650abdcacb55208ce085c8606c08f53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Mon, 24 Apr 2023 10:49:25 +0800 Subject: [PATCH 09/27] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=87=E6=8D=A2tab=E5=88=B7=E6=96=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/system/config/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/system/config/index.tsx b/src/pages/system/config/index.tsx index 715fc05..a5f0112 100644 --- a/src/pages/system/config/index.tsx +++ b/src/pages/system/config/index.tsx @@ -31,7 +31,7 @@ const SystemConfigPage = () => { useEffect(() => { getDetail(); - }, []); + }, [tabKey]); const getDetail = () => { appConfig.appConfig().then((res: any) => { From b897dfffacee52e6410ed35d54304f6aca01db2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Mon, 24 Apr 2023 10:51:45 +0800 Subject: [PATCH 10/27] =?UTF-8?q?=E5=AD=A6=E5=91=98=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BF=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/template/学员批量导入模板.xlsx | Bin 9791 -> 9700 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/template/学员批量导入模板.xlsx b/public/template/学员批量导入模板.xlsx index 99483adb197ba00ab2f68de0f93fbae5b47b103b..c64a6a5284f65d02fd578e435d790e21bc7392ff 100644 GIT binary patch literal 9700 zcma)iWmKHY(k@Q$!QI^<5Zv9}-F0yH;7;)1K?1>Df=h4>?iSpgpy5Jtw&m>atlK}{ znKe_@@>ExKz5SGeG&lq-$V&^A`zG-6`A36!{$gThtl(&8@5HF^EQa>{!>gZSMqY`_ zoS+~e!eAgEfWM0w+S@a@+W<4;I;Fsw0U;*=CjdvgNepD_X6k^5_eP!jyk_Rj{>x-0 zz4=#~E$#qsaQU|AfOm$j;7#cAD`w|U4;Le3+Q9U*I>1+s^ou?BE^Lh>SYvk1c1`^# zISyf^dWE{0*b96j{r)e3K=h1I0jSuXSCO0*VGla5rqEeo`xNUHsdX*Tdf0$Lw9tQ)XDTB$^lJ*<`1kUanyvQ122)H|Okvs?aShd-`4q-GE&QF~f^D5JvSY%< z)6S3|Vt8)}k5iVwUTrM%Id1@7Yzv@Br+e3o%|Sjc4Xt ziAG9+0`f>Bek$=jvlfoBQq&uLq0w4%{E3JQp{?P$60NoPGw6B{Jb+_>6O#dQ0r3GJ>$ZW=7&Mj+@hgN#|mT?1MjakKP?DX3s10G~~ELrk`jEIG1+mS*h;FK4kA zh1#S~`I(&uIuM{(Ugv&6M!4(dC9-rR{1Lf{`%hE23mGd>Kbr#S*%YY%Folbgvz^V0 zG4kVdrGFXYNqE2~jn!t>r567Y;;hTxsX=MNnU+;ja$*ng)Qs&Efw{7~wa&}KbHX`r zm-KElj+$2@4s5Ka!!Tgb7I2ToV}tt{B8IJOcR>+0IRJIiAai+z440g;V7Q~!7+L7k zn!#|bki;bTMwzP(9dJUrN84DuPQ3aAdXPrad^AW9VgoX_hAsZf9vn17%k=mI`n;rP z{bcizWp$J0ISfB1FT3#jfCd`65}IyeG8Y{oBrnLQM~(pZaAsM)2ng1H$^KMf{u!WDwe1#|(0o7CJ{jD$HriWK zlc?as+e}cX9@th;aDtY|Wz2`v-d}Ooqhdmo6%)rrK4zY9vws-2C7>0&&Srh@A~s2t z1F^4z(XwK4+4p_ACkVwxLzjuzx_=kd!jr}C$#zESD!TzBgh;rIrRhyUYH!tOg90=D z0F>1db$)S5r+QtuOWs@b(L$6nB1wjgh_f`$kRngGP&(Y`J**pqVFq0Axz4^-O&! zZxr|j6{zjhIg$X^;Pz^mMSihfadDTbf}0T$B~h=(0E64cq|PK{{B~G%O|Iucvy(Zp z{!&CRb$rqJ&a1BFK(RtgmbRa+IDo|D|bgrQ> zvPxetWeK~}`UcDk5H_+qCzdSjPvcIG-as!e*+am>)nU=n#S~8QCGZ0;h&-5=-<r=P74F>5C*)`@k`_0Sy!T;%Z+UzN=nYo=4$HNU_hraKFmBmuiO8?!N?*yL>qell(-@reUjT3yy$esk1zm zpxM&UbR%Ar9U3gE+>$ko`@uSch#k=}3z7wUbAo6G?+)M$W@I0wkwFsD7nUz>&;;JM zi*OL7sJH*A*0Y3 zYQ@Obd@%09H}=N0M8Ib0be!ycGY*SYI%O$=T+0+Epx&N`6$q}Mx^Sw63QCScIgU;~ zD3ALcXtJTk98$;1p?lvz@4E@2%^J?sn4ehS*NLaS;>FY)!deRIGWPUMr?FQtpTl=_ zNu4e)T1AZ6wp2X}xTOJ%?lO1#f%Jd--^-Ez?0?P{rZ%R(9r<#=Xo^!v5D;4IUjgt> zv7f>}o$5$a+76c;(1y9|r*YUCXL5jy9S5%c?sIe|L|i&pY$&E7%kPelr zg0+07U&gl)=h!6@(wNO6BCs{Zr*6ELdy79l{ zjR*?DrEf3g_qDv2g0a~WQz@@{bLe@Ou($=a?k?Q7IbQint8AwDDzmE{N})00fUW7u zw)ONADAg;20&L7hbK^YSkt!&v`~A~pOJ_D(jFr> Rf1wZIopiF<1(B9}(AZXT} z;v}wH)7~uDIyD&I&t}8x>vysba%Wn7Ij<08Cf{?1)GeQ8U%Z&dh(*rxl5?+7J9@+B zxC4h)8e-&91RzZwbg`xv{EmGBDga6yPj+4+4RPu!4N z{d^yPj3n4qe;sl+{HFi-&{MMdLDcc=@42#V57Av__ zNmO0b$yrT(y;$64ZtnoJ70_gBGL>IJ8)Nm?tibTSPwm`_IWN!H4t0GPOdcjd=(NSpd4F_9n!-DPS zmo}O7^LA$ig_lhEvunD=93^`hKHP^fqs|*{xJJc?!!1%;0*(05jWu%nn|nUO`F0#q zis%aCD>T(Fxxv&A`cwm!KyO*8=`q5ZShixc^u7#hwLfCx6PKz&O)aAw1%0HXamQHy zR=3#sV5G8mG&guZRI_)5NICk+%uX_YcKt`_!jj^9QGVf*)qmSfE} zcR@W1rv91*NV9vJ)_b`b+cxo_iM9;I7RJjT+5$T;UQC6Dm$#^xp;eOb`qK&UpmaLj zarI{$2_I0gzZxM|L^P5F|R;`K{WK zpK%%%E?Z3nvR;e;Sg7S&21{W85lSKAP`IC%Z03xF$_(q!#x=cbX^~MkGa@QU?@5F1!2pjFJ!EI>u%Z>X zT+Q}%N(DB}Q=GoNO*4=jHCu9suyY>2jRIAJTgb)|IeLv(gUI8$21$Y;2NSG#=VA!)tx*{Jqn~te* z0t9W4hjRK`NG7ZS2pE}&{72~zFzzNGeZVo((3ZSJ)a+{ARq|8&JibP51^^jOTIO& z^JKT!i~i)(@dH|@^IDi$n@rS4n%=w$Xav5HBk zsA#k40c@%Dx+y>1@eG1>EZYFT^1!+LJ?8asj9W`W4BBHb8a_C(=vnLc#_xRJSMX2z z>u~RV)Elkuh5K-8r51{{lnw>^4!8m{)%HRgMv}xNv7u(Nts7T5Y?BZV4flHQ*xRev z;1PB1XUc7$VGFU~wey#W=9={wkhq&&S8>Wcy{!*6HsLVT4EZYNavuX}m|nI`--R1+M!e=rC%I*?+^m}1E6 zf)zialLK9yzscOyVLf7@D--ylvR-^1GIXAu^;{u>t=0>s%40dO{?d@xoDBCc88^wD zb#N;M!Wuwj%>l2rN}-;?g&Mc^J9MR17U{mtzHJN;1wGfU=@H)ja?a%q3IK_k4>1Vc@-uelZ4!N!@XD*Z&`dg z#wvQl?9dUdgBJ`5g=gerNMB9n(k-=3#zLz~CnX+N?ltxS z#of??zhUjG?~Icv0`H(E=r*&ZXtcE!fRq{={a8x;l-9$k6c5tV9f>M&iu|lIKw-q9 zEfaV;ORMe7=( zhLefmLai#e@mFy@TLo^bu6P#}*?1ZvH|VfQLWJ2Kn1jwfZ8QNFKrNFpH1!v20y?gt zDIQ9L`Wld~4S2ZTS^_3?#p2;AR?f=65uloiAVabaoRK3k*$5y*eH2s=tZ<>NxF0&P zosWEQ3q;=>X1#{yp#O}eT@dpFunBJy4Bvy!Hj&!MX~do^~l1`{xNtwoFK@H2D&;d*9(gy!yLD5auV^6te{l| zIdas3?hbNVL1FC9m!aDL%f)`lkJhA=vDMKT-I|MYS7M9h2)q%oetZllS&WIPb~{4I zlG2!iA8lxl=uZbIUk#?UExU;MYzI`v*n6OP`qdatA=KHbT;ag@YAsHM#Tp4Qic8B{ zHg-!6-@E(6gok2Ee6-o%e2l#NdMhK5IruH)QVNG#m~#F6q7y_|B=%b>Gjhm0t6?iP zV+=VPd#QrLDOdf$icr#?IIr4O6a~P!z3&LkA1t^YFFTWV7jTRb8v3y-j`6@c`QQ-# z?iz&c^_=gT^H;VoMDMzRmEcFc7A>qng*vX3wJVyLl`OB*Kt;dBYuOfX=)4YdcKg{As2W=a;G|oyghHZ#3mtz>n*+Wvsj5UMSP|pXhc>W-@>L)DV4YHzU4Cd zHt`rvf^W85vM0AD?7u|)&I9tb;<}(!EIJ%gHJFzc91_Y5H7u;s21*>$XALvaO(tUR z9(cxm{MtE-9;tPm(e;CRz-s<1HX@lLp_8fMB>Tx=7X?1P&Dr~rL=c}Y4p}@{Q|^^% zg9iy>tDY?~9JP>`Alzyl6tEkZtl=3qol#^SX#M06n30U4PistrGqFvm0$Wmz9AWl+ zZ@QyRNA9k^%?PYzvR*=7(0ZJPFG+o~itbQ@ZRBtgX(=n-|p6ln&O^wenf#IqUwSTKBp`D?9ORZRS-0ncsI7O34hb2X>s<~dE zQ@=qOlWC8Ipqh;g^XlU0Qm3$@OQ*1sJ^V8$PY}CJsgwM7C@C@Z^5k4@tqC;PL)l%) zTsNnKgTj~sa)Gu?eA&18zCk)#0Di~Y!pfvj<2=2&ppSh$IAtl@c!#gsA>=VO8|!W^ z=zD1ITctG;L zHjzR%DBsEP-&)*_?!dzHNPu^aWyI60pmUUnzMBLyB-2uuiOTMX=77O~fu%t52z*aj zVUWGp*VQYp-@@-}FG3$cMG5Nmi5w%EW62<9O-wlRl^f*Ak^Hh}0pv2+dTs2i>TvGU z*v8qUzGAb*C5q(Qr&_ZSsihwHTn{%gz0NU>(ZLT7dp$P|?Wx|^pmpH|U2yqy+*diM0tR^2{)C;*~KBoj8jo7^Lpv(5ssfDkGNz ztGy?!w2lzvn~>`aP2IjgGgER{8t{tV*zYrbPxuytS_}o0RBup*stzH%$UdoeU#cV( z$C;=luNq(x3A}G&U;~4PW=&OBPU3QmVX{~oQdCXL^(b)kfh_ZL%$?{4TuX_e*7o)d zbhuK6j~Oox>V(wqI9kCMrF~_~3uFGm>Y%Q8KZD4wq%BA~00q&&PNMx;Nvb zNhrq9QW~Rd=)4FSa_tX^M6upSG&e^OHeTm7(~n?VL#Um-?9)l8a>ZQT|I3&dL*fMd}VHl zHNCjJ-VcTssx|)duFY(?HMv%P6}@)B-yG1YH?}u-!AN0~oPIg|F?;jwYjDX!Wfk#_ z_IRUO_`T2?srq|Rwp&8>Tpp7O8QmxTf2P^Hq)S7d&o`WI&o`Vegv|3jjFW|-qp69q zv!kW0`Oj>-M|IV1LIKT}{mjq8>KiUvy<}7}!??*=PdBvBX_XLrnm}ahd(jbsCTcjW zUXAV7hMy%!_(_D=joG^1owWn;w6bn6d1_tp&bp@)E-Vb{DJ+%{ye<=&6J5Wi&jJh@lnDg@gC=gk zV@Pwt&``tGqorYE=t{I?K4MwX;)PqsV^JVW=2lU$?_5BBPNAZuLsdeBMW_Z%mZUmA z2)ev^jp0rL*Ftfsa_Z#~1IrWIx#=15P8~0%-B_)M%1Y0G8Ma7K)tHJ#AnpfDE`1TK zi&EAgu`K!iYg4@ld9qZGk78e36-B1PE-452?c}@XAyhtpWy$+qH|~2Rv>M=xB6a1! z?j+pLANIDUV46h?dO*>9$8NJ9D&3>s)bRe5oS)D>2$xOGX{RDYBYll0>oI`<=?+n{ zgOzV_DnCu7k7qe1@6H`&i66&sa+wl#{2LY*qxup#8ed2iw%%p1Z3L}5wD0f>sj1mX zSx_AFK_%79Jak%O*f{8Ow>&Zj_TH~nVFPE}%#9Mwu~Sn0ReZl5jO}Zt@28p)`c8$4 zf=9+R!8RY<)Vl_2jJua@GP zwSl+tE~a=iM1dMlJ~SOiFnjq}s8=3@&eMF9%hrH%e*guFS{!cBRN83Tk0kFilq;|U z9h$&_zKelgwjKs`2Z3^9uV<>9#>3;XezfE6(mgp(Zc~U4ZWaX8m~xV`6t=FE=gFn7 z3fR1_$g64Du-!jzo>ce1Bgp8o`{!O&M1C^HdnQc=UWk*wZsU#Y?5tm23ZoT=$(4E{O}%RD|B{LaGK_+kTTZnr575p!OT1P^A`^Yp!{BHtJr-hdt89B(epB zxg`S+sdrVHuMb-88(QYAObJR7;*KQuHV$%e@v7O^!bY{^YKb)`T=!3ZnNIu>=JcxX{|g zr*{Bu(po)nRZ+OW5EmR-+8?6(!`v55*2~z$wPn|biG-8( zq1nZb5GKS?vkN0WIUV1eJJA38juz?}NPS0B;P2Fj7l&)h)AN6;&%xpOHT*v^3@?&p z@ncfmOn}}OI(EBF)(stb-kFi)P}aofZHmm(R|?d4&7-zfK}EW$Cg^vmx7+Ef-X_hs z%S3w21u-oFE{XvHcKxnxil^T08p{C^rLEK89xC=-5Y7ANM)yI1+dPR23}kV--b!Cz zhjLRVSdQ~yuX{7ugYS*LgyT7ViQE5;<$vzG z{|(Nq(_E~hXBeBF;lz3Ve2%lf#9p|kKX&jR=vsYYg6};EYz-XuahQl^7R%J@&7Lju z0x_obvoL~|)=qEu(4V83?fhN`{zFjv3FXk@a^uMq5`~p9lY$8+6+FWo+Z0qA;t3LC zc9_j+eIzJCltd-%$w@uooMy80R4q8Q1B^+wA%R{U#jJrHbtE{{o(l6-vS@)8(hR;$ zv}eN37}w*~TgUaH>lJ~8drE~+huF=hR%6vV#MRvUW9HMOSF+KvyZoF3?qt1e)BR8w zTQXsS`k@{==plV_dQJr?mt{92X=ilYU7SAgo?MaI@I7hppHgC`h|Y%{sN;arT$os` zHx66BkphKhT2AKA&W-R)47{+S+QN3W&Zf4``YImwrcSyqPF|KcBnQTf7V@2;*H4o z)RK%djk*II8O%EDyjr;#TBX;NQne7+@OU~^=wxWJ)Gxg@$N~h_cx*B1OVh#uQOP86 z%5Bd3Z!?4D&JEWRWX51_g_UOeeC~+nBOn)2+^!lk zcR5*RL3^MG z#8nnaro^F4A3%@_2onEhI_vtl5HGUzDsBeq$Fcwhub`ZB(c2xnb|(T+5piDq zP35i&Wik8F9iK8*GK%K_x}L*hq|c% literal 9791 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 I_4C*N0j#hfdH?_b From 18f6056dc93f1d864630abdc1c55c78cf0198d8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Mon, 24 Apr 2023 11:11:18 +0800 Subject: [PATCH 11/27] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BEtab=E5=88=87?= =?UTF-8?q?=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/compenents/tree-category/index.tsx | 5 ---- src/compenents/tree-department/index.tsx | 1 - src/compenents/upload-image-button/index.tsx | 1 - src/compenents/upload-video-sub/index.tsx | 1 - src/pages/course/index.tsx | 27 +++++++++----------- src/pages/resource/images/index.tsx | 1 - src/pages/resource/videos/index.tsx | 1 - 7 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/compenents/tree-category/index.tsx b/src/compenents/tree-category/index.tsx index 4789496..aedc7ea 100644 --- a/src/compenents/tree-category/index.tsx +++ b/src/compenents/tree-category/index.tsx @@ -12,7 +12,6 @@ interface Option { interface PropInterface { type: string; text: string; - refresh: boolean; onUpdate: (keys: any, title: any) => void; } @@ -38,10 +37,6 @@ export const TreeCategory = (props: PropInterface) => { }); }, []); - useEffect(() => { - setSelectKey([]); - }, [props.refresh]); - const checkArr = (categories: any[], id: number) => { const arr = []; for (let i = 0; i < categories[id].length; i++) { diff --git a/src/compenents/tree-department/index.tsx b/src/compenents/tree-department/index.tsx index 6b38bca..3da48c5 100644 --- a/src/compenents/tree-department/index.tsx +++ b/src/compenents/tree-department/index.tsx @@ -24,7 +24,6 @@ export const TreeDepartment = (props: PropInterface) => { useEffect(() => { setLoading(true); - setSelectKey([]) department.departmentList().then((res: any) => { const departments = res.data.departments; const departCount = res.data.dep_user_count; diff --git a/src/compenents/upload-image-button/index.tsx b/src/compenents/upload-image-button/index.tsx index 3fb13c9..89fc6bb 100644 --- a/src/compenents/upload-image-button/index.tsx +++ b/src/compenents/upload-image-button/index.tsx @@ -110,7 +110,6 @@ export const UploadImageButton = (props: PropsInterface) => { { diff --git a/src/compenents/upload-video-sub/index.tsx b/src/compenents/upload-video-sub/index.tsx index 525564d..d7819fb 100644 --- a/src/compenents/upload-video-sub/index.tsx +++ b/src/compenents/upload-video-sub/index.tsx @@ -173,7 +173,6 @@ export const UploadVideoSub = (props: PropsInterface) => { setCategoryIds(keys)} diff --git a/src/pages/course/index.tsx b/src/pages/course/index.tsx index 527e80b..14cb94b 100644 --- a/src/pages/course/index.tsx +++ b/src/pages/course/index.tsx @@ -51,6 +51,7 @@ const CoursePage = () => { const [title, setTitle] = useState(""); const [dep_ids, setDepIds] = useState([]); const [selLabel, setLabel] = useState("全部分类"); + const [selDepLabel, setDepLabel] = useState("全部部门"); const [course_category_ids, setCourseCategoryIds] = useState({}); const [course_dep_ids, setCourseDepIds] = useState({}); const [categories, setCategories] = useState({}); @@ -69,7 +70,6 @@ const CoursePage = () => { children: (
{ @@ -96,7 +96,7 @@ const CoursePage = () => { text={"部门"} onUpdate={(keys: any, title: any) => { setDepIds(keys); - setLabel(title); + setDepLabel(title); }} />
@@ -283,11 +283,16 @@ const CoursePage = () => { }); }; - // 获取视频列表 + // 获取列表 const getList = () => { setLoading(true); - let categoryIds = category_ids.join(","); - let depIds = dep_ids.join(","); + let categoryIds = ""; + let depIds = ""; + if (tabKey === 1) { + categoryIds = category_ids.join(","); + } else { + depIds = dep_ids.join(","); + } course .courseList(page, size, "", "", title, depIds, categoryIds) .then((res: any) => { @@ -315,7 +320,7 @@ const CoursePage = () => { // 加载列表 useEffect(() => { getList(); - }, [category_ids, dep_ids, refresh, page, size]); + }, [category_ids, dep_ids, refresh, page, size, tabKey]); const paginationProps = { current: page, //当前页码 @@ -332,14 +337,6 @@ const CoursePage = () => { }; const onChange = (key: string) => { - setCategoryIds([]); - setDepIds([]); - if (Number(key) === 1) { - setLabel("全部分类"); - } else { - setLabel("全部部门"); - } - setRefresh(!refresh); setTabKey(Number(key)); }; @@ -357,7 +354,7 @@ const CoursePage = () => {
- 线上课 | {selLabel} + 线上课 | {tabKey === 1 ? selLabel : selDepLabel}
diff --git a/src/pages/resource/images/index.tsx b/src/pages/resource/images/index.tsx index f2f4f5f..4ca1430 100644 --- a/src/pages/resource/images/index.tsx +++ b/src/pages/resource/images/index.tsx @@ -150,7 +150,6 @@ const ResourceImagesPage = () => {
{ diff --git a/src/pages/resource/videos/index.tsx b/src/pages/resource/videos/index.tsx index e1fe13b..6d5a363 100644 --- a/src/pages/resource/videos/index.tsx +++ b/src/pages/resource/videos/index.tsx @@ -170,7 +170,6 @@ const ResourceVideosPage = () => {
{ From 391af1a4886de8750c88294831be7d23f95a6bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Mon, 24 Apr 2023 11:15:45 +0800 Subject: [PATCH 12/27] =?UTF-8?q?=E5=AD=A6=E5=91=98=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=90=8E=E5=88=B7=E6=96=B0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/import.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/member/import.tsx b/src/pages/member/import.tsx index 2c1ed21..caa4d37 100644 --- a/src/pages/member/import.tsx +++ b/src/pages/member/import.tsx @@ -58,6 +58,7 @@ const MemberImportPage = () => { user .storeBatch(2, data) .then(() => { + setErrorData([]); message.success("导入成功!"); navigate(-1); }) @@ -92,9 +93,9 @@ const MemberImportPage = () => { {errorData && errorData.map((item: any, index: number) => { return ( - +
{item} - +
); })}
From 86a16c97222c320c77aef2dd195472376fbfe6f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 10:15:07 +0800 Subject: [PATCH 13/27] =?UTF-8?q?input=20=E9=83=BD=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/compenents/create-rs-category/index.tsx | 1 + src/pages/change-password/index.tsx | 4 ++-- src/pages/course/compenents/create.tsx | 2 ++ src/pages/course/compenents/hour-update.tsx | 1 + src/pages/course/compenents/update.tsx | 1 + src/pages/course/index.tsx | 1 + src/pages/course/user.tsx | 2 ++ src/pages/department/compenents/create.tsx | 6 +++++- src/pages/login/index.tsx | 3 +++ src/pages/member/compenents/create.tsx | 13 +++++++++++-- src/pages/member/compenents/update.tsx | 19 ++++++++++++++++--- src/pages/member/departmentUser.tsx | 2 ++ src/pages/member/index.tsx | 2 ++ .../resource-category/compenents/create.tsx | 6 +++++- .../resource-category/compenents/update.tsx | 6 +++++- .../administrator/compenents/create.tsx | 13 +++++++++++-- .../administrator/compenents/update.tsx | 13 +++++++++++-- src/pages/system/administrator/index.tsx | 1 + .../system/adminroles/compenents/create.tsx | 1 + .../system/adminroles/compenents/update.tsx | 6 +++++- src/pages/system/config/index.tsx | 14 +++++++++++--- 21 files changed, 99 insertions(+), 18 deletions(-) diff --git a/src/compenents/create-rs-category/index.tsx b/src/compenents/create-rs-category/index.tsx index 4899a15..e1c8449 100644 --- a/src/compenents/create-rs-category/index.tsx +++ b/src/compenents/create-rs-category/index.tsx @@ -54,6 +54,7 @@ export const CreateResourceCategory = (props: PropInterface) => { onChange={(e) => { setName(e.target.value); }} + allowClear /> diff --git a/src/pages/change-password/index.tsx b/src/pages/change-password/index.tsx index 11aced1..b23e718 100644 --- a/src/pages/change-password/index.tsx +++ b/src/pages/change-password/index.tsx @@ -45,14 +45,14 @@ const ChangePasswordPage = () => { name="old_password" rules={[{ required: true, message: "请输入原密码!" }]} > - + - +
diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index a614298..4767cf8 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -129,6 +129,7 @@ const LoginPage = () => { style={{ width: 400, height: 54 }} placeholder="请输入管理员邮箱账号" onKeyUp={(e) => keyUp(e)} + allowClear />
@@ -137,6 +138,7 @@ const LoginPage = () => { onChange={(e) => { setPassword(e.target.value); }} + allowClear style={{ width: 400, height: 54 }} placeholder="请输入密码" /> @@ -149,6 +151,7 @@ const LoginPage = () => { onChange={(e) => { setCaptchaVal(e.target.value); }} + allowClear onKeyUp={(e) => keyUp(e)} />
diff --git a/src/pages/member/compenents/create.tsx b/src/pages/member/compenents/create.tsx index 2dc214d..09b9619 100644 --- a/src/pages/member/compenents/create.tsx +++ b/src/pages/member/compenents/create.tsx @@ -154,7 +154,11 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { name="email" rules={[{ required: true, message: "请输入登录邮箱!" }]} > - + = ({ open, onCancel }) => { rules={[{ required: true, message: "请输入登录密码!" }]} > @@ -182,7 +187,11 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { /> - +
diff --git a/src/pages/member/compenents/update.tsx b/src/pages/member/compenents/update.tsx index 477f77f..4ee2bf2 100644 --- a/src/pages/member/compenents/update.tsx +++ b/src/pages/member/compenents/update.tsx @@ -181,18 +181,27 @@ export const MemberUpdate: React.FC = ({ name="name" rules={[{ required: true, message: "请输入学员姓名!" }]} > - + - + @@ -212,7 +221,11 @@ export const MemberUpdate: React.FC = ({ /> - +
diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx index 2db7ba7..39982c4 100644 --- a/src/pages/member/departmentUser.tsx +++ b/src/pages/member/departmentUser.tsx @@ -223,6 +223,7 @@ const MemberDepartmentProgressPage = () => { onChange={(e) => { setName(e.target.value); }} + allowClear style={{ width: 160 }} placeholder="请输入姓名关键字" /> @@ -234,6 +235,7 @@ const MemberDepartmentProgressPage = () => { onChange={(e) => { setEmail(e.target.value); }} + allowClear style={{ width: 160 }} placeholder="请输入邮箱" /> diff --git a/src/pages/member/index.tsx b/src/pages/member/index.tsx index 331cf28..bd12c2f 100644 --- a/src/pages/member/index.tsx +++ b/src/pages/member/index.tsx @@ -320,6 +320,7 @@ const MemberPage = () => { }} style={{ width: 160 }} placeholder="请输入姓名关键字" + allowClear />
@@ -331,6 +332,7 @@ const MemberPage = () => { }} style={{ width: 160 }} placeholder="请输入邮箱账号" + allowClear />
diff --git a/src/pages/resource/resource-category/compenents/create.tsx b/src/pages/resource/resource-category/compenents/create.tsx index d58d80f..09d4979 100644 --- a/src/pages/resource/resource-category/compenents/create.tsx +++ b/src/pages/resource/resource-category/compenents/create.tsx @@ -147,7 +147,11 @@ export const ResourceCategoryCreate: React.FC = ({ name="name" rules={[{ required: true, message: "请输入分类名称!" }]} > - +
diff --git a/src/pages/resource/resource-category/compenents/update.tsx b/src/pages/resource/resource-category/compenents/update.tsx index 28bac87..aa5d7e7 100644 --- a/src/pages/resource/resource-category/compenents/update.tsx +++ b/src/pages/resource/resource-category/compenents/update.tsx @@ -169,7 +169,11 @@ export const ResourceCategoryUpdate: React.FC = ({ name="name" rules={[{ required: true, message: "请输入分类名称!" }]} > - +
diff --git a/src/pages/system/administrator/compenents/create.tsx b/src/pages/system/administrator/compenents/create.tsx index e447677..641cfa6 100644 --- a/src/pages/system/administrator/compenents/create.tsx +++ b/src/pages/system/administrator/compenents/create.tsx @@ -125,14 +125,22 @@ export const SystemAdministratorCreate: React.FC = ({ name="name" rules={[{ required: true, message: "请输入管理员姓名!" }]} > - + - + = ({ rules={[{ required: true, message: "请输入登录密码!" }]} > diff --git a/src/pages/system/administrator/compenents/update.tsx b/src/pages/system/administrator/compenents/update.tsx index c87be6c..f069316 100644 --- a/src/pages/system/administrator/compenents/update.tsx +++ b/src/pages/system/administrator/compenents/update.tsx @@ -133,18 +133,27 @@ export const SystemAdministratorUpdate: React.FC = ({ name="name" rules={[{ required: true, message: "请输入管理员姓名!" }]} > - + - + diff --git a/src/pages/system/administrator/index.tsx b/src/pages/system/administrator/index.tsx index ab0c9c9..6161916 100644 --- a/src/pages/system/administrator/index.tsx +++ b/src/pages/system/administrator/index.tsx @@ -283,6 +283,7 @@ const SystemAdministratorPage = () => { onChange={(e) => { setName(e.target.value); }} + allowClear style={{ width: 160 }} placeholder="请输入管理员姓名" /> diff --git a/src/pages/system/adminroles/compenents/create.tsx b/src/pages/system/adminroles/compenents/create.tsx index 8525b2a..8bb1d60 100644 --- a/src/pages/system/adminroles/compenents/create.tsx +++ b/src/pages/system/adminroles/compenents/create.tsx @@ -180,6 +180,7 @@ export const SystemAdminrolesCreate: React.FC = ({ diff --git a/src/pages/system/adminroles/compenents/update.tsx b/src/pages/system/adminroles/compenents/update.tsx index 555cae1..7b2d750 100644 --- a/src/pages/system/adminroles/compenents/update.tsx +++ b/src/pages/system/adminroles/compenents/update.tsx @@ -191,7 +191,11 @@ export const SystemAdminrolesUpdate: React.FC = ({ name="name" rules={[{ required: true, message: "请输入角色名!" }]} > - + { label="网站页脚" name="system.pc_index_footer_msg" > - + {/* { - + { label="跑马灯文字颜色" name="player.bullet_secret_color" > - + Date: Tue, 25 Apr 2023 10:16:59 +0800 Subject: [PATCH 14/27] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E6=B8=85=E6=A5=9A=E5=AD=A6=E4=B9=A0=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=96=87=E6=A1=88=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/course/user.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/course/user.tsx b/src/pages/course/user.tsx index 5aad9d4..93a83fd 100644 --- a/src/pages/course/user.tsx +++ b/src/pages/course/user.tsx @@ -190,7 +190,7 @@ const CourseUserPage = () => {
Date: Tue, 25 Apr 2023 10:17:54 +0800 Subject: [PATCH 15/27] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E6=B8=85=E6=A5=9A=E5=AD=A6=E4=B9=A0=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=9B=B8=E5=85=B3=E6=96=87=E6=A1=88=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/course/user.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/course/user.tsx b/src/pages/course/user.tsx index 93a83fd..2b9fb42 100644 --- a/src/pages/course/user.tsx +++ b/src/pages/course/user.tsx @@ -149,13 +149,13 @@ const CourseUserPage = () => { // 删除学员 const delItem = () => { if (selectedRowKeys.length === 0) { - message.error("请选择学员后再清除"); + message.error("请选择学员后再重置"); return; } confirm({ title: "操作确认", icon: , - content: "确认清除选中学员学习记录?", + content: "确认重置选中学员学习记录?", centered: true, okText: "确认", cancelText: "取消", From 86ab6b7751118913052a53502f9f4dc57c42434c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 10:20:10 +0800 Subject: [PATCH 16/27] =?UTF-8?q?=E5=AD=A6=E5=91=98=E5=AD=A6=E4=B9=A0?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=98=8E=E7=BB=86=E4=B8=AD=E6=96=87=E6=A1=88?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/compenents/progress.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/member/compenents/progress.tsx b/src/pages/member/compenents/progress.tsx index 6e4ffc2..82fb20a 100644 --- a/src/pages/member/compenents/progress.tsx +++ b/src/pages/member/compenents/progress.tsx @@ -148,7 +148,7 @@ export const MemberLearnProgressDialog: React.FC = ({ {records && records[record.id] ? ( = ({ confirm({ title: "操作确认", icon: , - content: "确认删除此课程下所有课时的学习记录?", + content: "确认重置此课程下所有课时的学习记录?", centered: true, okText: "确认", cancelText: "取消", @@ -192,7 +192,7 @@ export const MemberLearnProgressDialog: React.FC = ({ confirm({ title: "操作确认", icon: , - content: "确认删除此课时的学习记录?", + content: "确认重置此课时的学习记录?", centered: true, okText: "确认", cancelText: "取消", @@ -224,7 +224,7 @@ export const MemberLearnProgressDialog: React.FC = ({
Date: Tue, 25 Apr 2023 10:28:22 +0800 Subject: [PATCH 17/27] =?UTF-8?q?footer=E7=BB=84=E4=BB=B6=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/compenents/footer/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compenents/footer/index.tsx b/src/compenents/footer/index.tsx index 4dbc669..aa52911 100644 --- a/src/compenents/footer/index.tsx +++ b/src/compenents/footer/index.tsx @@ -8,7 +8,7 @@ export const Footer: React.FC = () => { style={{ width: "100%", backgroundColor: "#F6F6F6", - height: 232, + height: 166, paddingTop: 80, textAlign: "center", }} From e0e1192fb777e4b14bac2b4b6ca458a05e35ecf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 10:32:42 +0800 Subject: [PATCH 18/27] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=A6=82=E8=A7=88?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E4=BA=A7=E5=93=81=E6=96=87=E6=A1=A3=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E9=93=BE=E6=8E=A5=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/dashboard/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/dashboard/index.tsx b/src/pages/dashboard/index.tsx index efa7120..d07a251 100644 --- a/src/pages/dashboard/index.tsx +++ b/src/pages/dashboard/index.tsx @@ -516,7 +516,7 @@ const DashboardPage = () => {
From 6bbe2cbeecfd7a035686d67abf908efb99460696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 10:37:00 +0800 Subject: [PATCH 19/27] =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AF=BE=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E8=AF=BE=E7=A8=8B=E6=97=B6=E9=83=A8=E9=97=A8=EF=BC=8C?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E7=8B=AC=E7=AB=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/course/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/course/index.tsx b/src/pages/course/index.tsx index e09c0e4..6f15feb 100644 --- a/src/pages/course/index.tsx +++ b/src/pages/course/index.tsx @@ -406,8 +406,8 @@ const CoursePage = () => { rowKey={(record) => record.id} /> { setCreateVisible(false); From e133c724f32591d925db85a60a52549a1a0d8059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 10:45:16 +0800 Subject: [PATCH 20/27] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E5=AD=A6=E5=91=98?= =?UTF-8?q?=E6=90=BA=E5=B8=A6=E9=83=A8=E9=97=A8id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/compenents/create.tsx | 11 ++++++++--- src/pages/member/index.tsx | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pages/member/compenents/create.tsx b/src/pages/member/compenents/create.tsx index 09b9619..6eff2bf 100644 --- a/src/pages/member/compenents/create.tsx +++ b/src/pages/member/compenents/create.tsx @@ -8,6 +8,7 @@ import { ValidataCredentials } from "../../../utils/index"; interface PropInterface { open: boolean; + depIds: any; onCancel: () => void; } @@ -17,7 +18,11 @@ interface Option { children?: Option[]; } -export const MemberCreate: React.FC = ({ open, onCancel }) => { +export const MemberCreate: React.FC = ({ + open, + depIds, + onCancel, +}) => { const [form] = Form.useForm(); const [loading, setLoading] = useState(true); const [departments, setDepartments] = useState([]); @@ -39,10 +44,10 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { password: "", avatar: memberDefaultAvatar, idCard: "", - dep_ids: [], + dep_ids: depIds, }); setAvatar(memberDefaultAvatar); - }, [form, open]); + }, [form, open, depIds]); const getParams = () => { department.departmentList().then((res: any) => { diff --git a/src/pages/member/index.tsx b/src/pages/member/index.tsx index bd12c2f..cc2ced2 100644 --- a/src/pages/member/index.tsx +++ b/src/pages/member/index.tsx @@ -361,6 +361,7 @@ const MemberPage = () => { /> { setCreateVisible(false); setRefresh(!refresh); From 1900e55d0399e32da66324c22f493283e2e2007d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 10:58:43 +0800 Subject: [PATCH 21/27] =?UTF-8?q?=E6=8A=80=E6=9C=AF=E9=83=A8=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E8=BF=9B=E5=BA=A6=E8=A1=A8=E6=A0=BC=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/departmentUser.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx index 39982c4..41e1131 100644 --- a/src/pages/member/departmentUser.tsx +++ b/src/pages/member/departmentUser.tsx @@ -281,7 +281,7 @@ const MemberDepartmentProgressPage = () => { title="学员" dataIndex="name" key="name" - width={100} + width={150} render={(_, record: any) => ( <> { ellipsis={true} dataIndex="id" key={item.id} - width={100} + width={168} render={(_, record: any) => ( <> {records[record.id] && records[record.id][item.id] ? ( @@ -329,7 +329,7 @@ const MemberDepartmentProgressPage = () => { title="总计课时" dataIndex="id" key="id" - width={100} + width={150} render={(_, record: any) => ( <> {getFinishedHours(records[record.id])} /{" "} From 5f26441b8cb0324b5d68c3d295a3740579b4198f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 11:17:41 +0800 Subject: [PATCH 22/27] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=94=99=E8=AF=AFtoast?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/login/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index 4767cf8..f3fe4d7 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -73,7 +73,6 @@ const LoginPage = () => { navigate("/", { replace: true }); } catch (e) { - message.error("登录出现错误"); console.error("错误信息", e); setLoading(false); fetchImageCaptcha(); //刷新图形验证码 From d85ba55b9c073fb612cd0c12ec05d2c37a819bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 11:26:46 +0800 Subject: [PATCH 23/27] =?UTF-8?q?=E6=8A=80=E6=9C=AF=E9=83=A8=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E8=BF=9B=E5=BA=A6=E8=A1=A8=E6=A0=BC=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/departmentUser.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx index 41e1131..f6e7eb0 100644 --- a/src/pages/member/departmentUser.tsx +++ b/src/pages/member/departmentUser.tsx @@ -174,7 +174,7 @@ const MemberDepartmentProgressPage = () => { courses.map((it: any) => { if (records && records[item.id] && records[item.id][it.id]) { if (records && records[item.id][it.id].is_finished === 1) { - arr.push("已完成"); + arr.push("已学完"); } else { arr.push( records && @@ -306,7 +306,7 @@ const MemberDepartmentProgressPage = () => { <> {records[record.id] && records[record.id][item.id] ? ( records[record.id][item.id].is_finished === 1 ? ( - 已完成 + 已学完 ) : ( <> From a656f21cbc4685aeb3a62cefab7acdb53b01623f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Tue, 25 Apr 2023 11:28:01 +0800 Subject: [PATCH 24/27] =?UTF-8?q?=E6=8A=80=E6=9C=AF=E9=83=A8=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E8=BF=9B=E5=BA=A6=E7=AD=9B=E9=80=89=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/departmentUser.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx index f6e7eb0..e39044f 100644 --- a/src/pages/member/departmentUser.tsx +++ b/src/pages/member/departmentUser.tsx @@ -228,7 +228,7 @@ const MemberDepartmentProgressPage = () => { placeholder="请输入姓名关键字" />
-
+ {/*
邮箱: { onChange={(value: string) => setShowMode(value)} options={modes} /> -
+
*/}