Explorar o código

先跑流程,中间环节很多操作需要完善,填错表单增加删除

flower_mr hai 2 meses
pai
achega
040069273c

BIN=BIN
bound/__pycache__/urls.cpython-38.pyc


BIN=BIN
bound/__pycache__/views.cpython-38.pyc


+ 3 - 0
bound/urls.py

@@ -7,6 +7,7 @@ re_path(r'^list/(?P<pk>\d+)/$', views.BoundListViewSet.as_view({
     'get': 'retrieve',
     'put': 'update',
     'patch': 'partial_update',
+    'delete': 'destroy',
 }), name="boundlist_1"),
 
 path(r'detail/', views.BoundDetailViewSet.as_view({"get": "list", "post": "create" }), name="bounddetail"), 
@@ -15,6 +16,7 @@ re_path(r'^detail/(?P<pk>\d+)/$', views.BoundDetailViewSet.as_view({
     'get': 'retrieve',
     'put': 'update',
     'patch': 'partial_update',
+    'delete': 'destroy',
 }), name="bounddetail_1"),
 
 path(r'batch/', views.BoundBatchViewSet.as_view({"get": "list", "post": "create" }), name="boundbatch"), 
@@ -23,6 +25,7 @@ re_path(r'^detail/(?P<pk>\d+)/$', views.BoundBatchViewSet.as_view({
     'get': 'retrieve',
     'put': 'update',
     'patch': 'partial_update',
+    'delete': 'destroy',
 }), name="boundbatch_1"),
 
 ]

+ 1 - 0
bound/views.py

@@ -117,6 +117,7 @@ class BoundListViewSet(viewsets.ModelViewSet):
             raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
         else:
             qs.is_delete = True
+            qs.bound_code =qs.bound_code+'-delete'+str(timezone.now().strftime('%Y%m%d%H%M%S'))
             qs.save()
             serializer = self.get_serializer(qs, many=False)
             headers = self.get_success_headers(serializer.data)

BIN=BIN
container/__pycache__/models.cpython-38.pyc


BIN=BIN
container/__pycache__/views.cpython-38.pyc


+ 23 - 0
container/migrations/0002_alter_containerdetailmodel_status_and_more.py

@@ -0,0 +1,23 @@
+# Generated by Django 4.1.2 on 2025-03-31 20:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('container', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='containerdetailmodel',
+            name='status',
+            field=models.IntegerField(choices=[(0, '空盘'), (1, '组盘'), (2, '已出库')], default=0, verbose_name='状态'),
+        ),
+        migrations.AlterField(
+            model_name='containeroperationmodel',
+            name='operation_type',
+            field=models.CharField(choices=[('container', '组盘'), ('inbound', '入库'), ('outbound', '出库'), ('adjust', '调整')], max_length=20, verbose_name='操作类型'),
+        ),
+    ]

BIN=BIN
container/migrations/__pycache__/0002_alter_containerdetailmodel_status_and_more.cpython-38.pyc


+ 8 - 1
container/models.py

@@ -25,6 +25,11 @@ class ContainerListModel(models.Model):
 
 # 明细表:托盘详细数据记录当前组盘的 批次 数量 使用托盘码和状态来获取、托盘上的物料信息,
 class ContainerDetailModel(models.Model):
+    BATCH_STATUS=(
+        (0, '空盘'),
+        (1, '组盘'),
+        (2, '已出库')
+    )
     month = models.IntegerField(verbose_name='月份')
     container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='details')
     batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次')
@@ -32,7 +37,7 @@ class ContainerDetailModel(models.Model):
     goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
     goods_qty = models.IntegerField(verbose_name='数量')
     goods_weight = models.DecimalField(max_digits=10, decimal_places=3, verbose_name='重量')
-    status = models.IntegerField(default=1, verbose_name='状态')           # 0: 未使用 1: 使用中 2: 已出库
+    status = models.IntegerField(choices=BATCH_STATUS,default=0, verbose_name='状态')           # 0: 未使用 1: 使用中 2: 已出库
     creater = models.CharField(max_length=50, verbose_name='创建人')
     create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
     update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
@@ -46,8 +51,10 @@ class ContainerDetailModel(models.Model):
 # 明细表:操作记录 记录每次出入库的记录,使用goods来进行盘点,使用托盘码来进行托盘的操作记录
 class ContainerOperationModel(models.Model):
     OPERATION_TYPES = (
+        ('container','组盘'),
         ('inbound', '入库'),
         ('outbound', '出库'), 
+        ('adjust', '调整'),
     )
     month = models.IntegerField(verbose_name='月份')
     container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='operations')

+ 44 - 9
container/views.py

@@ -250,26 +250,26 @@ class ContainerDetailViewSet(viewsets.ModelViewSet):
                 bound_obj.goods_in_qty += batch.get("goods_qty", 0)
                 if bound_obj.goods_in_qty >= bound_obj.goods_qty:
                     bound_obj.goods_in_qty = bound_obj.goods_qty
-                    bound_obj.status = 2 
+                    bound_obj.status = 1 # 批次状态为组盘完成
                     print('批次id',bound_obj.id) 
                     bound_detail_obj = BoundDetailModel.objects.filter(bound_batch=bound_obj.id).first()
                     if bound_detail_obj:
-                        bound_detail_obj.status = 2
+                        bound_detail_obj.status = 1
                         bound_detail_obj.save()
                         print('入库申请id',bound_detail_obj.bound_list_id)
                         # 入库申请全部批次入库完成
                         bound_batch_all = BoundDetailModel.objects.filter(bound_list=bound_detail_obj.bound_list_id).all()
-                        if bound_batch_all.count() == bound_batch_all.filter(status=2).count():
+                        if bound_batch_all.count() == bound_batch_all.filter(status=1).count():
                             bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list_id).first()
                             print('当前状态',bound_list_obj.bound_status)
                             bound_list_obj.bound_status = 102
                             print('更新状态',bound_list_obj.bound_status)
                             bound_list_obj.save()
-                            print('入库申请全部批次入库完成')
+                            print('入库申请全部批次组盘完成')
                         else:
-                            print('入库申请部分批次入库完成')
+                            print('入库申请部分批次组盘完成')
                 else:
-                    bound_obj.status = 1
+                    bound_obj.status = 0
                 
                 bound_obj.save()  # 保存到数据库
                 # 创建托盘详情记录(每个批次独立)
@@ -289,6 +289,24 @@ class ContainerDetailViewSet(viewsets.ModelViewSet):
                     serializer = self.get_serializer(data=detail_data)
                     serializer.is_valid(raise_exception=True)
                     serializer.save()  # 必须保存到数据库
+                    operate_data = {
+                        "month" : data['month'],
+                        "container": data['container'],  # 托盘ID
+                        "operation_type" : 'container',
+                        "batch" : bound_obj.id,  # 外键关联批次
+                        "goods_code": bound_obj.goods_code,
+                        "goods_desc": bound_obj.goods_desc,
+                        "goods_qty": goods_qty,
+                        "goods_weight": bound_obj.goods_weight,
+                        "operator": data.get('creater', 'zl'),  # 默认值兜底
+                        "timestamp": timezone.now(),
+                        "from_location": "container",
+                        "to_location": "container",
+                        "memo": "入库PDA组盘,pda入库"+str(bound_obj.goods_code)+"数量"+str(goods_qty)
+                    }
+                    serializer_operate = ContainerOperationPostSerializer(data=operate_data)
+                    serializer_operate.is_valid(raise_exception=True)
+                    serializer_operate.save()  # 必须保存到数据库
 
                 elif bound_obj.goods_in_qty-last_qty > 0:
                     print('批次数量不一致')
@@ -306,10 +324,27 @@ class ContainerDetailViewSet(viewsets.ModelViewSet):
                     serializer = self.get_serializer(data=detail_data)
                     serializer.is_valid(raise_exception=True)
                     serializer.save()  # 必须保存到数据库
+                    operate_data = {
+                        "month" : data['month'],
+                        "container": data['container'],  # 托盘ID
+                        "operation_type" : 'container',
+                        "batch" : bound_obj.id,  # 外键关联批次
+                        "goods_code": bound_obj.goods_code,
+                        "goods_desc": bound_obj.goods_desc,
+                        "goods_qty": bound_obj.goods_in_qty-last_qty,
+                        "goods_weight": bound_obj.goods_weight,
+                        "operator": data.get('creater', 'zl'),  # 默认值兜底
+                        "timestamp": timezone.now(),
+                        "from_location": "container",
+                        "to_location": "container",
+                        "memo": "入库PDA组盘,(数量不一致)pda入库"+str(bound_obj.goods_code)+"数量"+str(goods_qty)
+                    }
+                    serializer_operate = ContainerOperationPostSerializer(data=operate_data)
+                    serializer_operate.is_valid(raise_exception=True)
+                    serializer_operate.save()  # 必须保存到数据库
                 else :
-                    print('重复入库')
-                
-
+                    print('重复组盘')
+                    
             except Exception as e:
                 print(f"更新批次 {bound_number} 失败: {str(e)}")
                 continue

BIN=BIN
db.sqlite3


BIN=BIN
greaterwms/__pycache__/settings.cpython-38.pyc


+ 250 - 0
logs/error.log

@@ -1353,3 +1353,253 @@ Traceback (most recent call last):
   File "D:\Document\code\vue\greater_wms\.\container\views.py", line 131, in get_container_wcs
     'data':current_task.to_dict()
 AttributeError: 'ContainerWCSModel' object has no attribute 'to_dict'
+[2025-03-31 20:59:51,371][django.request.log_response():241] [ERROR] Internal Server Error: /bound/list/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\bound\views.py", line 99, in create
+    serializer.save()
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 962, in create
+    instance = ModelClass._default_manager.create(**validated_data)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 671, in create
+    obj.save(force_insert=True, using=self.db)
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 812, in save
+    self.save_base(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 863, in save_base
+    updated = self._save_table(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1006, in _save_table
+    results = self._do_insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1047, in _do_insert
+    return manager._insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1790, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1660, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+[2025-03-31 21:08:21,337][django.request.log_response():241] [ERROR] Internal Server Error: /bound/list/5/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\bound\views.py", line 121, in destroy
+    qs.save()
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 812, in save
+    self.save_base(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 863, in save_base
+    updated = self._save_table(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 976, in _save_table
+    updated = self._do_update(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1040, in _do_update
+    return filtered._update(values) > 0
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1215, in _update
+    return query.get_compiler(self.db).execute_sql(CURSOR)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1822, in execute_sql
+    cursor = super().execute_sql(result_type)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+[2025-03-31 21:28:49,881][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 54, in retrieve
+    instance = self.get_object()
+  File "d:\language\python38\lib\site-packages\rest_framework\generics.py", line 83, in get_object
+    queryset = self.filter_queryset(self.get_queryset())
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 198, in get_queryset
+    return ContainerDetailModel.objects.filter( is_delete=False)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1407, in build_filter
+    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1217, in solve_lookup_type
+    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1709, in names_to_path
+    raise FieldError(
+django.core.exceptions.FieldError: Cannot resolve keyword 'is_delete' into field. Choices are: batch, batch_id, container, container_id, create_time, creater, goods_code, goods_desc, goods_qty, goods_weight, id, month, status, update_time
+[2025-03-31 21:31:48,711][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 54, in retrieve
+    instance = self.get_object()
+  File "d:\language\python38\lib\site-packages\rest_framework\generics.py", line 83, in get_object
+    queryset = self.filter_queryset(self.get_queryset())
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 198, in get_queryset
+    return ContainerDetailModel.objects.filter( is_delete=False)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1407, in build_filter
+    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1217, in solve_lookup_type
+    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1709, in names_to_path
+    raise FieldError(
+django.core.exceptions.FieldError: Cannot resolve keyword 'is_delete' into field. Choices are: batch, batch_id, container, container_id, create_time, creater, goods_code, goods_desc, goods_qty, goods_weight, id, month, status, update_time

+ 261 - 0
logs/server.log

@@ -1383,3 +1383,264 @@ Traceback (most recent call last):
   File "D:\Document\code\vue\greater_wms\.\container\views.py", line 131, in get_container_wcs
     'data':current_task.to_dict()
 AttributeError: 'ContainerWCSModel' object has no attribute 'to_dict'
+[2025-03-31 16:04:02,621][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-31 16:04:13,975][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-31 16:08:12,495][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-31 16:08:27,844][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-31 17:06:36,618][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-31 20:59:51,371][django.request.log_response():241] [ERROR] Internal Server Error: /bound/list/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\bound\views.py", line 99, in create
+    serializer.save()
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 962, in create
+    instance = ModelClass._default_manager.create(**validated_data)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 671, in create
+    obj.save(force_insert=True, using=self.db)
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 812, in save
+    self.save_base(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 863, in save_base
+    updated = self._save_table(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1006, in _save_table
+    results = self._do_insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1047, in _do_insert
+    return manager._insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1790, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1660, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+[2025-03-31 21:08:21,337][django.request.log_response():241] [ERROR] Internal Server Error: /bound/list/5/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\bound\views.py", line 121, in destroy
+    qs.save()
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 812, in save
+    self.save_base(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 863, in save_base
+    updated = self._save_table(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 976, in _save_table
+    updated = self._do_update(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1040, in _do_update
+    return filtered._update(values) > 0
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1215, in _update
+    return query.get_compiler(self.db).execute_sql(CURSOR)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1822, in execute_sql
+    cursor = super().execute_sql(result_type)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1398, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\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: boundlist.bound_code
+[2025-03-31 21:21:25,773][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-31 21:22:47,773][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-31 21:27:43,237][django.request.log_response():241] [WARNING] Not Found: /caontainer/flow/
+[2025-03-31 21:27:46,541][django.request.log_response():241] [WARNING] Not Found: /caontainer/list/
+[2025-03-31 21:27:50,463][django.request.log_response():241] [WARNING] Not Found: /caontainer/list/
+[2025-03-31 21:27:56,384][django.request.log_response():241] [WARNING] Not Found: /caontainer/list/
+[2025-03-31 21:28:49,881][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 54, in retrieve
+    instance = self.get_object()
+  File "d:\language\python38\lib\site-packages\rest_framework\generics.py", line 83, in get_object
+    queryset = self.filter_queryset(self.get_queryset())
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 198, in get_queryset
+    return ContainerDetailModel.objects.filter( is_delete=False)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1407, in build_filter
+    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1217, in solve_lookup_type
+    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1709, in names_to_path
+    raise FieldError(
+django.core.exceptions.FieldError: Cannot resolve keyword 'is_delete' into field. Choices are: batch, batch_id, container, container_id, create_time, creater, goods_code, goods_desc, goods_qty, goods_weight, id, month, status, update_time
+[2025-03-31 21:31:48,711][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\mixins.py", line 54, in retrieve
+    instance = self.get_object()
+  File "d:\language\python38\lib\site-packages\rest_framework\generics.py", line 83, in get_object
+    queryset = self.filter_queryset(self.get_queryset())
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 198, in get_queryset
+    return ContainerDetailModel.objects.filter( is_delete=False)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1407, in build_filter
+    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1217, in solve_lookup_type
+    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1709, in names_to_path
+    raise FieldError(
+django.core.exceptions.FieldError: Cannot resolve keyword 'is_delete' into field. Choices are: batch, batch_id, container, container_id, create_time, creater, goods_code, goods_desc, goods_qty, goods_weight, id, month, status, update_time

+ 5 - 2
templates/src/layouts/MainLayout.vue

@@ -103,8 +103,11 @@
             <q-item-section avatar><q-icon name="speaker_notes" /></q-item-section>
             <q-item-section>{{ $t("menuItem.inbound") }}</q-item-section>
           </q-item>
-          <q-item clickable :to="{ name: 'container' }" @click="linkChange('container')" v-ripple exact
-         >
+          <q-item clickable :to="{ name: 'containerlist' }" @click="linkChange('container')" v-ripple exact
+            :active="link === 'container' && link !== ''" :class="{
+              'my-menu-link': link === 'container' && link !== '',
+            }">
+ 
             <q-item-section avatar><q-icon name="stay_current_landscape" /></q-item-section>
             <q-item-section>托盘管理</q-item-section>
           </q-item>

+ 1 - 1
templates/src/pages/container/container.vue

@@ -50,7 +50,7 @@
     name: 'Pagedashboard',
     data () {
       return {
-        detaillink: 'inboundAndOutbound'
+        detaillink: 'containerlist'
       }
     },
     methods: {}

+ 141 - 644
templates/src/pages/container/containerlist.vue

@@ -7,38 +7,17 @@
           no-results-label="No data you want" :table-style="{ height: height }" flat bordered>
           <template v-slot:top>
             <q-btn-group push>
-              <q-btn :label="$t('new')" icon="add" @click="newForm = true">
-                <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
-                  content-style="font-size: 12px">{{ $t('newtip') }}</q-tooltip>
-              </q-btn>
+
               <q-btn :label="$t('refresh')" icon="refresh" @click="reFresh()">
                 <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
                   content-style="font-size: 12px">{{ $t('refreshtip') }}</q-tooltip>
               </q-btn>
-              <q-btn :label="$t('downloadasnlist')" icon="cloud_download" @click="downloadlistData()">
-              </q-btn>
+
             </q-btn-group>
   
             <q-space />
   
             <div class="flex items-center">
-              <div class="q-mr-md">{{ $t("download_center.createTime") }}</div>
-              <q-input readonly outlined dense v-model="createDate2" :placeholder="interval">
-                <template v-slot:append>
-                  <q-icon name="event" class="cursor-pointer">
-                    <q-popup-proxy ref="qDateProxy" transition-show="scale" transition-hide="scale">
-                      <q-date v-model="createDate1" range>
-                        <div class="row items-center justify-end q-gutter-sm">
-                          <q-btn :label="$t('index.cancel')" color="primary" flat v-close-popup />
-                          <q-btn :label="$t('index.clear')" color="primary" @click="createDate2 = ''; createDate1 = '';"
-                            v-close-popup />
-  
-                        </div>
-                      </q-date>
-                    </q-popup-proxy>
-                  </q-icon>
-                </template>
-              </q-input>
               <q-btn-group push class="q-ml-md">
               </q-btn-group>
               <q-input outlined rounded dense debounce="300" color="primary" v-model="filter" :placeholder="$t('search')"
@@ -51,7 +30,6 @@
           </template>
           <template v-slot:body="props">
             <q-tr :props="props">
-              
                 <template v-if="props.row.id === editid">
               <q-td key="detail" :props="props">
                 <q-btn round flat push color="black" icon="description" @click="detailData(props.row)">
@@ -81,14 +59,14 @@
               </template>
   
               <template v-if="props.row.id === editid">
-                <q-td key="container_location" :props="props">
-                  <q-input dense outlined square v-model="editFormData.container_location"
+                <q-td key="current_location" :props="props">
+                  <q-input dense outlined square v-model="editFormData.current_location"
                     :label="'当前位置'"
                     :rules="[val => (val && val.length > 0) || error2]" />
                 </q-td>
               </template>
               <template v-else-if="props.row.id !== editid">
-                <q-td key="container_location" :props="props">{{ props.row.container_location }}</q-td>
+                <q-td key="current_location" :props="props">{{ props.row.current_location }}</q-td>
               </template>
   
   
@@ -104,199 +82,14 @@
               </template>
   
               <template v-if="props.row.id === editid">
-                <q-td key="business_type" :props="props">
-                  <q-input dense outlined square v-model="editFormData.business_type"
-                    :label="$t('goods.view_goodslist.business_type')"
+                <q-td key="last_operation" :props="props">
+                  <q-input dense outlined square v-model="editFormData.last_operation"
+                    :label="'最后操作时间'"
                     :rules="[val => (val && val.length > 0) || error4]" />
                 </q-td>
               </template>
               <template v-else-if="props.row.id !== editid">
-                <q-td key="business_type" :props="props">{{ props.row.business_type }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="iout_type" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.iout_type"
-                    :label="$t('goods.view_goodslist.iout_type')" :rules="[val => (val && val > 0) || error5]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="iout_type" :props="props">{{ props.row.iout_type }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="department" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.department"
-                    :label="$t('goods.view_goodslist.department')" :rules="[val => (val && val > 0) || error6]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="department" :props="props">{{ props.row.department }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="warehouse_code" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.warehouse_code"
-                    :label="$t('goods.view_goodslist.warehouse_code')" :rules="[val => (val && val > 0) || error7]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="warehouse_code" :props="props">{{ props.row.warehouse_code }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="warehouse_name" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.warehouse_name"
-                    :label="$t('goods.view_goodslist.warehouse_name')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="warehouse_name" :props="props">{{ props.row.warehouse_name }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_code" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_code"
-                    :label="$t('goods.view_goodslist.goods_code')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_code" :props="props">{{ props.row.goods_code }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_desc" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_desc"
-                    :label="$t('goods.view_goodslist.goods_desc')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_desc" :props="props">{{ props.row.goods_desc }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_std" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_std"
-                    :label="$t('goods.view_goodslist.goods_std')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_std" :props="props">{{ props.row.goods_std }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_batch" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_batch"
-                    :label="$t('goods.view_goodslist.goods_batch')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_batch" :props="props">{{ props.row.goods_batch }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="in_batch" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.in_batch"
-                    :label="$t('goods.view_goodslist.in_batch')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="in_batch" :props="props">{{ props.row.in_batch }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="out_batch" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.out_batch"
-                    :label="$t('goods.view_goodslist.out_batch')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="out_batch" :props="props">{{ props.row.out_batch }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_unit" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_unit"
-                    :label="$t('goods.view_goodslist.goods_unit')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_unit" :props="props">{{ props.row.goods_unit }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_in" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_in" type="number"
-                    :label="$t('goods.view_goodslist.goods_in')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_in" :props="props">{{ props.row.goods_in }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_out" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_out" type="number"
-                    :label="$t('goods.view_goodslist.goods_out')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_out" :props="props">{{ props.row.goods_out }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="goods_notes" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.goods_notes"
-                    :label="$t('goods.view_goodslist.goods_notes')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="goods_notes" :props="props">{{ props.row.goods_notes }}</q-td>
-              </template>
-  
-              <template v-if="props.row.id === editid">
-                <q-td key="creator" :props="props">
-                  <q-input dense outlined square v-model.number="editFormData.creator"
-                    :label="$t('goods.view_goodslist.creator')" :rules="[val => (val && val > 0) || error8]" />
-                </q-td>
-              </template>
-              <template v-else-if="props.row.id !== editid">
-                <q-td key="creator" :props="props">{{ props.row.creator }}</q-td>
-              </template>
-  
-  
-              <template v-if="!editMode">
-                <q-td key="action" :props="props" style="width: 100px">
-                  <q-btn round flat push color="info" icon="print" @click="viewData(props.row)">
-                    <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
-                      content-style="font-size: 12px">
-                      {{ $t('goods.view_goodslist.print_goods_label') }}
-                    </q-tooltip>
-                  </q-btn>
-                  <q-btn round flat push color="purple" icon="edit" @click="editData(props.row)">
-                    <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
-                      content-style="font-size: 12px">{{ $t('edit') }}</q-tooltip>
-                  </q-btn>
-                  <q-btn round flat push color="dark" icon="delete" @click="deleteData(props.row.id)">
-                    <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
-                      content-style="font-size: 12px">{{ $t('delete') }}</q-tooltip>
-                  </q-btn>
-                </q-td>
-              </template>
-              <template v-else-if="editMode">
-                <template v-if="props.row.id === editid">
-                  <q-td key="action" :props="props" style="width: 100px">
-                    <q-btn round flat push color="secondary" icon="check" @click="editDataSubmit()">
-                      <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
-                        content-style="font-size: 12px">{{ $t('confirmedit') }}</q-tooltip>
-                    </q-btn>
-                    <q-btn round flat push color="red" icon="close" @click="editDataCancel()">
-                      <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
-                        content-style="font-size: 12px">{{ $t('canceledit') }}</q-tooltip>
-                    </q-btn>
-                  </q-td>
-                </template>
-                <template v-else-if="props.row.id !== editid"></template>
+                <q-td key="last_operation" :props="props">{{ props.row.last_operation }}</q-td>
               </template>
             </q-tr>
           </template>
@@ -316,115 +109,107 @@
           <q-btn flat push color="dark" :label="$t('no_data')"></q-btn>
         </div>
       </template>
-      <q-dialog v-model="newForm">
-        <q-card class="shadow-24">
-          <q-bar class="bg-light-blue-10 text-white rounded-borders" style="height: 50px">
-            <div>{{ $t('newtip') }}</div>
-            <q-space />
-            <q-btn dense flat icon="close" v-close-popup>
-              <q-tooltip content-class="bg-amber text-black shadow-4">{{ $t('index.close') }}</q-tooltip>
-            </q-btn>
-          </q-bar>
-          <q-card-section style="max-height: 325px; width: 400px" class="scroll">
-            <q-input dense outlined square v-model="newFormData.goods_code" :label="$t('goods.view_goodslist.goods_code')"
-              autofocus :rules="[val => (val && val.length > 0) || error1]" @keyup.enter="newDataSubmit()" />
-            <q-input dense outlined square v-model="newFormData.goods_desc" :label="$t('goods.view_goodslist.goods_desc')"
-              :rules="[val => (val && val.length > 0) || error2]" @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_supplier" :options="supplier_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_supplier')"
-              :rules="[val => (val && val.length > 0) || error3]" @keyup.enter="newDataSubmit()" />
-            <q-input dense outlined square v-model.number="newFormData.goods_weight" type="number"
-              :label="$t('goods.view_goodslist.goods_weight')" :rules="[val => (val && val > 0) || error4]"
-              @keyup.enter="newDataSubmit()" />
-            <q-input dense outlined square v-model.number="newFormData.goods_w" type="number"
-              :label="$t('goods.view_goodslist.goods_w')" :rules="[val => (val && val > 0) || error5]"
-              @keyup.enter="newDataSubmit()" />
-            <q-input dense outlined square v-model.number="newFormData.goods_d" type="number"
-              :label="$t('goods.view_goodslist.goods_d')" :rules="[val => (val && val > 0) || error6]"
-              @keyup.enter="newDataSubmit()" />
-            <q-input dense outlined square v-model.number="newFormData.goods_h" type="number"
-              :label="$t('goods.view_goodslist.goods_h')" :rules="[val => (val && val > 0) || error7]"
-              @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_unit" :options="goods_unit_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_unit')"
-              :rules="[val => (val && val.length > 0) || error8]" @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_class" :options="goods_class_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_class')"
-              :rules="[val => (val && val.length > 0) || error9]" @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_brand" :options="goods_brand_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_brand')"
-              :rules="[val => (val && val.length > 0) || error10]" @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_color" :options="goods_color_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_color')"
-              :rules="[val => (val && val.length > 0) || error11]" @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_shape" :options="goods_shape_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_shape')"
-              :rules="[val => (val && val.length > 0) || error12]" @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_specs" :options="goods_specs_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_specs')"
-              :rules="[val => (val && val.length > 0) || error13]" @keyup.enter="newDataSubmit()" />
-            <q-select dense outlined square v-model="newFormData.goods_origin" :options="goods_origin_list"
-              transition-show="scale" transition-hide="scale" :label="$t('goods.view_goodslist.goods_origin')"
-              :rules="[val => (val && val.length > 0) || error14]" @keyup.enter="newDataSubmit()" />
-            <q-input dense outlined square v-model.number="newFormData.goods_cost" type="number"
-              :label="$t('goods.view_goodslist.goods_cost')" :rules="[val => (val && val > 0) || error15]"
-              @keyup.enter="newDataSubmit()" />
-            <q-input dense outlined square v-model.number="newFormData.goods_price" type="number"
-              :label="$t('goods.view_goodslist.goods_price')" :rules="[val => (val && val > 0) || error16]"
-              @keyup.enter="newDataSubmit()" />
-          </q-card-section>
-          <div style="float: right; padding: 15px 15px 15px 0">
-            <q-btn color="white" text-color="black" style="margin-right: 25px" @click="newDataCancel()">{{ $t('cancel')
-            }}</q-btn>
-            <q-btn color="primary" @click="newDataSubmit()">{{ $t('submit') }}</q-btn>
-          </div>
-        </q-card>
-      </q-dialog>
-      <q-dialog v-model="deleteForm">
-        <q-card class="shadow-24">
-          <q-bar class="bg-light-blue-10 text-white rounded-borders" style="height: 50px">
-            <div>{{ $t('delete') }}</div>
-            <q-space />
-            <q-btn dense flat icon="close" v-close-popup>
-              <q-tooltip>{{ $t('index.close') }}</q-tooltip>
-            </q-btn>
-          </q-bar>
-          <q-card-section style="max-height: 325px; width: 400px" class="scroll">{{ $t('deletetip') }}</q-card-section>
-          <div style="float: right; padding: 15px 15px 15px 0">
-            <q-btn color="white" text-color="black" style="margin-right: 25px" @click="deleteDataCancel()">{{ $t('cancel')
-            }}</q-btn>
-            <q-btn color="primary" @click="deleteDataSubmit()">{{ $t('submit') }}</q-btn>
-          </div>
-        </q-card>
-      </q-dialog>
-      <q-dialog v-model="viewForm">
-        <div id="printMe" style="width: 400px;height:280px;background-color: white">
-          <q-card-section>
-            <div class="row" style="height: 50px">
-              <div class="col-3"><img src="statics/goods/logo.png"
-                  style="width: 60px;height: 50px;margin-top: 5px;margin-left: 5px" /></div>
-              <div class="col-9" style="height: 50px;float: contour;margin-top: 10px">
-                <p style="font-size: 20px;font-weight: 550">{{ $t('goods.view_goodslist.goods_code') + ':' + goods_code }}
-                </p>
-              </div>
-            </div>
-            <hr />
-            <div class="row">
-              <div class="col-8" style="margin-top: 30px;padding-left: 3%">
-                <p style="font-size: 20px;font-weight: 550">{{ $t('goods.view_goodslist.goods_name') + ':' }}</p>
-                <p style="font-size: 20px;font-weight: 550">{{ goods_desc }}</p>
-              </div>
-              <div class="col-4" style="margin-top: 25px;"><img :src="bar_code" style="width: 70%;margin-left: 23px" />
-              </div>
-            </div>
-          </q-card-section>
-        </div>
-        <div style="float: right; padding: 15px 15px 15px 0"><q-btn color="primary" icon="print"
-            v-print="printObj">print</q-btn></div>
-      </q-dialog>
+
+      <q-dialog v-model="detailForm" transition-show="jump-down" transition-hide="jump-up" >
+            <q-card style="min-width: 900px; ">
+                <q-bar class="bg-light-blue-10 text-white rounded-borders" style="height: 50px">
+                    <div>
+                        {{ "批次信息" }}
+                    </div>
+                    <q-space></q-space>
+                    <q-btn dense flat icon="close" v-close-popup>
+                        <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[20, 20]"
+                            content-style="font-size: 12px">
+                            {{ $t("index.close") }}</q-tooltip>
+                    </q-btn>
+                </q-bar>
+                <q-card-section class="q-pt-md ">
+                    <q-tabs v-model="activeTab">
+                        <q-tab name="tab1" label="入库信息" />
+                        <!-- <q-tab name="tab2" label="货物信息" /> -->
+                    </q-tabs>
+                </q-card-section>
+                <!-- 选项卡内容 -->
+                <q-tab-panels v-model="activeTab" animated>
+                    <q-tab-panel name="tab1" style="height:70px">
+                  
+                        <div class="row q-gutter-x-md">
+                            <div class="col column q-gutter-y-md">
+                              <q-input dense outlined square v-model="table_detail.bound_date" :label="'单据时间'" :readonly=true />
+
+                            </div>
+                            <div class="col column q-gutter-y-md">
+                              <q-input dense outlined square v-model="table_detail.bound_code" :label="'单据编码'" :readonly=true />
+                              
+                            </div>
+                        </div>
+                       
+                    </q-tab-panel >
+                  </q-tab-panels>
+                  <div style="float: right; padding: 15px 15px 50px 15px; min-width: 100%" flow="row wrap">
+                      <q-card class="q-mb-md" bordered>
+                        <q-card-actions class="q-px-none" style="position: absolute; right: 20px; top: 10px; z-index: 100">
+                          <q-btn v-if="!onlyread" icon="add" flat dense color="primary"  @click="addbatch(table_detail.id)" :label="$t('stock.add')" />
+                          
+                        </q-card-actions>
+                        <q-card-section>
+                          <template >
+                            <div class="text-h6 q-mb-md">{{ "批次信息" }}</div>
+                            <template v-if=" batch_detail.length > 0">
+                              <div 
+                                v-for="(item, index) in batch_detail" 
+                                :key="index"
+                                class="row q-col-gutter-md q-mb-sm"
+                              >             
+                                  <div class="col"    style="min-width: 150px">
+                                    <q-input 
+                                      v-model="item.bound_batch.bound_number" 
+                                      :label="'批次'" 
+                                      :readonly="onlyread" 
+                                      dense outlined 
+                                
+                                    />
+                                  </div>
+                                  <div class="col">
+                                    <q-input 
+                                      v-model="item.bound_batch.goods_desc" 
+                                      :label="'货物'"
+                                      :readonly="onlyread" 
+                                      dense outlined 
+                                    />
+                                  </div>
+                                  <div class="col">
+                                    <q-input 
+                                      v-model="item.bound_batch.goods_weight" 
+                                      :label="'单重'"
+                                      :readonly="onlyread" 
+                                      dense outlined 
+                                    />
+                                  </div>
+                                  <div class="col">
+                                    <q-input 
+                                      v-model="item.bound_batch.goods_qty" 
+                                      :label="'数量'"
+                                      :readonly="onlyread" 
+                                      dense outlined 
+                                    />
+                                  </div>
+                                  <div class="col" style="max-width: 50px">
+                                  <q-btn v-if="!onlyread" icon="delete" flat dense color="primary" @click="addbatch(table_detail.id)" style="margin-top:1px;"/>
+                                  </div>
+                              </div>
+                            </template>
+
+                          </template>
+                        </q-card-section>
+                      </q-card>
+                  </div>
+            </q-card>
+        </q-dialog>
+
     </div>
   </template>
-  <router-view />
+
   
   <script>
   import { getauth, postauth, putauth, deleteauth } from 'boot/axios_request'
@@ -435,32 +220,19 @@
     name: 'Pageflowlist',
     data() {
       return {
-        createDate1: '',
-        createDate2: '',
-        date_range: '',
-        proxyDate: '',
-        date: '',
         goods_code: '',
         goods_desc: '',
         openid: '',
         login_name: '',
         authin: '0',
         searchUrl: '',
-        pathname: 'reportcenter/flow/',
-        pathfilename: 'reportcenter/file/',
-  
+        pathname: 'container/list/',
         pathname_previous: '',
         pathname_next: '',
         separator: 'cell',
         loading: false,
         height: '',
-        viewForm: false,
-        printObj: {
-          id: 'printMe',
-          popTitle: this.$t('inbound.asn')
-        },
         table_list: [],
-  
         columns: [
             { name :'detail',label:'详情', field: 'detail', align: 'center'},
             { name: 'container_code', required: true, label: '托盘编码', align: 'center', field: 'container_code' },
@@ -474,64 +246,21 @@
           page: 1,
           rowsPerPage: 11
         },
-        newForm: false,
-        newFormData: {
-          document_date: '',
-          document_number: '',
-          document_type: '',
-          business_type: '',
-          iout_type: '',
-          department: '',
-          warehouse_code: '',
-          warehouse_name: '',
-          goods_code: '',
-          goods_desc: '',
-          goods_std: '',
-          goods_batch: '',
-          in_batch: '',
-          out_batch: '',
-          goods_unit: '',
-          goods_in: '',
-          goods_out: '',
-          goods_notes: '',
-          creator: ''
-        },
         editid: 0,
         editFormData: {},
-        editMode: false,
-        deleteForm: false,
-        deleteid: 0,
-        bar_code: '',
+        detailForm: false,
+        activeTab: 'tab1',
+        table_detail: {},
+        batch_detail: [],
         error1: this.$t('goods.view_goodslist.error1'),
-        error2: this.$t('goods.view_goodslist.error2'),
-        error3: this.$t('goods.view_goodslist.error3'),
-        error4: this.$t('goods.view_goodslist.error4'),
-        error5: this.$t('goods.view_goodslist.error5'),
-        error6: this.$t('goods.view_goodslist.error6'),
-        error7: this.$t('goods.view_goodslist.error7'),
-        error8: this.$t('goods.view_unit.error1'),
-        error9: this.$t('goods.view_class.error1'),
-        error10: this.$t('goods.view_brand.error1'),
-        error11: this.$t('goods.view_color.error1'),
-        error12: this.$t('goods.view_shape.error1'),
-        error13: this.$t('goods.view_specs.error1'),
-        error14: this.$t('goods.view_origin.error1'),
-        error15: this.$t('goods.view_goodslist.error8'),
-        error16: this.$t('goods.view_goodslist.error9'),
         current: 1,
         max: 0,
         total: 0,
         paginationIpt: 1,
-        current: 1,
-  
-      }
-  
-    },
-    computed: {
-      interval() {
-        return this.$t('download_center.start') + ' - ' + this.$t('download_center.end')
       }
+
     },
+
     methods: {
       getList(params = {}) {
         var _this = this
@@ -592,57 +321,10 @@
         this.current = page
         this.paginationIpt = page
         this.getList({
-          goods_desc__icontains: this.filter,
-          document_date__range: this.date_range
-        })
-      },
-      downloadlistData() {
-        this.getfileList()
-  
-      },
-      getfileList() {
-        var _this = this
-        _this.loading = true
-        const params = {
-          goods_desc__icontains: _this.filter,
-          document_date__range: _this.date_range
-        }
-        const queryParams = new URLSearchParams({
-          ...params
-        })
-        console.log(queryParams)
-        // 过滤空值参数
-        Array.from(queryParams.entries()).forEach(([key, value]) => {
-          if (value === '' || value === null || value === undefined) {
-            queryParams.delete(key)
-          }
+          container_code__icontains: this.filter,
+
         })
-        console.log(`${_this.pathfilename}?${queryParams}`)
-        getauth(`${_this.pathfilename}?${queryParams}`)
-          .then(res => {
-            var timeStamp = Date.now()
-            var formattedString = date.formatDate(timeStamp, 'YYYYMMDDHHmmss')
-            const status = exportFile(_this.pathfilename + 'list' + formattedString + '.csv', '\uFEFF' + res, 'text/csv')
-            if (status !== true) {
-              _this.$q.notify({
-                message: 'Browser denied file download...',
-                color: 'negative',
-                icon: 'warning'
-              })
-            }
-          })
-          .catch(err => {
-            _this.$q.notify({
-              message: err.detail,
-              icon: 'close',
-              color: 'negative'
-            })
-          })
-          .finally(() => {
-            _this.loading = false
-          })
       },
-  
       getListPrevious() {
         var _this = this
         if (LocalStorage.has('auth')) {
@@ -685,199 +367,39 @@
         var _this = this
         _this.getSearchList()
       },
-  
-      newDataSubmit() {
-        var _this = this
-        var goodscodes = []
-        _this.table_list.forEach(i => {
-          goodscodes.push(i.goods_code)
-        })
-        if (goodscodes.indexOf(_this.newFormData.goods_code) === -1 && _this.newFormData.goods_code.length !== 0) {
-          _this.newFormData.creater = _this.login_name
-          postauth(_this.pathname, _this.newFormData)
-            .then(res => {
-              _this.getSearchList()
-              _this.newDataCancel()
-              if (res.status_code != 500) {
-                _this.$q.notify({
-                  message: 'Success Create',
-                  icon: 'check',
-                  color: 'green'
-                })
-              }
-            })
-            .catch(err => {
-              _this.$q.notify({
-                message: err.detail,
-                icon: 'close',
-                color: 'negative'
-              })
-            })
-        } else if (goodscodes.indexOf(_this.newFormData.goods_code) !== -1) {
-          _this.$q.notify({
-            message: _this.$t('notice.goodserror.goods_listerror'),
-            icon: 'close',
-            color: 'negative'
-          })
-        } else if (_this.newFormData.goods_code.length === 0) {
-          _this.$q.notify({
-            message: _this.$t('goods.view_goodslist.error1'),
-            icon: 'close',
-            color: 'negative'
-          })
-        }
-        goodscodes = []
-      },
-      newDataCancel() {
-        var _this = this
-        _this.newForm = false
-        _this.newFormData = {
-          goods_code: '',
-          goods_desc: '',
-          goods_supplier: '',
-          goods_weight: '',
-          goods_w: '',
-          goods_d: '',
-          goods_h: '',
-          goods_unit: '',
-          goods_class: '',
-          goods_brand: '',
-          goods_color: '',
-          goods_shape: '',
-          goods_specs: '',
-          goods_origin: '',
-          goods_cost: '',
-          goods_price: '',
-          creater: ''
-        }
-      },
-      editData(e) {
-        var _this = this
-        _this.editMode = true
-        _this.editid = e.id
-        _this.editFormData = {
-          goods_code: e.goods_code,
-          goods_desc: e.goods_desc,
-          goods_supplier: e.goods_supplier,
-          goods_weight: e.goods_weight,
-          goods_w: e.goods_w,
-          goods_d: e.goods_d,
-          goods_h: e.goods_h,
-          goods_unit: e.goods_unit,
-          goods_class: e.goods_class,
-          goods_brand: e.goods_brand,
-          goods_color: e.goods_color,
-          goods_shape: e.goods_shape,
-          goods_specs: e.goods_specs,
-          goods_origin: e.goods_origin,
-          goods_cost: e.goods_cost,
-          goods_price: e.goods_price,
-          creater: _this.login_name,
-          bar_code: e.bar_code
-        }
-      },
-      editDataSubmit() {
-        var _this = this
-        putauth(_this.pathname + _this.editid + '/', _this.editFormData)
-          .then(res => {
-            _this.editDataCancel()
-            _this.getSearchList()
-            if (res.status_code != 500) {
-              _this.$q.notify({
-                message: 'Success Edit Data',
-                icon: 'check',
-                color: 'green'
-              })
-            }
-          })
-          .catch(err => {
+      detailData(e) {
+      var _this = this
+      _this.detailForm = true
+      _this.detailid = e.id
+      console.log("detail查询的id是:",_this.detailid)
+      getauth(_this.pathname + _this.detailid+'/')
+      .then(res =>{
+        _this.table_detail = res
+      })          
+      .catch(err => {
             _this.$q.notify({
               message: err.detail,
               icon: 'close',
               color: 'negative'
             })
           })
-      },
-      editDataCancel() {
-        var _this = this
-        _this.editMode = false
-        _this.editid = 0
-        _this.editFormData = {
-          goods_code: '',
-          goods_desc: '',
-          goods_supplier: '',
-          goods_weight: '',
-          goods_w: '',
-          goods_d: '',
-          goods_h: '',
-          goods_unit: '',
-          goods_class: '',
-          goods_brand: '',
-          goods_color: '',
-          goods_shape: '',
-          goods_specs: '',
-          goods_origin: '',
-          goods_cost: '',
-          goods_price: '',
-          creater: ''
-        }
-      },
-      deleteData(e) {
-        var _this = this
-        _this.deleteForm = true
-        _this.deleteid = e
-      },
-      deleteDataSubmit() {
-        var _this = this
-        deleteauth(_this.pathname + _this.deleteid + '/')
-          .then(res => {
-            _this.deleteDataCancel()
-            _this.getSearchList()
-            _this.$q.notify({
-              message: 'Success Edit Data',
-              icon: 'check',
-              color: 'green'
-            })
-          })
-          .catch(err => {
+      console.log("detail查询的结果是:",_this.table_detail)
+
+      getauth('bound/detail/?bound_list=' + _this.detailid)
+      .then(res =>{
+        _this.batch_detail = res.results
+      })          
+      .catch(err => {
             _this.$q.notify({
               message: err.detail,
               icon: 'close',
               color: 'negative'
             })
           })
-      },
-      deleteDataCancel() {
-        var _this = this
-        _this.deleteForm = false
-        _this.deleteid = 0
-      },
-      viewData(e) {
-        var _this = this
-        var QRCode = require('qrcode')
-        QRCode.toDataURL(e.bar_code, [
-          {
-            errorCorrectionLevel: 'H',
-            mode: 'byte',
-            version: '2',
-            type: 'image/jpeg'
-          }
-        ])
-          .then(url => {
-            _this.goods_code = e.goods_code
-            _this.goods_desc = e.goods_desc
-            _this.bar_code = url
-          })
-          .catch(err => {
-            console.error(err)
-          })
-        _this.viewForm = true
-      },
-  
-      updateProxy() {
-        var _this = this
-        _this.proxyDate = _this.date
-      }
+      console.log("batch查询的结果是:",_this.batch_detail)
+      console.log("batch长度查询的结果是:",_this.batch_detail.length)
+      
+    },
   
     },
     created() {
@@ -895,10 +417,8 @@
         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()
       } else {
@@ -917,30 +437,7 @@
     destroyed() { },
     // 在 watch 或方法中添加调试代码
     watch: {
-      createDate1(val) {
-        if (val) {
-          if (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.searchUrl = this.pathname + '?' + 'document_date__year=' + this.dateArray[0] + '&' + 'document_date__month=' + this.dateArray[1] + '&' + '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.getSearchList()
-          this.$refs.qDateProxy.hide()
-        }
-        else {
-          this.createDate2 = ''
-          this.date_range = ''
-          this.getSearchList()
-        }
-      }
+
     }
   }
   </script>