Files
fe-manage/src/views/courselibrary/courseModal.vue
2023-03-07 17:48:20 +08:00

1678 lines
50 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.
<!-- 确定新建面授课弹窗 -->
<template>
<a-modal
v-model:visible="ft_hs"
title="Title"
:footer="null"
:closable="false"
wrapClassName="modalStyle facteachModal coursemodal"
width="80%"
@cancel="visibleClose"
@ok="handlePush"
>
<div class="modalHeader">
<div class="headerLeft">
<img
style="width: 17px; height: 18px; margin-right: 8px"
src="@/assets/images/basicinfo/add.png"
/>
<span v-if="ft_eidt" class="headerLeftText">编辑面授课</span>
<span v-else class="headerLeftText"></span>
</div>
<div style="margin-right: 57px; cursor: pointer">
<img
@click="noEditClose"
style="width: 22px; height: 22px"
src="@/assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<!-- 审核理由 -->
<div v-if="statusJuJue" class="statusJuJue">
<span>审核意见</span>
<span>{{ auditDescription }}</span>
</div>
<div class="faceteach" :style="{ display: ft_hs ? 'block' : 'none' }">
<div class="ft_main">
<div class="m_title">课程信息</div>
<div class="m_body">
<div class="mb_left">
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk"
/>
</div>
<span style="margin-right: 14px">课程名称</span>
</div>
<div class="item_inp">
<div class="i1_input">
<NameInput
ref="inputRef"
placeholder="请输入课程名称"
v-model:value="qdms_inputV1"
v-model:validated="validated"
:maxlength="20"
show-count
:type="2"
:id="offcourseId"
></NameInput>
<!-- <a-input-->
<!-- v-model:value="qdms_inputV1"-->
<!-- maxlength="90"-->
<!-- style="width: 440px; height: 40px; border-radius: 8px"-->
<!-- placeholder="请输入课程名称"-->
<!-- />-->
<!-- <div class="inp_num">-->
<!-- <span style="color: #c7cbd2">-->
<!-- {{ qdms_inputV1.length }}/90-->
<!-- </span>-->
<!-- </div>-->
</div>
</div>
</div>
<div class="i2_cz">
<div class="i2_top">
<div class="i2_left">
<span style="color: #999ba3">课程命名规则</span>
</div>
<div
class="i2_right"
@click="hideShow"
style="cursor: pointer"
>
<div
class="b_zk"
:style="{ display: hideshow ? 'block' : 'none' }"
>
<span style="color: #4ea6ff">收起</span>
</div>
<div
class="b_sq"
:style="{ display: hideshow ? 'none' : 'block' }"
>
<span style="color: #4ea6ff">展开</span>
</div>
<div class="b_icon"></div>
</div>
</div>
<div
class="i2_detail"
:style="{ display: hideshow ? 'block' : 'none' }"
>
<span style="color: #999ba3">
1课程名称统一不加书名号<br />
2项目名称属地等信息如需体现在课程名称中请放在课程名称信息
之后时间管理GROW180项目时间管理B*确保首先
看到的是课程内容主题<br />
3同一课程如先后有多个版本原则上仅开放最新版本旧版本应停用
版本如必须以年份标明请以沟通技巧2022的方式呈现
</span>
</div>
</div>
<div class="mbl_items2">
<div class="item_nam" style="margin-top: 8px">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 14px">封面图</span>
</div>
<div class="item_inp">
<div
style="
width: 440px;
height: 100px;
display: flex;
justify-content: flex-start;
align-items: center;
"
>
<img
v-for="(item, index) in optionsUrl"
:key="index"
class="choiceoptionurl"
:style="{
border:
pathBgId === item.id
? '3px solid rgba(78, 166, 255, 1)'
: '1px solid #ccc',
display: index >= 3 ? 'none' : 'flex',
}"
:src="item.value"
:alt="item.name"
@click="chooseImg(item)"
/>
<div
@click="showLearnBgMore"
class="learnBgItem learnBgMore"
>
查看更多
<img src="../../assets/images/projectadd/go.png" />
</div>
</div>
<!-- <img
class="i_upload_img"
v-if="feng_mian_1"
:src="feng_mian_1"
style="width: 220px; height: 120px; border-radius: 8px"
alt="avatar"
/>
<div class="i_bottom">
<span style="color: #999ba3">
高宽比为16:9 (:800*450) png或jpg图片
</span>
</div> -->
</div>
</div>
<div class="mbl_items">
<div class="item_nam" style="margin-bottom: 102px">
<div class="asterisk_icon">
<img
style="width: 10px; height: 10px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 14px">目标人群</span>
</div>
<div class="item_inp">
<div class="i1_input">
<!-- <a-input v-model:value="qdms_inputV2" maxlength="50"
style="width: 440px; height: 40px; border-radius: 8px" placeholder="请输入目标人群" />
<div class="inp_num">
<span style="color: #c7cbd2">
{{ qdms_inputV2.length }}/50
</span>
</div> -->
<div>
<OrgClassCheck
v-model:value="orgSelect"
v-model:name="orgSelectName"
></OrgClassCheck>
</div>
<div style="margin-top: 10px">
<a-select
v-model:value="selectJobId"
mode="multiple"
style="width: 440px; min-height: 40px"
placeholder="请选择岗位"
:options="jobType"
@change="handleChangeJob"
:fieldNames="{
key: 'id',
label: 'name',
value: 'id',
}"
></a-select>
</div>
<div style="margin-top: 10px">
<a-select
v-model:value="selectBandId"
mode="multiple"
style="width: 440px; min-height: 40px"
placeholder="请选择Band"
:options="bandList"
@change="handleChangeBand"
:fieldNames="{
key: 'id',
label: 'name',
value: 'id',
}"
></a-select>
</div>
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk"
/>
</div>
<span style="margin-right: 14px">资源归属</span>
</div>
<div class="item_inp">
<div class="select i6_input" style="width: 440px">
<OrgClass
v-model:value="sourceBelongId"
v-model:name="sourceBelongName"
></OrgClass>
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk"
/>
</div>
<span style="margin-right: 14px">内容分类</span>
</div>
<div class="item_inp">
<div class="select i6_input">
<a-tree-select
style="width: 440px"
placeholder="请选择内容分类"
:treeDefaultExpandAll="true"
:getPopupContainer="
(triggerNode) => triggerNode.parentNode || document.body
"
v-model:value="fen_lei"
:tree-data="sysTypeOptions"
:fieldNames="{
children: 'children',
label: 'name',
value: 'code',
}"
>
</a-tree-select>
</div>
</div>
</div>
<div v-if="fen_lei" class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon"></div>
<span style="margin-right: 14px"> </span>
</div>
<div class="item_inp">
<div class="select i6_input">
<div
style="
width: 440px;
height: 26px;
font-size: 14px;
color: rgb(153, 155, 163);
"
>
所属层级{{ fen_lei1 }}
</div>
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam" style="margin-bottom: 110px">
<span style="margin-right: 14px">课程价值</span>
</div>
<div class="item_inp">
<div class="i1_input">
<a-textarea
v-model:value="qdms_inputV3"
maxlength="200"
style="width: 440px; height: 140px; border-radius: 8px"
placeholder="请输入课程价值"
/>
<div class="inp_num" style="top: 110px">
<span style="color: #c7cbd2">
{{ qdms_inputV3.length }}/200
</span>
</div>
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 14px">场景</span>
</div>
<div class="item_inp">
<div class="i1_input">
<a-input
v-model:value="chang_jin"
maxlength="50"
style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入场景"
/>
<div class="inp_num">
<span style="color: #c7cbd2">
{{ chang_jin.length }}/50
</span>
</div>
</div>
</div>
<!-- <div class="item_inp">
<div class="select i7_input">
<a-select :getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
" v-model:value="chang_jin" dropdownClassName="dropdown-style" style="width: 440px" placeholder="请选择"
:options="options3" allowClear showSearch />
</div>
</div> -->
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 14px">内容标签</span>
</div>
<div class="item_inp">
<a-input
v-model:value="tags_val_single"
style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入内容标签按回车键添加内容标签,可添加多个内容标签。"
@pressEnter="handleTagChange"
/>
<div class="tag-content">
<a-tag
v-for="(item, index) in tags_val"
:key="index"
closable
@close="handleTagClose(item)"
>
{{ item }}
</a-tag>
</div>
</div>
</div>
</div>
<div class="mb_right">
<!--
<div class="mbl_items">
<div class="item_nam" style="margin-top:5px;">
<div class="asterisk_icon">
<img src="@/assets/images/coursewareManage/asterisk.png" alt="asterisk" />
</div>
<span style="margin-right: 14px">授课教师</span>
</div>
<div class="item_inp">
<div class="select" style="width:88%;">
<ProjectManager v-model:value="member.value" v-model:name="member.name" />
</div>
</div>
</div>
-->
<div class="mbl_items2">
<div class="item_nam" style="margin-top: 8px">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk"
/>
</div>
<span style="margin-right: 14px">课程简介</span>
</div>
<div class="item_inp">
<div class="i10_textarea">
<a-textarea
v-model:value="qdms_inputV6"
maxlength="150"
style="width: 440px; height: 100px; border-radius: 8px"
placeholder="请输入"
/>
<div class="inp_num">
<span style="color: #c7cbd2">
{{ qdms_inputV6.length }}/150
</span>
</div>
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam" style="margin-top: 8px">
<span style="margin-right: 10px">附件</span>
</div>
<div class="item_inp">
<FJUpload v-model:value="attach" @changevalue="changevalue" />
</div>
</div>
</div>
</div>
<div class="m_footer">
<div class="fotnam">
<span>课程大纲</span>
</div>
<div v-if="ft_hs" class="fotarea">
<div style="border: 1px solid #ccc">
<Toolbar
style="border-bottom: 1px solid #ccc"
:editor="editorRef"
:defaultConfig="toolbarConfig"
:mode="mode"
/>
<Editor
style="height: 250px; overflow-y: hidden"
v-model="valueHtml"
:defaultConfig="editorConfig"
:mode="mode"
@onCreated="handleCreated"
/>
</div>
</div>
</div>
<div class="m_btn">
<div class="btn btn5" @click="noEditClose">
<div class="btnText">取消</div>
</div>
<a-button
class="btn btn6"
@click="handlePush"
:loading="validated === 1"
>
<div class="btnText">保存</div>
</a-button>
</div>
</div>
</div>
</div>
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" tip="" />
</div>
</a-modal>
<!-- 更多背景图 v-model:visible="learnBgMore" -->
<a-modal
:closable="sh"
centered="true"
v-model:visible="learnBgMore"
:footer="null"
wrapClassName="courseBgMoreModal"
:z-index="9999"
>
<div class="main">
<div class="top">
<div class="topc">面授课封面</div>
<div @click="closeLearnBgMore">
<img
style="width: 20px; height: 20px"
src="../../assets/images/basicinfo/close.png"
/>
</div>
</div>
<div class="imagesBox">
<div
@click="chooseImg(item)"
v-for="item in optionsUrl"
:key="item.id"
class="learnBgItem"
:style="{
border:
pathBgId === item.id
? '3px solid rgba(78, 166, 255, 1)'
: '1px solid #ccc',
'background-image': 'url(' + item.value + ')',
}"
>
<!-- <img class="im" :src="item.source" /> -->
</div>
</div>
<div class="btn">
<button class="samtn btn1" @click="closeLearnBgMore">取消</button>
<a-button class="samtn btn2" @click="closeLearnBgMore">确定</a-button>
</div>
</div>
</a-modal>
</template>
<script>
import {
reactive,
toRefs,
defineComponent,
ref,
shallowRef,
onUnmounted,
computed,
watch,
} from "vue";
import { validateName } from "@/api/index1";
import { message } from "ant-design-vue";
import { edit, detail, handle } from "@/api/indexCourse";
import { fileUp } from "../../api/indexEval";
import "@wangeditor/editor/dist/css/style.css";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import NameInput from "@/components/project/NameInput";
import FJUpload from "@/components/common/FJUpload";
import * as moment from "moment";
import * as api2 from "../../api/indexAudit";
import { useStore } from "vuex";
import OrgClassCheck from "@/components/project/OrgClassCheck";
import OrgClass from "@/components/project/OrgClass";
export default defineComponent({
components: {
Editor,
Toolbar,
FJUpload,
NameInput,
OrgClassCheck,
OrgClass,
},
props: {
xzinputV1: {
type: String,
default: null,
},
},
setup(props, { expose, emit }) {
const state = reactive({
hideshow: true,
ft_eidt: false,
attach: "",
validated: 2,
ft_hs: false,
addLoading: false,
statusJuJue: 0,
statusTingQi: 1,
member: { name: "", value: "" },
offcourseId: null,
qdms_inputV1: "",
qdms_inputV2: "",
qdms_inputV3: "",
fen_lei: null,
fen_lei1: null,
feng_mian_1: null,
chang_jin: "",
tags_val_single: "",
tags_val: [],
qdms_inputV6: "",
imgList: [],
auditDescription: "",
contentClassify: [],
// 课程三级分类
projectInfo: { id: "" },
//选择的封面图id及url
pathBgId: null,
pathBgUrl: null,
learnBgMore: false, //封面图弹窗
//目标任务
orgSelect: [],
orgSelectName: [],
orgSelectFullName: [],
selectJobName: [],
selectJobId: [],
selectBandName: [],
selectBandId: [],
//资源归属
sourceBelongId: null,
sourceBelongName: null,
sourceBelongFullName: null,
});
const store = useStore();
console.log(store, 666);
const sysTypeOptions = computed(() => store.state.content_type);
const optionsUrl = computed(() => store.state.course_pic);
console.log("optionsUrl", optionsUrl);
//获取岗位
const jobType = computed(() => store.state.job_type);
//获取band
const bandList = computed(() => store.state.band);
const userInfo = computed(() => store.state.userInfo);
console.log("jobTypebandList", jobType, bandList);
if (userInfo.value.departId && userInfo.value.departName) {
state.sourceBelongName = userInfo.value.departName;
state.sourceBelongId = userInfo.value.departId;
}
watch(
() => state.fen_lei,
() => {
state.fen_lei1 = findClassFullName(sysTypeOptions.value);
}
);
function findClassFullName(list, name = "") {
return (
list &&
list.length > 0 &&
list
.map((e) => {
return state.fen_lei === e.code
? name
? name + "-" + e.name
: e.name
: findClassFullName(
e.children,
name ? name + "-" + e.name : e.name
);
})
.filter((name) => name)
.join("")
);
}
// 删除文件返回参数
const changevalue = (e) => {
let arr = state.attach.split(",");
let newarr = [];
for (let i = 0; i < arr.length; i++) {
if (i !== e) {
newarr.push(arr[i]);
}
}
if (newarr.length == 0) {
state.attach = "";
} else {
state.attach = newarr.toString();
}
console.log("changevalue", e, newarr, state.attach);
};
const visibleOpen = (offcourseId, name) => {
state.offcourseId = offcourseId;
if (state.offcourseId) {
state.ft_hs = true;
state.ft_eidt = true;
handleEditInfo(state.offcourseId);
} else {
state.ft_hs = true;
state.ft_eidt = false;
state.qdms_inputV1 = name;
console.log(" state.qdms_inputV1 ", state.qdms_inputV1);
}
};
const visibleClose = () => {
state.ft_hs = false;
valueHtml.value = "";
ft_exit();
emit("visibleClose");
};
// 未编辑直接离开的 不予刷新
const noEditClose = () => {
state.ft_hs = false;
ft_exit();
emit("noEdit");
};
expose({
visibleOpen,
visibleClose,
});
const ft_exit = () => {
state.hideshow = true;
state.ft_hs = false;
state.addLoading = false;
state.statusJuJue = 0;
state.statusTingQi = 1;
state.member = { name: "", value: "" };
state.offcourseId = null;
state.qdms_inputV1 = "";
state.qdms_inputV2 = "";
state.qdms_inputV3 = "";
state.fen_lei = null;
state.fen_lei1 = null;
state.feng_mian_1 = null;
state.chang_jin = "";
state.tags_val_single = "";
state.tags_val = [];
state.qdms_inputV6 = "";
state.imgList = [];
state.attach = "";
state.auditDescription = "";
valueHtml.value = "";
//目标任务
state.orgSelect = [];
state.orgSelectName = [];
state.orgSelectFullName = [];
state.selectJobName = [];
state.selectJobId = [];
state.selectBandName = [];
state.selectBandId = [];
//资源归属
state.sourceBelongId = null;
state.sourceBelongName = null;
state.sourceBelongFullName = null;
// valueHtml.value = "";
console.log("清空");
};
// 富文本 sssssssssssssss
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef();
// 内容 HTML
const valueHtml = ref("");
// // 模拟 ajax 异步获取内容
// onMounted(() => {
// setTimeout(() => {
// // valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>";
// console.log(editorRef.value);
// // const toolbar = DomEditor.getToolbar(editorRef.value);
// // const menu = editorRef.value.getAllMenuKeys();
// // const bar = toolbar.getConfig().toolbarKeys;
// // console.log(menu);
// // console.log(bar);
// }, 3500);
// });
const toolbarConfig = {
excludeKeys: ["insertVideo", "insertImage"],
};
const editorConfig = { placeholder: "请输入内容...", MENU_CONF: {} };
editorConfig.MENU_CONF["uploadImage"] = {
// 自定义上传
async customUpload(file, insertFn) {
const formData = new FormData();
formData.append("file", file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
// 最后插入图片 url alt href
console.log(
"上传图片结果",
process.env.VUE_APP_FILE_PATH + res.data.data
);
insertFn(
process.env.VUE_APP_FILE_PATH + res.data.data,
file.name,
res.data.data
);
}
});
},
};
const handleCreated = (editor) => {
editorRef.value = editor; // 记录 editor 实例,重要!
};
// const handleDestory = () => {
// const editor = editorRef.value;
// if (editor == null) return;
// editor.destroy();
// };
// 组件销毁时,也及时销毁编辑器
onUnmounted(() => {
console.log("组件销毁时,也及时销毁编辑器");
// handleDestory();
});
// 富文本 eeeeeeeeeeeeee
// 点击图片选择图片
const chooseImg = (item) => {
console.log(item);
state.pathBgId = item.id;
state.feng_mian_1 = item.value;
};
//获取分类、场景、封面图、-----------字典配置-------------------------------
const options2 = ref([]);
const options3 = ref([]);
const options4 = ref([]);
//获取分类、场景、封面图、----------------字典配置---------------------------
const hideShow = () => {
if (state.hideshow == true) {
state.hideshow = false;
} else {
state.hideshow = true;
}
};
const checkVal = (checkList) => {
let count = 0;
for (const keyName of checkList) {
if (!keyName) {
count++;
console.log("keyname", keyName);
}
}
return !count;
};
//保存面授课
const handlePush = async (param) => {
console.log(
"组织、岗位、Band、资源归属选择" + JSON.stringify(state)
// state.orgSelect,
// state.selectJobId,
// state.selectBandId,
// state.sourceBelongId
);
let files = "";
if (state.imgList.length) {
state.imgList.forEach((item) => {
files += item.img + ",";
});
}
files = files.slice(0, files.length - 1);
let orgSelectIds = "";
let orgSelectNames = "";
if (state.orgSelect && state.orgSelect.length) {
state.orgSelect.forEach((item) => {
orgSelectIds += item.value + ",";
});
state.orgSelect.forEach((item) => {
orgSelectNames += item.label + ",";
});
}
console.log("orgSelectIds&orgSelectNames2", orgSelectIds, orgSelectNames);
orgSelectIds = orgSelectIds.slice(0, orgSelectIds.length - 1);
orgSelectNames = orgSelectNames.slice(0, orgSelectNames.length - 1);
let selectJobId = "";
if (state.selectJobId.length) {
state.selectJobId.forEach((item) => {
selectJobId += item + ",";
});
}
selectJobId = selectJobId.slice(0, selectJobId.length - 1);
let selectBandId = "";
if (state.selectBandId.length) {
state.selectBandId.forEach((item) => {
selectBandId += item + ",";
});
}
selectBandId = selectBandId.slice(0, selectBandId.length - 1);
console.log("filesfiles", files);
const offName = await validateName({
name: state.qdms_inputV1,
type: 2,
id: state.offcourseId,
}).then((res) => {
return res.data.data === 1;
});
console.log("校验重复", offName);
if (offName) {
message.destroy();
return message.warning("课程名称重复,请重新填写");
}
const postData = {
id: state.offcourseId, //不传代表新增
name: state.qdms_inputV1,
picUrl: state.feng_mian_1,
targetUser: state.qdms_inputV2,
meaning: state.qdms_inputV3,
// categoryId: state.fen_lei,
sysTypeId: state.fen_lei,
sceneContent: state.chang_jin,
tips: state.tags_val ? state.tags_val.join(",") : null,
// teacherId: state.member.value,
// teacher: state.member.name,
intro: state.qdms_inputV6,
attach: state.attach,
outline: valueHtml.value,
// organizationIds: orgSelect, //todo 传的不对
organizationIds: orgSelectIds,
organizationNames: orgSelectNames,
jobTypeIds: selectJobId,
bandIds: selectBandId,
sourceBelongId: state.sourceBelongId,
sourceBelongFullName: state.sourceBelongName,
};
console.log("postData", postData);
const checkList = [
postData.name,
// postData.targetUser,
// postData.categoryId,
postData.sysTypeId,
// postData.teacherId,
postData.picUrl,
postData.intro,
postData.sourceBelongId,
];
console.log("checkList", checkList);
if (
(!postData.organizationIds &&
!postData.jobTypeIds &&
!postData.bandIds) ||
!checkVal(checkList)
) {
message.destroy();
return message.error("请输入必填项");
} else {
state.addLoading = true;
}
edit(postData).then((res) => {
state.addLoading = false;
if (res.data.code === 200) {
state.statusTingQi = 1;
if (param === "review") {
//新建时点击审核按钮
submitReview(res.data.data.id);
} else {
message.destroy();
message.success("保存成功");
visibleClose();
}
} else if (res.data.code === -1) {
message.destroy();
message.success("无此操作权限");
visibleClose();
}
});
};
//编辑面授课渲染绑定
const handleEditInfo = async (offcourseId) => {
console.log("jjjaj");
state.validate = true;
state.qdms_inputV1 = "";
const item = await detail({
offcourseId: Number(offcourseId),
}).then((res) => {
if (res.data.code === 200) return res.data.data;
});
state.statusJuJue = Number(item.auditStatus) === -1 ? 1 : 0;
if (Number(item.auditStatus) === 2 && Number(item.status) === 1) {
state.statusTingQi = 1;
}
if (Number(item.auditStatus) === 2 && Number(item.status) === 0) {
state.statusTingQi = 0;
}
if (Number(item.auditStatus) === -1) {
let obj = {
offcourseId: offcourseId,
type: 2,
pageNo: 1,
pageSize: 1,
};
const res = await api2.auditList(obj).then((res) => {
if (res.data.code === 200) return res.data.data;
});
if (res.rows && res.rows.length > 0) {
let i = res.rows.length;
state.auditDescription = res.rows[i - 1].description
? res.rows[i - 1].description
: "-";
}
}
state.qdms_inputV1 = item.name;
state.feng_mian_1 = item.picUrl;
state.qdms_inputV2 = item.targetUser;
state.qdms_inputV3 = item.meaning;
// state.fen_lei = item.categoryId;
state.fen_lei = item.sysTypeId;
state.chang_jin = String(item.sceneContent ? item.sceneContent : "");
state.tags_val = item.tips ? item.tips.split(",") : [];
state.qdms_inputV6 = item.intro;
state.member = { value: item.teacherId, name: item.teacher };
valueHtml.value = item.outline;
let arrss = item.attach.split(",");
let str = "";
for (let i = 0; i < arrss.length; i++) {
i == arrss.length - 1
? (str += arrss[i].slice(arrss[i].lastIndexOf("/") + 1))
: (str += arrss[i].slice(arrss[i].lastIndexOf("/") + 1) + ",");
}
console.log(str);
state.attach = str;
if (item.jobTypeIds) {
state.selectJobId = item.jobTypeIds.split(",");
}
if (item.bandIds) {
state.selectBandId = item.bandIds.split(",");
}
console.log("state.selectBandId", state.selectBandId);
state.sourceBelongId = item.sourceBelongId;
state.sourceBelongName = item.sourceBelongFullName;
if (item.organizationIds && item.organizationNames) {
let orgSelectIds = item.organizationIds;
let orgSelectNames = item.organizationNames;
orgSelectIds = orgSelectIds.split(",");
orgSelectNames = orgSelectNames.split(",");
console.log(
"orgSelectIds&orgSelectNames",
orgSelectIds,
orgSelectNames
);
let arrObj = [];
arrObj = orgSelectIds.map((item, index) => {
return { value: item, label: orgSelectNames[index] };
});
console.log("arrObj-------------", arrObj);
state.orgSelect = arrObj;
}
const imgDict = optionsUrl.value.find(
(img) => img.value.split(",")[0] === item.picUrl
);
console.log("imgDict", imgDict);
if (imgDict) {
state.pathBgId = imgDict.id;
}
};
const handleTagChange = () => {
if (state.tags_val_single) {
state.tags_val.push(state.tags_val_single);
}
state.tags_val_single = "";
};
const handleTagClose = (item) => {
const arr = state.tags_val.filter((itm) => itm !== item);
state.tags_val = arr;
};
//提交审核
const reviewClick = () => {
if (state.offcourseId) {
submitReview(state.offcourseId);
} else {
handlePush("review");
}
};
const submitReview = (id) => {
state.addLoading = true;
if (id === "") {
return message.error("请先完成保存");
}
let obj = {
offcourseId: id ? id : state.offcourseId,
type: 1,
};
console.log("提交审核参数", obj);
handle(obj).then((res) => {
console.log("提交审核成功", res.data);
if (res.data.code === 200) {
message.destroy();
message.success("已提交审核");
state.addLoading = false;
visibleClose();
} else if (res.data.code === -1) {
message.destroy();
message.success("无此操作权限");
}
});
};
//目标人群
const handleChangeJob = (e, k) => {
console.log("eeee", e, k);
state.selectJobId = e;
};
const handleChangeBand = (e, k) => {
console.log("eeeeeeeeeee", e, k);
state.selectBandId = e;
};
//封面图
const showLearnBgMore = () => {
state.learnBgMore = true;
};
//关闭更多路径背景弹窗
const closeLearnBgMore = () => {
state.learnBgMore = false;
};
return {
...toRefs(state),
sysTypeOptions,
moment,
options2,
options3,
options4,
optionsUrl,
jobType,
bandList,
hideShow,
visibleOpen,
visibleClose,
handleTagChange,
handleTagClose,
handlePush,
reviewClick,
noEditClose,
editorRef,
valueHtml,
mode: "simple", // 或 'simple'
toolbarConfig,
editorConfig,
handleCreated,
chooseImg,
changevalue,
showLearnBgMore,
closeLearnBgMore,
handleChangeJob,
handleChangeBand,
};
},
});
</script>
<style lang="scss">
.facteachModal {
.ant-modal {
.ant-modal-content {
.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 {
margin-top: 10px;
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;
}
}
}
.fujian {
display: none;
}
.mbl_items12 {
width: 440px;
margin-right: 56px;
.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 {
width: calc(100% - 150px);
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;
}
}
}
}
}
}
.statusJuJue {
margin-bottom: 20px;
}
.choiceoptionurl {
width: 100px;
height: 100px;
margin-right: 10px;
border-radius: 8px;
}
.learnBgItem {
border-radius: 8px;
width: 100px;
height: 100px;
background-size: 100%;
background-repeat: no-repeat;
// margin-bottom: 20px;
margin-right: 6px;
}
.learnBgMore {
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #c7cbd2;
font-size: 14px;
font-weight: 400;
color: #4ea6ff;
line-height: 36px;
cursor: pointer;
}
.aeLoading {
z-index: 10000;
}
}
.coursemodal {
.i1_input {
.ant-select-selector {
min-height: 40px !important;
border-radius: 8px !important;
border: 1px solid #c7cbd2 !important;
}
}
}
.courseBgMoreModal {
.ant-modal {
width: 680px !important;
height: 528px !important;
.ant-modal-content {
width: 680px !important;
height: 528px !important;
.ant-modal-body {
width: 680px !important;
height: 528px !important;
padding: 0 !important;
.main {
display: flex;
flex-direction: column;
.top {
padding-left: 51px;
padding-right: 51px;
padding-top: 28px;
display: flex;
align-items: center;
justify-content: space-between;
cursor: pointer;
.topc {
font-size: 16px;
font-weight: bold;
color: #000000;
line-height: 36px;
}
}
.imagesBox {
display: flex;
// justify-content: space-between;
flex-wrap: wrap;
padding-left: 51px;
padding-right: 39px;
margin-top: 20px;
height: 350px;
overflow-y: auto;
.learnBgItem {
border-radius: 8px;
width: 136px;
height: 106px;
background-size: 100%;
background-repeat: no-repeat;
margin-bottom: 20px;
margin-right: 10px;
}
}
.btn {
width: 100%;
position: absolute;
bottom: 30px;
margin-top: 30px;
display: flex;
justify-content: center;
.samtn {
width: 100px;
height: 40px;
font-size: 14px;
border: 1px solid #4ea6ff;
border-radius: 8px;
cursor: pointer;
}
.btn1 {
background-color: #fff;
color: #4ea6ff;
}
.btn2 {
background-color: #4ea6ff;
color: #fff;
margin-left: 16px;
}
}
}
}
}
.ant-modal-close-x {
display: none;
}
}
}
</style>