fix: many

This commit is contained in:
opbnq-q
2025-03-08 22:32:53 -08:00
parent 9ea91f3b40
commit 3288577dc1
14 changed files with 86 additions and 34 deletions

View File

@@ -20,7 +20,7 @@ export function Count(): Promise<number> & { cancel(): void } {
export function Create(item: $models.Author): Promise<$models.Author> & { cancel(): void } {
let $resultPromise = $Call.ByID(3684602449, item) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType0($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
@@ -34,7 +34,7 @@ export function Delete(id: number): Promise<void> & { cancel(): void } {
export function GetAll(): Promise<($models.Author | null)[]> & { cancel(): void } {
let $resultPromise = $Call.ByID(3248293926) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType2($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
@@ -43,7 +43,7 @@ export function GetAll(): Promise<($models.Author | null)[]> & { cancel(): void
export function GetById(id: number): Promise<$models.Author | null> & { cancel(): void } {
let $resultPromise = $Call.ByID(1703016211, id) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType1($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
@@ -52,7 +52,7 @@ export function GetById(id: number): Promise<$models.Author | null> & { cancel()
export function Update(item: $models.Author): Promise<$models.Author> & { cancel(): void } {
let $resultPromise = $Call.ByID(2240704960, item) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType0($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);

View File

@@ -20,7 +20,7 @@ export function Count(): Promise<number> & { cancel(): void } {
export function Create(item: $models.Post): Promise<$models.Post> & { cancel(): void } {
let $resultPromise = $Call.ByID(1443399856, item) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType0($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
@@ -39,7 +39,7 @@ export function ExportToExcel(): Promise<void> & { cancel(): void } {
export function GetAll(): Promise<($models.Post | null)[]> & { cancel(): void } {
let $resultPromise = $Call.ByID(65691059) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType2($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
@@ -48,7 +48,7 @@ export function GetAll(): Promise<($models.Post | null)[]> & { cancel(): void }
export function GetById(id: number): Promise<$models.Post | null> & { cancel(): void } {
let $resultPromise = $Call.ByID(4074736792, id) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType1($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
@@ -57,7 +57,7 @@ export function GetById(id: number): Promise<$models.Post | null> & { cancel():
export function Update(item: $models.Post): Promise<$models.Post> & { cancel(): void } {
let $resultPromise = $Call.ByID(137798821, item) as any;
let $typingPromise = $resultPromise.then(($result) => {
let $typingPromise = $resultPromise.then(($result: any) => {
return $$createType0($result);
}) as any;
$typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);

View File

@@ -1,12 +1,12 @@
<script setup lang="ts">
import PostScheme from './post/PostScheme.vue';
import AuthorScheme from "./author/AuthorScheme.vue";
import MultiSelect from './components/selects/MultiSelect.vue';
</script>
<template>
<main class="w-screen h-screen">
<PostScheme />
<AuthorScheme />
<AuthorScheme></AuthorScheme>
</main>
</template>

View File

@@ -15,10 +15,10 @@ const service = new Service
onMounted(async () => {
(scheme as any).Posts.type!.nested!.values = await postService.readAll()
console.log(scheme)
})
const scheme: Scheme<Author> = reactive({
entityId: "AuthorId",
Id: {
hidden: true,
type: {

View File

@@ -0,0 +1,15 @@
<script setup lang="ts">
defineProps<{
checked: boolean
}>()
</script>
<template>
<input type="checkbox" class="cursor-pointer" :checked />
</template>
<style scoped>
input[type="checkbox"] {
accent-color: var(--p-primary-color);
}
</style>

View File

@@ -0,0 +1,44 @@
<script setup lang="ts" generic="T extends IEntity">
import { structView } from '../../utils/structs/structs-view.util';
import type { IEntity } from '../../types/entity.type';
import Checkbox from '../checkboxes/Checkbox.vue';
import { onMounted, watch } from 'vue';
const { entityId } = defineProps<{
options: T[]
path?: string[]
entityId: string
}>()
const selected = defineModel<T[]>({ default: [] })
const pushOrRemove = (option: T) => {
if (selected.value.some(s => s.Id === option.Id)) {
selected.value = selected.value.filter(s => s.Id !== option.Id)
} else {
selected.value.push(option)
}
setNullIds()
}
const setNullIds = () => {
selected.value = selected.value.map(item => {
item[entityId] = 0
return item
})
}
onMounted(setNullIds)
</script>
<template>
<div class="relative">
<p class="flex items-center h-8 p-3">{{ structView(selected, path) }}</p>
<ul class="absolute max-h-20 overflow-y-auto bg-white rounded-md p-3 w-full border">
<li v-for="option in options" :key="option.Id" class="flex items-center gap-2">
<Checkbox :checked="selected.some(item => item.Id == option.Id)" @click="pushOrRemove(option)" />
<label :for="option.Id.toString()">{{ structView(option, path) }}</label>
</li>
</ul>
</div>
</template>

View File

@@ -19,7 +19,7 @@ onMounted(async () => {
})
const scheme: Scheme<Post> = reactive({
entityId: 'PostId',
Id: {
hidden: true,
type: {

View File

@@ -1,11 +1,12 @@
<script setup lang="ts" generic="T extends IEntity">
import { Button, DatePicker, Dialog, InputNumber, InputText, MultiSelect, Select, Textarea, ToggleSwitch } from 'primevue';
import { Button, DatePicker, Dialog, InputNumber, InputText, Select, Textarea, ToggleSwitch } from 'primevue';
import type { IEntity } from '../types/entity.type';
import type { Scheme } from '../types/scheme.type';
import type { IService } from '../types/service.type';
import { manyStructsView } from '../utils/structs/structs-view.util';
import { type UnwrapRef } from 'vue';
import { toDate, toTimestamp } from '../utils/date/converters.util';
import MultiSelect from '../components/selects/MultiSelect.vue';
const showCreate = defineModel<boolean>('show')
const createItem = defineModel<T>('item')
@@ -22,9 +23,9 @@ type Key = keyof T
const keys = Object.keys(props.scheme) as Key[]
const emits = defineEmits<{
(e: 'onSave', data: any): void
(e: 'onSaveUpdate', data: any): void
(e: 'onSaveCreate', data: any): void
(e: 'onSave', data: T): void
(e: 'onSaveUpdate', data: T): void
(e: 'onSaveCreate', data: T): void
}>()
</script>
@@ -47,14 +48,13 @@ const emits = defineEmits<{
v-else-if="props.scheme[key].type?.primitive === 'string'" />
<DatePicker class="w-[300px]" :default-value="toDate(createItem![key] as number)" @value-change="v => {
createItem![key] = toTimestamp(v as Date) as any
console.log(createItem![key])
}" show-time
v-else-if="props.scheme[key].type?.primitive === 'date'" />
<Textarea class="w-[300px]" v-model="<string>createItem![key]"
v-else-if="props.scheme[key].type?.primitive === 'multiple'" />
<ToggleSwitch class="w-[300px]" v-model:model-value="<boolean>createItem![key]"
v-else-if="props.scheme[key].type?.primitive === 'boolean'" />
<Select v-else-if="props.scheme[key].type?.nested?.values && !props.scheme[key].type?.many"
<Select v-else-if="props.scheme[key].type?.nested?.values && !props.scheme[key]?.many"
v-model:model-value="createItem![key]" :options="props.scheme[key].type.nested.values"
:placeholder="`Выберите ${props.scheme[key].russian}`" class="w-[300px]">
<template #option="{ option }">
@@ -64,21 +64,15 @@ const emits = defineEmits<{
{{ manyStructsView(value, props.scheme[key].type.nested.field) }}
</template>
</Select>
<MultiSelect v-else-if="props.scheme[key].type?.many" v-model:model-value="createItem![key]"
:options="props.scheme[key].type?.nested?.values" class="w-[300px] h-11"
:placeholder="`Выберите ${props.scheme[key].russian}`">
<template #option="{ option }">
{{ manyStructsView(option, props.scheme[key]?.type?.nested?.field) }}
</template>
<template #value="{ value }">
{{ manyStructsView(value, props.scheme[key]?.type?.nested?.field) }}
</template>
</MultiSelect>
<MultiSelect v-else-if="props.scheme[key].type?.nested?.values && props.scheme[key]?.many" class="w-[300px]"
v-model="<T[]>createItem![key]" :options="props.scheme[key].type.nested.values"
:path="props.scheme[key].type.nested.field" :entity-id="props.scheme.entityId" />
</div>
</div>
</div>
<template #footer>
<Button severity="success" @click="async () => {
console.log(createItem)
if (props.updateMode) {
await props.service.update(createItem as T)
await emits('onSaveUpdate', createItem as T)

View File

@@ -8,8 +8,8 @@ export interface ISchemeField<T extends IEntity> {
field: string[]
values: T[]
}
many?: boolean
}
many?: boolean
russian?: string
hidden?: boolean
readonly?: boolean

View File

@@ -1,4 +1,4 @@
import type { IEntity } from "./entity.type";
import type { ISchemeField } from "./scheme-field.type";
export type Scheme<T extends IEntity, S extends IEntity=any> = Record<keyof T, ISchemeField<S>>
export type Scheme<T extends IEntity, S extends IEntity=any> = { entityId: string } & Record<keyof T, ISchemeField<S>>

View File

@@ -17,7 +17,7 @@ export const getDefaultValues = <T extends IEntity>(scheme: Scheme<T>) => {
obj[key] = false
} else if (primitive == 'number') {
obj[key] = 1
} else if (scheme[key].type?.many) {
} else if (scheme[key]?.many) {
obj[key] = []
} else if (scheme[key]?.type?.nested?.values) {
obj[key] = scheme[key].type.nested.values[0]