diff --git a/client/src/api/content.js b/client/src/api/content.js new file mode 100644 index 0000000..495e86d --- /dev/null +++ b/client/src/api/content.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + + + + +export function getContentList(query) { + return request({ + url: '/supervision/content/', + method: 'get', + params: query + }) +} + +export function getContent(id) { + return request({ + url: `/supervision/content/${id}/`, + method: 'get' + }) +} + +export function createContent(data) { + return request({ + url: '/supervision/content/', + method: 'post', + data + }) +} + +export function updateContent(id, data) { + return request({ + url: `/supervision/content/${id}/`, + method: 'put', + data + }) +} + +export function deleteContent(id, data) { + return request({ + url: `/supervision/content/${id}/`, + method: 'delete', + data + }) +} + diff --git a/client/src/api/task.js b/client/src/api/task.js new file mode 100644 index 0000000..dc8eec0 --- /dev/null +++ b/client/src/api/task.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + + + + +export function getTaskList(query) { + return request({ + url: '/supervision/task/', + method: 'get', + params: query + }) +} + +export function getTask(id) { + return request({ + url: `/supervision/task/${id}/`, + method: 'get' + }) +} + +export function createTask(data) { + return request({ + url: '/supervision/task/', + method: 'post', + data + }) +} + +export function updateTask(id, data) { + return request({ + url: `/supervision/task/${id}/`, + method: 'put', + data + }) +} + +export function deleteTask(id, data) { + return request({ + url: `/supervision/task/${id}/`, + method: 'delete', + data + }) +} + diff --git a/client/src/router/index.js b/client/src/router/index.js index 4fe1687..a6d8836 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -106,6 +106,27 @@ export const asyncRoutes = [ meta: { title: '检验能力', icon: 'table', perms: ['inspection_view'] } }] }, + +{ + path: '/supervision', + component: Layout, + redirect: '/supervision/content', + name:'Supervision', + meta: { title: '日常监督', icon: 'table', perms: ['supervision_manage'] }, + children: [ + { + path: 'content', + name: 'Content', + component: () => import('@/views/supervision/content.vue'), + meta: { title: '资料清单', icon: 'documentation', perms: ['content_manage'] } + }, + { + path: 'organization', + name: 'Organization', + component: () => import('@/views/system/organization'), + meta: { title: '上报计划', icon: 'tree', perms: ['org_manage'] } + }] +}, { path: '/system', diff --git a/client/src/views/supervision/content.vue b/client/src/views/supervision/content.vue new file mode 100644 index 0000000..54d513c --- /dev/null +++ b/client/src/views/supervision/content.vue @@ -0,0 +1,267 @@ + + + diff --git a/server/apps/supervision/migrations/0003_auto_20210311_1658.py b/server/apps/supervision/migrations/0003_auto_20210311_1658.py new file mode 100644 index 0000000..9e2d490 --- /dev/null +++ b/server/apps/supervision/migrations/0003_auto_20210311_1658.py @@ -0,0 +1,56 @@ +# Generated by Django 3.0.5 on 2021-03-11 08:58 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('system', '0008_auto_20210311_0919'), + ('supervision', '0002_remove_content_belong_to'), + ] + + operations = [ + migrations.AddField( + model_name='record', + name='files', + field=models.ManyToManyField(to='system.File', verbose_name='关联文件'), + ), + migrations.AddField( + model_name='record', + name='updepart', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='system.Organization', verbose_name='上传部门'), + ), + migrations.AddField( + model_name='record', + name='upuser', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL, verbose_name='上传人'), + ), + migrations.CreateModel( + name='Task', + 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_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=100, verbose_name='名称')), + ('is_do', models.BooleanField(default=False, verbose_name='是否自创任务')), + ('complete_rate', models.IntegerField(default=0, verbose_name='完成度')), + ('belong_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='task_belong_to', to='system.Organization', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='task_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='task_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='record', + name='task', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='supervision.Task', verbose_name='关联任务'), + ), + ] diff --git a/server/apps/supervision/models.py b/server/apps/supervision/models.py index f7006c2..02dc8bb 100644 --- a/server/apps/supervision/models.py +++ b/server/apps/supervision/models.py @@ -1,6 +1,6 @@ from django.db import models from utils.model import BaseModel -from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict +from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict, File # Create your models here. class Content(CommonAModel): @@ -17,9 +17,11 @@ class Content(CommonAModel): verbose_name_plural = verbose_name -# class Task(CommonBModel): -# name = models.CharField('名称', max_length=100) -# pass +class Task(CommonBModel): + name = models.CharField('名称', max_length=100) + is_do = models.BooleanField('是否自创任务', default=False) + complete_rate = models.IntegerField('完成度', default=0) + class Record(BaseModel): @@ -27,10 +29,13 @@ class Record(BaseModel): 上报记录 """ 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) + task = models.ForeignKey(Task, verbose_name='关联任务', null=True, blank=True, on_delete=models.SET_NULL) + updepart = models.ForeignKey(Organization, verbose_name='上传部门', null=True, blank=True,on_delete=models.DO_NOTHING) + upuser = models.ForeignKey(User,verbose_name='上传人', null=True, blank=True,on_delete=models.DO_NOTHING) is_lock = models.BooleanField('是否锁住', default=False) is_yes = models.BooleanField('是否适用', default=True) note = models.TextField('说明') + files = models.ManyToManyField(File, verbose_name="关联文件") class Meta: verbose_name = '上报记录' verbose_name_plural = verbose_name diff --git a/server/apps/supervision/serializers.py b/server/apps/supervision/serializers.py index 40ed624..cf31580 100644 --- a/server/apps/supervision/serializers.py +++ b/server/apps/supervision/serializers.py @@ -18,4 +18,4 @@ class ContentSerializer(serializers.ModelSerializer): data = obj.type.name if obj.type.pid: data = obj.type.pid.name + '/' + data - return data + return data \ No newline at end of file diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index c354aa8..431a30e 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -25,4 +25,7 @@ class ContentViewSet(CreateModelAMixin, ModelViewSet): serializer_class = ContentSerializer search_fields = ['name', 'desc'] filterset_fields = ['type'] - ordering = ['type__sort', 'create_time'] \ No newline at end of file + ordering = ['type__sort', 'create_time'] + def paginate_queryset(self, queryset): + return None + \ No newline at end of file