Browse Source

给分板记住拖拽的位置和缩放的大小

刘洋 2 years ago
parent
commit
85717e6b92

BIN
src/assets/images/main_question.png


+ 0 - 1
src/components/shared/ScoringPanel.vue

@@ -1,7 +1,6 @@
 <template>
   <scoring-panel-container
     v-model="modalVisible"
-    draggable
     title="键盘给分"
     modal-class="no-mask"
     :width="useVW(560)"

+ 32 - 6
src/directives/dialogResize.ts

@@ -1,6 +1,5 @@
 export const dialogResize = {
   mounted(el: any, binding: any, vnode: any) {
-    console.log('eeeee', el)
     const resizeEvent = new CustomEvent('drag-resize', {
       detail: '尺寸变化',
       bubbles: false,
@@ -27,6 +26,18 @@ export const dialogResize = {
     console.log(el)
     // 给弹窗加上overflow auto;不然缩小时框内的标签可能超出dialog;
     dragDom.style.overflow = 'auto'
+
+    const keyboardPositions = localStorage.getItem('cet-keyboard-positions')
+    const keyboardResize = localStorage.getItem('cet-keyboard-resize')
+    if (keyboardPositions) {
+      dragDom.style.left = JSON.parse(keyboardPositions).left || 0
+      dragDom.style.top = JSON.parse(keyboardPositions).top || 0
+    }
+    if (keyboardResize) {
+      dragDom.style.width = JSON.parse(keyboardResize).width || 'auto'
+      dragDom.style.height = JSON.parse(keyboardResize).height || 'auto'
+    }
+
     // 清除选择头部文字效果
     // eslint-disable-next-line no-new-func
     dialogHeaderEl.onselectstart = new Function('return false')
@@ -80,9 +91,17 @@ export const dialogResize = {
       document.onmouseup = function (e) {
         document.onmousemove = null
         document.onmouseup = null
+        console.log('dragDom.style.left:', dragDom.style.left, dragDom.style.top)
+        localStorage.setItem(
+          'cet-keyboard-positions',
+          JSON.stringify({
+            left: dragDom.style.left || 0,
+            top: dragDom.style.top || 0,
+          })
+        )
       }
     }
-    // dialogHeaderEl.onmousedown = moveDown
+    dialogHeaderEl.onmousedown = moveDown
     let bodyHeight = 'auto'
 
     function setMaxMin() {
@@ -97,8 +116,8 @@ export const dialogResize = {
         dragDom.style.marginTop = window.innerHeight * 0.07 + 'px'
         el.fullscreen = false
         dialogHeaderEl.style.cursor = 'move'
-        // dialogHeaderEl.onmousedown = moveDown
-        // dragDom.querySelector('.el-dialog__body').style.height = bodyHeight;
+        dialogHeaderEl.onmousedown = moveDown
+        dragDom.querySelector('.el-dialog__body').style.height = bodyHeight
         hasSetBodyHight = false
       } else {
         const i: any = maxMin.querySelector('.el-icon-full-screen')
@@ -132,9 +151,9 @@ export const dialogResize = {
     }
 
     // 点击放大缩小效果
-    // maxMin.onclick = setMaxMin
+    maxMin.onclick = setMaxMin
     // 双击头部效果
-    // dialogHeaderEl.ondblclick = setMaxMin
+    dialogHeaderEl.ondblclick = setMaxMin
     // 拉伸
     const resizeEl = document.createElement('div')
     dragDom.appendChild(resizeEl)
@@ -175,6 +194,13 @@ export const dialogResize = {
       document.onmouseup = function (e) {
         document.onmousemove = null
         document.onmouseup = null
+        localStorage.setItem(
+          'cet-keyboard-resize',
+          JSON.stringify({
+            width: dragDom.style.width || 'auto',
+            height: dragDom.style.top || 'auto',
+          })
+        )
         el.dispatchEvent(resizeEvent)
       }
     }

+ 1 - 1
src/modules/analysis/marker-statistics/index.vue

@@ -32,7 +32,7 @@
           </div>
         </div>
         <div class="flex-1 flex direction-column overflow-hidden m-l-base">
-          <div class="fill-blank text-center p-t-base table-title">{{ query.markerName }}观题给分分布</div>
+          <div class="fill-blank text-center p-t-base table-title">{{ query.markerName }}观题给分分布</div>
           <div class="flex-1 overflow-hidden fill-blank m-b-base table-box">
             <base-table size="small" height="100%" :columns="columns" :data="objectiveTableData"></base-table>
           </div>

+ 90 - 3
src/modules/marking/assess/index.vue

@@ -15,7 +15,7 @@
       <div class="flex-1 radius-base fill-blank tree-card">
         <div class="flex items-center justify-between">
           <span>选择评卷员</span>
-          <el-button :loading="loading" size="small" type="primary" @click="onHandOutForceCheck">分发考核卷</el-button>
+          <el-button :loading="loading" size="small" type="primary" @click="sendHandler">分发考核卷</el-button>
         </div>
         <div class="flex direction-column m-t-extra-base p-base radius-base fill-lighter tree-box">
           <el-input v-model="filterText" placeholder="输入评卷员账号或名称筛选" clearable></el-input>
@@ -46,6 +46,32 @@
         </template>
       </base-table>
     </div>
+
+    <base-dialog v-model="forceCheckVisible" :title="dialogTitle" destroy-on-close :width="500">
+      <div class="dialog-body-wrap">
+        <div class="q-title flex items-center">
+          <img src="../../../assets/images/main_question.png" />
+          <span>{{ questionName }}</span>
+        </div>
+        <div class="choose-list-box">
+          <div class="row">
+            <span class="label"> 强制考核卷组: </span>
+            <div class="value">{{ `第${model.forceGroupNumber}组` }}</div>
+          </div>
+          <div class="row">
+            <span class="label"> 分发给: </span>
+            <div class="value">
+              {{ previewChecked }}
+            </div>
+          </div>
+        </div>
+      </div>
+      <template #footer>
+        <div class="flex justify-center">
+          <confirm-button @confirm="onHandOutForceCheck" @cancel="forceCheckVisible = false"></confirm-button>
+        </div>
+      </template>
+    </base-dialog>
   </div>
 </template>
 
@@ -55,18 +81,19 @@ import { reactive, ref, computed, watch } from 'vue'
 import { ElButton, ElInput, ElTree, ElMessage } from 'element-plus'
 import BaseForm from '@/components/element/BaseForm.vue'
 import BaseTable from '@/components/element/BaseTable.vue'
+import BaseDialog from '@/components/element/BaseDialog.vue'
 import Empty from '@/components/common/Empty.vue'
 import useForm from '@/hooks/useForm'
 import useFetch from '@/hooks/useFetch'
 import useOptions from '@/hooks/useOptions'
 import useVW from '@/hooks/useVW'
-
+import ConfirmButton from '@/components/common/ConfirmButton.vue'
 import type { ExtractApiParams, ExtractApiResponse } from '@/api/api'
 import type { FormGroup, EpFormItem, EpFormRules, EpTableColumn } from 'global-type'
 import { useRoute } from 'vue-router'
 import { TreeKey } from 'element-plus/es/components/tree/src/tree.type'
 const route = useRoute()
-
+const forceCheckVisible = ref(false)
 const { subjectList, mainQuestionList, dataModel, onOptionInit, changeModelValue } = useOptions(['subject', 'question'])
 
 const markerIds = ref()
@@ -240,9 +267,69 @@ const onSearch = async () => {
 onOptionInit((data) => {
   getMarkerTree({ subjectCode: data?.subject || '', mainNumber: data?.question, name: '' })
 })
+
+const dialogTitle = computed(() => {
+  let target = (subjectList.value || []).find((item: any) => {
+    return item.code == model.subjectCode
+  })
+  return `${target?.code} - ${target?.name}`
+})
+const questionName = computed(() => {
+  let target = (mainQuestionList.value || []).find((item: any) => {
+    return item.mainNumber == model.mainNumber
+  })
+  return `${target?.label}`
+})
+const previewChecked = ref('')
+const sendHandler = () => {
+  const checked: any = treeRef?.value?.getCheckedNodes()
+  if (!checked.length) {
+    ElMessage.error('请选择评卷员')
+    return
+  }
+  previewChecked.value = checked
+    .filter((person: any) => !!person.name)
+    .map((person: any) => {
+      return `第${person.markingGroupNumber}组:${person.name}`
+    })
+    .join(';   ')
+  console.log('checked:', checked)
+  forceCheckVisible.value = true
+}
 </script>
 
 <style scoped lang="scss">
+.dialog-body-wrap {
+  .choose-list-box {
+    background-color: #f5f5f5;
+    border-radius: 6px;
+    padding: 20px;
+    max-height: 600px;
+    overflow: auto;
+    .row {
+      display: flex;
+      line-height: 28px;
+      .label {
+        width: 90px;
+        text-align: right;
+      }
+      .val {
+        flex: 1;
+      }
+    }
+  }
+  .q-title {
+    margin-bottom: 15px;
+    img {
+      height: 20px;
+      margin-right: 10px;
+    }
+    span {
+      color: #444;
+      font-size: 14px;
+    }
+  }
+}
 .top-box {
   height: 395px;
   .tree-card {

+ 1 - 1
src/modules/quality/ending-check/components/EndCheck.vue

@@ -27,7 +27,7 @@
       </div>
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
         <div class="flex items-center m-b-base table-title">
-          <span class="label">打回评卷员手中</span>
+          <span class="label">打回中的试卷</span>
           <span class="data-count">{{ unMarkBackPaperList?.result?.length }}</span>
           <el-button type="primary" size="small" @click="onTaskChangeMarker2">任务指定评卷员</el-button>
         </div>