Restructure manager navigation and views
This commit is contained in:
@@ -19,8 +19,8 @@ const centerCapsule = computed<NavItem[]>(() => {
|
|||||||
|
|
||||||
if (meQuery.result.value?.me?.role === 'MANAGER') {
|
if (meQuery.result.value?.me?.role === 'MANAGER') {
|
||||||
items.push(
|
items.push(
|
||||||
{ to: '/clients', label: 'Клиенты' },
|
{ to: '/clients', label: 'Пользователи' },
|
||||||
{ to: '/client-orders', label: 'Заказы клиентов' },
|
{ to: '/client-orders', label: 'Заказы' },
|
||||||
{ to: '/bonus-system', label: 'Бонусы' },
|
{ to: '/bonus-system', label: 'Бонусы' },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,6 +174,30 @@ export enum LoginChannel {
|
|||||||
Telegram = 'TELEGRAM'
|
Telegram = 'TELEGRAM'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ManagerBonusBalance = {
|
||||||
|
__typename?: 'ManagerBonusBalance';
|
||||||
|
balance: Scalars['Float']['output'];
|
||||||
|
companyName?: Maybe<Scalars['String']['output']>;
|
||||||
|
email: Scalars['String']['output'];
|
||||||
|
fullName: Scalars['String']['output'];
|
||||||
|
pendingWithdrawalAmount: Scalars['Float']['output'];
|
||||||
|
transactionsCount: Scalars['Int']['output'];
|
||||||
|
userId: Scalars['ID']['output'];
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ManagerUser = {
|
||||||
|
__typename?: 'ManagerUser';
|
||||||
|
companyName?: Maybe<Scalars['String']['output']>;
|
||||||
|
createdAt: Scalars['DateTime']['output'];
|
||||||
|
email: Scalars['String']['output'];
|
||||||
|
fullName: Scalars['String']['output'];
|
||||||
|
id: Scalars['ID']['output'];
|
||||||
|
inn?: Maybe<Scalars['String']['output']>;
|
||||||
|
lastOrderAt?: Maybe<Scalars['DateTime']['output']>;
|
||||||
|
orderCount: Scalars['Int']['output'];
|
||||||
|
role: UserRole;
|
||||||
|
};
|
||||||
|
|
||||||
export type MessengerConnection = {
|
export type MessengerConnection = {
|
||||||
__typename?: 'MessengerConnection';
|
__typename?: 'MessengerConnection';
|
||||||
avatarAvailable: Scalars['Boolean']['output'];
|
avatarAvailable: Scalars['Boolean']['output'];
|
||||||
@@ -476,8 +500,10 @@ export type Query = {
|
|||||||
__typename?: 'Query';
|
__typename?: 'Query';
|
||||||
clientProducts: Array<Product>;
|
clientProducts: Array<Product>;
|
||||||
healthcheck: Scalars['String']['output'];
|
healthcheck: Scalars['String']['output'];
|
||||||
|
managerBonusBalances: Array<ManagerBonusBalance>;
|
||||||
managerNotificationHistory: Array<NotificationHistoryItem>;
|
managerNotificationHistory: Array<NotificationHistoryItem>;
|
||||||
managerOrders: Array<Order>;
|
managerOrders: Array<Order>;
|
||||||
|
managerUsers: Array<ManagerUser>;
|
||||||
me?: Maybe<User>;
|
me?: Maybe<User>;
|
||||||
myCart: Cart;
|
myCart: Cart;
|
||||||
myCounterpartyProfile?: Maybe<CounterpartyProfile>;
|
myCounterpartyProfile?: Maybe<CounterpartyProfile>;
|
||||||
@@ -778,6 +804,11 @@ export type CreateReferralMutationVariables = Exact<{
|
|||||||
|
|
||||||
export type CreateReferralMutation = { __typename?: 'Mutation', createReferral: { __typename?: 'ReferralLink', id: string, referrerId: string, refereeId: string, createdAt: any } };
|
export type CreateReferralMutation = { __typename?: 'Mutation', createReferral: { __typename?: 'ReferralLink', id: string, referrerId: string, refereeId: string, createdAt: any } };
|
||||||
|
|
||||||
|
export type ManagerBonusBalancesQueryVariables = Exact<{ [key: string]: never; }>;
|
||||||
|
|
||||||
|
|
||||||
|
export type ManagerBonusBalancesQuery = { __typename?: 'Query', managerBonusBalances: Array<{ __typename?: 'ManagerBonusBalance', userId: string, email: string, fullName: string, companyName?: string | null, balance: number, pendingWithdrawalAmount: number, transactionsCount: number }> };
|
||||||
|
|
||||||
export type ManagerFinalizeOrderMutationVariables = Exact<{
|
export type ManagerFinalizeOrderMutationVariables = Exact<{
|
||||||
orderId: Scalars['ID']['input'];
|
orderId: Scalars['ID']['input'];
|
||||||
decision: Decision;
|
decision: Decision;
|
||||||
@@ -793,6 +824,11 @@ export type ManagerOrdersQueryVariables = Exact<{
|
|||||||
|
|
||||||
export type ManagerOrdersQuery = { __typename?: 'Query', managerOrders: Array<{ __typename?: 'Order', id: string, code: string, status: OrderStatus, kind: OrderKind, customerId: string, deliveryAddress?: string | null, deliveryTerms?: string | null, deliveryFee?: number | null, totalPrice?: number | null, createdAt: any, items: Array<{ __typename?: 'OrderItem', id: string, productName: string, quantity: number }> }> };
|
export type ManagerOrdersQuery = { __typename?: 'Query', managerOrders: Array<{ __typename?: 'Order', id: string, code: string, status: OrderStatus, kind: OrderKind, customerId: string, deliveryAddress?: string | null, deliveryTerms?: string | null, deliveryFee?: number | null, totalPrice?: number | null, createdAt: any, items: Array<{ __typename?: 'OrderItem', id: string, productName: string, quantity: number }> }> };
|
||||||
|
|
||||||
|
export type ManagerUsersQueryVariables = Exact<{ [key: string]: never; }>;
|
||||||
|
|
||||||
|
|
||||||
|
export type ManagerUsersQuery = { __typename?: 'Query', managerUsers: Array<{ __typename?: 'ManagerUser', id: string, email: string, fullName: string, role: UserRole, companyName?: string | null, inn?: string | null, createdAt: any, orderCount: number, lastOrderAt?: any | null }> };
|
||||||
|
|
||||||
export type ReferralStatsQueryVariables = Exact<{ [key: string]: never; }>;
|
export type ReferralStatsQueryVariables = Exact<{ [key: string]: never; }>;
|
||||||
|
|
||||||
|
|
||||||
@@ -1558,6 +1594,39 @@ export function useCreateReferralMutation(options: VueApolloComposable.UseMutati
|
|||||||
return VueApolloComposable.useMutation<CreateReferralMutation, CreateReferralMutationVariables>(CreateReferralDocument, options);
|
return VueApolloComposable.useMutation<CreateReferralMutation, CreateReferralMutationVariables>(CreateReferralDocument, options);
|
||||||
}
|
}
|
||||||
export type CreateReferralMutationCompositionFunctionResult = VueApolloComposable.UseMutationReturn<CreateReferralMutation, CreateReferralMutationVariables>;
|
export type CreateReferralMutationCompositionFunctionResult = VueApolloComposable.UseMutationReturn<CreateReferralMutation, CreateReferralMutationVariables>;
|
||||||
|
export const ManagerBonusBalancesDocument = gql`
|
||||||
|
query ManagerBonusBalances {
|
||||||
|
managerBonusBalances {
|
||||||
|
userId
|
||||||
|
email
|
||||||
|
fullName
|
||||||
|
companyName
|
||||||
|
balance
|
||||||
|
pendingWithdrawalAmount
|
||||||
|
transactionsCount
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __useManagerBonusBalancesQuery__
|
||||||
|
*
|
||||||
|
* To run a query within a Vue component, call `useManagerBonusBalancesQuery` and pass it any options that fit your needs.
|
||||||
|
* When your component renders, `useManagerBonusBalancesQuery` returns an object from Apollo Client that contains result, loading and error properties
|
||||||
|
* you can use to render your UI.
|
||||||
|
*
|
||||||
|
* @param options that will be passed into the query, supported options are listed on: https://v4.apollo.vuejs.org/guide-composable/query.html#options;
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result, loading, error } = useManagerBonusBalancesQuery();
|
||||||
|
*/
|
||||||
|
export function useManagerBonusBalancesQuery(options: VueApolloComposable.UseQueryOptions<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables> | VueCompositionApi.Ref<VueApolloComposable.UseQueryOptions<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables>> | ReactiveFunction<VueApolloComposable.UseQueryOptions<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables>> = {}) {
|
||||||
|
return VueApolloComposable.useQuery<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables>(ManagerBonusBalancesDocument, {}, options);
|
||||||
|
}
|
||||||
|
export function useManagerBonusBalancesLazyQuery(options: VueApolloComposable.UseQueryOptions<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables> | VueCompositionApi.Ref<VueApolloComposable.UseQueryOptions<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables>> | ReactiveFunction<VueApolloComposable.UseQueryOptions<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables>> = {}) {
|
||||||
|
return VueApolloComposable.useLazyQuery<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables>(ManagerBonusBalancesDocument, {}, options);
|
||||||
|
}
|
||||||
|
export type ManagerBonusBalancesQueryCompositionFunctionResult = VueApolloComposable.UseQueryReturn<ManagerBonusBalancesQuery, ManagerBonusBalancesQueryVariables>;
|
||||||
export const ManagerFinalizeOrderDocument = gql`
|
export const ManagerFinalizeOrderDocument = gql`
|
||||||
mutation ManagerFinalizeOrder($orderId: ID!, $decision: Decision!) {
|
mutation ManagerFinalizeOrder($orderId: ID!, $decision: Decision!) {
|
||||||
managerFinalizeOrder(orderId: $orderId, decision: $decision) {
|
managerFinalizeOrder(orderId: $orderId, decision: $decision) {
|
||||||
@@ -1634,6 +1703,41 @@ export function useManagerOrdersLazyQuery(variables: ManagerOrdersQueryVariables
|
|||||||
return VueApolloComposable.useLazyQuery<ManagerOrdersQuery, ManagerOrdersQueryVariables>(ManagerOrdersDocument, variables, options);
|
return VueApolloComposable.useLazyQuery<ManagerOrdersQuery, ManagerOrdersQueryVariables>(ManagerOrdersDocument, variables, options);
|
||||||
}
|
}
|
||||||
export type ManagerOrdersQueryCompositionFunctionResult = VueApolloComposable.UseQueryReturn<ManagerOrdersQuery, ManagerOrdersQueryVariables>;
|
export type ManagerOrdersQueryCompositionFunctionResult = VueApolloComposable.UseQueryReturn<ManagerOrdersQuery, ManagerOrdersQueryVariables>;
|
||||||
|
export const ManagerUsersDocument = gql`
|
||||||
|
query ManagerUsers {
|
||||||
|
managerUsers {
|
||||||
|
id
|
||||||
|
email
|
||||||
|
fullName
|
||||||
|
role
|
||||||
|
companyName
|
||||||
|
inn
|
||||||
|
createdAt
|
||||||
|
orderCount
|
||||||
|
lastOrderAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __useManagerUsersQuery__
|
||||||
|
*
|
||||||
|
* To run a query within a Vue component, call `useManagerUsersQuery` and pass it any options that fit your needs.
|
||||||
|
* When your component renders, `useManagerUsersQuery` returns an object from Apollo Client that contains result, loading and error properties
|
||||||
|
* you can use to render your UI.
|
||||||
|
*
|
||||||
|
* @param options that will be passed into the query, supported options are listed on: https://v4.apollo.vuejs.org/guide-composable/query.html#options;
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result, loading, error } = useManagerUsersQuery();
|
||||||
|
*/
|
||||||
|
export function useManagerUsersQuery(options: VueApolloComposable.UseQueryOptions<ManagerUsersQuery, ManagerUsersQueryVariables> | VueCompositionApi.Ref<VueApolloComposable.UseQueryOptions<ManagerUsersQuery, ManagerUsersQueryVariables>> | ReactiveFunction<VueApolloComposable.UseQueryOptions<ManagerUsersQuery, ManagerUsersQueryVariables>> = {}) {
|
||||||
|
return VueApolloComposable.useQuery<ManagerUsersQuery, ManagerUsersQueryVariables>(ManagerUsersDocument, {}, options);
|
||||||
|
}
|
||||||
|
export function useManagerUsersLazyQuery(options: VueApolloComposable.UseQueryOptions<ManagerUsersQuery, ManagerUsersQueryVariables> | VueCompositionApi.Ref<VueApolloComposable.UseQueryOptions<ManagerUsersQuery, ManagerUsersQueryVariables>> | ReactiveFunction<VueApolloComposable.UseQueryOptions<ManagerUsersQuery, ManagerUsersQueryVariables>> = {}) {
|
||||||
|
return VueApolloComposable.useLazyQuery<ManagerUsersQuery, ManagerUsersQueryVariables>(ManagerUsersDocument, {}, options);
|
||||||
|
}
|
||||||
|
export type ManagerUsersQueryCompositionFunctionResult = VueApolloComposable.UseQueryReturn<ManagerUsersQuery, ManagerUsersQueryVariables>;
|
||||||
export const ReferralStatsDocument = gql`
|
export const ReferralStatsDocument = gql`
|
||||||
query ReferralStats {
|
query ReferralStats {
|
||||||
referralStats {
|
referralStats {
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useQuery } from '@vue/apollo-composable';
|
import { useQuery } from '@vue/apollo-composable';
|
||||||
import {
|
import {
|
||||||
|
ManagerBonusBalancesDocument,
|
||||||
ReferralStatsDocument,
|
ReferralStatsDocument,
|
||||||
|
type ManagerBonusBalancesQuery,
|
||||||
type ReferralStatsQuery,
|
type ReferralStatsQuery,
|
||||||
} from '~/composables/graphql/generated';
|
} from '~/composables/graphql/generated';
|
||||||
|
|
||||||
@@ -9,28 +11,66 @@ definePageMeta({
|
|||||||
middleware: ['manager-only'],
|
middleware: ['manager-only'],
|
||||||
});
|
});
|
||||||
|
|
||||||
type TransactionItem = ReferralStatsQuery['referralStats']['transactions'][number];
|
type BalanceItem = ManagerBonusBalancesQuery['managerBonusBalances'][number];
|
||||||
type WithdrawalItem = ReferralStatsQuery['referralStats']['pendingWithdrawals'][number];
|
type WithdrawalItem = ReferralStatsQuery['referralStats']['pendingWithdrawals'][number];
|
||||||
|
|
||||||
const bonusQuery = useQuery(ReferralStatsDocument);
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
const search = ref('');
|
const search = ref('');
|
||||||
|
|
||||||
const transactions = computed<TransactionItem[]>(() => bonusQuery.result.value?.referralStats.transactions ?? []);
|
const balancesQuery = useQuery(ManagerBonusBalancesDocument);
|
||||||
|
const bonusQuery = useQuery(ReferralStatsDocument);
|
||||||
|
|
||||||
|
const activeTab = computed<'balances' | 'withdrawals'>(() => (
|
||||||
|
route.query.tab === 'withdrawals' ? 'withdrawals' : 'balances'
|
||||||
|
));
|
||||||
|
|
||||||
|
function setTab(tab: 'balances' | 'withdrawals') {
|
||||||
|
void router.replace({
|
||||||
|
query: {
|
||||||
|
...route.query,
|
||||||
|
tab,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const balances = computed<BalanceItem[]>(() => balancesQuery.result.value?.managerBonusBalances ?? []);
|
||||||
const withdrawals = computed<WithdrawalItem[]>(() => bonusQuery.result.value?.referralStats.pendingWithdrawals ?? []);
|
const withdrawals = computed<WithdrawalItem[]>(() => bonusQuery.result.value?.referralStats.pendingWithdrawals ?? []);
|
||||||
|
|
||||||
const filteredTransactions = computed(() => {
|
const filteredBalances = computed(() => {
|
||||||
const query = search.value.trim().toLowerCase();
|
const query = search.value.trim().toLowerCase();
|
||||||
|
|
||||||
return transactions.value.filter((transaction) => {
|
return balances.value.filter((item) => {
|
||||||
if (!query) {
|
if (!query) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
transaction.userId,
|
item.fullName,
|
||||||
transaction.reason,
|
item.email,
|
||||||
transaction.orderId || '',
|
item.companyName || '',
|
||||||
String(transaction.amount),
|
String(item.balance),
|
||||||
|
String(item.pendingWithdrawalAmount),
|
||||||
|
]
|
||||||
|
.join(' ')
|
||||||
|
.toLowerCase()
|
||||||
|
.includes(query);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const filteredWithdrawals = computed(() => {
|
||||||
|
const query = search.value.trim().toLowerCase();
|
||||||
|
|
||||||
|
return withdrawals.value.filter((item) => {
|
||||||
|
if (!query) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
item.requesterId,
|
||||||
|
String(item.amount),
|
||||||
|
item.status,
|
||||||
|
item.reviewComment || '',
|
||||||
]
|
]
|
||||||
.join(' ')
|
.join(' ')
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
@@ -44,62 +84,79 @@ const filteredTransactions = computed(() => {
|
|||||||
<UiSectionSearchHero
|
<UiSectionSearchHero
|
||||||
v-model="search"
|
v-model="search"
|
||||||
title="Бонусы"
|
title="Бонусы"
|
||||||
search-placeholder="Пользователь, причина, заказ или сумма"
|
:search-placeholder="activeTab === 'balances' ? 'Пользователь, email, компания или сумма' : 'Пользователь, сумма или статус'"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="space-y-4">
|
<div class="tabs tabs-boxed w-fit bg-white">
|
||||||
<div class="surface-card rounded-3xl p-5">
|
<button
|
||||||
<h2 class="text-xl font-bold text-[#123824]">Заявки на вывод</h2>
|
class="tab"
|
||||||
|
:class="{ 'tab-active': activeTab === 'balances' }"
|
||||||
<div v-if="bonusQuery.loading.value" class="manager-empty-state mt-4">
|
@click="setTab('balances')"
|
||||||
Загружаем заявки...
|
>
|
||||||
</div>
|
Балансы
|
||||||
<div v-else-if="withdrawals.length === 0" class="manager-empty-state mt-4">
|
</button>
|
||||||
Активных заявок на вывод сейчас нет.
|
<button
|
||||||
</div>
|
class="tab"
|
||||||
<div v-else class="mt-4 space-y-3">
|
:class="{ 'tab-active': activeTab === 'withdrawals' }"
|
||||||
<article v-for="withdrawal in withdrawals" :key="withdrawal.id" class="rounded-2xl border border-[#d6ebde] bg-white px-4 py-4">
|
@click="setTab('withdrawals')"
|
||||||
<div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
|
>
|
||||||
<div class="space-y-1">
|
Заявки на выплату
|
||||||
<p class="text-sm font-semibold text-[#123824]">Пользователь: {{ withdrawal.requesterId }}</p>
|
</button>
|
||||||
<p class="text-sm text-[#355947]">Сумма: {{ withdrawal.amount }}</p>
|
|
||||||
<p class="text-xs text-[#5c7b69]">{{ new Date(withdrawal.createdAt).toLocaleString() }}</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<NuxtLink :to="`/bonus-system/withdrawals/${withdrawal.id}`" class="btn btn-accent btn-sm border-0">
|
|
||||||
Проверить вывод
|
|
||||||
</NuxtLink>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="surface-card rounded-3xl p-5">
|
|
||||||
<h2 class="text-xl font-bold text-[#123824]">История транзакций</h2>
|
|
||||||
|
|
||||||
<div v-if="bonusQuery.loading.value" class="manager-empty-state mt-4">
|
|
||||||
Загружаем историю...
|
|
||||||
</div>
|
|
||||||
<div v-else-if="filteredTransactions.length === 0" class="manager-empty-state mt-4">
|
|
||||||
Транзакции по текущему запросу не найдены.
|
|
||||||
</div>
|
|
||||||
<div v-else class="mt-4 space-y-3">
|
|
||||||
<article v-for="transaction in filteredTransactions" :key="transaction.id" class="rounded-2xl border border-[#d6ebde] bg-white px-4 py-4">
|
|
||||||
<div class="flex flex-col gap-2 md:flex-row md:items-start md:justify-between">
|
|
||||||
<div class="space-y-1">
|
|
||||||
<p class="text-sm font-semibold text-[#123824]">{{ transaction.reason }}</p>
|
|
||||||
<p class="text-sm text-[#5c7b69]">Пользователь: {{ transaction.userId }}</p>
|
|
||||||
<p v-if="transaction.orderId" class="text-sm text-[#5c7b69]">Заказ: {{ transaction.orderId }}</p>
|
|
||||||
<p class="text-xs text-[#5c7b69]">{{ new Date(transaction.createdAt).toLocaleString() }}</p>
|
|
||||||
</div>
|
|
||||||
<div class="text-sm font-semibold text-[#123824]">
|
|
||||||
{{ transaction.amount }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<template v-if="activeTab === 'balances'">
|
||||||
|
<div v-if="balancesQuery.loading.value" class="manager-empty-state">
|
||||||
|
Загружаем балансы...
|
||||||
|
</div>
|
||||||
|
<div v-else-if="filteredBalances.length === 0" class="manager-empty-state">
|
||||||
|
Балансы по текущему запросу не найдены.
|
||||||
|
</div>
|
||||||
|
<div v-else class="grid gap-4 lg:grid-cols-2 xl:grid-cols-3">
|
||||||
|
<article
|
||||||
|
v-for="item in filteredBalances"
|
||||||
|
:key="item.userId"
|
||||||
|
class="surface-card rounded-3xl p-5"
|
||||||
|
>
|
||||||
|
<div class="space-y-1">
|
||||||
|
<h2 class="text-lg font-bold text-[#123824]">{{ item.fullName }}</h2>
|
||||||
|
<p class="text-sm text-[#466653]">{{ item.email }}</p>
|
||||||
|
<p v-if="item.companyName" class="text-sm text-[#466653]">{{ item.companyName }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-4 space-y-2 text-sm text-[#355947]">
|
||||||
|
<p>Баланс: <span class="font-semibold text-[#123824]">{{ item.balance }}</span></p>
|
||||||
|
<p>В ожидании выплаты: {{ item.pendingWithdrawalAmount }}</p>
|
||||||
|
<p>Транзакций: {{ item.transactionsCount }}</p>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-else>
|
||||||
|
<div v-if="bonusQuery.loading.value" class="manager-empty-state">
|
||||||
|
Загружаем заявки...
|
||||||
|
</div>
|
||||||
|
<div v-else-if="filteredWithdrawals.length === 0" class="manager-empty-state">
|
||||||
|
Активных заявок на выплату сейчас нет.
|
||||||
|
</div>
|
||||||
|
<div v-else class="space-y-4">
|
||||||
|
<article
|
||||||
|
v-for="withdrawal in filteredWithdrawals"
|
||||||
|
:key="withdrawal.id"
|
||||||
|
class="surface-card rounded-3xl px-5 py-5"
|
||||||
|
>
|
||||||
|
<div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
|
||||||
|
<div class="space-y-1">
|
||||||
|
<p class="text-sm font-semibold text-[#123824]">Пользователь: {{ withdrawal.requesterId }}</p>
|
||||||
|
<p class="text-sm text-[#355947]">Сумма: {{ withdrawal.amount }}</p>
|
||||||
|
<p class="text-xs text-[#5c7b69]">{{ new Date(withdrawal.createdAt).toLocaleString() }}</p>
|
||||||
|
</div>
|
||||||
|
<NuxtLink :to="`/bonus-system/withdrawals/${withdrawal.id}`" class="btn btn-accent btn-sm border-0">
|
||||||
|
Проверить выплату
|
||||||
|
</NuxtLink>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useQuery } from '@vue/apollo-composable';
|
import { useQuery } from '@vue/apollo-composable';
|
||||||
|
import FullCalendar from '@fullcalendar/vue3';
|
||||||
|
import dayGridPlugin from '@fullcalendar/daygrid';
|
||||||
|
import ruLocale from '@fullcalendar/core/locales/ru';
|
||||||
import OrderStatusBadge from '~/components/orders/OrderStatusBadge.vue';
|
import OrderStatusBadge from '~/components/orders/OrderStatusBadge.vue';
|
||||||
import {
|
import {
|
||||||
ManagerOrdersDocument,
|
ManagerOrdersDocument,
|
||||||
@@ -12,6 +15,9 @@ definePageMeta({
|
|||||||
|
|
||||||
type ManagerOrderItem = ManagerOrdersQuery['managerOrders'][number];
|
type ManagerOrderItem = ManagerOrdersQuery['managerOrders'][number];
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
const ACTIVE_STATUSES = new Set(['NEW', 'MANAGER_PROCESSING', 'WAITING_DOUBLE_CONFIRM', 'CONFIRMED', 'IN_PROGRESS']);
|
const ACTIVE_STATUSES = new Set(['NEW', 'MANAGER_PROCESSING', 'WAITING_DOUBLE_CONFIRM', 'CONFIRMED', 'IN_PROGRESS']);
|
||||||
const CLOSED_STATUSES = new Set(['COMPLETED', 'CLIENT_REJECTED', 'MANAGER_REJECTED', 'MANAGER_BLOCKED']);
|
const CLOSED_STATUSES = new Set(['COMPLETED', 'CLIENT_REJECTED', 'MANAGER_REJECTED', 'MANAGER_BLOCKED']);
|
||||||
|
|
||||||
@@ -19,6 +25,19 @@ const ordersQuery = useQuery(ManagerOrdersDocument, { status: null });
|
|||||||
const search = ref('');
|
const search = ref('');
|
||||||
const statusFilter = ref<'ALL' | 'WAITING' | 'ACTIVE' | 'CLOSED'>('ALL');
|
const statusFilter = ref<'ALL' | 'WAITING' | 'ACTIVE' | 'CLOSED'>('ALL');
|
||||||
|
|
||||||
|
const viewMode = computed<'cards' | 'calendar'>(() => (
|
||||||
|
route.query.view === 'calendar' ? 'calendar' : 'cards'
|
||||||
|
));
|
||||||
|
|
||||||
|
function setViewMode(view: 'cards' | 'calendar') {
|
||||||
|
void router.replace({
|
||||||
|
query: {
|
||||||
|
...route.query,
|
||||||
|
view,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function matchesFilter(order: ManagerOrderItem) {
|
function matchesFilter(order: ManagerOrderItem) {
|
||||||
if (statusFilter.value === 'ALL') {
|
if (statusFilter.value === 'ALL') {
|
||||||
return true;
|
return true;
|
||||||
@@ -50,22 +69,59 @@ const filteredOrders = computed(() => {
|
|||||||
return matchesSearch && matchesFilter(order);
|
return matchesSearch && matchesFilter(order);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const calendarOptions = computed(() => ({
|
||||||
|
plugins: [dayGridPlugin],
|
||||||
|
locale: ruLocale,
|
||||||
|
initialView: 'dayGridMonth',
|
||||||
|
height: 'auto',
|
||||||
|
fixedWeekCount: false,
|
||||||
|
firstDay: 1,
|
||||||
|
headerToolbar: {
|
||||||
|
left: 'prev,next today',
|
||||||
|
center: 'title',
|
||||||
|
right: '',
|
||||||
|
},
|
||||||
|
buttonText: {
|
||||||
|
today: 'Сегодня',
|
||||||
|
},
|
||||||
|
events: filteredOrders.value.map((order) => ({
|
||||||
|
id: order.id,
|
||||||
|
title: `${order.code} • ${order.customerId}`,
|
||||||
|
start: new Date(order.createdAt).toISOString(),
|
||||||
|
allDay: true,
|
||||||
|
})),
|
||||||
|
eventClick: ({ event }: { event: { id: string } }) => {
|
||||||
|
void router.push(`/client-orders/${event.id}`);
|
||||||
|
},
|
||||||
|
}));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<section class="space-y-6">
|
<section class="space-y-6">
|
||||||
<UiSectionSearchHero
|
<UiSectionSearchHero
|
||||||
v-model="search"
|
v-model="search"
|
||||||
title="Заказы клиентов"
|
title="Заказы"
|
||||||
search-placeholder="Номер заказа, клиент, адрес или товар"
|
search-placeholder="Номер заказа, клиент, адрес или товар"
|
||||||
>
|
>
|
||||||
<template #controls>
|
<template #controls>
|
||||||
<select v-model="statusFilter" class="select select-bordered w-full rounded-full bg-white md:w-64">
|
<div class="flex w-full flex-col gap-3 md:w-auto md:flex-row">
|
||||||
<option value="ALL">Все заказы</option>
|
<select v-model="statusFilter" class="select select-bordered w-full rounded-full bg-white md:w-64">
|
||||||
<option value="WAITING">Ожидают подтверждения</option>
|
<option value="ALL">Все заказы</option>
|
||||||
<option value="ACTIVE">Активные</option>
|
<option value="WAITING">Ожидают подтверждения</option>
|
||||||
<option value="CLOSED">Закрытые</option>
|
<option value="ACTIVE">Активные</option>
|
||||||
</select>
|
<option value="CLOSED">Закрытые</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<div class="tabs tabs-boxed w-fit bg-white">
|
||||||
|
<button class="tab" :class="{ 'tab-active': viewMode === 'cards' }" @click="setViewMode('cards')">
|
||||||
|
Карточки
|
||||||
|
</button>
|
||||||
|
<button class="tab" :class="{ 'tab-active': viewMode === 'calendar' }" @click="setViewMode('calendar')">
|
||||||
|
Календарь
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</UiSectionSearchHero>
|
</UiSectionSearchHero>
|
||||||
|
|
||||||
@@ -76,6 +132,10 @@ const filteredOrders = computed(() => {
|
|||||||
Заказы по текущим условиям не найдены.
|
Заказы по текущим условиям не найдены.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div v-else-if="viewMode === 'calendar'" class="surface-card rounded-3xl p-4 md:p-5">
|
||||||
|
<FullCalendar :options="calendarOptions" />
|
||||||
|
</div>
|
||||||
|
|
||||||
<div v-else class="space-y-4">
|
<div v-else class="space-y-4">
|
||||||
<NuxtLink
|
<NuxtLink
|
||||||
v-for="order in filteredOrders"
|
v-for="order in filteredOrders"
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ definePageMeta({
|
|||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const requestId = computed(() => String(route.params.id || ''));
|
const requestId = computed(() => String(route.params.id || ''));
|
||||||
|
const backTarget = computed(() => (
|
||||||
|
route.query.tab === 'requests' ? '/clients?tab=requests' : '/clients'
|
||||||
|
));
|
||||||
|
|
||||||
const clientQuery = useQuery(RegistrationRequestsDocument, {
|
const clientQuery = useQuery(RegistrationRequestsDocument, {
|
||||||
status: null,
|
status: null,
|
||||||
@@ -55,7 +58,7 @@ async function rejectRequest() {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<section class="space-y-6">
|
<section class="space-y-6">
|
||||||
<NuxtLink to="/clients" class="text-sm font-semibold text-[#0d854a]">← Назад к клиентам</NuxtLink>
|
<NuxtLink :to="backTarget" class="text-sm font-semibold text-[#0d854a]">← Назад к пользователям</NuxtLink>
|
||||||
|
|
||||||
<div v-if="clientQuery.loading.value" class="manager-empty-state">
|
<div v-if="clientQuery.loading.value" class="manager-empty-state">
|
||||||
Загружаем карточку клиента...
|
Загружаем карточку клиента...
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useQuery } from '@vue/apollo-composable';
|
import { useQuery } from '@vue/apollo-composable';
|
||||||
import {
|
import {
|
||||||
|
ManagerUsersDocument,
|
||||||
RegistrationRequestsDocument,
|
RegistrationRequestsDocument,
|
||||||
|
type ManagerUsersQuery,
|
||||||
type RegistrationRequestsQuery,
|
type RegistrationRequestsQuery,
|
||||||
} from '~/composables/graphql/generated';
|
} from '~/composables/graphql/generated';
|
||||||
|
|
||||||
@@ -9,24 +11,63 @@ definePageMeta({
|
|||||||
middleware: ['manager-only'],
|
middleware: ['manager-only'],
|
||||||
});
|
});
|
||||||
|
|
||||||
type ClientCard = RegistrationRequestsQuery['registrationRequests'][number];
|
type ManagerUserItem = ManagerUsersQuery['managerUsers'][number];
|
||||||
|
type RequestItem = RegistrationRequestsQuery['registrationRequests'][number];
|
||||||
|
|
||||||
const clientsQuery = useQuery(RegistrationRequestsDocument, {
|
const route = useRoute();
|
||||||
status: null,
|
const router = useRouter();
|
||||||
});
|
|
||||||
const search = ref('');
|
const search = ref('');
|
||||||
|
|
||||||
function statusLabel(status: ClientCard['status']) {
|
const usersQuery = useQuery(ManagerUsersDocument);
|
||||||
|
const requestsQuery = useQuery(RegistrationRequestsDocument, {
|
||||||
|
status: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
const activeTab = computed<'users' | 'requests'>(() => (
|
||||||
|
route.query.tab === 'requests' ? 'requests' : 'users'
|
||||||
|
));
|
||||||
|
|
||||||
|
function setTab(tab: 'users' | 'requests') {
|
||||||
|
void router.replace({
|
||||||
|
query: {
|
||||||
|
...route.query,
|
||||||
|
tab,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const filteredUsers = computed(() => {
|
||||||
|
const items = usersQuery.result.value?.managerUsers ?? [];
|
||||||
|
const query = search.value.trim().toLowerCase();
|
||||||
|
|
||||||
|
return items.filter((item) => {
|
||||||
|
if (!query) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
item.fullName,
|
||||||
|
item.email,
|
||||||
|
item.companyName || '',
|
||||||
|
item.inn || '',
|
||||||
|
]
|
||||||
|
.join(' ')
|
||||||
|
.toLowerCase()
|
||||||
|
.includes(query);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function requestStatusLabel(status: RequestItem['status']) {
|
||||||
if (status === 'APPROVED') {
|
if (status === 'APPROVED') {
|
||||||
return 'Активен';
|
return 'Одобрена';
|
||||||
}
|
}
|
||||||
if (status === 'REJECTED') {
|
if (status === 'REJECTED') {
|
||||||
return 'Отклонен';
|
return 'Отклонена';
|
||||||
}
|
}
|
||||||
return 'На проверке';
|
return 'На проверке';
|
||||||
}
|
}
|
||||||
|
|
||||||
function statusClass(status: ClientCard['status']) {
|
function requestStatusClass(status: RequestItem['status']) {
|
||||||
if (status === 'APPROVED') {
|
if (status === 'APPROVED') {
|
||||||
return 'badge badge-success border-0';
|
return 'badge badge-success border-0';
|
||||||
}
|
}
|
||||||
@@ -36,8 +77,8 @@ function statusClass(status: ClientCard['status']) {
|
|||||||
return 'badge badge-warning border-0';
|
return 'badge badge-warning border-0';
|
||||||
}
|
}
|
||||||
|
|
||||||
const filteredClients = computed(() => {
|
const filteredRequests = computed(() => {
|
||||||
const items = clientsQuery.result.value?.registrationRequests ?? [];
|
const items = requestsQuery.result.value?.registrationRequests ?? [];
|
||||||
const query = search.value.trim().toLowerCase();
|
const query = search.value.trim().toLowerCase();
|
||||||
|
|
||||||
return items.filter((item) => {
|
return items.filter((item) => {
|
||||||
@@ -62,48 +103,91 @@ const filteredClients = computed(() => {
|
|||||||
<section class="space-y-6">
|
<section class="space-y-6">
|
||||||
<UiSectionSearchHero
|
<UiSectionSearchHero
|
||||||
v-model="search"
|
v-model="search"
|
||||||
title="Клиенты"
|
title="Пользователи"
|
||||||
search-placeholder="Компания, контакт, email или ИНН"
|
:search-placeholder="activeTab === 'users' ? 'Имя, email, компания или ИНН' : 'Компания, контакт, email или ИНН'"
|
||||||
>
|
>
|
||||||
<template #controls>
|
<template #controls>
|
||||||
<NuxtLink to="/clients/invite" class="btn btn-primary border-0">
|
<NuxtLink to="/clients/invite" class="btn btn-primary border-0">
|
||||||
Пригласить клиента
|
Пригласить
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
</template>
|
</template>
|
||||||
</UiSectionSearchHero>
|
</UiSectionSearchHero>
|
||||||
|
|
||||||
<div v-if="clientsQuery.loading.value" class="manager-empty-state">
|
<div class="tabs tabs-boxed w-fit bg-white">
|
||||||
Загружаем клиентов...
|
<button
|
||||||
</div>
|
class="tab"
|
||||||
<div v-else-if="filteredClients.length === 0" class="manager-empty-state">
|
:class="{ 'tab-active': activeTab === 'users' }"
|
||||||
По текущему запросу карточки клиентов не найдены.
|
@click="setTab('users')"
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-else class="grid gap-4 lg:grid-cols-2 xl:grid-cols-3">
|
|
||||||
<NuxtLink
|
|
||||||
v-for="client in filteredClients"
|
|
||||||
:key="client.id"
|
|
||||||
:to="`/clients/${client.id}`"
|
|
||||||
class="surface-card rounded-3xl p-5"
|
|
||||||
>
|
>
|
||||||
<div class="flex items-start justify-between gap-3">
|
Пользователи
|
||||||
<div class="space-y-1">
|
</button>
|
||||||
<h2 class="text-lg font-bold text-[#123824]">{{ client.companyName }}</h2>
|
<button
|
||||||
<p class="text-sm text-[#466653]">{{ client.contactName }}</p>
|
class="tab"
|
||||||
</div>
|
:class="{ 'tab-active': activeTab === 'requests' }"
|
||||||
<span :class="statusClass(client.status)">{{ statusLabel(client.status) }}</span>
|
@click="setTab('requests')"
|
||||||
</div>
|
>
|
||||||
|
Заявки
|
||||||
<div class="mt-4 space-y-2 text-sm text-[#355947]">
|
</button>
|
||||||
<p>{{ client.email }}</p>
|
|
||||||
<p v-if="client.inn">ИНН: {{ client.inn }}</p>
|
|
||||||
<p>{{ new Date(client.createdAt).toLocaleDateString() }}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p v-if="client.rejectionReason" class="mt-4 text-sm text-[#a34a34]">
|
|
||||||
{{ client.rejectionReason }}
|
|
||||||
</p>
|
|
||||||
</NuxtLink>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<template v-if="activeTab === 'users'">
|
||||||
|
<div v-if="usersQuery.loading.value" class="manager-empty-state">
|
||||||
|
Загружаем пользователей...
|
||||||
|
</div>
|
||||||
|
<div v-else-if="filteredUsers.length === 0" class="manager-empty-state">
|
||||||
|
Пользователи по текущему запросу не найдены.
|
||||||
|
</div>
|
||||||
|
<div v-else class="grid gap-4 lg:grid-cols-2 xl:grid-cols-3">
|
||||||
|
<article
|
||||||
|
v-for="user in filteredUsers"
|
||||||
|
:key="user.id"
|
||||||
|
class="surface-card rounded-3xl p-5"
|
||||||
|
>
|
||||||
|
<div class="space-y-1">
|
||||||
|
<h2 class="text-lg font-bold text-[#123824]">{{ user.fullName }}</h2>
|
||||||
|
<p class="text-sm text-[#466653]">{{ user.email }}</p>
|
||||||
|
<p v-if="user.companyName" class="text-sm text-[#466653]">{{ user.companyName }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-4 space-y-2 text-sm text-[#355947]">
|
||||||
|
<p v-if="user.inn">ИНН: {{ user.inn }}</p>
|
||||||
|
<p>Заказов: {{ user.orderCount }}</p>
|
||||||
|
<p v-if="user.lastOrderAt">Последний заказ: {{ new Date(user.lastOrderAt).toLocaleString() }}</p>
|
||||||
|
<p>Создан: {{ new Date(user.createdAt).toLocaleDateString() }}</p>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-else>
|
||||||
|
<div v-if="requestsQuery.loading.value" class="manager-empty-state">
|
||||||
|
Загружаем заявки...
|
||||||
|
</div>
|
||||||
|
<div v-else-if="filteredRequests.length === 0" class="manager-empty-state">
|
||||||
|
Заявки по текущему запросу не найдены.
|
||||||
|
</div>
|
||||||
|
<div v-else class="grid gap-4 lg:grid-cols-2 xl:grid-cols-3">
|
||||||
|
<NuxtLink
|
||||||
|
v-for="request in filteredRequests"
|
||||||
|
:key="request.id"
|
||||||
|
:to="`/clients/${request.id}?tab=requests`"
|
||||||
|
class="surface-card rounded-3xl p-5"
|
||||||
|
>
|
||||||
|
<div class="flex items-start justify-between gap-3">
|
||||||
|
<div class="space-y-1">
|
||||||
|
<h2 class="text-lg font-bold text-[#123824]">{{ request.companyName }}</h2>
|
||||||
|
<p class="text-sm text-[#466653]">{{ request.contactName }}</p>
|
||||||
|
</div>
|
||||||
|
<span :class="requestStatusClass(request.status)">{{ requestStatusLabel(request.status) }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-4 space-y-2 text-sm text-[#355947]">
|
||||||
|
<p>{{ request.email }}</p>
|
||||||
|
<p v-if="request.inn">ИНН: {{ request.inn }}</p>
|
||||||
|
<p>{{ new Date(request.createdAt).toLocaleDateString() }}</p>
|
||||||
|
</div>
|
||||||
|
</NuxtLink>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ async function createInvitation() {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<section class="space-y-6 max-w-3xl">
|
<section class="space-y-6 max-w-3xl">
|
||||||
<NuxtLink to="/clients" class="text-sm font-semibold text-[#0d854a]">← Назад к клиентам</NuxtLink>
|
<NuxtLink to="/clients" class="text-sm font-semibold text-[#0d854a]">← Назад к пользователям</NuxtLink>
|
||||||
|
|
||||||
<div class="manager-hero">
|
<div class="manager-hero">
|
||||||
<p class="manager-eyebrow">Приглашение</p>
|
<p class="manager-eyebrow">Приглашение</p>
|
||||||
|
|||||||
11
graphql/operations/manager/manager-bonus-balances.graphql
Normal file
11
graphql/operations/manager/manager-bonus-balances.graphql
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
query ManagerBonusBalances {
|
||||||
|
managerBonusBalances {
|
||||||
|
userId
|
||||||
|
email
|
||||||
|
fullName
|
||||||
|
companyName
|
||||||
|
balance
|
||||||
|
pendingWithdrawalAmount
|
||||||
|
transactionsCount
|
||||||
|
}
|
||||||
|
}
|
||||||
13
graphql/operations/manager/manager-users.graphql
Normal file
13
graphql/operations/manager/manager-users.graphql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
query ManagerUsers {
|
||||||
|
managerUsers {
|
||||||
|
id
|
||||||
|
email
|
||||||
|
fullName
|
||||||
|
role
|
||||||
|
companyName
|
||||||
|
inn
|
||||||
|
createdAt
|
||||||
|
orderCount
|
||||||
|
lastOrderAt
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -136,6 +136,18 @@ type RegistrationRequest {
|
|||||||
updatedAt: DateTime!
|
updatedAt: DateTime!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ManagerUser {
|
||||||
|
id: ID!
|
||||||
|
email: String!
|
||||||
|
fullName: String!
|
||||||
|
role: UserRole!
|
||||||
|
companyName: String
|
||||||
|
inn: String
|
||||||
|
createdAt: DateTime!
|
||||||
|
orderCount: Int!
|
||||||
|
lastOrderAt: DateTime
|
||||||
|
}
|
||||||
|
|
||||||
type MessengerConnection {
|
type MessengerConnection {
|
||||||
id: ID!
|
id: ID!
|
||||||
userId: ID!
|
userId: ID!
|
||||||
@@ -284,6 +296,16 @@ type ReferralStats {
|
|||||||
pendingWithdrawals: [RewardWithdrawalRequest!]!
|
pendingWithdrawals: [RewardWithdrawalRequest!]!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ManagerBonusBalance {
|
||||||
|
userId: ID!
|
||||||
|
email: String!
|
||||||
|
fullName: String!
|
||||||
|
companyName: String
|
||||||
|
balance: Float!
|
||||||
|
pendingWithdrawalAmount: Float!
|
||||||
|
transactionsCount: Int!
|
||||||
|
}
|
||||||
|
|
||||||
type Query {
|
type Query {
|
||||||
healthcheck: String!
|
healthcheck: String!
|
||||||
me: User
|
me: User
|
||||||
@@ -296,7 +318,9 @@ type Query {
|
|||||||
clientProducts: [Product!]!
|
clientProducts: [Product!]!
|
||||||
myOrders: [Order!]!
|
myOrders: [Order!]!
|
||||||
myCurrentOrders: [Order!]!
|
myCurrentOrders: [Order!]!
|
||||||
|
managerUsers: [ManagerUser!]!
|
||||||
managerOrders(status: OrderStatus): [Order!]!
|
managerOrders(status: OrderStatus): [Order!]!
|
||||||
|
managerBonusBalances: [ManagerBonusBalance!]!
|
||||||
registrationRequests(status: RegistrationStatus): [RegistrationRequest!]!
|
registrationRequests(status: RegistrationStatus): [RegistrationRequest!]!
|
||||||
referralStats: ReferralStats!
|
referralStats: ReferralStats!
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apollo/client": "^3.14.1",
|
"@apollo/client": "^3.14.1",
|
||||||
|
"@fullcalendar/core": "^6.1.20",
|
||||||
|
"@fullcalendar/daygrid": "^6.1.20",
|
||||||
|
"@fullcalendar/vue3": "^6.1.20",
|
||||||
"@nuxt/eslint": "1.15.2",
|
"@nuxt/eslint": "1.15.2",
|
||||||
"@nuxtjs/apollo": "5.0.0-alpha.16",
|
"@nuxtjs/apollo": "5.0.0-alpha.16",
|
||||||
"@nuxtjs/tailwindcss": "6.14.0",
|
"@nuxtjs/tailwindcss": "6.14.0",
|
||||||
|
|||||||
92
pnpm-lock.yaml
generated
92
pnpm-lock.yaml
generated
@@ -11,6 +11,15 @@ importers:
|
|||||||
'@apollo/client':
|
'@apollo/client':
|
||||||
specifier: ^3.14.1
|
specifier: ^3.14.1
|
||||||
version: 3.14.1(@types/react@19.2.14)(graphql-ws@6.0.8(crossws@0.3.5)(graphql@16.13.2)(ws@8.20.0))(graphql@16.13.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
version: 3.14.1(@types/react@19.2.14)(graphql-ws@6.0.8(crossws@0.3.5)(graphql@16.13.2)(ws@8.20.0))(graphql@16.13.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||||
|
'@fullcalendar/core':
|
||||||
|
specifier: ^6.1.20
|
||||||
|
version: 6.1.20
|
||||||
|
'@fullcalendar/daygrid':
|
||||||
|
specifier: ^6.1.20
|
||||||
|
version: 6.1.20(@fullcalendar/core@6.1.20)
|
||||||
|
'@fullcalendar/vue3':
|
||||||
|
specifier: ^6.1.20
|
||||||
|
version: 6.1.20(@fullcalendar/core@6.1.20)(vue@3.5.31(typescript@5.9.2))
|
||||||
'@nuxt/eslint':
|
'@nuxt/eslint':
|
||||||
specifier: 1.15.2
|
specifier: 1.15.2
|
||||||
version: 1.15.2(@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@5.9.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(yaml@2.8.3))
|
version: 1.15.2(@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@5.9.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(yaml@2.8.3))
|
||||||
@@ -676,6 +685,20 @@ packages:
|
|||||||
'@fastify/busboy@3.2.0':
|
'@fastify/busboy@3.2.0':
|
||||||
resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==}
|
resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==}
|
||||||
|
|
||||||
|
'@fullcalendar/core@6.1.20':
|
||||||
|
resolution: {integrity: sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==}
|
||||||
|
|
||||||
|
'@fullcalendar/daygrid@6.1.20':
|
||||||
|
resolution: {integrity: sha512-AO9vqhkLP77EesmJzuU+IGXgxNulsA8mgQHynclJ8U70vSwAVnbcLG9qftiTAFSlZjiY/NvhE7sflve6cJelyQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@fullcalendar/core': ~6.1.20
|
||||||
|
|
||||||
|
'@fullcalendar/vue3@6.1.20':
|
||||||
|
resolution: {integrity: sha512-8qg6pS27II9QBwFkkJC+7SfflMpWqOe7i3ii5ODq9KpLAjwQAd/zjfq8RvKR1Yryoh5UmMCmvRbMB7i4RGtqog==}
|
||||||
|
peerDependencies:
|
||||||
|
'@fullcalendar/core': ~6.1.20
|
||||||
|
vue: ^3.0.11
|
||||||
|
|
||||||
'@graphql-codegen/add@6.0.0':
|
'@graphql-codegen/add@6.0.0':
|
||||||
resolution: {integrity: sha512-biFdaURX0KTwEJPQ1wkT6BRgNasqgQ5KbCI1a3zwtLtO7XTo7/vKITPylmiU27K5DSOWYnY/1jfSqUAEBuhZrQ==}
|
resolution: {integrity: sha512-biFdaURX0KTwEJPQ1wkT6BRgNasqgQ5KbCI1a3zwtLtO7XTo7/vKITPylmiU27K5DSOWYnY/1jfSqUAEBuhZrQ==}
|
||||||
engines: {node: '>=16'}
|
engines: {node: '>=16'}
|
||||||
@@ -1301,48 +1324,56 @@ packages:
|
|||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-minify/binding-linux-arm64-musl@0.117.0':
|
'@oxc-minify/binding-linux-arm64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==}
|
resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
|
'@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==}
|
resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
|
'@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==}
|
resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-minify/binding-linux-riscv64-musl@0.117.0':
|
'@oxc-minify/binding-linux-riscv64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==}
|
resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-minify/binding-linux-s390x-gnu@0.117.0':
|
'@oxc-minify/binding-linux-s390x-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==}
|
resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-minify/binding-linux-x64-gnu@0.117.0':
|
'@oxc-minify/binding-linux-x64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==}
|
resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-minify/binding-linux-x64-musl@0.117.0':
|
'@oxc-minify/binding-linux-x64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==}
|
resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-minify/binding-openharmony-arm64@0.117.0':
|
'@oxc-minify/binding-openharmony-arm64@0.117.0':
|
||||||
resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==}
|
resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==}
|
||||||
@@ -1420,48 +1451,56 @@ packages:
|
|||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-parser/binding-linux-arm64-musl@0.117.0':
|
'@oxc-parser/binding-linux-arm64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==}
|
resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
|
'@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==}
|
resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
|
'@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==}
|
resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-parser/binding-linux-riscv64-musl@0.117.0':
|
'@oxc-parser/binding-linux-riscv64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==}
|
resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-parser/binding-linux-s390x-gnu@0.117.0':
|
'@oxc-parser/binding-linux-s390x-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==}
|
resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-parser/binding-linux-x64-gnu@0.117.0':
|
'@oxc-parser/binding-linux-x64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==}
|
resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-parser/binding-linux-x64-musl@0.117.0':
|
'@oxc-parser/binding-linux-x64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==}
|
resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-parser/binding-openharmony-arm64@0.117.0':
|
'@oxc-parser/binding-openharmony-arm64@0.117.0':
|
||||||
resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==}
|
resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==}
|
||||||
@@ -1542,48 +1581,56 @@ packages:
|
|||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-transform/binding-linux-arm64-musl@0.117.0':
|
'@oxc-transform/binding-linux-arm64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==}
|
resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
|
'@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==}
|
resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
|
'@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==}
|
resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-transform/binding-linux-riscv64-musl@0.117.0':
|
'@oxc-transform/binding-linux-riscv64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==}
|
resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-transform/binding-linux-s390x-gnu@0.117.0':
|
'@oxc-transform/binding-linux-s390x-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==}
|
resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-transform/binding-linux-x64-gnu@0.117.0':
|
'@oxc-transform/binding-linux-x64-gnu@0.117.0':
|
||||||
resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==}
|
resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@oxc-transform/binding-linux-x64-musl@0.117.0':
|
'@oxc-transform/binding-linux-x64-musl@0.117.0':
|
||||||
resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==}
|
resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@oxc-transform/binding-openharmony-arm64@0.117.0':
|
'@oxc-transform/binding-openharmony-arm64@0.117.0':
|
||||||
resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==}
|
resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==}
|
||||||
@@ -1646,36 +1693,42 @@ packages:
|
|||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@parcel/watcher-linux-arm-musl@2.5.6':
|
'@parcel/watcher-linux-arm-musl@2.5.6':
|
||||||
resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
|
resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@parcel/watcher-linux-arm64-glibc@2.5.6':
|
'@parcel/watcher-linux-arm64-glibc@2.5.6':
|
||||||
resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
|
resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@parcel/watcher-linux-arm64-musl@2.5.6':
|
'@parcel/watcher-linux-arm64-musl@2.5.6':
|
||||||
resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
|
resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@parcel/watcher-linux-x64-glibc@2.5.6':
|
'@parcel/watcher-linux-x64-glibc@2.5.6':
|
||||||
resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
|
resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@parcel/watcher-linux-x64-musl@2.5.6':
|
'@parcel/watcher-linux-x64-musl@2.5.6':
|
||||||
resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
|
resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@parcel/watcher-wasm@2.5.6':
|
'@parcel/watcher-wasm@2.5.6':
|
||||||
resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==}
|
resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==}
|
||||||
@@ -1846,66 +1899,79 @@ packages:
|
|||||||
resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==}
|
resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm-musleabihf@4.60.1':
|
'@rollup/rollup-linux-arm-musleabihf@4.60.1':
|
||||||
resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==}
|
resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm64-gnu@4.60.1':
|
'@rollup/rollup-linux-arm64-gnu@4.60.1':
|
||||||
resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==}
|
resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm64-musl@4.60.1':
|
'@rollup/rollup-linux-arm64-musl@4.60.1':
|
||||||
resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==}
|
resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rollup/rollup-linux-loong64-gnu@4.60.1':
|
'@rollup/rollup-linux-loong64-gnu@4.60.1':
|
||||||
resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==}
|
resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==}
|
||||||
cpu: [loong64]
|
cpu: [loong64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rollup/rollup-linux-loong64-musl@4.60.1':
|
'@rollup/rollup-linux-loong64-musl@4.60.1':
|
||||||
resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==}
|
resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==}
|
||||||
cpu: [loong64]
|
cpu: [loong64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rollup/rollup-linux-ppc64-gnu@4.60.1':
|
'@rollup/rollup-linux-ppc64-gnu@4.60.1':
|
||||||
resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==}
|
resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rollup/rollup-linux-ppc64-musl@4.60.1':
|
'@rollup/rollup-linux-ppc64-musl@4.60.1':
|
||||||
resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==}
|
resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rollup/rollup-linux-riscv64-gnu@4.60.1':
|
'@rollup/rollup-linux-riscv64-gnu@4.60.1':
|
||||||
resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==}
|
resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rollup/rollup-linux-riscv64-musl@4.60.1':
|
'@rollup/rollup-linux-riscv64-musl@4.60.1':
|
||||||
resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==}
|
resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rollup/rollup-linux-s390x-gnu@4.60.1':
|
'@rollup/rollup-linux-s390x-gnu@4.60.1':
|
||||||
resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==}
|
resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rollup/rollup-linux-x64-gnu@4.60.1':
|
'@rollup/rollup-linux-x64-gnu@4.60.1':
|
||||||
resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==}
|
resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rollup/rollup-linux-x64-musl@4.60.1':
|
'@rollup/rollup-linux-x64-musl@4.60.1':
|
||||||
resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==}
|
resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rollup/rollup-openbsd-x64@4.60.1':
|
'@rollup/rollup-openbsd-x64@4.60.1':
|
||||||
resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==}
|
resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==}
|
||||||
@@ -2260,41 +2326,49 @@ packages:
|
|||||||
resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
|
resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@unrs/resolver-binding-linux-arm64-musl@1.11.1':
|
'@unrs/resolver-binding-linux-arm64-musl@1.11.1':
|
||||||
resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
|
resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
|
'@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
|
||||||
resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
|
resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
|
'@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
|
||||||
resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
|
resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
|
'@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
|
||||||
resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
|
resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
|
'@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
|
||||||
resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
|
resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@unrs/resolver-binding-linux-x64-gnu@1.11.1':
|
'@unrs/resolver-binding-linux-x64-gnu@1.11.1':
|
||||||
resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
|
resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@unrs/resolver-binding-linux-x64-musl@1.11.1':
|
'@unrs/resolver-binding-linux-x64-musl@1.11.1':
|
||||||
resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
|
resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@unrs/resolver-binding-wasm32-wasi@1.11.1':
|
'@unrs/resolver-binding-wasm32-wasi@1.11.1':
|
||||||
resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
|
resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
|
||||||
@@ -4962,6 +5036,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
|
resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
|
||||||
engines: {node: '>=20'}
|
engines: {node: '>=20'}
|
||||||
|
|
||||||
|
preact@10.12.1:
|
||||||
|
resolution: {integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==}
|
||||||
|
|
||||||
prelude-ls@1.2.1:
|
prelude-ls@1.2.1:
|
||||||
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
@@ -6646,6 +6723,19 @@ snapshots:
|
|||||||
|
|
||||||
'@fastify/busboy@3.2.0': {}
|
'@fastify/busboy@3.2.0': {}
|
||||||
|
|
||||||
|
'@fullcalendar/core@6.1.20':
|
||||||
|
dependencies:
|
||||||
|
preact: 10.12.1
|
||||||
|
|
||||||
|
'@fullcalendar/daygrid@6.1.20(@fullcalendar/core@6.1.20)':
|
||||||
|
dependencies:
|
||||||
|
'@fullcalendar/core': 6.1.20
|
||||||
|
|
||||||
|
'@fullcalendar/vue3@6.1.20(@fullcalendar/core@6.1.20)(vue@3.5.31(typescript@5.9.2))':
|
||||||
|
dependencies:
|
||||||
|
'@fullcalendar/core': 6.1.20
|
||||||
|
vue: 3.5.31(typescript@5.9.2)
|
||||||
|
|
||||||
'@graphql-codegen/add@6.0.0(graphql@16.13.2)':
|
'@graphql-codegen/add@6.0.0(graphql@16.13.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@graphql-codegen/plugin-helpers': 6.2.0(graphql@16.13.2)
|
'@graphql-codegen/plugin-helpers': 6.2.0(graphql@16.13.2)
|
||||||
@@ -11547,6 +11637,8 @@ snapshots:
|
|||||||
|
|
||||||
powershell-utils@0.1.0: {}
|
powershell-utils@0.1.0: {}
|
||||||
|
|
||||||
|
preact@10.12.1: {}
|
||||||
|
|
||||||
prelude-ls@1.2.1: {}
|
prelude-ls@1.2.1: {}
|
||||||
|
|
||||||
pretty-bytes@7.1.0: {}
|
pretty-bytes@7.1.0: {}
|
||||||
|
|||||||
Reference in New Issue
Block a user