Merge remote-tracking branch 'origin/master'
This commit is contained in:
93
ui/src/stores/RoleDeptPermissionListStore.js
Normal file
93
ui/src/stores/RoleDeptPermissionListStore.js
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
127
ui/src/stores/orderBulkCloseStore.js
Normal file
127
ui/src/stores/orderBulkCloseStore.js
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user