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 @@
+
+
+
新增
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+
+
+
+
+ {{ scope.row.url }}
+
+
+
+
+ {{ scope.row.sort }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击上传
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
+
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