fix: creating, updating
This commit is contained in:
@@ -1,62 +1,8 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import type { IEntity } from './types/entity.type';
|
||||
import type { IService } from './types/service.type';
|
||||
import type { Scheme } from './types/scheme.type';
|
||||
import Table from './table/Table.vue';
|
||||
import { getDefaultValues } from './utils/structs/defaults.util';
|
||||
import PostScheme from './post/PostScheme.vue';
|
||||
|
||||
class Entity implements IEntity {
|
||||
constructor(public Id: number, public Name: string, public Region: string) { }
|
||||
}
|
||||
|
||||
class Service implements IService<Entity> {
|
||||
private readonly entities = ref<Entity[]>([])
|
||||
private maxId = 0
|
||||
|
||||
async create(data: Entity): Promise<void | never> {
|
||||
this.maxId++
|
||||
this.entities.value.push({ ...data, Id: this.maxId })
|
||||
}
|
||||
async delete(id: number): Promise<void | never> {
|
||||
this.entities.value = this.entities.value.filter(el => el.Id != id)
|
||||
}
|
||||
async read(id: number): Promise<Entity | undefined> {
|
||||
return this.entities.value.find(el => el.Id == id)
|
||||
}
|
||||
async readAll(): Promise<Entity[]> {
|
||||
return this.entities.value
|
||||
}
|
||||
async update(data: Entity): Promise<void | never> {
|
||||
this.entities.value = this.entities.value.map(el => el.Id == data.Id ? data : el)
|
||||
}
|
||||
}
|
||||
|
||||
const service = new Service
|
||||
|
||||
const scheme: Scheme<Entity> = {
|
||||
Id: {
|
||||
hidden: true,
|
||||
russian: 'Id'
|
||||
},
|
||||
Name: {
|
||||
type: {
|
||||
primitive: 'string'
|
||||
},
|
||||
russian: 'Имя'
|
||||
},
|
||||
Region: {
|
||||
type: {
|
||||
nested: {
|
||||
field: [],
|
||||
values: ['kemerovo', 'kuzbass', 'berlin']
|
||||
}
|
||||
},
|
||||
russian: "Место жительства"
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Table :scheme :service :get-defaults="() => getDefaultValues(scheme)"></Table>
|
||||
<PostScheme />
|
||||
</template>
|
||||
|
||||
38
frontend/src/author/AuthorScheme.vue
Normal file
38
frontend/src/author/AuthorScheme.vue
Normal file
@@ -0,0 +1,38 @@
|
||||
<script setup lang="ts">
|
||||
import Table from '../table/Table.vue'
|
||||
import { onMounted, reactive } from 'vue'
|
||||
import { getDefaultValues } from '../utils/structs/defaults.util'
|
||||
import S from './author.service.ts'
|
||||
import type { Scheme } from '../types/scheme.type'
|
||||
import { Author } from '../../bindings/app/internal/services/models.ts'
|
||||
|
||||
const service = new S
|
||||
|
||||
onMounted(async () => {
|
||||
|
||||
})
|
||||
|
||||
|
||||
const scheme: Scheme<Author> = reactive({
|
||||
Id:{
|
||||
type: {
|
||||
primitive: "number",
|
||||
},
|
||||
},
|
||||
Name:{
|
||||
type: {
|
||||
primitive: "string",
|
||||
},
|
||||
},
|
||||
|
||||
})
|
||||
|
||||
const getDefaults = () => getDefaultValues(scheme)
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<main class="w-screen h-screen">
|
||||
<Table :scheme :service :getDefaults></Table>
|
||||
</main>
|
||||
</template>
|
||||
27
frontend/src/author/author.service.ts
Normal file
27
frontend/src/author/author.service.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { GetAll, Create, Delete, GetById, Update, Count } from "../../bindings/app/internal/services/authorservice.ts"
|
||||
import type { Author } from "../../bindings/app/internal/services/models.ts"
|
||||
import type { IService } from "../types/service.type.ts"
|
||||
|
||||
export default class AuthorService implements IService<Author> {
|
||||
async read(id: number) {
|
||||
return await GetById(id)
|
||||
}
|
||||
|
||||
async readAll() {
|
||||
return await GetAll() as Author[]
|
||||
}
|
||||
|
||||
async create(item: Author) {
|
||||
await Create(item)
|
||||
}
|
||||
|
||||
async delete(id: number) {
|
||||
return await Delete(id)
|
||||
}
|
||||
async update(item: Author) {
|
||||
await Update(item)
|
||||
}
|
||||
async count() {
|
||||
return await Count()
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ Id:{
|
||||
type: {
|
||||
primitive: "number",
|
||||
},
|
||||
hidden: true,
|
||||
},
|
||||
Text:{
|
||||
type: {
|
||||
|
||||
@@ -8,7 +8,7 @@ export default class PostService implements IService<Post> {
|
||||
}
|
||||
|
||||
async readAll() {
|
||||
return await GetAll()
|
||||
return await GetAll() as Post[]
|
||||
}
|
||||
|
||||
async create(item: Post) {
|
||||
|
||||
@@ -62,8 +62,7 @@ const emits = defineEmits<{
|
||||
</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"
|
||||
: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) }}
|
||||
@@ -78,15 +77,16 @@ const emits = defineEmits<{
|
||||
<template #footer>
|
||||
<Button severity="success" @click="async () => {
|
||||
if (props.updateMode) {
|
||||
props.service.update(createItem as T)
|
||||
emits('onSaveUpdate', createItem as T)
|
||||
emits('onSave', createItem as T)
|
||||
await props.service.update(createItem as T)
|
||||
await emits('onSaveUpdate', createItem as T)
|
||||
await emits('onSave', createItem as T)
|
||||
} else {
|
||||
props.service.create(createItem as T)
|
||||
emits('onSaveCreate', createItem as T)
|
||||
emits('onSave', createItem as T)
|
||||
if (createItem) createItem.Id = 0;
|
||||
await props.service.create(createItem as T)
|
||||
await emits('onSaveCreate', createItem as T)
|
||||
await emits('onSave', createItem as T)
|
||||
}
|
||||
items = await service.readAll() as UnwrapRef<T[]>
|
||||
items = await props.service.readAll() as UnwrapRef<T[]>
|
||||
showCreate = false
|
||||
}">Сохранить</Button>
|
||||
</template>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export interface IService<T> {
|
||||
read(id: number): Promise<T | undefined>
|
||||
read(id: number): Promise<T | null>
|
||||
readAll(): Promise<T[]>
|
||||
create(data: T): Promise<void | never>
|
||||
update(data: T): Promise<void | never>
|
||||
|
||||
Reference in New Issue
Block a user