{"version":3,"file":"detail.e5466e1f.mjs","sources":["../../../../components/event/judgesPrev.vue","../../../../components/event/judgesList.vue","../../../../components/event/score.vue","../../../../pages/account/judges/detail.vue","../../../../utils/frmDownload.js"],"sourcesContent":["<template>\r\n  <el-dialog\r\n    :model-value=\"modelValue\"\r\n    :before-close=\"handleClose\"\r\n    custom-class=\"footer_border_dialog\"\r\n    title=\"预览\"\r\n    center\r\n    :fullscreen=\"true\"\r\n    :close-on-click-modal=\"false\"\r\n    :append-to-body=\"true\"\r\n  >\r\n    <template v-if=\"ctrl.isVideo\">\r\n      <video style=\"margin: auto;height: 100%;\" controls>\r\n        <source :src=\"opts.fileUrl\" type=\"video/mp4\">\r\n        <source :src=\"opts.fileUrl\" type=\"video/ogg\">\r\n        <source :src=\"opts.fileUrl\" type=\"video/webm\">\r\n      </video>\r\n    </template>\r\n    <template v-else-if=\"ctrl.isImg\">\r\n      <img style=\"margin: 0 auto;\" :src=\"opts.fileUrl\" alt=\"\">\r\n    </template>\r\n    <template v-else>\r\n      <iframe\r\n        ref=\"office\"\r\n        :src=\"opts.fileUrl\"\r\n        id=\"officeIframe\"\r\n        class=\"video_content\"\r\n        allow=\"microphone; camera;\"\r\n      ></iframe>\r\n    </template>\r\n    <template #footer>\r\n      <div class=\"footer_btn\">\r\n        <el-button plain @click=\"handleClose\">关闭</el-button>\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script setup>\r\nimport {reactive, onMounted} from \"vue\";\r\nimport { ratingPreview } from '@/api/event'\r\n\r\nconst props = defineProps({\r\n  modelValue: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  materialId: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\nconst { materialId } = props\r\n\r\nconst ctrl = reactive({\r\n  isVideo: false\r\n})\r\nconst opts = reactive({\r\n  fileUrl: '',\r\n  mediaEnum: ['3gp', 'asf', 'avi', 'dat', 'flv', 'f4v', 'm4v', 'mkv', 'mov', 'mp4', 'mpe', 'mpg', 'mpeg', 'rmvb', 'vob', 'wmv', 'aac', 'wav', 'wma', 'mp3']\r\n})\r\n\r\nonMounted(() => {\r\n  getPrevUrl()\r\n})\r\n\r\nconst handleClose = () => { // 关闭\r\n  emit('update:modelValue', false)\r\n}\r\nconst emit = defineEmits(['update:modelValue'])\r\nconst getPrevUrl = () => {\r\n  ratingPreview({ id: materialId}).then(res => {\r\n    ctrl.isVideo = opts.mediaEnum.indexOf(res.materialName.substring(res.materialName.lastIndexOf('.') + 1)) > -1\r\n    ctrl.isImg = [4].indexOf(res.materialType) > -1\r\n    nextTick(() => {\r\n      if (ctrl.isVideo) {\r\n        opts.fileUrl = res.materialUrl;\r\n      } else if(ctrl.isImg) {\r\n        opts.fileUrl = res.coverUrl;\r\n      } else {\r\n        opts.fileUrl = res.fileUrl;\r\n      }\r\n    })\r\n  })\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.footer_btn {\r\n  text-align: center;\r\n  .el-button {\r\n    width: 80px;\r\n    height: 32px;\r\n    border-radius: 4px;\r\n  }\r\n}\r\n.video_content {\r\n  width: calc(100%);\r\n  height: calc(100%);\r\n  padding: 30px 40px 0;\r\n  position: relative;\r\n  img {\r\n    display: initial;\r\n  }\r\n}\r\n\r\n.player {\r\n  width: calc(100%);\r\n  height: calc(100%);\r\n  padding: 30px 40px 0;\r\n  position: relative;\r\n}\r\n</style>","<template>\r\n  <el-dialog \r\n    :model-value=\"modelValue\"\r\n    :before-close=\"handleClose\"\r\n    custom-class=\"footer_border_dialog\"\r\n    title=\"文件阅览\"\r\n    width=\"850px\"\r\n  >\r\n  <template v-if=\"map.list.length\">\r\n    <el-table :data=\"map.list\" class=\"list file_table mgt10\" row-key=\"id\" size=\"large\">\r\n      <el-table-column min-width=\"350\" label=\"文件名称\">\r\n        <template #default=\"scope\">\r\n          <div class=\"material_name\">\r\n            <span class=\"ov_text\">{{ scope.row['materialName'] }}</span>\r\n          </div>\r\n        </template>\r\n      </el-table-column>\r\n      <el-table-column width=\"120\" label=\"文件大小\">\r\n        <template #default=\"scope\">\r\n          {{ getSize(scope.row['materialSize']) }}\r\n        </template>\r\n      </el-table-column>\r\n      <el-table-column width=\"100\" label=\"操作\">\r\n        <template #default=\"scope\">\r\n          <template v-if=\"scope.row.materialName\">\r\n            <span v-if=\"['rar', 'zip'].indexOf(scope.row.materialName.substring(scope.row.materialName.lastIndexOf('.') + 1)) > -1\">-</span>\r\n            <el-button v-else style=\"padding: 0;\" type=\"text\" @click=\"handlePreview(scope.row.materialId)\">预览</el-button>\r\n          </template>\r\n        </template>\r\n      </el-table-column>\r\n    </el-table>\r\n  </template>\r\n    <template #footer>\r\n      <div class=\"footer_btn\">\r\n        <el-button plain @click=\"handleClose\">关闭</el-button>\r\n      </div>\r\n    </template>\r\n    <event-judges-prev v-if=\"ctrl.preview\" v-model=\"ctrl.preview\" :material-id=\"ctrl.materialId\" />\r\n  </el-dialog>\r\n</template>\r\n\r\n<script setup>\r\nimport {reactive, onMounted} from \"vue\";\r\nimport {getSize} from '@/utils'\r\nimport { ratingList, proveList, ratingPreview } from '@/api/event'\r\n\r\nconst props = defineProps({\r\n  modelValue: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  ratingId: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  proveId: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  prevType: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\nconst { ratingId, proveId, prevType } = props\r\nconst ctrl = reactive({\r\n  materialId: '',\r\n  preview: false\r\n})\r\nconst map = reactive({\r\n  list: []\r\n})\r\nconst emit = defineEmits(['update:modelValue'])\r\n\r\nonMounted(() => {\r\n  getRatingList()\r\n})\r\nconst handleClose = () => { // 关闭\r\n  emit('update:modelValue', false)\r\n}\r\nconst getRatingList = () => {\r\n  if (prevType === 'prove') {\r\n    proveList(proveId).then(res => {\r\n      map.list = res\r\n    })\r\n  } else {\r\n    ratingList(ratingId).then(res => {\r\n      map.list = res\r\n    })\r\n  }\r\n}\r\nconst handlePreview = (id) => {\r\n  ctrl.materialId = id\r\n  ctrl.preview = true\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.footer_btn {\r\n  text-align: center;\r\n\r\n  .el-button {\r\n    width: 80px;\r\n    height: 32px;\r\n    border-radius: 4px;\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-dialog\r\n    :model-value=\"modelValue\"\r\n    :before-close=\"handleClose\"\r\n    custom-class=\"footer_border_dialog\"\r\n    title=\"文件阅览\"\r\n    width=\"850px\"\r\n  >\r\n    <el-form\r\n      ref=\"formRef\"\r\n      :model=\"form\"\r\n      :rules=\"rules\"\r\n      label-width=\"140px\"\r\n      size=\"large\"\r\n      class=\"form\"\r\n    >\r\n      <el-form-item label=\"评审分值\" prop=\"userScore\">\r\n        <el-input class=\"w680\" v-model=\"form.userScore\" placeholder=\"请输入评审分值\"></el-input>\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <div class=\"footer_btn\">\r\n        <el-button plain @click=\"handleClose\">关闭</el-button>\r\n        <el-button\r\n          v-loading=\"ctrl.loading\"\r\n          type=\"primary\"\r\n          @click=\"submitForm(formRef)\"\r\n          >确定</el-button\r\n        >\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElMessage } from 'element-plus'\r\nimport { ratingScore } from '@/api/event'\r\n\r\nconst props = defineProps({\r\n  modelValue: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  ratingId: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  score: {\r\n    type: [Number, String],\r\n    default: null\r\n  }\r\n})\r\nconst formRef = ref('')\r\nconst rules = reactive({\r\n  userScore: [{ required: true, message: '请输入分值', trigger: 'blur' }]\r\n})\r\nconst ctrl = reactive({\r\n  loading: false\r\n})\r\nconst { ratingId, score } = props\r\nconst form = reactive({\r\n  userScore: score\r\n})\r\nconst emit = defineEmits(['update:modelValue'])\r\n\r\nconst handleClose = () => { // 关闭\r\n  emit('update:modelValue', false)\r\n}\r\n\r\nfunction submitForm(formEl) {\r\n  if (!formEl) return;\r\n  if (ctrl.loading) return;\r\n  formEl.validate((valid) => {\r\n    if (valid) {\r\n      ctrl.loading = true\r\n      const p = {\r\n        id: ratingId,\r\n        userScore: form.userScore\r\n      }\r\n      ratingScore(p).then(res => {\r\n        ElMessage.success(res)\r\n        handleClose()\r\n        emit('callback')\r\n      }).finally(() => {\r\n        ctrl.loading = false\r\n      })\r\n    }\r\n  })\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.footer_btn {\r\n  text-align: center;\r\n\r\n  .el-button {\r\n    width: 80px;\r\n    height: 32px;\r\n    border-radius: 4px;\r\n  }\r\n}\r\n</style>","<template>\r\n  <NuxtLayout name=\"account\">\r\n    <div class=\"detail_header course_info_wrapper\">\r\n      <div>\r\n        <el-button class=\"font14\" style=\"padding: 0\" type=\"text\" @click=\"back\">\r\n          <el-icon><ArrowLeft /></el-icon>\r\n          返回\r\n        </el-button>\r\n      </div>\r\n      <div class=\"course_info\">\r\n        <div class=\"course_info_detail\">\r\n          <div class=\"row title\">\r\n            <span class=\"tx-ov\">{{ data.eventInfo.pageName }}</span>\r\n          </div>\r\n          <div class=\"\">\r\n            <div class=\"row c_999\">\r\n              <span class=\"label\">比赛时间</span>：\r\n              <span class=\"inner tx-ov\">{{ data.eventInfo.beginTime }} ~ {{ data.eventInfo.endTime }}</span>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"placeholder\"></div>\r\n     <div class=\"page-account-course\">\r\n       <el-tabs v-model=\"entryType\" class=\"demo-tabs\">\r\n         <el-tab-pane\r\n           v-for=\"(item, index) in data.tabsList\"\r\n           :key=\"index\"\r\n           :label=\"item.desc\"\r\n           :name=\"item.code\"\r\n         ></el-tab-pane>\r\n       </el-tabs>\r\n       <div class=\"list\" v-if=\"data.list.length\">\r\n        <el-table :data=\"data.list\" row-key=\"id\" size=\"large\">\r\n          <el-table-column label=\"真实姓名\" prop=\"realName\" width=\"100\" />\r\n          <el-table-column label=\"任教年级\" prop=\"teachGrade\" width=\"120\" />\r\n          <el-table-column label=\"任教科目\" prop=\"teachSubject\" width=\"120\" />\r\n          <el-table-column label=\"上传课例时间\" prop=\"gmtCreate\" width=\"180\" />\r\n          <el-table-column label=\"分值\" prop=\"userScore\" width=\"100\" />\r\n          <el-table-column label=\"状态\" prop=\"tutorName\" width=\"120\">\r\n            <template #default=\"scope\">\r\n              <span \r\n              :class=\"{\r\n                exam_status:true,\r\n                examing:scope.row.examStatus === 1,\r\n                wait:scope.row.examStatus === 2,\r\n                success:scope.row.examStatus === 3 || scope.row.examStatus === 4\r\n              }\">{{ ctrl.statusEnum[scope.row.examStatus] }}</span>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column  label=\"操作\" min-width=\"250\" fixed=\"right\">\r\n            <template #default=\"scope\">\r\n              <el-button type=\"text\" @click=\"openPreview(scope.row, 'prove')\">证明</el-button>\r\n              <el-button type=\"text\" @click=\"openPreview(scope.row, 'affix')\">课例</el-button>\r\n              <el-button type=\"text\" @click=\"handleDownload(scope.row)\">下载</el-button>\r\n              <el-button type=\"text\" @click=\"openScore(scope.row)\">打分</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n       </div>\r\n       <client-only v-if=\"data.pages > 1\">\r\n         <el-pagination\r\n           class=\"pagination\"\r\n           v-model:currentPage=\"data.current\"\r\n           layout=\"prev, pager, next, jumper\"\r\n           :total=\"data.totalCount\"\r\n           background\r\n           @current-change=\"handleCurrentChange\"\r\n         >\r\n         </el-pagination>\r\n       </client-only>\r\n       <event-judges-list v-if=\"ctrl.preview\" v-model=\"ctrl.preview\" :prev-type=\"ctrl.prevType\" :rating-id=\"ctrl.info.id\" :prove-id=\"ctrl.info.proveId\" />\r\n       <event-score v-if=\"ctrl.score\" v-model=\"ctrl.score\" :rating-id=\"ctrl.info.id\" :score=\"ctrl.info.userScore\" @callback=\"getData()\" />\r\n     </div>\r\n  </NuxtLayout>\r\n</template>\r\n\r\n<script setup>\r\nimport { ArrowLeft } from '@element-plus/icons-vue';\r\nimport { judgesEntryPage, ratingView } from \"~/api/event\";\r\nimport { formDownloadFile } from '@/utils/frmDownload';\r\nuseHead({\r\ntitle:'我的赛事'\r\n});\r\nconst router = useRouter();\r\nconst entryType = ref(\"\")\r\nconst eventId = ref(\"\");\r\nconst data = reactive({\r\ntabsList: [{code: '', desc: '课例成绩'}],\r\nlist: [],\r\npages: 0,\r\ncurrent: 1,\r\ntotalCount: 0,\r\neventInfo: {}\r\n});\r\nconst ctrl = reactive({\r\n  preview: false,\r\n  prevType: '',\r\n  score: false,\r\n  info: {},\r\n  statusEnum: ['', '考试中', '未评审', '评审中', '已评审']\r\n})\r\nconst route = useRoute()\r\nonMounted(() => {\r\nif(route.query.id){\r\n  eventId.value = route.query.id\r\n}\r\ngetData();\r\n})\r\nconst back = () => {\r\n  router.back()\r\n}\r\nconst openPreview = (row, type) => {\r\n  console.log('row', row)\r\n  console.log('type', type)\r\n  ctrl.prevType = type\r\n  ctrl.info = row\r\n  ctrl.preview = true\r\n}\r\nconst openScore = (row) => {\r\n  ctrl.info = row\r\n  ctrl.score = true\r\n}\r\nconst handleDownload = (row) => {\r\n  formDownloadFile(\r\n    '/resource/auth/event/enter/rating/download',\r\n    {\r\n      id: row.id\r\n    },\r\n    'get'\r\n  )\r\n}\r\n\r\nconst handleCurrentChange = (val) => {\r\ngetData(val);\r\ndocument.querySelector('#app').scrollTop = 150\r\n};\r\n\r\nconst getData = (page = 1) => {\r\n  judgesEntryPage({\r\n    pageSize: 10,\r\n    pageCurrent: page,\r\n    eventId: eventId.value\r\n  }).then((res) => {\r\n  console.log('res', res)\r\n  if (res) {\r\n    data.list = res.list;\r\n    data.pages = res.totalPage;\r\n    data.current = res.pageCurrent;\r\n    data.totalCount = res.totalCount\r\n  }\r\n  })\r\n  ratingView(eventId.value).then(res => {\r\n    data.eventInfo = res\r\n  })\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.page-account-course {\r\n.el-tabs__header {\r\n margin: 0;\r\n}\r\n.el-tabs__nav-wrap {\r\n padding: 0 30px;\r\n}\r\n.el-tabs__nav {\r\n padding: 10px 0;\r\n}\r\n}\r\n</style>\r\n<style lang=\"scss\" scoped>\r\n.course_info_wrapper {\r\n  padding: 20px;\r\n  min-height: 125px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: space-between;\r\n  .course_info {\r\n    margin-top: 10px;\r\n    position: relative;\r\n    display: flex;\r\n  }\r\n  .course_info_img {\r\n    position: relative;\r\n    overflow: hidden;\r\n    height: 125px;\r\n    width: 225px;\r\n    border-radius: 7px;\r\n    img {\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: cover;\r\n    }\r\n    .course_type {\r\n      position: absolute;\r\n      left: 8px;\r\n      bottom: 8px;\r\n      width: 50px;\r\n      height: 23px;\r\n      background: rgba(0, 0, 0, 0.5);\r\n      font-size: 10px;\r\n      line-height: 23px;\r\n      text-align: center;\r\n      color: #ffffff;\r\n      border-radius: 5px;\r\n    }\r\n  }\r\n  .course_info_detail {\r\n    color: #999999;\r\n    .title {\r\n      font-size: 16px;\r\n      line-height: 21px;\r\n      color: #333333;\r\n      width: 500px;\r\n    }\r\n  }\r\n  .row {\r\n    margin-bottom: 8px;\r\n    display: flex;\r\n    font-size: 14px;\r\n    line-height: 18px;\r\n    margin-right: 40px;\r\n  }\r\n  .row:last-child {\r\n    margin-bottom: 0;\r\n  }\r\n  .label {\r\n    height: 18px;\r\n    min-width: 60px;\r\n    max-width: 100px;\r\n    text-align: justify;\r\n  }\r\n\r\n  .label::after {\r\n    content: '.';\r\n    width: 100%;\r\n    display: inline-block;\r\n    overflow: hidden;\r\n    height: 0;\r\n  }\r\n}\r\n.detail_header {\r\n  padding: 20px;\r\n}\r\n.placeholder {\r\n  background-color: #f6f8fb;\r\n  height: 10px;\r\n}\r\n.list {\r\npadding: 30px;\r\n.item {\r\n padding: 30px 0;\r\n border-bottom: 1px solid #EBEEF5;\r\n display: flex;\r\n flex-wrap: wrap;\r\n .pic {\r\n   width: 180px;\r\n   height: 100px;\r\n   border-radius: 5px;\r\n   overflow: hidden;\r\n   position: relative;\r\n   color: #333;\r\n   cursor: pointer;\r\n   img {\r\n     width: 100%;\r\n     height: 100%;\r\n     object-fit: cover;\r\n   }\r\n   .label {\r\n     position: absolute;\r\n     left: 5px;\r\n     bottom: 5px;\r\n     background: rgba(0, 0, 0, 0.5);\r\n     border-radius: 5px;\r\n     color: #fff;\r\n     padding: 2px 5px;\r\n     font-style: normal;\r\n     font-weight: 400;\r\n     font-size: 10px;\r\n   }\r\n }\r\n .rt {\r\n   display: flex;\r\n   flex: 1;\r\n   position: relative;\r\n   .flex-sub {\r\n     flex: 1;\r\n   }\r\n   .name {\r\n     width: 460px;\r\n     font-size: 16px;\r\n     overflow: hidden;\r\n     text-overflow: ellipsis;\r\n     white-space: nowrap;\r\n   }\r\n   .desc {\r\n      color: #999;\r\n      font-size: 14px;\r\n      overflow: hidden;\r\n      -webkit-line-clamp: 3;\r\n      text-overflow: ellipsis;\r\n      display: -webkit-box;\r\n      -webkit-box-orient: vertical;\r\n   }\r\n   .time,.have {\r\n     color: #999;\r\n     margin-top: 5px;\r\n     font-size: 14px;\r\n   }\r\n   .red{\r\n     color: #F23C3C;\r\n   }\r\n   .have_item{\r\n     padding-right: 12px;\r\n   }\r\n   .have_item+.have_item{\r\n     padding-left: 10px;\r\n     position: relative;\r\n   }\r\n   .have_item+.have_item:before{\r\n     width: 0;\r\n     height: 10px;\r\n     padding-left: 1px;\r\n     background-color: #BECADB;\r\n     content: '';\r\n     position: absolute;\r\n     left: 0;\r\n     top: 25%;\r\n   }\r\n   .bottom {\r\n     display: flex;\r\n     justify-content: space-between;\r\n     align-items: flex-end;\r\n     .btn {\r\n       width: 100px;\r\n       height: 40px;\r\n       border-radius: 5px;\r\n     }\r\n   }\r\n   .cgray {\r\n     color: #999;\r\n\r\n     width: 161px;\r\n\r\n   }\r\n   .cred {\r\n     color: #999999;\r\n   }\r\n }\r\n}\r\n}\r\n.exam_status {\r\n  position: relative;\r\n  margin-left: 16px;\r\n  &::before {\r\n    position: absolute;\r\n    top: 8px;\r\n    left: -12px;\r\n    content: '';\r\n    width: 8px;\r\n    height: 8px;\r\n    border-radius: 100%;\r\n    background-color: #333;\r\n  }\r\n}\r\n.examing {\r\n  color: #999;\r\n  &::before {\r\n    background-color: #999;\r\n  }\r\n}\r\n.wait {\r\n  &::before {\r\n    background-color: #FF0000;\r\n  }\r\n}\r\n.success {\r\n  &::before {\r\n    background-color: #27AE60;\r\n  }\r\n}\r\n.cgray :deep(.el-progress__text span){\r\nfont-size: 12px;\r\nmargin-left: 10px;\r\ncolor: #999999;\r\n}\r\n.cgray :deep(.el-progress){\r\nalign-items: center;\r\n}\r\n.bottom .btn:hover {\r\nbackground: #2256F6;\r\ncolor: #FFFFFF;\r\n}\r\n.success_progress{\r\ncolor: #6FCF97;\r\n}\r\n</style>\r\n","import cookie from '../utils/cookies'\r\nconst tokenName = 'EDU_WEB_TOKEN'\r\n/**\r\n * 导出excel\r\n * @param url\r\n * @param data\r\n * @param method\r\n */\r\nexport function formDownloadFile(url, data, method) {\r\n  let inputs = '<input type=\"hidden\" name=\"token\" value=\"' + cookie.getInClient(tokenName) + '\" />';\r\n  let inputs2 = '<input type=\"hidden\" name=\"sid\" value=\"' + cookie.getInClient('shopId') + '\" />';\r\n  for (const obj in data) {\r\n    inputs += '<input type=\"hidden\" name=\"' + obj + '\" value=\"' + data[obj] + '\" />';\r\n  }\r\n  inputs+=inputs2\r\n  const nuxtApp = useNuxtApp()\r\n  const cookieData = cookie.getInServer(nuxtApp.ssrContext)\r\n  console.log('cookie', cookie.getInClient('shopId'))\r\n  console.log('cookieData', cookieData)\r\n  const $form = document.createElement('form');\r\n  $form.method = method || 'post'\r\n  $form.action = '/gateway' + url + '?token=' + cookie.getInClient(tokenName)\r\n  $form.innerHTML = inputs\r\n  document.body.appendChild($form); // 这一行必须，iframe挂在到dom树上才会发请求\r\n  $form.submit();\r\n  $form.remove();\r\n}\r\n\r\nexport function downloadFile(url) {\r\n  const iframe = document.createElement('iframe');\r\n  iframe.style.display = 'none'; // 防止影响页面\r\n  iframe.style.height = 0; // 防止影响页面\r\n  iframe.src = url;\r\n  document.body.appendChild(iframe); // 这一行必须，iframe挂在到dom树上才会发请求\r\n  // 5分钟之后删除（onload方法对于下载链接不起作用，就先抠脚一下吧）\r\n  setTimeout(() => {\r\n    iframe.remove();\r\n  }, 5 * 60 * 1000);\r\n}\r\n"],"names":["materialId","props","ctrl","reactive","isVideo","opts","fileUrl","mediaEnum","onMounted","getPrevUrl","handleClose","emit","ratingPreview","id","then","res","indexOf","materialName","substring","lastIndexOf","isImg","materialType","nextTick","materialUrl","coverUrl","ratingId","proveId","prevType","preview","map","list","getRatingList","proveList","ratingList","formRef","ref","rules","userScore","required","message","trigger","loading","score","form","formEl","validate","valid","p","ratingScore","ElMessage","success","finally","useHead","title","router","useRouter","entryType","eventId","data","tabsList","code","desc","pages","current","totalCount","eventInfo","info","statusEnum","route","useRoute","query","value","back","openPreview","row","type","handleDownload","url","method","inputs","cookie","getInClient","inputs2","obj","nuxtApp","useNuxtApp","$form","getInServer","ssrContext","document","createElement","action","innerHTML","body","appendChild","submit","remove","formDownloadFile","handleCurrentChange","val","getData","querySelector","scrollTop","page","judgesEntryPage","pageSize","pageCurrent","totalPage","ratingView"],"mappings":"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"}