diff --git a/hb_server/apps/wf/models.py b/hb_server/apps/wf/models.py index df02127..4ee2699 100644 --- a/hb_server/apps/wf/models.py +++ b/hb_server/apps/wf/models.py @@ -28,6 +28,17 @@ class State(BaseModel): (1, '初始状态'), (2, '结束状态') ) + type2_choices = ( + (0, '无处理人'), + (1, '个人'), + (2, '多人'), + (3, '部门'), + (4, '角色'), + (5, '变量'), + (6, '脚本'), + (7, '工单的字段'), + (8, '父工单的字段') + ) name = models.CharField('名称', max_length=50) workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='所属工作流') is_hidden = models.BooleanField('是否隐藏', default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)') diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index 4fb91c4..f0ff192 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -1,9 +1,14 @@ from rest_framework.serializers import ModelSerializer -from .models import Workflow +from .models import State, Workflow class WorkflowSerializer(ModelSerializer): class Meta: model = Workflow fields = '__all__' + +class StateSerializer(ModelSerializer): + class Meta: + model = State + fields = '__all__' diff --git a/hb_server/apps/wf/urls.py b/hb_server/apps/wf/urls.py index a4ead02..d61f55d 100644 --- a/hb_server/apps/wf/urls.py +++ b/hb_server/apps/wf/urls.py @@ -1,11 +1,12 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.wf.views import WorkflowViewSet +from apps.wf.views import StateViewSet, WorkflowViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter router = DefaultRouter() -router.register('workflow', WorkflowViewSet, basename='vendor') +router.register('workflow', WorkflowViewSet, basename='workflow') +router.register('state', StateViewSet, basename='workflowstate') urlpatterns = [ path('', include(router.urls)), ] diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index bbba501..bccd216 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -1,7 +1,10 @@ -from apps.wf.serializers import WorkflowSerializer +from rest_framework.response import Response +from rest_framework import serializers +from rest_framework.mixins import CreateModelMixin, RetrieveModelMixin, UpdateModelMixin +from apps.wf.serializers import StateSerializer, WorkflowSerializer from django.shortcuts import render -from rest_framework.viewsets import ModelViewSet - +from rest_framework.viewsets import GenericViewSet, ModelViewSet +from rest_framework.decorators import action from apps.wf.models import Workflow, State, Transition from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin @@ -15,4 +18,21 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet): search_fields = ['name', 'description'] filterset_fields = [] ordering_fields = ['create_time'] - ordering = ['-create_time'] \ No newline at end of file + ordering = ['-create_time'] + + @action(methods=['get'], detail=True, perms_map={'get':'workflow_update'}, pagination_class=None, serializer_class=StateSerializer) + def states(self, request, pk=None): + """ + 工作流下的状态节点 + """ + wf = self.get_object() + serializer = self.serializer_class(instance=State.objects.filter(workflow=wf), many=True) + return Response(serializer.data) + +class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, GenericViewSet): + perms_map = {'*':'*'} + queryset = State.objects.all() + serializer_class = StateSerializer + search_fields = ['name'] + filterset_fields = ['workflow'] + ordering = ['sort'] \ No newline at end of file