-- fix 在线课重复

This commit is contained in:
yuping
2023-03-09 00:54:48 +08:00
parent b6019bfec6
commit c8dbc48609
3 changed files with 54 additions and 46 deletions

View File

@@ -17,9 +17,9 @@
</div> </div>
<div> <div>
<div class="contentMain" style="padding:20px"> <div class="contentMain" style="padding:20px">
<CreateOnline ref="onlineRef" :id="props.id" :type="props.infoType"> <CreateOnline ref="onlineRef" :id="props.courseSyncFlag?'':props.id" :type="props.courseSyncFlag?'':props.infoType">
<a-button type="primary" style="border-radius: 4px">{{ <a-button type="primary" style="border-radius: 4px">{{
taskIndex === -1 ? '选择/新建课程' : '重新选择' taskIndex === -1 ? "选择/新建课程" : "重新选择"
}} }}
</a-button> </a-button>
</CreateOnline> </CreateOnline>
@@ -41,7 +41,7 @@
</a-drawer> </a-drawer>
</template> </template>
<script setup> <script setup>
import {defineEmits, defineProps, ref, watch} from "vue"; import {computed, defineEmits, defineProps, ref, watch} from "vue";
import {message} from "ant-design-vue"; import {message} from "ant-design-vue";
import CreateOnline from "@/components/drawers/CreateOnline.vue"; import CreateOnline from "@/components/drawers/CreateOnline.vue";
@@ -50,15 +50,16 @@ const props = defineProps({
infoType: Number, infoType: Number,
courseSyncFlag: Number, courseSyncFlag: Number,
id: Number, id: Number,
taskList: [] taskList: [],
}) chapterList: []
const visible = ref(false) });
const onlineRef = ref(false) const visible = ref(false);
const onlineRef = ref(false);
const taskIndex = ref(-1); const taskIndex = ref(-1);
const rowSelectKeys = ref([]); const rowSelectKeys = ref([]);
const selectsData = ref([]); const selectsData = ref([]);
const emit = defineEmits({}) const emit = defineEmits({});
const columns = ref([ const columns = ref([
{ {
title: "课程名称", title: "课程名称",
@@ -73,7 +74,7 @@ const columns = ref([
key: "type", key: "type",
width: "100px", width: "100px",
align: "center", align: "center",
customRender: ({record: {type}}) => ({10: '微课', 21: '直播', 20: '录播', 30: '面授', 90: '混合'}[type]), customRender: ({ record: { type } }) => ({ 10: "微课", 21: "直播", 20: "录播", 30: "面授", 90: "混合" }[type]),
}, },
{ {
title: "创建人", title: "创建人",
@@ -96,64 +97,71 @@ const columns = ref([
width: "100px", width: "100px",
align: "center", align: "center",
}, },
]) ]);
watch(taskIndex, () => { watch(taskIndex, () => {
if (taskIndex.value >= 0) { if (taskIndex.value >= 0) {
rowSelectKeys.value = [] rowSelectKeys.value = [];
} }
}) });
const selectIds = computed(()=>props.chapterList.flatMap(t=>props.infoType===1?t.taskDraftDtoList:t.draftTaskList)?.filter(s=>s?.type===props.type).map(t=>t.courseId).join(',') || '')
const closeDrawer = () => { const closeDrawer = () => {
visible.value = false visible.value = false;
taskIndex.value = -1 taskIndex.value = -1;
selectsData.value = [] selectsData.value = [];
rowSelectKeys.value = [] rowSelectKeys.value = [];
}; };
function confirm() { function confirm() {
if (!selectsData.value.length || !rowSelectKeys.value.length) { if (!selectsData.value.length || !rowSelectKeys.value.length) {
message.warning("请选择在线课!"); message.warning("请选择在线课!");
return return;
} }
if (taskIndex.value === -1) { if (taskIndex.value === -1) {
const list = props.taskList const list = props.taskList;
list.push({ list.push({
name: selectsData.value[0].name, name: selectsData.value[0].name,
type: props.type, type: props.type,
courseId: selectsData.value[0].id, courseId: selectsData.value[0].id,
info: {...selectsData.value[0]} info: { ...selectsData.value[0] }
}) });
} else { } else {
const data = props.taskList[taskIndex.value] const data = props.taskList[taskIndex.value];
data.name = selectsData.value[0].name data.name = selectsData.value[0].name;
data.courseId = selectsData.value[0].id data.courseId = selectsData.value[0].id;
data.info = selectsData.value[0] data.info = selectsData.value[0];
} }
emit('update:taskList', [...props.taskList]) emit("update:taskList", [...props.taskList]);
closeDrawer() closeDrawer();
} }
function selectCourse(row) { function selectCourse(row) {
console.log(row) console.log(row);
if(!props.courseSyncFlag && !row.refId){ if (!props.courseSyncFlag && !row.refId) {
message.warning("请新建本项目在线课!"); message.warning("请新建本项目在线课!");
return return;
} }
rowSelectKeys.value = [row.id]
selectsData.value = [row] if (selectIds.value.includes(row.id)) {
onlineRef.value.closeModal() message.warning("本项目中已经包含此在线课!");
return;
}
rowSelectKeys.value = [row.id];
selectsData.value = [row];
onlineRef.value.closeModal();
} }
function openDrawer(i, row) { function openDrawer(i, row) {
window.selectCourse = selectCourse window.selectCourse = selectCourse;
row && (rowSelectKeys.value = [row.courseId]); row && (rowSelectKeys.value = [row.courseId]);
row && (selectsData.value = [row.info]); row && (selectsData.value = [row.info]);
(i >= 0) && (taskIndex.value = i); (i >= 0) && (taskIndex.value = i);
visible.value = true visible.value = true;
} }
defineExpose({openDrawer, selectCourse}) defineExpose({ openDrawer, selectCourse });
</script> </script>
<style lang="scss"> <style lang="scss">

View File

@@ -141,7 +141,7 @@
<div class="mid"> <div class="mid">
<div class="item" v-for="(value,key) in TASK_TYPE" :key="key"> <div class="item" v-for="(value,key) in TASK_TYPE" :key="key">
<component :is="value.component" :ref="el=>courseRef['el'+key]=el" :type="key" :infoType="2" :id="routerInfo.routerInfo?.id" :courseSyncFlag="routerInfo.routerInfo?.courseSyncFlag" <component :is="value.component" :ref="el=>courseRef['el'+key]=el" :type="key" :infoType="2" :id="routerInfo.routerInfo?.id" :courseSyncFlag="routerInfo.routerInfo?.courseSyncFlag"
v-model:task-list="routerInfo.chapterList[activeIndex].draftTaskList"> v-model:task-list="routerInfo.chapterList[activeIndex].draftTaskList" :chapter-list="routerInfo.chapterList">
<div class="itcon"> <div class="itcon">
<div class="img"> <div class="img">
<img :src="value.img"/> <img :src="value.img"/>

View File

@@ -101,7 +101,7 @@
<div class="item" v-for="(value,key) in TASK_TYPE" :key="key"> <div class="item" v-for="(value,key) in TASK_TYPE" :key="key">
<div v-if="key!=13"> <div v-if="key!=13">
<component :is="value.component" :ref="el=>courseRef['el'+key]=el" :type="key" :infoType="1" :id="projectInfo.projectInfo?.id" :courseSyncFlag="projectInfo.projectInfo?.courseSyncFlag" <component :is="value.component" :ref="el=>courseRef['el'+key]=el" :type="key" :infoType="1" :id="projectInfo.projectInfo?.id" :courseSyncFlag="projectInfo.projectInfo?.courseSyncFlag"
v-model:task-list="projectInfo.stageList[activeIndex].taskDraftDtoList"> v-model:task-list="projectInfo.stageList[activeIndex].taskDraftDtoList" :chapter-list="projectInfo.stageList">
<div class="itcon"> <div class="itcon">
<div class="img"> <div class="img">
<img :src="value.img"/> <img :src="value.img"/>