bx-865-apps #1

Merged
ksenia_mikhailova merged 140 commits from bx-865-apps into main 2024-06-27 15:03:27 +03:00
6 changed files with 148 additions and 13 deletions
Showing only changes of commit f083c1df3c - Show all commits

View File

@ -1581,6 +1581,14 @@
"detail": "django.db", "detail": "django.db",
"documentation": {} "documentation": {}
}, },
{
"label": "migrations",
"importPath": "django.db",
"description": "django.db",
"isExtraImport": true,
"detail": "django.db",
"documentation": {}
},
{ {
"label": "models", "label": "models",
"importPath": "django.db", "importPath": "django.db",
@ -1589,6 +1597,39 @@
"detail": "django.db", "detail": "django.db",
"documentation": {} "documentation": {}
}, },
{
"label": "migrations",
"importPath": "django.db",
"description": "django.db",
"isExtraImport": true,
"detail": "django.db",
"documentation": {}
},
{
"label": "models",
"importPath": "django.db",
"description": "django.db",
"isExtraImport": true,
"detail": "django.db",
"documentation": {}
},
{
"label": "models",
"importPath": "django.db",
"description": "django.db",
"isExtraImport": true,
"detail": "django.db",
"documentation": {}
},
{
"label": "django.db.models.deletion",
"kind": 6,
"isExtraImport": true,
"importPath": "django.db.models.deletion",
"description": "django.db.models.deletion",
"detail": "django.db.models.deletion",
"documentation": {}
},
{ {
"label": "admin", "label": "admin",
"importPath": "django.contrib", "importPath": "django.contrib",
@ -8317,6 +8358,24 @@
"detail": "back.api.migrations.0004_alter_floorplan_d_border_alter_floorplan_d_size", "detail": "back.api.migrations.0004_alter_floorplan_d_border_alter_floorplan_d_size",
"documentation": {} "documentation": {}
}, },
{
"label": "Migration",
"kind": 6,
"importPath": "back.api.migrations.0005_floorplanpoints",
"description": "back.api.migrations.0005_floorplanpoints",
"peekOfCode": "class Migration(migrations.Migration):\n dependencies = [\n ('api', '0004_alter_floorplan_d_border_alter_floorplan_d_size'),\n ]\n operations = [\n migrations.CreateModel(\n name='FloorplanPoints',\n fields=[\n ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n ('points', models.JSONField()),",
"detail": "back.api.migrations.0005_floorplanpoints",
"documentation": {}
},
{
"label": "Migration",
"kind": 6,
"importPath": "back.api.migrations.0006_remove_floorplanpoints_id_alter_floorplanpoints_plan",
"description": "back.api.migrations.0006_remove_floorplanpoints_id_alter_floorplanpoints_plan",
"peekOfCode": "class Migration(migrations.Migration):\n dependencies = [\n ('api', '0005_floorplanpoints'),\n ]\n operations = [\n migrations.RemoveField(\n model_name='floorplanpoints',\n name='id',\n ),\n migrations.AlterField(",
"detail": "back.api.migrations.0006_remove_floorplanpoints_id_alter_floorplanpoints_plan",
"documentation": {}
},
{ {
"label": "ApiConfig", "label": "ApiConfig",
"kind": 6, "kind": 6,
@ -8340,7 +8399,16 @@
"kind": 6, "kind": 6,
"importPath": "back.api.models", "importPath": "back.api.models",
"description": "back.api.models", "description": "back.api.models",
"peekOfCode": "class Floorplan(models.Model):\n title = models.CharField(max_length=200)\n np_field = models.TextField()\n d_size = models.IntegerField(null=True, blank=True)\n d_border = models.IntegerField(null=True, blank=True)\n paths = models.TextField()", "peekOfCode": "class Floorplan(models.Model):\n title = models.CharField(max_length=200)\n np_field = models.TextField()\n d_size = models.IntegerField(null=True, blank=True)\n d_border = models.IntegerField(null=True, blank=True)\n paths = models.TextField()\nclass FloorplanPoints(models.Model):\n plan = models.OneToOneField(Floorplan, on_delete=models.CASCADE, primary_key=True)\n points = models.JSONField()",
"detail": "back.api.models",
"documentation": {}
},
{
"label": "FloorplanPoints",
"kind": 6,
"importPath": "back.api.models",
"description": "back.api.models",
"peekOfCode": "class FloorplanPoints(models.Model):\n plan = models.OneToOneField(Floorplan, on_delete=models.CASCADE, primary_key=True)\n points = models.JSONField()",
"detail": "back.api.models", "detail": "back.api.models",
"documentation": {} "documentation": {}
}, },
@ -8358,7 +8426,7 @@
"kind": 6, "kind": 6,
"importPath": "back.api.serializers", "importPath": "back.api.serializers",
"description": "back.api.serializers", "description": "back.api.serializers",
"peekOfCode": "class FloorplanSerializer(serializers.ModelSerializer):\n class Meta:\n model = Floorplan\n fields = [\n \"id\",\n \"title\",\n \"np_field\",\n \"d_border\",\n \"d_size\",\n \"paths\"", "peekOfCode": "class FloorplanSerializer(serializers.ModelSerializer):\n class Meta:\n model = Floorplan\n fields = [\n \"id\",\n \"title\",\n \"np_field\",\n \"d_border\",\n \"d_size\",\n \"paths\",",
"detail": "back.api.serializers", "detail": "back.api.serializers",
"documentation": {} "documentation": {}
}, },
@ -8367,7 +8435,16 @@
"kind": 6, "kind": 6,
"importPath": "back.api.serializers", "importPath": "back.api.serializers",
"description": "back.api.serializers", "description": "back.api.serializers",
"peekOfCode": "class FloorplanListSerializer(serializers.ModelSerializer):\n class Meta:\n model = Floorplan\n fields = [\n \"id\",\n \"title\",\n ]", "peekOfCode": "class FloorplanListSerializer(serializers.ModelSerializer):\n class Meta:\n model = Floorplan\n fields = [\n \"id\",\n \"title\",\n ]\nclass FloorplanPointsSerializer(serializers.ModelSerializer):\n class Meta:\n model = FloorplanPoints",
"detail": "back.api.serializers",
"documentation": {}
},
{
"label": "FloorplanPointsSerializer",
"kind": 6,
"importPath": "back.api.serializers",
"description": "back.api.serializers",
"peekOfCode": "class FloorplanPointsSerializer(serializers.ModelSerializer):\n class Meta:\n model = FloorplanPoints\n fields = [\n \"points\",\n \"plan\",\n ]",
"detail": "back.api.serializers", "detail": "back.api.serializers",
"documentation": {} "documentation": {}
}, },
@ -8434,6 +8511,15 @@
"detail": "back.api.views", "detail": "back.api.views",
"documentation": {} "documentation": {}
}, },
{
"label": "FloorplanPointsView",
"kind": 6,
"importPath": "back.api.views",
"description": "back.api.views",
"peekOfCode": "class FloorplanPointsView(APIView):\n def get(self, request, id):\n points = FloorplanPoints.objects.get(plan=id)\n serializer = FloorplanPointsSerializer(points, many=False)\n return JsonResponse(serializer.data, safe=False)\n def post(self, request, id):\n data = JSONParser().parse(request)\n data[\"plan\"] = id\n serializer = FloorplanPointsSerializer(data=data)\n if serializer.is_valid():",
"detail": "back.api.views",
"documentation": {}
},
{ {
"label": "logger", "label": "logger",
"kind": 5, "kind": 5,
@ -8646,7 +8732,7 @@
"kind": 5, "kind": 5,
"importPath": "back.back.urls", "importPath": "back.back.urls",
"description": "back.back.urls", "description": "back.back.urls",
"peekOfCode": "urlpatterns = [\n path(\"admin/\", admin.site.urls),\n path(\"api/products\", csrf_exempt(views.Products.as_view())),\n path(\"api/floorplan/\", csrf_exempt(views.FloorplanView.as_view())),\n path(\"api/floorplan/<str:id>\", csrf_exempt(views.FloorplanView.as_view())),\n] + static('/files', document_root='files')", "peekOfCode": "urlpatterns = [\n path(\"admin/\", admin.site.urls),\n path(\"api/products\", csrf_exempt(views.Products.as_view())),\n path(\"api/floorplan/\", csrf_exempt(views.FloorplanView.as_view())),\n path(\"api/floorplan/<str:id>\", csrf_exempt(views.FloorplanView.as_view())),\n path(\"api/floorplan/<str:id>/points\", csrf_exempt(views.FloorplanPointsView.as_view())),\n] + static('/files', document_root='files')",
"detail": "back.back.urls", "detail": "back.back.urls",
"documentation": {} "documentation": {}
}, },

View File

@ -101,10 +101,24 @@ const updateValues = async () => {
} }
const target_array = ref<{ type: string, title: string, points?: { x: number, y: number } }[]>([]) const target_array = ref<{ type: string, title: string, points?: { x: number, y: number } }[]>([])
const target_type = ref() const target_type = ref('')
const addTargetType = (name: string) => { const addTargetType = (name: string) => {
target_type.value = name target_type.value = name
} }
const savePoints = async ()=>{
const res = await fetch(`${config.public.apiBase}/api/floorplan/${selectFile.value}/points`, {
method: 'POST',
headers: {
'Accept': 'application/json',
"Content-Type": "application/json",
},
body: JSON.stringify({
points: target_array.value
})
})
const data = await res.json()
}
onMounted(async () => { onMounted(async () => {
await loadFiles() await loadFiles()
}) })
@ -117,7 +131,7 @@ watch(active_point, () => {
const t_index = target_array.value.findIndex(el => el.type == target_type.value) const t_index = target_array.value.findIndex(el => el.type == target_type.value)
if (t_index !== -1) target_array.value.splice(t_index, 1) if (t_index !== -1) target_array.value.splice(t_index, 1)
const t = ({ type: target_type.value, title: 'home', points: active_point.value }) const t = ({ type: target_type.value, title: target_type.value, points: active_point.value })
const t_state_index = target_points.value.findIndex(el => el.type == target_type.value) const t_state_index = target_points.value.findIndex(el => el.type == target_type.value)
if (t_state_index !== -1) target_points.value.splice(t_state_index, 1) if (t_state_index !== -1) target_points.value.splice(t_state_index, 1)
@ -196,6 +210,9 @@ watch(active_point, () => {
{{ item.points }} {{ item.points }}
</li> </li>
</ul> </ul>
<Button v-if="target_array.length > 0" @click="savePoints">
Сохранить данные
</Button>
</div> </div>
</div> </div>
</Panel> </Panel>

View File

@ -21,3 +21,8 @@ class Floorplan(models.Model):
d_size = models.IntegerField(null=True, blank=True) d_size = models.IntegerField(null=True, blank=True)
d_border = models.IntegerField(null=True, blank=True) d_border = models.IntegerField(null=True, blank=True)
paths = models.TextField() paths = models.TextField()
class FloorplanPoints(models.Model):
plan = models.OneToOneField(Floorplan, on_delete=models.CASCADE, primary_key=True)
points = models.JSONField()

View File

@ -1,9 +1,10 @@
from rest_framework import routers, serializers, viewsets from rest_framework import routers, serializers, viewsets
from .models import Product, Floorplan from .models import Floorplan, FloorplanPoints, Product
import logging import logging
logger = logging.getLogger("root") logger = logging.getLogger("root")
class ProductSerializer(serializers.HyperlinkedModelSerializer): class ProductSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
model = Product model = Product
@ -27,9 +28,10 @@ class FloorplanSerializer(serializers.ModelSerializer):
"np_field", "np_field",
"d_border", "d_border",
"d_size", "d_size",
"paths" "paths",
] ]
class FloorplanListSerializer(serializers.ModelSerializer): class FloorplanListSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Floorplan model = Floorplan
@ -37,3 +39,12 @@ class FloorplanListSerializer(serializers.ModelSerializer):
"id", "id",
"title", "title",
] ]
class FloorplanPointsSerializer(serializers.ModelSerializer):
class Meta:
model = FloorplanPoints
fields = [
"points",
"plan",
]

View File

@ -4,8 +4,9 @@ from rest_framework.views import APIView
from django.http import JsonResponse from django.http import JsonResponse
from api.tracer import parse_image, read_image, numpy_zip_str_to_arr from api.tracer import parse_image, read_image, numpy_zip_str_to_arr
from .serializers import FloorplanSerializer, FloorplanListSerializer, ProductSerializer from .serializers import (FloorplanListSerializer, FloorplanPointsSerializer, FloorplanSerializer,
from .models import Floorplan, Product ProductSerializer)
from .models import Floorplan, FloorplanPoints, Product
import logging import logging
@ -97,3 +98,17 @@ class FloorplanView(APIView):
except Exception as e: except Exception as e:
logger.error(e) logger.error(e)
raise e raise e
class FloorplanPointsView(APIView):
def get(self, request, id):
points = FloorplanPoints.objects.get(plan=id)
serializer = FloorplanPointsSerializer(points, many=False)
return JsonResponse(serializer.data, safe=False)
def post(self, request, id):
data = JSONParser().parse(request)
data["plan"] = id
serializer = FloorplanPointsSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)

View File

@ -25,4 +25,5 @@ urlpatterns = [
path("api/products", csrf_exempt(views.Products.as_view())), path("api/products", csrf_exempt(views.Products.as_view())),
path("api/floorplan/", csrf_exempt(views.FloorplanView.as_view())), path("api/floorplan/", csrf_exempt(views.FloorplanView.as_view())),
path("api/floorplan/<str:id>", csrf_exempt(views.FloorplanView.as_view())), path("api/floorplan/<str:id>", csrf_exempt(views.FloorplanView.as_view())),
path("api/floorplan/<str:id>/points", csrf_exempt(views.FloorplanPointsView.as_view())),
] + static('/files', document_root='files') ] + static('/files', document_root='files')