diff --git a/src/api/common/api.ts b/src/api/common/api.ts index 5edd648..19faea8 100644 --- a/src/api/common/api.ts +++ b/src/api/common/api.ts @@ -96,6 +96,7 @@ export const loadCategoryData = (params) => { export const uploadFile = (params, success) => { return defHttp.uploadFile({ url: uploadUrl }, params, { success }); }; + /** * 下载文件 * @param url 文件路径 @@ -103,8 +104,8 @@ export const uploadFile = (params, success) => { * @param parameter * @returns {*} */ -export const downloadFile = (url, fileName?, parameter?) => { - return getFileblob(url, parameter).then((data) => { +export const downloadFile = (url, fileName?, parameter?, cellBack?, config?) => { + return getFileblob(url, parameter, config).then((data) => { if (!data || data.size === 0) { message.warning('文件下载失败'); return; @@ -122,6 +123,9 @@ export const downloadFile = (url, fileName?, parameter?) => { document.body.removeChild(link); //下载完成移除元素 window.URL.revokeObjectURL(url); //释放掉blob对象 } + if(cellBack){ + cellBack(data); + } }); }; @@ -131,14 +135,14 @@ export const downloadFile = (url, fileName?, parameter?) => { * @param parameter * @returns {*} */ -export const getFileblob = (url, parameter) => { +export const getFileblob = (url, parameter, config = { isTransformResponse: false }) => { return defHttp.get( { url: url, params: parameter, responseType: 'blob', }, - { isTransformResponse: false } + config ); }; diff --git a/src/components/Form/src/jeecg/components/JUpload/JUpload.vue b/src/components/Form/src/jeecg/components/JUpload/JUpload.vue index 7e089d3..f8871ba 100644 --- a/src/components/Form/src/jeecg/components/JUpload/JUpload.vue +++ b/src/components/Form/src/jeecg/components/JUpload/JUpload.vue @@ -44,6 +44,8 @@ import { buildUUID } from '/@/utils/uuid'; import CryptoJS from 'crypto-js'; + import { downloadFile as ajaxDownloadFileFn } from '/@/api/common/api'; + const spinning = ref(false); const { createMessage, createConfirm } = useMessage(); const { prefixCls } = useDesign('j-upload'); @@ -408,31 +410,44 @@ * 自定义下载事件,带加载中 */ function openWindowWithLoading(url){ - let xhr = new XMLHttpRequest(); spinning.value = true; - xhr.open('GET',url,true); - // xhr.onprogress = function (e){ - // let percent = Math.floor(e.loaded / e.total * 100);//百分比加载,用于进度条 - // console.log(percent); - // } - xhr.send(); - xhr.responseType = "arraybuffer"; - xhr.onreadystatechange = event =>{ - console.log(xhr); - if(xhr.readyState == 4){ - if(xhr.status == 200){ - let fileName = url.substring(url.lastIndexOf("/")+1); - let blob = new Blob([xhr.response]); - const downLoadLink = document.createElement('a'); - downLoadLink.download = fileName; - downLoadLink.href = URL.createObjectURL(blob); - downLoadLink.click(); - }else if (xhr.status == 404){ - createMessage.warning('没有找到可下载的资源!'); - } - } - spinning.value = false; + let fileName = url.substring(url.lastIndexOf("/")+1); + let uploadAxiosHttpConfig = { + //超时时间,分钟 * 秒 * 毫秒 60分钟 + timeout: 60 * 60 * 1000, + //不自动拼接前缀 + joinPrefix: false, + //自定义前缀 + apiUrl: '', + //不自动处理 + isTransformResponse: false } + ajaxDownloadFileFn(url, fileName, {}, () => { spinning.value = false; }, uploadAxiosHttpConfig); + //spinning.value = false; + // let xhr = new XMLHttpRequest(); + // xhr.open('GET',url,true); + // // xhr.onprogress = function (e){ + // // let percent = Math.floor(e.loaded / e.total * 100);//百分比加载,用于进度条 + // // console.log(percent); + // // } + // xhr.send(); + // xhr.responseType = "arraybuffer"; + // xhr.onreadystatechange = event =>{ + // console.log(xhr); + // if(xhr.readyState == 4){ + // if(xhr.status == 200){ + // let fileName = url.substring(url.lastIndexOf("/")+1); + // let blob = new Blob([xhr.response]); + // const downLoadLink = document.createElement('a'); + // downLoadLink.download = fileName; + // downLoadLink.href = URL.createObjectURL(blob); + // downLoadLink.click(); + // }else if (xhr.status == 404){ + // createMessage.warning('没有找到可下载的资源!'); + // } + // } + // spinning.value = false; + // } } function emitValue(value) { diff --git a/src/views/kc/detection/KcDetectionMain.data.ts b/src/views/kc/detection/KcDetectionMain.data.ts index effc533..93e15cc 100644 --- a/src/views/kc/detection/KcDetectionMain.data.ts +++ b/src/views/kc/detection/KcDetectionMain.data.ts @@ -58,16 +58,16 @@ export const columns: BasicColumn[] = [ align: "center", dataIndex: 'detectionNum' }, - { - title: '累计抓取人数', - align: "center", - dataIndex: 'allNum' - }, - { - title: '平均抓取人数', - align: "center", - dataIndex: 'averageNum', - }, + // { + // title: '累计抓取人数', + // align: "center", + // dataIndex: 'allNum' + // }, + // { + // title: '平均抓取人数', + // align: "center", + // dataIndex: 'averageNum', + // }, { title: '出勤率', align: "center", @@ -107,16 +107,25 @@ export const formSchema: FormSchema[] = [ label: '学年学期', field: 'xnxq', component: 'Input', + colProps: { + span: 8, + }, }, { label: '课程名称', field: 'kcmc', component: 'Input', + colProps: { + span: 8, + }, }, { label: '授课日期', field: 'createTime', component: 'Input', + colProps: { + span: 8, + }, render: ({ values }) => { let text = values?.ketangbiaoInfo?.skrq; return h(Input, { value: text, disabled: true }); @@ -126,6 +135,9 @@ export const formSchema: FormSchema[] = [ label: '授课节次', field: 'ketangbiaoInfo', component: 'Input', + colProps: { + span: 8, + }, render: ({ values }) => { let text = values?.ketangbiaoInfo?.hh; return h(Input, { value: text, disabled: true }); @@ -136,12 +148,18 @@ export const formSchema: FormSchema[] = [ field: 'rwbh', component: 'Input', show: false, + colProps: { + span: 8, + }, }, { label: '课程编号', field: 'kcbh', component: 'Input', show: false, + colProps: { + span: 8, + }, }, { label: '教室编号', @@ -159,21 +177,33 @@ export const formSchema: FormSchema[] = [ label: '抓取次数', field: 'detectionNum', component: 'InputNumber', + colProps: { + span: 8, + }, }, { label: '累计抓取人数', field: 'allNum', component: 'InputNumber', + colProps: { + span: 8, + }, }, { label: '平均抓取人数', field: 'averageNum', component: 'InputNumber', + colProps: { + span: 8, + }, }, { label: '选课人数', field: 'xkrs', component: "Input", + colProps: { + span: 8, + }, render: ({ values }) => { let text = values?.ketangbiaoInfo?.xkrs; return h(Input, { value: text, disabled: true }); @@ -184,6 +214,9 @@ export const formSchema: FormSchema[] = [ label: '出勤率', field: 'averageNum', component: "Input", + colProps: { + span: 8, + }, render: ({ values }) => { let text = ''; let { ketangbiaoInfo, averageNum } = values??{}; diff --git a/src/views/kc/wjxCswj/WjxCswjList.vue b/src/views/kc/wjxCswj/WjxCswjList.vue index 112a241..59b1c44 100644 --- a/src/views/kc/wjxCswj/WjxCswjList.vue +++ b/src/views/kc/wjxCswj/WjxCswjList.vue @@ -68,6 +68,8 @@ 试卷详情 预览题目 测验结果 + 统计分析 + 下载答卷 @@ -92,6 +94,7 @@ + @@ -109,13 +112,14 @@ import XxhbbksListModal from '/@/views/kc/xxhbbks/XxhbbksListModal.vue'; import {useMessage} from "/@/hooks/web/useMessage"; import TikuListModal from '/@/views/kc/wjxWjxxTmlb/TikuListModal.vue'; + import WjxWjxxTjfxModal from '/@/views/kc/wjxCswj/WjxWjxxTjfxModal.vue'; import dayjs from 'dayjs'; //当前路由信息 const { currentRoute } = useRouter(); const { query } = unref(currentRoute); const { rwbh,xqxn,typa } = query;//获取传递参数 - const { createConfirm } = useMessage(); + const { createConfirm,createMessage } = useMessage(); const APagination = Pagination; const queryParam = ref({}); const current = ref(0); @@ -131,6 +135,7 @@ const WjxWjxxTmlbDjjgsDcModalPage = ref(); const XxhbbksListModalPage = ref(); const TikuListModalPage = ref(); + const WjxWjxxTjfxModalPage = ref(); const labelCol = reactive({ xs: { span: 24 }, @@ -140,7 +145,31 @@ xs: { span: 24 }, sm: { span: 16 }, }); - + //统计分析 + function handleTjfx(record){ + WjxWjxxTjfxModalPage.value.disableSubmit = true; + WjxWjxxTjfxModalPage.value.edit(record); + // defHttp.get({ url: '/wjxWjxx/wjxWjxx/wjxxTjfx', params: { id: record.id } }).then(res => { + // console.log(`🚀 ~ defHttp.get ~ res:`, res) + // }); + } + //下载答卷 + function handleXzdj(record){ + defHttp.get({ url: '/wjxWjxx/wjxWjxx/wjxxDownLoad', params: { id: record.id } }).then(res => { + console.log(`🚀 ~ defHttp.get ~ res:`, res) + if(res.result){ + var downUrl = res.data.download_url; + console.log(`🚀 ~ defHttp.get ~ downUrl:`, downUrl) + if(downUrl){ + window.open(downUrl) + }else{ + createMessage.warning("下载异常请联系管理员") + } + }else{ + createMessage.warning(res.errormsg) + } + }); + } //题库类型(6作业,1问卷) function handleTiku(wjLeixing){ diff --git a/src/views/kc/wjxDcwj/WjxDcwjList.vue b/src/views/kc/wjxDcwj/WjxDcwjList.vue index 7a4b768..db38a41 100644 --- a/src/views/kc/wjxDcwj/WjxDcwjList.vue +++ b/src/views/kc/wjxDcwj/WjxDcwjList.vue @@ -59,14 +59,16 @@ - 设置问卷 + 基本信息 发布问卷 删除问卷 - 编辑问卷 + 添加试题 预览问卷 问卷详情 预览问卷 问卷结果 + 统计分析 + 下载答卷 @@ -92,6 +94,7 @@ + @@ -110,13 +113,14 @@ import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; import {useMessage} from "/@/hooks/web/useMessage"; import WjdcTikuListModal from '/@/views/kc/wjxWjxxTmlb/WjdcTikuListModal.vue'; + import WjxWjxxTjfxModal from '/@/views/kc/wjxCswj/WjxWjxxTjfxModal.vue'; import dayjs from 'dayjs'; //当前路由信息 const { currentRoute } = useRouter(); const { query } = unref(currentRoute); const { rwbh,xqxn,typa} = query;//获取传递参数 - const { createConfirm } = useMessage(); + const { createConfirm,createMessage } = useMessage(); const APagination = Pagination; const queryParam = ref({}); const current = ref(0); @@ -131,6 +135,7 @@ const WjxWjxxTmlbDjjgsDcModalPage = ref(); const XxhbbksListModalPage = ref(); const TikuListModalPage = ref(); + const WjxWjxxTjfxModalPage = ref(); const labelCol = reactive({ xs: { span: 24 }, @@ -141,6 +146,28 @@ sm: { span: 16 }, }); + //统计分析 + function handleTjfx(record){ + WjxWjxxTjfxModalPage.value.disableSubmit = true; + WjxWjxxTjfxModalPage.value.edit(record); + } + //下载答卷 + function handleXzdj(record){ + defHttp.get({ url: '/wjxWjxx/wjxWjxx/wjxxDownLoad', params: { id: record.id } }).then(res => { + console.log(`🚀 ~ defHttp.get ~ res:`, res) + if(res.result){ + var downUrl = res.data.download_url; + console.log(`🚀 ~ defHttp.get ~ downUrl:`, downUrl) + if(downUrl){ + window.open(downUrl) + }else{ + createMessage.warning("下载异常请联系管理员") + } + }else{ + createMessage.warning(res.errormsg) + } + }); + } //题库类型(6作业,1问卷) function handleTiku(wjLeixing){ var record = {wjLeixing} diff --git a/src/views/site/common/video/videojs/viewPage.vue b/src/views/site/common/video/videojs/viewPage.vue index 9cb3fa3..32340a4 100644 --- a/src/views/site/common/video/videojs/viewPage.vue +++ b/src/views/site/common/video/videojs/viewPage.vue @@ -18,21 +18,35 @@ 填写评价表
{{ ktangInfo.zc || ' ' }}  {{ ktangInfo.skjs || ' ' }}  学分:{{ ktangInfo.xf || ' ' }} -   选课人数:{{ ktangInfo.xkrs || ' ' }}   课程性质:{{ ktangInfo.kcxz || ' ' }}   开课单位:{{ ktangInfo.kkdw || ' ' }}   节次:{{ ktangInfo.hh || ' ' }}
-
+
{{ mainVideoCardBoxTitle || '' }}
-
+ +
+ 本教室容量:{{ktangInfo?.jiaoshirongliang?.jsrl || ' '}}座位 + 选课人数:{{ ktangInfo.xkrs || ' ' }} + 出勤人数: {{ ktangInfo?.kcDetectionDetailed?.num||'89' }} + + + + + + +
+
@@ -112,6 +126,7 @@
+ diff --git a/src/views/site/studentWdkc/studentWdkc.vue b/src/views/site/studentWdkc/studentWdkc.vue index 3178dde..a769f78 100644 --- a/src/views/site/studentWdkc/studentWdkc.vue +++ b/src/views/site/studentWdkc/studentWdkc.vue @@ -56,7 +56,7 @@ function loaddata(){ function openKecheng(record){ console.log(`🚀 ~ openKecheng ~ record:`, record) - defHttp.post({ url: '/zyDbtx/zyDbtx/deleteByRwbhCreate',params:{rwbh:record.rwbh} }).then((res) => { + defHttp.post({ url: '/zyDbtx/zyDbtx/deleteByRwbhCreate',params:{rwbh:record.rwbh,fbr:record.jgh} }).then((res) => { loaddata() }); var url = "/stuzy/studentMain?rwbh="+record.rwbh+"&xqxn="+record.xqxn+"&teano="+record.jgh; diff --git a/src/views/zy/jiaoXueDanYuanNeiRong/downloadAssembly.vue b/src/views/zy/jiaoXueDanYuanNeiRong/downloadAssembly.vue index b43d290..8b0e971 100644 --- a/src/views/zy/jiaoXueDanYuanNeiRong/downloadAssembly.vue +++ b/src/views/zy/jiaoXueDanYuanNeiRong/downloadAssembly.vue @@ -22,8 +22,9 @@ diff --git a/src/views/zy/jiaoXueDanYuanNeiRong/index.vue b/src/views/zy/jiaoXueDanYuanNeiRong/index.vue index 9689734..9849038 100644 --- a/src/views/zy/jiaoXueDanYuanNeiRong/index.vue +++ b/src/views/zy/jiaoXueDanYuanNeiRong/index.vue @@ -43,7 +43,7 @@