Skip to content

Commit 84d91c5

Browse files
authored
feat: agreements on page (#206)
1 parent 0a65327 commit 84d91c5

6 files changed

Lines changed: 142 additions & 5 deletions

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<template>
2+
<ActiveCard>
3+
<div class="flex flex-row gap-2 items-center">
4+
<UIcon name="i-lucide-scroll" class="size-8 text-primary" />
5+
6+
<div v-if="agreement.isActive" class="flex flex-row items-center gap-1.5 text-primary">
7+
<UIcon
8+
name="i-lucide-book-check"
9+
class="size-8"
10+
/>
11+
<p class="max-w-22 text-sm/4 font-bold">
12+
Активный
13+
</p>
14+
</div>
15+
</div>
16+
17+
<h3 class="text-xl/5 font-bold">
18+
№ {{ agreement.internalId }}
19+
</h3>
20+
21+
<div>
22+
{{ agreement.legalEntity?.name }}
23+
</div>
24+
25+
<div>
26+
<div v-if="agreement.concludedAt" class="w-full text-base/5 font-normal">
27+
Заключен: {{ format(new Date(agreement.concludedAt), 'd MMMM yyyy', { locale: ru }) }}
28+
</div>
29+
30+
<div v-if="agreement.willEndAt" class="w-full text-base/5 font-normal">
31+
Заканчивается: {{ format(new Date(agreement.willEndAt), 'd MMMM yyyy', { locale: ru }) }}
32+
</div>
33+
</div>
34+
35+
<div>
36+
<div v-if="agreement.royalty" class="w-full text-base/5 font-normal">
37+
Роялти: {{ agreement.royalty }}%, минимум {{ agreement.minRoyaltyPerMonth }} ₽
38+
</div>
39+
40+
<div v-if="agreement.royalty" class="w-full text-base/5 font-normal">
41+
Роспатент: {{ getPatentStatus(agreement.patentStatus) }}
42+
</div>
43+
</div>
44+
45+
<div v-if="agreement.comment" class="w-full text-base/5 text-muted font-normal whitespace-pre-wrap break-words line-clamp-5">
46+
{{ agreement.comment }}
47+
</div>
48+
49+
<!-- <div class="flex justify-between items-center">
50+
<div class="flex flex-row gap-4">
51+
<div class="flex flex-row gap-1.5 items-center text-muted">
52+
<UIcon name="i-lucide-message-circle" class="size-5" />
53+
<p>{{ epic?.comments.length }}</p>
54+
</div>
55+
</div>
56+
57+
<time
58+
:datetime="epic.createdAt"
59+
class="text-sm text-muted"
60+
v-text="format(new Date(epic.createdAt), 'от d MMMM yyyy', { locale: ru })"
61+
/>
62+
</div> -->
63+
</ActiveCard>
64+
</template>
65+
66+
<script setup lang="ts">
67+
import type { PartnerAgreementWithAllData } from '~/stores/partner'
68+
import { getPatentStatus } from '#shared/utils/helpers'
69+
import { format } from 'date-fns'
70+
import { ru } from 'date-fns/locale/ru'
71+
72+
defineProps<{
73+
agreement: PartnerAgreementWithAllData
74+
}>()
75+
</script>

apps/atrium-telegram/app/components/flow/ItemCard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
{{ item.title }}
2828
</h3>
2929

30-
<div class="w-full text-base/5 font-normal whitespace-pre-wrap break-words line-clamp-12">
30+
<div class="w-full text-base/5 font-normal whitespace-pre-wrap break-words line-clamp-8">
3131
{{ item.description }}
3232
</div>
3333

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<template>
2+
<PageContainer>
3+
<SectionTitle :title="`Договор № ${agreement?.internalId}`" />
4+
5+
<PartnerAgreementCard v-if="agreement" :agreement="agreement" />
6+
</PageContainer>
7+
</template>
8+
9+
<script setup lang="ts">
10+
definePageMeta({
11+
name: 'agreement-agreementId',
12+
canReturn: true,
13+
})
14+
15+
const { params } = useRoute('agreement-agreementId')
16+
17+
const partnerStore = usePartnerStore()
18+
const agreement = computed(() => partnerStore.agreements.find((agreement) => agreement.id === params.agreementId))
19+
</script>
Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,35 @@
11
<template>
22
<PageContainer>
3-
<SectionTitle title="Реестр договоров" />
3+
<div class="flex flex-row gap-2.5 items-center">
4+
<SectionTitle title="Договоры" />
5+
<UBadge
6+
v-if="filteredAgreements.length"
7+
size="sm"
8+
color="primary"
9+
variant="soft"
10+
class="min-w-6 justify-center"
11+
>
12+
{{ filteredAgreements.length }}
13+
</UBadge>
14+
</div>
415

5-
<div>Чуть позже</div>
16+
<div class="flex flex-col gap-2.5">
17+
<div class="flex flex-col gap-4">
18+
<NuxtLink
19+
v-for="agreement in filteredAgreements"
20+
:key="agreement.id"
21+
:to="`/agreement/${agreement.id}`"
22+
class="motion-preset-slide-left"
23+
>
24+
<PartnerAgreementCard :agreement="agreement" />
25+
</NuxtLink>
26+
</div>
27+
</div>
628
</PageContainer>
729
</template>
30+
31+
<script setup lang="ts">
32+
const partnerStore = usePartnerStore()
33+
34+
const filteredAgreements = computed(() => partnerStore.agreements.toSorted((a, b) => new Date(b.concludedAt ?? '').getTime() - new Date(a.concludedAt ?? '').getTime()))
35+
</script>

apps/atrium-telegram/app/pages/navigation.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const { vibrate } = useFeedback()
2424
2525
const items = ref([
2626
{
27-
label: 'Реестр договоров',
27+
label: 'Договоры',
2828
to: '/agreement',
2929
icon: 'i-lucide-list-checks',
3030
onClick: () => vibrate(),

apps/atrium-telegram/shared/utils/helpers.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { UserGender } from '@roll-stack/database'
1+
import type { AgreementPatentStatus, UserGender } from '@roll-stack/database'
22
import type { Resolution } from '../services/task'
33

44
export function pluralizationRu(int: number, array: [string, string, string]): string {
@@ -45,3 +45,18 @@ export function getResolutionForSelect(): { value: Resolution, label: string, ic
4545
{ value: 'unknown', label: 'Не ясно, есть вопросы', icon: 'i-lucide-circle-help' },
4646
]
4747
}
48+
49+
export function getPatentStatus(status: AgreementPatentStatus): string {
50+
switch (status) {
51+
case 'not_paid':
52+
return 'Не оплачен'
53+
case 'in_work':
54+
return 'В работе'
55+
case 'on_registration':
56+
return 'На регистрации'
57+
case 'registered':
58+
return 'Зарегистрирован'
59+
default:
60+
return ''
61+
}
62+
}

0 commit comments

Comments
 (0)