diff --git a/client/src/api/task.js b/client/src/api/task.js
index dc8eec0..f59f436 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',
@@ -42,3 +40,11 @@ export function deleteTask(id, data) {
})
}
+export function inittask(id, data) {
+ return request({
+ url: `/supervision/task/${id}/init/`,
+ method: 'post',
+ data
+ })
+}
+
diff --git a/client/src/main.js b/client/src/main.js
index 6021d6d..42a48f8 100644
--- a/client/src/main.js
+++ b/client/src/main.js
@@ -33,10 +33,10 @@ if (process.env.NODE_ENV === 'production') {
Vue.use(ElementUI, { size: 'medium' })
Vue.config.productionTip = false
-Vue.prototype.openLoading = function() {
+Vue.prototype.openLoading = function(msg) {
const loading = this.$loading({ // 声明一个loading对象
lock: true, // 是否锁屏
- text: '正在加载...', // 加载动画的文字
+ text: msg, // 加载动画的文字
body: true,
})
setTimeout(function () { // 设定定时器,超时5S后自动关闭遮罩层,避免请求失败时,遮罩层一直存在的问题
diff --git a/client/src/router/index.js b/client/src/router/index.js
index a4aa91f..e82c31b 100644
--- a/client/src/router/index.js
+++ b/client/src/router/index.js
@@ -110,7 +110,7 @@ export const asyncRoutes = [
{
path: '/supervision',
component: Layout,
- redirect: '/supervision/content',
+ redirect: '/supervision/task',
name:'Supervision',
meta: { title: '日常监督', icon: 'table', perms: ['supervision_manage'] },
children: [
@@ -118,13 +118,13 @@ 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',
- name: 'STask',
+ name: 'Task',
component: () => import('@/views/supervision/task.vue'),
- meta: { title: '报送任务', icon: 'guide', perms: ['task_manage'] }
+ meta: { title: '报送任务', icon: 'guide', perms: ['task_view'] }
},
{
path: 'record',
@@ -139,6 +139,14 @@ export const asyncRoutes = [
component: () => import('@/views/supervision/report.vue'),
meta: { title: '材料报送', icon: 'guide', perms: ['report_manage'] }
}
+ ,
+ {
+ path: 'taskdo/:id',
+ name: 'Taskdo',
+ component: () => import('@/views/supervision/taskdo.vue'),
+ meta: { title: '报送任务执行', perms: ['task_view'] },
+ hidden: true
+ },
]
},
diff --git a/client/src/styles/index.scss b/client/src/styles/index.scss
index 5a9eff0..884d326 100644
--- a/client/src/styles/index.scss
+++ b/client/src/styles/index.scss
@@ -75,6 +75,7 @@ div:focus {
border-radius: 0px;
overflow: hidden;
}
+
.el-card__body {
padding: 6px;
}
@@ -90,18 +91,14 @@ div:focus {
.el-dialog__body {
padding: 8px 12px;
}
-// .el-form-item--medium .el-form-item__label {
-// line-height: 16px;
-// }
+
.el-form--label-top .el-form-item__label {
line-height: 16px;
}
.el-button+.el-button {
margin-left: 1px;
}
-.el-button {
- border-radius: 0px;
-}
+
.el-table--medium td, .el-table--medium th {
@@ -111,9 +108,4 @@ div:focus {
margin-bottom: 16px;
}
-.el-card__body {
- padding: 10px;
-}
-.el-card__header {
- padding: 10px;
-}
+
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 @@
-
+
新增
-
+
@@ -31,8 +31,7 @@
是
- 否
+
@@ -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 82aee5d..136b10a 100644
--- a/server/apps/supervision/serializers.py
+++ b/server/apps/supervision/serializers.py
@@ -1,6 +1,8 @@
+from django.db.models.base import Model
from rest_framework import serializers
from .models import *
-from apps.system.serializers import OrganizationSerializer,FileListSerializer
+from apps.system.serializers import OrganizationSerializer,FileListSerializer,UserSimpleSerializer,OrganizationSimpleSerializer
+
class ContentSerializer(serializers.ModelSerializer):
type_ = serializers.SerializerMethodField()
@@ -27,12 +29,12 @@ class ContentListSerializer(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']
+ fields = ['name', 'is_self', 'end_date', 'note', 'complete_rate', 'state', 'id']
class RecordSerializer(serializers.ModelSerializer):
files_ = FileListSerializer(source='files', many=True, read_only=True)
task_ = TaskListSerializer(source='task')
@@ -42,5 +44,9 @@ class RecordSerializer(serializers.ModelSerializer):
fields = ('id', 'up_date', 'up_user', 'end_date', 'state',
'is_yes', 'note', 'noteb','content','content_','task_','task', 'files', 'files_')
-
-
\ No newline at end of file
+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__'
diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py
index 2d481a5..d9039b7 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'})
def createself(self, request):
@@ -46,6 +48,32 @@ 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)
class RecordViewSet(CreateUpdateCustomMixin,ModelViewSet):
perms_map = {'get': '*', 'post': 'record_create',
'put': 'record_update', 'delete': 'record_delete'}
@@ -53,3 +81,5 @@ class RecordViewSet(CreateUpdateCustomMixin,ModelViewSet):
serializer_class = RecordSerializer
search_fields = ['name']
ordering = ['-create_time']
+
+
diff --git a/server/apps/system/serializers.py b/server/apps/system/serializers.py
index 7e869f2..b4ae652 100644
--- a/server/apps/system/serializers.py
+++ b/server/apps/system/serializers.py
@@ -138,3 +138,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']