@freteclick/quasar-financial-ui 1.0.113 → 1.0.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/common/Filters.vue +200 -29
- package/src/components/invoice/expense/CreateExpense.vue +519 -176
- package/src/components/invoice/expense/DetailExpense.vue +304 -39
- package/src/components/invoice/pay/InvoiceDetails.vue +327 -95
- package/src/components/invoice/pay/InvoiceSearching.vue +719 -146
- package/src/components/invoice/pay/details/InvoiceInvoice.vue +1 -1
- package/src/components/invoice/receive/InvoiceSearching.vue +621 -92
- package/src/pages/Invoice/Pay/Details.vue +18 -1
- package/src/pages/Invoice/Pay/Index.vue +136 -27
- package/src/pages/Invoice/Receive/Index.vue +15 -11
- package/src/store/modules/invoice/pay/actions.js +5 -4
- package/src/store/modules/invoice/pay/getters.js +2 -1
- package/src/store/modules/invoice/pay/index.js +1 -0
- package/src/store/modules/invoice/pay/mutation_types.js +2 -1
- package/src/store/modules/invoice/pay/mutations.js +5 -0
- package/src/store/modules/invoice/receive/actions.js +1 -0
- package/src/store/modules/invoice/receive/getters.js +2 -1
- package/src/store/modules/invoice/receive/index.js +1 -0
- package/src/store/modules/invoice/receive/mutation_types.js +2 -1
- package/src/store/modules/invoice/receive/mutations.js +5 -0
|
@@ -1,61 +1,209 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<q-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
<div class="receivables-page">
|
|
3
|
+
<div class="receivables-page__content">
|
|
4
|
+
<PageHeader
|
|
5
|
+
title="Contas a receber"
|
|
6
|
+
description="Acompanhe faturas, vencimentos e valores da sua empresa."
|
|
7
|
+
/>
|
|
8
|
+
|
|
9
|
+
<FilterBox
|
|
10
|
+
title="Filtros"
|
|
11
|
+
>
|
|
12
|
+
<Filters
|
|
13
|
+
:filters="filters"
|
|
14
|
+
variant="filter-box"
|
|
15
|
+
@onRequest="onFilterRequest"
|
|
16
|
+
/>
|
|
17
|
+
</FilterBox>
|
|
18
|
+
|
|
19
|
+
<section class="receivables-table-panel">
|
|
20
|
+
<div class="receivables-table-panel__heading">
|
|
21
|
+
<div>
|
|
22
|
+
<span class="receivables-section-eyebrow">LANÇAMENTOS</span>
|
|
23
|
+
<h2>Faturas de recebimento</h2>
|
|
24
|
+
</div>
|
|
25
|
+
<q-card flat class="receivables-summary__card" aria-label="Valor total dos recebíveis">
|
|
26
|
+
<div class="receivables-summary__icon receivables-summary__icon--green">
|
|
27
|
+
<q-icon name="payments" />
|
|
28
|
+
</div>
|
|
29
|
+
<div class="receivables-summary__copy">
|
|
30
|
+
<span>Valor total dos recebíveis</span>
|
|
31
|
+
<strong class="receivables-summary__amount">{{ filteredTotalAmount }}</strong>
|
|
32
|
+
<small>Soma de todas as faturas filtradas</small>
|
|
33
|
+
</div>
|
|
34
|
+
</q-card>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<q-table
|
|
38
|
+
flat
|
|
39
|
+
class="receivables-table"
|
|
40
|
+
:loading="isLoading"
|
|
41
|
+
:rows="data"
|
|
42
|
+
:columns="settings.columns"
|
|
43
|
+
v-model:pagination="pagination"
|
|
44
|
+
@request="onRequest"
|
|
45
|
+
row-key="id"
|
|
46
|
+
:visible-columns="settings.visibleColumns"
|
|
47
|
+
:rows-per-page-options="[10, 25, 50]"
|
|
48
|
+
:grid="$q.screen.lt.sm"
|
|
49
|
+
no-data-label="Nenhuma fatura encontrada"
|
|
50
|
+
no-results-label="Nenhuma fatura corresponde aos filtros"
|
|
51
|
+
loading-label="Carregando recebíveis..."
|
|
52
|
+
rows-per-page-label="Linhas por página"
|
|
53
|
+
>
|
|
54
|
+
<template v-slot:body="props">
|
|
55
|
+
<q-tr :props="props" class="receivables-table__row">
|
|
56
|
+
<q-td key="id" :props="props">
|
|
57
|
+
<q-btn
|
|
58
|
+
flat
|
|
59
|
+
dense
|
|
60
|
+
no-caps
|
|
61
|
+
icon="receipt_long"
|
|
62
|
+
:label="`#${props.row.id}`"
|
|
63
|
+
:to="{ name: 'ReceiveDetails', params: { id: props.row.id } }"
|
|
64
|
+
class="receivables-invoice-link"
|
|
65
|
+
/>
|
|
66
|
+
</q-td>
|
|
67
|
+
<q-td key="tipo" :props="props">
|
|
68
|
+
<q-badge class="receivables-type-badge">{{ props.row.tipo }}</q-badge>
|
|
69
|
+
</q-td>
|
|
70
|
+
<q-td key="pedidos" :props="props">
|
|
71
|
+
<q-btn
|
|
72
|
+
flat
|
|
73
|
+
dense
|
|
74
|
+
no-caps
|
|
75
|
+
icon="link"
|
|
76
|
+
color="primary"
|
|
77
|
+
:label="ordersLabel(props.row.pedidos)"
|
|
78
|
+
:disable="!props.row.pedidos.length"
|
|
79
|
+
@click="seeOrdersList(props.row.pedidos, props.row.id)"
|
|
80
|
+
class="receivables-orders-link"
|
|
81
|
+
/>
|
|
82
|
+
</q-td>
|
|
83
|
+
<q-td key="dataVencimento" :props="props">
|
|
84
|
+
<div class="receivables-date-cell">
|
|
85
|
+
<q-icon name="event" />
|
|
86
|
+
<span>{{ props.row.dataVencimentoLabel }}</span>
|
|
87
|
+
</div>
|
|
88
|
+
</q-td>
|
|
89
|
+
<q-td key="payer" :props="props">{{ props.row.payer }}</q-td>
|
|
90
|
+
<q-td key="client" :props="props">{{ props.row.client }}</q-td>
|
|
91
|
+
<q-td key="status" :props="props">
|
|
92
|
+
<q-badge
|
|
93
|
+
rounded
|
|
94
|
+
class="receivables-status-badge"
|
|
95
|
+
:style="statusStyle(props.row.color_status)"
|
|
96
|
+
>
|
|
97
|
+
<span class="receivables-status-badge__dot" />
|
|
98
|
+
{{ statusLabel(props.row.status) }}
|
|
99
|
+
</q-badge>
|
|
100
|
+
</q-td>
|
|
101
|
+
<q-td key="preco" :props="props" class="receivables-price-cell">
|
|
102
|
+
{{ props.cols[7].value }}
|
|
103
|
+
</q-td>
|
|
104
|
+
</q-tr>
|
|
105
|
+
</template>
|
|
106
|
+
|
|
107
|
+
<template v-slot:item="props">
|
|
108
|
+
<div class="col-12">
|
|
109
|
+
<q-card flat bordered class="receivables-mobile-card">
|
|
110
|
+
<div class="receivables-mobile-card__top">
|
|
111
|
+
<q-btn
|
|
112
|
+
flat
|
|
113
|
+
dense
|
|
114
|
+
no-caps
|
|
115
|
+
icon="receipt_long"
|
|
116
|
+
:label="`#${props.row.id}`"
|
|
117
|
+
:to="{ name: 'ReceiveDetails', params: { id: props.row.id } }"
|
|
118
|
+
class="receivables-invoice-link"
|
|
119
|
+
/>
|
|
120
|
+
<q-badge
|
|
121
|
+
rounded
|
|
122
|
+
class="receivables-status-badge"
|
|
123
|
+
:style="statusStyle(props.row.color_status)"
|
|
124
|
+
>
|
|
125
|
+
<span class="receivables-status-badge__dot" />
|
|
126
|
+
{{ statusLabel(props.row.status) }}
|
|
127
|
+
</q-badge>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="receivables-mobile-card__type">{{ props.row.tipo }}</div>
|
|
130
|
+
<div class="receivables-mobile-card__grid">
|
|
131
|
+
<div>
|
|
132
|
+
<span>Vencimento</span>
|
|
133
|
+
<strong>{{ props.row.dataVencimentoLabel }}</strong>
|
|
134
|
+
</div>
|
|
135
|
+
<div>
|
|
136
|
+
<span>Valor</span>
|
|
137
|
+
<strong>{{ props.cols[7].value }}</strong>
|
|
138
|
+
</div>
|
|
139
|
+
<div>
|
|
140
|
+
<span>Pagador</span>
|
|
141
|
+
<strong>{{ props.row.payer }}</strong>
|
|
142
|
+
</div>
|
|
143
|
+
<div>
|
|
144
|
+
<span>Cliente</span>
|
|
145
|
+
<strong>{{ props.row.client }}</strong>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
<div class="receivables-mobile-card__actions">
|
|
149
|
+
<q-btn
|
|
150
|
+
flat
|
|
151
|
+
dense
|
|
152
|
+
no-caps
|
|
153
|
+
icon="link"
|
|
154
|
+
color="primary"
|
|
155
|
+
:label="ordersLabel(props.row.pedidos)"
|
|
156
|
+
:disable="!props.row.pedidos.length"
|
|
157
|
+
@click="seeOrdersList(props.row.pedidos, props.row.id)"
|
|
158
|
+
/>
|
|
159
|
+
<q-btn
|
|
160
|
+
unelevated
|
|
161
|
+
dense
|
|
162
|
+
no-caps
|
|
163
|
+
color="primary"
|
|
164
|
+
label="Abrir fatura"
|
|
165
|
+
:to="{ name: 'ReceiveDetails', params: { id: props.row.id } }"
|
|
166
|
+
/>
|
|
167
|
+
</div>
|
|
168
|
+
</q-card>
|
|
169
|
+
</div>
|
|
170
|
+
</template>
|
|
171
|
+
</q-table>
|
|
172
|
+
</section>
|
|
173
|
+
</div>
|
|
32
174
|
|
|
33
175
|
<q-dialog v-model="dialogs.orders.visible" transition-show="scale" transition-hide="scale">
|
|
34
|
-
<q-card class="
|
|
35
|
-
<q-card-section>
|
|
36
|
-
<div
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
</div>
|
|
40
|
-
<q-space />
|
|
41
|
-
<q-btn icon="close" color="white" flat round dense v-close-popup />
|
|
176
|
+
<q-card class="receivables-orders-dialog">
|
|
177
|
+
<q-card-section class="receivables-orders-dialog__header">
|
|
178
|
+
<div>
|
|
179
|
+
<span>DETALHES DA FATURA</span>
|
|
180
|
+
<h3>Pedidos da fatura #{{ dialogs.orders.invoice }}</h3>
|
|
42
181
|
</div>
|
|
182
|
+
<q-btn icon="close" flat round dense v-close-popup aria-label="Fechar" />
|
|
43
183
|
</q-card-section>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
184
|
+
<div class="receivables-orders-dialog__list">
|
|
185
|
+
<q-list separator>
|
|
186
|
+
<q-item v-for="(orderId, index) in dialogs.orders.items" :key="index">
|
|
187
|
+
<q-item-section avatar>
|
|
188
|
+
<q-avatar color="blue-1" text-color="primary" icon="receipt" />
|
|
189
|
+
</q-item-section>
|
|
190
|
+
<q-item-section>Pedido #{{ orderId }}</q-item-section>
|
|
191
|
+
<q-item-section side>
|
|
192
|
+
<q-btn
|
|
193
|
+
flat
|
|
194
|
+
dense
|
|
195
|
+
no-caps
|
|
196
|
+
color="primary"
|
|
197
|
+
label="Abrir"
|
|
198
|
+
:to="{ name: 'OrderDetails', params: { id: orderId } }"
|
|
199
|
+
/>
|
|
200
|
+
</q-item-section>
|
|
201
|
+
</q-item>
|
|
202
|
+
</q-list>
|
|
203
|
+
</div>
|
|
57
204
|
</q-card>
|
|
58
205
|
</q-dialog>
|
|
206
|
+
|
|
59
207
|
</div>
|
|
60
208
|
</template>
|
|
61
209
|
|
|
@@ -67,6 +215,8 @@ import {
|
|
|
67
215
|
} from "@freteclick/quasar-common-ui/src/utils/formatter";
|
|
68
216
|
|
|
69
217
|
import { date } from "quasar";
|
|
218
|
+
import PageHeader from "@freteclick/quasar-common-ui/src/components/common/PageHeader.vue";
|
|
219
|
+
import FilterBox from "@freteclick/quasar-common-ui/src/components/common/FilterBox.vue";
|
|
70
220
|
import Filters from "../../common/Filters.vue";
|
|
71
221
|
|
|
72
222
|
const SETTINGS = {
|
|
@@ -89,18 +239,21 @@ const SETTINGS = {
|
|
|
89
239
|
return `#${val}`;
|
|
90
240
|
},
|
|
91
241
|
label: "ID",
|
|
242
|
+
sortable: false,
|
|
92
243
|
},
|
|
93
244
|
{
|
|
94
245
|
name: "tipo",
|
|
95
246
|
align: "left",
|
|
96
247
|
field: "tipo",
|
|
97
248
|
label: "Tipo",
|
|
249
|
+
sortable: false,
|
|
98
250
|
},
|
|
99
251
|
{
|
|
100
252
|
name: "pedidos",
|
|
101
253
|
align: "left",
|
|
102
254
|
field: "pedidos",
|
|
103
255
|
label: "Pedidos",
|
|
256
|
+
sortable: false,
|
|
104
257
|
},
|
|
105
258
|
{
|
|
106
259
|
name: "dataVencimento",
|
|
@@ -110,33 +263,38 @@ const SETTINGS = {
|
|
|
110
263
|
return formatDateYmdTodmY(val);
|
|
111
264
|
},
|
|
112
265
|
label: "Data vencimento",
|
|
266
|
+
sortable: false,
|
|
113
267
|
},
|
|
114
268
|
{
|
|
115
269
|
name: "payer",
|
|
116
270
|
field: "payer",
|
|
117
271
|
align: "left",
|
|
118
272
|
label: "Pagador",
|
|
273
|
+
sortable: false,
|
|
119
274
|
},
|
|
120
275
|
{
|
|
121
276
|
name: "client",
|
|
122
277
|
field: "client",
|
|
123
278
|
align: "left",
|
|
124
279
|
label: "Cliente",
|
|
280
|
+
sortable: false,
|
|
125
281
|
},
|
|
126
282
|
{
|
|
127
283
|
name: "status",
|
|
128
284
|
field: "status",
|
|
129
285
|
align: "left",
|
|
130
286
|
label: "Status",
|
|
287
|
+
sortable: false,
|
|
131
288
|
},
|
|
132
289
|
{
|
|
133
290
|
name: "preco",
|
|
134
291
|
field: "preco",
|
|
135
|
-
align: "
|
|
292
|
+
align: "right",
|
|
136
293
|
format: (val, row) => {
|
|
137
294
|
return formatMoney(val, "BRL", "pt-br");
|
|
138
295
|
},
|
|
139
296
|
label: "Preço",
|
|
297
|
+
sortable: false,
|
|
140
298
|
},
|
|
141
299
|
],
|
|
142
300
|
};
|
|
@@ -145,6 +303,8 @@ Object.freeze(SETTINGS);
|
|
|
145
303
|
|
|
146
304
|
export default {
|
|
147
305
|
components: {
|
|
306
|
+
PageHeader,
|
|
307
|
+
FilterBox,
|
|
148
308
|
Filters,
|
|
149
309
|
},
|
|
150
310
|
props: {
|
|
@@ -219,7 +379,7 @@ export default {
|
|
|
219
379
|
},
|
|
220
380
|
pagination: {
|
|
221
381
|
sortBy: "dataVencimento",
|
|
222
|
-
descending:
|
|
382
|
+
descending: true,
|
|
223
383
|
page: 1,
|
|
224
384
|
rowsPerPage: 10,
|
|
225
385
|
rowsNumber: 10,
|
|
@@ -234,8 +394,16 @@ export default {
|
|
|
234
394
|
violations: "receiveInvoice/violations",
|
|
235
395
|
items: "receiveInvoice/items",
|
|
236
396
|
totalItems: "receiveInvoice/totalItems",
|
|
397
|
+
totalAmount: "receiveInvoice/totalAmount",
|
|
237
398
|
myCompany: "people/currentCompany",
|
|
238
399
|
}),
|
|
400
|
+
|
|
401
|
+
filteredTotalAmount() {
|
|
402
|
+
if (this.totalAmount === null || this.totalAmount === undefined) return "—";
|
|
403
|
+
|
|
404
|
+
return formatMoney(Number(this.totalAmount) || 0, "BRL", "pt-br");
|
|
405
|
+
},
|
|
406
|
+
|
|
239
407
|
},
|
|
240
408
|
|
|
241
409
|
watch: {
|
|
@@ -256,34 +424,34 @@ export default {
|
|
|
256
424
|
items(items) {
|
|
257
425
|
if (!items) return;
|
|
258
426
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
tipo: this.$t(item.invoice_type),
|
|
427
|
+
this.data = items.map((item) => {
|
|
428
|
+
const orderEntries = Array.isArray(item.order) ? item.order : [];
|
|
429
|
+
const orders = orderEntries
|
|
430
|
+
.map((entry) => {
|
|
431
|
+
const orderUri = entry && entry.order && entry.order["@id"];
|
|
432
|
+
return orderUri ? String(orderUri).replace(/[^0-9]/g, "") : null;
|
|
433
|
+
})
|
|
434
|
+
.filter(Boolean);
|
|
435
|
+
const firstOrder =
|
|
436
|
+
(orderEntries.find((entry) => entry && entry.order) || {}).order || {};
|
|
437
|
+
const invoiceUri = item["@id"] || "";
|
|
438
|
+
|
|
439
|
+
return {
|
|
440
|
+
"@id": invoiceUri,
|
|
441
|
+
id: String(invoiceUri).replace(/[^0-9]/g, "") || item.id,
|
|
442
|
+
tipo: item.invoice_type ? this.$t(item.invoice_type) : "—",
|
|
276
443
|
pedidos: orders,
|
|
277
|
-
color_status: item.status.color,
|
|
278
|
-
dataVencimento: item.dueDate,
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
444
|
+
color_status: (item.status && item.status.color) || "",
|
|
445
|
+
dataVencimento: item.dueDate || "",
|
|
446
|
+
dataVencimentoLabel: item.dueDate
|
|
447
|
+
? formatDateYmdTodmY(item.dueDate)
|
|
448
|
+
: "—",
|
|
449
|
+
payer: (firstOrder.payer && firstOrder.payer.name) || "—",
|
|
450
|
+
client: (firstOrder.client && firstOrder.client.name) || "—",
|
|
451
|
+
status: (item.status && item.status.status) || "",
|
|
452
|
+
preco: item.price || 0,
|
|
453
|
+
};
|
|
454
|
+
});
|
|
287
455
|
},
|
|
288
456
|
},
|
|
289
457
|
|
|
@@ -300,6 +468,24 @@ export default {
|
|
|
300
468
|
this.dialogs.orders.visible = true;
|
|
301
469
|
},
|
|
302
470
|
|
|
471
|
+
ordersLabel(orders) {
|
|
472
|
+
const count = Array.isArray(orders) ? orders.length : 0;
|
|
473
|
+
return count === 1 ? "1 pedido" : `${count} pedidos`;
|
|
474
|
+
},
|
|
475
|
+
|
|
476
|
+
statusLabel(status) {
|
|
477
|
+
return status ? this.$t(`invoice.statuses.${status}`) : "—";
|
|
478
|
+
},
|
|
479
|
+
|
|
480
|
+
statusStyle(color) {
|
|
481
|
+
return color ? { color } : {};
|
|
482
|
+
},
|
|
483
|
+
|
|
484
|
+
onFilterRequest() {
|
|
485
|
+
this.pagination.page = 1;
|
|
486
|
+
this.onRequest({ pagination: this.pagination });
|
|
487
|
+
},
|
|
488
|
+
|
|
303
489
|
formatDate(dateString) {
|
|
304
490
|
if (dateString)
|
|
305
491
|
return date.formatDate(
|
|
@@ -311,20 +497,21 @@ export default {
|
|
|
311
497
|
onRequest(props) {
|
|
312
498
|
if (this.isLoading) return;
|
|
313
499
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
500
|
+
const requestedPagination =
|
|
501
|
+
props && props.pagination ? props.pagination : this.pagination;
|
|
502
|
+
const page = Number(requestedPagination.page) || 1;
|
|
503
|
+
const rowsPerPage = Number(requestedPagination.rowsPerPage) || 10;
|
|
317
504
|
|
|
318
|
-
|
|
505
|
+
const params = { itemsPerPage: rowsPerPage, page };
|
|
319
506
|
|
|
320
507
|
params.from = this.formatDate(this.filters.date.from) || "";
|
|
321
508
|
params.to = this.formatDate(this.filters.date.to) || "";
|
|
322
|
-
params.orderType = this.filters.orderType.value || "";
|
|
509
|
+
params.orderType = (this.filters.orderType && this.filters.orderType.value) || "";
|
|
323
510
|
|
|
324
511
|
if (this.filters.text != null && this.filters.text.length > 0) {
|
|
325
512
|
if (this.filters.text.length < 2) return;
|
|
326
513
|
|
|
327
|
-
params
|
|
514
|
+
params.searchBy = this.filters.text.trim();
|
|
328
515
|
}
|
|
329
516
|
|
|
330
517
|
if (this.filters.status != null) {
|
|
@@ -345,15 +532,357 @@ export default {
|
|
|
345
532
|
params["order.order"] = this.orderId;
|
|
346
533
|
}
|
|
347
534
|
|
|
348
|
-
params["invoice[dueDate]"] = "desc";
|
|
349
|
-
|
|
350
535
|
this.getItems(params).then(() => {
|
|
351
|
-
this.pagination
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
536
|
+
this.pagination = {
|
|
537
|
+
...this.pagination,
|
|
538
|
+
page,
|
|
539
|
+
rowsPerPage,
|
|
540
|
+
sortBy: "dataVencimento",
|
|
541
|
+
descending: true,
|
|
542
|
+
};
|
|
355
543
|
});
|
|
356
544
|
},
|
|
357
545
|
},
|
|
358
546
|
};
|
|
359
547
|
</script>
|
|
548
|
+
|
|
549
|
+
<style lang="scss" scoped>
|
|
550
|
+
.receivables-page {
|
|
551
|
+
width: 100%;
|
|
552
|
+
color: #1b2d43;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.receivables-page__content {
|
|
556
|
+
display: grid;
|
|
557
|
+
width: min(100%, 1480px);
|
|
558
|
+
gap: 20px;
|
|
559
|
+
margin: 0 auto;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
.receivables-summary__card {
|
|
563
|
+
display: flex;
|
|
564
|
+
width: min(100%, 410px);
|
|
565
|
+
min-width: 280px;
|
|
566
|
+
align-items: center;
|
|
567
|
+
gap: 12px;
|
|
568
|
+
margin-left: auto;
|
|
569
|
+
padding: 12px 16px;
|
|
570
|
+
border: 1px solid #e7edf4;
|
|
571
|
+
border-radius: 14px;
|
|
572
|
+
background: #fbfdff;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
.receivables-summary__icon {
|
|
576
|
+
display: grid;
|
|
577
|
+
width: 46px;
|
|
578
|
+
height: 46px;
|
|
579
|
+
flex: 0 0 auto;
|
|
580
|
+
place-items: center;
|
|
581
|
+
border-radius: 14px;
|
|
582
|
+
font-size: 22px;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
.receivables-summary__icon--green {
|
|
586
|
+
color: #27805a;
|
|
587
|
+
background: #e8f7ef;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.receivables-summary__copy {
|
|
591
|
+
display: flex;
|
|
592
|
+
min-width: 0;
|
|
593
|
+
flex-direction: column;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
.receivables-summary__copy > span {
|
|
597
|
+
color: #6f7f91;
|
|
598
|
+
font-size: 12px;
|
|
599
|
+
font-weight: 600;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
.receivables-summary__copy strong {
|
|
603
|
+
overflow: hidden;
|
|
604
|
+
margin-top: 2px;
|
|
605
|
+
color: #1a2e45;
|
|
606
|
+
font-size: 24px;
|
|
607
|
+
font-weight: 750;
|
|
608
|
+
letter-spacing: -0.035em;
|
|
609
|
+
text-overflow: ellipsis;
|
|
610
|
+
white-space: nowrap;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
.receivables-summary__copy strong.receivables-summary__amount {
|
|
614
|
+
font-size: clamp(17px, 1.5vw, 22px);
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
.receivables-summary__copy small {
|
|
618
|
+
margin-top: 1px;
|
|
619
|
+
color: #93a0af;
|
|
620
|
+
font-size: 11px;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
.receivables-table-panel {
|
|
624
|
+
overflow: hidden;
|
|
625
|
+
border: 1px solid #e5ebf3;
|
|
626
|
+
border-radius: 19px;
|
|
627
|
+
background: #fff;
|
|
628
|
+
box-shadow: 0 12px 32px rgba(25, 48, 78, 0.05);
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
.receivables-table-panel__heading {
|
|
632
|
+
display: flex;
|
|
633
|
+
align-items: center;
|
|
634
|
+
justify-content: space-between;
|
|
635
|
+
gap: 20px;
|
|
636
|
+
padding: 23px 25px 19px;
|
|
637
|
+
border-bottom: 1px solid #edf1f6;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
.receivables-section-eyebrow {
|
|
641
|
+
color: #7890aa;
|
|
642
|
+
font-size: 10px;
|
|
643
|
+
font-weight: 750;
|
|
644
|
+
letter-spacing: 0.13em;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
.receivables-table-panel__heading h2 {
|
|
648
|
+
margin: 5px 0 0;
|
|
649
|
+
color: #1a2e45;
|
|
650
|
+
font-size: 19px;
|
|
651
|
+
font-weight: 720;
|
|
652
|
+
letter-spacing: -0.02em;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
.receivables-table {
|
|
656
|
+
color: #33465b;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
.receivables-table :deep(.q-table thead tr) {
|
|
660
|
+
height: 48px;
|
|
661
|
+
background: #f8fafc;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.receivables-table :deep(.q-table thead th) {
|
|
665
|
+
padding: 0 16px;
|
|
666
|
+
color: #7b8b9c;
|
|
667
|
+
font-size: 10px;
|
|
668
|
+
font-weight: 750;
|
|
669
|
+
letter-spacing: 0.07em;
|
|
670
|
+
text-transform: uppercase;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
.receivables-table :deep(.q-table tbody td) {
|
|
674
|
+
height: 64px;
|
|
675
|
+
padding: 10px 16px;
|
|
676
|
+
border-color: #edf1f5;
|
|
677
|
+
font-size: 12px;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
.receivables-table :deep(.q-table tbody tr) {
|
|
681
|
+
transition: background-color 0.15s ease;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.receivables-table :deep(.q-table tbody tr:hover) {
|
|
685
|
+
background: #f8fbff;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.receivables-table :deep(.q-table__bottom) {
|
|
689
|
+
min-height: 58px;
|
|
690
|
+
padding: 8px 18px;
|
|
691
|
+
border-top: 1px solid #edf1f5;
|
|
692
|
+
color: #718096;
|
|
693
|
+
font-size: 12px;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
.receivables-invoice-link {
|
|
697
|
+
border-radius: 8px;
|
|
698
|
+
color: #245d9c;
|
|
699
|
+
font-size: 12px;
|
|
700
|
+
font-weight: 750;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.receivables-invoice-link :deep(.q-icon) {
|
|
704
|
+
font-size: 17px;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
.receivables-type-badge {
|
|
708
|
+
padding: 6px 9px;
|
|
709
|
+
border-radius: 7px;
|
|
710
|
+
color: #526b86;
|
|
711
|
+
background: #eef3f8;
|
|
712
|
+
font-size: 10px;
|
|
713
|
+
font-weight: 650;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
.receivables-orders-link {
|
|
717
|
+
border-radius: 8px;
|
|
718
|
+
font-size: 11px;
|
|
719
|
+
font-weight: 650;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.receivables-date-cell {
|
|
723
|
+
display: flex;
|
|
724
|
+
align-items: center;
|
|
725
|
+
gap: 7px;
|
|
726
|
+
white-space: nowrap;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
.receivables-date-cell .q-icon {
|
|
730
|
+
color: #8294a8;
|
|
731
|
+
font-size: 16px;
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
.receivables-status-badge {
|
|
735
|
+
display: inline-flex;
|
|
736
|
+
align-items: center;
|
|
737
|
+
gap: 6px;
|
|
738
|
+
padding: 6px 9px;
|
|
739
|
+
border-radius: 20px;
|
|
740
|
+
background: #f0f4f7;
|
|
741
|
+
font-size: 10px;
|
|
742
|
+
font-weight: 700;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
.receivables-status-badge__dot {
|
|
746
|
+
width: 6px;
|
|
747
|
+
height: 6px;
|
|
748
|
+
border-radius: 50%;
|
|
749
|
+
background: currentColor;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
.receivables-price-cell {
|
|
753
|
+
color: #1e3e5e;
|
|
754
|
+
font-weight: 750;
|
|
755
|
+
white-space: nowrap;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
.receivables-mobile-card {
|
|
759
|
+
margin: 4px 0;
|
|
760
|
+
padding: 16px;
|
|
761
|
+
border-color: #e7edf4;
|
|
762
|
+
border-radius: 15px;
|
|
763
|
+
background: #fff;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
.receivables-mobile-card__top,
|
|
767
|
+
.receivables-mobile-card__actions {
|
|
768
|
+
display: flex;
|
|
769
|
+
align-items: center;
|
|
770
|
+
justify-content: space-between;
|
|
771
|
+
gap: 10px;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.receivables-mobile-card__type {
|
|
775
|
+
margin: 6px 0 14px;
|
|
776
|
+
color: #728398;
|
|
777
|
+
font-size: 11px;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
.receivables-mobile-card__grid {
|
|
781
|
+
display: grid;
|
|
782
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
783
|
+
gap: 13px 10px;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
.receivables-mobile-card__grid > div {
|
|
787
|
+
display: flex;
|
|
788
|
+
min-width: 0;
|
|
789
|
+
flex-direction: column;
|
|
790
|
+
gap: 4px;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.receivables-mobile-card__grid span {
|
|
794
|
+
color: #8795a5;
|
|
795
|
+
font-size: 10px;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
.receivables-mobile-card__grid strong {
|
|
799
|
+
overflow: hidden;
|
|
800
|
+
color: #263b52;
|
|
801
|
+
font-size: 12px;
|
|
802
|
+
font-weight: 650;
|
|
803
|
+
text-overflow: ellipsis;
|
|
804
|
+
white-space: nowrap;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
.receivables-mobile-card__actions {
|
|
808
|
+
margin-top: 16px;
|
|
809
|
+
padding-top: 12px;
|
|
810
|
+
border-top: 1px solid #edf1f5;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.receivables-orders-dialog {
|
|
814
|
+
display: flex;
|
|
815
|
+
width: min(100%, 520px);
|
|
816
|
+
max-height: min(82vh, 760px);
|
|
817
|
+
flex-direction: column;
|
|
818
|
+
overflow: hidden;
|
|
819
|
+
border-radius: 18px;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
.receivables-orders-dialog__list {
|
|
823
|
+
min-height: 0;
|
|
824
|
+
flex: 1 1 auto;
|
|
825
|
+
overflow-y: auto;
|
|
826
|
+
overscroll-behavior: contain;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
.receivables-orders-dialog__header {
|
|
830
|
+
display: flex;
|
|
831
|
+
align-items: center;
|
|
832
|
+
justify-content: space-between;
|
|
833
|
+
gap: 12px;
|
|
834
|
+
padding: 20px 22px;
|
|
835
|
+
color: #fff;
|
|
836
|
+
background: #173f68;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
.receivables-orders-dialog__header span {
|
|
840
|
+
color: #c7d9eb;
|
|
841
|
+
font-size: 9px;
|
|
842
|
+
font-weight: 750;
|
|
843
|
+
letter-spacing: 0.12em;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
.receivables-orders-dialog__header h3 {
|
|
847
|
+
margin: 5px 0 0;
|
|
848
|
+
font-size: 17px;
|
|
849
|
+
font-weight: 700;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
.receivables-orders-dialog__header .q-btn {
|
|
853
|
+
color: #fff;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
@media (max-width: 600px) {
|
|
857
|
+
.receivables-page__content {
|
|
858
|
+
gap: 14px;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
.receivables-summary__card {
|
|
862
|
+
padding: 14px 16px;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
.receivables-summary__icon {
|
|
866
|
+
width: 40px;
|
|
867
|
+
height: 40px;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
.receivables-table-panel {
|
|
871
|
+
border-radius: 16px;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
.receivables-table-panel__heading {
|
|
875
|
+
align-items: flex-start;
|
|
876
|
+
flex-direction: column;
|
|
877
|
+
gap: 12px;
|
|
878
|
+
padding: 18px 17px 14px;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
.receivables-summary__card {
|
|
882
|
+
width: 100%;
|
|
883
|
+
min-width: 0;
|
|
884
|
+
margin-left: 0;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
}
|
|
888
|
+
</style>
|