Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-03-03 13:45:15 +03:00
parent 008eeb3e5f
commit 337364b259
4 changed files with 178 additions and 19 deletions

View File

@@ -1689,3 +1689,115 @@ body {
width: 98vw;
max-width: 1900px;
}
/* ===========================================================
GLOBAL MOBILE USABILITY PACK
=========================================================== */
@media (max-width: 1024px) {
.q-layout,
.q-page-container,
.q-page {
max-width: 100vw;
overflow-x: hidden;
}
.q-page {
padding-left: 8px !important;
padding-right: 8px !important;
}
.q-toolbar {
min-height: 52px !important;
}
.q-toolbar-title {
font-size: 1.15rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.page-layout,
.statement-page,
.order-prod-page,
.permissions-page,
.user-detail-page {
min-height: 0;
overflow: auto;
}
.filter-sticky,
.local-filter-bar,
.sticky-bar,
.page-header,
.save-toolbar {
max-width: 100%;
}
.filters-panel {
max-height: 46vh;
overflow-y: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
}
.top-actions,
.top-actions.single-line {
flex-wrap: nowrap;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
scrollbar-width: thin;
}
.top-actions > [class*='col-'],
.top-actions > .col-auto,
.top-actions.single-line > [class*='col-'],
.top-actions.single-line > .col-auto {
flex: 0 0 auto;
min-width: 180px;
}
.top-actions > .col-auto,
.top-actions.single-line > .col-auto {
min-width: auto;
}
.table-area,
.table-scroll,
.table-wrap {
min-width: 0;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.q-table__middle {
overflow: auto !important;
-webkit-overflow-scrolling: touch;
}
.sticky-bar .q-btn,
.page-header .q-btn,
.save-toolbar .q-btn {
min-height: 30px;
font-size: 12px;
padding: 4px 8px;
}
}
@media (max-width: 1024px) and (orientation: landscape) {
.filters-panel,
.local-filter-bar {
max-height: 40vh;
overflow-y: auto;
overflow-x: hidden;
}
.sticky-bar {
padding: 4px 6px !important;
}
.q-table__middle {
max-height: calc(100vh - 180px) !important;
}
}

View File

@@ -1,7 +1,11 @@
<template>
<q-page v-if="canReadFinance" class="q-px-md q-pb-md page-col statement-page">
<div class="local-filter-bar compact-filter q-pa-sm q-mb-xs">
<q-slide-transition>
<div
v-show="!filtersCollapsed"
class="local-filter-bar compact-filter q-pa-sm q-mb-xs"
>
<div class="row q-col-gutter-sm items-end">
<div class="col-12 col-md-4">
<q-select
@@ -88,6 +92,7 @@
</div>
</div>
</div>
</q-slide-transition>
<!-- Tablo Alanı -->
<div class="table-scroll">
@@ -106,6 +111,13 @@
<!-- Sağ taraftaki buton grubu -->
<div class="row items-center q-gutter-sm">
<q-btn
flat
color="primary"
:icon="filtersCollapsed ? 'unfold_more' : 'unfold_less'"
:label="filtersCollapsed ? 'Filtreleri Genişlet' : 'Filtreleri Daralt'"
@click="toggleFiltersCollapsed"
/>
<!-- Tüm detayları /kapat -->
<q-btn
@@ -350,6 +362,7 @@ const selectedMonType = ref(monetaryTypeOptions[0].value)
/* Expand kontrolü */
const expandedRows = ref({})
const allDetailsOpen = ref(false)
const filtersCollapsed = ref(false)
/* Kolonları dinamik üretelim */
function buildColumns(data) {
@@ -424,6 +437,9 @@ function toggleAllDetails() {
expandedRows.value = {}
}
}
function toggleFiltersCollapsed () {
filtersCollapsed.value = !filtersCollapsed.value
}
function normalizeText (str) {
return (str || '')
.toString()
@@ -675,5 +691,28 @@ async function CurrheadDownload() {
max-width: 180px;
}
}
@media (max-width: 1024px) and (orientation: landscape) {
.statement-page {
height: calc(100vh - 56px);
padding-top: 56px !important;
}
.statement-page .local-filter-bar {
max-height: 42vh;
overflow-y: auto;
overflow-x: hidden;
}
.sticky-bar {
padding: 4px 6px !important;
}
.sticky-bar :deep(.q-btn) {
min-height: 30px;
font-size: 12px;
padding: 4px 8px;
}
}
</style>

View File

@@ -28,7 +28,7 @@ export const useAccountAgingBalanceStore = defineStore('accountAgingBalance', {
cariIlkGrupOptions: (state) => uniqueOptions(state.rows, 'cari_ilk_grup'),
piyasaOptions: (state) => uniqueOptions(state.rows, 'piyasa'),
temsilciOptions: (state) => uniqueOptions(state.rows, 'temsilci'),
riskDurumuOptions: (state) => uniqueOptions(state.rows, 'risk_durumu'),
riskDurumuOptions: (state) => uniqueOptions(state.rows, 'risk_durumu', { includeDash: true }),
ulkeOptions: (state) => uniqueOptions(state.rows, 'ozellik05'),
ilOptions: (state) => uniqueOptions(state.rows, 'il'),
ilceOptions: (state) => uniqueOptions(state.rows, 'ilce'),
@@ -45,7 +45,7 @@ export const useAccountAgingBalanceStore = defineStore('accountAgingBalance', {
const matchMulti = (selectedSet, value) => {
if (!selectedSet.size) return true
const normalized = normalizeText(value)
if (!normalized) return true
if (!normalized) return selectedSet.has('-')
return selectedSet.has(normalized)
}
@@ -239,17 +239,24 @@ export const useAccountAgingBalanceStore = defineStore('accountAgingBalance', {
const excludedCariIlkGrup = new Set([normalizeText('transfer'), normalizeText('perakende'), normalizeText('dtf')])
this.filters.cariIlkGrup = this.cariIlkGrupOptions.map(o => o.value).filter(v => !excludedCariIlkGrup.has(normalizeText(v)))
const excludedRisk = new Set([normalizeText('avukat'), normalizeText('orta risk'), normalizeText('yuksek risk')])
this.filters.riskDurumu = this.riskDurumuOptions.map(o => o.value).filter(v => !excludedRisk.has(normalizeText(v)))
this.filters.riskDurumu = []
}
}
})
function uniqueOptions (rows, field) {
function uniqueOptions (rows, field, opts = {}) {
const includeDash = !!opts.includeDash
const set = new Set()
if (includeDash) set.add('-')
for (const r of rows) {
const v = String(r[field] || '').trim()
if (v) set.add(v)
if (v) {
set.add(v)
continue
}
if (includeDash) {
set.add('-')
}
}
return Array.from(set).sort((a, b) => a.localeCompare(b, 'tr')).map(v => ({ label: v, value: v }))
}

View File

@@ -28,7 +28,7 @@ export const useCustomerBalanceListStore = defineStore('customerBalanceList', {
cariIlkGrupOptions: (state) => uniqueOptions(state.rows, 'cari_ilk_grup'),
piyasaOptions: (state) => uniqueOptions(state.rows, 'piyasa'),
temsilciOptions: (state) => uniqueOptions(state.rows, 'temsilci'),
riskDurumuOptions: (state) => uniqueOptions(state.rows, 'risk_durumu'),
riskDurumuOptions: (state) => uniqueOptions(state.rows, 'risk_durumu', { includeDash: true }),
ulkeOptions: (state) => uniqueOptions(state.rows, 'ozellik05'),
ilOptions: (state) => uniqueOptions(state.rows, 'il'),
ilceOptions: (state) => uniqueOptions(state.rows, 'ilce'),
@@ -45,7 +45,7 @@ export const useCustomerBalanceListStore = defineStore('customerBalanceList', {
const matchMulti = (selectedSet, value) => {
if (!selectedSet.size) return true
const normalized = normalizeText(value)
if (!normalized) return true
if (!normalized) return selectedSet.has('-')
return selectedSet.has(normalized)
}
@@ -254,23 +254,24 @@ export const useCustomerBalanceListStore = defineStore('customerBalanceList', {
.map(o => o.value)
.filter(v => !excludedCariIlkGrup.has(normalizeText(v)))
const excludedRisk = new Set([
normalizeText('avukat'),
normalizeText('orta risk'),
normalizeText('yuksek risk')
])
this.filters.riskDurumu = this.riskDurumuOptions
.map(o => o.value)
.filter(v => !excludedRisk.has(normalizeText(v)))
this.filters.riskDurumu = []
}
}
})
function uniqueOptions (rows, field) {
function uniqueOptions (rows, field, opts = {}) {
const includeDash = !!opts.includeDash
const set = new Set()
if (includeDash) set.add('-')
for (const r of rows) {
const v = String(r[field] || '').trim()
if (v) set.add(v)
if (v) {
set.add(v)
continue
}
if (includeDash) {
set.add('-')
}
}
return Array.from(set)