added table

This commit is contained in:
2026-08-16 20:01:54 +03:30
parent 27f3a6212a
commit 609f6b2fa3
17 changed files with 1227 additions and 39 deletions
+66 -18
View File
@@ -15,29 +15,39 @@
:showButton="true"
:showCancel="true"
:showOk="true"
ok-text="ارسال"
ok-text="شروع ارسال"
cancel-text="انصراف"
@ok="ok"
@close="closeSmsSheet"
@cancel="closeSmsSheet"
>
<div v-if="isMobile" class="mb-3 text-base font-700">ارسال پیامک</div>
<SmsEditorFormBody ref="smsEditorRef" :form="form" :group-items="groupItems" :loading="loading" />
<a-alert
class="mb-3"
type="warning"
show-icon
message="ارسال ۱۰تایی انجام می‌شود. تا پایان کار پنل را نبندید و صفحه را رفرش نکنید."
/>
<div class="sms-editor-scroll">
<SmsEditorFormBody ref="smsEditorRef" :form="form" :group-items="groupItems" :loading="loading" />
</div>
</BasicActionSheet>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { ref, watch } from 'vue'
import tbl from './components/table.vue'
import type { FormInstance } from 'ant-design-vue'
import BasicActionSheet from '@/components/BasicActionSheet.vue'
import SmsEditorFormBody from './components/SmsEditorFormBody.vue'
import { message } from 'ant-design-vue/es'
import type { FunctionItem } from '@/model/Item'
import { createSMS, getGroupsList } from '@/api/sms'
import { getGroupsList } from '@/api/sms'
import type { Sms } from '@/model/sms'
import { isMobile } from '@core/utils/is'
import { groupSmsEnabledSetting, initWalletSettingsFromApi } from '@/utils/config'
import { useGroupSmsSendStore } from '@/store/groupSmsSendStore'
const loading = ref<boolean>(false)
const groupItems = ref<FunctionItem[]>()
@@ -46,6 +56,7 @@ const smsEditorRef = ref<{
validateFields?: () => ReturnType<NonNullable<FormInstance['validateFields']>>
resetAll?: () => void
}>()
const sendStore = useGroupSmsSendStore()
const form = ref<Sms>({
message: '',
@@ -55,7 +66,17 @@ const form = ref<Sms>({
const addSMSVisible = ref<boolean>(false)
onMounted(() => getGroups())
onMounted(() => {
void initWalletSettingsFromApi()
getGroups()
})
watch(
() => sendStore.finished,
(finished) => {
if (finished) refreshTable()
}
)
async function getGroups() {
try {
@@ -73,10 +94,20 @@ function refreshTable() {
}
function closeSmsSheet() {
if (loading.value) return
addSMSVisible.value = false
}
async function add() {
if (!groupSmsEnabledSetting.value) {
message.warning('ارسال پیامک گروهی غیرفعال است')
return
}
if (sendStore.active) {
message.info('یک ارسال گروهی در حال انجام است')
sendStore.expand()
return
}
addSMSVisible.value = true
resetData()
}
@@ -90,22 +121,39 @@ function resetData() {
smsEditorRef.value?.resetAll?.()
}
function uniqueNumbers(list: string[]): string[] {
return Array.from(new Set(list.map((n) => String(n).trim()).filter(Boolean)))
}
function ok() {
if (sendStore.active) {
message.warning('ارسال قبلی هنوز تمام نشده است')
return
}
smsEditorRef.value?.validateFields?.().then(async () => {
try {
loading.value = true
if (!form.value.numbers) form.value.numbers = []
form.value.numbers.push(...(form.value.single ?? []))
await createSMS(form.value)
resetData()
addSMSVisible.value = false
refreshTable()
message.success('با موفقیت ارسال شد')
} catch (e) {
console.error(e)
} finally {
loading.value = false
const numbers = uniqueNumbers([...(form.value.numbers ?? []), ...(form.value.single ?? [])])
if (!numbers.length) {
message.warning('حداقل یک شماره انتخاب کنید')
return
}
if (!form.value.message?.trim()) {
message.warning('متن پیامک خالی است')
return
}
const text = form.value.message
addSMSVisible.value = false
resetData()
await sendStore.start(numbers, text)
})
}
</script>
<style scoped>
.sms-editor-scroll {
max-height: min(62vh, 560px);
overflow-y: auto;
padding-inline-end: 4px;
}
</style>