ui-editor-page, hmmm
This commit is contained in:
@@ -53,9 +53,24 @@ public class UsersController : ZeroApiController
|
||||
//public virtual Task<ActionResult<Result>> Create(ZeroUser saveModel) => CreateModel(saveModel);
|
||||
|
||||
|
||||
//[HttpPut("{id}")]
|
||||
//[ZeroAuthorize(UserPermissions.Update)]
|
||||
//public virtual Task<ActionResult<Result>> Update(string id, ZeroUser updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken);
|
||||
[HttpPut("{id}")]
|
||||
[ZeroAuthorize(UserPermissions.Update)]
|
||||
public virtual async Task<ActionResult<Result>> Update(string id, ZeroUser updateModel, [FromQuery] string changeToken = null)
|
||||
{
|
||||
if (id != updateModel.Id)
|
||||
{
|
||||
return BadRequest(Result.Fail(nameof(id), "@errors.onupdate.noidmatch"));
|
||||
}
|
||||
|
||||
Result<ZeroUser> result = await Users.Save(updateModel);
|
||||
|
||||
if (Hints.ResponsePreference == ApiResponsePreference.Minimal)
|
||||
{
|
||||
return result.WithoutModel();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//[HttpDelete("{id}")]
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
}),
|
||||
|
||||
watch: {
|
||||
'$route': function ()
|
||||
{
|
||||
this.$emit('load', this);
|
||||
},
|
||||
//'$route': function (val)
|
||||
//{
|
||||
// this.$emit('load', this);
|
||||
//},
|
||||
state(val)
|
||||
{
|
||||
this.slotProps.state = val;
|
||||
|
||||
@@ -6,4 +6,5 @@ export default function (app: App)
|
||||
app.component('ui-editor', defineAsyncComponent(() => import('./ui-editor.vue')));
|
||||
app.component('ui-editor-infos', defineAsyncComponent(() => import('./ui-editor-infos.vue')));
|
||||
app.component('ui-editor-header', defineAsyncComponent(() => import('./ui-editor-header.vue')));
|
||||
app.component('ui-editor-page', defineAsyncComponent(() => import('./ui-editor-page.vue')));
|
||||
};
|
||||
@@ -0,0 +1,87 @@
|
||||
<template>
|
||||
<ui-form ref="form" class="editor-page" v-slot="form" @submit="onSubmit" @load="onLoad" :route="route">
|
||||
<ui-form-header v-model:value="model" :prefix="prefix" :title="title" :disabled="disabled" :is-create="!id" :state="form.state" :can-delete="meta.canDelete" @delete="onDelete" />
|
||||
<ui-editor :config="editor" v-model="model" :meta="meta" :disabled="disabled" :scope="true">
|
||||
<template v-slot:below>
|
||||
<ui-editor-infos v-model="model" :disabled="disabled" />
|
||||
</template>
|
||||
</ui-editor>
|
||||
</ui-form>
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'uiEditorPage',
|
||||
|
||||
props: {
|
||||
api: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
editor: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
prefix: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
route: {
|
||||
type: String,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
computed: {
|
||||
id()
|
||||
{
|
||||
return this.$route.params.id;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
data: () => ({
|
||||
meta: {},
|
||||
model: {},
|
||||
disabled: false
|
||||
}),
|
||||
|
||||
methods: {
|
||||
|
||||
async onLoad(form)
|
||||
{
|
||||
var config = { system: this.$route.query['zero.scope'] == 'system' };
|
||||
const response = await form.load(() => this.id ? this.api.getById(this.id, undefined, config) : this.api.getEmpty(this.$route.query['zero.flavor'], config));
|
||||
this.model = response;
|
||||
},
|
||||
|
||||
|
||||
async onSubmit(form)
|
||||
{
|
||||
var config = { system: this.$route.query['zero.scope'] == 'system' };
|
||||
const response = this.id ? await this.api.update(this.model, config) : await this.api.create(this.model, config);
|
||||
await form.handle(response);
|
||||
},
|
||||
|
||||
|
||||
onDelete(item, opts)
|
||||
{
|
||||
opts.hide();
|
||||
var config = { system: this.$route.query['zero.scope'] == 'system' };
|
||||
this.$refs.form.onDelete(this.api.delete.bind(this, this.id, config));
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
@@ -1,57 +1,11 @@
|
||||
<template>
|
||||
<ui-form ref="form" class="country" v-slot="form" @submit="onSubmit" @load="onLoad" :route="route">
|
||||
<ui-form-header v-model:value="model" prefix="@country.list" title="@country.name" :disabled="disabled" :is-create="!id" :state="form.state" :can-delete="meta.canDelete" @delete="onDelete" />
|
||||
<ui-editor config="countries:edit" v-model="model" :meta="meta" :disabled="disabled">
|
||||
<template v-slot:below>
|
||||
<ui-editor-infos v-model="model" :disabled="disabled" />
|
||||
</template>
|
||||
</ui-editor>
|
||||
</ui-form>
|
||||
<ui-editor-page :api="api" editor="countries:edit" title="@country.name" prefix="@country.list" route="countries-edit" />
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import api from './api';
|
||||
|
||||
export default {
|
||||
props: ['id'],
|
||||
|
||||
data: () => ({
|
||||
meta: {},
|
||||
model: { name: null, features: [], domains: [] },
|
||||
route: 'countries-edit',
|
||||
disabled: false
|
||||
}),
|
||||
|
||||
methods: {
|
||||
|
||||
async onLoad(form)
|
||||
{
|
||||
const response = await form.load(() => this.id ? api.getById(this.id) : api.getEmpty(this.$route.query['zero.flavor']));
|
||||
this.model = response;
|
||||
},
|
||||
|
||||
|
||||
async onSubmit(form)
|
||||
{
|
||||
const response = this.id ? await api.update(this.model) : await api.create(this.model);
|
||||
await form.handle(response);
|
||||
},
|
||||
|
||||
|
||||
onDelete(item, opts)
|
||||
{
|
||||
opts.hide();
|
||||
this.$refs.form.onDelete(api.delete.bind(this, this.id));
|
||||
}
|
||||
}
|
||||
data: () => ({ api })
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="scss">
|
||||
.country .country-flag-input
|
||||
{
|
||||
max-width: 80px;
|
||||
}
|
||||
</style>
|
||||
</script>
|
||||
@@ -1,50 +1,11 @@
|
||||
<template>
|
||||
<ui-form ref="form" class="language" v-slot="form" @submit="onSubmit" @load="onLoad" :route="route">
|
||||
<ui-form-header v-model:value="model" prefix="@language.list" title="@language.name" :disabled="disabled" :is-create="!id" :state="form.state" :can-delete="meta.canDelete" @delete="onDelete" />
|
||||
<ui-editor config="languages:edit" v-model="model" :meta="meta" :disabled="disabled" :scope="true">
|
||||
<template v-slot:below>
|
||||
<ui-editor-infos v-model="model" :disabled="disabled" />
|
||||
</template>
|
||||
</ui-editor>
|
||||
</ui-form>
|
||||
<ui-editor-page :api="api" editor="languages:edit" title="@language.name" prefix="@language.list" route="languages-edit" />
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import api from './api';
|
||||
|
||||
export default {
|
||||
props: ['id'],
|
||||
|
||||
data: () => ({
|
||||
meta: {},
|
||||
model: { },
|
||||
route: 'languages-edit',
|
||||
disabled: false
|
||||
}),
|
||||
|
||||
methods: {
|
||||
|
||||
async onLoad(form)
|
||||
{
|
||||
var config = { system: this.$route.query['zero.scope'] == 'system' };
|
||||
const response = await form.load(() => this.id ? api.getById(this.id, undefined, config) : api.getEmpty(this.$route.query['zero.flavor'], config));
|
||||
this.model = response;
|
||||
},
|
||||
|
||||
|
||||
async onSubmit(form)
|
||||
{
|
||||
const response = this.id ? await api.update(this.model) : await api.create(this.model);
|
||||
await form.handle(response);
|
||||
},
|
||||
|
||||
|
||||
onDelete(item, opts)
|
||||
{
|
||||
opts.hide();
|
||||
this.$refs.form.onDelete(api.delete.bind(this, this.id));
|
||||
}
|
||||
}
|
||||
data: () => ({ api })
|
||||
}
|
||||
</script>
|
||||
@@ -1,49 +1,10 @@
|
||||
<template>
|
||||
<ui-form ref="form" class="mailtemplate" v-slot="form" @submit="onSubmit" @load="onLoad" :route="route">
|
||||
<ui-form-header v-model:value="model" prefix="@mailtemplate.list" title="@mailtemplate.name" :disabled="disabled" :is-create="!id" :state="form.state" :can-delete="meta.canDelete" @delete="onDelete" />
|
||||
<ui-editor config="mailtemplates:edit" v-model="model" :meta="meta" :disabled="disabled">
|
||||
<template v-slot:below>
|
||||
<ui-editor-infos v-model="model" :disabled="disabled" />
|
||||
</template>
|
||||
</ui-editor>
|
||||
</ui-form>
|
||||
<ui-editor-page :api="api" editor="mailtemplates:edit" title="@mailtemplate.name" prefix="@mailtemplate.list" route="mailtemplates-edit" />
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import api from './api';
|
||||
|
||||
export default {
|
||||
props: ['id'],
|
||||
|
||||
data: () => ({
|
||||
meta: {},
|
||||
model: { name: null },
|
||||
route: 'mailtemplates-edit',
|
||||
disabled: false
|
||||
}),
|
||||
|
||||
methods: {
|
||||
|
||||
async onLoad(form)
|
||||
{
|
||||
const response = await form.load(() => this.id ? api.getById(this.id) : api.getEmpty(this.$route.query['zero.flavor']));
|
||||
this.model = response;
|
||||
},
|
||||
|
||||
|
||||
async onSubmit(form)
|
||||
{
|
||||
const response = this.id ? await api.update(this.model) : await api.create(this.model);
|
||||
await form.handle(response);
|
||||
},
|
||||
|
||||
|
||||
onDelete(item, opts)
|
||||
{
|
||||
opts.hide();
|
||||
this.$refs.form.onDelete(api.delete.bind(this, this.id));
|
||||
}
|
||||
}
|
||||
data: () => ({ api })
|
||||
}
|
||||
</script>
|
||||
@@ -1,52 +1,10 @@
|
||||
<template>
|
||||
<ui-form ref="form" class="translation" v-slot="form" @submit="onSubmit" @load="onLoad" :route="route">
|
||||
<ui-form-header v-model:value="model" prefix="@translation.list" title="@translation.name" :disabled="disabled" :is-create="!id" :state="form.state" :active-disabled="true" :can-delete="meta.canDelete" @delete="onDelete" />
|
||||
<ui-editor config="translations:edit" v-model="model" :meta="meta" :disabled="disabled" :scope="true">
|
||||
<template v-slot:below>
|
||||
<ui-editor-infos v-model="model" :disabled="disabled" />
|
||||
</template>
|
||||
</ui-editor>
|
||||
</ui-form>
|
||||
<ui-editor-page :api="api" editor="translations:edit" title="@translation.name" prefix="@translation.list" route="translations-edit" />
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import api from './api';
|
||||
|
||||
export default {
|
||||
props: ['id'],
|
||||
|
||||
data: () => ({
|
||||
meta: {},
|
||||
model: { },
|
||||
route: 'translations-edit',
|
||||
disabled: false
|
||||
}),
|
||||
|
||||
methods: {
|
||||
|
||||
async onLoad(form)
|
||||
{
|
||||
var config = { system: this.$route.query['zero.scope'] == 'system' };
|
||||
const response = await form.load(() => this.id ? api.getById(this.id, undefined, config) : api.getEmpty(this.$route.query['zero.flavor'], config));
|
||||
this.model = response;
|
||||
},
|
||||
|
||||
|
||||
async onSubmit(form)
|
||||
{
|
||||
var config = { system: this.$route.query['zero.scope'] == 'system' };
|
||||
const response = this.id ? await api.update(this.model, config) : await api.create(this.model, config);
|
||||
await form.handle(response);
|
||||
},
|
||||
|
||||
|
||||
onDelete(item, opts)
|
||||
{
|
||||
var config = { system: this.$route.query['zero.scope'] == 'system' };
|
||||
opts.hide();
|
||||
this.$refs.form.onDelete(api.delete.bind(this, this.id, config));
|
||||
}
|
||||
}
|
||||
data: () => ({ api })
|
||||
}
|
||||
</script>
|
||||
@@ -10,7 +10,7 @@ export default {
|
||||
|
||||
//create: (model: any, config?: ApiRequestConfig) => post('countries', model, config),
|
||||
|
||||
//update: (model: any, config?: ApiRequestConfig) => put('countries/' + model.id, model, config),
|
||||
update: (model: any, config?: ApiRequestConfig) => put('users/' + model.id, model, config),
|
||||
|
||||
//delete: (id: string, config?: ApiRequestConfig) => del('countries/' + id, null, config),
|
||||
|
||||
|
||||
@@ -1,49 +1,11 @@
|
||||
<template>
|
||||
<ui-form ref="form" class="user" v-slot="form" @submit="onSubmit" @load="onLoad" :route="route">
|
||||
<ui-form-header v-model:value="model" prefix="@user.users" title="@user.name" :disabled="disabled" :is-create="!id" :state="form.state" :can-delete="meta.canDelete" @delete="onDelete" />
|
||||
<ui-editor config="users:edit" v-model="model" :meta="meta" :disabled="disabled">
|
||||
<template v-slot:below>
|
||||
<ui-editor-infos v-model="model" :disabled="disabled" />
|
||||
</template>
|
||||
</ui-editor>
|
||||
</ui-form>
|
||||
<ui-editor-page :api="api" editor="users:edit" title="@user.name" prefix="@user.list" route="users-edit" />
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import api from './api';
|
||||
|
||||
export default {
|
||||
props: ['id'],
|
||||
|
||||
data: () => ({
|
||||
meta: {},
|
||||
model: { name: null },
|
||||
route: 'users-edit',
|
||||
disabled: false
|
||||
}),
|
||||
|
||||
methods: {
|
||||
|
||||
async onLoad(form)
|
||||
{
|
||||
const response = await form.load(() => this.id ? api.getById(this.id) : api.getEmpty(this.$route.query['zero.flavor']));
|
||||
this.model = response;
|
||||
},
|
||||
|
||||
|
||||
async onSubmit(form)
|
||||
{
|
||||
const response = this.id ? await api.update(this.model) : await api.create(this.model);
|
||||
await form.handle(response);
|
||||
},
|
||||
|
||||
|
||||
onDelete(item, opts)
|
||||
{
|
||||
opts.hide();
|
||||
this.$refs.form.onDelete(api.delete.bind(this, this.id));
|
||||
}
|
||||
}
|
||||
data: () => ({ api })
|
||||
}
|
||||
</script>
|
||||
@@ -62,9 +62,10 @@ public class UserService : IUserService
|
||||
|
||||
if (!model.Id.IsNullOrEmpty())
|
||||
{
|
||||
ZeroUser origin = await GetUserById(model.Id);
|
||||
isUpdate = origin != null;
|
||||
updateSecurityStamp = origin != null && model.PasswordHash != origin.PasswordHash;
|
||||
// TODO throws "Attempted to associate a different object with id ..."
|
||||
//ZeroUser origin = await GetUserById(model.Id);
|
||||
isUpdate = true; // origin != null;
|
||||
updateSecurityStamp = true; // origin != null && model.PasswordHash != origin.PasswordHash;
|
||||
}
|
||||
|
||||
Result<ZeroUser> result = isUpdate ? await Operations.Update(model) : await Operations.Create(model);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"zero": "Debug",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user