Selaa lähdekoodia

WMS接口对接

flower_mr 1 kuukausi sitten
vanhempi
commit
ae5d078484
29 muutettua tiedostoa jossa 1053 lisäystä ja 1511 poistoa
  1. BIN
      bound/__pycache__/models.cpython-38.pyc
  2. 18 0
      bound/migrations/0006_boundbatchmodel_sourced_number.py
  3. 18 0
      bound/migrations/0007_alter_outbounddetailmodel_detail_code.py
  4. BIN
      bound/migrations/__pycache__/0006_boundbatchmodel_sourced_number.cpython-38.pyc
  5. BIN
      bound/migrations/__pycache__/0007_alter_outbounddetailmodel_detail_code.cpython-38.pyc
  6. 3 2
      bound/models.py
  7. 3 2
      data_base/test_erp.py
  8. BIN
      db.sqlite3
  9. BIN
      erp/__pycache__/models.cpython-38.pyc
  10. BIN
      erp/__pycache__/parsers.cpython-38.pyc
  11. BIN
      erp/__pycache__/serializers.cpython-38.pyc
  12. BIN
      erp/__pycache__/views.cpython-38.pyc
  13. 23 0
      erp/migrations/0010_alter_outboundbill_creater_and_more.py
  14. 18 0
      erp/migrations/0011_alter_outboundbill_billid.py
  15. 18 0
      erp/migrations/0012_alter_inboundbill_billid.py
  16. 23 0
      erp/migrations/0013_alter_materialdetail_entryids_and_more.py
  17. BIN
      erp/migrations/__pycache__/0010_alter_outboundbill_creater_and_more.cpython-38.pyc
  18. BIN
      erp/migrations/__pycache__/0011_alter_outboundbill_billid.cpython-38.pyc
  19. BIN
      erp/migrations/__pycache__/0012_alter_inboundbill_billid.cpython-38.pyc
  20. BIN
      erp/migrations/__pycache__/0013_alter_materialdetail_entryids_and_more.cpython-38.pyc
  21. 6 6
      erp/models.py
  22. 12 0
      erp/parsers.py
  23. 6 3
      erp/serializers.py
  24. 48 30
      erp/views.py
  25. 221 1463
      logs/boundBill.log
  26. 309 0
      logs/error.log
  27. 322 0
      logs/server.log
  28. 1 1
      templates/src/boot/axios_request.js
  29. 4 4
      templates/src/pages/erp/erpdn.vue

BIN
bound/__pycache__/models.cpython-38.pyc


+ 18 - 0
bound/migrations/0006_boundbatchmodel_sourced_number.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-05-07 18:00
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('bound', '0005_outbatchmodel_relate_material'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='boundbatchmodel',
+            name='sourced_number',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='来源批次号'),
+        ),
+    ]

+ 18 - 0
bound/migrations/0007_alter_outbounddetailmodel_detail_code.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-05-07 19:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('bound', '0006_boundbatchmodel_sourced_number'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='outbounddetailmodel',
+            name='detail_code',
+            field=models.CharField(max_length=255, verbose_name='明细编号'),
+        ),
+    ]

BIN
bound/migrations/__pycache__/0006_boundbatchmodel_sourced_number.cpython-38.pyc


BIN
bound/migrations/__pycache__/0007_alter_outbounddetailmodel_detail_code.cpython-38.pyc


+ 3 - 2
bound/models.py

@@ -3,7 +3,7 @@ from erp.models import InboundBill, MaterialDetail, OutboundBill,OutMaterialDeta
 
 
 class BoundListModel(models.Model):
-    STATUS = ("100", '入库申请'), ("101", '入库同意'), ("102", '组盘中'), ("200", '出库申请'), ("201", '出库同意'), ("202", '出库中'), ("203", '部分出库'), ("204", '已出库'), ("300", '取消申请')
+    STATUS = ("100", '入库申请'), ("101", '入库同意'), ("102", '组盘中'), ("200", '出库申请'), ("201", '出库同意'), ("202", '出库中'), ("203", '部分出库'), ("204", '已出库'), ("300", '完成')
 
     bound_month = models.CharField(max_length=255, verbose_name="月份")
     bound_date = models.DateField(verbose_name="单据日期")
@@ -48,6 +48,7 @@ class BoundBatchModel(models.Model):
     )
 
     bound_number = models.CharField(max_length=255, verbose_name="入库批次号",blank=False, null=False, unique=True)
+    sourced_number = models.CharField(max_length=255, verbose_name="来源批次号",blank=True, null=True)
     bound_month = models.CharField(max_length=255, verbose_name="月份")
     bound_batch_order = models.IntegerField(default=0, verbose_name="批次顺序")
   
@@ -145,7 +146,7 @@ class OutBoundDetailModel(models.Model):
     bound_batch_number = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name="Bound Batch Number", related_name='out_bound_batch_number_detail')
     status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')
     
-    detail_code = models.CharField(max_length=255, verbose_name="明细编号",unique=True)
+    detail_code = models.CharField(max_length=255, verbose_name="明细编号")
     creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
     openid = models.CharField(max_length=255, verbose_name="Openid")
     is_delete = models.BooleanField(default=False, verbose_name='Delete Label')

+ 3 - 2
data_base/test_erp.py

@@ -21,14 +21,15 @@ def main():
         
         token = AccessToken.get_current_token()
         print('【1】token:',token)
-        token = AccessToken.get_current_token()
-        print('【2】token:',token)
+
        
 
         # 所有同步操作统一入口
         inbound_bill = InboundBill.objects.first()
         print(f"ERP单号: {inbound_bill.number}")
+
         ProductionInboundAuditsync = ProductionInboundAuditSync(inbound_bill)
+        
         PurchaseInboundAuditsync = PurchaseInboundAuditSync(inbound_bill)
         OtherInboundAuditsync = OtherInboundAuditSync(inbound_bill)
         OtherOutboundAuditsync = OtherOutboundAuditSync(inbound_bill)

BIN
db.sqlite3


BIN
erp/__pycache__/models.cpython-38.pyc


BIN
erp/__pycache__/parsers.cpython-38.pyc


BIN
erp/__pycache__/serializers.cpython-38.pyc


BIN
erp/__pycache__/views.cpython-38.pyc


+ 23 - 0
erp/migrations/0010_alter_outboundbill_creater_and_more.py

@@ -0,0 +1,23 @@
+# Generated by Django 4.1.2 on 2025-05-07 17:23
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('erp', '0009_materialdetail_status'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='outboundbill',
+            name='creater',
+            field=models.CharField(blank=True, max_length=50, null=True, verbose_name='创建人'),
+        ),
+        migrations.AlterField(
+            model_name='outboundbill',
+            name='department',
+            field=models.CharField(blank=True, max_length=10, null=True, verbose_name='部门'),
+        ),
+    ]

+ 18 - 0
erp/migrations/0011_alter_outboundbill_billid.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-05-07 18:00
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('erp', '0010_alter_outboundbill_creater_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='outboundbill',
+            name='billId',
+            field=models.BigIntegerField(primary_key=True, serialize=False, verbose_name='原始单据ID'),
+        ),
+    ]

+ 18 - 0
erp/migrations/0012_alter_inboundbill_billid.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-05-07 18:03
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('erp', '0011_alter_outboundbill_billid'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='inboundbill',
+            name='billId',
+            field=models.BigIntegerField(primary_key=True, serialize=False, verbose_name='原始单据ID'),
+        ),
+    ]

+ 23 - 0
erp/migrations/0013_alter_materialdetail_entryids_and_more.py

@@ -0,0 +1,23 @@
+# Generated by Django 4.1.2 on 2025-05-07 18:05
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('erp', '0012_alter_inboundbill_billid'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='materialdetail',
+            name='entryIds',
+            field=models.BigIntegerField(verbose_name='分录ID'),
+        ),
+        migrations.AlterField(
+            model_name='outmaterialdetail',
+            name='entryIds',
+            field=models.BigIntegerField(verbose_name='分录ID'),
+        ),
+    ]

BIN
erp/migrations/__pycache__/0010_alter_outboundbill_creater_and_more.cpython-38.pyc


BIN
erp/migrations/__pycache__/0011_alter_outboundbill_billid.cpython-38.pyc


BIN
erp/migrations/__pycache__/0012_alter_inboundbill_billid.cpython-38.pyc


BIN
erp/migrations/__pycache__/0013_alter_materialdetail_entryids_and_more.cpython-38.pyc


+ 6 - 6
erp/models.py

@@ -11,7 +11,7 @@ class InboundBill(models.Model):
         (2, '已入库'),
         (3, '已取消'),
     )
-    billId = models.IntegerField(primary_key=True,verbose_name='原始单据ID')
+    billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
     number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
     type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
     date = models.CharField(max_length=10, verbose_name='入库时间')  
@@ -44,13 +44,13 @@ class OutboundBill(models.Model):
         (3, '已取消'),
     )
 
-    billId = models.IntegerField(primary_key=True,verbose_name='原始单据ID')
+    billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
     number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
     type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
     date = models.CharField(max_length=10, verbose_name='出库时间')  
-    department = models.CharField(max_length=10, verbose_name='部门', null=True)
+    department = models.CharField(max_length=10, verbose_name='部门', null=True,blank=True)
     warehouse = models.CharField(max_length=10, verbose_name='仓库', default='W01')  
-    creater = models.CharField(max_length=50, verbose_name='创建人', null=True)
+    creater = models.CharField(max_length=50, verbose_name='创建人', null=True,blank=True)
     note = models.TextField(blank=True, verbose_name='备注说明', null=True)
     totalCount = models.IntegerField(verbose_name='总条目数')
     create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
@@ -78,7 +78,7 @@ class MaterialDetail(models.Model):
         (0, '未质检'),
         (1, '已质检'),
     )
-    entryIds = models.IntegerField(verbose_name='分录ID')
+    entryIds = models.BigIntegerField(verbose_name='分录ID')
     production_batch = models.CharField(max_length=50, verbose_name='生产批次')
     goods_code = models.CharField(max_length=20, verbose_name='商品编码')
     goods_name = models.CharField(max_length=100, verbose_name='商品名称')
@@ -116,7 +116,7 @@ class OutMaterialDetail(models.Model):
         null=True,
         blank=True
     )
-    entryIds = models.IntegerField(verbose_name='分录ID')
+    entryIds = models.BigIntegerField(verbose_name='分录ID')
     production_batch = models.CharField(max_length=50, verbose_name='生产批次')
     goods_code = models.CharField(max_length=20, verbose_name='商品编码')
     goods_name = models.CharField(max_length=100, verbose_name='商品名称')

+ 12 - 0
erp/parsers.py

@@ -0,0 +1,12 @@
+from rest_framework.parsers import JSONParser
+
+from rest_framework.renderers import JSONRenderer
+
+class TextJSONRenderer(JSONRenderer):
+    """支持 text/json 的响应渲染器"""
+    media_type = 'text/json'  # 覆盖默认值
+    format = 'json'  # 保持默认格式
+
+class TextJSONParser(JSONParser):
+    """支持 text/json 的解析器"""
+    media_type = 'text/json'  

+ 6 - 3
erp/serializers.py

@@ -6,16 +6,19 @@ class InboundApplySerializer(serializers.ModelSerializer):
     """
     生产入库申请序列化器
     """
+    billId = serializers.CharField( read_only=True)  # 新增显式声明
     class Meta:
         model = InboundBill
         fields = '__all__'
         ordering_fields = ['update_time', 'create_time']
         read_only_fields = ['billId', 'number', 'type', 'date', 'department', 'warehouse', 'creater', 'note', 'totalCount']
-
+        
 class OutboundApplySerializer(serializers.ModelSerializer):
     """
     生产出库申请序列化器
     """
+    billId = serializers.CharField( read_only=True)  # 新增显式声明
+
     class Meta:
         model = OutboundBill
         fields = '__all__'
@@ -30,7 +33,7 @@ class boundPostSerializer(serializers.Serializer):
     number = serializers.CharField(required=True, label='单据编号')
     type = serializers.IntegerField(required=True, label='绑定类型')
     date = serializers.CharField(required=True, label='入库时间')
-    department = serializers.CharField(required=True, label='部门')
+    department = serializers.CharField(required=False, label='部门')
     warehouse = serializers.CharField(required=True, label='仓库')
     creater = serializers.CharField(required=True, label='创建人')
     note = serializers.CharField(required=False, label='备注说明')
@@ -107,7 +110,7 @@ class outboundPostSerializer(serializers.Serializer):
     number = serializers.CharField(required=True, label='单据编号')
     type = serializers.IntegerField(required=True, label='绑定类型')
     date = serializers.CharField(required=True, label='出库时间')
-    department = serializers.CharField(required=True, label='部门')
+    department = serializers.CharField(required=False, label='部门',default='空')
     warehouse = serializers.CharField(required=True, label='仓库')
     creater = serializers.CharField(required=True, label='创建人')
     note = serializers.CharField(required=False, label='备注说明')

+ 48 - 30
erp/views.py

@@ -1,4 +1,7 @@
 from rest_framework.views import APIView
+from rest_framework.parsers import JSONParser
+from rest_framework.decorators import api_view, parser_classes
+
 from rest_framework.response import Response
 from rest_framework.permissions import AllowAny
 from rest_framework import status
@@ -16,6 +19,9 @@ from utils.page import MyPageNumberPagination
 from .models import *
 from .serializers import *
 from .filter import *
+from .parsers import TextJSONParser  
+from .parsers import TextJSONRenderer
+
 import logging
 import time
 from django.db import transaction
@@ -32,9 +38,9 @@ class WMSResponse:
     return WMSResponse.error(message='验证失败', total=2, fail_count=1, 
                                fail_materials=[{...}])
     """
-    
+
     @staticmethod
-    def success(data, total, success, status=status.HTTP_201_CREATED):
+    def success(data, total, success, status=status.HTTP_200_OK):
         """成功响应格式"""
         logger.info('成功响应 | 数据: %s', data)
         return Response({
@@ -51,7 +57,7 @@ class WMSResponse:
 
     @staticmethod
     def error(message, total, fail_count, fail_materials=None, 
-            status=status.HTTP_400_BAD_REQUEST, exception=None):
+            status=status.HTTP_200_OK, exception=None):
         """错误响应格式"""
         if fail_materials is None:
             fail_materials = []
@@ -62,7 +68,7 @@ class WMSResponse:
             
         return Response({
             "status": False,
-            "errorCode": status,
+            "errorCode": 400,
             "message": message,
             "data": {
                 "failCount": fail_count,
@@ -71,7 +77,7 @@ class WMSResponse:
                 "fail_materials": fail_materials
             }
         }, status=status)
-
+"""入库申请"""
 class InboundApplyCreate(APIView):
     """
     生产入库申请
@@ -207,7 +213,7 @@ class InboundApplyCreate(APIView):
             bound_bill.number = serializer.validated_data['number']
             bound_bill.type = serializer.validated_data['type']
             bound_bill.date = serializer.validated_data['date']
-            bound_bill.department = serializer.validated_data['department']
+            bound_bill.department = (serializer.validated_data['department'] if 'department' in serializer.validated_data else '')
             bound_bill.warehouse = serializer.validated_data['warehouse']
             bound_bill.creater = serializer.validated_data['creater']
             bound_bill.note = (serializer.validated_data['note'] if 'note' in serializer.validated_data else '')
@@ -220,7 +226,7 @@ class InboundApplyCreate(APIView):
                 number=serializer.validated_data['number'],
                 type=serializer.validated_data['type'],
                 date=serializer.validated_data['date'],
-                department=serializer.validated_data['department'],
+                department=(serializer.validated_data['department'] if 'department' in serializer.validated_data else ''),
                 warehouse=serializer.validated_data['warehouse'],
                 creater=serializer.validated_data['creater'],
                 note=(serializer.validated_data['note'] if 'note' in serializer.validated_data else ''),
@@ -265,7 +271,7 @@ class InboundApplyCreate(APIView):
                     update_time=timezone.now()
                 )
         return material_detail
-
+"""入库单生成"""
 class GenerateInbound(APIView):
     """
     生产入库单生成接口
@@ -382,6 +388,7 @@ class GenerateInbound(APIView):
   
             batch = BoundBatchModel(
                 bound_number=data['bound_number'],
+                sourced_number = material.production_batch,
                 bound_month=bound_list.bound_month,
                 bound_batch_order=data['bound_batch_order'],
                 warehouse_code='W01',
@@ -458,7 +465,7 @@ class GenerateInbound(APIView):
         elif "重复" in str(exc):
             return Response({"error": str(exc)}, status=status.HTTP_409_CONFLICT)
         return super().handle_exception(exc)
-
+"""出库单生成"""
 class GenerateOutbound(APIView):
     """
     生产出库单生成接口
@@ -566,6 +573,7 @@ class GenerateOutbound(APIView):
 
             batch = OutBatchModel(
                 out_number = MaterialDetail_obj.production_batch,
+       
                 batch_number = batch_obj,
                 out_date = timezone.now().strftime("%Y-%m-%d %H:%M:%S"),
                 
@@ -601,7 +609,7 @@ class GenerateOutbound(APIView):
                 bound_list=bound_list,
                 bound_batch=batch,
                 bound_batch_number = batch_obj,
-                detail_code=f"{batch.out_number}-DET",
+                detail_code=f"{batch.out_number}-ODET",
                 creater=bound_list.creater,
                 openid=bound_list.openid
             ))
@@ -654,7 +662,7 @@ class GenerateOutbound(APIView):
         elif "重复" in str(exc):
             return Response({"error": str(exc)}, status=status.HTTP_409_CONFLICT)
         return super().handle_exception(exc)
-    
+"""出库申请"""   
 class OutboundApplyCreate(APIView):
     """
     生产出库申请
@@ -788,7 +796,7 @@ class OutboundApplyCreate(APIView):
             bound_bill.number = serializer.validated_data['number']
             bound_bill.type = serializer.validated_data['type']
             bound_bill.date = serializer.validated_data['date']
-            bound_bill.department = serializer.validated_data['department']
+            bound_bill.department = (serializer.validated_data['department'] if 'department' in serializer.validated_data else '')
             bound_bill.warehouse = serializer.validated_data['warehouse']
             bound_bill.creater = serializer.validated_data['creater']
             bound_bill.note = (serializer.validated_data['note'] if 'note' in serializer.validated_data else '')
@@ -801,7 +809,7 @@ class OutboundApplyCreate(APIView):
                 number=serializer.validated_data['number'],
                 type=serializer.validated_data['type'],
                 date=serializer.validated_data['date'],
-                department=serializer.validated_data['department'],
+                department=(serializer.validated_data['department'] if 'department' in serializer.validated_data else ''),
                 warehouse=serializer.validated_data['warehouse'],
                 creater=serializer.validated_data['creater'],
                 note=(serializer.validated_data['note'] if 'note' in serializer.validated_data else ''),
@@ -816,7 +824,10 @@ class OutboundApplyCreate(APIView):
         for item in serializer.validated_data['materials']:
             try:
                 material_detail = OutMaterialDetail.objects.get(bound_billId=bound_bill, entryIds=item['entryIds'])
-                Material_entryIds = MaterialDetail.objects.filter(entryIds=item['source_entryIds']).first()
+                Material_entryIds = MaterialDetail.objects.filter(
+                    goods_code = item['goods_code'],
+                    production_batch = item['production_batch']
+                    ).first()
                 if not Material_entryIds:
                     logger.info("出库单号%s,更新——物料明细不存在",bound_bill.number)
                 material_detail.Material_entryIds = Material_entryIds
@@ -830,7 +841,10 @@ class OutboundApplyCreate(APIView):
                 material_detail.update_time = timezone.now()
                 material_detail.save()
             except OutMaterialDetail.DoesNotExist:
-                Material_entryIds = MaterialDetail.objects.filter(entryIds=item['source_entryIds']).first()
+                Material_entryIds = MaterialDetail.objects.filter(
+                    goods_code = item['goods_code'],
+                    production_batch = item['production_batch']
+                    ).first()
                 if not Material_entryIds:
                     logger.info("出库单号%s,创建——物料明细不存在",bound_bill.number)
                 material_detail = OutMaterialDetail.objects.create(
@@ -849,16 +863,21 @@ class OutboundApplyCreate(APIView):
                     update_time=timezone.now()
                 )
         return material_detail
-
+"""产品信息"""
 class ProductInfo(APIView):
     """
     批次信息更新
     """
     authentication_classes = []  # 禁用所有认证类
     permission_classes = [AllowAny]  # 允许任意访问
+    # parser_classes = [TextJSONParser]  # 强制使用 text/json
+    # renderer_classes = [TextJSONRenderer]  # 强制使用 text/json
+
 
     def post(self, request):
         data = request.data
+        logger.info('批次信息更新 | 原始数据: %s', data)
+   
         total_count = data.get('totalCount', 0)
         materials = data.get('materials', [])
         
@@ -885,6 +904,7 @@ class ProductInfo(APIView):
                             created = True
 
                         # 字段映射与校验
+                        instance.id = material_id
                         instance.product_code = material.get('product_code', instance.product_code)
                         instance.product_name = material.get('product_name', instance.product_name)
                         instance.product_std = material.get('product_std', instance.product_std)
@@ -911,7 +931,12 @@ class ProductInfo(APIView):
                         
                 # 检查总数一致性[7](@ref)
                 if len(materials) != total_count:
-                    raise ValueError("Received materials count does not match totalCount")
+                    return WMSResponse.error(
+                        message="物料数量不匹配",
+                        total=total_count,
+                        fail_count=total_count,
+                        fail_materials=fail_materials
+                    )
 
         except Exception as e:
             logger.error(f"Batch update transaction failed: {str(e)}", exc_info=True)
@@ -928,7 +953,7 @@ class ProductInfo(APIView):
             total=total_count,
             success=success_count
         )
-
+"""批次更新"""
 class BatchUpdate(APIView):
     """
     商品信息查询
@@ -1003,8 +1028,7 @@ class BatchUpdate(APIView):
             total=total_count,
             success=success_count
         )
-
-
+"""token"""
 class AccessToken(APIView):
     """
     获取ERP的access_token
@@ -1081,8 +1105,7 @@ class AccessToken(APIView):
                 cache.set(cache_key, new_token, timeout=1000)
                 return new_token
         return cached_token
-
-            
+"""基本同步业务类"""        
 class ERPSyncBase:
     """ERP同步基类(作为发送方)"""
     max_retries = 30  # 最大重试次数
@@ -1141,8 +1164,7 @@ class ERPSyncBase:
                 time.sleep(self.retry_delay)
                 
         logger.error(f"ERP同步最终失败 | 单据:{self.wms_bill.number}")
-        return False
-        
+        return False       
 # ==================== 业务接口 ====================
 """生产入库审核"""
 class ProductionInboundAuditSync(ERPSyncBase):
@@ -1237,7 +1259,6 @@ class OtherInboundAuditSync(ERPSyncBase):
         if response['code'] != '200':
             raise ValueError(f"ERP审核失败: {response['msg']}")
         return response['data']['erp_audit_id']
-
 """其他出库审核同步"""
 class OtherOutboundAuditSync(ERPSyncBase):
     
@@ -1300,7 +1321,6 @@ class ProductionOutboundAuditSync(ERPSyncBase):
         if response['code'] != '200':
             raise ValueError(f"ERP审核失败: {response['msg']}")
         return response['data']['erp_audit_id']
-
 """采购入库保存"""
 class PurchaseInboundSaveSync(ERPSyncBase):
    
@@ -1331,7 +1351,6 @@ class PurchaseInboundSaveSync(ERPSyncBase):
     def process_erp_response(self, response):
         print("ERP审核响应:",response)
         return response['data']['purchase_order_id']
-
 """销售出库保存"""
 class SaleOutboundSaveSync(ERPSyncBase):
    
@@ -1362,8 +1381,7 @@ class SaleOutboundSaveSync(ERPSyncBase):
     def process_erp_response(self, response):
         print("ERP审核响应:",response)
         return response['data']['purchase_order_id']
-
-
+"""前端视图类·ERP入库"""
 class InboundBills(viewsets.ModelViewSet):
     """
         retrieve:
@@ -1404,7 +1422,7 @@ class InboundBills(viewsets.ModelViewSet):
             return InboundApplySerializer
         else:
             return self.http_method_not_allowed(request=self.request)
-
+"""前端视图类·ERP出库"""
 class OutboundBills(viewsets.ModelViewSet):
     """
         retrieve:

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 221 - 1463
logs/boundBill.log


+ 309 - 0
logs/error.log

@@ -4241,3 +4241,312 @@ Traceback (most recent call last):
   File "D:\Document\code\vue\greater_wms\.\utils\throttle.py", line 18, in allow_request
     openid = request.auth.openid
 AttributeError: 'NoneType' object has no attribute 'openid'
+[2025-05-07 17:46:26,829][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 17:47:02,497][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 17:47:18,339][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 356, in fields
+    for key, value in self.get_fields().items():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1086, in get_fields
+    fields[field_name] = field_class(**field_kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 894, in __init__
+    super().__init__(**kwargs)
+TypeError: __init__() got an unexpected keyword argument 'coerce_to_string'
+[2025-05-07 17:48:42,438][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 356, in fields
+    for key, value in self.get_fields().items():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1086, in get_fields
+    fields[field_name] = field_class(**field_kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 894, in __init__
+    super().__init__(**kwargs)
+TypeError: __init__() got an unexpected keyword argument 'coerce_to_string'
+[2025-05-07 17:49:22,170][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 17:50:22,186][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 18:21:11,923][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-05-07 18:24:01,473][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-05-07 18:45:48,008][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createOutboundApply

+ 322 - 0
logs/server.log

@@ -4450,3 +4450,325 @@ AttributeError: 'NoneType' object has no attribute 'openid'
 [2025-05-07 14:29:05,728][django.request.log_response():241] [WARNING] Bad Request: /wms/updateBatchInfo
 [2025-05-07 14:33:00,889][django.request.log_response():241] [WARNING] Bad Request: /wms/updateBatchInfo
 [2025-05-07 14:33:54,449][django.request.log_response():241] [WARNING] Bad Request: /wms/updateBatchInfo
+[2025-05-07 14:48:43,164][django.request.log_response():241] [WARNING] Bad Request: /wms/updateBatchInfo
+[2025-05-07 14:50:31,053][django.request.log_response():241] [WARNING] Bad Request: /wms/productInfo
+[2025-05-07 15:34:18,378][django.request.log_response():241] [WARNING] Bad Request: /wms/productInfo
+[2025-05-07 16:01:47,146][django.request.log_response():241] [WARNING] Bad Request: /wms/productInfo
+[2025-05-07 17:46:26,829][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 17:47:02,497][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 17:47:18,339][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 356, in fields
+    for key, value in self.get_fields().items():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1086, in get_fields
+    fields[field_name] = field_class(**field_kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 894, in __init__
+    super().__init__(**kwargs)
+TypeError: __init__() got an unexpected keyword argument 'coerce_to_string'
+[2025-05-07 17:48:42,438][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 356, in fields
+    for key, value in self.get_fields().items():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1086, in get_fields
+    fields[field_name] = field_class(**field_kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 894, in __init__
+    super().__init__(**kwargs)
+TypeError: __init__() got an unexpected keyword argument 'coerce_to_string'
+[2025-05-07 17:49:22,170][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 17:50:22,186][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 357, in fields
+    fields[key] = value
+  File "d:\language\python38\lib\site-packages\rest_framework\utils\serializer_helpers.py", line 169, in __setitem__
+    field.bind(field_name=key, parent=self.serializer)
+  File "d:\language\python38\lib\site-packages\rest_framework\fields.py", line 367, in bind
+    assert self.source != field_name, (
+AssertionError: It is redundant to specify `source='billId'` on field 'CharField' in serializer 'InboundApplySerializer', because it is the same as the field name. Remove the `source` keyword argument.
+[2025-05-07 17:51:29,624][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-07 17:52:12,624][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-07 18:17:18,549][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-07 18:17:38,063][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-07 18:21:11,923][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-05-07 18:24:01,473][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-05-07 18:26:42,737][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-07 18:33:50,742][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-07 18:39:09,992][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-05-07 18:40:48,947][django.request.log_response():241] [WARNING] Not Found: /stock/list/
+[2025-05-07 18:45:48,008][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createOutboundApply
+[2025-05-07 19:09:18,482][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/

+ 1 - 1
templates/src/boot/axios_request.js

@@ -13,7 +13,7 @@ function getBaseUrl (name) {
   return xhr.status === okStatus ? xhr.responseText : null
 }
 // 注意以后修改成服务器的地址
-const baseurl = "http://192.168.30.72:8008"
+const baseurl = "http://192.168.32.253:8008"
 
 const axiosInstance = axios.create({
   baseURL: baseurl,

+ 4 - 4
templates/src/pages/erp/erpdn.vue

@@ -66,7 +66,7 @@
                       :options="bound_code_type_list" option-label="label" option-value="value" emit-value map-options
                       transition-show="scale"
                       transition-hide="scale"
-                      :rules="[val => (val && val.length > 0) || error1]" />
+                     />
               </q-td>
             </template>
             <template v-else-if="props.row.id !== editid">
@@ -83,7 +83,7 @@
                     :options="bound_department_list" option-label="label" option-value="value" emit-value map-options
                     transition-show="scale"
                     transition-hide="scale"
-                    :rules="[val => (val && val.length > 0) || error1]" />
+                  />
               </q-td>
             </template>
             <template v-else-if="props.row.id !== editid">
@@ -246,7 +246,7 @@
                                   </div>
                                   <div class="col">
                                     <q-input 
-                                      v-model="item.plan_qty" 
+                                      v-model="item.goods_out_qty" 
                                       :label="'计划数量'"
                                       :readonly="onlyread" 
                                       dense outlined 
@@ -654,7 +654,7 @@ export default {
             })
           })
       console.log("batch查询的结果是:",_this.batch_detail)
-      console.log("batch长度查询的结果是:",_this.batch_detail.length)
+      
       
     },
     deleteDataSubmit() {