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

View File

@@ -43,9 +43,10 @@ const scheme: Scheme<Post> = reactive({
Id: {
hidden: true,
russian: 'Id',
type: {
primitive: "number",
},
}
},
Text: {
@@ -113,6 +114,9 @@ const scheme: Scheme<Post> = reactive({
field: ["Text"],
},
},
customWindow: {
create: true,
}
},
});
@@ -127,6 +131,10 @@ const validate: Validate<Post> = (entity) => {
<template>
<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>
</template>

View File

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

View File

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