From d3c173f12fe7e1eb0b4bbdf4297fede1ba2c3983 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 15 Mar 2021 16:05:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8C=89=E6=B8=85=E5=8D=95/=E6=8C=89?= =?UTF-8?q?=E5=8D=95=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/api/record.js | 2 +- client/src/api/task.js | 14 ++ client/src/views/supervision/task.vue | 1 - client/src/views/supervision/taskdo.vue | 313 +++++++++++++++++------- server/apps/supervision/models.py | 6 +- server/apps/supervision/serializers.py | 2 +- server/apps/supervision/views.py | 25 +- 7 files changed, 263 insertions(+), 100 deletions(-) diff --git a/client/src/api/record.js b/client/src/api/record.js index d6c2914..4c99fa2 100644 --- a/client/src/api/record.js +++ b/client/src/api/record.js @@ -5,7 +5,7 @@ import request from '@/utils/request' export function getRecordList(query) { return request({ - url: '/supervision/content/', + url: '/supervision/record/', method: 'get', params: query }) diff --git a/client/src/api/task.js b/client/src/api/task.js index f59f436..0b3ac3a 100644 --- a/client/src/api/task.js +++ b/client/src/api/task.js @@ -48,3 +48,17 @@ export function inittask(id, data) { }) } + +export function gettaskcontents(id) { + return request({ + url: `/supervision/task/${id}/contents/`, + method: 'get' + }) +} + +export function gettaskdepts(id) { + return request({ + url: `/supervision/task/${id}/depts/`, + method: 'get' + }) +} \ No newline at end of file diff --git a/client/src/views/supervision/task.vue b/client/src/views/supervision/task.vue index a5570ee..bd71def 100644 --- a/client/src/views/supervision/task.vue +++ b/client/src/views/supervision/task.vue @@ -69,7 +69,6 @@ align="center" label="操作" width="220px" - fixed="right" > \ No newline at end of file diff --git a/server/apps/supervision/models.py b/server/apps/supervision/models.py index fae4c5a..6df1e23 100644 --- a/server/apps/supervision/models.py +++ b/server/apps/supervision/models.py @@ -49,10 +49,10 @@ class Record(CommonBModel): ('已确认', '已确认'), ('待整改', '待整改') ) - content = models.ForeignKey(Content, verbose_name='材料内容', on_delete=models.DO_NOTHING) - task = models.ForeignKey(Task, verbose_name='关联任务', null=True, blank=True, on_delete=models.SET_NULL) + content = models.ForeignKey(Content, verbose_name='材料内容', on_delete=models.DO_NOTHING, related_name='record_content') + task = models.ForeignKey(Task, verbose_name='关联任务', null=True, blank=True, on_delete=models.SET_NULL, related_name='record_task') up_date = models.DateField('上报时间', null=True, blank=True) - up_user = models.ForeignKey(User, verbose_name='上报人', null=True, blank=True,on_delete=models.SET_NULL) + up_user = models.ForeignKey(User, verbose_name='上报人', null=True, blank=True,on_delete=models.SET_NULL, related_name='record_up_user') end_date = models.DateField('截止时间', null=True, blank=True) state = models.CharField('记录状态', max_length=50, choices=state_choices, default='待上报') is_yes = models.BooleanField('是否适用', default=True) diff --git a/server/apps/supervision/serializers.py b/server/apps/supervision/serializers.py index 136b10a..30e1d09 100644 --- a/server/apps/supervision/serializers.py +++ b/server/apps/supervision/serializers.py @@ -24,7 +24,7 @@ class ContentSerializer(serializers.ModelSerializer): class ContentListSerializer(serializers.ModelSerializer): class Meta: model = Content - fields = ['name', 'desc'] + fields = ['name', 'desc', 'id'] class TaskCreateUpdateSerializer(serializers.ModelSerializer): class Meta: diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index d9039b7..2ca686b 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -33,12 +33,14 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet): queryset = Task.objects.all() search_fields = ['name'] ordering = ['-create_time'] + 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'}) def createself(self, request): """ @@ -49,7 +51,6 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet): 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): """ @@ -74,12 +75,32 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet): obj.save() return Response(status=status.HTTP_200_OK) return Response('单位或清单不能为空', status=status.HTTP_400_BAD_REQUEST) -class RecordViewSet(CreateUpdateCustomMixin,ModelViewSet): + + @action(methods=['get'], detail=True, perms_map = {'get':'*'}) + def contents(self, request, *args, **kwargs): + """ + 聚合 + """ + obj = self.get_object() + serializer = ContentListSerializer(obj.contents.distinct(), many=True) + return Response(serializer.data) + + @action(methods=['get'], detail=True, perms_map = {'get':'*'}) + def depts(self, request, *args, **kwargs): + """ + 聚合 + """ + obj = self.get_object() + serializer = OrganizationSimpleSerializer(obj.depts.distinct(), many=True) + return Response(serializer.data) + +class RecordViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'record_create', 'put': 'record_update', 'delete': 'record_delete'} queryset = Record.objects.all() serializer_class = RecordSerializer search_fields = ['name'] ordering = ['-create_time'] + filterset_fields = ['content', 'belong_dept'] From aa03f2f0eef43395905579713edd5073a3293b81 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 16 Mar 2021 08:28:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E6=8A=A5=E9=80=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/views/supervision/taskdo.vue | 2 + .../migrations/0008_auto_20210316_0827.py | 40 +++++++++++++++++++ server/apps/supervision/models.py | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 server/apps/supervision/migrations/0008_auto_20210316_0827.py diff --git a/client/src/views/supervision/taskdo.vue b/client/src/views/supervision/taskdo.vue index 2fadf86..14fe763 100644 --- a/client/src/views/supervision/taskdo.vue +++ b/client/src/views/supervision/taskdo.vue @@ -233,6 +233,7 @@ export default { }); }, chose1(item){ + this.now = item this.listLoading = true getRecordList({pageoff:true, content:item.id}).then(res=>{ this.listLoading = false @@ -240,6 +241,7 @@ export default { }) }, chose2(item){ + this.now = item this.listLoading = true getRecordList({pageoff:true, belong_dept:item.id}).then(res=>{ this.listLoading = false diff --git a/server/apps/supervision/migrations/0008_auto_20210316_0827.py b/server/apps/supervision/migrations/0008_auto_20210316_0827.py new file mode 100644 index 0000000..27cc541 --- /dev/null +++ b/server/apps/supervision/migrations/0008_auto_20210316_0827.py @@ -0,0 +1,40 @@ +# Generated by Django 3.0.5 on 2021-03-16 00:27 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('supervision', '0007_auto_20210315_1412'), + ] + + operations = [ + migrations.RemoveField( + model_name='task', + name='is_self', + ), + migrations.AddField( + model_name='record', + name='is_self', + field=models.BooleanField(default=False, verbose_name='是否主动报送'), + ), + migrations.AlterField( + model_name='record', + name='content', + field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='record_content', to='supervision.Content', verbose_name='材料内容'), + ), + migrations.AlterField( + model_name='record', + name='task', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='record_task', to='supervision.Task', verbose_name='关联任务'), + ), + migrations.AlterField( + model_name='record', + name='up_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='record_up_user', to=settings.AUTH_USER_MODEL, verbose_name='上报人'), + ), + ] diff --git a/server/apps/supervision/models.py b/server/apps/supervision/models.py index 6df1e23..b831fcd 100644 --- a/server/apps/supervision/models.py +++ b/server/apps/supervision/models.py @@ -27,7 +27,6 @@ class Task(CommonBModel): ('已完成', '已完成'), ) name = models.CharField('名称', max_length=100) - is_self = models.BooleanField('是否主动报送', default=False) end_date = models.DateField('截止时间', null=True, blank=True) note = models.TextField('任务备注', null=True, blank=True) complete_rate = models.IntegerField('完成度', default=0) @@ -51,6 +50,7 @@ class Record(CommonBModel): ) content = models.ForeignKey(Content, verbose_name='材料内容', on_delete=models.DO_NOTHING, related_name='record_content') task = models.ForeignKey(Task, verbose_name='关联任务', null=True, blank=True, on_delete=models.SET_NULL, related_name='record_task') + is_self = models.BooleanField('是否主动报送', default=False) up_date = models.DateField('上报时间', null=True, blank=True) up_user = models.ForeignKey(User, verbose_name='上报人', null=True, blank=True,on_delete=models.SET_NULL, related_name='record_up_user') end_date = models.DateField('截止时间', null=True, blank=True)