From f6adea337f846002d2e3851f51daf16b3dd94efb Mon Sep 17 00:00:00 2001 From: seungyeoneeee Date: Thu, 24 Apr 2025 13:06:18 +0900 Subject: [PATCH 1/8] fix: fix major bug about monthly chart Signed-off-by: seungyeoneeee --- .../cost-explorer/components/BudgetUsageTrendMonthly.vue | 2 +- .../components/BudgetUsageTrendMonthlyChart.vue | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthly.vue b/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthly.vue index 02f3dcdd62..dcc3c780cb 100644 --- a/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthly.vue +++ b/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthly.vue @@ -51,7 +51,7 @@ watch(() => state.budgetData, async () => { diff --git a/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthlyChart.vue b/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthlyChart.vue index d0a78d923c..648c984ef1 100644 --- a/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthlyChart.vue +++ b/apps/web/src/services/cost-explorer/components/BudgetUsageTrendMonthlyChart.vue @@ -26,8 +26,14 @@ const budgetData = computed(() => budgetPageStore.$state.budgetData); const chartContext = ref(null); +interface Props { + data: any; +} + +const props = defineProps(); + const state = reactive({ - data: [], + data: props.data, xAxisData: computed(() => state.data.map((d) => dayjs.utc(d.date).format('MMM YYYY'))), yAxisData: computed(() => [0, 25, 50, 75, 100]), chart: null as EChartsType | null, From 95fde92f3737b9321355927b1e830e1c0b8dcc63 Mon Sep 17 00:00:00 2001 From: seungyeoneeee Date: Thu, 24 Apr 2025 13:13:27 +0900 Subject: [PATCH 2/8] fix: fix minor bug about threshold setting Signed-off-by: seungyeoneeee --- .../components/BudgetCreateStep3.vue | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/apps/web/src/services/cost-explorer/components/BudgetCreateStep3.vue b/apps/web/src/services/cost-explorer/components/BudgetCreateStep3.vue index 399938a680..6c987a4093 100644 --- a/apps/web/src/services/cost-explorer/components/BudgetCreateStep3.vue +++ b/apps/web/src/services/cost-explorer/components/BudgetCreateStep3.vue @@ -30,28 +30,18 @@ const userReferenceStore = useUserReferenceStore(); const router = useRouter(); -const invalidThreshold = ref(false); +const invalidThreshold = ref([]); const isAlertRecipientsSelected = ref(false); watch(() => budgetCreatePageState.thresholds, () => { - const filteredThresholdInvalidState = budgetCreatePageState.thresholds.filter((threshold) => { - if (threshold.value) { - if (Number(threshold.value) > 0 && Number(threshold.value) < 101) { - return false; - } if (Number(threshold.value) <= 0 || typeof threshold.value !== 'number') { - return true; - } - return true; - } - return true; + const values = budgetCreatePageState.thresholds.map((t) => Number(t.value)); + invalidThreshold.value = budgetCreatePageState.thresholds.map((threshold, idx) => { + const val = values[idx]; + const isValidNumber = val > 0 && val < 101; + const isDuplicate = values.indexOf(val) !== idx; + return !(isValidNumber && !isDuplicate); }); - - if (filteredThresholdInvalidState.length === 0) { - invalidThreshold.value = true; - } else { - invalidThreshold.value = false; - } }, { deep: true, immediate: true }); watch(() => budgetCreatePageState.recipients.users, () => { @@ -140,7 +130,7 @@ const createBudget = async (type: 'skip' | 'set') => { :help-text="$t('BILLING.COST_MANAGEMENT.BUDGET.FORM.CREATE.EXCEEDS_AMOUNT_DESCRIPTION')" required :invalid-text="$t('BILLING.COST_MANAGEMENT.BUDGET.FORM.CREATE.THRESHOLD_INVALID_TEXT')" - :invalid="!invalidThreshold" + :invalid="invalidThreshold.some(v => v)" >
{ >