From 5bae28fba672e631a8b2e3bb68568697319f390e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 10:39:31 +0800 Subject: [PATCH 01/26] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=B6=88=E8=80=97?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/pm/serializers.py | 7 +++++++ hb_server/apps/pm/urls.py | 4 ++-- hb_server/apps/pm/views.py | 30 +++++++++++++++++++++++++++--- hb_server/utils/response.py | 2 +- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/hb_server/apps/pm/serializers.py b/hb_server/apps/pm/serializers.py index e3975c1..c9b3d02 100644 --- a/hb_server/apps/pm/serializers.py +++ b/hb_server/apps/pm/serializers.py @@ -15,3 +15,10 @@ class ProductionPlanSerializer(serializers.ModelSerializer): class Meta: model = ProductionPlan fields ='__all__' + +class ResourceCalSerializer(serializers.Serializer): + id = serializers.IntegerField(label='产品ID') + count = serializers.IntegerField(label='生产数量') + +class ResourceCalListSerializer(serializers.ListSerializer): + child = ResourceCalSerializer() \ No newline at end of file diff --git a/hb_server/apps/pm/urls.py b/hb_server/apps/pm/urls.py index 69e52f0..3f6db52 100644 --- a/hb_server/apps/pm/urls.py +++ b/hb_server/apps/pm/urls.py @@ -1,4 +1,4 @@ -from apps.pm.views import ProductionPlanViewSet +from apps.pm.views import ProductionPlanViewSet, ResourceViewSet from django.db.models import base from rest_framework import urlpatterns from django.urls import path, include @@ -6,7 +6,7 @@ from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('productionplan', ProductionPlanViewSet, basename='productionplan') - +router.register('resource', ResourceViewSet, basename='resource') urlpatterns = [ path('', include(router.urls)), ] diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index a0d28fa..b829aff 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -1,6 +1,7 @@ from rest_framework.views import APIView +from apps.mtm.models import InputMaterial from apps.system.mixins import CreateUpdateModelAMixin -from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer +from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer from rest_framework.mixins import CreateModelMixin, ListModelMixin from apps.pm.models import ProductionPlan from rest_framework.viewsets import GenericViewSet, ModelViewSet @@ -8,6 +9,7 @@ from django.shortcuts import render from apps.sam.models import Order from rest_framework.exceptions import APIException from rest_framework.response import Response +from rest_framework.decorators import action # Create your views here. def updateOrderPlanedCount(order): @@ -52,5 +54,27 @@ class ProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, CreateModel updateOrderPlanedCount(instance.order) return Response() -class ResourceCalculate(APIView): - pass \ No newline at end of file +class ResourceViewSet(GenericViewSet): + + perms_map = {'*': '*'} + + @action(methods=['post'], detail=False, perms_map={'get':'*'}, serializer_class=ResourceCalSerializer) + def cal(self, request, pk=None): + """ + 物料消耗计算 + """ + rdata = request.data + serializer = self.get_serializer(data=rdata, many=True) + serializer.is_valid(raise_exception=True) + res = [] + for i in rdata: + materials = InputMaterial.objects.filter(subproduction__product__id=i['id'], + subproduction__is_deleted=False, is_deleted=False, material__type__in=[3,4]).order_by('material__number') + for m in materials: + for x in res: + if x['id'] == m.material.id: + x['count'] = x['count'] + m.count*i['count'] + break + else: + res.append({'id':m.material.id, 'name':m.material.name, 'type':m.material.type, 'number':m.material.number, 'count':m.count*i['count']}) + return Response(res) diff --git a/hb_server/utils/response.py b/hb_server/utils/response.py index 4657b5e..f4379f4 100644 --- a/hb_server/utils/response.py +++ b/hb_server/utils/response.py @@ -56,7 +56,7 @@ class FitJSONRenderer(JSONRenderer): data = data[prefix] if isinstance(data, list): data = data[0] - response_body.msg = prefix + ":" + data # 取一部分放入msg,方便前端alert + response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert else: response_body.data = data renderer_context.get("response").status_code = 200 # 统一成200响应,用code区分 From 0e76ffe6b3a05412afdcb784e8e49fa3cede4070 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 10:42:35 +0800 Subject: [PATCH 02/26] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=B6=88=E8=80=97?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/pm/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index b829aff..f77a5a6 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -58,13 +58,13 @@ class ResourceViewSet(GenericViewSet): perms_map = {'*': '*'} - @action(methods=['post'], detail=False, perms_map={'get':'*'}, serializer_class=ResourceCalSerializer) + @action(methods=['post'], detail=False, perms_map={'get':'*'}, serializer_class=ResourceCalListSerializer) def cal(self, request, pk=None): """ 物料消耗计算 """ rdata = request.data - serializer = self.get_serializer(data=rdata, many=True) + serializer = self.get_serializer(data=rdata) serializer.is_valid(raise_exception=True) res = [] for i in rdata: From 243613bfdfd2224fe5e55ffd3c3b6ca6ce8a56cc Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 11:22:46 +0800 Subject: [PATCH 03/26] =?UTF-8?q?=E5=85=B3=E9=97=AD=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/wf/serializers.py | 5 ++++- hb_server/apps/wf/services.py | 13 ++++++++++++- hb_server/apps/wf/views.py | 20 ++++++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index 9075341..d560ad4 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -129,4 +129,7 @@ class TicketHandleSerializer(serializers.Serializer): suggestion = serializers.CharField(label="处理意见", required = False) class TicketRetreatSerializer(serializers.Serializer): - suggestion = serializers.CharField(label="撤回原因", required = False) \ No newline at end of file + suggestion = serializers.CharField(label="撤回原因", required = False) + +class TicketCloseSerializer(serializers.Serializer): + suggestion = serializers.CharField(label="关闭原因", required = False) \ No newline at end of file diff --git a/hb_server/apps/wf/services.py b/hb_server/apps/wf/services.py index c86fcb7..98730eb 100644 --- a/hb_server/apps/wf/services.py +++ b/hb_server/apps/wf/services.py @@ -32,7 +32,18 @@ class WfService(object): return wf_state_obj except: raise Exception('工作流状态配置错误') - + + @staticmethod + def get_workflow_end_state(workflow:Workflow): + """ + 获取工作流结束状态 + """ + try: + wf_state_obj = State.objects.get(workflow=workflow, type=State.STATE_TYPE_END, is_deleted=False) + return wf_state_obj + except: + raise Exception('工作流状态配置错误') + @staticmethod def get_workflow_custom_fields(workflow:Workflow): """ diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index a1aab22..bf733e6 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -3,7 +3,7 @@ from django.core.exceptions import AppRegistryNotReady from rest_framework.response import Response from rest_framework import serializers from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin -from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketFlowSimpleSerializer, TicketHandleSerializer, TicketRetreatSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer, TicketListSerializer, TicketDetailSerializer +from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketCloseSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketFlowSimpleSerializer, TicketHandleSerializer, TicketRetreatSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer, TicketListSerializer, TicketDetailSerializer from django.shortcuts import get_object_or_404, render from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.decorators import action, api_view @@ -318,10 +318,26 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin 加签 """ + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketCloseSerializer) def close(self, request, pk=None): """ - 关闭工单(超级管理员或者创建人在初始状态) + 关闭工单(创建人在初始状态) """ + ticket = self.get_object() + if ticket.state.type == State.STATE_TYPE_START and ticket.create_by==request.user: + end_state = WfService.get_workflow_end_state(ticket.workflow) + ticket.state = end_state + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.participant = request.user.id + ticket.act_state = Ticket.TICKET_ACT_STATE_CLOSED + ticket.save() + # 更新流转记录 + suggestion = request.data.get('suggestion', '') # 关闭原因 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CLOSE, + participant=request.user, transition=None) + else: + raise APIException('工单不可关闭') class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): From 4913162ff80bdd8b39fc09247f9a636b4ae0ebc3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 13:22:26 +0800 Subject: [PATCH 04/26] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=B6=88=E8=80=97?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/pm/views.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index f77a5a6..81093ac 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -66,15 +66,20 @@ class ResourceViewSet(GenericViewSet): rdata = request.data serializer = self.get_serializer(data=rdata) serializer.is_valid(raise_exception=True) + res_d_list = [] res = [] for i in rdata: materials = InputMaterial.objects.filter(subproduction__product__id=i['id'], - subproduction__is_deleted=False, is_deleted=False, material__type__in=[3,4]).order_by('material__number') - for m in materials: - for x in res: - if x['id'] == m.material.id: - x['count'] = x['count'] + m.count*i['count'] - break + subproduction__is_deleted=False, is_deleted=False, material__type__in=[3,4]).order_by('material__number')\ + .values('material__id', 'material__name', 'material__number', 'material__type', 'count', 'material__count') + l_m = list(materials) + for m in l_m: + if m['material__id'] in res_d_list: + index = res_d_list.index(m['material__id']) + res[index]['count'] = res[index]['count'] + m['count']*i['count'] else: - res.append({'id':m.material.id, 'name':m.material.name, 'type':m.material.type, 'number':m.material.number, 'count':m.count*i['count']}) + res_d_list.append(m['material__id']) + res.append({'id':m['material__id'], 'name':m['material__name'], + 'type':m['material__type'], 'number':m['material__number'], + 'count':m['count']*i['count'], 'inv_count':m['material__count']}) return Response(res) From 660ef8ec11736573ba622bf8c0c112a4c2d5addb Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 14:26:09 +0800 Subject: [PATCH 05/26] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/pm/views.py | 1 - hb_server/apps/wf/views.py | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index 81093ac..a31f813 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -57,7 +57,6 @@ class ProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, CreateModel class ResourceViewSet(GenericViewSet): perms_map = {'*': '*'} - @action(methods=['post'], detail=False, perms_map={'get':'*'}, serializer_class=ResourceCalListSerializer) def cal(self, request, pk=None): """ diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index bf733e6..832c35f 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -1,3 +1,4 @@ +from apps.system.models import User from apps.wf.filters import TicketFilterSet from django.core.exceptions import AppRegistryNotReady from rest_framework.response import Response @@ -11,6 +12,7 @@ from apps.wf.models import CustomField, Ticket, Workflow, State, Transition, Tic from apps.system.mixins import CreateUpdateCustomMixin, CreateUpdateModelAMixin, OptimizationMixin from apps.wf.services import WfService from rest_framework.exceptions import APIException, PermissionDenied +from rest_framework import status # Create your views here. class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet): @@ -317,6 +319,14 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin """ 加签 """ + ticket = self.get_object() + # data = request.data + # add_user = User.objects.get(pk=data[]) + # ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + # ticket.participant = None + # ticket.act_state = Ticket.TICKET_ACT_STATE_CLOSED + # ticket.save() + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketCloseSerializer) def close(self, request, pk=None): @@ -327,8 +337,8 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin if ticket.state.type == State.STATE_TYPE_START and ticket.create_by==request.user: end_state = WfService.get_workflow_end_state(ticket.workflow) ticket.state = end_state - ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL - ticket.participant = request.user.id + ticket.participant_type = 0 + ticket.participant = None ticket.act_state = Ticket.TICKET_ACT_STATE_CLOSED ticket.save() # 更新流转记录 @@ -336,8 +346,9 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CLOSE, participant=request.user, transition=None) + return Response() else: - raise APIException('工单不可关闭') + return Response('工单不可关闭', status=status.HTTP_400_BAD_REQUEST) class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): From 9d2f2bea6cb1cdd01f03c9971d7e2e74747d8462 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 14:42:24 +0800 Subject: [PATCH 06/26] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=85=B3=E9=97=ADbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/pm/views.py | 16 +++++++++++++++- hb_server/apps/wf/services.py | 2 +- hb_server/apps/wf/views.py | 4 ++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index a31f813..af0e16f 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -1,5 +1,5 @@ from rest_framework.views import APIView -from apps.mtm.models import InputMaterial +from apps.mtm.models import InputMaterial, Step, UsedStep from apps.system.mixins import CreateUpdateModelAMixin from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer from rest_framework.mixins import CreateModelMixin, ListModelMixin @@ -82,3 +82,17 @@ class ResourceViewSet(GenericViewSet): 'type':m['material__type'], 'number':m['material__number'], 'count':m['count']*i['count'], 'inv_count':m['material__count']}) return Response(res) + + @action(methods=['post'], detail=False, perms_map={'get':'*'}, serializer_class=ResourceCalListSerializer) + def cal_equip(self, request, pk=None): + """ + 设备状态查看 + """ + rdata = request.data + serializer = self.get_serializer(data=rdata) + serializer.is_valid(raise_exception=True) + res_d_list = [] + res = [] + return Response(res) + + diff --git a/hb_server/apps/wf/services.py b/hb_server/apps/wf/services.py index 98730eb..a6ec576 100644 --- a/hb_server/apps/wf/services.py +++ b/hb_server/apps/wf/services.py @@ -135,7 +135,7 @@ class WfService(object): """ 到达结束状态 """ - return dict(destination_participant_type=State.PARTICIPANT_TYPE_PERSONAL, + return dict(destination_participant_type=0, destination_participant=0, multi_all_person={}) multi_all_person_dict = {} diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index 832c35f..d7939f1 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -320,7 +320,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin 加签 """ ticket = self.get_object() - # data = request.data + data = request.data # add_user = User.objects.get(pk=data[]) # ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL # ticket.participant = None @@ -338,7 +338,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin end_state = WfService.get_workflow_end_state(ticket.workflow) ticket.state = end_state ticket.participant_type = 0 - ticket.participant = None + ticket.participant = 0 ticket.act_state = Ticket.TICKET_ACT_STATE_CLOSED ticket.save() # 更新流转记录 From ecd4192109a9bc1dd913d1c121ebf395578a893c Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 15:18:48 +0800 Subject: [PATCH 07/26] =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/mtm/models.py | 2 +- hb_server/apps/pm/serializers.py | 2 +- hb_server/apps/pm/views.py | 15 +++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 82b39c7..105cd10 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -64,7 +64,7 @@ class Step(CommonAModel): number = models.CharField('步骤编号', max_length=100, null=True, blank=True) instruction_content = models.TextField('相应操作指导', null=True, blank=True) sort = models.IntegerField('排序号', default=1) - equipments = models.ManyToManyField(Equipment, verbose_name='使用设备') + equipments = models.ManyToManyField(Equipment, verbose_name='使用设备', related_name='step_equips') class Meta: verbose_name = '工序步骤' diff --git a/hb_server/apps/pm/serializers.py b/hb_server/apps/pm/serializers.py index c9b3d02..7542527 100644 --- a/hb_server/apps/pm/serializers.py +++ b/hb_server/apps/pm/serializers.py @@ -21,4 +21,4 @@ class ResourceCalSerializer(serializers.Serializer): count = serializers.IntegerField(label='生产数量') class ResourceCalListSerializer(serializers.ListSerializer): - child = ResourceCalSerializer() \ No newline at end of file + child = ResourceCalSerializer() diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index af0e16f..aa06248 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -1,5 +1,7 @@ from rest_framework.views import APIView -from apps.mtm.models import InputMaterial, Step, UsedStep +from apps.em.models import Equipment +from apps.em.serializers import EquipmentSerializer +from apps.mtm.models import InputMaterial, Step, SubProduction, UsedStep from apps.system.mixins import CreateUpdateModelAMixin from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer from rest_framework.mixins import CreateModelMixin, ListModelMixin @@ -91,8 +93,13 @@ class ResourceViewSet(GenericViewSet): rdata = request.data serializer = self.get_serializer(data=rdata) serializer.is_valid(raise_exception=True) - res_d_list = [] - res = [] - return Response(res) + rdata_l = [] + for i in rdata: + rdata_l.append(i['id']) + subproductions = SubProduction.objects.filter(product__id__in=rdata_l, is_deleted=False) + steps = Step.objects.filter(usedsteps__is_deleted=False, usedsteps__subproduction__in=subproductions) + equips = Equipment.objects.filter(step_equips__in=steps, is_deleted=False) + serializer = EquipmentSerializer(instance=equips, many=True) + return Response(serializer.data) From 961754d8cad6ba4566b9081796793dffbfd9b593 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 15:41:01 +0800 Subject: [PATCH 08/26] =?UTF-8?q?=E5=8A=A0=E7=AD=BE=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/em/serializers.py | 1 + hb_server/apps/wf/serializers.py | 6 +++++- hb_server/apps/wf/views.py | 21 ++++++++++++++------- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/hb_server/apps/em/serializers.py b/hb_server/apps/em/serializers.py index 55d0674..677383b 100644 --- a/hb_server/apps/em/serializers.py +++ b/hb_server/apps/em/serializers.py @@ -23,6 +23,7 @@ class EquipmentSerializer(ModelSerializer): def get_step_(self, obj): return Step.objects.filter(equipments=obj).values('id', 'name', 'number') + class EquipmentSimpleSerializer(ModelSerializer): class Meta: model = Equipment diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index d560ad4..6748d74 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -132,4 +132,8 @@ class TicketRetreatSerializer(serializers.Serializer): suggestion = serializers.CharField(label="撤回原因", required = False) class TicketCloseSerializer(serializers.Serializer): - suggestion = serializers.CharField(label="关闭原因", required = False) \ No newline at end of file + suggestion = serializers.CharField(label="关闭原因", required = False) + +class TicketAddNodeSerializer(serializers.Serializer): + suggestion = serializers.CharField(label="加签说明", required = False) + user = serializers.IntegerField(label='加签人') \ No newline at end of file diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index d7939f1..35c980d 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -4,7 +4,7 @@ from django.core.exceptions import AppRegistryNotReady from rest_framework.response import Response from rest_framework import serializers from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin -from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketCloseSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketFlowSimpleSerializer, TicketHandleSerializer, TicketRetreatSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer, TicketListSerializer, TicketDetailSerializer +from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketAddNodeSerializer, TicketCloseSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketFlowSimpleSerializer, TicketHandleSerializer, TicketRetreatSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer, TicketListSerializer, TicketDetailSerializer from django.shortcuts import get_object_or_404, render from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.decorators import action, api_view @@ -314,18 +314,25 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin participant=request.user, transition=None) return Response() - @action(methods=['post'], detail=True, perms_map={'post':'*'}) + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketAddNodeSerializer) def add_node(self, request, pk=None): """ 加签 """ ticket = self.get_object() data = request.data - # add_user = User.objects.get(pk=data[]) - # ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL - # ticket.participant = None - # ticket.act_state = Ticket.TICKET_ACT_STATE_CLOSED - # ticket.save() + add_user = User.objects.get(pk=data['user']) + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.participant = add_user.id + ticket.in_add_node = True + ticket.add_node_man = add_user + ticket.save() + # 更新流转记录 + suggestion = request.data.get('suggestion', '') # 加签说明 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_ADD_NODE, + participant=request.user, transition=None) + return Response() @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketCloseSerializer) From 59551664dbdcd39c043010572d4d75b74a81bab9 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 14 Oct 2021 09:00:21 +0800 Subject: [PATCH 09/26] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E9=80=80=E5=9B=9E?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/wf/models.py | 2 +- hb_server/apps/wf/views.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hb_server/apps/wf/models.py b/hb_server/apps/wf/models.py index 4878086..4540eb0 100644 --- a/hb_server/apps/wf/models.py +++ b/hb_server/apps/wf/models.py @@ -201,7 +201,7 @@ class TicketFlow(BaseModel): 工单流转日志 """ ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单', related_name='ticketflow_ticket') - transition = models.ForeignKey(Transition, verbose_name='流转id', help_text='与worklow.Transition关联, 为0时表示认为干预的操作', on_delete=models.CASCADE, null=True, blank=True) + transition = models.ForeignKey(Transition, verbose_name='流转id', help_text='与worklow.Transition关联, 为空时表示认为干预的操作', on_delete=models.CASCADE, null=True, blank=True) suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True) participant_type = models.IntegerField('处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人', choices=State.state_participanttype_choices) participant = models.ForeignKey(User, verbose_name='处理人', on_delete=models.SET_NULL, null=True, blank=True, related_name='ticketflow_participant') diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index 35c980d..ab92981 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -227,7 +227,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin ticket.act_state = Ticket.TICKET_ACT_STATE_ONGOING if transition.attribute_type == Transition.TRANSITION_ATTRIBUTE_TYPE_REFUSE: - transition.act_state = Ticket.TICKET_ACT_STATE_BACK + ticket.act_state = Ticket.TICKET_ACT_STATE_BACK # 只更新必填和可选的字段 for key, value in ticket.state.state_fields.items(): From a8a8b2431ac0e3791fbd0688c1ff3ae6d6c620b5 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 14 Oct 2021 09:03:18 +0800 Subject: [PATCH 10/26] =?UTF-8?q?=E5=8A=A0=E7=AD=BE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/wf/serializers.py | 2 +- hb_server/apps/wf/views.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index 6748d74..ca8f9c6 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -136,4 +136,4 @@ class TicketCloseSerializer(serializers.Serializer): class TicketAddNodeSerializer(serializers.Serializer): suggestion = serializers.CharField(label="加签说明", required = False) - user = serializers.IntegerField(label='加签人') \ No newline at end of file + add_node_man = serializers.IntegerField(label='加签人') \ No newline at end of file diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index ab92981..f2eba4a 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -321,7 +321,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin """ ticket = self.get_object() data = request.data - add_user = User.objects.get(pk=data['user']) + add_user = User.objects.get(pk=data['add_node_man']) ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL ticket.participant = add_user.id ticket.in_add_node = True @@ -333,6 +333,8 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_ADD_NODE, participant=request.user, transition=None) return Response() + + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketCloseSerializer) From f6dab8e2f35277487ec35063ed13f55c9e08c36e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 14 Oct 2021 09:16:00 +0800 Subject: [PATCH 11/26] =?UTF-8?q?=E5=8A=A0=E7=AD=BE=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/wf/serializers.py | 5 ++++- hb_server/apps/wf/views.py | 22 +++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index ca8f9c6..b9256bd 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -136,4 +136,7 @@ class TicketCloseSerializer(serializers.Serializer): class TicketAddNodeSerializer(serializers.Serializer): suggestion = serializers.CharField(label="加签说明", required = False) - add_node_man = serializers.IntegerField(label='加签人') \ No newline at end of file + add_node_man = serializers.IntegerField(label='加签人') + +class TicketAddNodeEndSerializer(serializers.Serializer): + suggestion = serializers.CharField(label="加签意见", required = False) \ No newline at end of file diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index f2eba4a..ddc9bc2 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -4,7 +4,7 @@ from django.core.exceptions import AppRegistryNotReady from rest_framework.response import Response from rest_framework import serializers from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin -from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketAddNodeSerializer, TicketCloseSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketFlowSimpleSerializer, TicketHandleSerializer, TicketRetreatSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer, TicketListSerializer, TicketDetailSerializer +from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketAddNodeEndSerializer, TicketAddNodeSerializer, TicketCloseSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketFlowSimpleSerializer, TicketHandleSerializer, TicketRetreatSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer, TicketListSerializer, TicketDetailSerializer from django.shortcuts import get_object_or_404, render from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.decorators import action, api_view @@ -325,7 +325,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL ticket.participant = add_user.id ticket.in_add_node = True - ticket.add_node_man = add_user + ticket.add_node_man = request.user ticket.save() # 更新流转记录 suggestion = request.data.get('suggestion', '') # 加签说明 @@ -334,8 +334,24 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin participant=request.user, transition=None) return Response() + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketAddNodeEndSerializer) + def add_node_end(self, request, pk=None): + """ + 加签完成 + """ + ticket = self.get_object() + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.in_add_node = False + ticket.add_node_man = None + ticket.participant = ticket.add_node_man.id + ticket.save() + # 更新流转记录 + suggestion = request.data.get('suggestion', '') # 加签意见 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_ADD_NODE_END, + participant=request.user, transition=None) + return Response() - @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketCloseSerializer) def close(self, request, pk=None): From 465b33b0d04d0cbb3e3a147c935f0b1b534332cf Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 14 Oct 2021 09:39:57 +0800 Subject: [PATCH 12/26] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=88=86=E8=A7=A3?= =?UTF-8?q?=E9=9A=B6=E5=B1=9E=E5=B7=A5=E5=BA=8F=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/mtm/models.py | 1 + hb_server/apps/mtm/serializers.py | 5 +++-- hb_server/apps/mtm/views.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 105cd10..62f983e 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -134,6 +134,7 @@ class SubProduction(CommonAModel): """ name = models.CharField('命名', max_length=50, null=True, blank=True) product = models.ForeignKey(Material, verbose_name='产品', on_delete=models.CASCADE) + process = models.ForeignKey(Process, verbose_name='隶属大工序', on_delete=models.CASCADE, related_name='subproduction_process') sort = models.IntegerField('排序号', default=1) class Meta: diff --git a/hb_server/apps/mtm/serializers.py b/hb_server/apps/mtm/serializers.py index 7cd8fe5..5f0d43a 100644 --- a/hb_server/apps/mtm/serializers.py +++ b/hb_server/apps/mtm/serializers.py @@ -17,8 +17,9 @@ class MaterialDetailSerializer(serializers.ModelSerializer): fields = '__all__' def get_processes_(self, obj): - steps = UsedStep.objects.filter(subproduction__product=obj).values_list('step', flat=True) - objs = Process.objects.filter(step_process__id__in=steps).distinct().order_by('number') + # steps = UsedStep.objects.filter(subproduction__product=obj).values_list('step', flat=True) + # objs = Process.objects.filter(step_process__id__in=steps).distinct().order_by('number') + objs = Process.objects.filter(subproduction_process__product=obj, subproduction_process__is_deleted=False, is_deleted=False).order_by('number') return ProcessSimpleSerializer(instance=objs, many=True).data diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index 0e1c44f..3a4ce4c 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -75,7 +75,7 @@ class SubProductionViewSet(CreateUpdateModelAMixin, ModelViewSet): """ perms_map={'*':'*'} queryset = SubProduction.objects.all() - filterset_fields = ['product'] + filterset_fields = ['product', 'process'] search_fields = ['name'] serializer_class = SubProductionSerializer ordering = ['sort'] From 3aac6ed8b02e1bbff493731cd87cf1617ecf2872 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 14 Oct 2021 09:47:30 +0800 Subject: [PATCH 13/26] =?UTF-8?q?=E9=9A=B6=E5=B1=9E=E5=A4=A7=E5=B7=A5?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mtm/migrations/0022_auto_20211014_0944.py | 26 +++++++++++++++++++ hb_server/apps/mtm/serializers.py | 1 + hb_server/apps/mtm/views.py | 2 +- .../0013_alter_ticketflow_transition.py | 19 ++++++++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 hb_server/apps/mtm/migrations/0022_auto_20211014_0944.py create mode 100644 hb_server/apps/wf/migrations/0013_alter_ticketflow_transition.py diff --git a/hb_server/apps/mtm/migrations/0022_auto_20211014_0944.py b/hb_server/apps/mtm/migrations/0022_auto_20211014_0944.py new file mode 100644 index 0000000..4a6f086 --- /dev/null +++ b/hb_server/apps/mtm/migrations/0022_auto_20211014_0944.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.6 on 2021-10-14 01:44 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('em', '0009_auto_20210916_1108'), + ('mtm', '0021_auto_20211013_0856'), + ] + + operations = [ + migrations.AddField( + model_name='subproduction', + name='process', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='subproduction_process', to='mtm.process', verbose_name='隶属大工序'), + preserve_default=False, + ), + migrations.AlterField( + model_name='step', + name='equipments', + field=models.ManyToManyField(related_name='step_equips', to='em.Equipment', verbose_name='使用设备'), + ), + ] diff --git a/hb_server/apps/mtm/serializers.py b/hb_server/apps/mtm/serializers.py index 5f0d43a..5da68a4 100644 --- a/hb_server/apps/mtm/serializers.py +++ b/hb_server/apps/mtm/serializers.py @@ -62,6 +62,7 @@ class StepDetailSerializer(serializers.ModelSerializer): return queryset class SubProductionSerializer(serializers.ModelSerializer): + process_ = ProcessSimpleSerializer(source='process', read_only=True) class Meta: model = SubProduction fields = '__all__' diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index 3a4ce4c..22378ba 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -74,7 +74,7 @@ class SubProductionViewSet(CreateUpdateModelAMixin, ModelViewSet): 产品生产分解增删改查 """ perms_map={'*':'*'} - queryset = SubProduction.objects.all() + queryset = SubProduction.objects.select_related('process').all() filterset_fields = ['product', 'process'] search_fields = ['name'] serializer_class = SubProductionSerializer diff --git a/hb_server/apps/wf/migrations/0013_alter_ticketflow_transition.py b/hb_server/apps/wf/migrations/0013_alter_ticketflow_transition.py new file mode 100644 index 0000000..4b3fc80 --- /dev/null +++ b/hb_server/apps/wf/migrations/0013_alter_ticketflow_transition.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.6 on 2021-10-14 01:44 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wf', '0012_ticketflow_intervene_type'), + ] + + operations = [ + migrations.AlterField( + model_name='ticketflow', + name='transition', + field=models.ForeignKey(blank=True, help_text='与worklow.Transition关联, 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.transition', verbose_name='流转id'), + ), + ] From 93c92f0dc298c31c76f01dca1146bb046d06ca33 Mon Sep 17 00:00:00 2001 From: shilixia <2309368887@qq.com> Date: Thu, 14 Oct 2021 10:21:35 +0800 Subject: [PATCH 14/26] shengchanziyuanoeizhi --- hb_client/src/api/pm.js | 17 +- hb_client/src/views/mtm/material.vue | 9 +- hb_client/src/views/mtm/productprocess.vue | 76 ++++--- hb_client/src/views/pm/plan.vue | 2 +- hb_client/src/views/pm/resources.vue | 225 ++++++++++----------- 5 files changed, 173 insertions(+), 156 deletions(-) diff --git a/hb_client/src/api/pm.js b/hb_client/src/api/pm.js index 4f3365d..7386fec 100644 --- a/hb_client/src/api/pm.js +++ b/hb_client/src/api/pm.js @@ -15,4 +15,19 @@ export function createProductionplan(data) { data }) } - +//计算物料配置 +export function createresource(data) { + return request({ + url: '/pm/resource/cal/', + method: 'post', + data + }) +} +//产品对应的设备 +export function createequip(data) { + return request({ + url: '/pm/resource/cal_equip/', + method: 'post', + data + }) +} diff --git a/hb_client/src/views/mtm/material.vue b/hb_client/src/views/mtm/material.vue index 3f5cc05..7ad836a 100644 --- a/hb_client/src/views/mtm/material.vue +++ b/hb_client/src/views/mtm/material.vue @@ -144,14 +144,7 @@ - - - + diff --git a/hb_client/src/views/mtm/productprocess.vue b/hb_client/src/views/mtm/productprocess.vue index 29734fe..71f5e65 100644 --- a/hb_client/src/views/mtm/productprocess.vue +++ b/hb_client/src/views/mtm/productprocess.vue @@ -80,13 +80,17 @@ border fit stripe + highlight-current-row @current-change="handlespChange" > - + - + + + + @@ -128,6 +132,17 @@ + + + + + + + - - - - + + - + - + + + @@ -305,15 +320,9 @@ > - - - - + + - + + +
@@ -507,11 +522,12 @@ import { getMaterialList,getMaterial,getInputmaterialList,createInputmaterial,updateInputmaterial ,deleteInputmaterial,getOutputmaterialList,createOutputmaterial,updateOutputmaterial,deleteOutputmaterial, getUsedstepList,createUsedstep,deleteUsedstep,getStepList,gettechdocList,createtechdoc,updatetechdoc,deletetechdoc -,getsubproducationList,createsubproducation,updatesubproducation,deletesubproducation } from "@/api/mtm"; +,getsubproducationList,createsubproducation,updatesubproducation,deletesubproducation,getProcessList } from "@/api/mtm"; import { quillEditor } from 'vue-quill-editor' import 'quill/dist/quill.core.css' import 'quill/dist/quill.snow.css' import 'quill/dist/quill.bubble.css' + import { upUrl, upHeaders } from "@/api/file"; import checkPermission from "@/utils/permission"; import { genTree } from "@/utils"; @@ -529,7 +545,7 @@ const defaulttechdoc = { }; const defaultsubproducation = { - + }; export default { @@ -541,6 +557,7 @@ export default { subproducationData:"", inputtableData:"", editorOption: {} , + processOptions:[], techdoc: defaulttechdoc, subproducation:defaultsubproducation, inputmaterial: defaultinputmaterial, @@ -625,7 +642,12 @@ export default { this.listLoading = false; }); }, - + //工序清单 + getProcessList() { + getProcessList().then((res) => { + this.processOptions = genTree(res.data.results); + }); + }, //获取产品,工艺 getMaterial(){ getMaterial(this.product).then((response) => { @@ -639,11 +661,14 @@ export default { handleCurrentChange(row){ this.product=row.id; this.getMaterial(); + this.getProcessList(); this.getsubproducationList(); + }, //点击产品分解弹出输入、输出物料,子工序,技术文件 handlespChange(row){ this.subproduction = row.id; + this.processes = row.process; this.getmaterialList();//物料列表 this.getInputmaterialLists();//输入物料 @@ -911,7 +936,7 @@ export default { }, getstepList() { - + this.listQuerystep.process=this.processes; getStepList(this.listQuerystep).then((response) => { if (response.data) { this.stepoptions = genTree(response.data); @@ -1071,3 +1096,4 @@ export default { }, }; + diff --git a/hb_client/src/views/pm/plan.vue b/hb_client/src/views/pm/plan.vue index 98a559d..2f2fa4d 100644 --- a/hb_client/src/views/pm/plan.vue +++ b/hb_client/src/views/pm/plan.vue @@ -159,7 +159,7 @@ - + diff --git a/hb_client/src/views/pm/resources.vue b/hb_client/src/views/pm/resources.vue index 21af9ad..ce4beb9 100644 --- a/hb_client/src/views/pm/resources.vue +++ b/hb_client/src/views/pm/resources.vue @@ -7,60 +7,60 @@ 合同订单列表
+ 计算物料 + @selection-change="handleSelectionChange"> + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + - + + + + + + + - - - - - - - - - - - - - + - - + + - - - - - - - - - + - + @@ -154,59 +121,30 @@ + - - + + - - + + - - + + - - - - - - - - - - - + + - - - - - - - - - + \ No newline at end of file diff --git a/hb_client/src/views/sam/order.vue b/hb_client/src/views/sam/order.vue index 79e731b..175621e 100644 --- a/hb_client/src/views/sam/order.vue +++ b/hb_client/src/views/sam/order.vue @@ -74,7 +74,7 @@