forked from verdnatura/salix-front
183 lines
5.8 KiB
Vue
183 lines
5.8 KiB
Vue
<script setup>
|
|
import { ref } from 'vue';
|
|
import { useRoute } from 'vue-router';
|
|
import { useI18n } from 'vue-i18n';
|
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
|
import FetchData from 'components/FetchData.vue';
|
|
import FormModel from 'components/FormModel.vue';
|
|
import VnRow from 'components/ui/VnRow.vue';
|
|
import VnInput from 'src/components/common/VnInput.vue';
|
|
import VnInputDate from 'components/common/VnInputDate.vue';
|
|
|
|
import axios from 'axios';
|
|
import { useSession } from 'src/composables/useSession';
|
|
|
|
const route = useRoute();
|
|
const { t } = useI18n();
|
|
const { getTokenMultimedia } = useSession();
|
|
const token = getTokenMultimedia();
|
|
|
|
const claimFilter = {
|
|
fields: [
|
|
'id',
|
|
'clientFk',
|
|
'created',
|
|
'workerFk',
|
|
'claimStateFk',
|
|
'packages',
|
|
'pickup',
|
|
],
|
|
include: [
|
|
{
|
|
relation: 'client',
|
|
scope: {
|
|
fields: ['name'],
|
|
},
|
|
},
|
|
],
|
|
};
|
|
|
|
const claimStates = ref([]);
|
|
const claimStatesCopy = ref([]);
|
|
const optionsList = ref([]);
|
|
|
|
function setWorkers(data) {
|
|
workers.value = data;
|
|
workersCopy.value = data;
|
|
}
|
|
const workersOptions = ref([]);
|
|
|
|
function setClaimStates(data) {
|
|
claimStates.value = data;
|
|
claimStatesCopy.value = data;
|
|
}
|
|
|
|
async function getEnumValues() {
|
|
optionsList.value = [{ id: null, description: t('claim.basicData.null') }];
|
|
const { data } = await axios.get(`Applications/get-enum-values`, {
|
|
params: {
|
|
schema: 'vn',
|
|
table: 'claim',
|
|
column: 'pickup',
|
|
},
|
|
});
|
|
for (let value of data)
|
|
optionsList.value.push({ id: value, description: t(`claim.basicData.${value}`) });
|
|
}
|
|
|
|
getEnumValues();
|
|
|
|
const statesFilter = {
|
|
options: claimStates,
|
|
filterFn: (options, value) => {
|
|
const search = value.toLowerCase();
|
|
|
|
if (value === '') return claimStatesCopy.value;
|
|
|
|
return options.value.filter((row) => {
|
|
const description = row.description.toLowerCase();
|
|
|
|
return description.indexOf(search) > -1;
|
|
});
|
|
},
|
|
};
|
|
</script>
|
|
<template>
|
|
<FetchData
|
|
url="Workers/activeWithInheritedRole"
|
|
:filter="{ where: { role: 'salesPerson' } }"
|
|
@on-fetch="(data) => (workersOptions = data)"
|
|
auto-load
|
|
/>
|
|
<FetchData url="ClaimStates" @on-fetch="setClaimStates" auto-load />
|
|
<FormModel
|
|
:url="`Claims/${route.params.id}`"
|
|
:url-update="`Claims/updateClaim/${route.params.id}`"
|
|
:filter="claimFilter"
|
|
model="claim"
|
|
auto-load
|
|
>
|
|
<template #form="{ data, validate, filter }">
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.client.name"
|
|
:label="t('claim.basicData.customer')"
|
|
disable
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<VnInputDate
|
|
v-model="data.created"
|
|
:label="t('claim.basicData.created')"
|
|
/>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnSelect
|
|
:label="t('claim.basicData.assignedTo')"
|
|
v-model="data.workerFk"
|
|
:options="workersOptions"
|
|
option-value="id"
|
|
option-label="name"
|
|
emit-value
|
|
auto-load
|
|
:rules="validate('claim.claimStateFk')"
|
|
>
|
|
<template #before>
|
|
<QAvatar color="orange">
|
|
<QImg
|
|
v-if="data.workerFk"
|
|
:src="`/api/Images/user/160x160/${data.workerFk}/download?access_token=${token}`"
|
|
spinner-color="white"
|
|
/>
|
|
</QAvatar>
|
|
</template>
|
|
</VnSelect>
|
|
</div>
|
|
<div class="col">
|
|
<QSelect
|
|
v-model="data.claimStateFk"
|
|
:options="claimStates"
|
|
option-value="id"
|
|
option-label="description"
|
|
emit-value
|
|
:label="t('claim.basicData.state')"
|
|
map-options
|
|
use-input
|
|
@filter="(value, update) => filter(value, update, statesFilter)"
|
|
:rules="validate('claim.claimStateFk')"
|
|
:input-debounce="0"
|
|
>
|
|
</QSelect>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<QInput
|
|
v-model.number="data.packages"
|
|
:label="t('globals.packages')"
|
|
:rules="validate('claim.packages')"
|
|
type="number"
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<QSelect
|
|
v-model="data.pickup"
|
|
:options="optionsList"
|
|
option-value="id"
|
|
option-label="description"
|
|
emit-value
|
|
:label="t('claim.basicData.pickup')"
|
|
map-options
|
|
use-input
|
|
:input-debounce="0"
|
|
>
|
|
</QSelect>
|
|
</div>
|
|
</VnRow>
|
|
</template>
|
|
</FormModel>
|
|
</template>
|