{"version":3,"file":"homework.4d95d22d.mjs","sources":["../../../../pages/grade/homework.vue"],"sourcesContent":["<template>\n  <NuxtLayout>\n    <div class=\"w\">\n      <div class=\"homework_wrap\" v-if=\"showContent\">\n        <div class=\"homework_title flex flex-between flex-middle\">\n          <span class=\"homework_name\">{{ homeworkInfo.taskName }}</span>\n          <span class=\"homework_back flex flex-middle\" @click=\"handleBack\">返回作业列表<i class=\"arrows\"></i></span>\n        </div>\n        <div class=\"tips\" v-if=\"homeworkInfo.taskStatus === 5\">\n          <img\n            class=\"mgr10\"\n            src=\"@/assets/images/warning.png\"\n          />温馨提示：本次作业的提交截止时间已过，无法成功提交作业。你可以在输入框中输入答案作为练习\n        </div>\n        <div class=\"homework_content\">\n          <div v-html=\"homeworkInfo.content\"></div>\n          <div v-if=\"homeworkInfo.attachList.length\" class=\"homework_wrap_list\">\n            <div class=\"homework_wrap_item\" v-for=\"(item,index) of homeworkInfo.attachList\" :key=\"index\">\n              <div class=\"flex align-center\">\n                <img v-if=\"item.materialName.indexOf('.doc') > -1\" class=\"video_icon\" src=\"~/assets/icon_Word.svg\">\n                <img v-if=\"item.materialName.indexOf('.xls') > -1\" class=\"video_icon\" src=\"~/assets/icon_Excel.svg\">\n                <img v-if=\"item.materialName.indexOf('.ppt') > -1\" class=\"video_icon\" src=\"~/assets/icon_PPT.svg\">\n                <img v-if=\"item.materialName.indexOf('.pdf') > -1\" class=\"video_icon\" src=\"~/assets/icon_PDF.svg\">\n                <img v-if=\"item.materialName.indexOf('.txt') > -1\" class=\"video_icon\" src=\"~/assets/icon_txt.svg\">\n                <img v-if=\"item.materialName.indexOf('.zip') > -1 || item.materialName.indexOf('.rar') > -1\" class=\"video_icon\" src=\"~/assets/icon_rar.svg\">\n                <div class=\"mater_name\" @click=\"getPreviewUrl(item)\">{{ item.materialName }}</div>\n              </div>\n              <div class=\"flex align-center\">\n                <div class=\"mgr10\">{{ getSize(item.materialSize) }}</div>\n                <div class=\"mgr10 c_blue\" @click=\"getDwnUrl(item)\">下载</div>\n              </div>\n            </div>\n          </div>\n        </div>\n        <div class=\"homework_user_answer\">\n          <div class=\"homework_user_answer_title\">学员回答</div>\n          <div v-if=\"homeworkInfo.taskStatus < 3 || homeworkInfo.taskStatus === 5\" class=\"homework_user_answer_content\">\n            <div id=\"editorElem\"></div>\n          </div>\n          <template v-else>\n            <div class=\"answer_content\" v-html=\"homeworkInfo.userAnswer\" />\n            <div class=\"answer_content_bottom\"></div>\n          </template>\n        </div>\n        <div v-if=\"homeworkInfo.reviews\" class=\"homework_teacher_answer\">\n          <div class=\"homework_user_answer_title\">讲师点评</div>\n          <div class=\"reviews_content\" @click=\"handleRichTextClick\" v-html=\"homeworkInfo.reviews\" />\n        </div>\n      </div>\n      <div v-if=\"homeworkInfo.taskStatus < 3 || homeworkInfo.taskStatus === 5\" class=\"homework_submit\">\n        <el-button type=\"primary\" @click=\"submit\" :disabled=\"!homeworkInfo.userAnswer || homeworkInfo.taskStatus === 5\"> 提交作业 </el-button>\n      </div>\n    </div>\n  </NuxtLayout>\n</template>\n<script setup>\nimport { gradeHomeworkDetail, gradeHomeworkSave, gradeHomeworkStart, taskAttachPreview, taskAttachDownLoad } from '@/api/grade.js'\nimport { ElMessage } from 'element-plus'\nimport { parseHTML } from '@/utils/index.js'\nimport { uploadAuthPic } from '~/api/upload'\nimport {getSize} from '../../utils'\nimport bus from '@/utils/bus'\nimport { getSession } from '~/utils/storage'\nimport cookie from '@/utils/cookies'\nconst homeworkInfo = ref({})\nconst recordId = ref('')\nlet cookieData = cookie.getShop()\nuseHead({\n  title: '作业-' + cookieData.shopName,\n})\nuseHead({\n  title: computed(() => `${homeworkInfo.value.browserTitle ? homeworkInfo.value.browserTitle : homeworkInfo.value.taskName}`),\n  meta: [\n    {\n      hid: 'keywords',\n      name: 'keywords',\n      content: homeworkInfo.value.keywords || homeworkInfo.value.taskName,\n    },\n    {\n      hid: 'description',\n      name: 'description',\n      content: homeworkInfo.value.detailsDescribe ? homeworkInfo.value.detailsDescribe : homeworkInfo.value.taskName,\n    },\n  ],\n})\nconst editor = ref(null)\nconst handleRichTextClick = (e) => {\n  if (e && e.path) {\n    if (e.path[2] && e.path[2].dataset && e.path[2].dataset.id) {\n      const resourceId = e.path[2].dataset.id\n      bus.emit('preview-resource', resourceId)\n    } else if (e.path[1] && e.path[1].dataset && e.path[1].dataset.id) {\n      const resourceId = e.path[1].dataset.id\n      bus.emit('preview-resource', resourceId)\n    }\n  }\n}\nonMounted(() => {})\nconst initEditor = () => {\n  nextTick(() => {\n    const editorElem = document.querySelector('#editorElem')\n    if (!editorElem) return\n    editor.value = new wangEditor(editorElem)\n    editor.value.config.zIndex = 500\n    editor.value.config.onchange = (html) => {\n      homeworkInfo.value.userAnswer = html\n    }\n    editor.value.config.excludeMenus = ['video']\n    editor.value.config.customUploadImg = function (resultFiles, insertImgFn) {\n      resultFiles.forEach((file) => {\n        const formData = new FormData()\n        formData.append('picFile', file)\n        uploadAuthPic(formData).then((res) => {\n          if (res && res.data) {\n            insertImgFn(res.data.fileUrl)\n          }\n        })\n      })\n    }\n    editor.value.create()\n    editor.value.txt.html(homeworkInfo.value.userAnswer)\n  })\n}\nonUnmounted(() => {\n  editor.value && editor.value.destroy()\n  editor.value = null\n})\nconst handleBack = () => {\n  router.go(-1)\n}\nconst getPreviewUrl = (row) => {\n  if (row.materialName.indexOf('rar') > -1 || row.materialName.indexOf('zip') > -1) {\n    this.getDwnUrl(row)\n    return\n  }\n  taskAttachPreview({\n    attachId: row.id,\n    ip: getSession('ipInfo') && getSession('ipInfo').i,\n    taskId: route.query.id\n  }).then(res => {\n    res && res.fileUrl && window.open(res.fileUrl, '_blank')\n  })\n}\nconst getDwnUrl = async (row) => {\n  const url = await taskAttachDownLoad({taskId: route.query.id, attachId: row.id})\n  const link = document.createElement('a');\n  link.href = url;\n  link.download = row.materialName;\n  link.click();\n}\nconst submit = async () => {\n  const { id, userAnswer } = homeworkInfo.value\n  const answerContent = parseHTML(userAnswer)\n  if (!answerContent) {\n    ElMessage.warning('作业内容不能为空')\n    return\n  }\n  await startHomework()\n  gradeHomeworkSave({\n    recordId: recordId.value,\n    userAnswer,\n  }).then((res) => {\n    if (res) {\n      ElMessage.success('提交成功')\n      router.go(-1)\n    }\n  })\n}\nconst showContent = computed(() => {\n  return Object.keys(homeworkInfo.value).length\n})\nconst route = useRoute()\nconst router = useRouter()\nconst getHomeworkInfo = () => {\n  gradeHomeworkDetail(route.query.id).then((res) => {\n    if (res) {\n      homeworkInfo.value = res\n      initEditor()\n    }\n  })\n}\nconst startHomework = () => {\n  return new Promise((resolve) => {\n    gradeHomeworkStart(route.query.id).then((res) => {\n      if (res) {\n        recordId.value = res.recordId\n        resolve()\n      }\n    })\n  })\n}\nonMounted(() => {\n  getHomeworkInfo()\n  // startHomework()\n})\n</script>\n<style lang=\"scss\" scoped>\n.homework_wrap {\n  margin-top: 30px;\n  background-color: #fff;\n  padding: 30px;\n  .tips {\n    margin-top: 8px;\n    display: flex;\n    align-items: center;\n    padding: 10px;\n    background: rgba(242, 201, 76, 0.1);\n    color: #666666;\n    font-size: 14px;\n    line-height: 22px;\n    border-radius: 4px;\n    border: 1px solid rgba(242, 201, 76, 0.6);\n    img {\n      width: 16px;\n      height: 16px;\n    }\n  }\n  .homework_content {\n    margin-top: 8px;\n    .video_icon {\n      font-size: 24px;\n    }\n    .align-center {\n      align-items: center;\n    }\n    .c_blue {\n      color: #3D7FFF;\n      cursor: pointer;\n    }\n    .homework_wrap_list {\n      display: flex;\n      flex-wrap: wrap;\n    }\n    .homework_wrap_item {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      border-radius: 4px;\n      padding: 8px;\n      width: 48%;\n      margin-bottom: 10px;\n      background: rgba(191, 191, 191, 0.12);\n      &:nth-child(odd) {\n        margin-right: 4%;\n      }\n      .mater_name {\n        color: #666;\n        font-size: 14px;\n        margin-left: 8px;\n        cursor: pointer;\n        &:hover {\n          color: #3D7FFF;\n        }\n      }\n    }\n  }\n  .homework_name {\n    font-size: 18px;\n    line-height: 26px;\n    color: #333333;\n    cursor: pointer;\n  }\n  .homework_back {\n    cursor: pointer;\n    font-size: 14px;\n    line-height: 18px;\n    color: #3d7fff;\n  }\n  .homework_title {\n    padding-bottom: 16px;\n  }\n  .homework_user_answer_title {\n    margin-top: 24px;\n    margin-bottom: 12px;\n    display: flex;\n    align-items: center;\n    &::before {\n      content: '';\n      margin-right: 10px;\n      background: #3d7fff;\n      width: 4px;\n      height: 16px;\n    }\n  }\n  .homework_user_answer_content {\n    // border: 1px solid #D9D9D9;\n  }\n}\n.homework_submit {\n  padding-bottom: 20px;\n  margin-top: 30px;\n  text-align: right;\n}\n\n.answer_content {\n  width: 100%;\n  min-height: 96px;\n  padding: 12px;\n  background: #f2f3f5;\n  border-radius: 4px;\n  font-size: 14px;\n  line-height: 24px;\n  color: #666666;\n}\n.answer_content_bottom {\n  height: 30px;\n  border-bottom: 1px solid #ebeef5;\n}\n.reviews_content {\n  width: 100%;\n  min-height: 96px;\n  padding: 12px;\n  background: rgba(242, 60, 60, 0.08);\n  border-radius: 4px;\n  font-size: 14px;\n  line-height: 24px;\n  color: #666666;\n}\n</style>\n"],"names":["homeworkInfo","ref","recordId","cookieData","cookie","getShop","useHead","title","shopName","computed","value","browserTitle","taskName","meta","hid","name","content","keywords","detailsDescribe","editor","handleRichTextClick","e","path","dataset","id","resourceId","bus","emit","onMounted","onUnmounted","destroy","handleBack","router","go","getPreviewUrl","row","materialName","indexOf","this","getDwnUrl","taskAttachPreview","attachId","ip","getSession","i","taskId","route","query","then","res","fileUrl","window","open","submit","async","userAnswer","parseHTML","startHomework","gradeHomeworkSave","ElMessage","success","warning","showContent","Object","keys","length","useRoute","useRouter","getHomeworkInfo","gradeHomeworkDetail","nextTick","editorElem","document","querySelector","wangEditor","config","zIndex","onchange","html","excludeMenus","customUploadImg","resultFiles","insertImgFn","forEach","file","formData","FormData","append","uploadAuthPic","data","create","txt","Promise","resolve","gradeHomeworkStart","url","taskAttachDownLoad","link","createElement","href","download","click"],"mappings":"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"}