0.1.0 #2

Merged
mfnefd merged 38 commits from dev into main 2024-12-09 04:27:05 +04:00
7 changed files with 89 additions and 64 deletions
Showing only changes of commit 169a042075 - Show all commits

View File

@ -6,16 +6,21 @@ import Header from './components/main/Header.vue';
<a-layout class="layout"> <a-layout class="layout">
<Header /> <Header />
<a-layout-content> <a-layout-content>
<a-flex gap="middle" vertical>
<RouterView /> <RouterView />
</a-flex>
</a-layout-content> </a-layout-content>
</a-layout> </a-layout>
</template> </template>
<style scoped> <style scoped>
main { main {
padding: 36px; display: flex;
margin: 14px; justify-content: center;
padding: 5vh;
}
.base-page {
display: flex;
flex-direction: column;
min-width: 80dvw;
} }
</style> </style>

View File

@ -42,6 +42,8 @@ const onDelete = (key: string) => {
</script> </script>
<template> <template>
<div class="base-page">
<h1>Группы расходов</h1>
<SpendingGroupManager :refreshData="refreshData" /> <SpendingGroupManager :refreshData="refreshData" />
<a-table :dataSource="state" :columns="columns" v-if="isReady"> <a-table :dataSource="state" :columns="columns" v-if="isReady">
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
@ -62,6 +64,7 @@ const onDelete = (key: string) => {
<div v-else> <div v-else>
<a-spin size="large" /> <a-spin size="large" />
</div> </div>
</div>
</template> </template>
<style scoped> <style scoped>

View File

@ -47,6 +47,8 @@ const onDelete = (key: string) => {
</script> </script>
<template> <template>
<div class="base-page">
<h1>История изменений баланса</h1>
<ChangeRecordMenu :refreshData="refreshData" /> <ChangeRecordMenu :refreshData="refreshData" />
<a-table :dataSource="state" :columns="columns" v-if="isReady" > <a-table :dataSource="state" :columns="columns" v-if="isReady" >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
@ -64,8 +66,11 @@ const onDelete = (key: string) => {
<div v-else> <div v-else>
<a-spin size="large" /> <a-spin size="large" />
</div> </div>
</div>
</template> </template>
<style scoped> <style scoped>
.layout {
}
</style> </style>

View File

@ -52,7 +52,8 @@ const onDelete = (key: string) => {
</script> </script>
<template> <template>
<h1>Планы группы </h1> <div class="base-page">
<h1>Планы группы</h1>
<PlanManager :groupId="groupId" :refreshData="refreshData"/> <PlanManager :groupId="groupId" :refreshData="refreshData"/>
<a-table :dataSource="state" :columns="columns" v-if="isReady"> <a-table :dataSource="state" :columns="columns" v-if="isReady">
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
@ -70,6 +71,7 @@ const onDelete = (key: string) => {
<div v-else> <div v-else>
<a-spin size="large" /> <a-spin size="large" />
</div> </div>
</div>
</template> </template>
<style scoped> <style scoped>

View File

@ -20,6 +20,7 @@
label="Группа расходов" label="Группа расходов"
name="spendingGroupId" name="spendingGroupId"
v-if="isReady" v-if="isReady"
:rules="[{ required: true, message: 'Пожалуйста, выберите группу расходов' }]"
> >
<a-select v-model:value="formState.spendingGroupId" :disabled="disabled"> <a-select v-model:value="formState.spendingGroupId" :disabled="disabled">
@ -35,12 +36,13 @@
<a-form-item <a-form-item
name="changedAt" name="changedAt"
label="Дата" label="Дата"
:rules="[{ required: true, message: 'Пожалуйста, выберите дату' }]"
> >
<a-date-picker v-model:value="pickedChangedAt" /> <a-date-picker v-model:value="pickedChangedAt" />
</a-form-item> </a-form-item>
<a-form-item> <a-form-item>
<a-button html-type="submit" type="primary">Сохранить</a-button> <a-button html-type="submit" :disabled="disabledForm" type="primary">Сохранить</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-space> </a-space>
@ -49,7 +51,6 @@
import { computed, inject, reactive, ref } from 'vue'; import { computed, inject, reactive, ref } from 'vue';
import { ChangeRecordDto, SpendingGroupViewModel } from '../../core/api/data-contracts'; import { ChangeRecordDto, SpendingGroupViewModel } from '../../core/api/data-contracts';
import { useUserStore } from '../../store'; import { useUserStore } from '../../store';
import router from '../../router';
import { ChangeRecordService } from '../../core/services/change-record-service'; import { ChangeRecordService } from '../../core/services/change-record-service';
import { GroupService } from '../../core/services/group-service'; import { GroupService } from '../../core/services/group-service';
import { useAsyncState } from '@vueuse/core'; import { useAsyncState } from '@vueuse/core';
@ -70,7 +71,7 @@ const { state: groupList, isReady } = useAsyncState(() => groupService.getList()
const pickedChangedAt = ref<Dayjs>(); const pickedChangedAt = ref<Dayjs>();
const formState = reactive<ChangeRecordDto>({ const formState = reactive<ChangeRecordDto>({
userId: store.user.id, userId: store.user.id,
sum: 0, sum: -1,
changedAt: new Date().toISOString(), changedAt: new Date().toISOString(),
spendingGroupId: null spendingGroupId: null
}); });
@ -88,5 +89,7 @@ const onFinishFailed = (errorInfo: any) => {
const disabled = computed(() => { const disabled = computed(() => {
return formState.sum && formState.sum >= 0; return formState.sum && formState.sum >= 0;
}); });
const disabledForm = computed(() => {
return !(formState.sum && formState.changedAt && (formState.spendingGroupId || formState.sum > 0));
})
</script> </script>

View File

@ -33,15 +33,14 @@
</a-form-item> </a-form-item>
<a-form-item> <a-form-item>
<a-button html-type="submit" type="primary">Добавить</a-button> <a-button :disabled="disabledForm" html-type="submit" type="primary">Добавить</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-space> </a-space>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { inject, reactive, ref } from 'vue'; import { computed, inject, reactive, ref } from 'vue';
import { SpendingPlanDto } from '../../core/api/data-contracts'; import { SpendingPlanDto } from '../../core/api/data-contracts';
import { ChangeRecordService } from '../../core/services/change-record-service';
import { Dayjs } from 'dayjs'; import { Dayjs } from 'dayjs';
import { PlanService } from '../../core/services/plans-service'; import { PlanService } from '../../core/services/plans-service';
@ -74,4 +73,8 @@ const onFinish = async (values: any) => {
const onFinishFailed = (errorInfo: any) => { const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo); console.log('Failed:', errorInfo);
}; };
const disabledForm = computed(() => {
return !(formState.sum && formState.startAt && formState.endAt);
});
</script> </script>

View File

@ -15,13 +15,13 @@
<a-input v-model:value="formState.name" /> <a-input v-model:value="formState.name" />
</a-form-item> </a-form-item>
<a-form-item> <a-form-item>
<a-button html-type="submit" type="primary">Сохранить</a-button> <a-button :disabled="disabledForm" html-type="submit" type="primary">Сохранить</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-space> </a-space>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { inject, reactive } from 'vue'; import { computed, inject, reactive } from 'vue';
import { useUserStore } from '../../store'; import { useUserStore } from '../../store';
import { GroupService } from '../../core/services/group-service'; import { GroupService } from '../../core/services/group-service';
import { SpendingGroupDto } from '../../core/api/data-contracts'; import { SpendingGroupDto } from '../../core/api/data-contracts';
@ -50,4 +50,8 @@ const onFinish = async (values: any) => {
const onFinishFailed = (errorInfo: any) => { const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo); console.log('Failed:', errorInfo);
}; };
const disabledForm = computed(() => {
return !formState.name;
});
</script> </script>