|
@@ -9,9 +9,12 @@
|
|
<!-- <el-button :disabled="!current?.taskId" class="m-l-base" size="small" type="primary" @click="onEditScore"
|
|
<!-- <el-button :disabled="!current?.taskId" class="m-l-base" size="small" type="primary" @click="onEditScore"
|
|
>修改给分</el-button
|
|
>修改给分</el-button
|
|
> -->
|
|
> -->
|
|
- <el-button :disabled="!current?.taskId" class="m-l-base m-r-auto" size="small" type="primary" @click="onSendBack"
|
|
|
|
|
|
+ <el-button :disabled="!current?.taskId" class="m-l-base" size="small" type="primary" @click="onSendBack"
|
|
>打回</el-button
|
|
>打回</el-button
|
|
>
|
|
>
|
|
|
|
+ <el-button custom-1 class="m-l-base m-r-auto" size="small" type="success" @click="multToggle">{{
|
|
|
|
+ isMult ? '取消多选' : '多选'
|
|
|
|
+ }}</el-button>
|
|
</mark-header>
|
|
</mark-header>
|
|
<div class="flex flex-1 overflow-hidden p-base mark-container">
|
|
<div class="flex flex-1 overflow-hidden p-base mark-container">
|
|
<splitpanes class="default-theme" style="height: 100%" @resize="setPaneSize">
|
|
<splitpanes class="default-theme" style="height: 100%" @resize="setPaneSize">
|
|
@@ -83,13 +86,14 @@
|
|
size="small"
|
|
size="small"
|
|
height="100%"
|
|
height="100%"
|
|
v-bind="pagination"
|
|
v-bind="pagination"
|
|
- highlight-current-row
|
|
|
|
|
|
+ :highlight-current-row="!isMult"
|
|
:data="tableData"
|
|
:data="tableData"
|
|
:columns="columns"
|
|
:columns="columns"
|
|
:cell-style="{ padding: '6px 0' }"
|
|
:cell-style="{ padding: '6px 0' }"
|
|
:memory-column="true"
|
|
:memory-column="true"
|
|
@current-change="onCurrentChange"
|
|
@current-change="onCurrentChange"
|
|
@row-dblclick="onDbClick"
|
|
@row-dblclick="onDbClick"
|
|
|
|
+ @selection-change="handleSelectionChange"
|
|
></base-table>
|
|
></base-table>
|
|
</div>
|
|
</div>
|
|
</pane>
|
|
</pane>
|
|
@@ -102,12 +106,7 @@
|
|
v-model="visibleHistory"
|
|
v-model="visibleHistory"
|
|
:task="currentViewHistory"
|
|
:task="currentViewHistory"
|
|
></mark-history-list>
|
|
></mark-history-list>
|
|
- <send-back-mark
|
|
|
|
- :id="current?.taskId"
|
|
|
|
- v-model="sendBackVisible"
|
|
|
|
- type="custom-check"
|
|
|
|
- @rejected="onRejected"
|
|
|
|
- ></send-back-mark>
|
|
|
|
|
|
+ <send-back-mark :id="rejectIds" v-model="sendBackVisible" type="custom-check" @rejected="onRejected"></send-back-mark>
|
|
|
|
|
|
<base-dialog v-model="setExpertPaperVisible" title="设置专家卷" :footer="false" :width="540">
|
|
<base-dialog v-model="setExpertPaperVisible" title="设置专家卷" :footer="false" :width="540">
|
|
<base-form size="small" :model="setExpertModel" :items="items" :label-width="'130px'">
|
|
<base-form size="small" :model="setExpertModel" :items="items" :label-width="'130px'">
|
|
@@ -142,7 +141,7 @@
|
|
|
|
|
|
<script setup lang="tsx" name="MarkingInquiryResult">
|
|
<script setup lang="tsx" name="MarkingInquiryResult">
|
|
/** 自定义查询结果 */
|
|
/** 自定义查询结果 */
|
|
-import { ref, computed, watch, reactive } from 'vue'
|
|
|
|
|
|
+import { ref, computed, watch, reactive, nextTick } from 'vue'
|
|
import { useRoute } from 'vue-router'
|
|
import { useRoute } from 'vue-router'
|
|
import { ElButton, ElPagination, ElMessage } from 'element-plus'
|
|
import { ElButton, ElPagination, ElMessage } from 'element-plus'
|
|
import { add } from '@/utils/common'
|
|
import { add } from '@/utils/common'
|
|
@@ -171,6 +170,11 @@ import { Splitpanes, Pane } from 'splitpanes'
|
|
import { setPaneSize } from '@/utils/common'
|
|
import { setPaneSize } from '@/utils/common'
|
|
import useMainStore from '@/store/main'
|
|
import useMainStore from '@/store/main'
|
|
import BtnPagination from '@/components/common/BtnPagination.vue'
|
|
import BtnPagination from '@/components/common/BtnPagination.vue'
|
|
|
|
+const isMult = ref(false)
|
|
|
|
+const multipleSelection = ref<any>([])
|
|
|
|
+const handleSelectionChange = (val: any) => {
|
|
|
|
+ multipleSelection.value = val
|
|
|
|
+}
|
|
const mainStore = useMainStore()
|
|
const mainStore = useMainStore()
|
|
const paneSize = computed(() => {
|
|
const paneSize = computed(() => {
|
|
return mainStore.paneSizeConfig[location.pathname] || 60
|
|
return mainStore.paneSizeConfig[location.pathname] || 60
|
|
@@ -191,6 +195,7 @@ const onSendBack = () => {
|
|
const onRejected = () => {
|
|
const onRejected = () => {
|
|
// onRefresh()
|
|
// onRefresh()
|
|
ElMessage.success('打回成功')
|
|
ElMessage.success('打回成功')
|
|
|
|
+ fetchTable()
|
|
}
|
|
}
|
|
|
|
|
|
/** 给分板 */
|
|
/** 给分板 */
|
|
@@ -260,31 +265,40 @@ const onOperationClick: OperationClick = ({ type, value }) => {
|
|
operationHandles[type]?.(value)
|
|
operationHandles[type]?.(value)
|
|
}
|
|
}
|
|
|
|
|
|
-const columns: EpTableColumn<RowType>[] = [
|
|
|
|
- {
|
|
|
|
- label: '密号',
|
|
|
|
- prop: 'secretNumber',
|
|
|
|
- minWidth: 110,
|
|
|
|
- fixed: 'left',
|
|
|
|
- formatter(row: any) {
|
|
|
|
- return (
|
|
|
|
- <SecNumberStatus
|
|
|
|
- secretNumber={row.secretNumber}
|
|
|
|
- checked={row.checked}
|
|
|
|
- corrected={row.corrected}
|
|
|
|
- ></SecNumberStatus>
|
|
|
|
- )
|
|
|
|
|
|
+const columns: any = computed(() => {
|
|
|
|
+ let cols: any = [
|
|
|
|
+ {
|
|
|
|
+ label: '密号',
|
|
|
|
+ prop: 'secretNumber',
|
|
|
|
+ minWidth: 110,
|
|
|
|
+ fixed: 'left',
|
|
|
|
+ formatter(row: any) {
|
|
|
|
+ return (
|
|
|
|
+ <SecNumberStatus
|
|
|
|
+ secretNumber={row.secretNumber}
|
|
|
|
+ checked={row.checked}
|
|
|
|
+ corrected={row.corrected}
|
|
|
|
+ ></SecNumberStatus>
|
|
|
|
+ )
|
|
|
|
+ },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- { label: '评卷员', prop: 'markerName', minWidth: 90 },
|
|
|
|
- { label: '评卷员给分', prop: 'markerScore', minWidth: 108, sortable: true },
|
|
|
|
- { label: '组长给分', prop: 'headerScore', minWidth: 94, sortable: true },
|
|
|
|
- { label: '客观分', prop: 'objectiveScore', minWidth: 90, sortable: true },
|
|
|
|
- { label: '客主比', prop: 'ratio', minWidth: 90, sortable: true },
|
|
|
|
- { label: '成绩', prop: 'markScore', minWidth: 90, sortable: true },
|
|
|
|
- { label: '评卷时间', prop: 'markTime', minWidth: 130 },
|
|
|
|
- { label: '抽查次数', prop: 'customCheckNumber', minWidth: 94, sortable: true },
|
|
|
|
-]
|
|
|
|
|
|
+ { label: '评卷员', prop: 'markerName', minWidth: 90 },
|
|
|
|
+ { label: '评卷员给分', prop: 'markerScore', minWidth: 108, sortable: true },
|
|
|
|
+ { label: '组长给分', prop: 'headerScore', minWidth: 94, sortable: true },
|
|
|
|
+ { label: '客观分', prop: 'objectiveScore', minWidth: 90, sortable: true },
|
|
|
|
+ { label: '客主比', prop: 'ratio', minWidth: 90, sortable: true },
|
|
|
|
+ { label: '成绩', prop: 'markScore', minWidth: 90, sortable: true },
|
|
|
|
+ { label: '评卷时间', prop: 'markTime', minWidth: 130 },
|
|
|
|
+ { label: '抽查次数', prop: 'customCheckNumber', minWidth: 94, sortable: true },
|
|
|
|
+ ]
|
|
|
|
+ if (isMult.value) {
|
|
|
|
+ cols.unshift({
|
|
|
|
+ type: 'selection',
|
|
|
|
+ width: 55,
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ return cols
|
|
|
|
+})
|
|
|
|
|
|
const transTime = (str: any) => {
|
|
const transTime = (str: any) => {
|
|
if (str.indexOf('-') > -1) {
|
|
if (str.indexOf('-') > -1) {
|
|
@@ -328,7 +342,8 @@ const {
|
|
onDbClick,
|
|
onDbClick,
|
|
onCurrentChange,
|
|
onCurrentChange,
|
|
nextRow,
|
|
nextRow,
|
|
-} = useTableCheck(data)
|
|
|
|
|
|
+ elTableRef,
|
|
|
|
+} = useTableCheck(data, true, null, false, isMult)
|
|
|
|
|
|
watch(current, () => {
|
|
watch(current, () => {
|
|
if (current.value) {
|
|
if (current.value) {
|
|
@@ -486,6 +501,23 @@ const imgOption = computed<SetImgBgOption>(() => {
|
|
const { drawing, dataUrl } = useSetImgBg(imgOption, frontColor, setFrontColor)
|
|
const { drawing, dataUrl } = useSetImgBg(imgOption, frontColor, setFrontColor)
|
|
|
|
|
|
onRefresh()
|
|
onRefresh()
|
|
|
|
+
|
|
|
|
+const multToggle = () => {
|
|
|
|
+ isMult.value = !isMult.value
|
|
|
|
+ editScoreVisible.value = !isMult.value
|
|
|
|
+ if (!isMult.value && tableData.value?.length && current.value) {
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ let index = tableData.value.findIndex((task: any) => task.taskId == current.value?.taskId)
|
|
|
|
+ elTableRef?.value?.setCurrentRow(tableData.value[index == -1 ? 0 : index])
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ if (isMult.value) {
|
|
|
|
+ elTableRef?.value?.clearSelection()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+const rejectIds = computed(() => {
|
|
|
|
+ return isMult.value ? multipleSelection.value.map((item: any) => item.taskId) : [current.value?.taskId]
|
|
|
|
+})
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
<style scoped lang="scss">
|