последовательный выбор категории
This commit is contained in:
parent
b71ebfc398
commit
58934e8666
|
@ -67,24 +67,28 @@ class ElementViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Element.objects.all()
|
queryset = Element.objects.all()
|
||||||
serializer_class = ElementSerializer
|
serializer_class = ElementSerializer
|
||||||
|
|
||||||
@action(detail=False, methods=["get"], url_path=r"external_categories")
|
@action(
|
||||||
def get_remote_categories(self, request):
|
detail=False,
|
||||||
|
methods=["get"],
|
||||||
|
url_path=r"external_categories",
|
||||||
|
)
|
||||||
|
def get_remote_categories(self, request, cat_id=None):
|
||||||
try:
|
try:
|
||||||
all_categories = []
|
categories = get_depth_cat("87e91e07-7e10-11ee-ab5a-a47a2bd811cb")
|
||||||
categories = get_depth_cat("a6aadfe8-7e0f-11ee-ab5a-a47a2bd811cb")
|
categories.extend(get_depth_cat("20e1e6f6-a575-11ee-ab60-ec3c37e2e642"))
|
||||||
for category in categories:
|
return Response(categories)
|
||||||
depth = get_depth_cat(category["Ref_Key"])
|
except Exception as e:
|
||||||
if len(depth):
|
logger.error(e)
|
||||||
for cat2 in depth:
|
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
depth2 = get_depth_cat(cat2["Ref_Key"])
|
|
||||||
if len(depth2):
|
@action(
|
||||||
for cat3 in depth2:
|
detail=False,
|
||||||
depth3 = get_depth_cat(cat3["Ref_Key"])
|
methods=["get"],
|
||||||
all_categories.append(depth3)
|
url_path=r"external_categories/(?P<cat_id>[^/.]+)",
|
||||||
else:
|
)
|
||||||
all_categories.append(depth2)
|
def get_remote_categories_child(self, request, cat_id=None):
|
||||||
else:
|
try:
|
||||||
all_categories.append(depth)
|
categories = get_depth_cat(cat_id)
|
||||||
return Response(categories)
|
return Response(categories)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
|
|
|
@ -19,10 +19,10 @@ const searchInExternal = (q: string) => {
|
||||||
return el.Description.toLowerCase().indexOf(q.toLowerCase()) !== -1
|
return el.Description.toLowerCase().indexOf(q.toLowerCase()) !== -1
|
||||||
}).slice(0, 10)
|
}).slice(0, 10)
|
||||||
}
|
}
|
||||||
const externalCategory = ref()
|
const externalCategoryValue = ref([])
|
||||||
const externalCategories = ref<ApiTypeExternalPartners[]>([])
|
const externalCategories = ref<ApiTypeExternalPartners[][]>([])
|
||||||
|
|
||||||
const externalElement = ref()
|
const externalElementValue = ref()
|
||||||
const externalElements = ref<ApiTypeExternalPartners[]>([])
|
const externalElements = ref<ApiTypeExternalPartners[]>([])
|
||||||
|
|
||||||
const loadPartners = async () => {
|
const loadPartners = async () => {
|
||||||
|
@ -33,21 +33,33 @@ const loadPartners = async () => {
|
||||||
}
|
}
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
const loadCategories = async () => {
|
||||||
|
const lastCat = externalCategoryValue.value.at(-1) || ''
|
||||||
|
const { data } = await useFetch<ApiTypeExternalPartners[]>(`${apiBase}/element/external_categories/${lastCat}`)
|
||||||
|
if (data.value?.length) {
|
||||||
|
externalCategories.value.push(data.value)
|
||||||
|
} else {
|
||||||
|
await loadElements()
|
||||||
|
}
|
||||||
|
}
|
||||||
const loadElements = async () => {
|
const loadElements = async () => {
|
||||||
loading.value = true
|
const lastCat = externalCategoryValue.value.at(-1) || ''
|
||||||
const { data } = await useFetch<ApiTypeExternalPartners[]>(`${apiBase}/element/external/${externalCategory.value}`)
|
const { data } = await useFetch<ApiTypeExternalPartners[]>(`${apiBase}/element/external/${lastCat}`)
|
||||||
if (data.value) {
|
if (data.value) {
|
||||||
externalElements.value = data.value
|
externalElements.value = data.value
|
||||||
}
|
}
|
||||||
loading.value = false
|
}
|
||||||
|
const loadDeepCategories = async (i: number) => {
|
||||||
|
if ((i + 1) < externalCategoryValue.value.length) {
|
||||||
|
externalCategoryValue.value = externalCategoryValue.value.slice(0, i + 1)
|
||||||
|
externalCategories.value = externalCategories.value.slice(0, i + 1)
|
||||||
|
}
|
||||||
|
loadCategories()
|
||||||
}
|
}
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await loadPartners()
|
await loadPartners()
|
||||||
|
await loadCategories()
|
||||||
const { data } = await useFetch<ApiTypeExternalPartners[]>(`${apiBase}/element/external_categories/`)
|
|
||||||
externalCategories.value = data.value
|
|
||||||
})
|
})
|
||||||
watch(externalCategory, loadElements)
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="grid grid-cols-10">
|
<div class="grid grid-cols-10">
|
||||||
|
@ -59,11 +71,14 @@ watch(externalCategory, loadElements)
|
||||||
searchable-placeholder="Выберите организацию из списка контрагентов" :loading="loading" />
|
searchable-placeholder="Выберите организацию из списка контрагентов" :loading="loading" />
|
||||||
</UFormGroup>
|
</UFormGroup>
|
||||||
<UFormGroup label="Добавить элемент инвентаризации" v-if="state.organization">
|
<UFormGroup label="Добавить элемент инвентаризации" v-if="state.organization">
|
||||||
<USelectMenu v-model="externalCategory" :options="externalCategories" value-attribute="Ref_Key"
|
<template v-for="(item, i) in externalCategories">
|
||||||
option-attribute="Description" :searchable="true" :loading="loading" />
|
<USelectMenu v-model="externalCategoryValue[i]" :options="item" value-attribute="Ref_Key"
|
||||||
<USelectMenu v-model="externalElement" :options="externalElements" value-attribute="Ref_Key"
|
|
||||||
option-attribute="Description" :searchable="true" :loading="loading"
|
option-attribute="Description" :searchable="true" :loading="loading"
|
||||||
:placeholder="`Элементы (${externalElements.length})`" />
|
:placeholder="`Категории (${item.length})`" @change="loadDeepCategories(i)" />
|
||||||
|
</template>
|
||||||
|
<USelectMenu v-if="externalElements.length" v-model="externalElementValue"
|
||||||
|
:options="externalElements" value-attribute="Ref_Key" option-attribute="Description"
|
||||||
|
:searchable="true" :loading="loading" :placeholder="`Элементы (${externalElements.length})`" />
|
||||||
</UFormGroup>
|
</UFormGroup>
|
||||||
|
|
||||||
<UButton type="submit">
|
<UButton type="submit">
|
||||||
|
|
Loading…
Reference in New Issue