chore: Update deployment server IP and path, and add date sorting for planned transactions.

This commit is contained in:
xds
2025-12-10 15:08:46 +03:00
parent 69ca7ae985
commit c27231dc13
2 changed files with 44 additions and 44 deletions

View File

@@ -1,6 +1,6 @@
ssh root@213.226.71.138 " ssh root@31.59.58.220 "
cd /root/luminic/front/app && cd /root/luminic/app/front &&
git pull && git pull &&
npm run build && npm run build &&
cp -r dist/* /var/www/app.luminic.space/ cp -r dist/* /var/www/app.luminic.space/

View File

@@ -1,14 +1,14 @@
<script setup lang="ts"> <script setup lang="ts">
import {useSpaceStore} from "@/stores/spaceStore"; import { useSpaceStore } from "@/stores/spaceStore";
import {onMounted, ref} from "vue"; import { onMounted, ref } from "vue";
import {Checkbox, Divider} from "primevue"; import { Checkbox, Divider } from "primevue";
import {useToast} from "primevue/usetoast"; import { useToast } from "primevue/usetoast";
import {Transaction, UpdateTransactionDTO} from "@/models/transaction"; import { Transaction, UpdateTransactionDTO } from "@/models/transaction";
import {TransactionFilters, TransactionService} from "@/services/transactions-service"; import { TransactionFilters, TransactionService } from "@/services/transactions-service";
import {formatAmount, formatDate} from "@/utils/utils"; import { formatAmount, formatDate } from "@/utils/utils";
import {useRouter} from "vue-router"; import { useRouter } from "vue-router";
import {TransactionKind} from "@/models/enums"; import { TransactionKind } from "@/models/enums";
import {useToolbarStore} from "@/stores/toolbar-store"; import { useToolbarStore } from "@/stores/toolbar-store";
const toast = useToast(); const toast = useToast();
const router = useRouter(); const router = useRouter();
@@ -67,23 +67,24 @@ const fetchData = async (fetchPlanned: boolean = true, fetchInstant: boolean = t
try { try {
// Готовим промисы // Готовим промисы
const plannedPromise: Promise<Transaction[]> = const plannedPromise: Promise<Transaction[]> =
fetchPlanned fetchPlanned
? transactionService.getTransactions(spaceStore.selectedSpaceId, { ? transactionService.getTransactions(spaceStore.selectedSpaceId, {
kind: TransactionKind.PLANNING, kind: TransactionKind.PLANNING,
isDone: showIsDone.value ? undefined : false, isDone: showIsDone.value ? undefined : false,
offset: plannedOffset.value, offset: plannedOffset.value,
limit: plannedLimit.value, limit: plannedLimit.value,
} as TransactionFilters) // никаких `as TransactionFilters`, если поля опциональные sorts: [{ "sortBy": "date", "sortDirection": "ASC" }]
: Promise.resolve(plannedTransactions.value) } as TransactionFilters) // никаких `as TransactionFilters`, если поля опциональные
: Promise.resolve(plannedTransactions.value)
const instantPromise: Promise<Transaction[]> = const instantPromise: Promise<Transaction[]> =
fetchInstant fetchInstant
? transactionService.getTransactions(spaceStore.selectedSpaceId, { ? transactionService.getTransactions(spaceStore.selectedSpaceId, {
kind: TransactionKind.INSTANT, kind: TransactionKind.INSTANT,
offset: instantOffset.value, offset: instantOffset.value,
limit: instantLimit.value, limit: instantLimit.value,
} as TransactionFilters) } as TransactionFilters)
: Promise.resolve(instantTransactions.value) : Promise.resolve(instantTransactions.value)
const [planned, instant] = await Promise.all([plannedPromise, instantPromise]) const [planned, instant] = await Promise.all([plannedPromise, instantPromise])
@@ -132,22 +133,23 @@ onMounted(async () => {
<div class="flex flex-row justify-between"> <div class="flex flex-row justify-between">
<span class="text-xl !font-semibold !pl-2">Planned transactions</span> <span class="text-xl !font-semibold !pl-2">Planned transactions</span>
<div class="flex flex-row gap-2 items-center"> <div class="flex flex-row gap-2 items-center">
<Checkbox v-model="showIsDone" binary value=" Показывать выполненные" @change="plannedOffset = 0;fetchData(true, false, true)"/> <Checkbox v-model="showIsDone" binary value=" Показывать выполненные"
@change="plannedOffset = 0; fetchData(true, false, true)" />
<span class="!text-sm">Выполненные</span> <span class="!text-sm">Выполненные</span>
</div> </div>
</div> </div>
<div class="flex card"> <div class="flex card">
<span v-if="plannedTransactions.length==0">Looks like you haven't plan any transactions yet. <router-link <span v-if="plannedTransactions.length == 0">Looks like you haven't plan any transactions yet. <router-link
to="/transactions/create" class="!text-blue-400">Try to create some.</router-link></span> to="/transactions/create" class="!text-blue-400">Try to create some.</router-link></span>
<div v-else v-for="key in plannedTransactions.keys()" :key="plannedTransactions[key].id" <div v-else v-for="key in plannedTransactions.keys()" :key="plannedTransactions[key].id"
class="flex flex-col w-full gap-0 pl-5 items-start justify-items-center font-bold "> class="flex flex-col w-full gap-0 pl-5 items-start justify-items-center font-bold ">
<div class="flex flex-row w-full items-center gap-4"> <div class="flex flex-row w-full items-center gap-4">
<Checkbox v-model="plannedTransactions[key].isDone" binary class="text-3xl" <Checkbox v-model="plannedTransactions[key].isDone" binary class="text-3xl"
@change="setTransactionDone(plannedTransactions[key])"> @change="setTransactionDone(plannedTransactions[key])">
{{ plannedTransactions[key].category.icon }} {{ plannedTransactions[key].category.icon }}
</Checkbox> </Checkbox>
<div class="flex !flex-row !justify-between !w-full" <div class="flex !flex-row !justify-between !w-full"
@click="router.push(`/transactions/${plannedTransactions[key].id}/edit`)"> @click="router.push(`/transactions/${plannedTransactions[key].id}/edit`)">
<div class="flex flex-row items-center gap-2"> <div class="flex flex-row items-center gap-2">
<div class="flex flex-col !font-bold "> {{ plannedTransactions[key].comment }} <div class="flex flex-col !font-bold "> {{ plannedTransactions[key].comment }}
<div class="flex flex-row text-sm">{{ plannedTransactions[key].category.icon }} <div class="flex flex-row text-sm">{{ plannedTransactions[key].category.icon }}
@@ -160,11 +162,11 @@ onMounted(async () => {
<span class="text-lg !font-bold">{{ formatAmount(plannedTransactions[key].amount) }} </span> <span class="text-lg !font-bold">{{ formatAmount(plannedTransactions[key].amount) }} </span>
<span class="text-sm !font-extralight"> {{ formatDate(plannedTransactions[key].date) }}</span> <span class="text-sm !font-extralight"> {{ formatDate(plannedTransactions[key].date) }}</span>
</div> </div>
<i class="pi pi-angle-right !font-extralight"/> <i class="pi pi-angle-right !font-extralight" />
</div> </div>
</div> </div>
</div> </div>
<Divider v-if="key+1 !== plannedTransactions.length" class="!m-0 !py-3"/> <Divider v-if="key + 1 !== plannedTransactions.length" class="!m-0 !py-3" />
</div> </div>
</div> </div>
<button v-if="!plannedLastBatch" class="card w-fit " @click="fetchMorePlanned">Load more...</button> <button v-if="!plannedLastBatch" class="card w-fit " @click="fetchMorePlanned">Load more...</button>
@@ -172,17 +174,17 @@ onMounted(async () => {
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<span class="text-xl !font-semibold !pl-2">Instant transactions</span> <span class="text-xl !font-semibold !pl-2">Instant transactions</span>
<div class="flex card"> <div class="flex card">
<span v-if="instantTransactions.length==0">Looks like you haven't record any transaction yet.<router-link <span v-if="instantTransactions.length == 0">Looks like you haven't record any transaction yet.<router-link
to="/transactions/create" class="!text-blue-400">Try to create some.</router-link></span> to="/transactions/create" class="!text-blue-400">Try to create some.</router-link></span>
<div v-else v-for="key in instantTransactions.keys()" :key="instantTransactions[key].id" <div v-else v-for="key in instantTransactions.keys()" :key="instantTransactions[key].id"
@click="router.push(`/transactions/${instantTransactions[key].id}/edit`)" @click="router.push(`/transactions/${instantTransactions[key].id}/edit`)"
class="flex flex-col w-full gap-0 pl-5 items-start justify-items-center font-bold "> class="flex flex-col w-full gap-0 pl-5 items-start justify-items-center font-bold ">
<div class="flex flex-row w-full items-center justify-between"> <div class="flex flex-row w-full items-center justify-between">
<div class="flex flex-row items-center gap-2 "> <div class="flex flex-row items-center gap-2 ">
<span v-if="instantTransactions[key].category" class="text-3xl"> {{ <span v-if="instantTransactions[key].category" class="text-3xl"> {{
instantTransactions[key].category.icon instantTransactions[key].category.icon
}}</span> }}</span>
<i v-else class="pi pi-question !text-3xl"/> <i v-else class="pi pi-question !text-3xl" />
<div class="flex flex-col !font-bold "> {{ instantTransactions[key].comment }} <div class="flex flex-col !font-bold "> {{ instantTransactions[key].comment }}
<div v-if="instantTransactions[key].category" class="flex flex-row text-sm"> <div v-if="instantTransactions[key].category" class="flex flex-row text-sm">
{{ instantTransactions[key].category.name }} {{ instantTransactions[key].category.name }}
@@ -194,10 +196,10 @@ onMounted(async () => {
<span class="text-lg !font-bold ">{{ formatAmount(instantTransactions[key].amount) }} </span> <span class="text-lg !font-bold ">{{ formatAmount(instantTransactions[key].amount) }} </span>
<span class="text-sm !font-extralight"> {{ formatDate(instantTransactions[key].date) }}</span> <span class="text-sm !font-extralight"> {{ formatDate(instantTransactions[key].date) }}</span>
</div> </div>
<i class="pi pi-angle-right !font-extralight"/> <i class="pi pi-angle-right !font-extralight" />
</div> </div>
</div> </div>
<Divider v-if="key+1 !== instantTransactions.length" class="!m-0 !py-3"/> <Divider v-if="key + 1 !== instantTransactions.length" class="!m-0 !py-3" />
</div> </div>
</div> </div>
<button v-if="!instantLastBatch" class="card w-fit " @click="fetchMoreInstant">Load more...</button> <button v-if="!instantLastBatch" class="card w-fit " @click="fetchMoreInstant">Load more...</button>
@@ -207,6 +209,4 @@ onMounted(async () => {
</template> </template>
<style scoped> <style scoped></style>
</style>