ui: add B2B olmayan stok (orphans) page
This commit is contained in:
@@ -87,26 +87,52 @@
|
||||
<q-menu class="npc-filter-menu" fit>
|
||||
<div class="npc-filter-menu-content">
|
||||
<div class="text-caption text-weight-bold q-mb-sm">{{ props.col.label }}</div>
|
||||
<q-input
|
||||
v-model="getColumnFilter(props.col.name).text"
|
||||
dense
|
||||
outlined
|
||||
clearable
|
||||
label="Icerir"
|
||||
/>
|
||||
<q-select
|
||||
v-model="getColumnFilter(props.col.name).selected"
|
||||
class="q-mt-sm"
|
||||
dense
|
||||
outlined
|
||||
multiple
|
||||
use-chips
|
||||
use-input
|
||||
emit-value
|
||||
map-options
|
||||
:options="getColumnDistinctOptions(props.col.name)"
|
||||
label="Deger Sec"
|
||||
/>
|
||||
<template v-if="isNumericColumn(props.col.name)">
|
||||
<div class="row q-col-gutter-sm">
|
||||
<div class="col-6">
|
||||
<q-input
|
||||
v-model="getColumnFilter(props.col.name).min"
|
||||
dense
|
||||
outlined
|
||||
clearable
|
||||
inputmode="decimal"
|
||||
label="Min"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<q-input
|
||||
v-model="getColumnFilter(props.col.name).max"
|
||||
dense
|
||||
outlined
|
||||
clearable
|
||||
inputmode="decimal"
|
||||
label="Max"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<q-input
|
||||
v-model="getColumnFilter(props.col.name).text"
|
||||
dense
|
||||
outlined
|
||||
clearable
|
||||
label="Icerir"
|
||||
/>
|
||||
<q-select
|
||||
v-model="getColumnFilter(props.col.name).selected"
|
||||
class="q-mt-sm"
|
||||
dense
|
||||
outlined
|
||||
multiple
|
||||
use-chips
|
||||
use-input
|
||||
emit-value
|
||||
map-options
|
||||
:options="getColumnDistinctOptions(props.col.name)"
|
||||
label="Deger Sec"
|
||||
/>
|
||||
</template>
|
||||
<div class="row justify-end q-gutter-sm q-mt-sm">
|
||||
<q-btn dense flat color="grey-7" label="Temizle" @click="clearColumnFilter(props.col.name)" />
|
||||
</div>
|
||||
@@ -241,12 +267,29 @@ function getColumnFilter (name) {
|
||||
if (!columnFilters[name]) {
|
||||
columnFilters[name] = {
|
||||
text: '',
|
||||
selected: []
|
||||
selected: [],
|
||||
min: '',
|
||||
max: ''
|
||||
}
|
||||
}
|
||||
return columnFilters[name]
|
||||
}
|
||||
|
||||
function isNumericColumn (name) {
|
||||
return name === 'lMMiktar_G'
|
||||
}
|
||||
|
||||
function parseNumberFilter (value) {
|
||||
const raw = String(value ?? '').trim()
|
||||
if (!raw) return null
|
||||
const normalized = raw
|
||||
.replace(/\s/g, '')
|
||||
.replace(/\./g, '')
|
||||
.replace(',', '.')
|
||||
const n = Number(normalized)
|
||||
return Number.isFinite(n) ? n : null
|
||||
}
|
||||
|
||||
function formatDateTR (value) {
|
||||
const s = String(value || '').trim()
|
||||
if (!s) return ''
|
||||
@@ -264,10 +307,19 @@ const rows = computed(() => {
|
||||
const cf = getColumnFilter(col.name)
|
||||
const text = String(cf.text || '').trim().toLowerCase()
|
||||
const selected = Array.isArray(cf.selected) ? cf.selected : []
|
||||
const min = parseNumberFilter(cf.min)
|
||||
const max = parseNumberFilter(cf.max)
|
||||
|
||||
if (!text && selected.length === 0) continue
|
||||
if (!text && selected.length === 0 && min === null && max === null) continue
|
||||
|
||||
result = result.filter((row) => {
|
||||
if (isNumericColumn(col.name)) {
|
||||
const numericValue = Number(row?.[col.name] || 0)
|
||||
if (min !== null && numericValue < min) return false
|
||||
if (max !== null && numericValue > max) return false
|
||||
return true
|
||||
}
|
||||
|
||||
const value = getColumnComparableValue(row, col.name)
|
||||
const valueLC = value.toLowerCase()
|
||||
|
||||
@@ -310,13 +362,18 @@ function getColumnDistinctOptions (colName) {
|
||||
|
||||
function isColumnFilterActive (name) {
|
||||
const cf = getColumnFilter(name)
|
||||
return !!String(cf.text || '').trim() || (Array.isArray(cf.selected) && cf.selected.length > 0)
|
||||
return !!String(cf.text || '').trim() ||
|
||||
(Array.isArray(cf.selected) && cf.selected.length > 0) ||
|
||||
parseNumberFilter(cf.min) !== null ||
|
||||
parseNumberFilter(cf.max) !== null
|
||||
}
|
||||
|
||||
function clearColumnFilter (name) {
|
||||
const cf = getColumnFilter(name)
|
||||
cf.text = ''
|
||||
cf.selected = []
|
||||
cf.min = ''
|
||||
cf.max = ''
|
||||
}
|
||||
|
||||
function clearAllColumnFilters () {
|
||||
|
||||
Reference in New Issue
Block a user