Browse Source

出库数目一半bug

flower_bs 20 giờ trước cách đây
mục cha
commit
af8b5eb716

+ 14 - 2
bin/views.py

@@ -170,7 +170,8 @@ class locationViewSet(viewsets.ModelViewSet):
         container_batch_status = defaultdict(dict)  # 改为字典存储,避免重复记录
         if container_ids:
             container_details = ContainerDetailModel.objects.filter(
-                container_id__in=container_ids
+                container_id__in=container_ids ,
+                is_delete=False
             ).select_related('batch').exclude(status=3)  # 排除已删除或不合格的托盘
             
             for detail in container_details:
@@ -186,8 +187,19 @@ class locationViewSet(viewsets.ModelViewSet):
                         container_batch_status[detail.container_id][status_key] = (
                             detail.batch.check_status if detail.batch else "404",
                             detail.batch.check_time if detail.batch else "no_check_time",
-                            detail.batch.bound_number if detail.batch else "no_batch"
+                            detail.batch.bound_number if detail.batch else "no_batch",
+                            detail.goods_qty-detail.goods_out_qty if detail.goods_qty-detail.goods_out_qty > 0 else 0,
+            
                         )
+                    else:
+                        # 如果批次状态相同,则更新库位数量
+                        if container_batch_status[detail.container_id][status_key][0] == detail.batch.check_status:
+                            container_batch_status[detail.container_id][status_key] = (
+                                detail.batch.check_status,
+                                max(container_batch_status[detail.container_id][status_key][1], detail.batch.check_time),
+                                detail.batch.bound_number,
+                                container_batch_status[detail.container_id][status_key][3] + (detail.goods_qty-detail.goods_out_qty if detail.goods_qty-detail.goods_out_qty > 0 else 0)
+                            )
         
         # 构造返回数据
         return_data = []

+ 3 - 5
container/views.py

@@ -1961,12 +1961,10 @@ class OutTaskViewSet(APIView):
                 left_qty += add_qty
                 last_out_qty = cd.goods_out_qty
                 cd.goods_out_qty += add_qty
-                left_qty += add_qty
+                print(f"{left_qty/25} 更新托盘 {cd.container.container_code} 批次 {cd.batch_id} 出库数量: {cd.goods_out_qty}")
+
                 cd.save()
-                if cd.goods_qty - cd.goods_out_qty == 0:
-                    cd.status = 3
-                    cd.save()
-                # 新建出库detail
+
                 out_batch_detail.objects.create(
                     out_bound_id=bound_list_id,
                     container_id=cd.container_id,

+ 2 - 2
erp/views.py

@@ -466,7 +466,7 @@ class GenerateInbound(APIView):
                 bound_batch_order=standardized_batch,  # 存储标准化批次号
                 warehouse_code='W01',
                 warehouse_name='立体仓',
-                goods_code=material.goods_code,
+                goods_code=material_goods_code ,
                 goods_desc=material.goods_name,
                 goods_std=material.goods_std or '',  # 处理空值
                 goods_unit=material.goods_unit,
@@ -493,7 +493,7 @@ class GenerateInbound(APIView):
                 batch_id=batch,
                 log_type=0,
                 log_date=timezone.now(),
-                goods_code=batch.goods_code,
+                goods_code=material_goods_code ,
                 goods_desc=batch.goods_desc,
                 goods_qty=batch.goods_qty,
                 log_content=f"生产入库批次创建,来源单据:{bill_obj.number}",

+ 50 - 0
logs/boundBill.log

@@ -768,3 +768,53 @@ Traceback (most recent call last):
   File "D:\Document\code\vue\greater_wms\erp\views.py", line 770, in process_materials
     raise Exception(f"入库物料ID:{material.material_goods_code}-{ material.material_batch_order}构成的批次未找到关联批次记录")
 Exception: 入库物料ID:QBF03-202504002构成的批次未找到关联批次记录
+[2025-06-29 16:19:06,010][wms.boundBill.validate_and_lock():396] [INFO] 锁定原始单据成功 | billId: 2243653296944379904
+[2025-06-29 16:19:06,010][wms.boundBill.validate_and_lock():397] [INFO] 原始单据状态: 0
+[2025-06-29 16:19:06,013][wms.boundBill.post():354] [INFO] 创建出入库主单成功 | bound_code: GDHB-20250623-001033
+[2025-06-29 16:19:06,015][wms.boundBill.post():382] [ERROR] 入库单生成异常 | billId: 2243653296944379904
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.IntegrityError: UNIQUE constraint failed: boundbatch.bound_number
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\code\vue\greater_wms\.\erp\views.py", line 507, in process_materials
+    BoundBatchModel.objects.bulk_create(batch_list)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 815, in bulk_create
+    returned_columns = self._batched_insert(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 1816, in _batched_insert
+    self._insert(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\query.py", line 1790, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1660, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.IntegrityError: UNIQUE constraint failed: boundbatch.bound_number
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "D:\code\vue\greater_wms\.\erp\views.py", line 356, in post
+    self.process_materials(bill_obj, bound_list)
+  File "D:\code\vue\greater_wms\.\erp\views.py", line 511, in process_materials
+    raise Exception(f"批次数据保存失败: {str(e)}")
+Exception: 批次数据保存失败: UNIQUE constraint failed: boundbatch.bound_number

+ 236 - 0
logs/error.log

@@ -12839,3 +12839,239 @@ Traceback (most recent call last):
     detail.batch.batch_number if detail.batch else "no_batch",  # 改为存储批号而不是对象
 AttributeError: 'BoundBatchModel' object has no attribute 'batch_number'
 [2025-06-25 20:43:09,322][django.server.log_message():187] [ERROR] "POST /bin/check/ HTTP/1.1" 500 110604
+[2025-06-30 15:33:30,392][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:33:30,399][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 180535
+[2025-06-30 15:33:54,392][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:33:54,419][django.server.log_message():187] [ERROR] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 500 180504
+[2025-06-30 15:55:16,949][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:55:16,950][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:55:16,967][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 180492
+[2025-06-30 15:55:16,971][django.server.log_message():187] [ERROR] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 500 180459

+ 387 - 0
logs/server.log

@@ -37713,3 +37713,390 @@ AttributeError: 'BoundBatchModel' object has no attribute 'batch_number'
 [2025-06-28 14:31:13,229][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
 [2025-06-28 14:31:13,246][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
 [2025-06-28 21:12:01,379][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-06-29 13:07:02,766][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-06-29 13:10:12,214][django.request.log_response():241] [WARNING] Not Found: /container/locationdetail/
+[2025-06-30 15:31:20,877][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 4581
+[2025-06-30 15:31:25,291][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:31:25,314][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:33:30,392][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:33:30,399][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 180535
+[2025-06-30 15:33:54,392][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:33:54,419][django.server.log_message():187] [ERROR] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 500 180504
+[2025-06-30 15:33:54,676][django.server.log_message():187] [INFO] "POST /container/out_task/ HTTP/1.1" 200 30
+[2025-06-30 15:33:54,693][django.server.log_message():187] [INFO] "POST /container/batch/ HTTP/1.1" 200 30
+[2025-06-30 15:33:54,749][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 4581
+[2025-06-30 15:33:59,502][django.server.log_message():187] [INFO] "GET /bound/list/75/ HTTP/1.1" 200 400
+[2025-06-30 15:33:59,512][django.server.log_message():187] [INFO] "GET /bound/outdetail/?bound_list=75 HTTP/1.1" 200 2571
+[2025-06-30 15:33:59,546][django.server.log_message():187] [INFO] "GET /container/out_detail/75/ HTTP/1.1" 200 3891
+[2025-06-30 15:34:12,871][django.server.log_message():187] [INFO] "GET /container/out_detail/75/ HTTP/1.1" 200 3891
+[2025-06-30 15:34:15,319][django.server.log_message():187] [INFO] "GET /bound/list/75/ HTTP/1.1" 200 400
+[2025-06-30 15:34:15,381][django.server.log_message():187] [INFO] "GET /bound/outdetail/?bound_list=75 HTTP/1.1" 200 2571
+[2025-06-30 15:34:15,408][django.server.log_message():187] [INFO] "GET /container/out_detail/75/ HTTP/1.1" 200 3891
+[2025-06-30 15:34:24,076][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-30 15:34:24,080][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 4581
+[2025-06-30 15:34:24,139][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2863
+[2025-06-30 15:34:24,156][django.server.log_message():187] [INFO] "GET /warehouse/multiple/?max_page=30 HTTP/1.1" 200 371
+[2025-06-30 15:34:24,181][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-30 15:34:24,227][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-30 15:34:24,231][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-30 15:34:24,279][django.server.log_message():187] [INFO] "GET /staff/?staff_name=1 HTTP/1.1" 200 307
+[2025-06-30 15:34:24,283][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:34:24,308][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:34:25,841][django.server.log_message():187] [INFO] "GET /container/list/?page=1&page_size=11 HTTP/1.1" 200 1835
+[2025-06-30 15:34:28,005][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-30 15:34:28,039][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 4722
+[2025-06-30 15:34:28,053][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-30 15:34:28,102][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-30 15:34:28,107][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-06-30 15:34:28,148][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-30 15:34:28,923][django.server.log_message():187] [INFO] "GET /bound/batch/?page=1&page_size=11 HTTP/1.1" 200 7487
+[2025-06-30 15:34:32,668][django.server.log_message():187] [INFO] "GET /bound/list/75/ HTTP/1.1" 200 400
+[2025-06-30 15:34:32,726][django.server.log_message():187] [INFO] "GET /bound/outdetail/?bound_list=75 HTTP/1.1" 200 2571
+[2025-06-30 15:34:32,746][django.server.log_message():187] [INFO] "GET /container/out_detail/75/ HTTP/1.1" 200 3891
+[2025-06-30 15:34:40,969][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2863
+[2025-06-30 15:34:41,001][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-30 15:34:41,033][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-30 15:34:41,063][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-30 15:34:41,110][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-30 15:34:41,115][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 4581
+[2025-06-30 15:34:42,519][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11 HTTP/1.1" 200 4581
+[2025-06-30 15:34:42,537][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-30 15:34:42,554][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-30 15:34:42,571][django.server.log_message():187] [INFO] "GET /warehouse/department/ HTTP/1.1" 200 2863
+[2025-06-30 15:34:42,584][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-30 15:34:42,606][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-30 15:34:44,859][django.server.log_message():187] [INFO] "OPTIONS /bound/list/?page=1&base_type=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 0
+[2025-06-30 15:34:44,965][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 4622
+[2025-06-30 15:34:45,265][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:34:45,268][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:34:53,727][django.server.log_message():187] [INFO] "GET /bound/batch/?page=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 7485
+[2025-06-30 15:35:10,974][django.server.log_message():187] [INFO] "POST /bound/batch/container/ HTTP/1.1" 200 641
+[2025-06-30 15:36:03,991][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:36:04,016][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:36:40,587][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:36:40,589][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:37:44,005][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:37:44,026][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:38:40,534][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:38:40,554][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:39:24,031][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:39:24,034][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:40:40,585][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:40:40,587][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:41:04,045][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:41:04,045][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:41:40,573][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:41:40,573][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:42:44,052][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:42:44,054][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:43:40,599][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:43:40,602][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:44:24,550][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:44:24,570][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:45:05,714][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:45:05,714][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:45:11,107][django.server.log_message():187] [INFO] "GET /bound/batch/?page=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 7484
+[2025-06-30 15:45:14,344][django.server.log_message():187] [INFO] "POST /bound/batch/container/ HTTP/1.1" 200 641
+[2025-06-30 15:45:20,896][django.server.log_message():187] [INFO] "POST /container/out_task/ HTTP/1.1" 200 30
+[2025-06-30 15:45:20,924][django.server.log_message():187] [INFO] "POST /container/batch/ HTTP/1.1" 200 30
+[2025-06-30 15:45:20,961][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 4622
+[2025-06-30 15:45:26,441][django.server.log_message():187] [INFO] "GET /bound/batch/?page=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 7485
+[2025-06-30 15:45:28,333][django.server.log_message():187] [INFO] "POST /bound/batch/container/ HTTP/1.1" 200 641
+[2025-06-30 15:46:03,989][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:46:04,009][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:46:30,976][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-30 15:46:31,005][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-30 15:46:31,052][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-30 15:46:31,057][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=0&page_size=11 HTTP/1.1" 200 4722
+[2025-06-30 15:46:31,071][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-30 15:46:31,090][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-06-30 15:46:34,450][django.server.log_message():187] [INFO] "GET /bound/batch/?page=1&page_size=11 HTTP/1.1" 200 7486
+[2025-06-30 15:46:40,486][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:46:40,505][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:47:57,609][django.server.log_message():187] [INFO] "POST /container/batch/ HTTP/1.1" 200 30
+[2025-06-30 15:47:57,612][django.server.log_message():187] [INFO] "POST /container/out_task/ HTTP/1.1" 200 30
+[2025-06-30 15:47:57,676][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 4622
+[2025-06-30 15:47:59,789][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:47:59,809][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:48:01,608][django.server.log_message():187] [INFO] "POST /bound/batch/container/ HTTP/1.1" 200 641
+[2025-06-30 15:48:05,532][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:48:05,535][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:48:06,185][django.server.log_message():187] [INFO] "OPTIONS /container/locationdetail/?container=85 HTTP/1.1" 200 0
+[2025-06-30 15:48:06,185][django.server.log_message():187] [INFO] "OPTIONS /container/containerdetail/?container=85 HTTP/1.1" 200 0
+[2025-06-30 15:48:06,186][django.server.log_message():187] [INFO] "OPTIONS /container/operate/?status=1&container=85 HTTP/1.1" 200 0
+[2025-06-30 15:48:06,238][django.server.log_message():187] [INFO] "GET /container/locationdetail/?container=85 HTTP/1.1" 200 465
+[2025-06-30 15:48:06,292][django.server.log_message():187] [INFO] "GET /container/containerdetail/?container=85 HTTP/1.1" 200 1681
+[2025-06-30 15:48:06,310][django.server.log_message():187] [INFO] "GET /container/operate/?status=1&container=85 HTTP/1.1" 200 7127
+[2025-06-30 15:49:24,025][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:49:24,054][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:50:40,528][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:50:40,548][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:51:04,035][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:51:04,037][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:51:40,617][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:51:40,620][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:52:44,539][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:52:44,539][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:54:05,431][django.server.log_message():187] [INFO] "GET /bound/list/?page=1&base_type=1&page_size=11&goods_desc__icontains=%E6%9F%9A%E8%8B%B7 HTTP/1.1" 200 4622
+[2025-06-30 15:55:16,949][django.request.log_response():241] [ERROR] Internal Server Error: /wms/outboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:55:16,950][django.request.log_response():241] [ERROR] Internal Server Error: /wms/inboundBills/
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.OperationalError: database is locked
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
+    response = get_response(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 497, in dispatch
+    self.initial(request, *args, **kwargs)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 416, in initial
+    self.check_throttles(request)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\rest_framework\views.py", line 359, in check_throttles
+    if not throttle.allow_request(request, self):
+  File "D:\code\vue\greater_wms\utils\throttle.py", line 27, in allow_request
+    i.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
+    return collector.delete()
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\deletion.py", line 448, in delete
+    count = sql.DeleteQuery(model).delete_batch(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 42, in delete_batch
+    num_deleted += self.do_query(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\subqueries.py", line 20, in do_query
+    cursor = self.get_compiler(using).execute_sql(CURSOR)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\code\vue\greater_wms\.venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.OperationalError: database is locked
+[2025-06-30 15:55:16,967][django.server.log_message():187] [ERROR] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 500 180492
+[2025-06-30 15:55:16,971][django.server.log_message():187] [ERROR] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 500 180459
+[2025-06-30 15:55:40,282][django.server.log_message():187] [INFO] "GET /warehouse/boundcodetype/ HTTP/1.1" 200 250
+[2025-06-30 15:55:40,309][django.server.log_message():187] [INFO] "GET /warehouse/boundtype/ HTTP/1.1" 200 233
+[2025-06-30 15:55:40,335][django.server.log_message():187] [INFO] "GET /warehouse/department/?max_page=1000 HTTP/1.1" 200 9376
+[2025-06-30 15:55:40,358][django.server.log_message():187] [INFO] "GET /warehouse/boundbusiness/ HTTP/1.1" 200 229
+[2025-06-30 15:55:40,379][django.server.log_message():187] [INFO] "GET /warehouse/status/ HTTP/1.1" 200 600
+[2025-06-30 15:55:51,723][django.server.log_message():187] [INFO] "GET /staff/?staff_name=1 HTTP/1.1" 200 307
+[2025-06-30 15:55:51,730][django.server.log_message():187] [INFO] "GET /warehouse/multiple/?max_page=30 HTTP/1.1" 200 371
+[2025-06-30 15:55:51,779][django.server.log_message():187] [INFO] "GET /bound/batch/?page=1&page_size=11 HTTP/1.1" 200 7487
+[2025-06-30 15:55:51,801][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:55:51,824][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:55:55,245][django.server.log_message():187] [INFO] "POST /bound/batch/container/ HTTP/1.1" 200 641
+[2025-06-30 15:56:25,580][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:56:25,648][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:57:31,716][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:57:31,737][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:58:40,542][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:58:40,601][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 15:59:11,752][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 15:59:11,755][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 16:00:40,579][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 16:00:40,582][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 16:00:51,692][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 16:00:51,713][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 16:01:40,586][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 16:01:40,588][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 16:02:31,745][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 16:02:31,749][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 16:03:40,582][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211
+[2025-06-30 16:03:40,585][django.server.log_message():187] [INFO] "GET /wms/inboundBills/?bound_status=0 HTTP/1.1" 200 917
+[2025-06-30 16:04:12,526][django.server.log_message():187] [INFO] "GET /wms/outboundBills/?bound_status=0 HTTP/1.1" 200 2211

+ 1 - 1
templates/src/components/goodscard.vue

@@ -125,7 +125,7 @@
       transition-hide="jump-up"
       @show="prepareDialog()"
     >
-      <q-card style="min-width: 800px">
+      <q-card style="min-width: 900px">
         <q-bar
           class="bg-light-blue-10 text-white rounded-borders"
           style="height: 50px"

+ 176 - 176
templates/src/pages/inbound/predeliverystock.vue

@@ -165,144 +165,144 @@
 <router-view />
 
 <script>
-import { getauth, postauth, putauth, deleteauth } from "boot/axios_request";
-import { date, LocalStorage } from "quasar";
+import { getauth, postauth, putauth, deleteauth } from 'boot/axios_request'
+import { date, LocalStorage } from 'quasar'
 
 export default {
-  name: "PageTask",
-  data() {
+  name: 'PageTask',
+  data () {
     return {
-      createDate1: "",
-      createDate2: "",
-      date_range: "",
-      proxyDate: "",
-      date: "",
-      goods_code: "",
-      goods_desc: "",
-      openid: "",
-      login_name: "",
-      authin: "0",
-      searchUrl: "",
-      pathname: "bound/batch/count/",
-      pathname_previous: "",
-      pathname_next: "",
-      separator: "cell",
+      createDate1: '',
+      createDate2: '',
+      date_range: '',
+      proxyDate: '',
+      date: '',
+      goods_code: '',
+      goods_desc: '',
+      openid: '',
+      login_name: '',
+      authin: '0',
+      searchUrl: '',
+      pathname: 'bound/batch/count/',
+      pathname_previous: '',
+      pathname_next: '',
+      separator: 'cell',
       loading: false,
-      height: "",
+      height: '',
       viewForm: false,
 
       table_list: [],
       columns: [
         {
-          name: "expand",
-          label: "",
-          align: "left",
-          headerStyle: "width: 50px",
+          name: 'expand',
+          label: '',
+          align: 'left',
+          headerStyle: 'width: 50px'
         },
 
         {
-          name: "goods_code",
-          label: "存货编码",
-          field: "goods_code",
-          align: "center",
+          name: 'goods_code',
+          label: '存货编码',
+          field: 'goods_code',
+          align: 'center'
         },
         {
-          name: "goods_desc",
-          label: "存货名称",
-          field: "goods_desc",
-          align: "center",
+          name: 'goods_desc',
+          label: '存货名称',
+          field: 'goods_desc',
+          align: 'center'
         },
 
         {
-          name: "total_quantity",
-          label: "在库数目",
-          field: "total_quantity",
-          align: "center",
+          name: 'total_quantity',
+          label: '在库数目',
+          field: 'total_quantity',
+          align: 'center'
         },
 
         {
-          name: "goods_unit",
-          label: "单位",
-          field: "goods_unit",
-          align: "center",
-          headerStyle: "width: 20px",
-        },
+          name: 'goods_unit',
+          label: '单位',
+          field: 'goods_unit',
+          align: 'center',
+          headerStyle: 'width: 20px'
+        }
       ],
-      filter: "",
+      filter: '',
       pagination: {
         page: 1,
-        rowsPerPage: 11,
+        rowsPerPage: 11
       },
       current: 1,
       max: 0,
       total: 0,
       paginationIpt: 1,
       containers: {},
-      timer: null,
-    };
+      timer: null
+    }
   },
   computed: {
-    interval() {
+    interval () {
       return (
-        this.$t("download_center.start") +
-        " - " +
-        this.$t("download_center.end")
-      );
-    },
+        this.$t('download_center.start') +
+        ' - ' +
+        this.$t('download_center.end')
+      )
+    }
   },
   methods: {
-    class_to_name(class_id) {
+    class_to_name (class_id) {
       const class_map = {
-        1: "整盘",
-        2: "托盘组",
-        3: "零盘",
-      };
-      return class_map[class_id];
+        1: '整盘',
+        2: '托盘组',
+        3: '零盘'
+      }
+      return class_map[class_id]
     },
-    handle_row_expand(row) {
-      const _this = this;
-      row.expand = !row.expand;
+    handle_row_expand (row) {
+      const _this = this
+      row.expand = !row.expand
       if (row.expand) {
         // 添加行级 loading 状态
-        _this.$set(row, "loading", true);
-        getauth("bound/batch/count/" + row.id + "/", {})
+        _this.$set(row, 'loading', true)
+        getauth('bound/batch/count/' + row.id + '/', {})
           .then((res) => {
-            _this.$set(row, "batch_items", res.batch_items);
-            console.log("当前的", row.batch_items);
+            _this.$set(row, 'batch_items', res.batch_items)
+            console.log('当前的', row.batch_items)
           })
           .catch((err) => {
-            _this.$q.notify({ message: err.detail, color: "negative" });
+            _this.$q.notify({ message: err.detail, color: 'negative' })
           })
           .finally(() => {
-            row.loading = false; // 关闭加载状态
-          });
+            row.loading = false // 关闭加载状态
+          })
       }
     },
-    getlog() {
+    getlog () {
       // console.log(this.table_list)
-      console.log("当前loading状态:", this.loading);
+      console.log('当前loading状态:', this.loading)
     },
-    getList(params = {}) {
-      var _this = this;
-      _this.loading = true;
+    getList (params = {}) {
+      var _this = this
+      _this.loading = true
       // 合并基础参数
       const baseParams = {
         page: _this.current,
-        page_size: _this.pagination.rowsPerPage,
-      };
+        page_size: _this.pagination.rowsPerPage
+      }
 
       // 创建URLSearchParams处理参数
       const queryParams = new URLSearchParams({
         ...baseParams,
-        ...params,
-      });
-      console.log(queryParams);
+        ...params
+      })
+      console.log(queryParams)
       // 过滤空值参数
       Array.from(queryParams.entries()).forEach(([key, value]) => {
-        if (value === "" || value === null || value === undefined) {
-          queryParams.delete(key);
+        if (value === '' || value === null || value === undefined) {
+          queryParams.delete(key)
         }
-      });
+      })
 
       getauth(`${_this.pathname}?${queryParams}`)
         .then((res) => {
@@ -310,170 +310,170 @@ export default {
             ...item,
             expand: false,
             batch_items: [],
-            loading: false,
-          }));
-          _this.total = res.count;
-          _this.max = Math.ceil(res.count / _this.pagination.rowsPerPage) || 0;
-          _this.pathname_previous = res.previous;
-          _this.pathname_next = res.next;
+            loading: false
+          }))
+          _this.total = res.count
+          _this.max = Math.ceil(res.count / _this.pagination.rowsPerPage) || 0
+          _this.pathname_previous = res.previous
+          _this.pathname_next = res.next
         })
         .catch((err) => {
           _this.$q.notify({
             message: err.detail,
-            icon: "close",
-            color: "negative",
-          });
+            icon: 'close',
+            color: 'negative'
+          })
         })
         .finally(() => {
-          _this.loading = false;
-        });
+          _this.loading = false
+        })
     },
-    changePageEnter() {
+    changePageEnter () {
       if (Number(this.paginationIpt) < 1) {
-        this.current = 1;
-        this.paginationIpt = 1;
+        this.current = 1
+        this.paginationIpt = 1
       } else if (Number(this.paginationIpt) > this.max) {
-        this.current = this.max;
-        this.paginationIpt = this.max;
+        this.current = this.max
+        this.paginationIpt = this.max
       } else {
-        this.current = Number(this.paginationIpt);
+        this.current = Number(this.paginationIpt)
       }
-      this.getSearchList(this.current);
+      this.getSearchList(this.current)
     },
 
     // 带搜索条件加载
-    getSearchList(page = 1) {
-      this.current = page;
-      this.paginationIpt = page;
+    getSearchList (page = 1) {
+      this.current = page
+      this.paginationIpt = page
       this.getList({
         goods_desc__icontains: this.filter,
-        create_time__range: this.date_range,
-      });
+        create_time__range: this.date_range
+      })
     },
 
-    getListPrevious() {
-      var _this = this;
-      if (LocalStorage.has("auth")) {
+    getListPrevious () {
+      var _this = this
+      if (LocalStorage.has('auth')) {
         getauth(_this.pathname_previous, {})
           .then((res) => {
-            _this.table_list = res.results;
-            _this.pathname_previous = res.previous;
-            _this.pathname_next = res.next;
+            _this.table_list = res.results
+            _this.pathname_previous = res.previous
+            _this.pathname_next = res.next
           })
           .catch((err) => {
             _this.$q.notify({
               message: err.detail,
-              icon: "close",
-              color: "negative",
-            });
-          });
+              icon: 'close',
+              color: 'negative'
+            })
+          })
       } else {
       }
     },
-    getListNext() {
-      var _this = this;
-      if (LocalStorage.has("auth")) {
+    getListNext () {
+      var _this = this
+      if (LocalStorage.has('auth')) {
         getauth(_this.pathname_next, {})
           .then((res) => {
-            _this.table_list = res.results;
+            _this.table_list = res.results
 
-            _this.pathname_previous = res.previous;
-            _this.pathname_next = res.next;
+            _this.pathname_previous = res.previous
+            _this.pathname_next = res.next
           })
           .catch((err) => {
             _this.$q.notify({
               message: err.detail,
-              icon: "close",
-              color: "negative",
-            });
-          });
+              icon: 'close',
+              color: 'negative'
+            })
+          })
       }
     },
-    reFresh() {
-      var _this = this;
-      _this.getSearchList();
+    reFresh () {
+      var _this = this
+      _this.getSearchList()
     },
 
-    updateProxy() {
-      var _this = this;
-      _this.proxyDate = _this.date;
-    },
+    updateProxy () {
+      var _this = this
+      _this.proxyDate = _this.date
+    }
   },
-  created() {
-    var _this = this;
-    if (LocalStorage.has("openid")) {
-      _this.openid = LocalStorage.getItem("openid");
+  created () {
+    var _this = this
+    if (LocalStorage.has('openid')) {
+      _this.openid = LocalStorage.getItem('openid')
     } else {
-      _this.openid = "";
-      LocalStorage.set("openid", "");
+      _this.openid = ''
+      LocalStorage.set('openid', '')
     }
-    if (LocalStorage.has("login_name")) {
-      _this.login_name = LocalStorage.getItem("login_name");
+    if (LocalStorage.has('login_name')) {
+      _this.login_name = LocalStorage.getItem('login_name')
     } else {
-      _this.login_name = "";
-      LocalStorage.set("login_name", "");
+      _this.login_name = ''
+      LocalStorage.set('login_name', '')
     }
-    if (LocalStorage.has("auth")) {
-      const timeStamp = Date.now();
-      const formattedString = date.formatDate(timeStamp, "YYYY/MM/DD");
-      _this.date = formattedString;
-      console.log(_this.date);
-      _this.authin = "1";
-      _this.getList();
+    if (LocalStorage.has('auth')) {
+      const timeStamp = Date.now()
+      const formattedString = date.formatDate(timeStamp, 'YYYY/MM/DD')
+      _this.date = formattedString
+      console.log(_this.date)
+      _this.authin = '1'
+      _this.getList()
     } else {
-      _this.authin = "0";
+      _this.authin = '0'
     }
   },
-  mounted() {
-    var _this = this;
+  mounted () {
+    var _this = this
     if (_this.$q.platform.is.electron) {
-      _this.height = String(_this.$q.screen.height - 290) + "px";
+      _this.height = String(_this.$q.screen.height - 290) + 'px'
     } else {
-      _this.height = _this.$q.screen.height - 290 + "" + "px";
+      _this.height = _this.$q.screen.height - 290 + '' + 'px'
     }
     // _this.timer = setInterval(() => {
     //   _this.getlog()
     // }, 1000)
   },
-  updated() {},
-  destroyed() {},
+  updated () {},
+  destroyed () {},
   // 在 watch 或方法中添加调试代码
   watch: {
-    createDate1(val) {
+    createDate1 (val) {
       if (val) {
         if (val.to) {
-          this.createDate2 = `${val.from} - ${val.to}`;
-          this.date_range = `${val.from},${val.to} `;
+          this.createDate2 = `${val.from} - ${val.to}`
+          this.date_range = `${val.from},${val.to} `
 
           // this.downloadhUrl = this.pathname + 'filelist/?' + 'document_date__range=' + this.date_range
         } else {
-          this.createDate2 = `${val}`;
-          this.dateArray = val.split("/");
+          this.createDate2 = `${val}`
+          this.dateArray = val.split('/')
           this.searchUrl =
             this.pathname +
-            "?" +
-            "document_date__year=" +
+            '?' +
+            'document_date__year=' +
             this.dateArray[0] +
-            "&" +
-            "document_date__month=" +
+            '&' +
+            'document_date__month=' +
             this.dateArray[1] +
-            "&" +
-            "document_date__day=" +
-            this.dateArray[2];
+            '&' +
+            'document_date__day=' +
+            this.dateArray[2]
           // this.downloadhUrl = this.pathname + 'filelist/?' + 'document_date__year=' + this.dateArray[0] + '&' + 'document_date__month=' + this.dateArray[1] + '&' + 'document_date__day=' + this.dateArray[2]
         }
-        this.date_range = this.date_range.replace(/\//g, "-");
+        this.date_range = this.date_range.replace(/\//g, '-')
 
-        this.getSearchList();
-        this.$refs.qDateProxy.hide();
+        this.getSearchList()
+        this.$refs.qDateProxy.hide()
       } else {
-        this.createDate2 = "";
-        this.date_range = "";
-        this.getSearchList();
+        this.createDate2 = ''
+        this.date_range = ''
+        this.getSearchList()
       }
-    },
-  },
-};
+    }
+  }
+}
 </script>
 <style scoped>
 /* 添加在 <style> 中 */

+ 7 - 0
templates/src/pages/stock/management.vue

@@ -183,11 +183,17 @@
                         >
                           {{ "批次号" }}: {{ batch.batchId }}
                         </div>
+                        <div
+                          v-if="batch.time !== 'no_check_time' && batch.time"
+                        >
+                          {{ "库位数目" }}: {{ batch.qty }}
+                        </div>
                         <div
                           v-if="batch.time !== 'no_check_time' && batch.time"
                         >
                           {{ "时间" }}: {{ formatDateTime(batch.time) }}
                         </div>
+                        
                       </div>
                     </div>
                     <div v-else class="batch-no-goods">
@@ -356,6 +362,7 @@ export default {
             status: item[0],
             time: item[1],
             batchId: item[2],
+            qty: item[3],
           };
         }
       });