add header show SMSpanel

This commit is contained in:
2026-07-07 20:27:51 +03:30
parent 8a7874b585
commit b58620f062
7 changed files with 558 additions and 40 deletions
+86
View File
@@ -323,6 +323,50 @@
</p>
</div>
</div>
<div class="sms-panel-subcard sms-panel-subcard--sky rounded-xl p-3 shadow-sm md:p-5">
<div class="mb-3 flex items-center gap-2 md:mb-4">
<span class="sms-stat-icon sms-stat-icon--sky flex h-8 w-8 items-center justify-center rounded-lg">
<Icon icon="vuesax-linear:card" Size="18px" />
</span>
<div>
<p class="sms-subcard-title text-sm font-semibold">اطلاعات واریز شارژ پیامک</p>
<p class="sms-panel-subtitle hidden text-xs md:block">
برای همه مشتری‌ها یکسان است و در پاپ‌آپ «شارژ» هدر نمایش داده می‌شود.
</p>
</div>
</div>
<div class="grid grid-cols-1 gap-3 md:grid-cols-2 md:gap-4">
<a-form-item label="شماره کارت" class="sms-compact-field !mb-0">
<BasicInput v-model:value="depositForm.card_number" place-holder="شماره کارت" />
</a-form-item>
<a-form-item label="شماره شبا" class="sms-compact-field !mb-0">
<BasicInput v-model:value="depositForm.sheba" place-holder="IR..." />
</a-form-item>
<a-form-item label="نام صاحب حساب" class="sms-compact-field !mb-0 md:col-span-2">
<BasicInput v-model:value="depositForm.account_holder" place-holder="نام صاحب حساب" />
</a-form-item>
<a-form-item label="متن راهنما" class="sms-compact-field !mb-0 md:col-span-2">
<a-textarea
v-model:value="depositForm.note"
:auto-size="{ minRows: 2, maxRows: 5 }"
placeholder="متن راهنمای واریز"
/>
</a-form-item>
</div>
<div class="mt-3 flex justify-end md:mt-4">
<BaseButton
type="primary"
size="large"
class="!w-auto shrink-0 whitespace-nowrap"
:loading="depositLoading"
@click="submitDepositInfo"
>
ذخیره اطلاعات واریز
</BaseButton>
</div>
</div>
</div>
</div>
@@ -592,14 +636,18 @@ import {
getSmsPanelOverview,
getSmsPanelReport,
updateSmsBlock,
updateSmsDepositInfo,
updateSmsPrice,
type SmsPanelChargeReport,
type SmsPanelOverview,
type SmsPanelReport
} from '@/api/smsPanel'
import { useSmsWalletStore } from '@/store/smsWalletStore'
import { toJalaliNoTime } from '@core/utils/useDataTime'
import { message } from 'ant-design-vue'
const smsWalletStore = useSmsWalletStore()
const pageLoading = ref(true)
const actionLoading = ref(false)
const blockLoading = ref(false)
@@ -615,6 +663,14 @@ const chargeNote = ref('')
const pricePerPart = ref<number | null>(null)
const chargeModalVisible = ref(false)
const depositLoading = ref(false)
const depositForm = reactive({
card_number: '',
sheba: '',
account_holder: '',
note: ''
})
const reportFrom = ref('')
const reportTo = ref('')
const chargeReportFrom = ref('')
@@ -690,6 +746,12 @@ async function loadOverview() {
overview.value = await getSmsPanelOverview()
pricePerPart.value = overview.value.wallet.price_per_part || null
isBlocked.value = overview.value.wallet.is_blocked
if (overview.value.deposit) {
depositForm.card_number = overview.value.deposit.card_number ?? ''
depositForm.sheba = overview.value.deposit.sheba ?? ''
depositForm.account_holder = overview.value.deposit.account_holder ?? ''
depositForm.note = overview.value.deposit.note ?? ''
}
} catch {
message.error('خطا در بارگذاری پنل پیامک')
} finally {
@@ -732,6 +794,30 @@ async function submitCharge() {
}
}
async function submitDepositInfo() {
depositLoading.value = true
try {
const res = await updateSmsDepositInfo({
card_number: depositForm.card_number.trim(),
sheba: depositForm.sheba.trim(),
account_holder: depositForm.account_holder.trim(),
note: depositForm.note.trim()
})
message.success(res.message || 'اطلاعات واریز ذخیره شد')
if (res.deposit) {
depositForm.card_number = res.deposit.card_number ?? ''
depositForm.sheba = res.deposit.sheba ?? ''
depositForm.account_holder = res.deposit.account_holder ?? ''
depositForm.note = res.deposit.note ?? ''
}
await smsWalletStore.refresh()
} catch (e: any) {
message.error(e?.response?.data?.message || 'خطا در ذخیره اطلاعات واریز')
} finally {
depositLoading.value = false
}
}
async function submitPrice() {
const price = Number(pricePerPart.value ?? 0)
if (Number.isNaN(price) || price < 0) {