From f199b9d68f07e3305a0f12cafa1de84a2586c8d5 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 15 Mar 2021 09:21:12 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=8A=A5=E9=80=81?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1vue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/api/task.js | 12 +- client/src/router/index.js | 2 +- client/src/views/supervision/content.vue | 32 +-- client/src/views/supervision/task.vue | 278 ++++++++++++----------- client/src/views/supervision/taskdo.vue | 0 5 files changed, 149 insertions(+), 175 deletions(-) create mode 100644 client/src/views/supervision/taskdo.vue diff --git a/client/src/api/task.js b/client/src/api/task.js index dc8eec0..0b3e702 100644 --- a/client/src/api/task.js +++ b/client/src/api/task.js @@ -1,9 +1,7 @@ import request from '@/utils/request' - - -export function getTaskList(query) { +export function gettasklist(query) { return request({ url: '/supervision/task/', method: 'get', @@ -11,14 +9,14 @@ export function getTaskList(query) { }) } -export function getTask(id) { +export function gettask(id) { return request({ url: `/supervision/task/${id}/`, method: 'get' }) } -export function createTask(data) { +export function createtask(data) { return request({ url: '/supervision/task/', method: 'post', @@ -26,7 +24,7 @@ export function createTask(data) { }) } -export function updateTask(id, data) { +export function updatetask(id, data) { return request({ url: `/supervision/task/${id}/`, method: 'put', @@ -34,7 +32,7 @@ export function updateTask(id, data) { }) } -export function deleteTask(id, data) { +export function deletetask(id, data) { return request({ url: `/supervision/task/${id}/`, method: 'delete', diff --git a/client/src/router/index.js b/client/src/router/index.js index 932914c..d114a99 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -118,7 +118,7 @@ export const asyncRoutes = [ path: 'content', name: 'Content', component: () => import('@/views/supervision/content.vue'), - meta: { title: '资料清单', icon: 'documentation', perms: ['content_manage'] } + meta: { title: '材料清单', icon: 'documentation', perms: ['content_manage'] } }, { path: 'task', diff --git a/client/src/views/supervision/content.vue b/client/src/views/supervision/content.vue index d8a4dd6..00c4d0f 100644 --- a/client/src/views/supervision/content.vue +++ b/client/src/views/supervision/content.vue @@ -1,10 +1,10 @@ @@ -99,31 +98,6 @@ - \ No newline at end of file diff --git a/client/src/views/supervision/taskinit.vue b/client/src/views/supervision/taskinit.vue new file mode 100644 index 0000000..55277a0 --- /dev/null +++ b/client/src/views/supervision/taskinit.vue @@ -0,0 +1,65 @@ + + + \ No newline at end of file diff --git a/server/apps/supervision/migrations/0007_auto_20210315_1412.py b/server/apps/supervision/migrations/0007_auto_20210315_1412.py new file mode 100644 index 0000000..dd2a8e0 --- /dev/null +++ b/server/apps/supervision/migrations/0007_auto_20210315_1412.py @@ -0,0 +1,43 @@ +# Generated by Django 3.0.5 on 2021-03-15 06:12 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0008_auto_20210311_0919'), + ('supervision', '0006_auto_20210312_1440'), + ] + + operations = [ + migrations.RemoveField( + model_name='record', + name='belong_to', + ), + migrations.RemoveField( + model_name='task', + name='belong_to', + ), + migrations.AddField( + model_name='record', + name='belong_dept', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='record_belong_dept', to='system.Organization', verbose_name='所属部门'), + ), + migrations.AddField( + model_name='record', + name='up_date', + field=models.DateField(blank=True, null=True, verbose_name='上报时间'), + ), + migrations.AddField( + model_name='task', + name='belong_dept', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='task_belong_dept', to='system.Organization', verbose_name='所属部门'), + ), + migrations.AlterField( + model_name='task', + name='is_self', + field=models.BooleanField(default=False, verbose_name='是否主动报送'), + ), + ] diff --git a/server/apps/supervision/serializers.py b/server/apps/supervision/serializers.py index ff2c429..ddca03b 100644 --- a/server/apps/supervision/serializers.py +++ b/server/apps/supervision/serializers.py @@ -1,6 +1,7 @@ +from django.db.models.base import Model from rest_framework import serializers from .models import * -from apps.system.serializers import OrganizationSerializer +from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer class ContentSerializer(serializers.ModelSerializer): type_ = serializers.SerializerMethodField() @@ -23,9 +24,17 @@ class ContentSerializer(serializers.ModelSerializer): class TaskCreateUpdateSerializer(serializers.ModelSerializer): class Meta: model = Task - fields = ['name', 'end_date', 'note'] + fields = ['name', 'end_date', 'note', 'id'] class TaskListSerializer(serializers.ModelSerializer): class Meta: model = Task - fields = ['name', 'is_self', 'end_date', 'note', 'complete_rate', 'state'] \ No newline at end of file + fields = ['name', 'is_self', 'end_date', 'note', 'complete_rate', 'state', 'id'] + + +class TaksDetailSerializer(serializers.ModelSerializer): + create_by_ = UserSimpleSerializer(source='create_by', read_only = True) + belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True) + class Meta: + model = Task + fields = '__all__' \ No newline at end of file diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index fa9e169..8752b3a 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -36,6 +36,8 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet): def get_serializer_class(self): if self.action in ['create', 'update']: return TaskCreateUpdateSerializer + elif self.action == 'retrieve': + return TaksDetailSerializer return TaskListSerializer @action(methods=['post'], detail=False, perms_map = {'post':'task_createself'}) @@ -47,4 +49,30 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet): serializer.is_valid(raise_exception=True) serializer.save(is_self=True, create_by=request.user, belong_dept=request.user.dept) return Response(serializer.data, status=status.HTTP_201_CREATED) + + @action(methods=['post'], detail=True, perms_map = {'post':'task_init'}) + def init(self, request, *args, **kwargs): + """ + 初始化任务,生成记录 + """ + obj = self.get_object() + depts = request.data['depts'] + contents = request.data['contents'] + if depts and contents: + record_list = [] + for m in depts: + for n in contents: + data={} + data['content'] = Content.objects.get(pk=n) + data['belong_dept'] = Organization.objects.get(pk=m) + data['task'] = obj + data['end_date'] = obj.end_date + data['create_by'] = request.user + record_list.append(Record(**data)) + Record.objects.bulk_create(record_list) + obj.state = '执行中' + obj.save() + return Response(status=status.HTTP_200_OK) + return Response('单位或清单不能为空', status=status.HTTP_400_BAD_REQUEST) + \ No newline at end of file diff --git a/server/apps/system/serializers.py b/server/apps/system/serializers.py index ee6cdf5..d8e3294 100644 --- a/server/apps/system/serializers.py +++ b/server/apps/system/serializers.py @@ -134,3 +134,13 @@ class UserCreateSerializer(serializers.ModelSerializer): if User.objects.filter(phone=phone): raise serializers.ValidationError('手机号已经被注册') return phone + +class UserSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = ['id', 'name', 'username'] + +class OrganizationSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = Organization + fields = ['id', 'name'] diff --git a/server/apps/system/views.py b/server/apps/system/views.py index 7701b31..b218405 100644 --- a/server/apps/system/views.py +++ b/server/apps/system/views.py @@ -198,6 +198,7 @@ class OrganizationViewSet(PageOrNot,ModelViewSet): serializer_class = OrganizationSerializer pagination_class = None search_fields = ['name'] + filterset_fields = ['pid','name'] ordering_fields = ['sort'] ordering = ['sort', 'pk']