feat:增加课程待审核界面搜索、审核意见、数据刷新及概览部分数据展示

This commit is contained in:
wuyx
2022-11-30 13:44:45 +08:00
parent 8d8ae431f1
commit a2e699571c
2 changed files with 209 additions and 210 deletions

View File

@@ -12,6 +12,9 @@ export const listView = (obj) => http.post('/admin/project/listView', obj)
//获取面授课已审核列表 //获取面授课已审核列表
export const courseListView = (obj) => http.post('/admin/offcourse/listReview', obj) export const courseListView = (obj) => http.post('/admin/offcourse/listReview', obj)
//获取面授课详情
export const courseDetail = (offcourseId) => http.post(`/admin/offcourse/detail?offcourseId=${offcourseId}`)
//项目审核日志 //项目审核日志
export const auditList = (obj) => http.post('/admin/project/auditList', obj) export const auditList = (obj) => http.post('/admin/project/auditList', obj)

View File

@@ -14,39 +14,28 @@
<div class="tmplh_inp"> <div class="tmplh_inp">
<div class="inpbox"> <div class="inpbox">
<div class="inpbox1"> <div class="inpbox1">
<a-select <a-select v-model:value="valueproj" :options="[{ label: '请选择内容分类', value: '' }, ...calssifyList]" />
v-model:value="valueproj"
:options="[{label:'请选择内容分类',value:''},...calssifyList]"
/>
</div> </div>
<div class="inpbox1"> <div class="inpbox1">
<a-input <a-input v-model:value="valuecreater" style="
v-model:value="valuecreater"
style="
width: 270px; width: 270px;
height: 40px; height: 40px;
border-radius: 8px; border-radius: 8px;
margin-right: 14px; margin-right: 14px;
" " placeholder="请输入创建人" />
placeholder="请输入创建人"
/>
</div> </div>
<div class="inpbox1"> <div class="inpbox1">
<a-input <a-input v-model:value="valuename" style="
v-model:value="valuename"
style="
width: 270px; width: 270px;
height: 40px; height: 40px;
border-radius: 8px; border-radius: 8px;
margin-right: 14px; margin-right: 14px;
" " placeholder="请输入名称" />
placeholder="请输入名称"
/>
</div> </div>
</div> </div>
</div> </div>
<div class="tmplh_btn"> <div class="tmplh_btn">
<div class="btn btn1" @click="getFaceList"> <div class="btn btn1" @click="searchList">
<div class="search"></div> <div class="search"></div>
<div class="btnText btnText1">搜索</div> <div class="btnText btnText1">搜索</div>
</div> </div>
@@ -58,40 +47,20 @@
</div> </div>
<div class="tmpl_body"> <div class="tmpl_body">
<div class="tmpl_tabbox"> <div class="tmpl_tabbox">
<a-table <a-table :columns="columns1" :data-source="tableData1" :loading="tableDataTotal === -1 ? true : false"
:columns="columns1" expandRowByClick="true" @expand="expandTable" :scroll="{ x: 1300 }" :pagination="false" />
:data-source="tableData1"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
@expand="expandTable"
:scroll="{ x: 1300 }"
:pagination="false"
/>
</div> </div>
<div class="tableBox"> <div class="tableBox">
<div class="pa"> <div class="pa">
<a-pagination <a-pagination v-if="total > 10" showSizeChanger="true" show-quick-jumper :pageSize="pageSize"
v-if="total > 10" v-model:current="currentPage" :total="total" class="pagination" @change="changePagination" />
showSizeChanger="true"
show-quick-jumper
:pageSize="pageSize"
v-model:current="currentPage"
:total="total"
class="pagination"
@change="changePagination"
/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- 审核弹窗 --> <!-- 审核弹窗 -->
<a-modal <a-modal v-model:visible="courAuditModal" :footer="null" :closable="closeBack" wrapClassName="courAuditModal"
v-model:visible="courAuditModal" centered="true">
:footer="null"
:closable="closeBack"
wrapClassName="courAuditModal"
centered="true"
>
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
<div class="del_main"> <div class="del_main">
@@ -111,9 +80,12 @@
</div> </div>
</div> </div>
<div class="item" style="margin-top: 20px"> <div class="item" style="margin-top: 20px">
<div class="sign" style="position:relative;left:30px;top:-2px;">
<img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
</div>
<div class="left">审核意见</div> <div class="left">审核意见</div>
<div class="rig"> <div class="rig">
<a-textarea v-model:value="valueSugg" :rows="4"/> <a-textarea v-model:value="valueSugg" :rows="4" />
</div> </div>
</div> </div>
</div> </div>
@@ -129,30 +101,15 @@
</div> </div>
</a-modal> </a-modal>
<!-- 预览弹窗 --> <!-- 预览弹窗 -->
<a-modal <a-modal v-model:visible="lookCourseModal" title="Title" @ok="handlePush" :footer="null" :closable="false"
v-model:visible="lookCourseModal" wrapClassName="modalStyle lookCourseModal" width="80%" @cancel="ft_exit">
title="Title"
@ok="handlePush"
:footer="null"
:closable="false"
wrapClassName="modalStyle lookCourseModal"
width="80%"
@cancel="ft_exit"
>
<div class="modalHeader"> <div class="modalHeader">
<div class="headerLeft"> <div class="headerLeft">
<img <img style="width: 17px; height: 18px; margin-right: 8px" src="../../assets/images/basicinfo/add.png" />
style="width: 17px; height: 18px; margin-right: 8px"
src="../../assets/images/basicinfo/add.png"
/>
<span class="headerLeftText">预览</span> <span class="headerLeftText">预览</span>
</div> </div>
<div style="margin-right: 57px; cursor: pointer"> <div style="margin-right: 57px; cursor: pointer">
<img <img @click="ft_exit" style="width: 22px; height: 22px" src="../../assets/images/basicinfo/close22.png" />
@click="ft_exit"
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div> </div>
</div> </div>
<div class="modalMain"> <div class="modalMain">
@@ -163,24 +120,17 @@
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 14px">课程名称</span> <span style="margin-right: 14px">课程名称</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="i1_input">fefewf</div> <div class="i1_input">{{ faceDetailObj !== null ? faceDetailObj.name : "" }}</div>
</div> </div>
</div> </div>
<div class="i2_cz"> <div class="i2_cz">
<div class="i2_top"> <div class="i2_top">
<div <div class="i2_right" @click="hideShow" style="cursor: pointer">
class="i2_right"
@click="hideShow"
style="cursor: pointer"
>
<div class="b_icon"></div> <div class="b_icon"></div>
</div> </div>
</div> </div>
@@ -188,28 +138,23 @@
<div class="mbl_items2"> <div class="mbl_items2">
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 14px">封面图</span> <span style="margin-right: 14px">封面图</span>
</div> </div>
<div class="item_inp">fefw</div> <img ref="heroImg" alt="" style="width:100px;height:100px;" />
<!-- <div class="item_inp"></div> -->
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img style="width: 10px; height: 10px" src="@/assets/images/coursewareManage/asterisk.png"
style="width: 10px; height: 10px" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 14px">目标人群</span> <span style="margin-right: 14px">目标人群</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="i1_input"></div> <div class="i1_input">{{ faceDetailObj !== null ? faceDetailObj.targetUser : "" }}</div>
</div> </div>
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
@@ -217,35 +162,29 @@
<span style="margin-right: 14px">课程价值</span> <span style="margin-right: 14px">课程价值</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="i1_input"></div> <div class="i1_input">{{ faceDetailObj !== null ? faceDetailObj.meaning : "" }}</div>
</div> </div>
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 14px">资源归属</span> <span style="margin-right: 14px">资源归属</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="select i6_input"></div> <div class="select i6_input">{{ faceDetailObj !== null ? faceDetailObj.projectId : "" }}</div>
</div> </div>
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 14px">内容分类</span> <span style="margin-right: 14px">内容分类</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="select i6_input"></div> <div class="select i6_input">{{ faceDetailObj !== null ? faceDetailObj.categoryId : "" }}</div>
</div> </div>
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
@@ -253,29 +192,26 @@
<span style="margin-right: 14px">场景</span> <span style="margin-right: 14px">场景</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="select i7_input"></div> <div class="select i7_input">{{ faceDetailObj !== null ? faceDetailObj.sceneId : "" }}</div>
</div> </div>
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<span style="margin-right: 14px">内容标签</span> <span style="margin-right: 14px">内容标签</span>
</div> </div>
<div class="item_inp"></div> <div class="item_inp">{{ faceDetailObj !== null ? faceDetailObj.tips : "" }}</div>
</div> </div>
</div> </div>
<div class="mb_right"> <div class="mb_right">
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="asterisk" />
src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk"
/>
</div> </div>
<span style="margin-right: 14px">授课教师</span> <span style="margin-right: 14px">授课教师</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="i1_input"></div> <div class="i1_input">{{ faceDetailObj !== null ? faceDetailObj.teacherId : "" }}</div>
</div> </div>
</div> </div>
<div class="mbl_items2"> <div class="mbl_items2">
@@ -283,42 +219,34 @@
<span style="margin-right: 14px">课程简介</span> <span style="margin-right: 14px">课程简介</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="i10_textarea"></div> <div class="i10_textarea">{{ faceDetailObj !== null ? faceDetailObj.intro : "" }}</div>
</div> </div>
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<span style="margin-right: 10px">附件</span> <span style="margin-right: 10px">附件</span>
</div> </div>
<div class="item_inp"> <div class="item_inp" v-for="(value, index) in attachMap" :key="index">
<a-upload <a :src="value">
multiple {{ ['附件一', '附件二', '附件三', '附件四', '附件五', '附件六'][index] }}
:show-upload-list="false" </a>
:before-upload="beforeUpload2" <!-- <a-upload multiple :show-upload-list="false" :before-upload="beforeUpload2">
>
<div class="accessory" style="cursor: pointer"> <div class="accessory" style="cursor: pointer">
<div class="accessory_icon"> <div class="accessory_icon">
<img <img src="@/assets/images/coursewareManage/enclosure.png" alt="enclosure" />
src="@/assets/images/coursewareManage/enclosure.png"
alt="enclosure"
/>
</div> </div>
<span style="color: #4ea6ff">添加附件</span> <span style="color: #4ea6ff">添加附件</span>
</div> </div>
</a-upload> </a-upload>
<span> <span>
支持.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.gif,.zip 支持.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.gif,.zip
</span> </span> -->
</div> </div>
</div> </div>
<div class="mbl_items12"> <div class="mbl_items12">
<div <div class="i12_box1" v-for="(item, index) in imgList" :key="index">
class="i12_box1"
v-for="(item, index) in imgList"
:key="index"
>
<div class="file_img"> <div class="file_img">
<img :src="item.img"/> <img :src="item.img" />
</div> </div>
<div class="file_detail"> <div class="file_detail">
<div class="file_name"> <div class="file_name">
@@ -352,28 +280,18 @@
</div> </div>
<div class="fotarea"> <div class="fotarea">
<div style="border: 1px solid #ccc"> <div style="border: 1px solid #ccc">
<Toolbar <Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
style="border-bottom: 1px solid #ccc" :mode="mode" />
:editor="editorRef" <Editor v-model="valueHtml" :defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" />
:defaultConfig="toolbarConfig"
:mode="mode"
/>
<Editor
style="height: 500px; overflow-y: hidden"
v-model="valueHtml"
:defaultConfig="editorConfig"
:mode="mode"
@onCreated="handleCreated"
/>
</div> </div>
</div> </div>
</div> </div>
<div class="m_btn"> <div class="m_btn">
<div class="btn btn5"> <div class="btn btn5" @click="ft_exit">
<div class="btnText" @click="ft_exit">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="btn btn6"> <div class="btn btn6" @click="handlePush">
<div class="btnText" @click="handlePush">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
</div> </div>
@@ -382,30 +300,20 @@
</a-modal> </a-modal>
<!-- 审核在线课 --> <!-- 审核在线课 -->
<a-modal <a-modal v-model:visible="onlineClassesVisible" :footer="null" :closable="false"
v-model:visible="onlineClassesVisible" wrapClassName="modalStyle onlineClassesStyle" :zIndex="9999">
:footer="null" <iframe id="iframe" style="width: 100%; height: 100%" :src="iframeUrl + 'course/noapproved'" name="myframe"
:closable="false" sandbox="allow-forms allow-scripts allow-same-origin allow-popups"></iframe>
wrapClassName="modalStyle onlineClassesStyle"
:zIndex="9999"
>
<iframe
id="iframe"
style="width: 100%; height: 100%"
:src="iframeUrl + 'course/noapproved'"
name="myframe"
sandbox="allow-forms allow-scripts allow-same-origin allow-popups"
></iframe>
</a-modal> </a-modal>
</div> </div>
</template> </template>
<script> <script>
import {reactive, toRefs, onMounted} from "vue"; import { reactive, toRefs, onMounted, ref } from "vue";
import {list, courseAuditView} from "../../api/indexAudit"; import { list, courseAuditView, courseDetail } from "../../api/indexAudit";
import {toDate} from "../../api/method"; import { toDate } from "../../api/method";
import {message} from "ant-design-vue"; import { message } from "ant-design-vue";
import {Editor, Toolbar} from "@wangeditor/editor-for-vue"; import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import {iframeUrl} from "../../api/method"; import { iframeUrl } from "../../api/method";
import * as api1 from "@/api/index1"; import * as api1 from "@/api/index1";
export default { export default {
@@ -442,6 +350,7 @@ export default {
chooseCreater: null, chooseCreater: null,
chooseOffId: null, chooseOffId: null,
lookCourseModal: false, //预览 lookCourseModal: false, //预览
faceDetailObj: null,
columns1: [ columns1: [
{ {
title: "序号", title: "序号",
@@ -466,7 +375,7 @@ export default {
dataIndex: "content", dataIndex: "content",
key: "content", key: "content",
align: "center", align: "center",
customRender: ({text}) => state.calssifyList.find(e => e.value == text)?.label, customRender: ({ text }) => state.calssifyList.find(e => e.value == text)?.label,
}, },
{ {
title: "状态", title: "状态",
@@ -500,22 +409,28 @@ export default {
align: "center", align: "center",
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
<span <span
style="cursor:pointer;color:#387DF7" style="cursor:pointer;color:#387DF7"
onClick={() => { onClick={() => {
showAudit( showAudit(
value.record.createId, value.record.createId,
value.record.creater, value.record.creater,
value.record.offId value.record.offId
); );
}} }}
> >
审核 审核
</span> </span>
&nbsp; &nbsp;
<span style="cursor:pointer;color:#387DF7">预览</span> <span
</div> onClick={() => {
state.lookCourseModal = true;
getFaceDetail(value.record.offId);
console.log(value.record)
}}
style="cursor:pointer;color:#387DF7">预览</span>
</div>
); );
}, },
}, },
@@ -541,30 +456,96 @@ export default {
const getFaceList = () => { const getFaceList = () => {
let objn = { let objn = {
auditStatus: 1, auditStatus: 1,
// beginTime: 0,
categoryId: state.valueproj, categoryId: state.valueproj,
createName: state.valuecreater, createName: state.valuecreater,
// endTime: 0,
name: state.valuename, name: state.valuename,
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: 10, pageSize: 10,
projectName: "", projectName: ""
}; };
console.log(objn);
list(objn) list(objn)
.then((res) => { .then((res) => {
console.log("获取面授列表成功", res); console.log("获取面授列表成功", res);
let result = res.data.data; let result = res.data.data;
state.total = result.total; state.total = result.total;
if (result.total > 0) { if (result.total > 0) {
setFaceData(result.rows); setFaceData(result.rows);
} } else {
}) setFaceData([]);
.catch((err) => { }
console.log("获取面授列表失败", err); })
}); .catch((err) => {
console.log("获取面授列表失败", err);
});
}; };
// 获取面授详情
const heroImg = ref(null);
const valueHtml = ref(null);
const attachMap = ref([]);
const getFaceDetail = (id) => {
console.log(id);
courseDetail(id)
.then((res) => {
console.log("获取面授详情信息成功", res);
let result = res.data.data;
state.faceDetailObj = result;
heroImg.value.src = result.picUrl
valueHtml.value = result.outline
attachMap.value = result.attach.split(",")
console.log(result, attachMap.value);
})
.catch((err) => {
console.log("获取面授详情信息失败", err);
});
}
const searchList = () => {
let objn = {
auditStatus: 1,
categoryId: state.valueproj,
createName: state.valuecreater,
name: state.valuename,
pageNo: state.currentPage,
pageSize: 10,
projectName: ""
};
console.log(objn);
list(objn)
.then((res) => {
console.log("获取面授列表成功", res);
let result = res.data.data;
state.total = result.total;
if (result.total > 0) {
setFaceData(result.rows);
} else {
setFaceData([]);
}
})
.catch((err) => {
console.log("获取面授列表失败", err);
});
}
// 预览弹框 开启和关闭
const ft_exit = () => {
state.lookCourseModal = false;
}
const handlePush = () => {
state.lookCourseModal = false;
}
const setFaceData = (tableData) => { const setFaceData = (tableData) => {
if(!tableData || !tableData.length){ if (!tableData || !tableData.length) {
state.tableData1 = [] state.tableData1 = []
return return
} }
@@ -577,15 +558,15 @@ export default {
type: item.type == 1 ? "线上" : "线下", type: item.type == 1 ? "线上" : "线下",
content: item.categoryId, content: item.categoryId,
status: status:
item.status == 0 item.status == 0
? "未提交" ? "未提交"
: item.status == 1 : item.status == 1
? "待审核" ? "待审核"
: item.status == 2 : item.status == 2
? "通过" ? "通过"
: item.status == -1 : item.status == -1
? "拒绝" ? "拒绝"
: "-", : "-",
change: "-", change: "-",
creater: item.createName, creater: item.createName,
time: toDate(item.createTime, "Y-M-D h:m"), time: toDate(item.createTime, "Y-M-D h:m"),
@@ -621,6 +602,13 @@ export default {
state.chooseOffId = null; state.chooseOffId = null;
}; };
const sureCourAuditModal = () => { const sureCourAuditModal = () => {
console.log(state.valueSugg)
if (state.valueSugg == null || state.valueSugg == undefined || state.valueSugg == "") {
message.destroy();
message.error("请输入审核意见")
return
}
courseAuditView({ courseAuditView({
createId: state.chooseId, createId: state.chooseId,
createName: state.chooseCreater, createName: state.chooseCreater,
@@ -628,32 +616,40 @@ export default {
offcourseId: state.chooseOffId, offcourseId: state.chooseOffId,
pass: state.valuepass == "1" ? 1 : 0, pass: state.valuepass == "1" ? 1 : 0,
}) })
.then((res) => { .then((res) => {
console.log(res); console.log(res);
state.courAuditModal = false; state.courAuditModal = false;
message.destroy(); message.destroy();
return message.success("审核提交成功"); message.success("审核提交成功");
}) getFaceList();
.catch((err) => { })
console.log(err); .catch((err) => {
message.destroy(); console.log(err);
return message.warning("审核提交失败"); message.destroy();
}); message.warning("审核提交失败");
});
}; };
onMounted(async () => { onMounted(async () => {
getFaceList(); getFaceList();
//获取分类列表 //获取分类列表
state.calssifyList = (await getDictList("faceclassClass")).map(e => ({label: e.dictName, value: e.dictCode})) state.calssifyList = (await getDictList("faceclassClass")).map(e => ({ label: e.dictName, value: e.dictCode }))
}); });
return { return {
...toRefs(state), ...toRefs(state),
getFaceList, getFaceList,
searchList,
setFaceData, setFaceData,
reset, reset,
changePagination, changePagination,
showAudit, showAudit,
closeCourAuditModal, closeCourAuditModal,
sureCourAuditModal, sureCourAuditModal,
ft_exit,
handlePush,
getFaceDetail,
heroImg,
valueHtml,
attachMap
}; };
}, },
}; };
@@ -680,6 +676,7 @@ export default {
background: #ffffff; background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21); box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px; border-radius: 4px;
// position: absolute; // position: absolute;
// left: 50%; // left: 50%;
// top: 10%; // top: 10%;
@@ -688,10 +685,8 @@ export default {
position: absolute; position: absolute;
width: calc(100%); width: calc(100%);
height: 68px; height: 68px;
background: linear-gradient( background: linear-gradient(rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0.2) 0%, rgba(78, 166, 255, 0) 100%);
rgba(78, 166, 255, 0) 100%
);
} }
.del_main { .del_main {
@@ -799,6 +794,7 @@ export default {
.lookCourseModal { .lookCourseModal {
.ant-modal { .ant-modal {
.ant-modal-content { .ant-modal-content {
// width:1358px !important; // width:1358px !important;
.ant-modal-body { .ant-modal-body {
.modalHeader { .modalHeader {