|
@@ -92,6 +92,8 @@ const rightClick = () => {
|
|
const props = defineProps<{
|
|
const props = defineProps<{
|
|
data: ExtractApiResponse<'getStatisticsByGroup'>
|
|
data: ExtractApiResponse<'getStatisticsByGroup'>
|
|
params: ExtractApiParams<'getStatisticsByGroup'> & { expand: boolean }
|
|
params: ExtractApiParams<'getStatisticsByGroup'> & { expand: boolean }
|
|
|
|
+ filterColumns?: any
|
|
|
|
+ result?: any
|
|
}>()
|
|
}>()
|
|
const rowClassName = (obj: any) => {
|
|
const rowClassName = (obj: any) => {
|
|
if (obj.row.markingGroupNumber === 0) {
|
|
if (obj.row.markingGroupNumber === 0) {
|
|
@@ -103,63 +105,93 @@ const setReplyUserId = inject<(id: number) => void>('setReplyUserId')
|
|
|
|
|
|
const { push } = useRouter()
|
|
const { push } = useRouter()
|
|
|
|
|
|
-const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatisticsByGroup'>>>[] = [
|
|
|
|
- {
|
|
|
|
- label: '小组',
|
|
|
|
- prop: 'markingGroupNumber',
|
|
|
|
- width: 60,
|
|
|
|
- fixed: 'left',
|
|
|
|
- formatter(row: any) {
|
|
|
|
- return row.markingGroupNumber === 0 ? '全部' : `第${row.markingGroupNumber}组`
|
|
|
|
|
|
+const columns = computed(() => {
|
|
|
|
+ return [
|
|
|
|
+ {
|
|
|
|
+ label: '小组',
|
|
|
|
+ prop: 'markingGroupNumber',
|
|
|
|
+ width: 60,
|
|
|
|
+ fixed: 'left',
|
|
|
|
+ formatter(row: any) {
|
|
|
|
+ return row.markingGroupNumber === 0 ? '全部' : `第${row.markingGroupNumber}组`
|
|
|
|
+ },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- { label: '评卷员', prop: 'markerName', minWidth: 84, slotName: 'marker', fixed: 'left' },
|
|
|
|
|
|
+ { label: '评卷员', prop: 'markerName', minWidth: 84, slotName: 'marker', fixed: 'left' },
|
|
|
|
|
|
- { align: 'center', label: '评卷份数', prop: 'markingPaperCount', minWidth: 92 },
|
|
|
|
- { align: 'center', label: '平均分', prop: 'avg', minWidth: 80 },
|
|
|
|
- { align: 'center', label: '相关系数', prop: 'xyRelate', minWidth: 90 },
|
|
|
|
- { align: 'center', label: '标准差', prop: 'std', minWidth: 80 },
|
|
|
|
- { align: 'center', label: '综合系数', prop: 'integration', minWidth: 90 },
|
|
|
|
|
|
+ { align: 'center', label: '评卷份数', prop: 'markingPaperCount', minWidth: 92 },
|
|
|
|
+ { align: 'center', label: '平均分', prop: 'avg', minWidth: 80 },
|
|
|
|
+ {
|
|
|
|
+ align: 'center',
|
|
|
|
+ label: '相关系数',
|
|
|
|
+ prop: 'xyRelate',
|
|
|
|
+ minWidth: 90,
|
|
|
|
+ formatter(row: any) {
|
|
|
|
+ let r = props.result || []
|
|
|
|
+ const { markingGroupNumber } = row
|
|
|
|
+ let compareTarget = r.find((item: any) => item.markingGroupNumber == markingGroupNumber)
|
|
|
|
+ if (compareTarget && markingGroupNumber) {
|
|
|
|
+ return row.xyRelate < compareTarget.xyRelate ? <span style="color:red">{row.xyRelate}</span> : row.xyRelate
|
|
|
|
+ } else {
|
|
|
|
+ return row.xyRelate
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ { align: 'center', label: '标准差', prop: 'std', minWidth: 80 },
|
|
|
|
+ { align: 'center', label: '综合系数', prop: 'integration', minWidth: 90 },
|
|
|
|
|
|
- // { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 92 },
|
|
|
|
- { align: 'center', label: '当日可阅', prop: 'markDayCount', minWidth: 92 },
|
|
|
|
- { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', minWidth: 92 },
|
|
|
|
- { align: 'center', label: '客观题0分量', prop: 'objectiveZero', minWidth: 120 },
|
|
|
|
- { align: 'center', label: '客观平均分', prop: 'objectiveAvg', minWidth: 110 },
|
|
|
|
- { align: 'center', label: '客观标准差', prop: 'objectiveStd', minWidth: 104 },
|
|
|
|
- {
|
|
|
|
- align: 'center',
|
|
|
|
- label: '重评/待确认',
|
|
|
|
- prop: 'reMarkUnConfirmCount',
|
|
|
|
- minWidth: 120,
|
|
|
|
- formatter(row: any) {
|
|
|
|
- return `${row.reMarkCount}/${row.reMarkUnConfirmCount}`
|
|
|
|
|
|
+ // { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 92 },
|
|
|
|
+ { align: 'center', label: '当日可阅', prop: 'markDayCount', minWidth: 92 },
|
|
|
|
+ { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', minWidth: 92 },
|
|
|
|
+ { align: 'center', label: '客观题0分量', prop: 'objectiveZero', minWidth: 120 },
|
|
|
|
+ { align: 'center', label: '客观平均分', prop: 'objectiveAvg', minWidth: 110 },
|
|
|
|
+ { align: 'center', label: '客观标准差', prop: 'objectiveStd', minWidth: 104 },
|
|
|
|
+ {
|
|
|
|
+ align: 'center',
|
|
|
|
+ label: '重评/待确认',
|
|
|
|
+ prop: 'reMarkUnConfirmCount',
|
|
|
|
+ minWidth: 120,
|
|
|
|
+ formatter(row: any) {
|
|
|
|
+ return `${row.reMarkCount}/${row.reMarkUnConfirmCount}`
|
|
|
|
+ },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- { align: 'center', label: '抽查量', prop: 'checkCount', minWidth: 90 },
|
|
|
|
- { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', minWidth: 110 },
|
|
|
|
- // { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
|
|
|
|
- // { align: 'center', label: '平均分', prop: 'avg', width: 80 },
|
|
|
|
- // { align: 'center', label: '标准差', prop: 'std', width: 80 },
|
|
|
|
- { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', minWidth: 124 },
|
|
|
|
- { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', minWidth: 124 },
|
|
|
|
- { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', minWidth: 124 },
|
|
|
|
- { align: 'center', label: '平均客主比', prop: 'objSubAvgRate', minWidth: 110 },
|
|
|
|
- {
|
|
|
|
- align: 'center',
|
|
|
|
- label: '在线',
|
|
|
|
- prop: 'online',
|
|
|
|
- minWidth: 72,
|
|
|
|
- formatter(row: any) {
|
|
|
|
- return row.online ? '在线' : '离线'
|
|
|
|
|
|
+ { align: 'center', label: '抽查量', prop: 'checkCount', minWidth: 90 },
|
|
|
|
+ { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', minWidth: 110 },
|
|
|
|
+ // { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
|
|
|
|
+ // { align: 'center', label: '平均分', prop: 'avg', width: 80 },
|
|
|
|
+ // { align: 'center', label: '标准差', prop: 'std', width: 80 },
|
|
|
|
+ { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', minWidth: 124 },
|
|
|
|
+ { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', minWidth: 124 },
|
|
|
|
+ { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', minWidth: 124 },
|
|
|
|
+ { align: 'center', label: '平均客主比', prop: 'objSubAvgRate', minWidth: 110 },
|
|
|
|
+ {
|
|
|
|
+ align: 'center',
|
|
|
|
+ label: '在线',
|
|
|
|
+ prop: 'online',
|
|
|
|
+ minWidth: 72,
|
|
|
|
+ formatter(row: any) {
|
|
|
|
+ if (row.markingGroupNumber === 0) {
|
|
|
|
+ let total = (props.result || [])
|
|
|
|
+ .filter((item: any) => item.markingGroupNumber !== 0)
|
|
|
|
+ .reduce((num: number, item: any) => {
|
|
|
|
+ return num + (item.online ? 1 : 0)
|
|
|
|
+ }, 0)
|
|
|
|
+ return total + '人'
|
|
|
|
+ } else {
|
|
|
|
+ return row.online ? '在线' : '离线'
|
|
|
|
+ }
|
|
|
|
+ },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- { align: 'center', label: '状态', prop: 'markingStatus', minWidth: 100 },
|
|
|
|
- { align: 'center', label: '速度', prop: 'markingRate', minWidth: 66 },
|
|
|
|
- // { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
|
|
|
|
-].map((col: any) => {
|
|
|
|
- if (!['小组', '重评/待确认'].includes(col.label)) col.sortable = 'custom'
|
|
|
|
- return col
|
|
|
|
|
|
+ { align: 'center', label: '状态', prop: 'markingStatus', minWidth: 100 },
|
|
|
|
+ { align: 'center', label: '速度', prop: 'markingRate', minWidth: 66 },
|
|
|
|
+ // { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
|
|
|
|
+ ]
|
|
|
|
+ .map((col: any) => {
|
|
|
|
+ if (!['小组', '重评/待确认'].includes(col.label)) col.sortable = 'custom'
|
|
|
|
+ return col
|
|
|
|
+ })
|
|
|
|
+ .filter((col: any) => {
|
|
|
|
+ return props.filterColumns ? props.filterColumns.indexOf(col.prop) > -1 : col
|
|
|
|
+ })
|
|
})
|
|
})
|
|
const visable = ref(false)
|
|
const visable = ref(false)
|
|
const rowContextmenu = (row: any, column: any, event: any) => {
|
|
const rowContextmenu = (row: any, column: any, event: any) => {
|