From 1d8fff443b8d1555478ae99f419df3c832ccdb31 Mon Sep 17 00:00:00 2001 From: etoai Date: Thu, 17 Apr 2025 23:37:44 +0800 Subject: [PATCH] 20250417 --- backend/application/settings.py | 1 + backend/application/urls.py | 3 + backend/apps/map/migrations/0001_initial.py | 29 ++ backend/apps/map/migrations/__init__.py | 0 backend/apps/map/models.py | 14 + backend/apps/map/serializers.py | 13 + backend/apps/map/urls.py | 15 + backend/apps/map/views.py | 29 ++ frontend/src/components/mutitabs.vue | 2 +- frontend/src/views/map/PlaceTagTree.vue | 298 ++++++++++++++++++++ frontend/src/views/map/myMapIndex.vue | 194 +++++++++++-- 11 files changed, 574 insertions(+), 24 deletions(-) create mode 100644 backend/apps/map/migrations/0001_initial.py create mode 100644 backend/apps/map/migrations/__init__.py create mode 100644 backend/apps/map/models.py create mode 100644 backend/apps/map/serializers.py create mode 100644 backend/apps/map/urls.py create mode 100644 backend/apps/map/views.py create mode 100644 frontend/src/views/map/PlaceTagTree.vue diff --git a/backend/application/settings.py b/backend/application/settings.py index ba01331..f6de856 100644 --- a/backend/application/settings.py +++ b/backend/application/settings.py @@ -73,6 +73,7 @@ INSTALLED_APPS = [ 'apps.lyTiktokUnion', 'apps.lyworkflow', 'apps.mymaps', + 'apps.map', ] MIDDLEWARE = [ diff --git a/backend/application/urls.py b/backend/application/urls.py index 7f8becc..e7f3c62 100644 --- a/backend/application/urls.py +++ b/backend/application/urls.py @@ -101,6 +101,7 @@ urlpatterns = [ path('api/lyformbuilder/', include('apps.lyFormBuilder.urls')), path('api/lytiktokunion/', include('apps.lyTiktokUnion.urls')), path('api/workflow/', include('apps.lyworkflow.urls')), + path('api/map/', include('apps.map.urls')), # 添加地图模块路由 #文件管理 path('api/fileMedia/', RYFileMediaView.as_view(), name='file_media'), @@ -191,5 +192,7 @@ urlpatterns = [ path('downloadapp/',downloadapp ,name='前端APP下载页'), path('favicon.ico',RedirectView.as_view(url=r'static/favicon.ico')), path('', TemplateView.as_view(template_name="index.html"),name='后台管理默认页面'), + + ] diff --git a/backend/apps/map/migrations/0001_initial.py b/backend/apps/map/migrations/0001_initial.py new file mode 100644 index 0000000..b7e8c02 --- /dev/null +++ b/backend/apps/map/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# Generated by Django 4.1.8 on 2025-04-17 21:26 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Place', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='地点名称')), + ('lng', models.FloatField(verbose_name='经度')), + ('lat', models.FloatField(verbose_name='纬度')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='map.place', verbose_name='父节点')), + ], + options={ + 'verbose_name': '地点标签', + 'verbose_name_plural': '地点标签', + }, + ), + ] diff --git a/backend/apps/map/migrations/__init__.py b/backend/apps/map/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/map/models.py b/backend/apps/map/models.py new file mode 100644 index 0000000..20ddc13 --- /dev/null +++ b/backend/apps/map/models.py @@ -0,0 +1,14 @@ +from django.db import models + +class Place(models.Model): + name = models.CharField(max_length=100, verbose_name="地点名称") + lng = models.FloatField(verbose_name="经度") + lat = models.FloatField(verbose_name="纬度") + parent = models.ForeignKey('self', null=True, blank=True, related_name='children', on_delete=models.CASCADE, verbose_name="父节点") + + class Meta: + verbose_name = "地点标签" + verbose_name_plural = verbose_name + + def __str__(self): + return self.name \ No newline at end of file diff --git a/backend/apps/map/serializers.py b/backend/apps/map/serializers.py new file mode 100644 index 0000000..7aff0ef --- /dev/null +++ b/backend/apps/map/serializers.py @@ -0,0 +1,13 @@ +from rest_framework import serializers +from .models import Place + +class PlaceSerializer(serializers.ModelSerializer): + children = serializers.SerializerMethodField() + + class Meta: + model = Place + fields = ['id', 'name', 'lng', 'lat', 'parent', 'children'] + + def get_children(self, obj): + queryset = obj.children.all() + return PlaceSerializer(queryset, many=True).data \ No newline at end of file diff --git a/backend/apps/map/urls.py b/backend/apps/map/urls.py new file mode 100644 index 0000000..b6dc4e9 --- /dev/null +++ b/backend/apps/map/urls.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +""" +@Remark: 地点标签模块的路由文件 +""" + +from django.urls import path, re_path +from rest_framework import routers +from .views import PlaceViewSet + +map_url = routers.SimpleRouter() +map_url.register(r'places', PlaceViewSet) + +urlpatterns = [] +urlpatterns += map_url.urls \ No newline at end of file diff --git a/backend/apps/map/views.py b/backend/apps/map/views.py new file mode 100644 index 0000000..1990b93 --- /dev/null +++ b/backend/apps/map/views.py @@ -0,0 +1,29 @@ +from rest_framework import viewsets +from .models import Place +from .serializers import PlaceSerializer +from drf_yasg.utils import swagger_auto_schema +from drf_yasg import openapi + +class PlaceViewSet(viewsets.ModelViewSet): + """ + 地点标签管理接口 + """ + queryset = Place.objects.filter(parent=None) # 只获取顶级节点 + serializer_class = PlaceSerializer + + @swagger_auto_schema( + operation_summary='获取地点标签树', + operation_description='返回所有地点标签的树形结构数据', + responses={200: PlaceSerializer(many=True)} + ) + def list(self, request, *args, **kwargs): + return super().list(request, *args, **kwargs) + + @swagger_auto_schema( + operation_summary='创建地点标签', + operation_description='创建新的地点标签', + request_body=PlaceSerializer, + responses={201: PlaceSerializer()} + ) + def create(self, request, *args, **kwargs): + return super().create(request, *args, **kwargs) \ No newline at end of file diff --git a/frontend/src/components/mutitabs.vue b/frontend/src/components/mutitabs.vue index 8dafbe9..84d5fa0 100644 --- a/frontend/src/components/mutitabs.vue +++ b/frontend/src/components/mutitabs.vue @@ -380,7 +380,7 @@ transform: translateX(-0.5%); } .lyadmin-main-content{ - padding: 10px !important; + padding: 1px !important; } .lyfadein-leave-from { transform: translateX(0); diff --git a/frontend/src/views/map/PlaceTagTree.vue b/frontend/src/views/map/PlaceTagTree.vue new file mode 100644 index 0000000..97eebbd --- /dev/null +++ b/frontend/src/views/map/PlaceTagTree.vue @@ -0,0 +1,298 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/views/map/myMapIndex.vue b/frontend/src/views/map/myMapIndex.vue index 1f34c42..75f7d13 100644 --- a/frontend/src/views/map/myMapIndex.vue +++ b/frontend/src/views/map/myMapIndex.vue @@ -25,26 +25,27 @@ 开始测距 清除测距 + 刷新地图 -
+
+ +