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