Merge remote-tracking branch 'origin/master'

This commit is contained in:
2026-02-13 20:58:38 +03:00
parent 572bab4134
commit 7edcd446d0
6 changed files with 1245 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
import { defineStore } from 'pinia'
import api from 'src/services/api'
let lastRequestId = 0
export const useRoleDeptPermissionListStore = defineStore('roleDeptPermissionList', {
state: () => ({
modules: [],
moduleActions: [],
rows: [],
loading: false,
error: null,
filters: {
search: ''
}
}),
getters: {
totalCount (state) {
return state.rows.length
}
},
actions: {
async fetchRows () {
const rid = ++lastRequestId
this.loading = true
this.error = null
try {
const search = String(this.filters.search || '').trim()
const params = {}
if (search) params.search = search
const res = await api.get('/role-dept-permissions/list', { params })
if (rid !== lastRequestId) {
return
}
const payload = res?.data || {}
this.modules = Array.isArray(payload?.modules)
? payload.modules.map((m) => ({
value: String(m.value || '').toLowerCase().trim(),
label: String(m.label || '')
})).filter((m) => m.value)
: []
this.moduleActions = Array.isArray(payload?.module_actions)
? payload.module_actions.map((a) => ({
module_code: String(a.module_code || '').toLowerCase().trim(),
action: String(a.action || '').toLowerCase().trim()
})).filter((a) => a.module_code && a.action)
: []
const rawRows = Array.isArray(payload?.rows)
? payload.rows
: Array.isArray(res?.data) ? res.data : []
this.rows = rawRows.map((r) => {
const rawFlags = (r?.module_flags && typeof r.module_flags === 'object')
? r.module_flags
: {}
const flags = {}
Object.keys(rawFlags).forEach((k) => {
flags[String(k).toLowerCase().trim()] = Boolean(rawFlags[k])
})
return {
role_id: Number(r.role_id || 0),
role_title: r.role_title || '',
department_code: r.department_code || '',
department_title: r.department_title || '',
module_flags: flags
}
})
} catch (err) {
if (rid !== lastRequestId) return
this.modules = []
this.moduleActions = []
this.rows = []
this.error =
err?.response?.data ||
err?.message ||
'Yetki listesi alınamadı'
} finally {
if (rid === lastRequestId) {
this.loading = false
}
}
}
}
})

View File

@@ -0,0 +1,127 @@
import { defineStore } from 'pinia'
import api from 'src/services/api'
export const useOrderBulkCloseStore = defineStore('orderBulkClose', {
state: () => ({
orders: [],
selectedOrderNumbers: [],
search: '',
loading: false,
closing: false,
error: null
}),
getters: {
selectedCount (state) {
return state.selectedOrderNumbers.length
},
totalCount (state) {
return state.orders.length
}
},
actions: {
isSelected (orderNumber) {
return this.selectedOrderNumbers.includes(orderNumber)
},
setSelected (orderNumber, selected) {
if (!orderNumber) return
if (selected) {
if (!this.selectedOrderNumbers.includes(orderNumber)) {
this.selectedOrderNumbers.push(orderNumber)
}
return
}
this.selectedOrderNumbers = this.selectedOrderNumbers.filter(
(n) => n !== orderNumber
)
},
toggleSelectMany (orderNumbers, selected) {
const clean = Array.from(
new Set((orderNumbers || []).filter(Boolean))
)
if (selected) {
const current = new Set(this.selectedOrderNumbers)
clean.forEach((n) => current.add(n))
this.selectedOrderNumbers = Array.from(current)
return
}
const block = new Set(clean)
this.selectedOrderNumbers = this.selectedOrderNumbers.filter(
(n) => !block.has(n)
)
},
clearSelection () {
this.selectedOrderNumbers = []
},
async fetchOrders () {
this.loading = true
this.error = null
try {
const search = String(this.search || '').trim()
const params = {}
if (search) params.search = search
const res = await api.get('/orders/close-ready', { params })
this.orders = Array.isArray(res?.data) ? res.data : []
// new list disinda kalan secimleri temizle
const available = new Set(this.orders.map((o) => o.OrderNumber))
this.selectedOrderNumbers = this.selectedOrderNumbers.filter(
(n) => available.has(n)
)
} catch (err) {
this.orders = []
this.error =
err?.response?.data ||
err?.message ||
'Siparişler alınamadı'
} finally {
this.loading = false
}
},
async closeSelectedOrders () {
if (!this.selectedOrderNumbers.length) {
return { affected: 0 }
}
this.closing = true
this.error = null
try {
const payload = {
order_numbers: this.selectedOrderNumbers
}
const res = await api.post('/orders/bulk-close', payload)
const affected = Number(res?.data?.affected || 0)
// local optimizasyon: secilenleri listeden dus
const selected = new Set(this.selectedOrderNumbers)
this.orders = this.orders.filter((o) => !selected.has(o.OrderNumber))
this.selectedOrderNumbers = []
return { affected }
} catch (err) {
this.error =
err?.response?.data ||
err?.message ||
'Toplu kapatma başarısız'
throw err
} finally {
this.closing = false
}
}
}
})