added pargar accounting
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
<template>
|
||||
<BasicModal
|
||||
v-model:visible="visible"
|
||||
:title="title"
|
||||
:ok-text="confirmText"
|
||||
:loading="loading"
|
||||
width="32rem"
|
||||
@ok="confirm"
|
||||
@close="visible = false"
|
||||
>
|
||||
<div class="space-y-3 text-sm">
|
||||
<div v-for="item in items" :key="item.label" class="flex justify-between gap-3 border-b border-gray-100 pb-2">
|
||||
<span class="text-gray-500">{{ item.label }}</span>
|
||||
<span class="text-left break-all">{{ item.value ?? '-' }}</span>
|
||||
</div>
|
||||
<div v-if="detail?.res" class="rounded-lg bg-gray-100 p-3 text-xs font-mono text-gray-700 whitespace-pre-wrap">{{ detail.res }}</div>
|
||||
<div v-if="logText" class="rounded-lg bg-red-50 p-3 text-red-700 whitespace-pre-wrap">{{ logText }}</div>
|
||||
</div>
|
||||
</BasicModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue'
|
||||
import BasicModal from '@/components/BasicModal.vue'
|
||||
import { message } from 'ant-design-vue/es'
|
||||
import { getPargarDetail, retryPargarSanad, registerCustomerInPargar, type PargarRecord } from '@/api/pargar'
|
||||
import { pargarStatusLabel } from '@/pages/menuPages/accounting/utils/pargarStatus'
|
||||
|
||||
const props = defineProps<{
|
||||
modelValue: boolean
|
||||
mode: 'retry-sanad' | 'register-customer'
|
||||
pargarId?: number
|
||||
customerId?: number
|
||||
customerName?: string
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'update:modelValue', value: boolean): void
|
||||
(e: 'success'): void
|
||||
}>()
|
||||
|
||||
const loading = ref(false)
|
||||
const detail = ref<PargarRecord | null>(null)
|
||||
|
||||
const visible = computed({
|
||||
get: () => props.modelValue,
|
||||
set: (value: boolean) => emit('update:modelValue', value)
|
||||
})
|
||||
|
||||
const title = computed(() =>
|
||||
props.mode === 'register-customer' ? 'ثبت مشتری در پرگار' : 'ارسال مجدد سند به پرگار'
|
||||
)
|
||||
|
||||
const confirmText = computed(() =>
|
||||
props.mode === 'register-customer' ? 'ثبت در پرگار' : 'ارسال مجدد'
|
||||
)
|
||||
|
||||
const logText = computed(() => detail.value?.sync_log || '')
|
||||
|
||||
const items = computed(() => {
|
||||
if (props.mode === 'register-customer') {
|
||||
return [
|
||||
{ label: 'نام مشتری', value: props.customerName || detail.value?.customer?.name },
|
||||
{ label: 'شناسه مشتری', value: props.customerId || detail.value?.customer_id },
|
||||
{ label: 'کد پرگار', value: detail.value?.customer?.pargar_account_id }
|
||||
]
|
||||
}
|
||||
|
||||
return [
|
||||
{ label: 'شناسه سند', value: detail.value?.id },
|
||||
{ label: 'مشتری', value: detail.value?.customer?.name },
|
||||
{ label: 'موبایل', value: detail.value?.customer?.mobile },
|
||||
{ label: 'نوع', value: detail.value?.type },
|
||||
{ label: 'مقدار', value: detail.value?.amount },
|
||||
{ label: 'شرح', value: detail.value?.desc },
|
||||
{ label: 'وضعیت', value: pargarStatusLabel(detail.value?.sync_status, detail.value?.pargar_ref) },
|
||||
{ label: 'کد پرگار', value: detail.value?.pargar_ref }
|
||||
]
|
||||
})
|
||||
|
||||
watch(
|
||||
() => [props.modelValue, props.pargarId] as const,
|
||||
async ([open, id]) => {
|
||||
if (!open || props.mode !== 'retry-sanad' || !id) return
|
||||
loading.value = true
|
||||
try {
|
||||
detail.value = await getPargarDetail(id)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
async function confirm() {
|
||||
loading.value = true
|
||||
try {
|
||||
if (props.mode === 'register-customer' && props.customerId) {
|
||||
const result = await registerCustomerInPargar(props.customerId)
|
||||
if (!result.ok) {
|
||||
message.error(result.message || 'ثبت مشتری ناموفق بود')
|
||||
return
|
||||
}
|
||||
message.success(result.message || 'مشتری در پرگار ثبت شد')
|
||||
} else if (props.mode === 'retry-sanad' && props.pargarId) {
|
||||
const result = await retryPargarSanad(props.pargarId)
|
||||
if (!result.ok) {
|
||||
message.error(result.message || 'ارسال مجدد ناموفق بود')
|
||||
detail.value = result.pargar || detail.value
|
||||
return
|
||||
}
|
||||
message.success(result.message || 'سند با موفقیت ثبت شد')
|
||||
}
|
||||
visible.value = false
|
||||
emit('success')
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user