From c6bd69da31f48a6d606fe299659e2855c82dc5e6 Mon Sep 17 00:00:00 2001 From: dongzhihuan Date: Mon, 13 Apr 2026 14:36:45 +0800 Subject: [PATCH 1/3] =?UTF-8?q?update=20=E4=BB=BF=E7=9C=9F=E6=B1=87?= =?UTF-8?q?=E6=80=BB=E7=9C=8B=E6=9D=BF=E6=8E=A5=E5=8F=A3=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/echartCard/commonFilterChart.vue | 10 +- .../dashboard/components/summaryNewBoard.vue | 149 +++++++----------- 2 files changed, 66 insertions(+), 93 deletions(-) diff --git a/src/components/common/echartCard/commonFilterChart.vue b/src/components/common/echartCard/commonFilterChart.vue index 1ffbbe91..9dfcdf2a 100644 --- a/src/components/common/echartCard/commonFilterChart.vue +++ b/src/components/common/echartCard/commonFilterChart.vue @@ -199,11 +199,11 @@ watch( (newVal) => { if (newVal && Object.keys(newVal).length > 0) { const { tag1, workspace, discipline, createTimeArr, finishTimeArr } = newVal; - if (tag1 !== undefined) formData.value.tag1 = tag1; - if (workspace !== undefined) formData.value.workspace = workspace; - if (discipline !== undefined) formData.value.discipline = discipline; - if (createTimeArr !== undefined) formData.value.createTimeArr = createTimeArr; - if (finishTimeArr !== undefined) formData.value.finishTimeArr = finishTimeArr; + formData.value.tag1 = tag1; + formData.value.workspace = workspace; + formData.value.discipline = discipline; + formData.value.createTimeArr = createTimeArr; + formData.value.finishTimeArr = finishTimeArr; } }, { deep: true } diff --git a/src/views/task/dashboard/components/summaryNewBoard.vue b/src/views/task/dashboard/components/summaryNewBoard.vue index 2e383914..4e4a3a95 100644 --- a/src/views/task/dashboard/components/summaryNewBoard.vue +++ b/src/views/task/dashboard/components/summaryNewBoard.vue @@ -127,23 +127,16 @@ const achieveFilterData = ref({ const handleProgressFilterUpdate = async (data: any) => { progressFilterData.value = data; - await progressBarChartUpdate(data); - await progressPieChartUpdate(data); + await updateProgressCharts(data); }; const handleAchieveFilterUpdate = async (data: any) => { achieveFilterData.value = data; - await achieveBarChartUpdate(data); - await achievePieChartUpdate(data); + await updateAchieveCharts(data); }; -// 【1】进度统计柱状图 -const progressBarChartNodata = ref(false); -const progressBarOption = ref(); -const getCommonOptionFun = async (data: any) => { - let xData: any = []; - let seriesData: any = []; - let legendData: any = []; +// 统一更新进度统计图表(只调用一次接口) +const updateProgressCharts = async (data: any) => { const res: any = await getTaskCompleteStatisticsByDisciplineApi({ tag1: data.tag1, tag5: data.workspace, @@ -151,16 +144,17 @@ const getCommonOptionFun = async (data: any) => { createTimeArr: data.createTimeArr, finishTimeArr: data.finishTimeArr, }); + if (res && res.code === 200) { - progressBarChartNodata.value = res.data.allExeStatus.length === 0; - xData = res.data.result.map((item: any) => { + // 更新柱状图 + const xData = res.data.result.map((item: any) => { return item.name; }); - legendData = Object.keys(TASK_ACHIEVE_STATUS.value.O).map((item: any) => { + const legendData = Object.keys(TASK_ACHIEVE_STATUS.value.O).map((item: any) => { return TASK_ACHIEVE_STATUS.value.O[item]; }); const names = Object.keys(TASK_ACHIEVE_STATUS.value.O); - seriesData = names.map((str) => ({ + const seriesData = names.map((str) => ({ name: TASK_ACHIEVE_STATUS.value.O[str], type: 'bar', emphasis: { @@ -168,81 +162,54 @@ const getCommonOptionFun = async (data: any) => { }, data: res.data.result.map((item: any) => item?.statusCount[str] || 0), })); - } - return { xData, seriesData, legendData }; -}; -const progressBarChartUpdate = async (data: any) => { - const { xData, seriesData, legendData } = await getCommonOptionFun(data); - const option = { - color: statusColorList, - legend: { data: legendData }, - grid: { bottom: '50' }, - xAxis: { type: 'category', data: xData || [] }, - yAxis: { type: 'value', minInterval: 1 }, - dataZoom: xData.length > 4, - series: seriesData || [], - }; - progressBarOption.value = option; -}; -// 【2】进度统计饼图 -const progressPieChartNodata = ref(false); -const progressPieOption = ref(); -const progressPieChartUpdate = async (data: any) => { - const seriesData: { name: any; value: any }[] = []; - const res: any = await getTaskCompleteStatisticsByDisciplineApi({ - tag1: data.tag1, - tag5: data.workspace, - discipline: data.discipline, - createTimeArr: data.createTimeArr, - finishTimeArr: data.finishTimeArr, - }); - if (res.code === 200) { - progressPieChartNodata.value = res.data.allExeStatus.length === 0; - // 把res.data.allAchieveStatus数组转换为对象的key,value默认是0 + const barOption = { + color: statusColorList, + legend: { data: legendData }, + grid: { bottom: '50' }, + xAxis: { type: 'category', data: xData || [] }, + yAxis: { type: 'value', minInterval: 1 }, + dataZoom: xData.length > 4, + series: seriesData || [], + }; + progressBarOption.value = barOption; + progressBarChartNodata.value = res.data.allExeStatus.length === 0; + + // 更新饼图 + const pieSeriesData: { name: any; value: any }[] = []; const achieveStatusObj: any = {}; Object.keys(TASK_ACHIEVE_STATUS.value.O).forEach((item: any) => { achieveStatusObj[item] = 0; }); - // 遍历res.data.result数组,把每个对象的statusCount属性合并到achieveStatusObj中 res.data.result?.forEach((item: any) => { for (const key in item.statusCount) { achieveStatusObj[key] += item.statusCount[key]; } }); - // 遍历achieveStatusObj,把每个对象的key转换为中文 for (const key in achieveStatusObj) { - seriesData.push({ + pieSeriesData.push({ name: TASK_ACHIEVE_STATUS.value.O[key], value: achieveStatusObj[key], }); } - const option = getPieOptions(statusColorList, seriesData); - progressPieOption.value = option; + const pieOption = getPieOptions(statusColorList, pieSeriesData); + progressPieOption.value = pieOption; + progressPieChartNodata.value = res.data.allExeStatus.length === 0; } }; -// 完成情况颜色列表:未分析、不合格、合格 -const completionStatusColorList = [ - 'rgb(200, 201, 204)', - getThemeColor('--el-color-danger'), - getThemeColor('--el-color-success'), -]; -// 【3】任务达成统计柱状图 -const achieveBarOption = ref(); -const taskCalculateStatusLegendData = TASK_CALCULATE_STATUS_OPTIONS.map((item) => ({ - name: item.label, -})); -const achieveBarChartUpdate = async (data: any) => { +// 统一更新达成统计图表(只调用一次接口) +const updateAchieveCharts = async (data: any) => { const res: any = await getTaskAchieveStatisticsByDisciplineApi({ - // resultTagType: 'tag6', tag1: data.tag1, tag5: data.workspace, discipline: data.discipline, createTimeArr: data.createTimeArr, finishTimeArr: data.finishTimeArr, }); + if (res && res.code === 200) { + // 更新柱状图 const xData = res.data.result.map((item: any) => { return item.name; }); @@ -254,7 +221,7 @@ const achieveBarChartUpdate = async (data: any) => { }, data: res.data.result.map((resultItem: any) => resultItem?.statusCount[item.value] || 0), })); - const option = { + const barOption = { color: completionStatusColorList, legend: { data: taskCalculateStatusLegendData }, grid: { bottom: xData.length > 4 ? '50' : '10' }, @@ -263,46 +230,52 @@ const achieveBarChartUpdate = async (data: any) => { dataZoom: xData.length > 4, series: seriesData, }; - achieveBarOption.value = { ...option }; - } -}; -// 【4】任务达成统计饼图 -const achievePieChartNodata = ref(false); -const achievePieOption = ref(); -const achievePieChartUpdate = async (data: any) => { - const seriesData: { name: any; value: any }[] = []; - const res: any = await getTaskAchieveStatisticsByDisciplineApi({ - // resultTagType: 'tag6', - tag1: data.tag1, - tag5: data.workspace, - discipline: data.discipline, - createTimeArr: data.createTimeArr, - finishTimeArr: data.finishTimeArr, - }); - if (res.code === 200) { - achievePieChartNodata.value = res.data.allExeStatus.length === 0; + achieveBarOption.value = { ...barOption }; + + // 更新饼图 + const pieSeriesData: { name: any; value: any }[] = []; const achieveStatusObj: any = {}; Object.keys(RESULT_ACHIEVE_STATUS.value.O).forEach((item: any) => { achieveStatusObj[item] = 0; }); - // 遍历res.data.result数组,把每个对象的statusCount属性合并到achieveStatusObj中 res.data.result?.forEach((item: any) => { for (const key in item.statusCount) { achieveStatusObj[key] += item.statusCount[key]; } }); - // 遍历achieveStatusObj,把每个对象的key转换为中文 for (const key in achieveStatusObj) { - seriesData.push({ + pieSeriesData.push({ name: RESULT_ACHIEVE_STATUS.value.O[key], value: achieveStatusObj[key], }); } - const option = getPieOptions(completionStatusColorList, seriesData); - achievePieOption.value = option; + const pieOption = getPieOptions(completionStatusColorList, pieSeriesData); + achievePieOption.value = pieOption; + achievePieChartNodata.value = res.data.allExeStatus.length === 0; } }; +// 进度统计图表状态 +const progressBarChartNodata = ref(false); +const progressBarOption = ref(); +const progressPieChartNodata = ref(false); +const progressPieOption = ref(); + +// 完成情况颜色列表:未分析、不合格、合格 +const completionStatusColorList = [ + 'rgb(200, 201, 204)', + getThemeColor('--el-color-danger'), + getThemeColor('--el-color-success'), +]; + +// 达成统计图表状态 +const achieveBarOption = ref(); +const taskCalculateStatusLegendData = TASK_CALCULATE_STATUS_OPTIONS.map((item) => ({ + name: item.label, +})); +const achievePieChartNodata = ref(false); +const achievePieOption = ref(); + // 饼图配置 statusColorList 颜色列表 seriesData 数据 [{ name: '分类1', value: 10 },{ name: '分类2', value: 20 }] const getPieOptions = (statusColorList: any, seriesData: any) => { const option = { From 44e1cf05aa0d2885776a486f4bd5b03f85cbd377 Mon Sep 17 00:00:00 2001 From: JiangSheng Date: Mon, 13 Apr 2026 14:57:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E4=BB=BF=E7=9C=9F=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=20lyric=20=E9=9A=90=E8=97=8F=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/treeCaseTable/loadCaseTable.vue | 7 ++++++- .../condition/components/taskPool.vue | 14 +++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/components/common/treeCaseTable/loadCaseTable.vue b/src/components/common/treeCaseTable/loadCaseTable.vue index d885faab..64f81820 100644 --- a/src/components/common/treeCaseTable/loadCaseTable.vue +++ b/src/components/common/treeCaseTable/loadCaseTable.vue @@ -124,6 +124,7 @@ interface Props { checkMethod?: any; // 处理勾选逻辑 showAddCategoryButton?: boolean; // 是否显示添加分类按钮 allowRootAddTask?: boolean; // 是否允许在根节点添加任务 + hideEditFn?: (row: any) => boolean; // 外部控制编辑按钮隐藏逻辑 } const props = withDefaults(defineProps(), { @@ -156,6 +157,7 @@ const props = withDefaults(defineProps(), { checkMethod: null, showAddCategoryButton: true, allowRootAddTask: false, + hideEditFn: undefined, }); if (props?.checkMethod) { @@ -410,7 +412,10 @@ const actionList = computed(() => { click: (row: any) => { editRowFun(row); }, - hide: () => { + hide: (row: any) => { + if (props.hideEditFn && props.hideEditFn(row)) { + return true; + } return props.readonly; }, }, diff --git a/src/views/competenceCenter/condition/components/taskPool.vue b/src/views/competenceCenter/condition/components/taskPool.vue index ab38d715..ffd4fac2 100644 --- a/src/views/competenceCenter/condition/components/taskPool.vue +++ b/src/views/competenceCenter/condition/components/taskPool.vue @@ -70,9 +70,14 @@ :loading="loading" :editMode="!enableConfigByTenant([TENANT_ENUM.LYRIC])" :enableSelectCode="enableSelectCode" + :hideEditFn="hideEditForLyricFun" >