Files
apkt-eis/src/components/Form/FiltersType/Type4.vue
2024-04-23 13:40:45 +07:00

144 lines
3.5 KiB
Vue
Executable File

<script setup lang="ts">
import Select from '@/components/Select.vue'
import DatePicker from '@/components/DatePicker.vue'
import {
selectedUid,
selectedUp3Ulp,
selectedUlp,
itemsUid,
itemsUp3,
itemsUlp,
fetchUid
} from './reference'
import { computed, onMounted, ref, watch } from 'vue'
const uidPlaceholder = 'Semua Unit Induk Distribusi/Wilayah'
const up3Placeholder = 'Semua Unit Pelaksanaan Pelayanan Pelanggan'
const ulpPlaceholder = 'Semua Unit Layanan Pelanggan'
const emit = defineEmits(['update:filters'])
const props = defineProps({
jenisLaporan: {
type: Array as () => any[],
default: () => [
{ id: 1, name: 'Laporan Berulang Unit' },
{ id: 2, name: 'Laporan Berulang Pelanggan' },
{ id: 3, name: 'Laporan Berulang Pelanggan dan Unit' }
]
}
})
const renderUp3 = ref(false)
const renderUlp = ref(false)
const jenisLaporan = ref(computed(() => props.jenisLaporan))
const data = ref({
uid: { id: 0, name: uidPlaceholder },
up3: { id: 0, name: up3Placeholder },
ulp: { id: 0, name: ulpPlaceholder },
periode: '',
jenisLaporan: jenisLaporan.value[0]
})
watch(data, (value) => {
emit('update:filters', value)
})
const setUid = (value: any) => {
selectedUid(value)
data.value = {
...data.value,
uid: value,
up3: { id: 0, name: up3Placeholder },
ulp: { id: 0, name: ulpPlaceholder }
}
renderUp3.value = true
renderUlp.value = true
setTimeout(() => {
renderUp3.value = false
renderUlp.value = false
}, 200)
}
const setUp3 = (value: any) => {
selectedUp3Ulp(value)
data.value = {
...data.value,
up3: value,
ulp: { id: 0, name: ulpPlaceholder }
}
renderUlp.value = true
setTimeout(() => {
renderUlp.value = false
}, 200)
}
const setUlp = (value: any) => {
selectedUlp(value)
data.value = {
...data.value,
ulp: value
}
}
onMounted(() => {
emit('update:filters', data.value)
fetchUid()
})
</script>
<template>
<div class="grid grid-cols-1 gap-4 md:grid-cols-2">
<div class="flex flex-col flex-1 space-y-2">
<label class="filter-input-label">Unit Induk Distribusi/Wilayah:</label>
<Select @update:selected="setUid($event)" :data="itemsUid" :placeholder="uidPlaceholder" />
</div>
<div class="flex flex-col flex-1 space-y-2">
<label class="filter-input-label">Unit Pelaksanaan Pelayanan Pelanggan:</label>
<Select
v-if="renderUp3"
@update:selected="setUp3($event)"
:data="itemsUp3"
:placeholder="up3Placeholder"
/>
<Select
v-else
@update:selected="setUp3($event)"
:data="itemsUp3"
:placeholder="up3Placeholder"
/>
</div>
<div class="flex flex-col flex-1 space-y-2">
<label class="filter-input-label">Unit Layanan Pelanggan:</label>
<Select
v-if="renderUlp"
@update:selected="setUlp($event)"
:data="itemsUlp"
:placeholder="ulpPlaceholder"
/>
<Select
v-else
@update:selected="setUlp($event)"
:data="itemsUlp"
:placeholder="ulpPlaceholder"
/>
</div>
<div class="flex flex-col flex-1 space-y-2">
<label class="filter-input-label">Jenis Laporan:</label>
<Select @update:selected="(value) => (data.jenisLaporan = value)" :data="jenisLaporan" />
</div>
<div class="flex flex-col flex-1 space-y-2">
<label class="filter-input-label">Periode Tanggal:</label>
<DatePicker @update:date-value="(value) => (data.periode = value)" />
</div>
</div>
</template>