Files
fe-manage/src/views/examine/CourseReviewedN.vue
2025-11-21 10:56:43 +08:00

1854 lines
48 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-16 20:59:33
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-12-07 08:49:02
* @FilePath: /fe-manage/src/views/examine/CourseReviewedN.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<!-- 待审核课程页面 coursereviewedn-->
<template>
<div class="coursereviewedn">
<div class="tmpl">
<div class="tmpl_header">
<div class="tmplh_inp">
<div class="inpbox">
<div class="inpbox1">
<a-tree-select
:fieldNames="{
children: 'children',
label: 'name',
value: 'code',
}"
allow-clear
:getPopupContainer="
(triggerNode) => triggerNode.parentNode || document.body
"
v-model:value="valueproj"
show-search
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="请选择内容分类"
tree-default-expand-all
:tree-data="sysTypeOptions"
>
</a-tree-select>
</div>
<div class="inpbox1">
<a-input
v-model:value="valuecreater"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 5%;
"
placeholder="请输入创建人"
/>
</div>
<div class="inpbox1">
<a-input
v-model:value="valuename"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 5%;
"
placeholder="请输入名称"
/>
</div>
<div class="select addTimeBox">
<div class="addTime">创建时间</div>
<a-range-picker
v-model:value="searchParam"
style="width: 420px"
format="YYYY-MM-DD"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div>
</div>
</div>
<div class="tmplh_btn">
<div class="btn btn1" @click="searchList">
<div class="search"></div>
<div class="btnText btnText1">搜索</div>
</div>
<div class="btn btn2" @click="reset">
<div class="search"></div>
<div class="btnText btnText2">重置</div>
</div>
</div>
</div>
<div class="tmpl_body">
<div class="tmpl_tabbox">
<a-table
:columns="columns1"
:data-source="tableData1"
:loading="loading"
expandRowByClick="true"
@expand="expandTable"
:scroll="{ x: 1300 }"
:pagination="false"
/>
</div>
<div class="tableBox">
<div class="pa">
<a-pagination
v-if="total > 10"
:showSizeChanger="false"
show-quick-jumper
:pageSize="pageSize"
v-model:current="currentPage"
:total="total"
class="pagination"
@change="changePagination"
/>
</div>
</div>
</div>
</div>
<!-- 审核弹窗 -->
<a-modal
v-model:visible="courAuditModal"
:footer="null"
:closable="closeBack"
wrapClassName="courAuditModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>审核</span>
<div class="close_exit" @click="closeCourAuditModal"></div>
</div>
<div class="body">
<div class="item">
<div class="left" style="color: #4ea6ff">修改意见</div>
<div class="rig"></div>
</div>
<!-- 修改记录详情 -->
<div
v-if="openDetailVisibie"
style="display: flex; width: 100%; margin-top: 12px"
>
<a-table
:columns="columns2"
:data-source="tableData2"
:loading="loading2"
expandRowByClick="true"
@expand="expandTable"
:scroll="{ y: 250 }"
:pagination="false"
/>
</div>
<div
style="
display: flex;
justify-content: center;
align-items: center;
height: 70px;
"
>
<div
@click="openDetail"
style="
cursor: pointer;
padding: 2px 12px;
border-radius: 4px;
background: #4ea6ff;
color: #fff;
font-size: 14px;
"
>
{{ openDetailVisibie ? "详情折叠" : "详情展开" }}
</div>
</div>
<div class="item">
<div class="left">审核</div>
<div class="rig">
<a-radio-group name="radioGroup" v-model:value="valuepass">
<a-radio value="1">通过</a-radio>
<a-radio value="2" style="margin-left: 40px">不通过</a-radio>
</a-radio-group>
</div>
</div>
<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="rig">
<a-textarea
v-model:value="valueSugg"
:rows="4"
show-count
:maxlength="20"
/>
</div>
</div>
</div>
<div class="del_btnbox">
<div
class="del_btn btn2"
@click="closeCourAuditModal"
style="margin-right: 32px"
>
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="sureCourAuditModal">
<div class="btnText">确定</div>
</div>
</div>
<div style="height: 20px"></div>
</div>
</div>
</a-modal>
<!-- 邀请审核弹窗 -->
<a-modal
v-model:visible="courInvitationAuditModal"
:footer="null"
:closable="closeBack"
wrapClassName="courAuditModal"
centered="true"
style="height: 400px"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main" style="height: 400px">
<div class="header">
<div class="icon"></div>
<span>请选择教师</span>
<div
class="close_exit"
@click="closeInvitationCourAuditModal"
></div>
</div>
<div class="body">
<div class="item" style="align-items: center">
<div class="left">教师</div>
<div class="rig" style="margin-left: 10px">
<ProjectManager
placeholder="请输入教师姓名"
v-model:value="memberValue.value"
v-model:name="memberValue.label"
>
</ProjectManager>
</div>
</div>
<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="rig">
<a-textarea
v-model:value="valueSuggInvitation"
:rows="4"
show-count
:maxlength="20"
/>
</div>
</div>
</div>
<div class="del_btnbox">
<div
class="del_btn btn2"
@click="closeInvitationCourAuditModal"
style="margin-right: 32px"
>
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="sureInvitationCourAuditModal">
<div class="btnText">转审</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 转审完成弹窗 -->
<a-modal
v-model:visible="transferInvitationAuditModal"
:footer="null"
:closable="closeBack"
wrapClassName="courAuditModal"
centered="true"
>
<div class="delete" style="height: 460px">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>审核信息</span>
<div
class="close_exit"
@click="closeTransferInvitationCourAuditModal"
></div>
</div>
<div class="body">
<div class="item" style="align-items: center">
<div class="left">审核人</div>
<div class="rig" style="margin-left: 10px">
<span>{{ transferCompletedModel.name }}</span>
</div>
</div>
<div class="item" style="align-items: center; margin-top: 20px">
<div class="left">审核结果</div>
<div class="rig" style="margin-left: 10px">
<a-tag
v-if="transferCompletedModel.result == '审核拒绝'"
color="red"
>拒绝</a-tag
>
<a-tag
v-if="transferCompletedModel.result == '审核通过'"
color="green"
>通过</a-tag
>
</div>
</div>
<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="rig">
<a-textarea
v-model:value="transferCompletedModel.remarks"
:rows="4"
:disabled="true"
/>
</div>
</div>
<div class="item" style="align-items: center; margin-top: 20px">
<div class="left">审核时间</div>
<div class="rig" style="margin-left: 10px">
<span>{{ transferCompletedModel.times }}</span>
</div>
</div>
</div>
<div class="del_btnbox">
<div
class="del_btn btn2"
@click="closeTransferInvitationCourAuditModal"
>
<div class="btnText">关闭</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 预览弹窗 -->
<SeeModal
:visible="lookCourseModal"
:detail="faceDetailObj"
@cancel="ft_exit"
/>
<!-- 审核在线课 -->
<a-modal
v-model:visible="onlineClassesVisible"
:footer="null"
:closable="false"
wrapClassName="modalStyle onlineClassesStyle"
:zIndex="9999"
>
<iframe
id="iframe"
style="width: 100%; height: 100%"
:src="iframeUrl + 'course/noapproved'"
name="myframe"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe>
</a-modal>
</div>
</template>
<script lang="jsx">
import {reactive, toRefs, onMounted, ref, computed} from "vue";
import { list, courseAuditView, courseDetail, inviteAudit } from "../../api/indexAudit";
import { message } from "ant-design-vue";
import ProjectManager from "@/components/project/ProjectManagerNew";
import SeeModal from "../courselibrary/components/seeModal.vue";
import { iframeUrl } from "../../api/method";
import { editCourseRecord } from "../../api/indexAudit";
import {useStore} from "vuex";
import dayjs from "dayjs";
import {boeRequest} from "@/api/request";
import {COURSE_AUDIT, OTHER_AUDIT} from "@/api/ThirdApi";
export default {
name: "CoursereViewedN",
components: {
SeeModal,
ProjectManager
},
setup() {
const state = reactive({
loading: false,
loading2: false,
optionsproj: [
{
value: "jack",
label: "Jack",
},
{
value: "rose",
label: "rose",
},
],
memberValue: {
value: "",
label: "",
},
calssifyList: [], //分类字典
valueproj: null,
valuecreater: "",
valuename: "",
// currentFacePage: 1,
currentPage: 1,
total: null,
pageSize: 10,
courAuditModal: false, //审核弹窗
courInvitationAuditModal: false, //邀请审核弹窗
transferInvitationAuditModal: false, //转审完成 弹框
closeBack: false,
valuepass: "1",
valueSugg: null,
valueSuggInvitation: null,
valueTransferSuggInvitation: null,
createId: null,
chooseCreater: null,
chooseOffId: null,
lookCourseModal: false, //预览
faceDetailObj: {},
columns1: [
// {
// title: "序号",
// dataIndex: "number",
// key: "number",
// align: "center",
// },
{
title: "名称",
dataIndex: "name",
key: "name",
align: "center",
ellipsis: true,
width: "22%",
},
{
title: "类型",
dataIndex: "type",
key: "type",
align: "center",
width: "10%",
},
{
title: "内容分类",
dataIndex: "content",
key: "content",
align: "center",
ellipsis: true,
width: "10%",
},
{
title: "状态",
dataIndex: "status",
key: "status",
align: "center",
width: "8%",
},
{
title: "转审",
dataIndex: "inviteAuditStatus",
key: "inviteAuditStatus",
align: "center",
width: "10%",
customRender: (value) => {
return (
<div>
{
value.record.inviteAuditStatus==1?
<a-tag color="blue">已转审</a-tag>:
value.record.inviteAuditStatus==2?
<a-tag
onClick={()=>{
{/* 转审人名字 转审结果 转审备注 转审时间 */}
showTransferInvitationAudit(
value.record.invitedTeacherName,
value.record.invitedAuditResult,
value.record.invitedAuditBackup,
value.record.invitedAuditTime
)
}}
style="cursor:pointer;"
color="green">转审完成</a-tag>:
value.record.inviteAuditStatus==3?
value.record.invitedMsg :""
}
</div>
);
}
},
{
title: "创建人",
dataIndex: "creater",
key: "creater",
align: "center",
ellipsis: true,
width: "10%",
},
{
title: "创建时间",
dataIndex: "time",
key: "time",
align: "center",
ellipsis: true,
width: "10%",
},
{
title: "操作",
dataIndex: "opt",
key: "opt",
align: "center",
width: "20%",
customRender: (value) => {
return (
<div>
<span
style="cursor:pointer;color:#387DF7"
onClick={() => {
{/* showAudit(
value.record.createrId,
value.record.creater,
value.record.offId,
value.record.type,
value.record.id,
value.record.courseId
); */}
window.open(window.location.protocol + process.env.VUE_APP_BOE_API_URL + '/pc/examine/notapproved','notapproved')
}}
>
审核
</span>
&nbsp;
{
value.record.inviteAuditStatus==0?
<span
style="cursor:pointer;color:#387DF7"
onClick={() => {
showInvitationAudit(
value.record.createrId,
value.record.creater,
value.record.offId,
value.record.type,
value.record.id,
value.record.courseId
)
}}>
邀请审核
</span>
:''
}
{/* &nbsp;
<span
onClick={() => {
getFaceDetail(value.record.offId);
}}
style="cursor:pointer;color:#387DF7">
预览
</span> */}
</div>
);
},
},
],
columns2: [
{
title: "修改人",
dataIndex: "updateName",
key: "updateName",
align: "center",
ellipsis: true,
},
{
title: "修改时间",
dataIndex: "updateTime",
key: "updateTime",
align: "center",
},
{
title: "内容",
dataIndex: "columnName",
key: "columnName",
align: "center",
},
{
title: "修改前",
dataIndex: "beforeValue",
key: "beforeValue",
align: "center",
ellipsis: true,
},
{
title: "修改后",
dataIndex: "afterValue",
key: "afterValue",
align: "center",
}
],
// 待审核课程的数据
tableData1: [],
// 修改记录数据
tableData2: [],
//审核在线课嵌套页面
onlineClassesVisible: false,
iframeUrl: iframeUrl,
// 课程三级分类
options2222: [
{
title: '领导力',
value: '100',
children: [
{
title: '管理业务',
value: '1001',
},
{
title: '管理团队',
value: '1002',
},
{
title: '管理自我',
value: '1003',
},
],
},
{
title: '专业力',
value: '200',
children: [
{
title: '研发',
value: '2001',
},
{
title: '系统和解决方案',
value: '2002',
},
{
title: '生产技术与制造',
value: '2003',
},
{
title: '供应链',
value: '2004',
},
{
title: '营销',
value: '2005',
},
{
title: '品质',
value: '2006',
},
{
title: '专业职能',
value: '2007',
children: [
{
title: '战略与企划',
value: '200701',
},
{
title: '流程管理',
value: '200702',
},
{
title: '业绩管理',
value: '200703',
},
{
title: '项目管理',
value: '200704',
},
{
title: '信息技术',
value: '200705',
},
{
title: '环境与安全',
value: '200706',
},
{
title: '人力资源',
value: '200707',
},
{
title: '企业文化',
value: '200708',
},
{
title: '品牌',
value: '200709',
},
{
title: '财务',
value: '200710',
},
{
title: '法务',
value: '200711',
},
{
title: '风险控制',
value: '200712',
},
{
title: '行政',
value: '200713'
},
]
},
{
title: '医工',
value: '2008',
}
],
},
{
title: '通用力',
value: '300',
children: [
{
title: '职业操守与道德',
value: '3001',
},
{
title: '职业素养与技能',
value: '3002',
},
{
title: '规章制度',
value: '3003',
},
],
}
],
searchParam:[], // 时间搜索
inviteReview:{
"inviteContent": "",
"offcourseId": 0,
"teacherId": 0,
"teacherName": ""
},
transferCompletedModel: {
name:"",
result:"",
remarks:"",
times:"",
},
openDetailVisibie:false,
});
const store = useStore();
const sysTypeOptions = computed(() => store.state.content_type);
function findClassFullName(list,classify,name=''){
return list && list.length && list.map(e=>{
return classify == e.code ? name?name+'-'+e.name:e.name : findClassFullName(e.children,classify,name?name+'-'+e.name:e.name)
}).filter(name=>name).join('')
}
// 课程三级分类回显
const sHX = (classify) => {
return findClassFullName(sysTypeOptions.value,classify) || '-'
}
const getFaceList = () => {
state.loading = true
let objn = {
auditStatus: 1,
// categoryId: state.valueproj,
sysTypeId: state.valueproj,
createName: state.valuecreater,
name: state.valuename,
pageNo: state.currentPage,
pageSize: 10,
projectName: "",
};
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([]);
}
state.loading = false
})
.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.lookCourseModal = true;
result.attach = result.attach == "" ? [] : result.attach.split(",");
state.faceDetailObj = result;
heroImg.value.src = result.picUrl;
valueHtml.value = result.outline;
attachMap.value = result.attach == "" ? [] : result.attach.split(",");
console.log(result, attachMap.value);
})
.catch((err) => {
console.log("获取面授详情信息失败", err);
});
};
// 内容分类 场景 -- 目前直接写死的
const sceneist11 = [
{ dictCode: "6", dictValue: "场景一" },
{ dictCode: "7", dictValue: "场景二" },
];
const contentList11 = [
{ dictCode: "8", dictValue: "分类一" },
{ dictCode: "5", dictValue: "分类二" },
];
// contentList11.find(e => e.dictCode == text)?.dictValue
const searchList = () => {
// console.log('searchParamsearchParamsearchParam', state.searchParam)
// console.log('searchParamsearchParamsearchParam', Math.ceiXXl(new Date(state.searchParam[0]).getTime()))
let objn = {
auditStatus: 1,
// categoryId: state.valueproj,
// beginTime:state.searchParam.length!==0? Math.ceil(new Date(state.searchParam[0]).getTime()/1000): "",
// endTime:state.searchParam.length!==0? Math.ceil(new Date(state.searchParam[1]).getTime()/1000): "",
beginTime:state.searchParam.length!==0? dayjs(new Date(state.searchParam[0]).getTime()).format("YYYY-MM-DD"): "",
endTime:state.searchParam.length!==0? dayjs(new Date(state.searchParam[1]).getTime()).format("YYYY-MM-DD"): "",
sysTypeId: 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 setFaceData = (tableData) => {
if (!tableData || !tableData.length) {
state.tableData1 = [];
return;
}
let data = tableData;
let array = [];
data.map((item, i) => {
let obj = {
number: i + 1 + (state.currentPage - 1) * 10,
name: item.name,
id: item.id,
courseId: item.courseId,
type: item.type == 1 ? "线上" : "线下",
content: sHX(item.sysTypeId),
status:item.type == 2?
(item.status == 0
? "未提交"
: item.status == 1
? "待审核"
: item.status == 2
? "通过"
: item.status == -1
? "拒绝"
: "-"):(item.status == 1?'待审核':item.status == 2 ? "待审核":item.status == 5 ? "通过":item.status == 3?'拒绝':item.status == 9?'通过':'-'),
change: "-",
creater: item.createName,
time: item.processTime,
createrId: item.createId,
offId: item.id,
inviteAuditStatus: item.inviteAuditStatus,
invitedMsg: item.invitedMsg,
invitedTeacherName: item.invitedTeacherName,
invitedAuditResult: item.invitedAuditResult,
invitedAuditBackup: item.invitedAuditBackup,
invitedAuditTime: item.invitedAuditTime
};
array.push(obj);
});
state.tableData1 = array;
};
const reset = () => {
state.searchParam = [];
state.valueproj = null;
state.valuecreater = null;
state.valuename = null;
getFaceList();
};
const changePagination = (pagina) => {
state.currentPage = pagina;
getFaceList();
};
const showAudit = (createId, creater, offId,type,id,courseId) => {
console.log("参数",createId, creater, offId)
state.courAuditModal = true;
state.createId = createId;
state.chooseCreater = creater;
state.chooseOffId = offId;
state.type = type;
state.id = id;
state.courseId = courseId;
{/* 获取当前课程的审核记录 */}
getCourseRecord(offId);
};
// 显示邀请审核弹框
const showInvitationAudit = (createId, creater, offId,type,id,courseId) => {
console.log("参数",createId, creater, offId)
state.courInvitationAuditModal = true;
state.inviteReview.offcourseId = offId;
state.inviteReview.teacherId = createId;
state.inviteReview.teacherName = creater;
state.memberValue.value = '';
state.memberValue.label = '';
state.valueSuggInvitation='';
state.type = type;
state.id = id;
state.courseId = courseId;
};
// 关闭邀请审核弹框
const closeInvitationCourAuditModal = () => {
state.courInvitationAuditModal = false;
}
// 邀请审核确定
const sureInvitationCourAuditModal = () => {
console.log('我是邀请审核得传递参数',{
"inviteContent": state.valueSuggInvitation,
"offcourseId": state.inviteReview.offcourseId,
"teacherId": state.memberValue.value,
"teacherName": state.memberValue.label
})
if(state.type=='线下'){
inviteAudit({
"inviteContent": state.valueSuggInvitation,
"offcourseId": state.inviteReview.offcourseId,
"teacherId": state.memberValue.value,
"teacherName": state.memberValue.label
}).then((res) => {
console.log(res)
getFaceList();
state.courInvitationAuditModal = false;
message.success("已经提交转审成功,请等待审核");
}).catch(err=>{
console.log(err)
state.courInvitationAuditModal = false;
})
}else if (state.type=='线上'){
boeRequest(OTHER_AUDIT,{
auditId:state.id,
courseId:state.courseId,
teacherId:state.memberValue.value,
teacherName:state.memberValue.label,
remark:state.valueSuggInvitation,
}).then(()=>{
getFaceList();
state.courInvitationAuditModal = false;
message.success("已经提交转审成功,请等待审核");
})
}
}
// 转审完成弹框
const showTransferInvitationAudit = (name, result, remarks, times) => {
{/* 转审人名字 转审结果 转审备注 转审时间 */}
console.log("参数-->",name, result, remarks, times)
state.transferCompletedModel.name = name;
state.transferCompletedModel.result = result;
state.transferCompletedModel.remarks = remarks;
state.transferCompletedModel.times = times;
state.transferInvitationAuditModal = true;
}
// 关闭转审完成弹框
const closeTransferInvitationCourAuditModal = () => {
state.transferInvitationAuditModal = false;
}
const closeCourAuditModal = () => {
state.openDetailVisibie = false;
state.courAuditModal = false;
state.valueSugg = null;
state.valuepass = "1";
state.createId = null;
state.chooseCreater = null;
state.chooseOffId = null;
};
const sureCourAuditModal = () => {
console.log(state.valueSugg);
if (
state.valueSugg == null ||
state.valueSugg == undefined ||
state.valueSugg == ""
) {
message.destroy();
message.error("请输入审核意见");
return;
}
if(state.type=='线下'){
courseAuditView({
createId: state.createId,
createName: state.chooseCreater,
description: state.valueSugg,
offcourseId: state.chooseOffId,
pass: state.valuepass == "1" ? 1 : 0,
}).then((res) => {
console.log(res);
state.courAuditModal = false;
message.destroy();
message.success("审核提交成功");
state.valueSugg = null;
state.valuepass = "1";
getFaceList();
state.openDetailVisibie = false;
})
.catch((err) => {
console.log(err);
message.destroy();
message.warning("审核提交失败");
state.valueSugg = null;
state.valuepass = "1";
state.openDetailVisibie = false;
});
}else if(state.type=='线上'){
boeRequest(COURSE_AUDIT,{
auditId:state.id,
courseId:state.courseId,
title:state.valueSugg,
remark:state.valueSugg,
pass:state.valuepass == "1" ? true : false,
}).then(()=>{
state.courAuditModal = false;
message.destroy();
message.success("审核提交成功");
state.valueSugg = null;
state.valuepass = "1";
getFaceList();
state.openDetailVisibie = false;
})
}
};
onMounted(async () => {
getFaceList();
});
// 禁止用户编辑文本框内容
const onEditorFocus = (event) => {
event.enable(false);
};
{/* 产看审核记录详情 */}
const openDetail = () => {
state.openDetailVisibie = !state.openDetailVisibie;
}
{/* 获取课程审核记录 */}
const getCourseRecord = (courseId) => {
state.loading2 = true;
editCourseRecord(courseId)
.then((res) => {
console.log("获取修改记录", res);
if (res.data.code === 200) {
state.tableData2 = res.data.data.records;
// console.log("state.tableData", state.tableData);
}
state.loading2 = false;
})
.catch((err) => {
console.log("获取修改记录失败", err);
state.loading2 = false;
});
}
return {
...toRefs(state),
getFaceList,
searchList,
setFaceData,
reset,
changePagination,
showAudit,
showInvitationAudit,
closeInvitationCourAuditModal,
sureInvitationCourAuditModal,
showTransferInvitationAudit,
closeTransferInvitationCourAuditModal,
closeCourAuditModal,
sureCourAuditModal,
ft_exit,
getFaceDetail,
heroImg,
valueHtml,
attachMap,
contentList11,
sceneist11,
onEditorFocus,
sHX,
sysTypeOptions,
openDetail,
getCourseRecord
};
},
};
</script>
<style lang="scss">
.addTimeBox {
top: 4px;
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 10;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
.ant-picker-range .ant-picker-active-bar {
margin-left: 85px;
}
}
.courAuditModal {
.ant-modal {
width: 640px !important;
height: auto;
.ant-modal-content {
width: 640px !important;
height: auto;
.ant-modal-body {
width: 640px !important;
height: auto;
padding: 0 !important;
.delete {
z-index: 999;
width: 640px;
height: auto;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/taskpage/gan.png);
background-size: 100% 100%;
}
.close_exit {
position: absolute;
right: 42px;
cursor: pointer;
width: 20px;
height: 20px;
background-image: url(@/assets/images/coursewareManage/close.png);
background-size: 100% 100%;
}
}
.body {
width: 100%;
margin: 34px auto 56px auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
// background-color: red;
position: relative;
.item {
display: flex;
width: 100%;
.left {
width: 110px;
text-align: right;
}
.rig {
width: 450px;
.ant-input {
border-radius: 8px;
resize: none !important;
}
}
}
}
.del_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.del_btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
margin-right: 14px;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
}
.lookCourseModal {
.ant-modal {
.ant-modal-content {
// width:1358px !important;
.ant-modal-body {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.modalMain {
.m_title {
margin-bottom: 20px;
}
.m_body {
display: flex;
flex-wrap: wrap;
.mb_left {
width: 50%;
.mbl_items {
display: flex;
align-items: center;
justify-content: flex-end;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
position: relative;
.inp_num {
position: absolute;
left: 398px;
top: 10px;
}
}
}
.mbl_items2 {
display: flex;
align-items: start;
margin-top: 10px;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
.i_upload_img {
width: 100px;
height: 100px;
border-radius: 8px;
}
.i_upload {
width: 100px;
height: 100px;
border: 1px solid #4ea6ff;
border-radius: 8px;
text-align: center;
align-items: center;
cursor: pointer;
.addimg {
position: relative;
.heng {
position: absolute;
top: 50px;
left: 25px;
width: 50px;
border: 1px solid #4ea6ff;
}
.shu {
position: absolute;
top: 25px;
left: 50px;
height: 50px;
border: 1px solid #4ea6ff;
}
}
}
}
}
.i2_cz {
width: 440px;
margin-left: 100px;
.i2_top {
display: flex;
justify-content: space-between;
}
}
.i8_bottom {
display: flex;
width: 440px;
margin-left: 100px;
}
}
.mb_right {
width: 50%;
.mbl_items {
display: flex;
align-items: flex-start;
justify-content: flex-end;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-top: -15px;
margin-right: 5px;
}
}
.item_inp {
flex: 1;
}
.accessory {
display: flex;
align-items: center;
.accessory_icon {
width: 16px;
height: 16px;
margin-top: -8px;
margin-right: 5px;
}
}
}
.mbl_items2 {
display: flex;
align-items: start;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
position: relative;
.inp_num {
position: absolute;
left: 395px;
bottom: 10px;
}
}
}
.mbl_items12 {
width: 440px;
margin-left: 100px;
.i12_box1 {
display: flex;
align-items: center;
padding: 17px 0px 17px 21px;
border: 1px solid #eff4fc;
border-radius: 8px;
margin-bottom: 10px;
.file_img {
width: 27px;
height: 32px;
// background-image: url(@/assets/images/coursewareManage/imgs.png);
margin-right: 22px;
img {
width: 100%;
height: 100%;
}
}
.file_detail {
width: 250px;
margin-right: 21px;
.file_updata {
display: flex;
align-items: center;
.updatabox {
position: relative;
width: 230px;
height: 5px;
background-color: rgba(192, 192, 192, 0.25);
border-radius: 3px;
.updatacolor {
position: absolute;
left: 0;
width: 100%;
height: 5px;
background-color: #57c887;
border-radius: 3px;
}
.updatacolor2 {
position: absolute;
left: 0;
width: 80%;
height: 5px;
background-color: #ff7474;
border-radius: 3px;
}
.updatacolor3 {
position: absolute;
left: 0;
width: 60%;
height: 5px;
background-color: #4ea6ff;
border-radius: 3px;
}
.updataxq {
position: absolute;
right: 2px;
top: -30px;
color: #57c887;
}
.updataxq2 {
position: absolute;
right: 2px;
top: -30px;
color: #ff7474;
}
.updataxq3 {
position: absolute;
right: 2px;
top: -30px;
color: #4ea6ff;
}
}
}
}
.file_operation {
display: flex;
.fobox {
margin-right: 5px;
cursor: pointer;
}
}
}
}
}
}
.m_footer {
display: flex;
margin: 20px 0;
.fotnam {
width: 100px;
display: flex;
justify-content: end;
padding-right: 15px;
}
.fotarea {
position: relative;
.fuwenben {
width: 90%;
height: 20px;
background-color: rgb(95, 95, 95);
position: absolute;
left: 50%;
transform: translate(-50%, 0);
top: 3px;
z-index: 9999;
}
}
}
.m_btn {
width: 100%;
margin-top: 25px;
margin-bottom: 20px;
display: flex;
justify-content: center;
align-content: center;
.btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn5 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
}
.btn6 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
.coursereviewedn {
width: 100%;
.tmpl {
width: 100%;
.tmpl_header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-bottom: 32px;
margin-left: 32px;
margin-right: 32px;
.tmplh_inp {
.inpbox {
display: flex;
margin-top: 32px;
flex-wrap: wrap;
.inpbox1 {
display: flex;
justify-content: center;
align-items: center;
margin-right: 24px;
margin-top: 10px;
.ant-select-selector {
border-radius: 8px;
width: 270px;
height: 40px;
padding-top: 5px;
}
span {
white-space: nowrap;
}
}
}
}
.tmplh_btn {
display: flex;
// margin-left: 38px;
margin-top: 42px;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
cursor: pointer;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
.btnText1 {
color: rgb(255, 255, 255);
}
.btnText2 {
color: rgb(255, 255, 255);
}
}
.btn1 {
background: #4ea6ff;
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
}
}
.btn2:active {
background: #0982ff;
}
.btn1:active {
background: #0982ff;
}
.btn2 {
background: #4ea6ff;
border: 1px solid #4ea6ff;
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset0.png");
}
}
}
}
.tmpl_body {
padding: 0px 30px;
.tmpl_tabbox {
.operation {
display: flex;
justify-content: center;
align-items: center;
color: #4ea6ff;
.nselect {
justify-content: center;
align-items: center;
display: flex;
.jc {
margin-left: 20px;
white-space: nowrap;
cursor: pointer;
}
}
}
}
.pa {
width: 100%;
margin-top: 20px;
display: flex;
justify-content: center;
}
}
}
}
</style>