From 0d072ba82d5070527da60ddd2cdb45c6bc232ab5 Mon Sep 17 00:00:00 2001 From: adonis Date: Mon, 24 Aug 2026 22:31:27 +0330 Subject: [PATCH] feat(automations): auto-close TimePicker and show skipped send status TimePicker closes on select without Ok button; send log shows skipped entries from cooldown/max limits. Co-authored-by: Cursor --- .../components/AutomationEditorFormBody.vue | 49 +++++++++++++++++++ src/pages/menuPages/automations/index.vue | 18 ++++++- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/pages/menuPages/automations/components/AutomationEditorFormBody.vue b/src/pages/menuPages/automations/components/AutomationEditorFormBody.vue index 156df91..39503ed 100644 --- a/src/pages/menuPages/automations/components/AutomationEditorFormBody.vue +++ b/src/pages/menuPages/automations/components/AutomationEditorFormBody.vue @@ -301,13 +301,16 @@ @@ -320,13 +323,16 @@ @@ -519,9 +525,48 @@ function pickerToTime(val: Dayjs | string | null | undefined): { hour: number | return { hour: parsed.hour(), minute: parsed.minute() } } +const smsPickerOpen = ref(false) +const inAppPickerOpen = ref(false) +const smsSelectCount = ref(0) +const inAppSelectCount = ref(0) +const smsOpenMinute = ref(0) +const inAppOpenMinute = ref(0) const smsHourValue = computed(() => timeToPicker(props.form.sms_send_hour, props.form.sms_send_minute)) const inAppHourValue = computed(() => timeToPicker(props.form.in_app_send_hour, props.form.in_app_send_minute)) +watch(smsPickerOpen, (open) => { + if (!open) return + smsSelectCount.value = 0 + smsOpenMinute.value = props.form.sms_send_minute ?? 0 +}) + +watch(inAppPickerOpen, (open) => { + if (!open) return + inAppSelectCount.value = 0 + inAppOpenMinute.value = props.form.in_app_send_minute ?? 0 +}) + +function shouldCloseTimePicker(date: Dayjs, selectCount: number, openMinute: number): boolean { + if (date.minute() !== openMinute) return true + return selectCount >= 2 +} + +function onSmsTimeSelect(date: Dayjs) { + setSmsTime(date) + smsSelectCount.value++ + if (shouldCloseTimePicker(date, smsSelectCount.value, smsOpenMinute.value)) { + smsPickerOpen.value = false + } +} + +function onInAppTimeSelect(date: Dayjs) { + setInAppTime(date) + inAppSelectCount.value++ + if (shouldCloseTimePicker(date, inAppSelectCount.value, inAppOpenMinute.value)) { + inAppPickerOpen.value = false + } +} + function setSmsTime(val: Dayjs | string | null) { const time = pickerToTime(val) props.form.sms_send_hour = time.hour @@ -747,6 +792,10 @@ defineExpose({ border-radius: 10px; } +:global(.auto-editor__hour-popup .ant-picker-ranges) { + display: none; +} + .auto-editor__hint { @apply mt-3 text-xs; color: var(--admin-text-secondary); diff --git a/src/pages/menuPages/automations/index.vue b/src/pages/menuPages/automations/index.vue index 9b106e2..a0ac41c 100644 --- a/src/pages/menuPages/automations/index.vue +++ b/src/pages/menuPages/automations/index.vue @@ -48,8 +48,22 @@ >
{{ row.customer_name || '—' }} · {{ row.customer_mobile || '—' }} - - {{ row.status === 'sent' ? 'موفق' : 'ناموفق' }} + + {{ + row.status === 'sent' + ? 'موفق' + : row.status === 'skipped' + ? 'رد شده' + : 'ناموفق' + }}
{{ formatSendDate(row.created_at) }}