From cadb8088a6df5b3cb9dc9995218e2d39c3c2e718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Thu, 21 Nov 2024 11:20:58 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E4=B9=A0=E9=A2=98=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=EF=BC=9A=E4=B9=A0=E9=A2=98=E5=86=85=E5=AE=B9=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../questionUpload/quesItem/index.vue | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue index e905407..03c24ee 100644 --- a/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue +++ b/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue @@ -77,7 +77,8 @@ />
- + + 识别
@@ -106,7 +107,8 @@
- + + 识别
@@ -141,7 +143,8 @@
- + + 识别
@@ -169,7 +172,8 @@
- + + 识别
@@ -205,7 +209,8 @@ }" />
- + + 识别
@@ -273,7 +278,8 @@ 温馨提示:这里 - 号删除的是最后一道题目哟!
- + + 识别
@@ -394,7 +400,8 @@
-
- + + 识别
@@ -423,7 +431,8 @@ }" />
- + + 识别
@@ -441,7 +450,8 @@ }" />
- + + 识别
@@ -466,7 +476,7 @@ import useUserStore from '@/store/modules/user' const userStore = useUserStore().user const { proxy } = getCurrentInstance() // 定义要发送的emit事件 -const emit = defineEmits(['submit-exam-single-callback','cancel-exam-single-callback','cropper-exam-questForm-item']) +const emit = defineEmits(['submit-exam-single-callback','cancel-exam-single-callback','cropper-exam-form-item']) const props = defineProps({ bookobj: { type: Object, @@ -521,7 +531,7 @@ const initKonwPointFlagByUpdateForm = ref(true); // 表单[知识点]显示内容集合 const curKnowledgePointList = ref([]); // 表单数据参数 -let questForm = reactive({ +const questForm = reactive({ id: 0, title: '', worktype: '单选题', @@ -717,7 +727,7 @@ const checkBoxChangefh=(item, index, indexOp)=>{ }; /** 表单重置 */ const resetForm = () =>{ - questForm = { + Object.assign(questForm, { id: 0, title: '', worktype: '单选题', @@ -768,7 +778,7 @@ const resetForm = () =>{ }, ], }, - }; + }); }; /** * @desc: 赋值表单 @@ -1061,7 +1071,7 @@ const updateForm= async(item, submitIndex=0, submitType=1) =>{ }); } - questForm = { + Object.assign(questForm,{ id: item.id, title: item.worktype == '复合题' ? titleMulList : item.title, worktype: item.worktype, @@ -1090,7 +1100,7 @@ const updateForm= async(item, submitIndex=0, submitType=1) =>{ worktype: '填空题', params: newSubjListparams, }, - }; + }); // proxy.resetForm("questFormRef");? //上传完成反馈状态 @@ -1654,7 +1664,7 @@ const cropperFormItem=(curItem)=> { // 需识别的试题标识: 单选题/多选题/填空题/判断题/主观题/复合题 const examType = questForm.worktype; - emit('cropper-exam-questForm-item', examType, curItem); + emit('cropper-exam-form-item', examType, curItem); }; /** @@ -1712,6 +1722,7 @@ const myMessageShow=(title, msg, status)=>{ // deep: true // 深度监听,适用于对象内部属性的变化 // }, // }, + watch(() => props.bookobj.levelSecondId, (newVal, oldVal) => { console.log(props.bookobj,'课程选择') // props.bookobj.levelSecondId? props.bookobj.levelSecondId : props.bookobj.levelFirstId @@ -1721,7 +1732,8 @@ watch(() => props.bookobj.levelSecondId, (newVal, oldVal) => { // 暴露给父组件的参数和方法(外部需要什么,都可以从这里暴露出去) defineExpose({ - updateForm + updateForm, + cropperFormItemCallBack, }) + From 2511a6cc3212ec3ce2faccfa40943f6fd9fde5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Czouyf=E2=80=9D?= <80906036@qq.com> Date: Thu, 21 Nov 2024 15:02:40 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/api/file/img.js | 42 +++++++++ .../src/components/tinymce/tinymce.vue | 91 +++++++++++-------- .../newClassTaskAssign/myQuestion/index.vue | 1 + .../questionUpload/quesItem/index.vue | 81 ++--------------- .../searchQuestion/index.vue | 4 +- .../Details/classroomPresentation/index.vue | 8 +- 6 files changed, 113 insertions(+), 114 deletions(-) create mode 100644 src/renderer/src/api/file/img.js diff --git a/src/renderer/src/api/file/img.js b/src/renderer/src/api/file/img.js new file mode 100644 index 0000000..6d833e9 --- /dev/null +++ b/src/renderer/src/api/file/img.js @@ -0,0 +1,42 @@ +import request from '@/utils/request' + +// 新增图片存eos +export function saveUploadFile(data) { + return request({ + url: '/education/uploadfile/saveUploadFile', + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data' + }, + data: data + }) +} + +// 新增批量图片存eos +export function saveUploadFiles(data) { + return request({ + url: '/education/uploadfile/saveUploadFiles', + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data' + }, + data: data + }) +} + +// 修改basecomment +export function updateUploadFile(data) { + return request({ + url: '/education/uploadfile', + method: 'put', + data: data + }) +} + +// 删除basecomment +export function delUploadFile(id) { + return request({ + url: '/education/uploadfile/' + id, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/renderer/src/components/tinymce/tinymce.vue b/src/renderer/src/components/tinymce/tinymce.vue index 30b84ca..4c74536 100644 --- a/src/renderer/src/components/tinymce/tinymce.vue +++ b/src/renderer/src/components/tinymce/tinymce.vue @@ -46,7 +46,8 @@ import "tinymce/plugins/anchor"; //锚点 import { ref, reactive, defineProps, defineEmits, nextTick, onMounted, computed, watch } from 'vue' import { getStaticUrl } from '@/utils/tool' -//import { listUploadfile, getUploadFile, delUploadFile, addUploadFile, saveUploadFile } from "@/api/comm/uploadfile"; +import useUserStore from '@/store/modules/user' +import { saveUploadFile } from "@/api/file/img"; const emits = defineEmits(["update:modelValue", "setHtml"]); //这里我选择将数据定义在props里面,方便在不同的页面也可以配置出不同的编辑器,当然也可以直接在组件中直接定义 @@ -107,6 +108,8 @@ const props = defineProps({ default: () => ({ userId: 0, fileAlias: '单题上传' }), }, }); + +const userStore = useUserStore().user; const pasteImgName = ref(''); const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传的图片服务器地址 @@ -212,29 +215,31 @@ const init = reactive({ // 插入/编辑图片(普通) - 因此处上传可传图片和文件故仅参考, 实际以[images_upload_handler]这个为准 file_picker_callback: function(callback, value, meta) { + return; + //文件分类 - let filetype='.pdf, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .mp3, .mp4'; - let upURL = '/common/upload'; - //为不同插件指定文件类型及后端地址 - switch(meta.filetype){ - case 'image': - filetype='.jpg, .jpeg, .png, .gif'; - //upURL='upimg.php'; - break; - case 'media': - filetype='.mp3, .mp4'; - //upURL='upfile.php'; - break; - case 'file': - default: - } + // let filetype='.pdf, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .mp3, .mp4'; + // let upURL = '/common/upload'; + // //为不同插件指定文件类型及后端地址 + // switch(meta.filetype){ + // case 'image': + // filetype='.jpg, .jpeg, .png, .gif'; + // //upURL='upimg.php'; + // break; + // case 'media': + // filetype='.mp3, .mp4'; + // //upURL='upfile.php'; + // break; + // case 'file': + // default: + // } - // 模拟出一个input用于添加本地文件 - let input = document.createElement('input'); - input.setAttribute('type', 'file'); - input.setAttribute('accept', filetype); + // // 模拟出一个input用于添加本地文件 + // let input = document.createElement('input'); + // input.setAttribute('type', 'file'); + // input.setAttribute('accept', filetype); - // 暂时屏蔽 + // // 暂时屏蔽 // input.onchange = function() { // const file = this.files[0]; // const formData = new FormData(); @@ -250,7 +255,7 @@ const init = reactive({ // }); // }; - input.click(); + // input.click(); }, // 插入/编辑图片(上传) @@ -278,22 +283,25 @@ const init = reactive({ formData.append("entpcourseid", 0); formData.append("filetype", "image"); formData.append("suffix", "image"); - formData.append("status", '0'); - if(props.upFileParams?.hasOwnProperty('deptId')){ - formData.append("entpid", props.upFileParams.deptId); + formData.append("status", '1'); + if(userStore.deptId && userStore.deptId != null){ + formData.append("entpid", userStore.deptId); } - if(props.upFileParams?.hasOwnProperty('userId')){ - formData.append("userid", props.upFileParams.userId); + if(userStore.userId && userStore.userId != null){ + formData.append("userid", userStore.userId); } - if(props.upFileParams?.hasOwnProperty('edudegree')){ - let edudegree = props.upFileParams.edudegree.toString(); + if(userStore.edudegree && userStore.edudegree != null){ + let edudegree = userStore.edudegree.toString(); if(edudegree != '' && edudegree.indexOf('年级') == -1){ edudegree += '年级'; } formData.append("edudegree", edudegree); } - if(props.upFileParams?.hasOwnProperty('edusubject')){ - formData.append("edusubject", props.upFileParams.edusubject); + if(userStore.edusubject && userStore.edusubject != null){ + formData.append("edusubject", userStore.edusubject); + } + if(userStore.edustage && userStore.edustage != null){ + formData.append("edustage", userStore.edustage); } if(props.upFileParams?.hasOwnProperty('lessionId')){ formData.append("evalid", props.upFileParams.lessionId); @@ -301,19 +309,22 @@ const init = reactive({ if(props.upFileParams?.hasOwnProperty('fileAlias')){ formData.append("filegroup", props.upFileParams.fileAlias); } + loading.value = true; + console.log('formData->', formData); // 暂时屏蔽 - // saveUploadFile(formData) - // .then((res) => { - // loading.value = false; - // return resolve(res.fileurl); - // }) - // .catch((err) => { - // loading.value = false; - // return reject('err:' + err); - // }); + saveUploadFile(formData) + .then((res) => { + console.log('res->', res); + loading.value = false; + return resolve(res.fileurl); + }) + .catch((err) => { + loading.value = false; + return reject('err:' + err); + }); } ), diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue index 4661abe..9689f4f 100644 --- a/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue +++ b/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue @@ -94,6 +94,7 @@ \ No newline at end of file diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue index 03c24ee..629991f 100644 --- a/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue +++ b/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue @@ -1733,6 +1733,7 @@ watch(() => props.bookobj.levelSecondId, (newVal, oldVal) => { // 暴露给父组件的参数和方法(外部需要什么,都可以从这里暴露出去) defineExpose({ updateForm, + resetForm, cropperFormItemCallBack, }) From 14bfef69032b6622091762d8f234649f090079ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Thu, 21 Nov 2024 15:30:55 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E9=A2=98=E5=BA=93?= =?UTF-8?q?=EF=BC=9A=E9=A2=98=E7=9B=AE=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../newClassTaskAssign/myQuestion/index.vue | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue index d142d03..1c1ff42 100644 --- a/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue +++ b/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue @@ -93,14 +93,15 @@ - + props.bookobj.levelSecondId, (newVal, oldVal) => { }) + \ No newline at end of file From 60f2790b0ca60ae329f76ee14109bbb951492d45 Mon Sep 17 00:00:00 2001 From: zhuhao <979263092@qq.com> Date: Thu, 21 Nov 2024 15:43:28 +0800 Subject: [PATCH 07/12] =?UTF-8?q?BUG=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/assets/images/borderstyle.png | Bin 0 -> 1803 bytes .../src/assets/images/borderwidth.png | Bin 0 -> 2051 bytes .../src/assets/images/mouse-pointer.png | Bin 0 -> 6093 bytes .../src/components/whiteboard/whiteboard.vue | 39 +++++++++---- .../classTask/newClassTaskAssign/index.vue | 52 ++++++++++-------- 5 files changed, 55 insertions(+), 36 deletions(-) create mode 100644 src/renderer/src/assets/images/borderstyle.png create mode 100644 src/renderer/src/assets/images/borderwidth.png create mode 100644 src/renderer/src/assets/images/mouse-pointer.png diff --git a/src/renderer/src/assets/images/borderstyle.png b/src/renderer/src/assets/images/borderstyle.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac9a18b48f0454d2a79819b1e20a6f9ffc7788e GIT binary patch literal 1803 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 -
+
-
- + + 图片
@@ -71,7 +72,7 @@ @@ -122,7 +123,7 @@
-