This commit is contained in:
2021-06-30 18:24:30 +00:00
parent 7f07174f99
commit e3a7d9aec1

View File

@@ -4,7 +4,7 @@
<div v-if="formState.ready">
<gz-error :error-box-message="formState.errorBoxMessage"></gz-error>
{{ isUnsavedDuplicate }}
<v-form ref="form">
<v-tabs mobile-breakpoint="100" v-model="tab">
<v-tab>{{ $ay.t("User") }}</v-tab>
@@ -213,7 +213,10 @@
></v-col>
</v-row>
</v-tab-item>
<v-tab-item v-if="obj.id != 0" class="mt-4 ml-2">
<v-tab-item
v-if="obj.id != 0 || isUnsavedDuplicate"
class="mt-4 ml-2"
>
<v-row>
<v-col cols="12" sm="6" lg="4" xl="3">
<v-select
@@ -433,6 +436,30 @@ export default {
vm.formState.readOnly = !vm.rights.change;
window.$gz.eventBus.$on("menu-click", clickHandler);
// //id 0 means create or duplicate to new
// if (vm.$route.params.recordid != 0) {
// //is there already an obj from a prior operation?
// if (this.$route.params.obj) {
// //yes, no need to fetch it
// this.obj = this.$route.params.obj;
// this.optionsObj = this.$route.params.optionsObj;
// vm.formState.loading = false; //here we handle it immediately
// } else {
// await vm.getDataFromApi(vm.$route.params.recordid); //let getdata handle loading
// }
// } else {
// vm.formState.loading = false; //here we handle it immediately
// }
// //set initial form status
// window.$gz.form.setFormState({
// vm: vm,
// dirty: false,
// valid: true
// });
let setDirty = false;
let setValid = true;
//id 0 means create or duplicate to new
if (vm.$route.params.recordid != 0) {
//is there already an obj from a prior operation?
@@ -440,18 +467,31 @@ export default {
//yes, no need to fetch it
this.obj = this.$route.params.obj;
this.optionsObj = this.$route.params.optionsObj;
vm.formState.loading = false; //here we handle it immediately
} else {
await vm.getDataFromApi(vm.$route.params.recordid); //let getdata handle loading
}
} else {
vm.formState.loading = false; //here we handle it immediately
//Might be a duplicate and contain another record
if (this.$route.params.obj) {
this.obj = this.$route.params.obj;
this.optionsObj = this.$route.params.optionsObj;
this.obj.concurrency = undefined;
this.optionsObj.concurrency = undefined;
this.obj.id = 0;
this.optionsObj.id = 0;
this.obj.name = `${this.obj.name} - ${window.$gz.translation.get(
"Copy"
)}`;
this.isUnsavedDuplicate = true;
setDirty = true;
}
}
//set initial form status
window.$gz.form.setFormState({
vm: vm,
dirty: false,
valid: true
loading: false,
dirty: setDirty,
valid: setValid
});
generateMenu(vm);
@@ -540,9 +580,9 @@ export default {
appError: null,
serverError: {}
},
rights: window.$gz.role.defaultRightsObject(),
ayaType: window.$gz.type.User
ayaType: window.$gz.type.User,
isUnsavedDuplicate: false
};
},
//WATCHERS
@@ -670,6 +710,7 @@ export default {
window.$gz.form.deleteAllErrorBoxErrors(vm);
//add in password and login if changed
//todo: unnecessary variable here, it's just a reference, not sure why it's coded this way
let submitObject = vm.obj;
if (vm.password != null && vm.password != "") {
submitObject.password = vm.password;
@@ -689,7 +730,15 @@ export default {
if (res.data.id) {
//POST - whole new object returned
vm.obj = res.data;
await vm.getUserOptionsDataFromApi();
//might be a duplicate, so rather than fetch here it would be another save like a put
if (vm.isUnsavedDuplicate) {
vm.optionsObj.userId = res.data.id;
await vm.submitOptions();
} else {
await vm.getUserOptionsDataFromApi();
}
//Change URL to new record
//NOTE: will not cause a page re-render, almost nothing does unless forced with a KEY property or using router.GO()
@@ -759,40 +808,51 @@ export default {
vm.formState.loading = false;
}
},
async duplicate() {
let vm = this;
if (!vm.canDuplicate || vm.$route.params.recordid == 0) {
return;
}
vm.formState.loading = true;
let url = API_BASE_URL + "duplicate/" + vm.$route.params.recordid;
try {
window.$gz.form.deleteAllErrorBoxErrors(vm);
let res = await window.$gz.api.upsert(url);
if (res.error) {
vm.formState.serverError = res.error;
window.$gz.form.setErrorBoxErrors(vm);
} else {
vm.obj = res.data;
await vm.getUserOptionsDataFromApi();
//Navigate to new record
this.$router.push({
name: "adm-user",
params: {
recordid: res.data.id,
obj: res.data, // pass data object to new form
optionsObj: vm.optionsObj
}
});
duplicate() {
//Navigate to new record
this.$router.push({
name: "adm-user",
params: {
recordid: 0,
obj: this.obj, // pass data object to new form
optionsObj: this.optionsObj
}
} catch (ex) {
window.$gz.errorHandler.handleFormError(ex, vm);
} finally {
vm.formState.loading = false;
}
});
},
// async duplicate() {
// let vm = this;
// if (!vm.canDuplicate || vm.$route.params.recordid == 0) {
// return;
// }
// vm.formState.loading = true;
// let url = API_BASE_URL + "duplicate/" + vm.$route.params.recordid;
// try {
// window.$gz.form.deleteAllErrorBoxErrors(vm);
// let res = await window.$gz.api.upsert(url);
// if (res.error) {
// vm.formState.serverError = res.error;
// window.$gz.form.setErrorBoxErrors(vm);
// } else {
// vm.obj = res.data;
// await vm.getUserOptionsDataFromApi();
// //Navigate to new record
// this.$router.push({
// name: "adm-user",
// params: {
// recordid: res.data.id,
// obj: res.data, // pass data object to new form
// optionsObj: vm.optionsObj
// }
// });
// }
// } catch (ex) {
// window.$gz.errorHandler.handleFormError(ex, vm);
// } finally {
// vm.formState.loading = false;
// }
// },
async getUserOptionsDataFromApi() {
let vm = this;
vm.formState.loading = true;
@@ -836,22 +896,21 @@ export default {
let vm = this;
if (vm.canSave) {
vm.formState.loading = true;
let url = null;
let url = `user-option/${vm.obj.id}`;
url = `user-option/${vm.obj.id}`;
//clear any errors vm might be around from previous submit
window.$gz.form.deleteAllErrorBoxErrors(vm);
try {
let res = await window.$gz.api.upsert(url, vm.optionsObj);
//always a put but may not have a concurrency token if it's a duplicate
let res = await window.$gz.api.put(url, vm.optionsObj);
vm.formState.loading = false;
if (res.error) {
vm.formState.serverError = res.error;
window.$gz.form.setErrorBoxErrors(vm);
} else {
//UserOptions is never a POST as it always exists and can't be deleted so always a PUT
//Handle "put" of an existing record (UPDATE)
vm.optionsObj.concurrency = res.data.concurrency;
window.$gz.form.setFormState({
vm: vm,