feat: injections data propertions

This commit is contained in:
opbnq-q
2025-03-10 08:06:45 -07:00
parent 4e74902d99
commit 34a008e856
4 changed files with 39 additions and 62 deletions

View File

@@ -3,6 +3,7 @@ import { Dialog } from "primevue";
import { useErrorStore } from "./stores/error.store"; import { useErrorStore } from "./stores/error.store";
import CommentScheme from "./comment/CommentScheme.vue"; import CommentScheme from "./comment/CommentScheme.vue";
import PosttypeScheme from "./posttype/PosttypeScheme.vue"; import PosttypeScheme from "./posttype/PosttypeScheme.vue";
import PostScheme from "./post/PostScheme.vue";
const errorStore = useErrorStore(); const errorStore = useErrorStore();
</script> </script>
@@ -17,6 +18,6 @@ const errorStore = useErrorStore();
<h1 class="text-red-500 text-2xl">{{ errorStore.message }}</h1> <h1 class="text-red-500 text-2xl">{{ errorStore.message }}</h1>
</Dialog> </Dialog>
<main class="w-screen h-screen"> <main class="w-screen h-screen">
<PosttypeScheme></PosttypeScheme> <PostScheme></PostScheme>
</main> </main>
</template> </template>

View File

@@ -43,9 +43,10 @@ const scheme: Scheme<Post> = reactive({
Id: { Id: {
hidden: true, hidden: true,
russian: 'Id',
type: { type: {
primitive: "number", primitive: "number",
}, }
}, },
Text: { Text: {
@@ -113,6 +114,9 @@ const scheme: Scheme<Post> = reactive({
field: ["Text"], field: ["Text"],
}, },
}, },
customWindow: {
create: true,
}
}, },
}); });
@@ -127,6 +131,10 @@ const validate: Validate<Post> = (entity) => {
<template> <template>
<main class="w-screen h-screen"> <main class="w-screen h-screen">
<Table :scheme :service :get-defaults :load :items :validate></Table> <Table :scheme :service :get-defaults :load :items :validate>
<template #CommentsCreate="{ data }">
<p>{{ data.Comments }}</p>
</template>
</Table>
</main> </main>
</template> </template>

View File

@@ -71,10 +71,10 @@ async function handleSave() {
class="flex items-center gap-5"> class="flex items-center gap-5">
<h1 class="w-[200px]">{{ props.scheme[key].russian }}</h1> <h1 class="w-[200px]">{{ props.scheme[key].russian }}</h1>
<div v-if="props.scheme[key]?.customWindow?.[props.updateMode ? 'update' : 'create']"> <div v-if="props.scheme[key]?.customWindow?.[props.updateMode ? 'update' : 'create']">
<slot :name="<string>key + (props.updateMode ? 'Update' : 'Create')"></slot> <slot :name="<string>key + (props.updateMode ? 'Update' : 'Create')" :data="editableItem"></slot>
</div> </div>
<div v-else-if="props.scheme[key]?.customWindow?.common"> <div v-else-if="props.scheme[key]?.customWindow?.common">
<slot :name="<string>key"></slot> <slot :name="<string>key" :data="editableItem"></slot>
</div> </div>
<InputNumber class="w-[300px]" v-model:model-value="<number>editableItem![key]" <InputNumber class="w-[300px]" v-model:model-value="<number>editableItem![key]"
v-else-if="props.scheme[key]?.type?.primitive === 'number'" /> v-else-if="props.scheme[key]?.type?.primitive === 'number'" />

View File

@@ -79,45 +79,24 @@ watch(() => props.items, () => {
</script> </script>
<template> <template>
<DialogWindow <DialogWindow :name :load :items :validate :scheme :service :get-defaults v-model:item="<T>createItem"
:name v-model:show="showCreate" @on-save="data => emits('onSave', data)"
:load @on-save-create="data => emits('onSaveCreate', data)">
:items <template v-for="key in keys" #[key]="{ data }">
:validate <slot :name="<string>key" :data></slot>
:scheme
:service
:get-defaults
v-model:item="<T>createItem"
v-model:show="showCreate"
@on-save="data => emits('onSave', data)"
@on-save-create="data => emits('onSaveCreate', data)"
>
<template v-for="key in keys" #[key]>
<slot :name="<string>key"></slot>
</template> </template>
<template v-for="key in keys" #[createSlotName(key)]> <template v-for="key in keys" #[createSlotName(key)]="{ data }">
<slot :name="createSlotName(key)"></slot> <slot :name="createSlotName(key)" :data></slot>
</template> </template>
</DialogWindow> </DialogWindow>
<DialogWindow <DialogWindow :name :load :items :validate :scheme update-mode :service :get-defaults v-model:item="<T>updateItem"
:name v-model:show="showUpdate" @on-save="data => emits('onSave', data)"
:load @on-save-update="data => emits('onSaveUpdate', data)">
:items <template v-for="key in keys" #[key]="{ data }">
:validate <slot :name="<string>key" :data></slot>
:scheme
update-mode
:service
:get-defaults
v-model:item="<T>updateItem"
v-model:show="showUpdate"
@on-save="data => emits('onSave', data)"
@on-save-update="data => emits('onSaveUpdate', data)"
>
<template v-for="key in keys" #[key]>
<slot :name="<string>key"></slot>
</template> </template>
<template v-for="key in keys" #[updateSlotName(key)]> <template v-for="key in keys" #[updateSlotName(key)]="{ data }">
<slot :name="updateSlotName(key)"></slot> <slot :name="updateSlotName(key)" :data></slot>
</template> </template>
</DialogWindow> </DialogWindow>
<div> <div>
@@ -126,10 +105,7 @@ watch(() => props.items, () => {
<p>{{ props.name }}</p> <p>{{ props.name }}</p>
</template> </template>
<template v-for="key in keys"> <template v-for="key in keys">
<Column <Column :header="props.scheme[key]?.russian" v-if="!props.scheme[key].hidden">
:header="props.scheme[key]?.russian"
v-if="!props.scheme[key].hidden"
>
<template #body="{ data }"> <template #body="{ data }">
<p class=""> <p class="">
{{ {{
@@ -145,24 +121,16 @@ watch(() => props.items, () => {
<Column header="Действия"> <Column header="Действия">
<template #body="{ data }"> <template #body="{ data }">
<div class="flex gap-2"> <div class="flex gap-2">
<Button <Button severity="secondary" icon="pi pi-pencil" @click="async () => {
severity="secondary"
icon="pi pi-pencil"
@click="async () => {
await emits('onUpdateOpen') await emits('onUpdateOpen')
await emits('onOpen') await emits('onOpen')
updateItem = data updateItem = data
}" }"></Button>
></Button> <Button severity="danger" icon="pi pi-trash" @click="async () => {
<Button
severity="danger"
icon="pi pi-trash"
@click="async () => {
await emits('onDelete', data) await emits('onDelete', data)
await props.service.delete(data.Id) await props.service.delete(data.Id)
await load() await load()
}" }"></Button>
></Button>
</div> </div>
</template> </template>
</Column> </Column>