@freteclick/quasar-financial-ui 1.0.113 → 1.0.114

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.
@@ -1,56 +1,163 @@
1
1
  <template>
2
- <div>
3
- <div class="row q-mb-md q-gutter-sm justify-end">
4
- <q-btn :label="$t('Cancelar despesa')" icon="cancel" color="negative" @click="removeExpense"
5
- :loading="deleting" />
6
- </div>
7
- <q-form @submit="editExpense">
8
- <div class="row">
9
- <div class="col-xs-12 q-mb-md">
10
- <q-select stack-label emit-value map-options lazy-rules v-model="item.category"
11
- :label="$t('Categoria da despesa')" :options="categories"
12
- :rules="[(val) => val !== null || 'Selecione uma categoria']" />
13
- </div>
14
- <div class="col-xs-12 q-mb-md">
15
- <q-input lazy-rules stack-label v-model="item.description" type="text" :label="$t('Descrição da despesa')"
16
- class="q-mt-md" :rules="[isInvalid()]" />
2
+ <div class="expense-detail-form">
3
+ <header class="expense-detail-form__header">
4
+ <div class="expense-detail-form__heading">
5
+ <span class="expense-detail-form__eyebrow">GESTÃO DA DESPESA</span>
6
+ <h2>Dados da conta a pagar</h2>
7
+ <p>Atualize as informações e mantenha o histórico financeiro organizado.</p>
8
+ </div>
9
+ <q-btn
10
+ outline
11
+ no-caps
12
+ rounded
13
+ color="negative"
14
+ icon="cancel"
15
+ :label="$t('Cancelar despesa')"
16
+ :loading="deleting"
17
+ :disable="saving"
18
+ @click="removeExpense"
19
+ />
20
+ </header>
21
+
22
+ <q-form @submit="editExpense" class="expense-detail-form__form">
23
+ <div class="expense-detail-form__grid">
24
+ <div class="expense-detail-form__field expense-detail-form__field--category">
25
+ <q-select
26
+ outlined
27
+ stack-label
28
+ emit-value
29
+ map-options
30
+ lazy-rules
31
+ v-model="item.category"
32
+ :label="$t('Categoria da despesa')"
33
+ :options="categories"
34
+ :rules="[(val) => val !== null || 'Selecione uma categoria']"
35
+ />
17
36
  </div>
18
- <div class="col-xs-12 q-mb-md">
19
- <q-select v-if="item.provider" stack-label emit-value map-options lazy-rules v-model="item.provider"
20
- :label="$t('Fornecedor')" :options="providers"
21
- :rules="[(val) => val !== null || 'Selecione um fornecedor']" />
22
- <PeopleAutocomplete v-else :source="searchPeople" option-value="optionValue" :isLoading="isSearching"
23
- label="Definir o fornecedor" @selected="onSelectClient" placeholder="Pesquisar..." />
24
-
25
- <q-btn v-if="item.provider" @click="item.provider = null" align="right">
26
- Alterar
27
- </q-btn>
37
+
38
+ <div class="expense-detail-form__field expense-detail-form__field--status">
39
+ <q-select
40
+ outlined
41
+ stack-label
42
+ emit-value
43
+ map-options
44
+ lazy-rules
45
+ v-model="item.status"
46
+ :label="$t('Status')"
47
+ :options="statuses"
48
+ :rules="[(val) => val !== null || 'Selecione um status']"
49
+ />
28
50
  </div>
29
- <div class="col-xs-12 q-mb-md">
30
- <q-input lazy-rules stack-label reverse-fill-mask v-model="item.amount" prefix="R$" type="text"
31
- :label="$t('Valor')" class="q-mt-md" :rules="[isInvalid()]" mask="#,##" fill-mask="0" />
51
+
52
+ <div class="expense-detail-form__field expense-detail-form__field--description">
53
+ <q-input
54
+ outlined
55
+ lazy-rules
56
+ stack-label
57
+ v-model="item.description"
58
+ type="text"
59
+ :label="$t('Descrição da despesa')"
60
+ :rules="[isInvalid()]"
61
+ />
32
62
  </div>
33
- <div class="col-xs-12 q-mb-md">
34
- <q-input stack-label v-model="item.dueDate" :label="$t('Data primeiro vencimento')" mask="##/##/####"
35
- class="q-mb-sm" :rules="[isInvalid('date')]">
63
+
64
+ <div class="expense-detail-form__field expense-detail-form__field--date">
65
+ <q-input
66
+ outlined
67
+ stack-label
68
+ v-model="item.dueDate"
69
+ :label="$t('Data primeiro vencimento')"
70
+ mask="##/##/####"
71
+ :rules="[isInvalid('date')]"
72
+ >
36
73
  <template v-slot:append>
37
74
  <q-icon name="event" class="cursor-pointer">
38
75
  <q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
39
- <q-date v-model="item.dueDate" mask="DD/MM/YYYY" @update:model-value="() => $refs.qDateProxy1.hide()" />
76
+ <q-date
77
+ v-model="item.dueDate"
78
+ mask="DD/MM/YYYY"
79
+ @update:model-value="() => $refs.qDateProxy1.hide()"
80
+ />
40
81
  </q-popup-proxy>
41
82
  </q-icon>
42
83
  </template>
43
84
  </q-input>
44
85
  </div>
45
- <div class="col-xs-12 q-mb-md">
46
- <q-select stack-label emit-value map-options lazy-rules v-model="item.status" :label="$t('Status')"
47
- :options="statuses" :rules="[(val) => val !== null || 'Selecione um status']" />
86
+
87
+ <div class="expense-detail-form__field expense-detail-form__field--provider">
88
+ <div class="expense-detail-form__provider">
89
+ <q-select
90
+ v-if="item.provider"
91
+ outlined
92
+ stack-label
93
+ emit-value
94
+ map-options
95
+ lazy-rules
96
+ v-model="item.provider"
97
+ :label="$t('Fornecedor')"
98
+ :options="providers"
99
+ :rules="[(val) => val !== null || 'Selecione um fornecedor']"
100
+ />
101
+ <PeopleAutocomplete
102
+ v-else
103
+ class="expense-detail-form__autocomplete"
104
+ :source="searchPeople"
105
+ option-value="optionValue"
106
+ :isLoading="isSearching"
107
+ label="Definir o fornecedor"
108
+ placeholder="Pesquisar..."
109
+ @selected="onSelectClient"
110
+ />
111
+ <q-btn
112
+ v-if="item.provider"
113
+ flat
114
+ round
115
+ dense
116
+ color="primary"
117
+ icon="edit"
118
+ aria-label="Alterar fornecedor"
119
+ class="expense-detail-form__provider-edit"
120
+ @click="item.provider = null"
121
+ >
122
+ <q-tooltip>Alterar fornecedor</q-tooltip>
123
+ </q-btn>
124
+ </div>
48
125
  </div>
126
+
127
+ <div class="expense-detail-form__field expense-detail-form__field--amount">
128
+ <q-input
129
+ outlined
130
+ lazy-rules
131
+ stack-label
132
+ reverse-fill-mask
133
+ v-model="item.amount"
134
+ prefix="R$"
135
+ type="text"
136
+ :label="$t('Valor')"
137
+ :rules="[isInvalid()]"
138
+ mask="#,##"
139
+ fill-mask="0"
140
+ />
141
+ </div>
142
+
49
143
  </div>
50
- <div class="row justify-end">
51
- <q-btn :loading="saving" icon="save" type="submit" :label="$t('Salvar')" size="md" color="primary"
52
- class="q-mt-md" />
53
- </div>
144
+
145
+ <footer class="expense-detail-form__footer">
146
+ <div class="expense-detail-form__hint">
147
+ <q-icon name="info_outline" />
148
+ <span>Confira os valores e vencimentos antes de salvar.</span>
149
+ </div>
150
+ <q-btn
151
+ unelevated
152
+ no-caps
153
+ :loading="saving"
154
+ :disable="deleting"
155
+ icon="save"
156
+ type="submit"
157
+ :label="$t('Salvar alterações')"
158
+ color="primary"
159
+ />
160
+ </footer>
54
161
  </q-form>
55
162
  </div>
56
163
  </template>
@@ -391,3 +498,161 @@ export default {
391
498
  },
392
499
  };
393
500
  </script>
501
+
502
+ <style lang="scss" scoped>
503
+ .expense-detail-form {
504
+ width: 100%;
505
+ min-width: 0;
506
+ color: #1b2d43;
507
+ }
508
+
509
+ .expense-detail-form__header {
510
+ display: flex;
511
+ align-items: flex-start;
512
+ justify-content: space-between;
513
+ gap: 18px;
514
+ padding: 4px 2px 20px;
515
+ border-bottom: 1px solid #edf1f6;
516
+ }
517
+
518
+ .expense-detail-form__heading {
519
+ min-width: 0;
520
+ }
521
+
522
+ .expense-detail-form__eyebrow {
523
+ color: #7890aa;
524
+ font-size: 10px;
525
+ font-weight: 750;
526
+ letter-spacing: 0.12em;
527
+ }
528
+
529
+ .expense-detail-form__heading h2 {
530
+ margin: 5px 0 0;
531
+ color: #1a2e45;
532
+ font-size: 20px;
533
+ font-weight: 750;
534
+ letter-spacing: -0.025em;
535
+ }
536
+
537
+ .expense-detail-form__heading p {
538
+ margin: 6px 0 0;
539
+ color: #7b8b9c;
540
+ font-size: 12px;
541
+ }
542
+
543
+ .expense-detail-form__form {
544
+ padding: 22px 2px 2px;
545
+ }
546
+
547
+ .expense-detail-form__grid {
548
+ display: grid;
549
+ grid-template-columns: repeat(2, minmax(0, 1fr));
550
+ grid-template-areas:
551
+ "category status"
552
+ "description date"
553
+ "provider amount";
554
+ gap: 18px 20px;
555
+ }
556
+
557
+ .expense-detail-form__field {
558
+ min-width: 0;
559
+ }
560
+
561
+ .expense-detail-form__field--category {
562
+ grid-area: category;
563
+ }
564
+
565
+ .expense-detail-form__field--status {
566
+ grid-area: status;
567
+ }
568
+
569
+ .expense-detail-form__field--description {
570
+ grid-area: description;
571
+ }
572
+
573
+ .expense-detail-form__field--date {
574
+ grid-area: date;
575
+ }
576
+
577
+ .expense-detail-form__field--provider {
578
+ grid-area: provider;
579
+ }
580
+
581
+ .expense-detail-form__field--amount {
582
+ grid-area: amount;
583
+ }
584
+
585
+ .expense-detail-form__provider {
586
+ display: flex;
587
+ min-width: 0;
588
+ align-items: center;
589
+ gap: 8px;
590
+ }
591
+
592
+ .expense-detail-form__provider :deep(.q-field),
593
+ .expense-detail-form__autocomplete {
594
+ flex: 1 1 auto;
595
+ min-width: 0;
596
+ }
597
+
598
+ .expense-detail-form__footer {
599
+ display: flex;
600
+ align-items: center;
601
+ justify-content: space-between;
602
+ gap: 16px;
603
+ margin-top: 22px;
604
+ padding-top: 18px;
605
+ border-top: 1px solid #edf1f6;
606
+ }
607
+
608
+ .expense-detail-form__hint {
609
+ display: flex;
610
+ align-items: center;
611
+ gap: 7px;
612
+ color: #8191a3;
613
+ font-size: 11px;
614
+ }
615
+
616
+ .expense-detail-form__hint .q-icon {
617
+ color: #6f89a5;
618
+ font-size: 17px;
619
+ }
620
+
621
+ .expense-detail-form__footer .q-btn,
622
+ .expense-detail-form__header > .q-btn {
623
+ min-height: 40px;
624
+ border-radius: 10px;
625
+ font-weight: 700;
626
+ }
627
+
628
+ @media (max-width: 700px) {
629
+ .expense-detail-form__header {
630
+ flex-direction: column;
631
+ }
632
+
633
+ .expense-detail-form__header > .q-btn {
634
+ width: 100%;
635
+ }
636
+
637
+ .expense-detail-form__grid {
638
+ grid-template-columns: minmax(0, 1fr);
639
+ grid-template-areas:
640
+ "category"
641
+ "status"
642
+ "description"
643
+ "date"
644
+ "provider"
645
+ "amount";
646
+ gap: 14px;
647
+ }
648
+
649
+ .expense-detail-form__footer {
650
+ align-items: stretch;
651
+ flex-direction: column;
652
+ }
653
+
654
+ .expense-detail-form__footer .q-btn {
655
+ width: 100%;
656
+ }
657
+ }
658
+ </style>