From ae3e23bca84db29d7e3aad25c80764a7524ca055 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 18 Jun 2021 13:29:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=9F=AD=E4=BF=A1=E5=8F=91?= =?UTF-8?q?=E9=80=81=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_client/src/api/msg.js | 16 +++ test_client/src/router/index.js | 6 + test_client/src/views/material/material.vue | 2 +- test_client/src/views/system/msg.vue | 145 ++++++++++++++++++++ test_mini/app.js | 4 +- test_server/crm/serializers.py | 9 +- test_server/crm/urls.py | 3 +- test_server/crm/views.py | 21 ++- 8 files changed, 195 insertions(+), 11 deletions(-) create mode 100644 test_client/src/api/msg.js create mode 100644 test_client/src/views/system/msg.vue diff --git a/test_client/src/api/msg.js b/test_client/src/api/msg.js new file mode 100644 index 0000000..92fc354 --- /dev/null +++ b/test_client/src/api/msg.js @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +export function getMsgList(query) { + return request({ + url: '/crm/msg/', + method: 'get', + params:query + }) +} +export function createMsg(data) { + return request({ + url: '/crm/msg/', + method: 'post', + data + }) +} \ No newline at end of file diff --git a/test_client/src/router/index.js b/test_client/src/router/index.js index af2b724..3b5afdc 100644 --- a/test_client/src/router/index.js +++ b/test_client/src/router/index.js @@ -324,6 +324,12 @@ export const asyncRoutes = [ component: () => import('@/views/system/role'), meta: { title: '管理员角色', icon: '', perms: ['role_manage'] } }, + { + path: 'msg', + name: 'Msg', + component: () => import('@/views/system/msg'), + meta: { title: '短信发送', icon: '', perms: ['msg_view'] } + }, // { // path: 'user/password', // name: 'ChangePassword', diff --git a/test_client/src/views/material/material.vue b/test_client/src/views/material/material.vue index 25c27c0..372e408 100644 --- a/test_client/src/views/material/material.vue +++ b/test_client/src/views/material/material.vue @@ -116,7 +116,7 @@ --> - + +
+
+ + 搜索 + 刷新重置 +
+ 新增 +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ 取消 + 确认 +
+
+
+ + + diff --git a/test_mini/app.js b/test_mini/app.js index 877e559..307bbe3 100644 --- a/test_mini/app.js +++ b/test_mini/app.js @@ -70,9 +70,9 @@ App({ globalData: { userInfo: {}, userinfo: {}, // 服务器传回的消费者信息 - host: 'https://apitest.ahctc.cn', + //host: 'https://apitest.ahctc.cn', mediahost: 'https://apitest.ahctc.cn', - //host: 'http://127.0.0.1:8000', + host: 'http://127.0.0.1:8000', //mediahost: 'http://127.0.0.1:8000', token : '', rlogin:true diff --git a/test_server/crm/serializers.py b/test_server/crm/serializers.py index e5be1dd..4d345cb 100644 --- a/test_server/crm/serializers.py +++ b/test_server/crm/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from .models import Candidate, Company, Consumer, PaySubject, ConsumerPerm, ConsumerRole +from .models import Candidate, Company, Consumer, PaySubject, ConsumerPerm, ConsumerRole, SendCode from question.models import Question, Questioncat from .permission import get_consumerperm_list from rbac.serializers.user_serializer import UserListSerializer @@ -78,4 +78,9 @@ class ConsumerDetailSerializer(serializers.ModelSerializer): class CandidateSerializer(serializers.ModelSerializer): class Meta: model = Candidate - fields = '__all__' \ No newline at end of file + fields = '__all__' + +class MsgSerializer(serializers.ModelSerializer): + class Meta: + model = SendCode + fields='__all__' \ No newline at end of file diff --git a/test_server/crm/urls.py b/test_server/crm/urls.py index f7bce72..da70839 100644 --- a/test_server/crm/urls.py +++ b/test_server/crm/urls.py @@ -1,6 +1,6 @@ from django.urls import path,include from .views import CompanyViewSet, \ -ConsumerViewSet, ConsumerMPLoginView, ConsumerRegister, change_remain_count, ConsumerPermViewSet, ConsumerRoleViewSet, candidate, CandidateViewSet +ConsumerViewSet, ConsumerMPLoginView, ConsumerRegister, MsgViewSet, change_remain_count, ConsumerPermViewSet, ConsumerRoleViewSet, candidate, CandidateViewSet from rest_framework import routers @@ -10,6 +10,7 @@ router.register('company', CompanyViewSet, basename="company") router.register('consumerrole', ConsumerRoleViewSet, basename="consumerrole") router.register('consumerperm', ConsumerPermViewSet, basename="consumerperm") router.register('candidate', CandidateViewSet, basename="candidate") +router.register('msg', MsgViewSet, basename="msg") urlpatterns = [ path('consumer/mplogin/', ConsumerMPLoginView.as_view()), path('consumer/register/', ConsumerRegister.as_view()), diff --git a/test_server/crm/views.py b/test_server/crm/views.py index 4111ed4..3c1a074 100644 --- a/test_server/crm/views.py +++ b/test_server/crm/views.py @@ -11,7 +11,7 @@ from openpyxl import Workbook, load_workbook from rest_framework import status from rest_framework.decorators import action, authentication_classes, permission_classes from rest_framework.filters import OrderingFilter, SearchFilter -from rest_framework.mixins import ListModelMixin, RetrieveModelMixin +from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView @@ -29,7 +29,7 @@ from utils.custom import CommonPagination from .filters import ConsumerFilter from .exports import export_consumer from .models import Candidate, Company, Consumer, PaySubject, SendCode, ConsumerPerm, ConsumerRole -from .serializers import CandidateSerializer, CompanySerializer, ConsumerSerializer, ConsumerPermSerializer, ConsumerRoleSerializer, ConsumerDetailSerializer +from .serializers import CandidateSerializer, CompanySerializer, ConsumerSerializer, ConsumerPermSerializer, ConsumerRoleSerializer, ConsumerDetailSerializer, MsgSerializer from lxml import etree from rbac.models import UserProfile from django.http import Http404 @@ -236,10 +236,10 @@ class ConsumerViewSet(ModelViewSet): def get_queryset(self): queryset = self.queryset queryset = self.get_serializer_class().setup_eager_loading(queryset) - if self.request.user.is_superuser: - return queryset if self.request.query_params.get('adminoff', None): return queryset.filter(create_admin__isnull=True) + if self.request.user.is_superuser: + return queryset roles = self.request.user.roles.values_list('name', flat=True) if '普通管理' in roles: queryset = queryset.filter(create_admin = self.request.user) @@ -715,4 +715,15 @@ class CandidateViewSet(RetrieveModelMixin, ListModelMixin, GenericViewSet): def my(self, request, *args, **kwargs): queryset = self.queryset.filter(consumer=request.user) serializer = self.get_serializer(queryset, many=True) - return Response(serializer.data) \ No newline at end of file + return Response(serializer.data) + + +class MsgViewSet(CreateModelMixin, ListModelMixin, GenericViewSet): + perms_map = [ + {'get': '*'}, {'post': 'msg_create'}] + queryset = SendCode.objects.all() + serializer_class = MsgSerializer + pagination_class = CommonPagination + filter_backends = [DjangoFilterBackend,SearchFilter, OrderingFilter] + search_fields = ('phone',) + ordering = ['-create_time'] \ No newline at end of file