DONE: add allowance payout trace for admin, improve UI on voting side, increase pagination number

This commit is contained in:
ISMAIL MASSERAN
2026-04-28 11:44:02 +08:00
parent b08232731e
commit 76ae46f8d9
17 changed files with 913 additions and 76578 deletions
@@ -229,6 +229,17 @@
</div>
</div>
<div v-if="isCashPaid(selectedVoter)" class="well well-sm" style="margin-top: 14px;">
<div style="font-weight: 800; margin-bottom: 8px;">Maklumat Bayaran</div>
<div>
Dibayar oleh:
<b>{{ selectedVoter.cash_paid_by_admin_name || '—' }}</b>
<span v-if="selectedVoter.cash_paid_by_admin_email" class="text-muted">
({{ selectedVoter.cash_paid_by_admin_email }})
</span>
</div>
</div>
<div class="alert alert-danger" v-if="detailError" style="margin-top: 12px;">
{{ detailError }}
</div>
@@ -468,6 +479,7 @@
<script>
export default {
data: function () {
var vm = this;
return {
id: 0,
voterLoading: false,
@@ -487,10 +499,40 @@ export default {
{ title: 'No. Kad Pengenalan', key: 'no_kp', sortable: true },
{ title: 'No. Anggota', key: 'no_anggota', sortable: true },
{ title: 'Unit', key: 'unit', sortable: true },
{ title: 'Kehadiran', key: 'kehadiran', sortable: true },
{ title: 'Pendaftaran', key: 'fizikal_reg', sortable: false },
{ title: 'Undi', key: 'has_voted', sortable: false },
{ title: 'Status', key: 'allowance', sortable: false },
{
title: 'Kehadiran',
key: 'kehadiran',
sortable: true,
exportValue: function (item) {
return vm.getKehadiranString(item ? item.kehadiran : null);
}
},
{
title: 'Pendaftaran',
key: 'fizikal_reg',
sortable: false,
exportValue: function (item) {
if (!item) return '';
if (Number(item.kehadiran) !== 1) return '—';
return item.fizikal_registration_verified_at ? 'Disahkan' : 'Menunggu';
}
},
{
title: 'Undi',
key: 'has_voted',
sortable: false,
exportValue: function (item) {
return Number(item && item.votes_count) > 0 ? 'Undi' : 'Belum';
}
},
{
title: 'Status',
key: 'allowance',
sortable: false,
exportValue: function (item) {
return vm.isCashPaid(item) ? 'Sudah Bayar' : 'Belum Bayar';
}
},
{ title: 'Tindakan', key: 'action', sortable: false },
]
}
@@ -723,6 +765,14 @@ export default {
var p = response.data.payout;
this.selectedVoter.cash_paid_at = p.paid_at;
this.selectedVoter.cash_payout_id = p.id;
this.selectedVoter.cash_paid_by_admin_name =
(response && response.data && response.data.paid_by_admin_name)
? response.data.paid_by_admin_name
: this.selectedVoter.cash_paid_by_admin_name;
this.selectedVoter.cash_paid_by_admin_email =
(response && response.data && response.data.paid_by_admin_email)
? response.data.paid_by_admin_email
: this.selectedVoter.cash_paid_by_admin_email;
if (p.reference != null) {
this.selectedVoter.cash_payout_reference = p.reference;
this.payoutReference = p.reference ? String(p.reference) : '';