97 lines
2.5 KiB
JavaScript
97 lines
2.5 KiB
JavaScript
// src/stores/statementdetailStore.js
|
|
import { defineStore } from 'pinia'
|
|
import api from 'src/services/api'
|
|
|
|
export const useStatementdetailStore = defineStore('statementdetail', {
|
|
state: () => ({
|
|
detailsByRow: {},
|
|
detailsByBelge: {},
|
|
loading: false,
|
|
error: null
|
|
}),
|
|
|
|
actions: {
|
|
async loadDetails ({ accountCode, belgeNo, rowKey }) {
|
|
if (!accountCode) {
|
|
this.error = 'Gecerli bir cari kod secilmedi.'
|
|
return
|
|
}
|
|
|
|
this.loading = true
|
|
this.error = null
|
|
|
|
try {
|
|
const normalizedBelgeNo = String(belgeNo || '').trim()
|
|
const params = { belgeno: normalizedBelgeNo }
|
|
|
|
if (this.detailsByBelge[normalizedBelgeNo]) {
|
|
const keyCached = String(rowKey || '').trim()
|
|
if (keyCached) {
|
|
this.detailsByRow[keyCached] = this.detailsByBelge[normalizedBelgeNo]
|
|
}
|
|
return
|
|
}
|
|
|
|
const res = await api.get(
|
|
`/statements/${encodeURIComponent(accountCode)}/details`,
|
|
{ params }
|
|
)
|
|
|
|
const key = String(rowKey || '').trim()
|
|
const rows = Array.isArray(res.data) ? res.data : []
|
|
if (normalizedBelgeNo) {
|
|
this.detailsByBelge[normalizedBelgeNo] = rows
|
|
}
|
|
if (key) {
|
|
this.detailsByRow[key] = rows
|
|
}
|
|
} catch (err) {
|
|
console.error('Details yuklenemedi:', err)
|
|
this.error =
|
|
err?.data?.message ||
|
|
err?.message ||
|
|
'Detaylar yuklenemedi'
|
|
} finally {
|
|
this.loading = false
|
|
}
|
|
},
|
|
|
|
hasDetailsByRowKey (rowKey) {
|
|
const key = String(rowKey || '').trim()
|
|
return Array.isArray(this.detailsByRow[key])
|
|
},
|
|
|
|
getDetailsByRowKey (rowKey) {
|
|
const key = String(rowKey || '').trim()
|
|
return this.detailsByRow[key] || []
|
|
},
|
|
|
|
async preloadForRows ({ accountCode, rows, getRowKey }) {
|
|
const tasks = []
|
|
|
|
for (const row of rows || []) {
|
|
const belgeNo = String(row?.belge_no || '').trim()
|
|
if (!belgeNo || belgeNo === 'Baslangic_devir') continue
|
|
|
|
const rowKey = String(getRowKey(row) || '').trim()
|
|
if (!rowKey) continue
|
|
if (this.hasDetailsByRowKey(rowKey)) continue
|
|
|
|
tasks.push(
|
|
this.loadDetails({ accountCode, belgeNo, rowKey })
|
|
)
|
|
}
|
|
|
|
if (tasks.length === 0) return
|
|
await Promise.all(tasks)
|
|
},
|
|
|
|
reset () {
|
|
this.detailsByRow = {}
|
|
this.detailsByBelge = {}
|
|
this.loading = false
|
|
this.error = null
|
|
}
|
|
}
|
|
})
|