From 1169908e505492bb326567736108fec231995d22 Mon Sep 17 00:00:00 2001 From: "1378012178@qq.com" <1378012178@qq.com> Date: Wed, 15 Jan 2025 10:41:58 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E9=98=B2=E4=BD=9C=E5=BC=8A=202?= =?UTF-8?q?=E3=80=81=E8=AF=BE=E7=A8=8B=E4=BD=9C=E4=B8=9A-=E5=88=86?= =?UTF-8?q?=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../kc/wjxCswj/WjxCswjStuLiebiaoList.vue | 281 +++---- src/views/kc/wjxCswj/WjxCswjStuList.vue | 384 +++++----- src/views/kc/wjxCswj/WjxCywjV2List.vue | 35 +- src/views/kc/wjxCswj/WjxCywjV2Listhis.vue | 14 + src/views/kc/wjxDjxxFzbtj/WjxDjxxFzbtj.api.ts | 92 +++ .../kc/wjxDjxxFzbtj/WjxDjxxFzbtj.data.ts | 84 ++ .../kc/wjxDjxxFzbtj/WjxDjxxFzbtjList.vue | 215 ++++++ .../components/WjxDjxxFzbtjForm.vue | 157 ++++ .../components/WjxDjxxFzbtjModal.vue | 75 ++ .../components/WjxWjxxTmlbDjV2Form.vue | 429 ++++++++--- src/views/kc/xxhbbks/Xxhbbks.api.ts | 31 +- src/views/zy/zyInfo/StudentZyInfoList.vue | 15 +- src/views/zy/zyInfo/ZyInfo.api.ts | 18 + src/views/zy/zyInfo/ZyInfoQimoV2List.vue | 1 + src/views/zy/zyInfo/ZyInfoV2List.vue | 81 +- src/views/zy/zyInfo/ZyInfoV2Listhis.vue | 30 + src/views/zy/zyInfo/components/Xzxx.vue | 715 ++++++++++++++++++ .../zy/zyInfoStudent/ZyInfoStudentList.vue | 1 + .../components/ZyInfoStudentForm.vue | 146 ++-- .../components/ZyInfoStudentPiyueForm.vue | 4 +- 21 files changed, 2299 insertions(+), 510 deletions(-) create mode 100644 src/views/kc/wjxDjxxFzbtj/WjxDjxxFzbtj.api.ts create mode 100644 src/views/kc/wjxDjxxFzbtj/WjxDjxxFzbtj.data.ts create mode 100644 src/views/kc/wjxDjxxFzbtj/WjxDjxxFzbtjList.vue create mode 100644 src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjForm.vue create mode 100644 src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjModal.vue create mode 100644 src/views/zy/zyInfo/components/Xzxx.vue diff --git a/.gitignore b/.gitignore index a0b9717..96194b6 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ pnpm-debug.log* /.vscode/ /.history/ /svn clear.bat +/dist.zip diff --git a/src/views/kc/wjxCswj/WjxCswjStuLiebiaoList.vue b/src/views/kc/wjxCswj/WjxCswjStuLiebiaoList.vue index 72fa88a..849ccd1 100644 --- a/src/views/kc/wjxCswj/WjxCswjStuLiebiaoList.vue +++ b/src/views/kc/wjxCswj/WjxCswjStuLiebiaoList.vue @@ -33,10 +33,10 @@ - diff --git a/src/views/kc/wjxCswj/WjxCswjStuList.vue b/src/views/kc/wjxCswj/WjxCswjStuList.vue index 2caa74c..168396f 100644 --- a/src/views/kc/wjxCswj/WjxCswjStuList.vue +++ b/src/views/kc/wjxCswj/WjxCswjStuList.vue @@ -30,39 +30,44 @@ - +
-
{{getStatus(item.flag)}}
+
{{ getStatus(item.flag) }}
- +
{{ getStatus(item.flag) }}
-
{{item.title}}
+
{{ item.title }}
- 时间:{{dayjs(item.startTime).format('MM.DD HH-mm')}} - {{dayjs(item.endTime).format('MM.DD HH-mm')}} + 时间:{{ dayjs(item.startTime).format('MM.DD HH-mm') }} - {{ dayjs(item.endTime).format('MM.DD HH-mm') }} - 开始测验 - 正在批卷 - 查看结果 + 开始测验 + 正在批卷 + 查看结果 - +
-
- +
+
-
- +
+
@@ -72,198 +77,211 @@ diff --git a/src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjForm.vue b/src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjForm.vue new file mode 100644 index 0000000..595eae3 --- /dev/null +++ b/src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjForm.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjModal.vue b/src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjModal.vue new file mode 100644 index 0000000..e3d5375 --- /dev/null +++ b/src/views/kc/wjxDjxxFzbtj/components/WjxDjxxFzbtjModal.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/views/kc/wjxWjxx/components/WjxWjxxTmlbDjV2Form.vue b/src/views/kc/wjxWjxx/components/WjxWjxxTmlbDjV2Form.vue index 3cb1686..b1dd239 100644 --- a/src/views/kc/wjxWjxx/components/WjxWjxxTmlbDjV2Form.vue +++ b/src/views/kc/wjxWjxx/components/WjxWjxxTmlbDjV2Form.vue @@ -5,34 +5,66 @@ - + +
+ 正在加载考试信息,请稍等。 +
+
+ +
+ 考试须知 +
    +
  1. 1、保持全屏模式:在考试过程中,请始终保持全屏模式。避免使用ESC键或点击出现在屏幕顶部的退出全屏按钮,以防意外退出考试界面。
  2. +
  3. 2、禁止切换屏幕:考试期间,请勿进行任何切屏操作,以确保考试的连续性和公正性。
  4. +
  5. + 3、作答时限: + 点击开始测验后开始计时,本次作答时限为:{{ zdsx }}分钟。 +
  6. +
  7. + 3、作答时限: + 本次测验于:{{ finishTime }}结束。 +
  8. +
+
+ {{ testingTips }} +
+ -
{{ title }}
-
您不是此测验的学生,不能进行提交
- +
+ {{ title }}
+
您不是此测验的学生,不能进行提交
+
-
+
-
-
单选题
+
+
+ 单选题
- +
@@ -43,17 +75,22 @@
-
判断题
+
+ 判断题
- +
@@ -64,17 +101,22 @@
-
多选题
+
+ 多选题
- + @@ -86,115 +128,102 @@
-
-
填空题
+
+
+ 填空题
- +
-
简答题
+
+ 简答题
- +
-
文件题
+
+ 文件题
- - + + - +
-
无对应类型-{{item.wjType}}-{{item.wjSubtype}}=
+
无对应类型-{{ item.wjType }}-{{ item.wjSubtype }}=
- + 提交
- 您已提交了测验,请勿重复提交!
返回 + 您已提交了测验,请勿重复提交!
返回
- 提交成功,请返回首页!
返回 + 提交成功,请返回首页!
返回
',param); ZyInfoStudentModalPage.value.edit(param); } diff --git a/src/views/zy/zyInfo/ZyInfo.api.ts b/src/views/zy/zyInfo/ZyInfo.api.ts index 57fb75a..8294e4d 100644 --- a/src/views/zy/zyInfo/ZyInfo.api.ts +++ b/src/views/zy/zyInfo/ZyInfo.api.ts @@ -14,6 +14,8 @@ enum Api { deleteBatch = '/zyInfo/zyInfo/deleteBatch', importExcel = '/zyInfo/zyInfo/importExcel', exportXls = '/zyInfo/zyInfo/exportXls', + getxzxx = '/zyInfo/zyInfo/getxzxx', + saveData = '/zyInfo/zyInfo/saveData', } /** @@ -76,3 +78,19 @@ export const saveOrUpdate = (params, isUpdate) => { let url = isUpdate ? Api.edit : Api.save; return defHttp.post({ url: url, params }, { isTransformResponse: false }); } + +/** + * 获取课程下信息 + * @param params + */ +export const getxzxx = (params) => { + return defHttp.post({ url: Api.getxzxx, params }, { isTransformResponse: false }); +} + +/** + * 存储数据 + * @param params + */ +export const saveData = (params) => { + return defHttp.post({ url: Api.saveData, params }, { isTransformResponse: false }); +} \ No newline at end of file diff --git a/src/views/zy/zyInfo/ZyInfoQimoV2List.vue b/src/views/zy/zyInfo/ZyInfoQimoV2List.vue index 09bf4e1..e6b441d 100644 --- a/src/views/zy/zyInfo/ZyInfoQimoV2List.vue +++ b/src/views/zy/zyInfo/ZyInfoQimoV2List.vue @@ -899,6 +899,7 @@ function handleBohui(record: Recordable) { cancelText: '取消', onOk: () => { defHttp.post({ url: '/zyInfoStudent/zyInfoStudent/editBohui', params: { id: record.id } }).then((res) => { + createMessage.success('作业驳回成功!') handleSuccess(); }); }, diff --git a/src/views/zy/zyInfo/ZyInfoV2List.vue b/src/views/zy/zyInfo/ZyInfoV2List.vue index deec8c3..3232806 100644 --- a/src/views/zy/zyInfo/ZyInfoV2List.vue +++ b/src/views/zy/zyInfo/ZyInfoV2List.vue @@ -159,6 +159,17 @@ + + + + + + + + 设置小组信息 + 查看小组信息 + +
@@ -479,6 +490,10 @@ 分享 + + + 查看分组 + 撤回作业 @@ -546,6 +561,7 @@ + @@ -565,7 +581,7 @@ import { ref, reactive, onMounted, unref , onUnmounted, watchEffect} from 'vue'; import { list, deleteOne } from './ZyInfo.api'; import { BasicTable, useTable, TableAction } from '/@/components/Table'; import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; -import { Input, Popover, Pagination, Empty } from 'ant-design-vue'; +import { Input, Popover, Pagination, Empty, message } from 'ant-design-vue'; import { defHttp } from '/@/utils/http/axios'; import { useMessage } from '/@/hooks/web/useMessage'; import { useRouter } from 'vue-router'; @@ -597,6 +613,7 @@ import XxhbbksListModal from '/@/views/kc/xxhbbks/XxhbbksListModal.vue'; import ZyInfoEditModal from './components/ZyInfoEditModal.vue'; import YyzyListModal from '/@/views/zy/zyInfo/YyzyListModal.vue'; import ZyCyFenxiangListModal from '/@/views/zy/zyCyFenxiang/ZyCyFenxiangListModal.vue'; +import Xzxx from './components/Xzxx.vue'; import { encryptByBase64 } from '/@/utils/cipher'; const globSetting = useGlobSetting(); @@ -623,7 +640,7 @@ const qmkszb = ref(0); const ktcyzb = ref(0); const zycsDisabled = ref(false); -const zyInfo = ref({}); +const zyInfo = ref({xzxstjzy:'N'}); const formRef = ref(); const confirmLoading = ref(false); const zyyqShow = ref(false); @@ -652,6 +669,7 @@ const registerDetialModal = ref(); const registerPiyueModal = ref(); const YyzyListModalPage = ref(); const ZyCyFenxiangListModalpage = ref(); +const XzxxRef = ref() const pdfUrl = ref('/downPath/ylhpsf.pdf'); //注册table数据 const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({ @@ -693,7 +711,10 @@ const disabledDate = (current: Dayjs) => { return current && current < dayjs().subtract(1, 'days').endOf('day'); }; const useForm = Form.useForm; - +const xzxstjzyOptions = ref([ + { label: '关闭', value: 'N' }, + { label: '开启', value: 'Y' }, +]) //引用作业 function handleYyzy() { var params = { xqxn, rwbh }; @@ -710,7 +731,7 @@ function handleCallYinyong(record) { record.id = zyid; record.sort = zysort; record.zyLeixing = '0'; //作业类型,课程作业 - zyInfo.value = record; + setZyInfo(record) zyInfo.value.createBy = createBy zyInfo.value.rwbh = rwbh zyInfo.value.zyStatus = "0" @@ -870,6 +891,7 @@ function searchQueryZyxq() { // queryParam.value.mainId = zyInfo.value.id; queryParam.value.queryType = queryType.value; + console.log('queryParam.value',queryParam.value) reload(); } @@ -937,17 +959,20 @@ function yulanFile(record) { } } //驳回 -function handleBohui(record: Recordable) { +async function handleBohui(record: Recordable) { createConfirm({ iconType: 'warning', title: '驳回', content: '您确定驳回此作业吗,驳回后需要学生重新提交?', okText: '确认', cancelText: '取消', - onOk: () => { - defHttp.post({ url: '/zyInfoStudent/zyInfoStudent/editBohui', params: { id: record.id } }).then((res) => { - handleSuccess(); - }); + onOk: async () => { + let stuZyIds = await defHttp.post({ url: '/zyInfoStudent/zyInfoStudent/getZyStuIdById', data: { zyinfoId: record.mainId, xh: record.createBy } }) + stuZyIds.forEach(async stu => { + await defHttp.post({ url: '/zyInfoStudent/zyInfoStudent/editBohui', params: { id: stu.id } }) + }) + createMessage.success('作业驳回成功!') + handleSuccess(); }, }); } @@ -1171,7 +1196,7 @@ function handlePfbzShow(type) { } //尚未布置作业题目及具体要求 function handleSzzynr(record) { - zyInfo.value = record; + setZyInfo(record) dataKhnr.value = []; handleShowType(2); } @@ -1367,6 +1392,12 @@ async function submitForm() { var sfcc = model.sfcc; console.log('🚶‍♂️', model); if (sfcc == '1') { + var xzxstjzy = model.xzxstjzy + if(xzxstjzy == 'Y'){ + createMessage.warning('由于设置了小组形式提交作业,因此无法开启查重功能!'); + confirmLoading.value = false; + return; + } //开启查重再进行验证,否则不进行验证 if (wwtgl) { if ((wwcc == false && xncc == false && nwcc == false && aigccc == false) || (!wwcc && !xncc && !nwcc && !aigccc)) { @@ -1620,7 +1651,7 @@ function handleEdit(record, type) { record.xssfck = '1'; } editDisabled.value = type; - zyInfo.value = record; + setZyInfo(record) console.log('👨‍👦', zyInfo.value); if (zyInfo.value.xncc == 'false') { zyInfo.value.xncc = null; @@ -1644,6 +1675,11 @@ function handleEdit(record, type) { handleShowType(2); } +function setZyInfo(record){ + zyInfo.value = record; + if(!zyInfo.value.xzxstjzy)zyInfo.value.xzxstjzy = 'N' +} + function handleBjzy(record) { registerEditModal.value.disableSubmit = false; registerEditModal.value.edit(record); @@ -1686,7 +1722,7 @@ function handleZyxx(record, type) { } } - zyInfo.value = record; + setZyInfo(record) handleShowType(3); queryType.value = type; rowSelection.value = []; @@ -1821,6 +1857,27 @@ function handlePageChange(record) { reloadZy(); } +//编辑小组信息 +function bjxzxxFunc(isEdit){ + XzxxRef.value.showModal(zyInfo.value,tableData.value,isEdit) +} + +function ckxzxxFunc(item){ + XzxxRef.value.showModal(item,tableData.value,false) +} + +//小组形式提交作业选项变更 +function xztjzyxsFunc(val){ + if(val == 'Y') createMessage.warning('开启小组形式提交作业后,将无法使用查重功能!'); +} + +const xzxxSaveSuccess = (id,data) => { + tableData.value.forEach(item => { + if(item.id == id) item.xzrs = data.rs + }); + // createMessage.success('保存成功!') +} + onMounted(() => { searchQuery(); }); diff --git a/src/views/zy/zyInfo/ZyInfoV2Listhis.vue b/src/views/zy/zyInfo/ZyInfoV2Listhis.vue index 5b87b31..1f379a4 100644 --- a/src/views/zy/zyInfo/ZyInfoV2Listhis.vue +++ b/src/views/zy/zyInfo/ZyInfoV2Listhis.vue @@ -182,6 +182,16 @@ + + + + + + + + 查看小组信息 + +
@@ -530,6 +540,10 @@ 分享 --> + + + 查看分组 + 查看作业 + + + + + + + + + 说明:1.先设置小组人数; 2.点击自动分组可根据小组人数进行自动划分; 3.若需要手动分组直接在左侧人员展示处进行手动划分; + 4.分组后需要点击确定按钮,否则会分组失败需要重新分组。 + + + + + + + + + + + + + + + + + +
+ 小组人数: + {{ allocatedData.rs }}人 + 未设置! +
+
+ + 设置人数 + 自动分组 + 重置分组 + 引用分组 + +
+

未分配数据

+ + + + + + + 组长: + {{ getLeaderName(group) }} + 移除 + 未设置组长 + + + + 组员: + + + {{ member.xm }} + 移除 + 改为组长 + + + + + 编辑 + 解散 + + + + + +
+
+
+ + + + + + + + + + + + + + 当前学生:{{ selectedStudent.xm }}({{ selectedStudent.xh }}) + + + +
+ + + + 创建新小组 + 分配至已有小组 + + + +
+ + +
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ item.title }} + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/src/views/zy/zyInfoStudent/ZyInfoStudentList.vue b/src/views/zy/zyInfoStudent/ZyInfoStudentList.vue index 6421018..63eedc8 100644 --- a/src/views/zy/zyInfoStudent/ZyInfoStudentList.vue +++ b/src/views/zy/zyInfoStudent/ZyInfoStudentList.vue @@ -228,6 +228,7 @@ } function handleBohui(record: Recordable){ defHttp.post({url:'/zyInfoStudent/zyInfoStudent/editBohui',params:{id:record.id}}).then(res =>{ + createMessage.success('作业驳回成功!') handleSuccess() }) } diff --git a/src/views/zy/zyInfoStudent/components/ZyInfoStudentForm.vue b/src/views/zy/zyInfoStudent/components/ZyInfoStudentForm.vue index cf5deef..4404f1e 100644 --- a/src/views/zy/zyInfoStudent/components/ZyInfoStudentForm.vue +++ b/src/views/zy/zyInfoStudent/components/ZyInfoStudentForm.vue @@ -158,6 +158,8 @@ const labelCol = ref({ xs: { span: 24 }, sm: { span: 5 } }); const wrapperCol = ref({ xs: { span: 24 }, sm: { span: 16 } }); const confirmLoading = ref(false); + const stuZyIds = ref([]) + const xzxstjzy = ref(null) let zyInfo = ref({}); //表单验证 const validatorRules = { @@ -251,6 +253,8 @@ function handleKcnr(kcnr) { * 编辑 */ function edit(record) { + stuZyIds.value = record.stuZyIds + xzxstjzy.value = record.xzxstjzy console.log(`🚀 ~ edit ~ record:`, record) stuId.value = record.stuId; nextTick(() => { @@ -272,70 +276,96 @@ function handleKcnr(kcnr) { }); } +function submitZy(model, ids, isUpdate) { + let models = [model]; + + if (Array.isArray(ids) && ids.length > 0) { + ids.forEach(id => { + let newModel = { ...model, stuId: id.id }; + models.push(newModel); + }); + } + let msgr = true + let msg = '操作成功' + models.forEach(async m_ => { + await zyscStu(m_, isUpdate) + .then((res) => { + console.log(`🚀 ~ .then ~ res:`, res) + if (res.success) { + //异步提交维普 + stuWpKsjc(model, isUpdate).then((res) => { }) + } else { + msg = res.message + createMessage.warning(res.message); + } + }).catch(err => { + msgr = false + msg = '提交失败' + }) + }) + if (msgr) { + createMessage.success("操作成功"); + emit('ok'); + confirmLoading.value = false; + emit('closeLoading'); + } else { + createMessage.warning(msg); + } +} + /** * 提交数据 */ - async function submitForm() { - // 触发表单验证 - // var t = await validate(); - - confirmLoading.value = true; - const isUpdate = ref(false); - //时间格式化 - let model = formData; - if (model.id) { - isUpdate.value = true; - } - //循环数据 - for (let data in model) { - //如果该数据是数组并且是字符串类型 - if (model[data] instanceof Array) { - let valueType = getValueType(formRef.value.getProps, data); - //如果是字符串类型的需要变成以逗号分割的字符串 - if (valueType === 'string') { - model[data] = model[data].join(','); - } +async function submitForm() { + // 触发表单验证 + // var t = await validate(); + + confirmLoading.value = true; + const isUpdate = ref(false); + //时间格式化 + let model = formData; + if (model.id) { + isUpdate.value = true; + } + //循环数据 + for (let data in model) { + //如果该数据是数组并且是字符串类型 + if (model[data] instanceof Array) { + let valueType = getValueType(formRef.value.getProps, data); + //如果是字符串类型的需要变成以逗号分割的字符串 + if (valueType === 'string') { + model[data] = model[data].join(','); } } - if(!model.filePath){ - emit('closeLoading'); - confirmLoading.value = false; - createMessage.warning("请上传作业附件"); - return; - } - createConfirm({ - iconType: 'warning', - title: '确认提交', - content: '是否确认提交数据', - okText: '确认', - cancelText: '取消', - onOk: () => { - model.stuId = stuId.value; - model.mainId = zyInfo.value.id; - zyscStu(model, isUpdate.value) - .then((res) => { - console.log(`🚀 ~ .then ~ res:`, res) - if (res.success) { - createMessage.success("操作成功"); - emit('ok'); - //异步提交维普 - stuWpKsjc(model, isUpdate.value).then((res) => {}) - } else { - createMessage.warning(res.message); - } - emit('closeLoading'); - }) - .finally(() => { - confirmLoading.value = false; - emit('closeLoading'); - }); - }, - onCancel: () => { - confirmLoading.value = false; - emit('closeLoading'); - }, - }); } + if (!model.filePath) { + emit('closeLoading'); + confirmLoading.value = false; + createMessage.warning("请上传作业附件"); + return; + } + createConfirm({ + iconType: 'warning', + title: '确认提交', + content: '是否确认提交数据', + okText: '确认', + cancelText: '取消', + onOk: async () => { + model.stuId = stuId.value; + model.mainId = zyInfo.value.id; + if(xzxstjzy.value == 'Y'){ + const zys = stuZyIds.value.filter(stu => stu.id != model.stuId) + submitZy(model,zys,isUpdate.value) + }else{ + submitZy(model,[],isUpdate.value) + } + }, + onCancel: () => { + confirmLoading.value = false; + emit('closeLoading'); + }, + }); +} function openPdf(record){ if(record.stuPdfPath){ diff --git a/src/views/zy/zyInfoStudent/components/ZyInfoStudentPiyueForm.vue b/src/views/zy/zyInfoStudent/components/ZyInfoStudentPiyueForm.vue index 28e4f09..1974665 100644 --- a/src/views/zy/zyInfoStudent/components/ZyInfoStudentPiyueForm.vue +++ b/src/views/zy/zyInfoStudent/components/ZyInfoStudentPiyueForm.vue @@ -299,7 +299,7 @@ function handleVideo(three){ } } - defHttp.post({url:'/zyInfoStudent/zyInfoStudent/editPiyue',params:model}).then(res =>{ + defHttp.post({url:'/zyInfoStudent/zyInfoStudent/editFabu',params:model}).then(res =>{ emit('ok'); }) .finally(() => { @@ -344,7 +344,7 @@ function handleVideo(three){ } } - await defHttp.post({url:'/zyInfoStudent/zyInfoStudent/editPiyue',params:model}).then(res =>{ + await defHttp.post({url:'/zyInfoStudent/zyInfoStudent/editFabu',params:model}).then(res =>{ emit('ok2'); })