feat
parent
f57bb95d40
commit
eab086a874
|
|
@ -17,7 +17,7 @@ const formatVideoDuration = (hours) => {
|
||||||
|
|
||||||
/** 班级详情 — 课程 Tab:班级课程查询 */
|
/** 班级详情 — 课程 Tab:班级课程查询 */
|
||||||
function ClassCourseTab(props) {
|
function ClassCourseTab(props) {
|
||||||
const { classId } = props;
|
const { classId, history } = props;
|
||||||
const [searchForm] = Form.useForm();
|
const [searchForm] = Form.useForm();
|
||||||
const [query, setQuery] = useState({ current: 1, size: 10 });
|
const [query, setQuery] = useState({ current: 1, size: 10 });
|
||||||
const [selectOpen, setSelectOpen] = useState(false);
|
const [selectOpen, setSelectOpen] = useState(false);
|
||||||
|
|
@ -84,7 +84,7 @@ function ClassCourseTab(props) {
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
size="small"
|
size="small"
|
||||||
onClick={() => message.info("课程查看功能待接入")}
|
onClick={() => {history.push(`/container/EduTraining/CourseManage/Add?courseId=${record.courseId}&mode=view`)}}
|
||||||
>
|
>
|
||||||
查看
|
查看
|
||||||
</Button>
|
</Button>
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,8 @@ function ClassPaperConfig(props) {
|
||||||
/** 班级已绑定的试卷 id(来自班级详情) */
|
/** 班级已绑定的试卷 id(来自班级详情) */
|
||||||
const [paperId, setPaperId] = useState("");
|
const [paperId, setPaperId] = useState("");
|
||||||
const [configOpen, setConfigOpen] = useState(false);
|
const [configOpen, setConfigOpen] = useState(false);
|
||||||
|
/** 新增/编辑试卷弹窗开关 */
|
||||||
|
const [addOpen, setAddOpen] = useState(false);
|
||||||
/** 试卷详情/预览弹窗展示的试卷 id */
|
/** 试卷详情/预览弹窗展示的试卷 id */
|
||||||
const [previewPaperId, setPreviewPaperId] = useState("");
|
const [previewPaperId, setPreviewPaperId] = useState("");
|
||||||
|
|
||||||
|
|
@ -95,18 +97,12 @@ function ClassPaperConfig(props) {
|
||||||
|
|
||||||
<PaperConfigModal
|
<PaperConfigModal
|
||||||
open={configOpen}
|
open={configOpen}
|
||||||
classId={classId}
|
|
||||||
paperId={paperId}
|
paperId={paperId}
|
||||||
paper={props.paper}
|
paper={props.paper}
|
||||||
courseware={props.courseware}
|
|
||||||
basicLoading={props.paper?.paperBasicLoading}
|
basicLoading={props.paper?.paperBasicLoading}
|
||||||
fetchBasicInfo={props.paperBasicInfo}
|
fetchBasicInfo={props.paperBasicInfo}
|
||||||
paperPage={props.paperPage}
|
|
||||||
paperRuleGenerate={props.paperRuleGenerate}
|
|
||||||
coursewarePage={props.coursewarePage}
|
|
||||||
classBindPaper={props.classBindPaper}
|
|
||||||
onPreview={(id) => setPreviewPaperId(id)}
|
onPreview={(id) => setPreviewPaperId(id)}
|
||||||
onBound={loadClassPaper}
|
onAdd={() => setAddOpen(true)}
|
||||||
resetModelState={props.resetModelState}
|
resetModelState={props.resetModelState}
|
||||||
onClose={() => setConfigOpen(false)}
|
onClose={() => setConfigOpen(false)}
|
||||||
/>
|
/>
|
||||||
|
|
@ -120,6 +116,25 @@ function ClassPaperConfig(props) {
|
||||||
resetModelState={props.resetModelState}
|
resetModelState={props.resetModelState}
|
||||||
onClose={() => setPreviewPaperId("")}
|
onClose={() => setPreviewPaperId("")}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<PaperAddModal
|
||||||
|
open={addOpen}
|
||||||
|
mode={paperId ? "edit" : "add"}
|
||||||
|
classId={classId}
|
||||||
|
paper={props.paper}
|
||||||
|
courseware={props.courseware}
|
||||||
|
paperPage={props.paperPage}
|
||||||
|
paperRuleGenerate={props.paperRuleGenerate}
|
||||||
|
coursewarePage={props.coursewarePage}
|
||||||
|
classBindPaper={props.classBindPaper}
|
||||||
|
onPreview={(id) => setPreviewPaperId(id)}
|
||||||
|
resetModelState={props.resetModelState}
|
||||||
|
onCancel={() => setAddOpen(false)}
|
||||||
|
onSuccess={() => {
|
||||||
|
setAddOpen(false);
|
||||||
|
loadClassPaper();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -127,28 +142,20 @@ function ClassPaperConfig(props) {
|
||||||
/** 配置试卷弹窗:已绑定时展示试卷信息(查看/编辑/下载),未绑定时提供新增 */
|
/** 配置试卷弹窗:已绑定时展示试卷信息(查看/编辑/下载),未绑定时提供新增 */
|
||||||
function PaperConfigModal({
|
function PaperConfigModal({
|
||||||
open,
|
open,
|
||||||
classId,
|
|
||||||
paperId,
|
paperId,
|
||||||
paper,
|
paper,
|
||||||
courseware,
|
|
||||||
basicLoading,
|
basicLoading,
|
||||||
fetchBasicInfo,
|
fetchBasicInfo,
|
||||||
paperPage,
|
|
||||||
paperRuleGenerate,
|
|
||||||
coursewarePage,
|
|
||||||
classBindPaper,
|
|
||||||
onPreview,
|
onPreview,
|
||||||
onBound,
|
onAdd,
|
||||||
resetModelState,
|
resetModelState,
|
||||||
onClose,
|
onClose,
|
||||||
}) {
|
}) {
|
||||||
const [basicInfo, setBasicInfo] = useState(null);
|
const [basicInfo, setBasicInfo] = useState(null);
|
||||||
const [addOpen, setAddOpen] = useState(false);
|
|
||||||
|
|
||||||
// 打开且有绑定试卷时才查询基本信息;paperId 变化(换绑)后重新查询
|
// 打开且有绑定试卷时才查询基本信息;paperId 变化(换绑)后重新查询
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!open) {
|
if (!open) {
|
||||||
setAddOpen(false);
|
|
||||||
resetModelState?.(NS_PAPER, { paperBasicLoading: false });
|
resetModelState?.(NS_PAPER, { paperBasicLoading: false });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -187,7 +194,7 @@ function PaperConfigModal({
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
size="small"
|
size="small"
|
||||||
onClick={() => setAddOpen(true)}
|
onClick={() => onAdd()}
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -224,7 +231,7 @@ function PaperConfigModal({
|
||||||
type="primary"
|
type="primary"
|
||||||
icon={<PlusOutlined />}
|
icon={<PlusOutlined />}
|
||||||
style={{ marginBottom: 12 }}
|
style={{ marginBottom: 12 }}
|
||||||
onClick={() => setAddOpen(true)}
|
onClick={() => onAdd()}
|
||||||
>
|
>
|
||||||
新增
|
新增
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -245,25 +252,6 @@ function PaperConfigModal({
|
||||||
),
|
),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<PaperAddModal
|
|
||||||
open={addOpen}
|
|
||||||
mode={paperId ? "edit" : "add"}
|
|
||||||
classId={classId}
|
|
||||||
paper={paper}
|
|
||||||
courseware={courseware}
|
|
||||||
paperPage={paperPage}
|
|
||||||
paperRuleGenerate={paperRuleGenerate}
|
|
||||||
coursewarePage={coursewarePage}
|
|
||||||
classBindPaper={classBindPaper}
|
|
||||||
onPreview={onPreview}
|
|
||||||
resetModelState={resetModelState}
|
|
||||||
onCancel={() => setAddOpen(false)}
|
|
||||||
onSuccess={() => {
|
|
||||||
setAddOpen(false);
|
|
||||||
onBound();
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Modal>
|
</Modal>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import SearchForm from "~/components/SearchForm";
|
||||||
import TableAction from "@cqsjjb/jjb-react-admin-component/TableAction";
|
import TableAction from "@cqsjjb/jjb-react-admin-component/TableAction";
|
||||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
import { NS_COURSEWARE } from "~/enumerate/namespace";
|
import { NS_COURSEWARE } from "~/enumerate/namespace";
|
||||||
|
import StaffViewModal from "~/components/StaffViewModal";
|
||||||
import {
|
import {
|
||||||
CLASS_STUDENT_EXAM_STATUS_OPTIONS,
|
CLASS_STUDENT_EXAM_STATUS_OPTIONS,
|
||||||
CLASS_STUDENT_FACE_AUTH_MAP,
|
CLASS_STUDENT_FACE_AUTH_MAP,
|
||||||
|
|
@ -35,6 +36,7 @@ function ClassStudentTab(props) {
|
||||||
const [searchForm] = Form.useForm();
|
const [searchForm] = Form.useForm();
|
||||||
const [query, setQuery] = useState({ current: 1, size: 10 });
|
const [query, setQuery] = useState({ current: 1, size: 10 });
|
||||||
const [selectOpen, setSelectOpen] = useState(false);
|
const [selectOpen, setSelectOpen] = useState(false);
|
||||||
|
const [viewId, setViewId] = useState("");
|
||||||
const {
|
const {
|
||||||
classStudentList: dataSource,
|
classStudentList: dataSource,
|
||||||
classStudentTotal: total,
|
classStudentTotal: total,
|
||||||
|
|
@ -106,7 +108,7 @@ function ClassStudentTab(props) {
|
||||||
title: "操作人",
|
title: "操作人",
|
||||||
dataIndex: "createName",
|
dataIndex: "createName",
|
||||||
width: 100,
|
width: 100,
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
|
|
@ -117,7 +119,9 @@ function ClassStudentTab(props) {
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
size="small"
|
size="small"
|
||||||
onClick={() => message.info("学员查看功能待接入")}
|
onClick={() => {
|
||||||
|
setViewId(record.fileNumber || record.id);
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
查看
|
查看
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -225,7 +229,11 @@ function ClassStudentTab(props) {
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
<StaffViewModal
|
||||||
|
open={!!viewId}
|
||||||
|
currentId={viewId}
|
||||||
|
onCancel={() => setViewId("")}
|
||||||
|
/>
|
||||||
<StudentSelectModal
|
<StudentSelectModal
|
||||||
open={selectOpen}
|
open={selectOpen}
|
||||||
loading={props.courseware?.orgPersonnelLoading}
|
loading={props.courseware?.orgPersonnelLoading}
|
||||||
|
|
@ -233,15 +241,16 @@ function ClassStudentTab(props) {
|
||||||
dataSource={props.courseware?.orgPersonnelList}
|
dataSource={props.courseware?.orgPersonnelList}
|
||||||
total={props.courseware?.orgPersonnelTotal}
|
total={props.courseware?.orgPersonnelTotal}
|
||||||
requestPage={props.orgPersonnelPage}
|
requestPage={props.orgPersonnelPage}
|
||||||
selectedPhones={tableSource.map((item) => item.phone)}
|
tableSource={tableSource}
|
||||||
onOk={async (rows) => {
|
onOk={async (rows) => {
|
||||||
// 批量新增班级学员
|
// 批量新增班级学员
|
||||||
const res = await props.classStudentBatchSave(
|
const res = await props.classStudentBatchSave(
|
||||||
rows.map(({ userName, deptName, account }) => ({
|
rows.map(({ userName, deptName, account, fileNumber, id }) => ({
|
||||||
classId,
|
classId,
|
||||||
studentName: userName,
|
studentName: userName,
|
||||||
department: deptName,
|
department: deptName,
|
||||||
phone: account,
|
phone: account,
|
||||||
|
fileNumber: fileNumber|| id,
|
||||||
})),
|
})),
|
||||||
);
|
);
|
||||||
if (res?.success === false) return;
|
if (res?.success === false) return;
|
||||||
|
|
@ -263,19 +272,21 @@ function StudentSelectModal({
|
||||||
dataSource,
|
dataSource,
|
||||||
total,
|
total,
|
||||||
requestPage,
|
requestPage,
|
||||||
selectedPhones,
|
tableSource,
|
||||||
onOk,
|
onOk,
|
||||||
onCancel,
|
onCancel,
|
||||||
}) {
|
}) {
|
||||||
const [query, setQuery] = useState({ current: 1, size: 10 });
|
const [query, setQuery] = useState({ current: 1, size: 10 });
|
||||||
const [keyword, setKeyword] = useState("");
|
const [keyword, setKeyword] = useState("");
|
||||||
const [selectedRows, setSelectedRows] = useState([]);
|
const [selectedRows, setSelectedRows] = useState([]);
|
||||||
|
const ids= tableSource.map(item=>item.fileNumber);
|
||||||
|
|
||||||
|
|
||||||
const handleSearch = (params) => {
|
const handleSearch = (params) => {
|
||||||
setQuery(params);
|
setQuery(params);
|
||||||
requestPage({
|
requestPage({
|
||||||
...params,
|
...params,
|
||||||
employmentStatusCode: 1,
|
employmentStatusCode: 1,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -345,7 +356,7 @@ function StudentSelectModal({
|
||||||
preserveSelectedRowKeys: true,
|
preserveSelectedRowKeys: true,
|
||||||
selectedRowKeys: selectedRows.map((r) => r.id),
|
selectedRowKeys: selectedRows.map((r) => r.id),
|
||||||
getCheckboxProps: (record) => ({
|
getCheckboxProps: (record) => ({
|
||||||
disabled: selectedPhones.includes(record.account),
|
disabled: ids.includes(record.fileNumber || record.id),
|
||||||
}),
|
}),
|
||||||
onChange: (_, rows) => setSelectedRows(rows),
|
onChange: (_, rows) => setSelectedRows(rows),
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -275,7 +275,7 @@ function ClassAddPage(props) {
|
||||||
label: "课程",
|
label: "课程",
|
||||||
disabled: !unlocked,
|
disabled: !unlocked,
|
||||||
children: unlocked ? (
|
children: unlocked ? (
|
||||||
<CourseTab classId={savedClassId} />
|
<CourseTab classId={savedClassId} history={props.history} />
|
||||||
) : null,
|
) : null,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue