刘洋 2 年之前
父節點
當前提交
62394a5bd4
共有 5 個文件被更改,包括 36 次插入10 次删除
  1. 1 0
      package.json
  2. 0 1
      src/components/shared/message/Message.vue
  3. 17 6
      src/hooks/useSetImgBg.ts
  4. 14 3
      src/modules/marking/mark/index.vue
  5. 4 0
      types/rgbaster.d.ts

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
     "element-plus": "2.2.17",
     "element-plus": "2.2.17",
     "lodash-es": "4.17.21",
     "lodash-es": "4.17.21",
     "pinia": "2.0.23",
     "pinia": "2.0.23",
+    "rgbaster": "^2.1.1",
     "splitpanes": "^3.1.5",
     "splitpanes": "^3.1.5",
     "vue": "3.2.40",
     "vue": "3.2.40",
     "vue-echarts": "6.2.3",
     "vue-echarts": "6.2.3",

+ 0 - 1
src/components/shared/message/Message.vue

@@ -97,7 +97,6 @@ const unReadMessages = useMessageLoop()
 watch(
 watch(
   () => (unReadMessages as ShallowRef).value,
   () => (unReadMessages as ShallowRef).value,
   (val) => {
   (val) => {
-    console.log(val)
     if (!visibleMessageWindow.value) {
     if (!visibleMessageWindow.value) {
       let newMsgs = val.messages
       let newMsgs = val.messages
       if (!newMsgs.length) {
       if (!newMsgs.length) {

+ 17 - 6
src/hooks/useSetImgBg.ts

@@ -4,7 +4,7 @@ import { isDom } from '@/utils/common'
 import TintImageWorker from '@/utils/image.worker?worker'
 import TintImageWorker from '@/utils/image.worker?worker'
 import useMainStore from '@/store/main'
 import useMainStore from '@/store/main'
 import { useRoute } from 'vue-router'
 import { useRoute } from 'vue-router'
-
+import analyze from 'rgbaster'
 export type RGBA = number[]
 export type RGBA = number[]
 
 
 export type Point = [number, number]
 export type Point = [number, number]
@@ -96,16 +96,27 @@ export const useSetImgBg = (option: Ref<SetImgBgOption>, frontColor?: Ref<string
       image = await new Promise<HTMLImageElement>((resolve, reject) => {
       image = await new Promise<HTMLImageElement>((resolve, reject) => {
         const img = new Image()
         const img = new Image()
         img.src = image as string
         img.src = image as string
-        img.onload = function () {
+        img.onload = async () => {
           if (frontColor && setFrontColor) {
           if (frontColor && setFrontColor) {
-            const canvas = document.createElement('canvas')
-            const maxVal = getRgba(canvas, this)
-            console.log('maxVal:', maxVal)
-            const splitArr = maxVal.split(',')
+            // console.time()
+            const result = await analyze(image, { scale: 0.5 })
+            // console.timeEnd()
+            const bgColorRgb = result[0].color
+            const bgColorNum = bgColorRgb.split('rgb(')[1].slice(0, -1)
+            const splitArr = bgColorNum.split(',')
             const hex = getHex(Number(splitArr[0]), Number(splitArr[1]), Number(splitArr[2]))
             const hex = getHex(Number(splitArr[0]), Number(splitArr[1]), Number(splitArr[2]))
             if (!userSetColor?.value) {
             if (!userSetColor?.value) {
               setFrontColor('#' + hex)
               setFrontColor('#' + hex)
             }
             }
+
+            // const canvas = document.createElement('canvas')
+            // const maxVal = getRgba(canvas, this)
+            // console.log('maxVal:', maxVal)
+            // const splitArr = maxVal.split(',')
+            // const hex = getHex(Number(splitArr[0]), Number(splitArr[1]), Number(splitArr[2]))
+            // if (!userSetColor?.value) {
+            //   setFrontColor('#' + hex)
+            // }
           }
           }
 
 
           resolve(img)
           resolve(img)

+ 14 - 3
src/modules/marking/mark/index.vue

@@ -66,7 +66,7 @@
 
 
 <script setup lang="ts" name="MarkingMark">
 <script setup lang="ts" name="MarkingMark">
 /** 阅卷-正式评卷 */
 /** 阅卷-正式评卷 */
-import { computed, nextTick, ref, watch, onBeforeUnmount } from 'vue'
+import { computed, nextTick, ref, watch, onBeforeUnmount, unref } from 'vue'
 import { useRouter } from 'vue-router'
 import { useRouter } from 'vue-router'
 import { ElButton, ElRadioGroup, ElRadioButton, ElRadio, ElMessage } from 'element-plus'
 import { ElButton, ElRadioGroup, ElRadioButton, ElRadio, ElMessage } from 'element-plus'
 import { minus } from '@/utils/common'
 import { minus } from '@/utils/common'
@@ -134,7 +134,8 @@ type FormalTaskType = ExtractArrayValue<ExtractApiResponse<'getMarkingTask'>>
 
 
 type TaskInfoType = FormalTaskType | HistoryTaskType
 type TaskInfoType = FormalTaskType | HistoryTaskType
 
 
-let currentTaskPool: ExtractApiResponse<'getMarkingTask'> = []
+// let currentTaskPool: ExtractApiResponse<'getMarkingTask'> = []
+let currentTaskPool: any = []
 
 
 const currentTask = ref<TaskInfoType>()
 const currentTask = ref<TaskInfoType>()
 
 
@@ -145,7 +146,8 @@ const excludeOperations = computed<excludeOperationTypes>(() => {
     return ['delete', 'bookmark']
     return ['delete', 'bookmark']
   }
   }
   const isSampleType = ['SAMPLE_A', 'SAMPLE_B'].includes(currentTask.value.taskType)
   const isSampleType = ['SAMPLE_A', 'SAMPLE_B'].includes(currentTask.value.taskType)
-  return ['delete', 'bookmark'].concat(isSampleType ? ['problem'] : []) as excludeOperationTypes
+  // return ['delete', 'bookmark'].concat(isSampleType ? ['problem'] : []) as excludeOperationTypes
+  return ['delete', 'bookmark']
 })
 })
 
 
 const { fetch: getMarkingTask, loading } = useFetch('getMarkingTask')
 const { fetch: getMarkingTask, loading } = useFetch('getMarkingTask')
@@ -153,6 +155,11 @@ const { fetch: submitMarkTask, loading: submitting } = useFetch('submitMarkTask'
 const { fetch: getMarkStatus, result: markStatus } = useFetch('getMarkStatus')
 const { fetch: getMarkStatus, result: markStatus } = useFetch('getMarkStatus')
 
 
 const historyTaskChange = (task: HistoryTaskType) => {
 const historyTaskChange = (task: HistoryTaskType) => {
+  let saveTargetTask = unref(currentTask)
+  console.log('saveTargetTask:', saveTargetTask)
+  if (currentTaskType.value != 'remarking') {
+    currentTaskPool.unshift(saveTargetTask)
+  }
   currentTask.value = task
   currentTask.value = task
   currentTaskType.value = 'remarking'
   currentTaskType.value = 'remarking'
   nextTick(() => {
   nextTick(() => {
@@ -302,6 +309,10 @@ const onConfirmSubmitProblem = async () => {
     if (!currentTask.value) {
     if (!currentTask.value) {
       return
       return
     }
     }
+    if (currentTask.value.taskType !== 'FORMAL') {
+      ElMessage.error('该试卷类型不能提交问题卷')
+      return
+    }
     problemVisible.value = false
     problemVisible.value = false
     if (problemClass.value === 'similar') {
     if (problemClass.value === 'similar') {
       await onSubmitSimilar()
       await onSubmitSimilar()

+ 4 - 0
types/rgbaster.d.ts

@@ -0,0 +1,4 @@
+declare module 'rgbaster' {
+  const rgbaster: any
+  export default rgbaster
+}