fixed room mgmt and recorder mgmt basically working

This commit is contained in:
Tobias Kurze
2019-04-26 15:34:58 +02:00
parent 03b9637e65
commit 7022ab738b
7 changed files with 101 additions and 42 deletions

View File

@@ -15,7 +15,6 @@ api.interceptors.request.use(async function(config) {
if (store.getters.isAuthenticated) {
const token = store.state.access_token;
config.headers.Authorization = `Bearer ${token}`;
return config;
} else {
Vue.$log.warn("the access_token is not valid anymore.");
if(store.getters.isRefreshTokenValid){
@@ -47,8 +46,8 @@ api.interceptors.request.use(async function(config) {
}
});
}
return config;
}
return config;
});
api.interceptors.response.use(function (response) {

View File

@@ -7,6 +7,8 @@ const recorderResource = '/recorder';
const recorderModelResource = '/recorder/model';
const recorderCommandResource = '/recorder/command';
import {dictEmptyValToNull} from '@/utils';
export default {
getRecorders() {
return Repository.get(`${recorderResource}`);
@@ -16,12 +18,16 @@ export default {
return Repository.get(`${recorderResource}/${recorderId}`);
},
deleteRecorder(recorderId: number) {
return Repository.delete(`${recorderResource}/${recorderId}`);
},
createRecorder(recorderData: any) {
return Repository.post(`${recorderResource}`, recorderData);
return Repository.post(`${recorderResource}`, dictEmptyValToNull(recorderData));
},
updateRecorder(recorderId: number, recorderData: any) {
return Repository.put(`${recorderResource}/${recorderId}`, recorderData);
return Repository.put(`${recorderResource}/${recorderId}`, dictEmptyValToNull(recorderData));
},
@@ -33,12 +39,16 @@ export default {
return Repository.get(`${recorderModelResource}/${recorderModelId}`);
},
deleteRecorderModel(recorderModelId: number) {
return Repository.delete(`${recorderModelResource}/${recorderModelId}`);
},
createRecorderModel(recorderModelData: any) {
return Repository.post(`${recorderModelResource}`, recorderModelData);
return Repository.post(`${recorderModelResource}`, dictEmptyValToNull(recorderModelData));
},
updateRecorderModel(recorderModelId: number, recorderModelData: any) {
return Repository.put(`${recorderModelResource}/${recorderModelId}`, recorderModelData);
return Repository.put(`${recorderModelResource}/${recorderModelId}`, dictEmptyValToNull(recorderModelData));
},
@@ -50,11 +60,16 @@ export default {
return Repository.get(`${recorderCommandResource}/${recorderCommandId}`);
},
deleteRecorderCommand(recorderCommandId: number) {
return Repository.delete(`${recorderCommandResource}/${recorderCommandId}`);
},
createRecorderCommand(recorderCommandData: any) {
return Repository.post(`${recorderCommandResource}`, recorderCommandData);
return Repository.post(`${recorderCommandResource}`, dictEmptyValToNull(recorderCommandData));
},
updateRecorderCommand(recorderCommandId: number, recorderCommandData: any) {
return Repository.put(`${recorderCommandResource}/${recorderCommandId}`, recorderCommandData);
return Repository.put(`${recorderCommandResource}/${recorderCommandId}`,
dictEmptyValToNull(recorderCommandData));
},
};

View File

@@ -2,6 +2,7 @@
// @ts-ignore
import Repository from './Repository';
import {dictEmptyValToNull} from '@/utils';
const resource = '/room';
@@ -19,10 +20,10 @@ export default {
},
createRoom(roomData: any) {
return Repository.post(`${resource}`, roomData);
return Repository.post(`${resource}`, dictEmptyValToNull(roomData));
},
updateRoom(roomId: number, roomData: any) {
return Repository.put(`${resource}/${roomId}`, roomData);
return Repository.put(`${resource}/${roomId}`, dictEmptyValToNull(roomData));
},
};

View File

@@ -21,6 +21,7 @@
<b-card class="mb-2" style="max-width: 30rem; min-width:20rem;" v-for="(recorder) in recorders"
:header="recorder.name + ' (' + recorder.ip + ' / ' + recorder.network_name + ')'"
v-bind:key="recorder.id">
{{recorder}}
<b-card-text>
<h5 class="card-title">{{ $t('name') }}:&nbsp;
<span v-if="!formEditField[recorder.id+'_name']">{{recorder.name}}&nbsp;
@@ -112,7 +113,7 @@
<div class="form-group row">
<div class="col-sm-8">
<select class="form-control" v-model="form.room">
<option disabled value="">No recorder selected</option>
<option value="">No recorder selected</option>
<option v-for="room in rooms" v-bind:value="room.id">
{{ room.name }}
</option>
@@ -140,8 +141,8 @@
$t('no_model_defined')}}</p>
<div class="form-group row">
<div class="col-sm-8">
<select class="form-control" v-model="form.room">
<option disabled value="">No recorder selected</option>
<select class="form-control" v-model="form.recorder_model">
<option value="">No recorder selected</option>
<option v-for="recorderModel in recorderModels"
v-bind:value="recorderModel.id">
{{ recorderModel.name }}
@@ -225,7 +226,7 @@
<div class="form-group row">
<label class="label col-sm-2 col-form-label">{{ $t('recorder_model') }}</label>
<div class="col-sm-6">
<select class="form-control" v-model="form.recorder_model">
<select class="form-control" v-model="form.recorder_model_id">
<option disabled value="">No recorder_model selected</option>
<option v-for="recorderModel in recorderModels"
v-bind:value="recorder_model.id">
@@ -238,7 +239,7 @@
<div class="form-group row">
<label class="label col-sm-2 col-form-label">{{ $t('room') }}</label>
<div class="col-sm-6">
<select class="form-control" v-model="form.room">
<select class="form-control" v-model="form.room_id">
<option disabled value="">Not assigned to room</option>
<option v-for="room in rooms" v-bind:value="room.id">
{{ room.name }}
@@ -325,6 +326,8 @@
data() {
return {
tabIndex: 0,
updateValues: {},
formEditField: {},
show_assigned_recorders: false,
form: {
name: '',

View File

@@ -112,26 +112,37 @@
</small>
</p>
<hr/>
<span v-if="!formEditField[room.id+'_recorder_id']">{{room.recorder_id}}&nbsp;
<div v-if="room.recorder">
<p class="card-text"><strong>{{ $t('Recorder') }}:</strong>&nbsp;{{room.recorder.name}}&nbsp;
<a class="float-right badge badge-pill badge-info">
<font-awesome-icon icon="pencil-alt"/>
</a></p>
({{room.recorder.ip}}) / ({{room.recorder.network_name}})
</div>
<div v-else>
<p class="card-text"><strong>{{ $t('Recorder') }}:</strong>&nbsp;{{
$t('no_recorder_defined')}}</p>
<div class="form-group row">
<div class="col-sm-8">
<select class="form-control" v-model="form.recorder">
<option disabled value="">No recorder selected</option>
</div>
<a class="float-right badge badge-pill badge-info">
<font-awesome-icon
@click="initRoomUpdate(room, 'recorder_id')" icon="pencil-alt"/>
</a>
</span>
<b-form v-else>
<b-input-group>
<select class="form-control" v-model="updateValues[room.id+'_recorder_id']">
<option value="">No recorder selected</option>
<option v-for="recorder in recorders" v-bind:value="recorder.id">
{{ recorder.name }}
</option>
</select>
</div>
<label class="label col-sm-4 col-form-label">{{ $t('recorder') }}</label>
</div>
<b-input-group-append>
<b-button :disabled="errors.has('recorder_id')"
@click="updateRoom(room.id, 'recorder_id')"
variant="outline-success">
<font-awesome-icon icon="check"></font-awesome-icon>
</b-button>
</b-input-group-append>
</b-input-group>
<div class="form-check">
<input class="form-check-input" type="checkbox"
v-model="show_assigned_recorders" id="defaultCheck1">
@@ -139,7 +150,8 @@
Show already assigned recorders
</label>
</div>
</div>
</b-form>
</b-card-text>
<div slot="footer">
<small class="text-muted">
@@ -218,8 +230,8 @@
<div class="form-group row">
<label class="label col-sm-2 col-form-label">{{ $t('recorder') }}</label>
<div class="col-sm-6">
<select class="form-control" v-model="form.recorder">
<option disabled value="">No recorder selected</option>
<select class="form-control" v-model="form.recorder_id">
<option value="">No recorder selected</option>
<option v-for="recorder in recorders" v-bind:value="recorder.id">
{{ recorder.name }}
</option>
@@ -289,11 +301,11 @@
formEditField: {},
show_assigned_recorders: false,
form: {
name: '',
alternate_name: '',
number: '',
comment: '',
recorder: null,
name: null,
alternate_name: null,
number: null,
comment: null,
recorder_id: null,
},
};
},

View File

@@ -72,6 +72,12 @@ Vue.use(VueMoment);
Vue.config.productionTip = false;
// @ts-ignore
String.prototype.isEmpty = function() {
return (this.length === 0 || !this.trim());
};
new Vue({
i18n,
router,

View File

@@ -2,6 +2,11 @@
import Vue from 'vue';
// @ts-ignore
String.prototype.isEmpty = function() {
return (this.length === 0 || !this.trim());
};
export const EventBus = new Vue();
export function isValidJwt(jwt: any) {
@@ -26,3 +31,21 @@ export function getRemainingJwtValiditySeconds(jwt: any) {
}
return Math.round(diff / 1000 * 100) / 100;
}
export function isEmpty(str: string) {
return (0 === str.length || !str.trim());
}
export function dictEmptyValToNull(dict: object): object {
const newDict: { [key: string]: string | null | object; } = Object.assign({}, dict);
for (const [key, value] of Object.entries(dict)) {
if (typeof value === 'string') {
if (isEmpty(value)) {
newDict[key] = null;
}
} else if (value && value.constructor === Object) { // check if "dictionary"
newDict[key] = dictEmptyValToNull(value);
}
}
return newDict;
}