Changeset View
Changeset View
Standalone View
Standalone View
src/resources/vue/Settings.vue
<template> | <template> | ||||
<div class="container"> | <div class="container"> | ||||
<div class="card" id="settings"> | <div class="card" id="settings"> | ||||
<div class="card-body"> | <div class="card-body"> | ||||
<div class="card-title"> | <div class="card-title"> | ||||
{{ $t('dashboard.settings') }} | {{ $t('dashboard.settings') }} | ||||
</div> | </div> | ||||
<div class="card-text"> | <div class="card-text"> | ||||
<form @submit.prevent="submit"> | <form @submit.prevent="submit"> | ||||
<div class="row mb-3"> | <div class="row mb-3"> | ||||
<label class="col-sm-4 col-form-label">{{ $t('user.passwordpolicy') }}</label> | <label class="col-sm-4 col-form-label">{{ $t('user.passwordpolicy') }}</label> | ||||
<div class="col-sm-8"> | <div class="col-sm-8"> | ||||
<ul id="password_policy" class="list-group ms-1 mt-1"> | <ul id="password_policy" class="list-group ms-1 mt-1"> | ||||
<li v-for="rule in passwordPolicy" :key="rule.label" class="list-group-item border-0 form-check pt-1 pb-1"> | <li v-for="rule in passwordPolicy" :key="rule.label" class="list-group-item border-0 form-check pt-1 pb-1"> | ||||
<input type="checkbox" class="form-check-input" :id="'policy-' + rule.label" :name="rule.label" :checked="rule.enabled"> | <input type="checkbox" class="form-check-input" :id="'policy-' + rule.label" :name="rule.label" :checked="rule.enabled"> | ||||
<label :for="'policy-' + rule.label" class="form-check-label pe-2">{{ rule.name.split(':')[0] }}</label> | <span v-if="rule.label == 'last'" v-html="ruleLastHTML(rule)"></span> | ||||
<label v-else :for="'policy-' + rule.label" class="form-check-label pe-2">{{ rule.name.split(':')[0] }}</label> | |||||
<input type="text" class="form-control form-control-sm w-auto d-inline" v-if="['min', 'max'].includes(rule.label)" :value="rule.param" size="3"> | <input type="text" class="form-control form-control-sm w-auto d-inline" v-if="['min', 'max'].includes(rule.label)" :value="rule.param" size="3"> | ||||
</li> | </li> | ||||
</ul> | </ul> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<btn class="btn-primary" type="submit" icon="check">{{ $t('btn.submit') }}</btn> | <btn class="btn-primary" type="submit" icon="check">{{ $t('btn.submit') }}</btn> | ||||
</form> | </form> | ||||
</div> | </div> | ||||
Show All 21 Lines | export default { | ||||
if (response.data.list) { | if (response.data.list) { | ||||
this.passwordPolicy = response.data.list | this.passwordPolicy = response.data.list | ||||
} | } | ||||
}) | }) | ||||
.catch(this.$root.errorHandler) | .catch(this.$root.errorHandler) | ||||
}, | }, | ||||
methods: { | methods: { | ||||
ruleLastHTML(rule) { | |||||
let parts = rule.name.split(/[0-9]+/) | |||||
let options = [1, 2, 3, 4, 5, 6] | |||||
options = options.map(num => { | |||||
let selected = num == rule.param ? ' selected' : '' | |||||
return `<option value="${num}"${selected}>${num}</option>` | |||||
}) | |||||
return `<label for="policy-last" class="form-check-label pe-2"> | |||||
${parts[0]} <select class="form-select form-select-sm d-inline w-auto">${options.join('')}</select> ${parts[1]} | |||||
</label>` | |||||
}, | |||||
submit() { | submit() { | ||||
this.$root.clearFormValidation($('#settings form')) | this.$root.clearFormValidation($('#settings form')) | ||||
let password_policy = []; | let password_policy = []; | ||||
$('#password_policy > li > input:checked').each((i, element) => { | $('#password_policy > li > input:checked').each((i, element) => { | ||||
let entry = element.name | let entry = element.name | ||||
const input = $(element.parentNode).find('input[type=text]')[0] | let param = $(element.parentNode).find('select,input[type=text]').val() | ||||
if (input) { | if (param) { | ||||
entry += ':' + input.value | entry += ':' + param | ||||
} | } | ||||
password_policy.push(entry) | password_policy.push(entry) | ||||
}) | }) | ||||
let post = { password_policy: password_policy.join(',') } | let post = { password_policy: password_policy.join(',') } | ||||
axios.post('/api/v4/users/' + this.wallet.user_id + '/config', post) | axios.post('/api/v4/users/' + this.wallet.user_id + '/config', post) | ||||
.then(response => { | .then(response => { | ||||
this.$toast.success(response.data.message) | this.$toast.success(response.data.message) | ||||
}) | }) | ||||
}, | }, | ||||
} | } | ||||
} | } | ||||
</script> | </script> |