From ccc970e575ef3f3e5c67af8da210263f4ac549f9 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期五, 10 四月 2026 16:44:55 +0800
Subject: [PATCH] 2026.4.10
---
src/views/inspection/task/components/CompMonitorPlan.vue | 194 ++++++++++++++++++------------------------------
1 files changed, 74 insertions(+), 120 deletions(-)
diff --git a/src/views/inspection/task/components/CompMonitorPlan.vue b/src/views/inspection/task/components/CompMonitorPlan.vue
index c2f5ea2..515d16c 100644
--- a/src/views/inspection/task/components/CompMonitorPlan.vue
+++ b/src/views/inspection/task/components/CompMonitorPlan.vue
@@ -1,19 +1,13 @@
<template>
- <el-calendar
- v-model="dateValue"
- :range="dateRange"
- @update:model-value="onDateChange"
- >
+ <el-calendar v-model="dateValue" :range="dateRange" @update:model-value="onDateChange">
<template #header="{ date }">
<div style="width: 100%">
<el-row justify="space-between">
<el-space>
<el-tag type="default"
- >宸℃煡閲忥細{{
- `${taskStatistic.complete}/${taskStatistic.total}`
- }}</el-tag
+ >宸℃煡閲忥細{{ `${taskStatistic.complete}/${taskStatistic.total}` }}</el-tag
>
- <el-tag type="default"
+ <!-- <el-tag type="default"
>褰撴棩鏁存敼鐜囷細{{
formatPercent(
taskStatistic.changedProblemNumOnTime /
@@ -28,18 +22,15 @@
taskStatistic.totalProblemNum
)
}}</el-tag
- >
+ > -->
<el-tag type="default"
- >缁煎悎鏁存敼鐜囷細{{
- formatPercent(
- taskStatistic.changedProblemNum /
- taskStatistic.totalProblemNum
- )
+ >鏁存敼鐜囷細{{
+ formatPercent(taskStatistic.changedProblemNum / taskStatistic.totalProblemNum)
}}</el-tag
>
<!-- <el-tag type="default">鏁存敼锛歿{ taskStatistic.changed }}</el-tag> -->
</el-space>
- <el-space>
+ <!-- <el-space>
<el-text>鑱氱劍鐢ㄦ埛锛�</el-text>
<el-select
v-model="selectedUsers"
@@ -56,24 +47,15 @@
:value="user.userName"
/>
</el-select>
- </el-space>
+ </el-space> -->
</el-row>
- <el-row class="m-t-4">
+ <!-- <el-row class="m-t-4">
<el-space wrap>
<el-tag
type="default"
v-for="user in taskStatistic.progressPerUser"
:key="user.userId"
>
- <!-- {{
- `${user.userName}锛氬贰鏌ラ噺 ${
- user.completeTaskNum
- }锛屽嵆鏃舵暣鏀圭巼 ${formatPercent(
- user.changedProblemNumOnTime / user.totalProblemNum
- )}锛屽钩鍧囪�楁椂 ${
- user.avgInspectionTime ? user.avgInspectionTime : '--'
- }`
- }} -->
{{
`${user.userName}锛�${
user.completeTaskNum
@@ -85,17 +67,14 @@
}}
</el-tag>
</el-space>
- </el-row>
+ </el-row> -->
</div>
</template>
<template #date-cell="{ data }">
<div :class="calendarDayClz(data.day)">
<div style="background-color: #f8f4f4">{{ getDay(data.day) }}</div>
<template v-if="computeDayTask(data.day)">
- <el-row
- v-if="computeDayTask(data.day).totalTaskNum > 0"
- justify="space-between"
- >
+ <el-row v-if="computeDayTask(data.day).totalTaskNum > 0" justify="space-between">
<el-space direction="vertical">
<el-text size="small" tag="b">宸℃煡閲�</el-text>
<el-text size="small"
@@ -108,7 +87,7 @@
<el-text size="small">{{
formatPercent(
computeDayTask(data.day).changedProblemNum /
- computeDayTask(data.day).totalProblemNum
+ computeDayTask(data.day).totalProblemNum,
)
}}</el-text>
</el-space>
@@ -123,9 +102,7 @@
<el-text
title="宸℃煡浜哄憳"
size="small"
- :type="
- selectedUsers.includes(item.userName) ? 'primary' : 'info'
- "
+ :type="selectedUsers.includes(item.userName) ? 'primary' : 'info'"
:tag="selectedUsers.includes(item.userName) ? 'b' : 'span'"
>{{ item.userName }}</el-text
>
@@ -136,9 +113,7 @@
title="宸℃煡閲�"
size="small"
style="text-align: center; flex: 1"
- :type="
- selectedUsers.includes(item.userName) ? 'primary' : 'info'
- "
+ :type="selectedUsers.includes(item.userName) ? 'primary' : 'info'"
:tag="selectedUsers.includes(item.userName) ? 'b' : 'span'"
>{{ item.completeTaskNum }}</el-text
>
@@ -146,27 +121,17 @@
title="褰撴棩鏁存敼鐜�"
size="small"
style="text-align: center; flex: 1"
- :type="
- selectedUsers.includes(item.userName) ? 'primary' : 'info'
- "
+ :type="selectedUsers.includes(item.userName) ? 'primary' : 'info'"
:tag="selectedUsers.includes(item.userName) ? 'b' : 'span'"
- >{{
- formatPercent(
- item.changedProblemNumOnTime / item.totalProblemNum
- )
- }}</el-text
+ >{{ formatPercent(item.changedProblemNumOnTime / item.totalProblemNum) }}</el-text
>
<el-text
title="骞冲潎鑰楁椂"
size="small"
style="text-align: center; flex: 1"
- :type="
- selectedUsers.includes(item.userName) ? 'primary' : 'info'
- "
+ :type="selectedUsers.includes(item.userName) ? 'primary' : 'info'"
:tag="selectedUsers.includes(item.userName) ? 'b' : 'span'"
- >{{
- timeUtil.formatSecondsToChinese(item.avgInspectionTime)
- }}</el-text
+ >{{ timeUtil.formatSecondsToChinese(item.avgInspectionTime) }}</el-text
>
<!-- </el-space> -->
</el-row>
@@ -177,52 +142,43 @@
</el-calendar>
</template>
<script setup>
-import { ref, computed, onMounted, watch } from 'vue';
-import taskApi from '@/api/fysp/taskApi';
-import dayjs from 'dayjs';
-import timeUtil from '@/utils/time-util';
+import { ref, computed, onMounted, watch } from 'vue'
+import taskApi from '@/api/fysp/taskApi'
+import dayjs from 'dayjs'
+import timeUtil from '@/utils/time-util'
const props = defineProps({
task: {
type: Object,
- default: () => {}
+ default: () => {},
},
dayTaskList: {
type: Array,
- default: () => []
- }
-});
-const emit = defineEmits(['dateChange']);
+ default: () => [],
+ },
+})
+const emit = defineEmits(['dateChange'])
// 閫変腑鏃ユ湡
-const selectedUsers = ref([]);
+const selectedUsers = ref([])
// const dateValue = ref(new Date());
-const dateValue = ref();
+const dateValue = ref()
// 鏃ュ巻鑼冨洿
-const startDay = computed(() => dayjs(props.task.starttime));
-const endDay = computed(() => dayjs(props.task.endtime));
-const dateRange = computed(() => [
- startDay.value.toDate(),
- endDay.value.toDate()
-]);
+const startDay = computed(() => dayjs(props.task.starttime))
+const endDay = computed(() => dayjs(props.task.endtime))
+const dateRange = computed(() => [startDay.value.toDate(), endDay.value.toDate()])
// 鏃ユ湡鏄惁鍦ㄤ换鍔¤寖鍥村唴
function isDayEnable(day) {
- const _day = dayjs(day);
- return (
- _day.isSameOrAfter(startDay.value, 'day') &&
- _day.isSameOrBefore(endDay.value, 'day')
- );
+ const _day = dayjs(day)
+ return _day.isSameOrAfter(startDay.value, 'day') && _day.isSameOrBefore(endDay.value, 'day')
}
/********************** 鏃ユ湡鏍峰紡 *********************************/
function calendarDayClz(day) {
- return (
- 'calendar-day ' +
- (isDayEnable(day) ? 'calendar-day-enable' : 'calendar-day-disable')
- );
+ return 'calendar-day ' + (isDayEnable(day) ? 'calendar-day-enable' : 'calendar-day-disable')
}
function getDay(day) {
- return day.split('-').splice(1, 2).join('-');
+ return day.split('-').splice(1, 2).join('-')
}
/********************** 浠诲姟鏁版嵁 *********************************/
@@ -231,11 +187,11 @@
() => props.dayTaskList,
(nV, oV) => {
if (nV && dateValue.value) {
- onDateChange(dateValue.value);
+ onDateChange(dateValue.value)
}
},
- { immediate: false }
-);
+ { immediate: false },
+)
// // 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
// const dayTaskLoading = ref(false);
@@ -255,26 +211,26 @@
// }
// 鏃ヤ换鍔℃暟鎹睍绀�
-const compMap = new Map();
+const compMap = new Map()
function computeDayTask(day) {
- const key = props.task.tguid + day;
+ const key = props.task.tguid + day
if (compMap.has(key)) {
- return compMap.get(key).value;
+ return compMap.get(key).value
}
const result = computed(() => {
return props.dayTaskList.find((v) => {
- return dayjs(v.date).isSame(dayjs(day));
- });
- });
- compMap.set(key, result);
- return result.value;
+ return dayjs(v.date).isSame(dayjs(day))
+ })
+ })
+ compMap.set(key, result)
+ return result.value
}
function onDateChange(e) {
if (isDayEnable(e)) {
- const day = dayjs(e).format('YYYY-MM-DD');
- const t = computeDayTask(day);
- emit('dateChange', t, day);
+ const day = dayjs(e).format('YYYY-MM-DD')
+ const t = computeDayTask(day)
+ emit('dateChange', t, day)
}
}
@@ -288,15 +244,15 @@
changedProblemNum: 0,
totalProblemNum: 0,
changedProblemNumOnTime: 0,
- efficientChangedProNum: 0
- };
- const userMap = new Map();
+ efficientChangedProNum: 0,
+ }
+ const userMap = new Map()
props.dayTaskList.forEach((e) => {
- res.total += e.totalTaskNum;
- res.complete += e.completeTaskNum;
- res.changed += e.changedTaskNum;
- res.changedProblemNum += e.changedProblemNum;
- res.totalProblemNum += e.totalProblemNum;
+ res.total += e.totalTaskNum
+ res.complete += e.completeTaskNum
+ res.changed += e.changedTaskNum
+ res.changedProblemNum += e.changedProblemNum
+ res.totalProblemNum += e.totalProblemNum
e.progressPerUser.forEach((user) => {
if (!userMap.has(user.userId)) {
userMap.set(user.userId, {
@@ -305,32 +261,30 @@
changedProblemNumOnTime: 0,
totalProblemNum: 0,
totalInspectionTime: 0,
- dayTaskNum: 0
- });
+ dayTaskNum: 0,
+ })
}
res.changedProblemNumOnTime += user.changedProblemNumOnTime
res.efficientChangedProNum += user.efficientChangedProNum
- const userItem = userMap.get(user.userId);
- userItem.completeTaskNum += user.completeTaskNum;
- userItem.changedProblemNumOnTime += user.changedProblemNumOnTime;
- userItem.totalProblemNum += user.totalProblemNum;
- userItem.totalInspectionTime += user.avgInspectionTime ?? 0;
- userItem.dayTaskNum++;
- });
- });
+ const userItem = userMap.get(user.userId)
+ userItem.completeTaskNum += user.completeTaskNum
+ userItem.changedProblemNumOnTime += user.changedProblemNumOnTime
+ userItem.totalProblemNum += user.totalProblemNum
+ userItem.totalInspectionTime += user.avgInspectionTime ?? 0
+ userItem.dayTaskNum++
+ })
+ })
res.progressPerUser = Array.from(userMap.values()).map((user) => ({
...user,
completeTaskNum: Math.round(user.completeTaskNum * 100) / 100,
- avgInspectionTime: timeUtil.formatSecondsToChinese(
- user.totalInspectionTime / user.dayTaskNum
- )
- }));
- return res;
-});
+ avgInspectionTime: timeUtil.formatSecondsToChinese(user.totalInspectionTime / user.dayTaskNum),
+ }))
+ return res
+})
const formatPercent = (num) => {
- return isNaN(num) ? '0%' : parseInt(num * 100) + '%';
-};
+ return isNaN(num) ? '0%' : parseInt(num * 100) + '%'
+}
/********************** 鍒濆鍖� *********************************/
// watch(
--
Gitblit v1.9.3