This commit is contained in:
2026-01-29 11:29:38 +08:00
8 changed files with 82 additions and 66 deletions

View File

@@ -14,6 +14,8 @@ export enum TASK_PROCESS_STATUS {
CLOSED = '6',
/** 已延期 */
POSTPONED = '7',
/** 已闭环 */
CLOSED_LOOP = '8',
}
export enum TASK_APPROVE_STATUS_ENUM {
@@ -43,6 +45,7 @@ export const TASK_PROCESS_STATUS_OBJ: any = {
[TASK_PROCESS_STATUS.PAUSED]: '已暂停',
[TASK_PROCESS_STATUS.CLOSED]: '已关闭',
[TASK_PROCESS_STATUS.POSTPONED]: '已延期',
[TASK_PROCESS_STATUS.CLOSED_LOOP]: '已闭环',
};
export const TASK_PROCESS_STATUS_OPTIONS = (

View File

@@ -45,14 +45,20 @@ import {
} from '@/api/system/systemData';
const statusColorList = [
'rgb(200, 201, 204)',
getThemeColor('--el-color-primary'),
getThemeColor('--el-color-danger'),
getThemeColor('--el-color-success'),
getThemeColor('--el-color-warning'),
getThemeColor('--el-color-info'),
'rgb(200, 201, 204)', // 未开始
getThemeColor('--el-color-primary'), // 进行中
getThemeColor('--el-color-danger'), // 已驳回
getThemeColor('--el-color-success'), // 已完成
getThemeColor('--el-color-warning'), // 已暂停
getThemeColor('--el-color-info'), // 已关闭
'rgb(248, 152, 152)', // 已延期
'rgb(179, 225, 157)', // 已闭环
];
const performanceColorList = [
'rgb(200, 201, 204)',
getThemeColor('--el-color-success'),
getThemeColor('--el-color-primary'),
];
const performanceColorList = ['rgb(200, 201, 204)', getThemeColor('--el-color-success')];
// 难度系数颜色列表
const difficultyCountColorList = [
'#67c23a',

View File

@@ -13,9 +13,10 @@
<script lang="ts" setup>
import { ref } from 'vue';
import commonFilterChart from '@/components/common/echartCard/commonFilterChart.vue';
import { TASK_PROCESS_STATUS_OBJ } from '@/utils/enum/task';
import { getAllUserTaskCompleteStatisticsApi } from '@/api/project/node';
import { useDict } from '@/utils/useDict';
const { TASK_ACHIEVE_STATUS } = useDict('TASK_ACHIEVE_STATUS');
const props = defineProps({
statusColorList: {
type: Array,
@@ -28,15 +29,18 @@ const getProjectGroupTaskCompleteStatistics = async (formData: any) => {
const xData: any = [];
let legendData: any = [];
let seriesData: any = [];
let colors: any = [];
const res: any = await getAllUserTaskCompleteStatisticsApi({
tag1List: formData.tag1 ? formData.tag1.split(',') : [],
});
if (res.code === 200) {
legendData =
res.data?.allExeStatus?.map((item: any) => {
return TASK_PROCESS_STATUS_OBJ[item];
return TASK_ACHIEVE_STATUS.value.O[item];
}) || [];
colors = res.data?.allExeStatus.map((item: any) => {
return props.statusColorList[Number(item) - 1];
});
seriesData = legendData?.map((item: any) => {
return {
name: item,
@@ -62,8 +66,8 @@ const getProjectGroupTaskCompleteStatistics = async (formData: any) => {
const seriesItem = seriesData.find((item: any) => item.name === statusName);
if (seriesItem) {
// 获取状态对应的 key
const statusKey = Object.keys(TASK_PROCESS_STATUS_OBJ).find(
(key) => TASK_PROCESS_STATUS_OBJ[key] === statusName
const statusKey = Object.keys(TASK_ACHIEVE_STATUS.value.O).find(
(key) => TASK_ACHIEVE_STATUS.value.O[key] === statusName
);
if (statusKey) {
// 如果 statusCount 中有这个状态,使用其值,否则使用 0
@@ -78,13 +82,15 @@ const getProjectGroupTaskCompleteStatistics = async (formData: any) => {
xData,
seriesData,
legendData,
colors,
};
};
const initProjectTaskCompleteChart = async (formData: any) => {
const { xData, seriesData, legendData } = await getProjectGroupTaskCompleteStatistics(formData);
const { xData, seriesData, legendData, colors } =
await getProjectGroupTaskCompleteStatistics(formData);
chartOption.value = {
color: props.statusColorList,
color: colors,
legend: {
data: legendData,
},

View File

@@ -16,12 +16,13 @@
<script lang="ts" setup>
import { ref } from 'vue';
import commonFilterChart from '@/components/common/echartCard/commonFilterChart.vue';
import { TASK_PROCESS_STATUS_OBJ } from '@/utils/enum/task';
import {
getCommonCompleteStatisticsApi,
getTaskCompleteStatisticsByDisciplineApi,
} from '@/api/project/node';
import { useDict } from '@/utils/useDict';
const { TASK_ACHIEVE_STATUS } = useDict('TASK_ACHIEVE_STATUS');
const props = defineProps({
// x轴 机台、学科discipline
resultTagType: {
@@ -65,15 +66,17 @@ const initTaskCompleteChart = async (formData: any) => {
titles =
res.data?.allExeStatus?.map((item: any) => {
return TASK_PROCESS_STATUS_OBJ[item];
return TASK_ACHIEVE_STATUS.value.O[item] || item;
}) || [];
const colors = res.data?.allExeStatus.map((item: any) => {
return props.statusColorList[Number(item) - 1];
});
const names = res.data?.allExeStatus || [];
for (let i = 0; i < names.length; i++) {
const str = names[i];
const obj: any = {
name: TASK_PROCESS_STATUS_OBJ[str],
name: TASK_ACHIEVE_STATUS.value.O[str] || str,
type: 'bar',
emphasis: {
focus: 'series',
@@ -88,7 +91,7 @@ const initTaskCompleteChart = async (formData: any) => {
seriesData.push(obj);
}
chartOption.value = {
color: props.statusColorList,
color: colors,
legend: {
data: titles,
},

View File

@@ -12,9 +12,10 @@
<script lang="ts" setup>
import { ref } from 'vue';
import commonFilterChart from '@/components/common/echartCard/commonFilterChart.vue';
import { TASK_PROCESS_STATUS_OBJ } from '@/utils/enum/task';
import { getUserGroupTaskCompleteStatisticsApi } from '@/api/project/node';
import { useDict } from '@/utils/useDict';
const { TASK_ACHIEVE_STATUS } = useDict('TASK_ACHIEVE_STATUS');
const props = defineProps({
statusColorList: {
type: Array,
@@ -25,14 +26,18 @@ const getUserGroupTaskCompleteStatistics = async (formData: any) => {
const xData: any = [];
let legendData: any = [];
let seriesData: any = [];
let colors: any = [];
const res: any = await getUserGroupTaskCompleteStatisticsApi({
...formData,
});
if (res.code === 200) {
legendData =
res.data?.allExeStatus?.map((item: any) => {
return TASK_PROCESS_STATUS_OBJ[item];
return TASK_ACHIEVE_STATUS.value.O[item];
}) || [];
colors = res.data?.allExeStatus.map((item: any) => {
return props.statusColorList[Number(item) - 1];
});
seriesData = legendData?.map((item: any) => {
return {
name: item,
@@ -58,8 +63,8 @@ const getUserGroupTaskCompleteStatistics = async (formData: any) => {
const seriesItem = seriesData.find((item: any) => item.name === statusName);
if (seriesItem) {
// 获取状态对应的 key
const statusKey = Object.keys(TASK_PROCESS_STATUS_OBJ).find(
(key) => TASK_PROCESS_STATUS_OBJ[key] === statusName
const statusKey = Object.keys(TASK_ACHIEVE_STATUS.value.O).find(
(key) => TASK_ACHIEVE_STATUS.value.O[key] === statusName
);
if (statusKey) {
// 如果 statusCount 中有这个状态,使用其值,否则使用 0
@@ -74,14 +79,16 @@ const getUserGroupTaskCompleteStatistics = async (formData: any) => {
xData,
seriesData,
legendData,
colors,
};
};
// 初始化用户组项目统计
const chartOption = ref();
const initUserTaskCompleteChart = async (formData: any) => {
const { xData, seriesData, legendData } = await getUserGroupTaskCompleteStatistics(formData);
const { xData, seriesData, legendData, colors } =
await getUserGroupTaskCompleteStatistics(formData);
chartOption.value = {
color: props.statusColorList,
color: colors,
legend: {
data: legendData,
},

View File

@@ -89,24 +89,24 @@ import {
} from '@/api/project/node';
import { getTaskAchieveStatisticsApi } from '@/api/project/task';
import { getThemeColor } from '@/utils/theme';
import {
TASK_PROCESS_STATUS_OBJ,
TASK_PROCESS_STATUS,
TASK_CALCULATE_STATUS_OBJ,
} from '@/utils/enum/task';
import { TASK_CALCULATE_STATUS_OBJ } from '@/utils/enum/task';
import emitter from '@/utils/eventBus';
// import { useDict } from '@/utils/useDict';
import { useDict } from '@/utils/useDict';
// const { DISCIPLINE_TYPE } = useDict('DISCIPLINE_TYPE');
const { TASK_ACHIEVE_STATUS } = useDict('TASK_ACHIEVE_STATUS');
// 进度状态颜色列表
const statusColorList = [
'rgb(200, 201, 204)',
getThemeColor('--el-color-primary'),
getThemeColor('--el-color-danger'),
getThemeColor('--el-color-success'),
getThemeColor('--el-color-warning'),
getThemeColor('--el-color-info'),
'rgb(200, 201, 204)', // 未开始
getThemeColor('--el-color-primary'), // 进行中
getThemeColor('--el-color-danger'), // 已驳回
getThemeColor('--el-color-success'), // 已完成
getThemeColor('--el-color-warning'), // 已暂停
getThemeColor('--el-color-info'), // 已关闭
'rgb(248, 152, 152)', // 已延期
'rgb(179, 225, 157)', // 已闭环
];
const achievementColorList = [
getThemeColor('--el-color-info'), // 未分析
getThemeColor('--el-color-success'), // 合格
@@ -180,11 +180,13 @@ const getCommonOptionFun = async () => {
let xData: any = [];
const seriesData: any = [];
let legendData: any = [];
let colors: any = [];
if (currentProjectId.value === '') {
return {
xData,
seriesData,
legendData,
colors,
};
} else {
// dzhtodo 感觉这里的学科入参有问题
@@ -201,36 +203,22 @@ const getCommonOptionFun = async () => {
});
legendData = res.data.allExeStatus.map((item: any) => {
return TASK_PROCESS_STATUS_OBJ[item];
return TASK_ACHIEVE_STATUS.value.O[item];
});
colors = res.data?.allExeStatus.map((item: any) => {
return statusColorList[Number(item) - 1];
});
const names = res.data.allExeStatus;
for (let i = 0; i < names.length; i++) {
const str = names[i];
const obj: any = {
name: TASK_PROCESS_STATUS_OBJ[str],
name: TASK_ACHIEVE_STATUS.value.O[str],
type: 'bar',
stack: 'total', // 堆叠效果
emphasis: {
focus: 'series',
},
label: {
show: false, // 暂不展示,效果很一般
position:
TASK_PROCESS_STATUS_OBJ[str] ===
TASK_PROCESS_STATUS_OBJ[TASK_PROCESS_STATUS.COMPLETED]
? 'right'
: '',
formatter: (params: any) => {
return params.value
? TASK_PROCESS_STATUS_OBJ[str] ===
TASK_PROCESS_STATUS_OBJ[TASK_PROCESS_STATUS.COMPLETED]
? `———${params.value}`
: params.value
: '';
},
},
data: [],
};
@@ -245,16 +233,17 @@ const getCommonOptionFun = async () => {
xData,
seriesData,
legendData,
colors,
};
}
};
const queryProjectTaskProgress = async () => {
const { xData, seriesData, legendData } = await getCommonOptionFun();
const { xData, seriesData, legendData, colors } = await getCommonOptionFun();
if (!ProjectTaskProgressChartRef.value || !ProjectTaskProgressChartRef.value.commonChartRef)
return;
ProjectTaskProgressChartRef.value.commonChartRef.disposeEchartsByKey('chart-progress');
ProjectTaskProgressChartRef.value.commonChartRef.option = {
color: statusColorList,
color: colors,
title: {
show: false,
},

View File

@@ -130,14 +130,16 @@ watchEffect(() => {
// 进度状态颜色列表:已驳回、未开始、进行中、已完成、已暂停、已关闭、已延期
const statusColorList = [
getThemeColor('--el-color-danger'),
'rgb(200, 201, 204)',
getThemeColor('--el-color-primary'),
getThemeColor('--el-color-success'),
getThemeColor('--el-color-warning'),
'rgb(222, 223, 224)',
'rgb(250, 182, 182)',
'rgb(200, 201, 204)', // 未开始
getThemeColor('--el-color-primary'), // 进行中
getThemeColor('--el-color-danger'), // 已驳回
getThemeColor('--el-color-success'), // 已完成
getThemeColor('--el-color-warning'), // 已暂停
getThemeColor('--el-color-info'), // 已关闭
'rgb(248, 152, 152)', // 已延期
'rgb(179, 225, 157)', // 已闭环
];
// 完成情况颜色列表:未分析、不合格、合格
const completionStatusColorList = [
getThemeColor('--el-color-info'),

View File

@@ -144,7 +144,7 @@ dayjs.extend(isoWeek);
const Gantt: any = gantt;
const ganttEvents = ref<any>([]);
const colorList: string[] = ['#ffffff', '#d9ecff', '#c6e2ff', '#c6e2ff', '#79bbff', '#409eff']; // 格子颜色
const colorList: string[] = ['#ffffff', '#d9ecff', '#c6e2ff', '#a1cefc', '#79bbff', '#409eff']; // 格子颜色
const taskOriginData = ref<any>([]); // 所有用户的任务数据
const loading = ref<boolean>(false);
const visible = ref(false);