|
|
|
@ -22,10 +22,10 @@
|
|
|
|
|
<component :is="getDisplayComponent(key)" :title="value.title" :name="key" :value="data.model[key]" :data="data.data" v-if="data.model" />
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else>
|
|
|
|
|
<component :is="getEditComponent(key)" mode="'edit'" :title="value.title" :name="key" :value.sync="data.model[key]" @change="change" :data="data.data" />
|
|
|
|
|
<component :is="getEditComponent(key)" mode="edit" :title="value.title" :name="key" :value.sync="data.model[key]" :data="data.data" :nullable="value.nullable" @change="change" />
|
|
|
|
|
</template>
|
|
|
|
|
<div style="height:1em;">
|
|
|
|
|
<span v-if="hasErrors(key)" class="field-validation-error text-danger">{{getErrors(key)}}</span>
|
|
|
|
|
<span v-if="hasErrors(key)" class="field-validation-error text-danger">{{getErrorList(key)}}</span>
|
|
|
|
|
<span v-else class="text-danger field-validation-valid"></span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
@ -90,10 +90,21 @@
|
|
|
|
|
vm.data = response.data;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
getSchema: function () {
|
|
|
|
|
return this.data.schema;
|
|
|
|
|
},
|
|
|
|
|
getModel: function () {
|
|
|
|
|
return this.data.model;
|
|
|
|
|
},
|
|
|
|
|
getErrors: function () {
|
|
|
|
|
return this.data.errors;
|
|
|
|
|
},
|
|
|
|
|
change: function (name) {
|
|
|
|
|
var vm = this;
|
|
|
|
|
var value = this.data.model[name];
|
|
|
|
|
var property = this.data.schema.properties[name];
|
|
|
|
|
var schema = this.getSchema();
|
|
|
|
|
var model = this.getModel();
|
|
|
|
|
var property = schema.properties[name];
|
|
|
|
|
var value = model[name];
|
|
|
|
|
var list = [];
|
|
|
|
|
list.push(
|
|
|
|
|
this.validInternal(property.required, name, o => Promise.resolve(value !== undefined && value !== null))
|
|
|
|
@ -156,8 +167,9 @@
|
|
|
|
|
},
|
|
|
|
|
valid: function () {
|
|
|
|
|
var vm = this;
|
|
|
|
|
var schema = this.getSchema();
|
|
|
|
|
var list = [];
|
|
|
|
|
_.forIn(this.data.schema.properties, function (value, key) {
|
|
|
|
|
_.forIn(schema.properties, function (value, key) {
|
|
|
|
|
list.push(vm.change(key));
|
|
|
|
|
});
|
|
|
|
|
return Promise.all(list);
|
|
|
|
@ -167,11 +179,33 @@
|
|
|
|
|
var vm = this;
|
|
|
|
|
message = message || validator.message;
|
|
|
|
|
return valid().then(function (value) {
|
|
|
|
|
var error = Enumerable.from(vm.data.errors).firstOrDefault(o => o.key.toLowerCase() === name.toLowerCase());
|
|
|
|
|
if (value) {
|
|
|
|
|
vm.removeError(name, message);
|
|
|
|
|
if (error) {
|
|
|
|
|
if (Enumerable.from(error.value.errors).any(o => o.errorMessage === message)) {
|
|
|
|
|
error.value.errors = Enumerable.from(error.value.errors).where(o => o.errorMessage !== message).toArray();
|
|
|
|
|
}
|
|
|
|
|
if (error.value.errors.length === 0) {
|
|
|
|
|
var index = _.findIndex(vm.data.errors, o => o.key.toLowerCase() === name.toLowerCase());
|
|
|
|
|
vm.getErrors().splice(index, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
vm.updateError(name, message);
|
|
|
|
|
if (!error) {
|
|
|
|
|
error = {
|
|
|
|
|
key: name,
|
|
|
|
|
value: {
|
|
|
|
|
errors: [{ errorMessage: message }]
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
vm.data.errors.push(error);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (!Enumerable.from(error.value.errors).any(o => o.errorMessage === message)) {
|
|
|
|
|
error.value.errors.push({ errorMessage: message });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -180,37 +214,8 @@
|
|
|
|
|
camelCased: function (name) {
|
|
|
|
|
return name[0].toLowerCase() + name.substr(1);
|
|
|
|
|
},
|
|
|
|
|
removeError: function (name, message) {
|
|
|
|
|
var error = Enumerable.from(this.data.errors).firstOrDefault(o => o.key.toLowerCase() === name.toLowerCase());
|
|
|
|
|
if (error) {
|
|
|
|
|
if (Enumerable.from(error.value.errors).any(o => o.errorMessage === message)) {
|
|
|
|
|
error.value.errors = Enumerable.from(error.value.errors).where(o => o.errorMessage !== message).toArray();
|
|
|
|
|
}
|
|
|
|
|
if (error.value.errors.length === 0) {
|
|
|
|
|
var index = _.findIndex(this.data.errors, o => o.key.toLowerCase() === name.toLowerCase());
|
|
|
|
|
this.data.errors.splice(index, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
updateError: function (name, message) {
|
|
|
|
|
var error = Enumerable.from(this.data.errors).firstOrDefault(o => o.key.toLowerCase() === name.toLowerCase());
|
|
|
|
|
if (!error) {
|
|
|
|
|
error = {
|
|
|
|
|
key: name,
|
|
|
|
|
value: {
|
|
|
|
|
errors: [{ errorMessage: message }]
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
this.data.errors.push(error);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (!Enumerable.from(error.value.errors).any(o => o.errorMessage === message)) {
|
|
|
|
|
error.value.errors.push({ errorMessage: message });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getValidationSummary: function (excludePropertyErrors) {
|
|
|
|
|
var query = Enumerable.from(this.data.errors);
|
|
|
|
|
var query = Enumerable.from(this.getErrors());
|
|
|
|
|
if (excludePropertyErrors) {
|
|
|
|
|
query = query.where(o => o.key === '')
|
|
|
|
|
}
|
|
|
|
@ -218,11 +223,11 @@
|
|
|
|
|
},
|
|
|
|
|
hasErrors: function (key) {
|
|
|
|
|
key = key.toLowerCase();
|
|
|
|
|
return Enumerable.from(this.data.errors).any(o => o.key.toLowerCase() === key);
|
|
|
|
|
return Enumerable.from(this.getErrors()).any(o => o.key.toLowerCase() === key);
|
|
|
|
|
},
|
|
|
|
|
getErrors: function (key) {
|
|
|
|
|
getErrorList: function (key) {
|
|
|
|
|
key = key.toLowerCase();
|
|
|
|
|
return Enumerable.from(this.data.errors)
|
|
|
|
|
return Enumerable.from(this.getErrors())
|
|
|
|
|
.where(o => o.key.toLowerCase() === key).selectMany(o => o.value.errors).select(o => o.errorMessage).toArray().join(',');
|
|
|
|
|
},
|
|
|
|
|
hasPermission: function () {
|
|
|
|
|