Item tags
gitea/salix-front/pipeline/pr-dev This commit looks good
Details
gitea/salix-front/pipeline/pr-dev This commit looks good
Details
This commit is contained in:
parent
99adc9aa05
commit
f3b1de1ee4
|
@ -1,5 +1,5 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted, computed } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
|
@ -10,65 +10,58 @@ import FetchData from 'components/FetchData.vue';
|
||||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||||
|
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { useArrayData } from 'composables/useArrayData';
|
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
const itemTagsRef = ref(null);
|
const itemTagsRef = ref(null);
|
||||||
const tagOptions = ref([]);
|
const tagOptions = ref([]);
|
||||||
|
const valueOptionsMap = ref(new Map());
|
||||||
const arrayData = useArrayData('ItemTags');
|
|
||||||
const itemTags = computed(() => {
|
|
||||||
console.log('arrayData.store.data:: ', arrayData.store.data);
|
|
||||||
let map = new Map();
|
|
||||||
(arrayData.store.data || []).forEach((tag) => {
|
|
||||||
map.set(tag.id, tag);
|
|
||||||
});
|
|
||||||
return map;
|
|
||||||
});
|
|
||||||
// const getHighestPriority = () => {
|
|
||||||
// let max = 0;
|
|
||||||
// console.log('formData:: ', itemTagsRef.value.formData);
|
|
||||||
// itemTagsRef.value.formData.forEach((tag) => {
|
|
||||||
// if (tag.priority > max) max = tag.priority;
|
|
||||||
// });
|
|
||||||
// return max + 1;
|
|
||||||
// };
|
|
||||||
|
|
||||||
const getHighestPriority = computed(() => {
|
|
||||||
let max = 0;
|
|
||||||
if (!itemTagsRef.value || !itemTagsRef.value.length) return max;
|
|
||||||
console.log('formData:: ', itemTagsRef.value.formData);
|
|
||||||
itemTagsRef.value.formData.forEach((tag) => {
|
|
||||||
if (tag.priority > max) max = tag.priority;
|
|
||||||
});
|
|
||||||
return max + 1;
|
|
||||||
});
|
|
||||||
|
|
||||||
const getSelectedTagValues = async (tag) => {
|
const getSelectedTagValues = async (tag) => {
|
||||||
try {
|
try {
|
||||||
console.log('tag:: ', tag);
|
if (!tag.tagFk && tag.tag.isFree) return;
|
||||||
tag.value = null;
|
|
||||||
const filter = {
|
const filter = {
|
||||||
fields: ['value'],
|
fields: ['value'],
|
||||||
order: 'value ASC',
|
order: 'value ASC',
|
||||||
};
|
};
|
||||||
|
|
||||||
const params = { filter: JSON.stringify(filter) };
|
const params = { filter: JSON.stringify(filter) };
|
||||||
const { data } = await axios.get(`Tags/${tag.selectedTag.id}/filterValue`, {
|
const { data } = await axios.get(`Tags/${tag.tagFk}/filterValue`, {
|
||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
tag.valueOptions = data;
|
valueOptionsMap.value.set(tag.tagFk, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Error getting selected tag values');
|
console.error('Error getting selected tag values');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
const onItemTagsFetched = async (itemTags) => {
|
||||||
// if (itemTagsRef.value) itemTagsRef.value.reload();
|
(itemTags || []).forEach((tag) => {
|
||||||
console.log('itemTagsRef:: ', itemTagsRef.value.formData);
|
getSelectedTagValues(tag);
|
||||||
});
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleTagSelected = (rows, index, tag) => {
|
||||||
|
rows[index].tag = tag;
|
||||||
|
rows[index].tagFk = tag.id;
|
||||||
|
rows[index].value = null;
|
||||||
|
getSelectedTagValues(rows[index]);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getHighestPriority = (rows) => {
|
||||||
|
let max = 0;
|
||||||
|
rows.forEach((tag) => {
|
||||||
|
if (tag.priority > max) max = tag.priority;
|
||||||
|
});
|
||||||
|
return max + 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
const insertTag = (rows) => {
|
||||||
|
itemTagsRef.value.insert();
|
||||||
|
itemTagsRef.value.formData[itemTagsRef.value.formData.length - 1].priority =
|
||||||
|
getHighestPriority(rows);
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -85,14 +78,17 @@ onMounted(() => {
|
||||||
data-key="ItemTags"
|
data-key="ItemTags"
|
||||||
model="ItemTags"
|
model="ItemTags"
|
||||||
url="ItemTags"
|
url="ItemTags"
|
||||||
save-url="Tags/onSubmit"
|
update-url="Tags/onSubmit"
|
||||||
auto-load
|
|
||||||
:data-required="{
|
:data-required="{
|
||||||
|
$index: undefined,
|
||||||
itemFk: route.params.id,
|
itemFk: route.params.id,
|
||||||
priority: getHighestPriority,
|
priority: undefined,
|
||||||
tag: {
|
tag: {
|
||||||
isFree: undefined,
|
isFree: undefined,
|
||||||
|
value: undefined,
|
||||||
|
name: undefined,
|
||||||
},
|
},
|
||||||
|
tagFk: undefined,
|
||||||
}"
|
}"
|
||||||
:default-remove="false"
|
:default-remove="false"
|
||||||
:filter="{
|
:filter="{
|
||||||
|
@ -106,6 +102,8 @@ onMounted(() => {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}"
|
}"
|
||||||
|
auto-load
|
||||||
|
@on-fetch="onItemTagsFetched"
|
||||||
>
|
>
|
||||||
<template #body="{ rows }">
|
<template #body="{ rows }">
|
||||||
<QCard class="q-pl-lg q-py-md">
|
<QCard class="q-pl-lg q-py-md">
|
||||||
|
@ -115,32 +113,39 @@ onMounted(() => {
|
||||||
class="row q-gutter-md q-mb-md"
|
class="row q-gutter-md q-mb-md"
|
||||||
>
|
>
|
||||||
<VnSelect
|
<VnSelect
|
||||||
:label="t('Tag')"
|
:label="t('itemTags.tag')"
|
||||||
v-model="row.tagFk"
|
|
||||||
:options="tagOptions"
|
:options="tagOptions"
|
||||||
|
:model-value="row.tag"
|
||||||
option-label="name"
|
option-label="name"
|
||||||
option-value="id"
|
|
||||||
hide-selected
|
hide-selected
|
||||||
@update:model-value="getSelectedTagValues(row)"
|
@update:model-value="
|
||||||
|
($event) => handleTagSelected(rows, index, $event)
|
||||||
|
"
|
||||||
/>
|
/>
|
||||||
<VnSelect
|
<VnSelect
|
||||||
v-if="row.tag?.isFree === false"
|
v-if="row.tag?.isFree === false"
|
||||||
|
:key="row.tagFk"
|
||||||
:label="t('Value')"
|
:label="t('Value')"
|
||||||
v-model="row.value"
|
v-model="row.value"
|
||||||
option-value="value"
|
:options="valueOptionsMap.get(row.tagFk)"
|
||||||
option-label="value"
|
option-label="value"
|
||||||
|
option-value="value"
|
||||||
emit-value
|
emit-value
|
||||||
use-input
|
use-input
|
||||||
|
class="col"
|
||||||
:is-clearable="false"
|
:is-clearable="false"
|
||||||
/>
|
/>
|
||||||
<VnInput
|
<VnInput
|
||||||
v-if="row.tag?.isFree || row.tag?.isFree == undefined"
|
v-else-if="
|
||||||
|
row.tag?.isFree || row.tag?.isFree == undefined
|
||||||
|
"
|
||||||
v-model="row.value"
|
v-model="row.value"
|
||||||
:label="t('Value')"
|
:label="t('itemTags.value')"
|
||||||
:is-clearable="false"
|
:is-clearable="false"
|
||||||
|
style="width: 100%"
|
||||||
/>
|
/>
|
||||||
<VnInput
|
<VnInput
|
||||||
:label="t('Relevancy')"
|
:label="t('itemTags.relevancy')"
|
||||||
type="number"
|
type="number"
|
||||||
v-model="row.priority"
|
v-model="row.priority"
|
||||||
/>
|
/>
|
||||||
|
@ -153,37 +158,27 @@ onMounted(() => {
|
||||||
size="sm"
|
size="sm"
|
||||||
>
|
>
|
||||||
<QTooltip>
|
<QTooltip>
|
||||||
{{ t('Remove tag') }}
|
{{ t('itemTags.removeTag') }}
|
||||||
</QTooltip>
|
</QTooltip>
|
||||||
</QIcon>
|
</QIcon>
|
||||||
</div>
|
</div>
|
||||||
</VnRow>
|
</VnRow>
|
||||||
<VnRow>
|
<VnRow>
|
||||||
<QIcon
|
<QIcon
|
||||||
@click="itemTagsRef.insert()"
|
@click="insertTag(rows)"
|
||||||
class="cursor-pointer"
|
class="cursor-pointer"
|
||||||
color="primary"
|
color="primary"
|
||||||
name="add"
|
name="add"
|
||||||
size="sm"
|
size="sm"
|
||||||
>
|
>
|
||||||
<QTooltip>
|
<QTooltip>
|
||||||
{{ t('Add tag') }}
|
{{ t('itemTags.addTag') }}
|
||||||
</QTooltip>
|
</QTooltip>
|
||||||
</QIcon>
|
</QIcon>
|
||||||
</VnRow>
|
</VnRow>
|
||||||
</QCard>
|
</QCard>
|
||||||
</template>
|
</template>
|
||||||
</CrudModel>
|
</CrudModel>
|
||||||
<pre>{{ itemTags }}</pre>
|
|
||||||
</QPage>
|
</QPage>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<i18n>
|
|
||||||
es:
|
|
||||||
Remove tag: Quitar etiqueta
|
|
||||||
Add tag: Añadir etiqueta
|
|
||||||
Tag: Etiqueta
|
|
||||||
Value: Valor
|
|
||||||
Relevancy: Relevancia
|
|
||||||
</i18n>
|
|
||||||
|
|
|
@ -34,3 +34,9 @@ lastEntries:
|
||||||
package: Package
|
package: Package
|
||||||
freight: Freight
|
freight: Freight
|
||||||
comission: Comission
|
comission: Comission
|
||||||
|
itemTags:
|
||||||
|
removeTag: Remove tag
|
||||||
|
addTag: Add tag
|
||||||
|
tag: Tag
|
||||||
|
value: Value
|
||||||
|
relevancy: Relevancy
|
||||||
|
|
|
@ -34,3 +34,9 @@ lastEntries:
|
||||||
package: Embalaje
|
package: Embalaje
|
||||||
freight: Porte
|
freight: Porte
|
||||||
comission: Comisión
|
comission: Comisión
|
||||||
|
itemTags:
|
||||||
|
removeTag: Quitar etiqueta
|
||||||
|
addTag: Añadir etiqueta
|
||||||
|
tag: Etiqueta
|
||||||
|
value: Valor
|
||||||
|
relevancy: Relevancia
|
||||||
|
|
Loading…
Reference in New Issue