diff --git a/test_client/src/api/banner.js b/test_client/src/api/banner.js new file mode 100644 index 0000000..9f19353 --- /dev/null +++ b/test_client/src/api/banner.js @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +export function getBannerAll() { + return request({ + url: '/examtest/banner/', + method: 'get', + }) +} +export function createBanner(data) { + return request({ + url: '/examtest/banner/', + method: 'post', + data + }) +} +export function updateBanner(id, data) { + return request({ + url: `/examtest/banner/${id}/`, + method: 'put', + data + }) +} +export function deleteBanner(id) { + return request({ + url: `/examtest/banner/${id}/`, + method: 'delete', + }) +} \ No newline at end of file diff --git a/test_client/src/router/index.js b/test_client/src/router/index.js index 6d66527..6d40e3e 100644 --- a/test_client/src/router/index.js +++ b/test_client/src/router/index.js @@ -195,6 +195,12 @@ export const asyncRoutes = [ name: 'System', meta: { title: '系统管理', icon: 'tree', perms: ['system_manage'] }, children: [ + { + path: 'banner', + name: 'Banner', + component: () => import('@/views/system/banner.vue'), + meta: { title: '轮播图', icon: '', perms: ['banner_manage'] } + }, { path: 'user', name: 'User', diff --git a/test_client/src/views/system/banner.vue b/test_client/src/views/system/banner.vue new file mode 100644 index 0000000..6821c5e --- /dev/null +++ b/test_client/src/views/system/banner.vue @@ -0,0 +1,230 @@ + + + diff --git a/test_server/examtest/migrations/0017_banner.py b/test_server/examtest/migrations/0017_banner.py new file mode 100644 index 0000000..0783072 --- /dev/null +++ b/test_server/examtest/migrations/0017_banner.py @@ -0,0 +1,30 @@ +# Generated by Django 3.0.4 on 2020-03-29 13:35 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('examtest', '0016_auto_20200325_1610'), + ] + + operations = [ + migrations.CreateModel( + name='Banner', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_delete', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=200, verbose_name='名称')), + ('path', models.CharField(blank=True, max_length=1000, null=True, verbose_name='图片地址')), + ('url', models.CharField(blank=True, max_length=1000, null=True, verbose_name='链接地址')), + ('sort', models.IntegerField(default=1, verbose_name='排序数字')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/test_server/examtest/models.py b/test_server/examtest/models.py index b126fe3..d8d71f4 100644 --- a/test_server/examtest/models.py +++ b/test_server/examtest/models.py @@ -40,4 +40,11 @@ class AnswerDetail(SoftCommonModel): is_right = models.BooleanField(default=False, verbose_name='是否正确') class Meta: verbose_name = '答题记录' - verbose_name_plural = verbose_name \ No newline at end of file + verbose_name_plural = verbose_name + + +class Banner(CommonModel): + name = models.CharField(max_length=200, verbose_name='名称') + path = models.CharField(max_length=1000, null=True, blank=True, verbose_name='图片地址') + url = models.CharField(max_length=1000, null=True, blank=True, verbose_name='链接地址') + sort = models.IntegerField(default=1, verbose_name='排序数字') diff --git a/test_server/examtest/serializers.py b/test_server/examtest/serializers.py index 16f53b6..8f738e3 100644 --- a/test_server/examtest/serializers.py +++ b/test_server/examtest/serializers.py @@ -1,11 +1,17 @@ from rest_framework import serializers from question.models import Questioncat from crm.models import Consumer -from .models import ExamTest, AnswerDetail +from .models import ExamTest, AnswerDetail, Banner from .models_paper import TestRule, WorkScope - +class BannerSerializer(serializers.ModelSerializer): + """ + 轮播图序列化 + """ + class Meta: + model = Banner + fields = ('id','name','path', 'url', 'sort') class TestRuleSerializer(serializers.ModelSerializer): """ 规则序列化 diff --git a/test_server/examtest/urls.py b/test_server/examtest/urls.py index 549c9a0..600bacf 100644 --- a/test_server/examtest/urls.py +++ b/test_server/examtest/urls.py @@ -1,11 +1,12 @@ from django.urls import path,include -from .views import TestRuleViewSet, MoniTestView, MyExamTestView, AnswerDetailView, MyExamTestFxView, WorkScopeViewSet +from .views import TestRuleViewSet, MoniTestView, MyExamTestView, AnswerDetailView, MyExamTestFxView, WorkScopeViewSet, BannerViewSet from rest_framework import routers router = routers.DefaultRouter() router.register('testrule', TestRuleViewSet, basename="testrule") router.register('workscope', WorkScopeViewSet, basename="workscope") +router.register('banner', BannerViewSet, basename='banner') urlpatterns = [ path('monitest/',MoniTestView.as_view()), diff --git a/test_server/examtest/views.py b/test_server/examtest/views.py index ba34373..a36e9be 100644 --- a/test_server/examtest/views.py +++ b/test_server/examtest/views.py @@ -16,9 +16,9 @@ from utils.custom import CommonPagination from rbac.permission import RbacPermission from question.models import Question from question.serializers import QuestionSerializer -from .models import ExamTest, AnswerDetail +from .models import ExamTest, AnswerDetail, Banner from .models_paper import TestRule, WorkScope -from .serializers import TestRuleSerializer, MoniTestSerializer, AnswerDetailSerializer, ExamTestListSerializer, AnswerDetailCreateSerializer, WorkScopeSerializer +from .serializers import TestRuleSerializer, MoniTestSerializer, AnswerDetailSerializer, ExamTestListSerializer, AnswerDetailCreateSerializer, WorkScopeSerializer, BannerSerializer from server import settings from crm.authentication import ConsumerTokenAuthentication from utils.custom import CommonPagination @@ -163,6 +163,35 @@ class WorkScopeViewSet(ModelViewSet): return Response(ret) +class BannerViewSet(ModelViewSet): + """ + 轮播图:增删改查 + """ + perms_map = ( + {'*': 'admin'}, {'*': 'Banner_all'}, {'get': 'Banner_list'}, {'post': 'Banner_create'}, + {'put': 'Banner_update'}, {'delete': 'Banner_delete'}) + pagination_class = None + queryset = Banner.objects.filter(is_delete=0).all().order_by("sort") + serializer_class = BannerSerializer + ordering_fields = ('id', 'sort') + ordering = ['sort'] + + def get_authenticators(self): + """ + GET请求不做登陆验证 + """ + if self.request.method == 'GET': + self.authentication_classes = [] + return [auth() for auth in self.authentication_classes] + + def get_permissions(self): + """ + GET请求不做权限验证 + """ + if self.request.method == 'GET': + self.permission_classes = [] + return [permission() for permission in self.permission_classes] + class TestRuleViewSet(ModelViewSet): """ 模考规则:增删改查 diff --git a/test_server/media/20200330/1cd0810c-7226-11ea-a085-1063c8f02116.png b/test_server/media/20200330/1cd0810c-7226-11ea-a085-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/1cd0810c-7226-11ea-a085-1063c8f02116.png differ diff --git a/test_server/media/20200330/2559b768-7225-11ea-bda9-1063c8f02116.png b/test_server/media/20200330/2559b768-7225-11ea-bda9-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/2559b768-7225-11ea-bda9-1063c8f02116.png differ diff --git a/test_server/media/20200330/267b1e86-7228-11ea-b40e-1063c8f02116.png b/test_server/media/20200330/267b1e86-7228-11ea-b40e-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/267b1e86-7228-11ea-b40e-1063c8f02116.png differ diff --git a/test_server/media/20200330/32d45a80-7226-11ea-b3b7-1063c8f02116.jpg b/test_server/media/20200330/32d45a80-7226-11ea-b3b7-1063c8f02116.jpg new file mode 100644 index 0000000..b07e79e Binary files /dev/null and b/test_server/media/20200330/32d45a80-7226-11ea-b3b7-1063c8f02116.jpg differ diff --git a/test_server/media/20200330/39d1c558-7229-11ea-9aab-1063c8f02116.png b/test_server/media/20200330/39d1c558-7229-11ea-9aab-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/39d1c558-7229-11ea-9aab-1063c8f02116.png differ diff --git a/test_server/media/20200330/3d79c2f0-7229-11ea-abe3-1063c8f02116.jpg b/test_server/media/20200330/3d79c2f0-7229-11ea-abe3-1063c8f02116.jpg new file mode 100644 index 0000000..fdaa0e8 Binary files /dev/null and b/test_server/media/20200330/3d79c2f0-7229-11ea-abe3-1063c8f02116.jpg differ diff --git a/test_server/media/20200330/42afc1ac-7229-11ea-aa2f-1063c8f02116.png b/test_server/media/20200330/42afc1ac-7229-11ea-aa2f-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/42afc1ac-7229-11ea-aa2f-1063c8f02116.png differ diff --git a/test_server/media/20200330/5bee8686-7228-11ea-887a-1063c8f02116.jpg b/test_server/media/20200330/5bee8686-7228-11ea-887a-1063c8f02116.jpg new file mode 100644 index 0000000..fdaa0e8 Binary files /dev/null and b/test_server/media/20200330/5bee8686-7228-11ea-887a-1063c8f02116.jpg differ diff --git a/test_server/media/20200330/620204f8-722a-11ea-a329-1063c8f02116.jpg b/test_server/media/20200330/620204f8-722a-11ea-a329-1063c8f02116.jpg new file mode 100644 index 0000000..fdaa0e8 Binary files /dev/null and b/test_server/media/20200330/620204f8-722a-11ea-a329-1063c8f02116.jpg differ diff --git a/test_server/media/20200330/6e61234c-722a-11ea-841d-1063c8f02116.png b/test_server/media/20200330/6e61234c-722a-11ea-841d-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/6e61234c-722a-11ea-841d-1063c8f02116.png differ diff --git a/test_server/media/20200330/85d8609c-7228-11ea-849a-1063c8f02116.jpg b/test_server/media/20200330/85d8609c-7228-11ea-849a-1063c8f02116.jpg new file mode 100644 index 0000000..fdaa0e8 Binary files /dev/null and b/test_server/media/20200330/85d8609c-7228-11ea-849a-1063c8f02116.jpg differ diff --git a/test_server/media/20200330/cb0be570-7229-11ea-a909-1063c8f02116.jpg b/test_server/media/20200330/cb0be570-7229-11ea-a909-1063c8f02116.jpg new file mode 100644 index 0000000..fdaa0e8 Binary files /dev/null and b/test_server/media/20200330/cb0be570-7229-11ea-a909-1063c8f02116.jpg differ diff --git a/test_server/media/20200330/e0d31380-7222-11ea-834a-1063c8f02116.png b/test_server/media/20200330/e0d31380-7222-11ea-834a-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/e0d31380-7222-11ea-834a-1063c8f02116.png differ diff --git a/test_server/media/20200330/e6608ac8-7223-11ea-948a-1063c8f02116.png b/test_server/media/20200330/e6608ac8-7223-11ea-948a-1063c8f02116.png new file mode 100644 index 0000000..6d4b83e Binary files /dev/null and b/test_server/media/20200330/e6608ac8-7223-11ea-948a-1063c8f02116.png differ diff --git a/test_server/media/20200330/f62e931c-7224-11ea-8d8d-1063c8f02116.jpg b/test_server/media/20200330/f62e931c-7224-11ea-8d8d-1063c8f02116.jpg new file mode 100644 index 0000000..b07e79e Binary files /dev/null and b/test_server/media/20200330/f62e931c-7224-11ea-8d8d-1063c8f02116.jpg differ