flower_mr 1 Minggu lalu
induk
melakukan
cad6af6813

+ 1 - 0
bound/models.py

@@ -204,6 +204,7 @@ class OutBatchModel(models.Model):
     goods_qty = models.BigIntegerField(default=0, verbose_name="商品数量")
     goods_out_qty = models.BigIntegerField(default=0, verbose_name="出库数量")
 
+
     status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')
 
     container_number = models.IntegerField( default=0, verbose_name="托盘数目")

+ 18 - 0
container/migrations/0021_out_batch_detail_last_out_goods_qty.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-05-29 02:27
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('container', '0020_alter_out_batch_detail_options'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='out_batch_detail',
+            name='last_out_goods_qty',
+            field=models.IntegerField(default=0, verbose_name='上次出库数量'),
+        ),
+    ]

+ 15 - 0
container/models.py

@@ -73,13 +73,27 @@ class ContainerDetailModel(models.Model):
     
         """
         if self.batch:
+          
             super().save(*args, **kwargs)
+
+            if self.goods_qty - self.goods_out_qty <= 0:
+                self.status = 3
+                super().save(*args, **kwargs)
+            elif self.goods_qty - self.goods_out_qty > 0 and self.goods_out_qty > 0:
+                self.status = 2
+                super().save(*args, **kwargs)
+            if self.status == 3 and self.goods_qty - self.goods_out_qty > 0 :
+                self.status = 2
+                super().save(*args, **kwargs)
+
             container_all_qty = ContainerDetailModel.objects.filter(batch=self.batch,is_delete=False).aggregate(total_qty=models.Sum('goods_qty'))['total_qty']
             container_all_out_qty = ContainerDetailModel.objects.filter(batch=self.batch,is_delete=False).aggregate(total_out_qty=models.Sum('goods_out_qty'))['total_out_qty']
             self.batch.goods_in_qty = container_all_qty
             self.batch.goods_in_location_qty = container_all_qty - container_all_out_qty
             self.batch.goods_out_qty = container_all_out_qty
             self.batch.save()
+
+
         
 
     
@@ -188,6 +202,7 @@ class out_batch_detail(models.Model):
     container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='out_batch_details')
     container_detail = models.ForeignKey(ContainerDetailModel, on_delete=models.CASCADE, verbose_name='托盘明细')
     out_goods_qty = models.IntegerField(verbose_name='数量')
+    last_out_goods_qty = models.IntegerField(verbose_name='上次出库数量', default=0)
     working = models.IntegerField(default = 1,verbose_name='工作状态')
     is_delete = models.BooleanField(default=False, verbose_name='是否删除')
     class Meta:

+ 6 - 2
container/urls.py

@@ -18,7 +18,12 @@ re_path(r'^detail/(?P<pk>\d+)/$', views.ContainerDetailViewSet.as_view({
 }), name="ContainerDetail_1"),
 
 path(r'locationdetail/', views.ContainerDetailViewSet.as_view( {"get": "locationdetail_list"}), name="ContainerlocationDetail"),
-path(r'containerdetail/', views.ContainerDetailViewSet.as_view( {"get": "containerdetail_list"}), name="ContainerlocationDetail"),
+path(r'pdadetail/', views.ContainerDetailViewSet.as_view( {"get": "pdadetail_list"}), name="pdadetail_list"),
+path(r'pda/outdetail/', views.OutDetailViewSet.as_view( {"get": "get_out_batch_detail"}), name="get_out_batch_detail"),
+path(r'pda/containerdetail/', views.OutDetailViewSet.as_view( {"get": "get_contianer_detail"}), name="get_out_batch_detail"),
+path(r'pda/confirmdetail/', views.OutDetailViewSet.as_view( {"get": "confirm_out_batch_detail"}), name="confirm_out_batch_detail"),
+path(r'pda/canceldetail/', views.OutDetailViewSet.as_view( {"get": "cancel_out_batch_detail"}), name="cancel_out_batch_detail"),
+path(r'containerdetail/', views.ContainerDetailViewSet.as_view( {"get": "containerdetail_list"}), name="containerdetail_list"),
 
 path(r'operate/', views.ContainerOperateViewSet.as_view( {"get": "list","post": "create"}), name="ContainerDetail"),
 re_path(r'^operate/(?P<pk>\d+)/$', views.ContainerOperateViewSet.as_view({
@@ -29,7 +34,6 @@ re_path(r'^operate/(?P<pk>\d+)/$', views.ContainerOperateViewSet.as_view({
 
 path(r'wcs_task/', views.WCSTaskViewSet.as_view({"get": "list", "post": "create"}), name="Task"),
 
-
 path(r'task/', views.TaskViewSet.as_view({"get": "list", "post": "create"}), name="Task"),
 re_path(r'^task/(?P<pk>\d+)/$', views.TaskViewSet.as_view({
     'get': 'retrieve',

+ 197 - 3
container/views.py

@@ -1051,6 +1051,7 @@ class ContainerDetailViewSet(viewsets.ModelViewSet):
                     "code": 200,
                     "message": "Success",
                     "data": {
+                        "container_code": container.container_code,
                         "count": len(results),
                         "results": results,
                         "batch_totals": batch_totals  # 可选:单独返回批次总量
@@ -1065,6 +1066,111 @@ class ContainerDetailViewSet(viewsets.ModelViewSet):
                 status=status.HTTP_500_INTERNAL_SERVER_ERROR
             )
 
+
+    def pdadetail_list(self, request):
+        """
+        获取PDA组盘入库的容器详情列表
+        """
+        try:
+            container_code = request.query_params.get('container_code')
+            if not container_code:
+                return Response(
+                    {'code': 400, 'message': '缺少托盘编码参数', 'data': None},
+                    status=status.HTTP_200_OK
+                )
+ 
+
+            # 获取容器对象
+            try:
+                container = ContainerListModel.objects.get(container_code=container_code)
+            except ContainerListModel.DoesNotExist:
+                return Response(
+                    {'code': 404, 'message': '指定托盘不存在', 'data': None},
+                    status=status.HTTP_200_OK
+                )
+
+            # 查询关联批次明细(排除状态0和3)
+            details = ContainerDetailModel.objects.filter(
+                container=container,is_delete=False
+            ).exclude(
+                status__in=[0, 3]
+            ).select_related('batch')
+
+            if not details.exists():
+                return Response(
+                    {'code': 404, 'message': '未找到有效批次数据', 'data': None},
+                    status=status.HTTP_200_OK
+                )
+
+            # 按批次号 + 数量分组统计
+            batch_dict = {}
+            batch_qty_dict = defaultdict(int)  # 使用默认字典自动初始化
+
+            for detail in details:
+                if not detail.batch:
+                    continue
+
+                bound_number = detail.batch.bound_number
+                goods_qty = detail.goods_qty - detail.goods_out_qty  # 剔除出库数量
+
+                # 组合键:批次号 + 当前数量
+                batch_key = (bound_number, goods_qty)
+                
+                
+                batch_qty_dict[bound_number] += goods_qty  # 自动处理键初始化
+
+                # 分组统计
+                if batch_key not in batch_dict:
+                    batch_obj = BoundBatchModel.objects.filter( bound_number=bound_number).first()
+                    batch_dict[batch_key] = {
+                        "goods_code": detail.goods_code,
+                        "goods_desc": detail.goods_desc,
+                        "goods_qty": goods_qty,
+                        "goods_class": detail.goods_class,
+                        "goods_package": batch_obj.goods_package,
+                        "batch_total_qty": batch_obj.goods_qty,
+                        "batch_total_in_qty": batch_obj.goods_in_qty - batch_obj.goods_out_qty,
+                        "status": detail.status,
+                        "group_qty": 1,
+                        "create_time": detail.create_time,
+                    }
+                else:
+                    batch_dict[batch_key]["group_qty"] += 1
+
+            # 重构数据结构
+            results = []
+            for (bound_number, qty), data in batch_dict.items():
+                results.append({
+                    **data,
+                    "bound_number": bound_number,
+                    "current_qty": qty,
+                    "total_batch_qty": batch_qty_dict[bound_number]  # 添加批次总量
+                })
+            batch_totals =[]
+            for bound_number, qty in batch_qty_dict.items():
+                batch_totals.append({
+                    "bound_number": bound_number,
+                    "total_batch_qty": qty
+                })
+
+            return Response(
+                {
+                    "code": 200,
+                    "message": "Success",
+                    "data": {
+                        "count": len(results),
+                        "results": results,
+                        "batch_totals": batch_totals  # 可选:单独返回批次总量
+                    }
+                },
+                status=status.HTTP_200_OK
+            )
+
+        except Exception as e:
+            return Response(
+                {'code': 500, 'message': f'服务器错误: {str(e)}', 'data': None},
+                status=status.HTTP_200_OK
+            )
 # 托盘操作历史记录
 class ContainerOperateViewSet(viewsets.ModelViewSet):
     """
@@ -1196,7 +1302,7 @@ class OutboundService:
             
             # 发送关键请求
             response = requests.post(
-                "http://192.168.18.67:1616/wcs/WebApi/getOutTask",
+                "http://192.168.18.200:1616/wcs/WebApi/getOutTask",
                 json=send_data,
                 timeout=10
             )
@@ -1249,7 +1355,7 @@ class OutboundService:
                     tasknumber = month*100000+tasknumber_index+tasknumber,
                     container=container_obj.container_code,
                     current_location=container_obj.current_location,
-                    target_location="203",
+                    target_location="103",
                     tasktype="outbound",
                     month=int(timezone.now().strftime("%Y%m")),
                     message="等待出库",
@@ -1597,6 +1703,7 @@ class OutTaskViewSet(APIView):
                 if left_qty - allocate_qty >= 0:
                     break
                 add_qty = min(allocate_qty-left_qty, cd.goods_qty - cd.goods_out_qty)
+                last_out_qty = cd.goods_out_qty
                 cd.goods_out_qty += add_qty
                 left_qty += add_qty
                 cd.save()
@@ -1609,6 +1716,7 @@ class OutTaskViewSet(APIView):
                     container_id=cd.container_id,
                     container_detail_id=cd.id,
                     out_goods_qty=add_qty,
+                    last_out_goods_qty = last_out_qty,
                     working = 1,
                     is_delete = False
                 )
@@ -1741,4 +1849,90 @@ class OutDetailViewSet(viewsets.ModelViewSet):
         """根据action切换序列化器"""
         if self.action == 'retrieve':
             return OutBoundFullDetailSerializer
-        return super().get_serializer_class()
+        return super().get_serializer_class()
+    
+    def get_out_batch_detail(self, request):
+        """获取某个容器的出库明细"""
+        try:
+            container_code = request.query_params.get('container_code')
+            container_obj = ContainerListModel.objects.filter(container_code=container_code).first()
+            if not container_obj:
+                return Response({"code": "500", "message": f"容器 {container_code} 不存在"}, status=status.HTTP_200_OK)
+            out_batch_detail_all = out_batch_detail.objects.filter(container=container_obj,working=1,is_delete=False).all()
+            if not out_batch_detail_all:
+                return Response({"code": "500", "message": f"容器 {container_code} 无出库明细"}, status=status.HTTP_200_OK)
+            serializer = OutBoundFullDetailSerializer(out_batch_detail_all, many=True)
+            return Response({"code": "200", "message": "Success", "data": serializer.data}, status=status.HTTP_200_OK)
+        except Exception as e:
+            return Response({"code": "500", "message": str(e)}, status=status.HTTP_200_OK)
+        
+    def confirm_out_batch_detail(self, request):
+        """确认出库"""
+        try:
+
+            container_code = request.query_params.get('container_code')
+            container_obj = ContainerListModel.objects.filter(container_code=container_code).first()
+            if not container_obj:
+                return Response({"code": "500", "message": f"容器 {container_code} 不存在"}, status=status.HTTP_200_OK)
+            out_batch_detail_all = out_batch_detail.objects.filter(container=container_obj,working=1,is_delete=False).all()
+            if not out_batch_detail_all:
+                return Response({"code": "500", "message": f"容器 {container_code} 无出库明细"}, status=status.HTTP_200_OK)
+            for obj in out_batch_detail_all:
+                obj.working = 0
+                obj.save()
+                BatchLogModel.objects.create(
+                    batch_id = obj.container_detail.batch,
+                    log_type = 1,
+                    log_date = timezone.now(),
+                    goods_code = obj.container_detail.batch.goods_code,
+                    goods_desc = obj.container_detail.batch.goods_desc,
+                    goods_qty = obj.out_goods_qty,
+                    log_content = f"出库容器 {container_code} 批次 {obj.container_detail.batch.id} 数量 {obj.out_goods_qty} 重量 {obj.container_detail.batch.goods_weight} 到 {obj.to_location.location_code} 库位",
+                    creater = "WMS",
+                    openid = "WMS"
+
+                )
+            return Response({"code": "200", "message": "出库成功"}, status=status.HTTP_200_OK)
+        except Exception as e:
+            return Response({"code": "500", "message": str(e)}, status=status.HTTP_200_OK)
+        
+    def cancel_out_batch_detail(self, request):
+        """取消出库"""
+        try:
+            container_code = request.query_params.get('container_code')
+            container_obj = ContainerListModel.objects.filter(container_code=container_code).first()
+            if not container_obj:
+                return Response({"code": "500", "message": f"容器 {container_code} 不存在"}, status=status.HTTP_200_OK)
+            out_batch_detail_all = out_batch_detail.objects.filter(container=container_obj,working=1,is_delete=False).all()
+            if not out_batch_detail_all:
+                return Response({"code": "500", "message": f"容器 {container_code} 无出库明细"}, status=status.HTTP_200_OK)
+            for obj in out_batch_detail_all:
+                obj.container_detail.goods_out_qty = obj.last_out_goods_qty
+                obj.container_detail.save()
+                obj.is_delete = True
+                obj.working = 0
+                obj.save()
+            return Response({"code": "200", "message": "出库取消成功"}, status=status.HTTP_200_OK)
+        except Exception as e:
+            return Response({"code": "500", "message": str(e)}, status=status.HTTP_200_OK)
+        
+    def get_contianer_detail(self, request):
+        try:
+            container_code = request.query_params.get('container_code')
+            container_obj = ContainerListModel.objects.filter(container_code=container_code).first()
+            if not container_obj:
+                return Response({"code": "500", "message": f"容器 {container_code} 不存在"}, status=status.HTTP_200_OK)
+            container_detail_all = ContainerDetailModel.objects.filter(container=container_obj,is_delete=False).all().exclude(status__in=[3])
+            return_data=[]
+            for obj in container_detail_all:
+                return_data.append({
+                    "id": obj.id,
+                    "batch": obj.batch.bound_number,
+                    "goods_code": obj.goods_code,
+                    "goods_desc": obj.goods_desc,
+                    "goods_qty" :obj.goods_qty,
+                    "out_goods_qty": obj.goods_out_qty
+                })
+            return Response({"code": "200", "message": "Success", "data": return_data}, status=status.HTTP_200_OK)
+        except Exception as e:
+            return Response({"code": "500", "message": str(e)}, status=status.HTTP_200_OK)

+ 27 - 0
logs/error.log

@@ -9315,3 +9315,30 @@ AttributeError: 'MyPageNumberPagination' object has no attribute 'page'
 [2025-05-27 03:33:53,643][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
 [2025-05-27 03:34:26,417][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
 [2025-05-27 03:34:49,167][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-29 01:56:19,540][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-29 01:56:59,502][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-29 02:28:35,558][django.request.log_response():241] [ERROR] Internal Server Error: /container/pdaoutdetail/
+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 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'dict'>`

+ 64 - 0
logs/server.log

@@ -27871,3 +27871,67 @@ AttributeError: 'MyPageNumberPagination' object has no attribute 'page'
 [2025-05-27 03:43:57,779][django.server.log_message():187] [INFO] "OPTIONS /bound/batch/?page=3&page_size=11 HTTP/1.1" 200 0
 [2025-05-27 03:43:57,867][django.server.log_message():187] [INFO] "GET /bound/batch/?page=3&page_size=11 HTTP/1.1" 200 6603
 [2025-05-27 03:43:59,908][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1845
+[2025-05-27 10:17:30,986][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-27 10:17:31,008][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-27 10:17:35,883][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-27 10:17:45,416][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-27 10:18:50,214][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-27 10:18:50,230][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-27 10:19:17,673][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-27 10:32:07,168][django.request.log_response():241] [WARNING] Bad Request: /container/locationdetail/
+[2025-05-27 10:32:16,627][django.request.log_response():241] [WARNING] Bad Request: /container/locationdetail/
+[2025-05-27 10:32:37,331][django.request.log_response():241] [WARNING] Bad Request: /container/locationdetail/
+[2025-05-27 10:34:38,309][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-05-28 10:24:43,377][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-05-28 10:43:23,294][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-05-28 14:40:48,334][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-28 14:40:48,348][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-28 14:40:51,242][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-28 14:40:55,924][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-05-28 17:21:17,368][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-28 18:31:07,373][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-28 18:32:36,959][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 01:56:19,540][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-29 01:56:59,502][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/
+[2025-05-29 02:28:15,718][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 02:28:35,558][django.request.log_response():241] [ERROR] Internal Server Error: /container/pdaoutdetail/
+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 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'dict'>`
+[2025-05-29 14:31:05,924][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:33:16,611][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:37:47,422][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:38:55,473][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:39:05,367][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:39:08,783][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:39:15,645][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:44:14,124][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:44:17,708][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:44:25,028][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:46:24,874][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:47:00,218][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 14:47:59,673][django.request.log_response():241] [WARNING] Not Found: /container/pdadetail/
+[2025-05-29 23:01:23,197][django.request.log_response():241] [WARNING] Not Found: /containerpda/canceldetail/
+[2025-05-30 00:14:09,489][django.request.log_response():241] [WARNING] Bad Request: /container/container_wcs/
+[2025-05-30 00:14:23,714][django.request.log_response():241] [WARNING] Bad Request: /container/container_wcs/

File diff ditekan karena terlalu besar
+ 1 - 1
templates/dist/spa/css/3.fcce8b9e.css


File diff ditekan karena terlalu besar
+ 1 - 1
templates/dist/spa/index.html


File diff ditekan karena terlalu besar
+ 0 - 1
templates/dist/spa/js/3.54ff5a38.js


TEMPAT SAMPAH
templates/dist/spa/js/3.54ff5a38.js.gz


File diff ditekan karena terlalu besar
+ 1 - 0
templates/dist/spa/js/3.9f1140ab.js


TEMPAT SAMPAH
templates/dist/spa/js/3.9f1140ab.js.gz


TEMPAT SAMPAH
templates/dist/spa/js/app.3c661508.js.gz


File diff ditekan karena terlalu besar
+ 1 - 1
templates/dist/spa/js/app.3c661508.js


TEMPAT SAMPAH
templates/dist/spa/js/app.76fa7928.js.gz


+ 6 - 0
templates/src/components/goodscard.vue

@@ -83,6 +83,10 @@
                       color="primary"
                       :label="$t('stock.delete')"
                     />
+                    <div v-if="storage_form.length > 0">
+                      托盘码:
+                      {{ container_code }}
+                    </div>
                     <q-btn
                       flat
                       dense
@@ -355,6 +359,7 @@ export default {
       pathname: "bin/",
       pathnamecontainer: "container/locationdetail/",
       container_id: 123456,
+      container_code: 0,
       results: [],
       storage_form: [],
       elevator_form: {
@@ -558,6 +563,7 @@ export default {
             _this.pathnamecontainer + "?container=" + _this.container_id
           ).then((res) => {
             var data = res.data;
+            this.container_code = data.container_code;
             this.storage_form = data.batch_totals;
             this.results = data.results;
           });