创建短信发送记录
This commit is contained in:
parent
1d9c3b2fc8
commit
ae3e23bca8
|
|
@ -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
|
||||
})
|
||||
}
|
||||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@
|
|||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item> -->
|
||||
<el-form-item :label="material.type=='文档'?'文件':'视频'" prop="path">
|
||||
<el-form-item :label="material.type=='文档'?'文件':'视频'" prop="path" v-if="dialogVisible">
|
||||
<el-upload
|
||||
v-if="material.type=='文档'"
|
||||
:on-preview="handlePreview"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,145 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<div style="margin-top:10px">
|
||||
<el-input
|
||||
v-model="listQuery.search"
|
||||
placeholder="输入手机号进行搜索"
|
||||
style="width: 200px;"
|
||||
class="filter-item"
|
||||
@keyup.enter.native="handleSearch"
|
||||
/>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>搜索</el-button>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="resetFilter"
|
||||
>刷新重置</el-button>
|
||||
<div style="margin-top:10px">
|
||||
<el-button type="primary" slot="reference" @click="handleAdd()">新增</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
style="width: 100%;margin-top:10px;"
|
||||
border
|
||||
stripe
|
||||
fit
|
||||
v-loading="listLoading"
|
||||
highlight-current-row
|
||||
max-height="600"
|
||||
>
|
||||
<el-table-column type="selection" width="55"></el-table-column>
|
||||
<el-table-column label="手机号">
|
||||
<template slot-scope="scope">{{ scope.row.phone }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="验证码">
|
||||
<template slot-scope="scope">{{ scope.row.code }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发送时间">
|
||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="listQuery.page"
|
||||
:limit.sync="listQuery.limit"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<el-dialog :visible.sync="dialogVisible" title="新增发送记录" >
|
||||
<el-form :model="msg" label-width="80px" :rules="rule1" ref="Form">
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input v-model="msg.phone" placeholder="手机号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="验证码" prop="code">
|
||||
<el-input v-model="msg.code" placeholder="验证码" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align:right;">
|
||||
<el-button type="danger" @click="dialogVisible=false">取消</el-button>
|
||||
<el-button type="primary" @click="confirm('Form')">确认</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import {
|
||||
getMsgList,
|
||||
createMsg
|
||||
} from "@/api/msg";
|
||||
import checkPermission from "@/utils/permission";
|
||||
import Pagination from "@/components/Pagination";
|
||||
const defaultmsg = {
|
||||
phone:null,
|
||||
msg:null
|
||||
};
|
||||
|
||||
const listQuery = {
|
||||
page: 1,
|
||||
limit: 20,
|
||||
search:''
|
||||
};
|
||||
export default {
|
||||
components: { Pagination },
|
||||
data() {
|
||||
return {
|
||||
total: 0,
|
||||
listQuery: listQuery,
|
||||
tableData: [],
|
||||
listLoading: true,
|
||||
msg:{},
|
||||
dialogVisible:false,
|
||||
rule1: {
|
||||
phone: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
code: [{ required: true, message: "请输入", trigger: "change" }],
|
||||
},
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
checkPermission,
|
||||
getList() {
|
||||
this.listLoading = true;
|
||||
getMsgList(this.listQuery).then(response => {
|
||||
this.tableData = response.data.results;
|
||||
this.total = response.data.count;
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
resetFilter() {
|
||||
this.listQuery = listQuery
|
||||
this.getList();
|
||||
},
|
||||
handleSearch() {
|
||||
this.listQuery.page = 1
|
||||
this.getList();
|
||||
},
|
||||
handleAdd() {
|
||||
this.msg = Object.assign({}, defaultmsg);
|
||||
this.dialogVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["Form"].clearValidate();
|
||||
});
|
||||
},
|
||||
confirm(){
|
||||
createMsg(this.msg).then(res=>{
|
||||
this.$message.success('成功')
|
||||
this.dialogVisible = false
|
||||
this.listQuery = listQuery
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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__'
|
||||
fields = '__all__'
|
||||
|
||||
class MsgSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SendCode
|
||||
fields='__all__'
|
||||
|
|
@ -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()),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
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']
|
||||
Loading…
Reference in New Issue