|
@@ -11,9 +11,10 @@
|
|
highlight-current-row
|
|
highlight-current-row
|
|
@current-change="onCurrentChange"
|
|
@current-change="onCurrentChange"
|
|
@row-dblclick="onDbClick"
|
|
@row-dblclick="onDbClick"
|
|
|
|
+ @row-contextmenu="rowContextmenu"
|
|
>
|
|
>
|
|
<template #column-marker="{ row }">
|
|
<template #column-marker="{ row }">
|
|
- <el-popover
|
|
|
|
|
|
+ <!-- <el-popover
|
|
v-if="row.markerId"
|
|
v-if="row.markerId"
|
|
:ref="(popover: any) => setPopoverRefs(row.markerId,popover)"
|
|
:ref="(popover: any) => setPopoverRefs(row.markerId,popover)"
|
|
trigger="contextmenu"
|
|
trigger="contextmenu"
|
|
@@ -33,7 +34,8 @@
|
|
<el-button link>发送消息</el-button>
|
|
<el-button link>发送消息</el-button>
|
|
</el-menu-item>
|
|
</el-menu-item>
|
|
</el-menu>
|
|
</el-menu>
|
|
- </el-popover>
|
|
|
|
|
|
+ </el-popover> -->
|
|
|
|
+ <span v-if="row.markerId">{{ row.markerName }}</span>
|
|
<span v-else>题组</span>
|
|
<span v-else>题组</span>
|
|
</template>
|
|
</template>
|
|
</base-table>
|
|
</base-table>
|
|
@@ -47,11 +49,18 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<set-workload v-model="setWorkloadVisible" :data="setWorkloadData" />
|
|
<set-workload v-model="setWorkloadVisible" :data="setWorkloadData" />
|
|
|
|
+ <right-key-menu
|
|
|
|
+ v-show="visable"
|
|
|
|
+ ref="rightKeyMenu"
|
|
|
|
+ @right-click="rightClick"
|
|
|
|
+ @on-set-workload="onSetWorkload"
|
|
|
|
+ @on-send-message="onSendMessage"
|
|
|
|
+ ></right-key-menu>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup lang="tsx" name="StatisticsPersonnel">
|
|
<script setup lang="tsx" name="StatisticsPersonnel">
|
|
/** 人员数据统计-按人员展开 */
|
|
/** 人员数据统计-按人员展开 */
|
|
-import { ref, inject, computed, watch } from 'vue'
|
|
|
|
|
|
+import { ref, inject, computed, watch, nextTick } from 'vue'
|
|
import { useRouter } from 'vue-router'
|
|
import { useRouter } from 'vue-router'
|
|
import { ElButton, ElPopover, ElMenu, ElMenuItem } from 'element-plus'
|
|
import { ElButton, ElPopover, ElMenu, ElMenuItem } from 'element-plus'
|
|
import VueECharts from 'vue-echarts'
|
|
import VueECharts from 'vue-echarts'
|
|
@@ -60,12 +69,17 @@ import SetWorkload from './SetWorkload.vue'
|
|
import useVW, { usePX } from '@/hooks/useVW'
|
|
import useVW, { usePX } from '@/hooks/useVW'
|
|
import useFetch from '@/hooks/useFetch'
|
|
import useFetch from '@/hooks/useFetch'
|
|
import useTableCheck from '@/hooks/useTableCheck'
|
|
import useTableCheck from '@/hooks/useTableCheck'
|
|
|
|
+import RightKeyMenu from './RightKeyMenu.vue'
|
|
|
|
|
|
import type { EChartsOption } from 'echarts'
|
|
import type { EChartsOption } from 'echarts'
|
|
import type { ExtractApiResponse, ExtractApiParams } from '@/api/api'
|
|
import type { ExtractApiResponse, ExtractApiParams } from '@/api/api'
|
|
import type { EpTableColumn } from 'global-type'
|
|
import type { EpTableColumn } from 'global-type'
|
|
import type { PopoverInstance } from 'element-plus'
|
|
import type { PopoverInstance } from 'element-plus'
|
|
|
|
|
|
|
|
+const rightKeyMenu = ref(null)
|
|
|
|
+const rightClick = () => {
|
|
|
|
+ visable.value = false
|
|
|
|
+}
|
|
const props = defineProps<{
|
|
const props = defineProps<{
|
|
data: ExtractApiResponse<'getStatisticsByGroup'>
|
|
data: ExtractApiResponse<'getStatisticsByGroup'>
|
|
params: ExtractApiParams<'getStatisticsByGroup'> & { expand: boolean }
|
|
params: ExtractApiParams<'getStatisticsByGroup'> & { expand: boolean }
|
|
@@ -80,43 +94,55 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
|
|
{
|
|
{
|
|
label: '小组',
|
|
label: '小组',
|
|
prop: 'markingGroupNumber',
|
|
prop: 'markingGroupNumber',
|
|
- width: usePX(52),
|
|
|
|
|
|
+ width: 52,
|
|
fixed: 'left',
|
|
fixed: 'left',
|
|
formatter(row) {
|
|
formatter(row) {
|
|
return row.markingGroupNumber === 0 ? '全部' : `第${row.markingGroupNumber}组`
|
|
return row.markingGroupNumber === 0 ? '全部' : `第${row.markingGroupNumber}组`
|
|
},
|
|
},
|
|
},
|
|
},
|
|
- { label: '评卷员', prop: 'markerName', minWidth: usePX(84), slotName: 'marker' },
|
|
|
|
- { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: usePX(72) },
|
|
|
|
- { align: 'center', label: '当日可阅', prop: 'markDayCount', width: usePX(72) },
|
|
|
|
- { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', width: usePX(72) },
|
|
|
|
- { align: 'center', label: '客观题0分量', prop: 'objectiveZero', width: usePX(100) },
|
|
|
|
- { align: 'center', label: '客观平均分', prop: 'objectiveAvg', width: usePX(76) },
|
|
|
|
- { align: 'center', label: '客观标准差', prop: 'objectiveStd', width: usePX(76) },
|
|
|
|
- { align: 'center', label: '重评/待确认', prop: 'reMarkUnConfirmCount', width: usePX(106) },
|
|
|
|
- { align: 'center', label: '抽查量', prop: 'checkCount', width: usePX(52) },
|
|
|
|
- { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', width: usePX(76) },
|
|
|
|
- { align: 'center', label: '相关系数', prop: 'xyRelate', width: usePX(64) },
|
|
|
|
- { align: 'center', label: '平均分', prop: 'avg', width: usePX(52) },
|
|
|
|
- { align: 'center', label: '标准差', prop: 'std', width: usePX(52) },
|
|
|
|
- { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', width: usePX(96) },
|
|
|
|
- { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', width: usePX(96) },
|
|
|
|
- { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', width: usePX(96) },
|
|
|
|
- { align: 'center', label: '平均客主比', prop: 'objSubAvgRate', width: usePX(76) },
|
|
|
|
|
|
+ { label: '评卷员', prop: 'markerName', minWidth: 84, slotName: 'marker' },
|
|
|
|
+ { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 72 },
|
|
|
|
+ { align: 'center', label: '当日可阅', prop: 'markDayCount', width: 72 },
|
|
|
|
+ { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', width: 72 },
|
|
|
|
+ { align: 'center', label: '客观题0分量', prop: 'objectiveZero', width: 100 },
|
|
|
|
+ { align: 'center', label: '客观平均分', prop: 'objectiveAvg', width: 90 },
|
|
|
|
+ { align: 'center', label: '客观标准差', prop: 'objectiveStd', width: 80 },
|
|
|
|
+ { align: 'center', label: '重评/待确认', prop: 'reMarkUnConfirmCount', width: 100 },
|
|
|
|
+ { align: 'center', label: '抽查量', prop: 'checkCount', width: 70 },
|
|
|
|
+ { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', width: 90 },
|
|
|
|
+ { align: 'center', label: '相关系数', prop: 'xyRelate', width: 70 },
|
|
|
|
+ { align: 'center', label: '平均分', prop: 'avg', width: 60 },
|
|
|
|
+ { align: 'center', label: '标准差', prop: 'std', width: 60 },
|
|
|
|
+ { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', width: 100 },
|
|
|
|
+ { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', width: 100 },
|
|
|
|
+ { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', width: 100 },
|
|
|
|
+ { align: 'center', label: '平均客主比', prop: 'objSubAvgRate', width: 90 },
|
|
{
|
|
{
|
|
align: 'center',
|
|
align: 'center',
|
|
label: '在线',
|
|
label: '在线',
|
|
prop: 'online',
|
|
prop: 'online',
|
|
- width: usePX(40),
|
|
|
|
|
|
+ width: 52,
|
|
formatter(row) {
|
|
formatter(row) {
|
|
return row.online ? '在线' : '离线'
|
|
return row.online ? '在线' : '离线'
|
|
},
|
|
},
|
|
},
|
|
},
|
|
- { align: 'center', label: '状态', prop: 'markingStatus', width: usePX(40) },
|
|
|
|
- { align: 'center', label: '速度', prop: 'markingRate', width: usePX(40) },
|
|
|
|
- { align: 'center', label: '综合系数', prop: 'integration', width: usePX(64) },
|
|
|
|
|
|
+ { align: 'center', label: '状态', prop: 'markingStatus', width: 80 },
|
|
|
|
+ { align: 'center', label: '速度', prop: 'markingRate', width: 46 },
|
|
|
|
+ { align: 'center', label: '综合系数', prop: 'integration', width: 70 },
|
|
]
|
|
]
|
|
-
|
|
|
|
|
|
+const visable = ref(false)
|
|
|
|
+const rowContextmenu = (row: any, column: any, event: any) => {
|
|
|
|
+ console.log(row, column, event)
|
|
|
|
+ visable.value = false
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ visable.value = true
|
|
|
|
+ }, 50)
|
|
|
|
+ event.preventDefault()
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ // alert(1)
|
|
|
|
+ ;(rightKeyMenu.value as any).onload(row, column, event)
|
|
|
|
+ })
|
|
|
|
+}
|
|
const popovers = ref<Record<string, PopoverInstance>>({})
|
|
const popovers = ref<Record<string, PopoverInstance>>({})
|
|
|
|
|
|
const setWorkloadVisible = ref<boolean>(false)
|
|
const setWorkloadVisible = ref<boolean>(false)
|