feat: injections data propertions
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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'" />
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user