Browse Source

初步编写完入库管理,缺少库位分配功能

flower 4 months ago
parent
commit
f52d9b933d
46 changed files with 4345 additions and 2037 deletions
  1. 0 0
      asn/__init__.py
  2. BIN
      asn/__pycache__/__init__.cpython-310.pyc
  3. BIN
      asn/__pycache__/admin.cpython-310.pyc
  4. BIN
      asn/__pycache__/apps.cpython-310.pyc
  5. BIN
      asn/__pycache__/files.cpython-310.pyc
  6. BIN
      asn/__pycache__/filter.cpython-310.pyc
  7. BIN
      asn/__pycache__/models.cpython-310.pyc
  8. BIN
      asn/__pycache__/page.cpython-310.pyc
  9. BIN
      asn/__pycache__/serializers.cpython-310.pyc
  10. BIN
      asn/__pycache__/urls.cpython-310.pyc
  11. BIN
      asn/__pycache__/views.cpython-310.pyc
  12. 5 0
      asn/admin.py
  13. 5 0
      asn/apps.py
  14. 73 0
      asn/files.py
  15. 84 0
      asn/filter.py
  16. 67 0
      asn/migrations/0001_initial.py
  17. 0 0
      asn/migrations/__init__.py
  18. BIN
      asn/migrations/__pycache__/0001_initial.cpython-310.pyc
  19. BIN
      asn/migrations/__pycache__/__init__.cpython-310.pyc
  20. 57 0
      asn/models.py
  21. 88 0
      asn/serializers.py
  22. 0 0
      asn/tests.py
  23. 18 0
      asn/urls.py
  24. 212 0
      asn/views.py
  25. BIN
      db.sqlite3
  26. BIN
      greaterwms/__pycache__/settings.cpython-310.pyc
  27. BIN
      greaterwms/__pycache__/urls.cpython-310.pyc
  28. 1 0
      greaterwms/settings.py
  29. 1 0
      greaterwms/urls.py
  30. 717 0
      logs/error.log
  31. 955 0
      logs/server.log
  32. BIN
      reportcenter/__pycache__/files.cpython-310.pyc
  33. BIN
      reportcenter/__pycache__/models.cpython-310.pyc
  34. BIN
      reportcenter/__pycache__/urls.cpython-310.pyc
  35. BIN
      reportcenter/__pycache__/views.cpython-310.pyc
  36. 38 38
      reportcenter/files.py
  37. 1 2
      reportcenter/models.py
  38. 1 0
      reportcenter/urls.py
  39. 55 0
      reportcenter/views.py
  40. 27 4
      templates/src/i18n/zh-hans/index.js
  41. 18 34
      templates/src/layouts/MainLayout.vue
  42. 291 251
      templates/src/pages/dashboard/flows_statements.vue
  43. 451 1226
      templates/src/pages/inbound/asn.vue
  44. 585 193
      templates/src/pages/inbound/asnfinish.vue
  45. 4 4
      templates/src/pages/inbound/inbound.vue
  46. 591 285
      templates/src/pages/inbound/sortstock.vue

+ 0 - 0
asn/__init__.py


BIN
asn/__pycache__/__init__.cpython-310.pyc


BIN
asn/__pycache__/admin.cpython-310.pyc


BIN
asn/__pycache__/apps.cpython-310.pyc


BIN
asn/__pycache__/files.cpython-310.pyc


BIN
asn/__pycache__/filter.cpython-310.pyc


BIN
asn/__pycache__/models.cpython-310.pyc


BIN
asn/__pycache__/page.cpython-310.pyc


BIN
asn/__pycache__/serializers.cpython-310.pyc


BIN
asn/__pycache__/urls.cpython-310.pyc


BIN
asn/__pycache__/views.cpython-310.pyc


+ 5 - 0
asn/admin.py

@@ -0,0 +1,5 @@
+from django.contrib import admin
+from .models import AsnListModel, AsnDetailModel
+
+admin.site.register(AsnListModel)
+admin.site.register(AsnDetailModel)

+ 5 - 0
asn/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class AsnConfig(AppConfig):
+    name = 'asn'

+ 73 - 0
asn/files.py

@@ -0,0 +1,73 @@
+from rest_framework_csv.renderers import CSVStreamingRenderer
+
+def list_file_headers():
+    return [
+
+    ]
+
+def list_cn_data_header():
+    return dict([
+        ('asn_code', u'ASN单号'),
+        ('asn_status', u'ASN状态'),
+        ('total_weight', u'总重量'),
+        ('total_volume', u'总体积'),
+        ('total_cost', u'总成本'),
+        ('supplier', u'供应商'),
+        ('creater', u'创建人'),
+        ('create_time', u'创建时间'),
+        ('update_time', u'更新时间')
+    ])
+
+
+def detail_file_headers():
+    return [
+        'asn_code',
+        'asn_status',
+        'supplier',
+        'goods_code',
+        'goods_desc',
+        'goods_qty',
+        'goods_actual_qty',
+        'sorted_qty',
+        'goods_shortage_qty',
+        'goods_more_qty',
+        'goods_damage_qty',
+        'goods_weight',
+        'goods_volume',
+        'goods_cost',
+        'creater',
+        'create_time',
+        'update_time'
+    ]
+
+def detail_cn_data_header():
+    return dict([
+        ('asn_code', u'ASN单号'),
+        ('asn_status', u'ASN状态'),
+        ('supplier', u'供应商'),
+        ('goods_code', u'商品编码'),
+        ('goods_desc', u'商品描述'),
+        ('goods_qty', u'订单数量'),
+        ('goods_actual_qty', u'实际到货数量'),
+        ('sorted_qty', u'已分拣数量'),
+        ('goods_shortage_qty', u'少到货数量'),
+        ('goods_more_qty', u'多到货数量'),
+        ('goods_damage_qty', u'破损数量'),
+        ('goods_weight', u'商品重量'),
+        ('goods_volume', u'商品体积'),
+        ('goods_cost', u'商品成本'),
+        ('creater', u'创建人'),
+        ('create_time', u'创建时间'),
+        ('update_time', u'更新时间')
+    ])
+
+class FileListRenderCN(CSVStreamingRenderer):
+    header = list_file_headers()
+    labels = list_cn_data_header()
+
+
+class FileDetailRenderCN(CSVStreamingRenderer):
+    header = detail_file_headers()
+    labels = detail_cn_data_header()
+
+

+ 84 - 0
asn/filter.py

@@ -0,0 +1,84 @@
+from django_filters import FilterSet
+from .models import AsnListModel, AsnDetailModel
+
+
+class AsnListFilter(FilterSet):
+
+    class Meta:
+        model = AsnListModel
+        fields = {
+            "id": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            'code': ['icontains', 'exact'],
+            'asn_code': ['icontains', 'exact'],
+            'asn_status': ['exact'],
+            'asn_type': ['exact'],
+
+            'goods_code': ['icontains', 'exact'],
+            'goods_desc': ['icontains'],
+            'goods_qty': ['exact', 'gt', 'lt', 'gte', 'lte'],
+            'goods_weight': ['exact', 'gt', 'lt', 'gte', 'lte'],
+
+    
+            'creater': ['icontains', 'exact'],
+            'openid': ['exact'],
+            'is_delete': ['exact'],
+            'create_time': ['exact', 'gt', 'gte', 'lt', 'lte',
+             'year', 'year__gt', 'year__gte', 'year__lt', 'year__lte', 'year__range', 'year__in', 
+             'month','month__gt','month__gte','month__lt','month__lte','month__range','month__in', 
+             'day', 'day__gt', 'day__gte', 'day__lt', 'day__lte', 'day__range', 'day__in',
+              'week_day', 'week_day__gt', 'week_day__gte', 'week_day__lt', 'week_day__lte', 'week_day__range', 'week_day__in', 
+              'hour', 'hour__gt', 'hour__gte', 'hour__lt', 'hour__lte', 'hour__range', 'hour__in',
+
+              'date', 'date__gt', 'date__gte', 'date__lt', 'date__lte', 'date__range', 'date__in', 
+              'time', 'time__gt', 'time__gte', 'time__lt', 'time__lte', 'time__range', 'time__in', 'isnull', 'in', 'range'],
+            'update_time':
+             ['exact', 'gt', 'gte', 'lt', 'lte',
+             'year', 'year__gt', 'year__gte', 'year__lt', 'year__lte', 'year__range', 'year__in', 
+             'month','month__gt','month__gte','month__lt','month__lte','month__range','month__in', 
+             'day', 'day__gt', 'day__gte', 'day__lt', 'day__lte', 'day__range', 'day__in',
+              'week_day', 'week_day__gt', 'week_day__gte', 'week_day__lt', 'week_day__lte', 'week_day__range', 'week_day__in', 
+              'hour', 'hour__gt', 'hour__gte', 'hour__lt', 'hour__lte', 'hour__range', 'hour__in',
+
+              'date', 'date__gt', 'date__gte', 'date__lt', 'date__lte', 'date__range', 'date__in', 
+              'time', 'time__gt', 'time__gte', 'time__lt', 'time__lte', 'time__range', 'time__in', 'isnull', 'in', 'range'],
+            
+        }
+class AsnDetailFilter(FilterSet):
+    class Meta:
+        model = AsnDetailModel
+        fields = {
+            "id": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            'asn_code': ['icontains', 'exact'],
+            'asn_status': ['exact'],
+            'asn_type': ['exact'],
+            'goods_code': ['icontains', 'exact'],
+            'goods_desc': ['icontains'],
+            'goods_qty': ['exact', 'gt', 'lt', 'gte', 'lte'],
+            'goods_weight': ['exact', 'gt', 'lt', 'gte', 'lte'],
+            'warehouse_code': ['icontains', 'exact'],
+            'warehouse_name': ['icontains'],
+            'shelf_name': ['icontains'],
+            'container_code': ['icontains', 'exact'],
+            'creater': ['icontains', 'exact'],
+            'openid': ['exact'],
+            'is_delete': ['exact'],
+            'create_time':  ['exact', 'gt', 'gte', 'lt', 'lte',
+             'year', 'year__gt', 'year__gte', 'year__lt', 'year__lte', 'year__range', 'year__in', 
+             'month','month__gt','month__gte','month__lt','month__lte','month__range','month__in', 
+             'day', 'day__gt', 'day__gte', 'day__lt', 'day__lte', 'day__range', 'day__in',
+              'week_day', 'week_day__gt', 'week_day__gte', 'week_day__lt', 'week_day__lte', 'week_day__range', 'week_day__in', 
+              'hour', 'hour__gt', 'hour__gte', 'hour__lt', 'hour__lte', 'hour__range', 'hour__in',
+
+              'date', 'date__gt', 'date__gte', 'date__lt', 'date__lte', 'date__range', 'date__in', 
+              'time', 'time__gt', 'time__gte', 'time__lt', 'time__lte', 'time__range', 'time__in', 'isnull', 'in', 'range'],
+              
+            'update_time': ['exact', 'gt', 'gte', 'lt', 'lte',
+             'year', 'year__gt', 'year__gte', 'year__lt', 'year__lte', 'year__range', 'year__in', 
+             'month','month__gt','month__gte','month__lt','month__lte','month__range','month__in', 
+             'day', 'day__gt', 'day__gte', 'day__lt', 'day__lte', 'day__range', 'day__in',
+              'week_day', 'week_day__gt', 'week_day__gte', 'week_day__lt', 'week_day__lte', 'week_day__range', 'week_day__in', 
+              'hour', 'hour__gt', 'hour__gte', 'hour__lt', 'hour__lte', 'hour__range', 'hour__in',
+
+              'date', 'date__gt', 'date__gte', 'date__lt', 'date__lte', 'date__range', 'date__in', 
+              'time', 'time__gt', 'time__gte', 'time__lt', 'time__lte', 'time__range', 'time__in', 'isnull', 'in', 'range'],
+        }

+ 67 - 0
asn/migrations/0001_initial.py

@@ -0,0 +1,67 @@
+# Generated by Django 4.1.2 on 2025-03-18 14:33
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='AsnDetailModel',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('asn_code', models.CharField(max_length=255, verbose_name='ASN Code')),
+                ('asn_status', models.CharField(max_length=255, verbose_name='ASN Status')),
+                ('asn_type', models.CharField(max_length=255, verbose_name='ASN Type')),
+                ('goods_code', models.CharField(max_length=255, verbose_name='Goods Code')),
+                ('goods_desc', models.CharField(max_length=255, verbose_name='Goods Description')),
+                ('goods_qty', models.BigIntegerField(default=0, verbose_name='Goods QTY')),
+                ('goods_weight', models.FloatField(default=0, verbose_name='Goods Weight')),
+                ('warehouse_code', models.CharField(default='empty_code', max_length=255, verbose_name='Warehouse Code')),
+                ('warehouse_name', models.CharField(default='empty_name', max_length=255, verbose_name='Warehouse Name')),
+                ('shelf_name', models.CharField(default='empty_name', max_length=255, verbose_name='Shelf Name')),
+                ('container_code', models.CharField(default='empty_code', max_length=255, verbose_name='Container Code')),
+                ('creater', models.CharField(default='uesr', max_length=255, verbose_name='Who Created')),
+                ('openid', models.CharField(max_length=255, verbose_name='Openid')),
+                ('is_delete', models.BooleanField(default=False, verbose_name='Delete Label')),
+                ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='Create Time')),
+                ('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
+            ],
+            options={
+                'verbose_name': 'ASN Detail',
+                'verbose_name_plural': 'ASN Detail',
+                'db_table': 'asndetail',
+                'ordering': ['-id'],
+            },
+        ),
+        migrations.CreateModel(
+            name='AsnListModel',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('code', models.CharField(max_length=255, verbose_name='Code')),
+                ('asn_code', models.CharField(max_length=255, verbose_name='ASN Code')),
+                ('asn_status', models.CharField(max_length=255, verbose_name='ASN Status')),
+                ('asn_type', models.CharField(max_length=255, verbose_name='ASN Type')),
+                ('goods_code', models.CharField(max_length=255, verbose_name='Goods Code')),
+                ('goods_desc', models.CharField(max_length=255, verbose_name='Goods Description')),
+                ('goods_qty', models.BigIntegerField(default=0, verbose_name='Goods QTY')),
+                ('goods_weight', models.FloatField(default=0, verbose_name='Goods Weight')),
+                ('creater', models.CharField(default='uesr', max_length=255, verbose_name='Who Created')),
+                ('openid', models.CharField(max_length=255, verbose_name='Openid')),
+                ('is_delete', models.BooleanField(default=False, verbose_name='Delete Label')),
+                ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='Create Time')),
+                ('update_time', models.DateTimeField(auto_now=True, null=True, verbose_name='Update Time')),
+            ],
+            options={
+                'verbose_name': 'ASN List',
+                'verbose_name_plural': 'ASN List',
+                'db_table': 'asnlist',
+                'ordering': ['-id'],
+            },
+        ),
+    ]

+ 0 - 0
asn/migrations/__init__.py


BIN
asn/migrations/__pycache__/0001_initial.cpython-310.pyc


BIN
asn/migrations/__pycache__/__init__.cpython-310.pyc


+ 57 - 0
asn/models.py

@@ -0,0 +1,57 @@
+from django.db import models
+
+
+
+class AsnListModel(models.Model):
+    code = models.CharField(max_length=255, verbose_name="Code")
+    asn_code = models.CharField(max_length=255, verbose_name="ASN Code")
+    asn_status = models.CharField(max_length=255, verbose_name="ASN Status")
+    asn_type = models.CharField(max_length=255, verbose_name="ASN Type")
+
+    goods_code = models.CharField(max_length=255, verbose_name="Goods Code")
+    goods_desc = models.CharField(max_length=255, verbose_name="Goods Description")
+    goods_qty = models.BigIntegerField(default=0, verbose_name="Goods QTY")
+    goods_weight = models.FloatField(default=0, verbose_name="Goods Weight")
+    
+    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
+    openid = models.CharField(max_length=255, verbose_name="Openid")
+    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
+    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")
+
+    class Meta:
+        db_table = 'asnlist'
+        verbose_name = 'ASN List'
+        verbose_name_plural = "ASN List"
+        ordering = ['-id']
+
+
+
+class AsnDetailModel(models.Model):
+    asn_code = models.CharField(max_length=255, verbose_name="ASN Code")
+    asn_status = models.CharField(max_length=255, verbose_name="ASN Status")
+    asn_type = models.CharField(max_length=255, verbose_name="ASN Type")
+
+    goods_code = models.CharField(max_length=255, verbose_name="Goods Code")
+    goods_desc = models.CharField(max_length=255, verbose_name="Goods Description")
+    goods_qty = models.BigIntegerField(default=0, verbose_name="Goods QTY")
+    goods_weight = models.FloatField(default=0, verbose_name="Goods Weight")
+
+    warehouse_code = models.CharField(default='empty_code' ,max_length=255, verbose_name="Warehouse Code")
+    warehouse_name = models.CharField(default='empty_name', max_length=255, verbose_name="Warehouse Name")
+    shelf_name=models.CharField(default='empty_name', max_length=255, verbose_name="Shelf Name")
+    container_code = models.CharField(default='empty_code', max_length=255, verbose_name="Container Code")
+    
+    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
+
+    openid = models.CharField(max_length=255, verbose_name="Openid")
+    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
+    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")
+
+    class Meta:
+        db_table = 'asndetail'
+        verbose_name = 'ASN Detail'
+        verbose_name_plural = "ASN Detail"
+        ordering = ['-id']
+

+ 88 - 0
asn/serializers.py

@@ -0,0 +1,88 @@
+from rest_framework import serializers
+from .models import AsnListModel, AsnDetailModel
+from utils import datasolve
+
+
+class ASNListGetSerializer(serializers.ModelSerializer):
+    code = serializers.CharField(read_only=True, required=False)
+    asn_code = serializers.CharField(read_only=True, required=False)
+    asn_status = serializers.CharField(read_only=True, required=False)
+    asn_type = serializers.CharField(read_only=True, required=False)
+    goods_code = serializers.CharField(read_only=True, required=False)
+    goods_desc = serializers.CharField(read_only=True, required=False)
+    goods_qty = serializers.IntegerField(read_only=True, required=False)
+    goods_weight = serializers.FloatField(read_only=True, required=False)
+
+    creater = serializers.CharField(read_only=True, required=False)
+    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
+    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
+    class Meta:
+        model = AsnListModel
+        exclude = ['openid', 'is_delete', ]
+        read_only_fields = ['id', 'openid', ]
+
+class ASNListPostSerializer(serializers.ModelSerializer):
+    
+    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
+    asn_code = serializers.CharField(read_only=False,  required=False, validators=[datasolve.asn_data_validate])
+    code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    asn_status = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    asn_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.qty_0_data_validate])
+    goods_weight = serializers.FloatField(read_only=False, required=True, validators=[datasolve.qty_0_data_validate])
+  
+    creater = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    class Meta:
+        model = AsnListModel
+        exclude = ['is_delete', ]
+        read_only_fields = ['id', 'create_time', 'update_time', ]
+
+
+
+
+class ASNDetailGetSerializer(serializers.ModelSerializer):
+    asn_code = serializers.CharField(read_only=True, required=False)
+    asn_status = serializers.CharField(read_only=True, required=False)
+    asn_type = serializers.CharField(read_only=True, required=False)
+    goods_code = serializers.CharField(read_only=True, required=False)
+    goods_desc = serializers.CharField(read_only=True, required=False)
+    goods_qty = serializers.IntegerField(read_only=True, required=False)
+    goods_weight = serializers.FloatField(read_only=True, required=False)
+    warehouse_code = serializers.CharField(read_only=True, required=False)
+    warehouse_name = serializers.CharField(read_only=True, required=False)
+    shelf_name = serializers.CharField(read_only=True, required=False)
+    container_code = serializers.CharField(read_only=True, required=False)
+    creater = serializers.CharField(read_only=True, required=False)
+    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
+
+    class Meta:
+        model = AsnDetailModel
+        exclude = ['openid', 'is_delete', ]
+        read_only_fields = ['id', 'openid']
+
+class ASNDetailPostSerializer(serializers.ModelSerializer):
+    openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate])
+    asn_code = serializers.CharField(read_only=False,  required=True, validators=[datasolve.data_validate])
+    asn_status = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    asn_type = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    goods_code = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    goods_desc = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    goods_qty = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.qty_0_data_validate])
+    goods_weight = serializers.FloatField(read_only=False, required=False, validators=[datasolve.qty_0_data_validate])
+    warehouse_code = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    warehouse_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    shelf_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    container_code = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    class Meta:
+        model = AsnDetailModel
+        exclude = ['is_delete', ]
+        read_only_fields = ['id', 'create_time', 'update_time', ]
+
+
+
+
+
+

+ 0 - 0
asn/tests.py


+ 18 - 0
asn/urls.py

@@ -0,0 +1,18 @@
+from django.urls import path, re_path
+from . import views
+
+urlpatterns = [
+path(r'list/', views.AsnListViewSet.as_view({"get": "list", "post": "create"}), name="asnlist"),
+re_path(r'^list/(?P<pk>\d+)/$', views.AsnListViewSet.as_view({
+    'get': 'retrieve',
+    'put': 'update',
+    'patch': 'partial_update',
+    'delete': 'destroy'
+}), name="asnlist_1"),
+path(r'detail/', views.AsnDetailViewSet.as_view({"get": "list",  }), name="asndetail"),
+re_path(r'^detail/(?P<pk>\d+)/$', views.AsnDetailViewSet.as_view({
+    'get': 'retrieve',
+    'put': 'update',
+}), name="asndetail_1"),
+
+]

+ 212 - 0
asn/views.py

@@ -0,0 +1,212 @@
+from rest_framework import viewsets
+from utils.page import MyPageNumberPagination
+from utils.datasolve import sumOfList, transportation_calculate
+from utils.md5 import Md5
+from rest_framework.filters import OrderingFilter
+from django_filters.rest_framework import DjangoFilterBackend
+
+from rest_framework.response import Response
+from rest_framework.exceptions import APIException
+from django.utils import timezone
+
+
+
+from .models import AsnListModel, AsnDetailModel
+from .filter import AsnListFilter, AsnDetailFilter
+from .serializers import ASNListGetSerializer, ASNListPostSerializer, ASNDetailGetSerializer,ASNDetailPostSerializer
+from .files import FileListRenderCN, FileDetailRenderCN
+
+from warehouse.models import ListModel as warehouse
+
+from warehouse.models import ListModel as warehouse
+from staff.models import ListModel as staff
+
+
+class AsnListViewSet(viewsets.ModelViewSet):
+    """
+        retrieve:
+            Response a data list(get)
+        list:
+            Response a data list(all)
+        create:
+            Create a data line(post)
+
+        delete:
+            Delete a data line(delete)
+
+    """
+    pagination_class = MyPageNumberPagination
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "create_time", "update_time", ]
+    filter_class = AsnListFilter
+
+    def get_project(self):
+        try:
+            id = self.kwargs.get('pk')
+            return id
+        except:
+            return None
+
+    def get_queryset(self):
+        id = self.get_project()
+        if self.request.user:
+            if id is None:
+                return AsnListModel.objects.filter(openid=self.request.auth.openid, is_delete=False)
+            else:
+                return AsnListModel.objects.filter(openid=self.request.auth.openid, id=id, is_delete=False)
+        else:
+            return AsnListModel.objects.none()
+
+    def get_serializer_class(self):
+        if self.action in ['list', 'destroy']:
+            return ASNListGetSerializer
+        elif self.action in ['create', 'update']:
+            return ASNListPostSerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)
+
+    def create(self, request, *args, **kwargs):
+
+        data = self.request.data
+        if AsnListModel.objects.filter(code=data['code'], is_delete=False).exists():
+            raise APIException({"detail": "Data exists"})
+        else:
+            data['openid'] = self.request.auth.openid
+            qs_set = AsnListModel.objects.filter(openid=self.request.auth.openid,asn_type=data['asn_type'], is_delete=False)
+            order_day =str(timezone.now().strftime('%Y%m%d'))
+            if len(qs_set) > 0:
+                asn_last_code = qs_set.order_by('-id').first().asn_code
+                if str(asn_last_code[3:11]) == order_day:
+                    order_create_no = f"{int(asn_last_code[11:]) + 1:03d}"
+                    data['asn_code'] = data['asn_type'] + order_day + order_create_no
+                else:
+                    data['asn_code'] = data['asn_type'] + order_day + '001'
+            else:
+                data['asn_code'] = data['asn_type'] + order_day + '001'
+    
+            serializer = self.get_serializer(data=data)
+            serializer.is_valid(raise_exception=True)
+            serializer.save()
+
+            AsnDetailModel.objects.create(
+                openid=self.request.auth.openid,
+                asn_code=serializer.data['asn_code'],
+                asn_type=serializer.data['asn_type'],
+                asn_status=serializer.data['asn_status'],
+                
+                goods_code=serializer.data['goods_code'],
+                goods_desc=serializer.data['goods_desc'],
+                goods_qty=serializer.data['goods_qty'],
+                goods_weight=serializer.data['goods_weight'],
+
+                creater =  serializer.data['creater'],
+          
+
+            )
+            headers = self.get_success_headers(serializer.data)
+            return Response(serializer.data, status=200, headers=headers)
+    
+    def update(self, request, pk):
+        qs = self.get_object()
+        data = self.request.data
+        serializer = self.get_serializer(qs, data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+
+        qs_detail = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=data['asn_code'], is_delete=False)
+        serializer_detail = ASNDetailPostSerializer(qs_detail.first(), data=data)
+        serializer_detail.is_valid(raise_exception=True)
+        serializer_detail.save()
+
+
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=200, headers=headers)
+
+    def destroy(self, request, pk):
+        qs = self.get_object()
+        if qs.openid != self.request.auth.openid:
+            raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
+        else:
+            qs.is_delete = True
+            asn_detail_list = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=qs.asn_code, is_delete=False)
+            asn_detail_list.update(is_delete=True)
+            qs.save()
+            serializer = self.get_serializer(qs, many=False)
+            headers = self.get_success_headers(serializer.data)
+            return Response(serializer.data, status=200, headers=headers)
+       
+
+class AsnDetailViewSet(viewsets.ModelViewSet):
+    """
+        retrieve:
+            Response a data list(get)
+
+        list:
+            Response a data list(all)
+
+        create:
+            Create a data line(post)
+
+        update:
+            Update a data(put:update)
+    """
+    
+    pagination_class = MyPageNumberPagination
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "create_time", "update_time", ]
+    filter_class = AsnDetailFilter
+
+    def get_project(self):
+        try:
+            id = self.kwargs.get('pk')
+            return id
+        except:
+            return None
+
+    def get_queryset(self):
+        id = self.get_project()
+        if self.request.user:
+            if id is None:
+                return AsnDetailModel.objects.filter(openid=self.request.auth.openid, is_delete=False)
+            else:
+                return AsnDetailModel.objects.filter(openid=self.request.auth.openid, id=id, is_delete=False)
+        else:
+            return AsnDetailModel.objects.none()
+
+    def get_serializer_class(self):
+        if self.action in ['list', 'destroy']:
+            return ASNDetailGetSerializer
+        elif self.action in ['update']:
+            return ASNDetailPostSerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)
+
+
+    def update(self, request, pk):
+        qs = self.get_object()
+        data = self.request.data
+        serializer = self.get_serializer(qs, data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+
+        qs_detail = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=data['asn_code'], is_delete=False)
+        serializer_detail = ASNDetailPostSerializer(qs_detail.first(), data=data)
+        serializer_detail.is_valid(raise_exception=True)
+        serializer_detail.save()
+
+
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=200, headers=headers)
+
+    def destroy(self, request, pk):
+        qs = self.get_object()
+        if qs.openid != self.request.auth.openid:
+            raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
+        else:
+            qs.is_delete = True
+            asn_detail_list = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=qs.asn_code, is_delete=False)
+            asn_detail_list.update(is_delete=True)
+            qs.save()
+            serializer = self.get_serializer(qs, many=False)
+            headers = self.get_success_headers(serializer.data)
+            return Response(serializer.data, status=200, headers=headers)

BIN
db.sqlite3


BIN
greaterwms/__pycache__/settings.cpython-310.pyc


BIN
greaterwms/__pycache__/urls.cpython-310.pyc


+ 1 - 0
greaterwms/settings.py

@@ -36,6 +36,7 @@ INSTALLED_APPS = [
     'stock.apps.StockConfig',
     'warehouse.apps.WarehouseConfig',
     'reportcenter.apps.ReportcenterConfig',
+    'asn.apps.AsnConfig',
 
     'throttle.apps.ThrottleConfig',
     'rest_framework',

+ 1 - 0
greaterwms/urls.py

@@ -24,6 +24,7 @@ urlpatterns = [
     path('stock/', include('stock.urls')),
     path('warehouse/', include('warehouse.urls')),
     path('reportcenter/', include('reportcenter.urls')),
+    path('asn/', include('asn.urls')),
 
     re_path(r'^favicon\.ico$', views.favicon, name='favicon'),
     re_path('^css/.*$', views.css, name='css'),

+ 717 - 0
logs/error.log

@@ -3158,3 +3158,720 @@ Traceback (most recent call last):
   File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
     return int(value)
 ValueError: invalid literal for int() with base 10: '无'
+[2025-03-17 19:01:18,839][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:02:20,209][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:03:33,883][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:11:24,699][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 76, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:13:58,860][django.request.log_response():241] [ERROR] Not Implemented: /asn/list/
+[2025-03-18 14:14:33,607][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:14:59,812][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['creater'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:15:22,893][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['creater'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:15:59,981][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:25:51,586][django.request.log_response():241] [ERROR] Not Implemented: /asn/list/
+[2025-03-18 14:26:26,585][django.request.log_response():241] [ERROR] Not Implemented: /asn/list/
+[2025-03-18 14:36:36,108][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 88, in create
+    scanner.objects.create(openid=self.request.auth.openid, mode="ASN", code=data['asn_code'], bar_code=data['bar_code'])
+NameError: name 'scanner' is not defined
+[2025-03-18 15:03:38,258][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 81, in create
+    data['asn_code'] = data['asn_type'] + order_day + '1'
+KeyError: 'asn_type'
+[2025-03-18 15:03:43,553][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 81, in create
+    data['asn_code'] = data['asn_type'] + order_day + '1'
+KeyError: 'asn_type'
+[2025-03-18 15:30:41,866][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    qs_set = AsnListModel.objects.filter(openid=self.request.auth.openid,ans_type=data['asn_type'], is_delete=False)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1407, in build_filter
+    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
+  File "/usr/local/lib/python3.10/dist-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 "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1709, in names_to_path
+    raise FieldError(
+django.core.exceptions.FieldError: Cannot resolve keyword 'ans_type' into field. Choices are: asn_code, asn_status, asn_type, code, create_time, creater, goods_code, goods_desc, goods_qty, goods_weight, id, is_delete, openid, update_time
+[2025-03-18 18:19:16,616][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/6/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 96, in update
+    serializer = self.get_serializer(qs, data=data)
+NameError: name 'qs' is not defined
+[2025-03-18 18:20:27,796][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/6/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 96, in update
+    serializer = self.get_serializer(qs, data=data)
+NameError: name 'data' is not defined
+[2025-03-18 18:38:36,275][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/6/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 103, in update
+    serializer_detail.is_valid(raise_exception=True)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 741, in is_valid
+    assert hasattr(self, 'initial_data'), (
+AssertionError: Cannot call `.is_valid()` as no `data=` keyword argument was passed when instantiating the serializer instance.
+[2025-03-18 18:52:17,312][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    qs_set = AsnListModel.objects.filter(openid=self.request.auth.openid,asn_type=data['asn_type'], is_delete=False)
+KeyError: 'asn_type'
+[2025-03-18 19:16:59,428][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 90, in create
+    AsnDetailModel.objects.create(data=data)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 669, in create
+    obj = self.model(**kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/base.py", line 565, in __init__
+    raise TypeError(
+TypeError: AsnDetailModel() got unexpected keyword arguments: 'data'
+[2025-03-18 20:10:27,243][django.request.log_response():241] [ERROR] Internal Server Error: /asn/detail/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 768, in data
+    ret = super().data
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 686, in to_representation
+    return [
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 522, in to_representation
+    ret[field.field_name] = field.to_representation(attribute)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
+    return int(value)
+ValueError: invalid literal for int() with base 10: '入库中'
+[2025-03-18 20:10:32,951][django.request.log_response():241] [ERROR] Internal Server Error: /asn/detail/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 768, in data
+    ret = super().data
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 686, in to_representation
+    return [
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 522, in to_representation
+    ret[field.field_name] = field.to_representation(attribute)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
+    return int(value)
+ValueError: invalid literal for int() with base 10: '入库中'
+[2025-03-18 20:10:38,339][django.request.log_response():241] [ERROR] Internal Server Error: /asn/detail/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 768, in data
+    ret = super().data
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 686, in to_representation
+    return [
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 522, in to_representation
+    ret[field.field_name] = field.to_representation(attribute)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
+    return int(value)
+ValueError: invalid literal for int() with base 10: '入库中'

+ 955 - 0
logs/server.log

@@ -3494,3 +3494,958 @@ Traceback (most recent call last):
   File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
     return int(value)
 ValueError: invalid literal for int() with base 10: '无'
+[2025-03-16 20:15:37,683][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 20:15:40,356][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:16:34,146][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:26:53,289][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:28:30,410][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:28:33,312][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 20:28:39,289][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-16 20:28:40,091][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 20:28:45,957][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:28:47,441][django.request.log_response():241] [WARNING] Not Found: /stock/list/
+[2025-03-16 20:28:48,237][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-16 20:31:18,160][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:31:40,255][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:31:46,992][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-16 20:33:11,323][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 20:33:11,785][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:33:12,376][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:33:15,947][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:33:25,444][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:33:38,206][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:33:44,347][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:34:32,401][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:34:32,406][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:34:38,601][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:35:16,323][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:35:18,917][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 20:37:11,296][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 20:37:15,099][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 20:37:23,323][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 20:40:56,854][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 20:41:05,679][django.request.log_response():241] [WARNING] Not Found: /reportcenter/flow/bin/
+[2025-03-16 21:17:26,360][django.request.log_response():241] [WARNING] Not Found: /reportcenter/flow/1/
+[2025-03-16 21:26:47,332][django.request.log_response():241] [WARNING] Not Found: /reportcenter/flow/1/
+[2025-03-16 22:18:02,443][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 22:20:41,145][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 22:20:53,061][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 22:20:54,929][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-16 22:20:55,745][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-16 22:21:02,749][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 22:21:05,173][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 22:21:10,984][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-16 22:21:13,741][django.request.log_response():241] [WARNING] Not Found: /asn/filedetail/
+[2025-03-16 22:22:20,611][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 22:23:14,318][django.request.log_response():241] [WARNING] Not Found: /reportcenter/flow/1/
+[2025-03-16 22:24:46,407][django.request.log_response():241] [WARNING] Not Found: /stock/list/
+[2025-03-16 22:25:00,842][django.request.log_response():241] [WARNING] Not Found: /stock/list/
+[2025-03-16 22:25:05,129][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 22:25:42,398][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-16 22:38:31,119][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 10:46:28,242][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 10:46:49,741][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 10:50:06,108][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 10:50:18,447][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 14:45:34,298][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 14:46:53,464][django.request.log_response():241] [WARNING] Not Found: /reportcenter/file/document_date__range=2024-10-03,2024-10-05+
+[2025-03-17 15:09:04,270][django.request.log_response():241] [WARNING] Not Found: /stock/list/
+[2025-03-17 15:09:27,811][django.request.log_response():241] [WARNING] Not Found: /stock/list/
+[2025-03-17 15:09:30,667][django.request.log_response():241] [WARNING] Not Found: /cyclecount/manualcyclecount/
+[2025-03-17 15:09:32,285][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 15:09:32,764][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 15:09:41,974][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-17 15:09:49,442][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 15:09:56,641][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 15:10:00,919][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 15:10:49,485][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 15:10:59,893][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 15:11:57,378][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 15:12:49,826][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 15:19:12,452][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 15:19:16,442][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 15:19:18,751][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 15:20:38,021][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 15:23:04,813][django.request.log_response():241] [WARNING] Not Found: /goodsunit/
+[2025-03-17 15:23:05,692][django.request.log_response():241] [WARNING] Not Found: /goodsclass/
+[2025-03-17 15:23:06,398][django.request.log_response():241] [WARNING] Not Found: /goodscolor/
+[2025-03-17 15:23:07,145][django.request.log_response():241] [WARNING] Not Found: /goodsbrand/
+[2025-03-17 15:23:07,647][django.request.log_response():241] [WARNING] Not Found: /goodsshape/
+[2025-03-17 15:23:08,134][django.request.log_response():241] [WARNING] Not Found: /goodsspecs/
+[2025-03-17 15:23:08,942][django.request.log_response():241] [WARNING] Not Found: /goodsorigin/
+[2025-03-17 15:23:10,638][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 15:41:27,233][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 16:24:54,284][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:26:08,556][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 16:26:16,807][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:26:28,160][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:26:59,685][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:27:00,941][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-17 16:27:04,641][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:27:15,258][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 16:27:27,979][django.request.log_response():241] [WARNING] Not Found: /stock/list/
+[2025-03-17 16:27:38,454][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:28:02,460][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:28:02,875][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-17 16:28:05,298][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:28:06,688][django.request.log_response():241] [WARNING] Not Found: /goodsunit/
+[2025-03-17 16:28:07,315][django.request.log_response():241] [WARNING] Not Found: /goodsclass/
+[2025-03-17 16:28:07,750][django.request.log_response():241] [WARNING] Not Found: /goodsbrand/
+[2025-03-17 16:28:08,291][django.request.log_response():241] [WARNING] Not Found: /goodsspecs/
+[2025-03-17 16:28:08,826][django.request.log_response():241] [WARNING] Not Found: /goodsorigin/
+[2025-03-17 16:28:09,628][django.request.log_response():241] [WARNING] Not Found: /goodsshape/
+[2025-03-17 16:28:10,005][django.request.log_response():241] [WARNING] Not Found: /goodsclass/
+[2025-03-17 16:28:10,406][django.request.log_response():241] [WARNING] Not Found: /goodsunit/
+[2025-03-17 16:28:10,761][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:29:00,648][django.request.log_response():241] [WARNING] Not Found: /goodsorigin/
+[2025-03-17 16:29:02,600][django.request.log_response():241] [WARNING] Not Found: /goodsspecs/
+[2025-03-17 16:29:03,095][django.request.log_response():241] [WARNING] Not Found: /goodsshape/
+[2025-03-17 16:29:03,784][django.request.log_response():241] [WARNING] Not Found: /goodsbrand/
+[2025-03-17 16:29:04,829][django.request.log_response():241] [WARNING] Not Found: /goodscolor/
+[2025-03-17 16:29:05,643][django.request.log_response():241] [WARNING] Not Found: /goodsclass/
+[2025-03-17 16:29:06,098][django.request.log_response():241] [WARNING] Not Found: /goodsunit/
+[2025-03-17 16:29:07,324][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:29:14,942][django.request.log_response():241] [WARNING] Not Found: /goodsunit/
+[2025-03-17 16:29:19,089][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 16:29:27,906][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-17 16:48:10,788][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:48:34,805][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:48:35,722][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:48:38,408][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:48:57,150][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:49:00,578][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:49:01,388][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:49:02,465][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:50:25,413][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-17 16:50:27,321][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:50:39,887][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:50:40,708][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:50:41,429][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:50:42,084][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:51:35,650][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:51:43,009][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:51:45,450][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:51:46,272][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:51:46,990][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:51:47,718][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:51:48,301][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:52:12,610][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:52:24,626][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:52:25,713][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:52:26,690][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:52:38,240][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 16:53:14,193][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:56:51,334][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:57:01,628][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:57:04,622][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:57:07,532][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:57:08,344][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:57:12,436][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:57:30,647][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 16:57:38,166][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:00:53,497][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:01:08,903][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:01:26,163][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:11:38,555][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:11:57,880][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:12:08,051][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:13:15,715][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:13:54,368][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:21:56,614][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:21:57,732][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:22:02,894][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:22:30,431][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:24:05,330][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:24:28,219][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:24:29,276][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:24:29,659][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:24:30,356][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:24:31,216][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:25:46,586][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:25:50,688][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:25:57,850][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:26:09,194][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:26:15,237][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:26:27,952][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:26:29,103][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:26:30,717][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:26:34,647][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:26:36,170][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:26:39,966][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:26:45,427][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:27:06,866][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:28:53,032][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:28:54,153][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:28:55,832][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-17 17:29:09,609][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:29:12,460][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:29:15,586][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:29:40,003][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:29:42,275][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:29:50,916][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:30:15,443][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:30:20,049][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:30:21,406][django.request.log_response():241] [WARNING] Not Found: /goodsunit/
+[2025-03-17 17:30:23,643][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:31:35,582][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:31:40,068][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:31:41,847][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:31:43,716][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:32:07,024][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:32:10,661][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:32:20,335][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:32:37,840][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:32:46,792][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-17 17:32:58,074][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:34:15,815][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:34:17,130][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:37:35,113][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:37:39,301][django.request.log_response():241] [WARNING] Not Found: /cyclecount/manualcyclecount/
+[2025-03-17 17:37:42,906][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-17 17:37:46,011][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 17:42:54,743][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-17 17:42:56,297][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 18:35:13,484][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 18:35:45,866][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-17 18:58:28,072][django.request.log_response():241] [WARNING] Not Found: /reportcenter/asn/list/
+[2025-03-17 19:01:18,839][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:02:20,209][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:03:33,883][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:11:24,699][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 76, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:13:58,860][django.request.log_response():241] [ERROR] Not Implemented: /asn/list/
+[2025-03-18 14:14:33,607][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:14:59,812][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['creater'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:15:22,893][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['creater'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:15:59,981][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 77, in create
+    data['openid'] = self.request.auth.openid
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 526, in __setitem__
+    self._assert_mutable()
+  File "/usr/local/lib/python3.10/dist-packages/django/http/request.py", line 523, in _assert_mutable
+    raise AttributeError("This QueryDict instance is immutable")
+AttributeError: This QueryDict instance is immutable
+[2025-03-18 14:25:51,586][django.request.log_response():241] [ERROR] Not Implemented: /asn/list/
+[2025-03-18 14:26:26,585][django.request.log_response():241] [ERROR] Not Implemented: /asn/list/
+[2025-03-18 14:35:33,455][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-18 14:35:37,764][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-18 14:36:36,108][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 88, in create
+    scanner.objects.create(openid=self.request.auth.openid, mode="ASN", code=data['asn_code'], bar_code=data['bar_code'])
+NameError: name 'scanner' is not defined
+[2025-03-18 15:03:38,258][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 81, in create
+    data['asn_code'] = data['asn_type'] + order_day + '1'
+KeyError: 'asn_type'
+[2025-03-18 15:03:43,553][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 81, in create
+    data['asn_code'] = data['asn_type'] + order_day + '1'
+KeyError: 'asn_type'
+[2025-03-18 15:30:41,866][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    qs_set = AsnListModel.objects.filter(openid=self.request.auth.openid,ans_type=data['asn_type'], is_delete=False)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1407, in build_filter
+    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
+  File "/usr/local/lib/python3.10/dist-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 "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py", line 1709, in names_to_path
+    raise FieldError(
+django.core.exceptions.FieldError: Cannot resolve keyword 'ans_type' into field. Choices are: asn_code, asn_status, asn_type, code, create_time, creater, goods_code, goods_desc, goods_qty, goods_weight, id, is_delete, openid, update_time
+[2025-03-18 16:32:45,827][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 16:48:26,954][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 18:04:56,720][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-18 18:19:16,616][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/6/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 96, in update
+    serializer = self.get_serializer(qs, data=data)
+NameError: name 'qs' is not defined
+[2025-03-18 18:20:27,796][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/6/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 96, in update
+    serializer = self.get_serializer(qs, data=data)
+NameError: name 'data' is not defined
+[2025-03-18 18:38:36,275][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/6/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 103, in update
+    serializer_detail.is_valid(raise_exception=True)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 741, in is_valid
+    assert hasattr(self, 'initial_data'), (
+AssertionError: Cannot call `.is_valid()` as no `data=` keyword argument was passed when instantiating the serializer instance.
+[2025-03-18 18:52:17,312][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 75, in create
+    qs_set = AsnListModel.objects.filter(openid=self.request.auth.openid,asn_type=data['asn_type'], is_delete=False)
+KeyError: 'asn_type'
+[2025-03-18 19:08:54,675][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 19:16:59,428][django.request.log_response():241] [ERROR] Internal Server Error: /asn/list/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/home/flower/code/vue_ws/goods_wms/./asn/views.py", line 90, in create
+    AsnDetailModel.objects.create(data=data)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 669, in create
+    obj = self.model(**kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/db/models/base.py", line 565, in __init__
+    raise TypeError(
+TypeError: AsnDetailModel() got unexpected keyword arguments: 'data'
+[2025-03-18 19:44:31,248][django.request.log_response():241] [WARNING] Not Found: /asn/file/
+[2025-03-18 19:47:25,499][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-18 19:47:27,538][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-18 19:47:29,375][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-18 19:47:44,822][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-18 19:47:52,007][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-18 19:47:59,052][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-18 19:48:02,177][django.request.log_response():241] [WARNING] Not Found: /dn/list/
+[2025-03-18 19:48:07,356][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 20:01:57,402][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 20:02:45,710][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 20:02:48,881][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 20:02:55,213][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 20:05:45,595][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-18 20:10:02,273][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-18 20:10:27,243][django.request.log_response():241] [ERROR] Internal Server Error: /asn/detail/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 768, in data
+    ret = super().data
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 686, in to_representation
+    return [
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 522, in to_representation
+    ret[field.field_name] = field.to_representation(attribute)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
+    return int(value)
+ValueError: invalid literal for int() with base 10: '入库中'
+[2025-03-18 20:10:32,951][django.request.log_response():241] [ERROR] Internal Server Error: /asn/detail/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 768, in data
+    ret = super().data
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 686, in to_representation
+    return [
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 522, in to_representation
+    ret[field.field_name] = field.to_representation(attribute)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
+    return int(value)
+ValueError: invalid literal for int() with base 10: '入库中'
+[2025-03-18 20:10:38,339][django.request.log_response():241] [ERROR] Internal Server Error: /asn/detail/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 42, in inner
+    response = await get_response(request)
+  File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
+    return await fut
+  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/asgiref/sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 768, in data
+    ret = super().data
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 686, in to_representation
+    return [
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/serializers.py", line 522, in to_representation
+    ret[field.field_name] = field.to_representation(attribute)
+  File "/usr/local/lib/python3.10/dist-packages/rest_framework/fields.py", line 915, in to_representation
+    return int(value)
+ValueError: invalid literal for int() with base 10: '入库中'
+[2025-03-19 13:19:27,671][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-19 13:28:55,012][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-19 13:29:44,378][django.request.log_response():241] [WARNING] Not Found: /dn/list/

BIN
reportcenter/__pycache__/files.cpython-310.pyc


BIN
reportcenter/__pycache__/models.cpython-310.pyc


BIN
reportcenter/__pycache__/urls.cpython-310.pyc


BIN
reportcenter/__pycache__/views.cpython-310.pyc


+ 38 - 38
reportcenter/files.py

@@ -3,48 +3,48 @@ from rest_framework_csv.renderers import CSVStreamingRenderer
 
 def file_headers_list():
     return [
-        'goods_code',
-        'goods_desc',
-        'goods_qty',
-        'onhand_stock',
-        'can_order_stock',
-        'ordered_stock',
-        'inspect_stock',
-        'hold_stock',
-        'damage_stock',
-        'asn_stock',
-        'dn_stock',
-        'pre_load_stock',
-        'pre_sort_stock',
-        'sorted_stock',
-        'pick_stock',
-        'picked_stock',
-        'back_order_stock',
-        'create_time',
-        'update_time'
+            'document_date', 
+            'document_number',
+            'document_type',
+            'business_type', 
+            'iout_type', 
+            'department', 
+       
+            'warehouse_name', 
+            'goods_code', 
+            'goods_desc', 
+            'goods_std', 
+            'goods_batch', 
+            'in_batch', 
+            'out_batch', 
+            'goods_in', 
+            'goods_out', 
+            'goods_notes', 
+            'creator'
     ]
 
+
+
 def cn_data_header_list():
     return dict([
-        ('goods_code', u'商品编码'),
-        ('goods_desc', u'商品描述'),
-        ('goods_qty', u'商品数量'),
-        ('onhand_stock', u'现有库存'),
-        ('can_order_stock', u'可被下单数量'),
-        ('ordered_stock', u'已被下单数量'),
-        ('inspect_stock', u'质检库存'),
-        ('hold_stock', u'锁定库存'),
-        ('damage_stock', u'破损库存'),
-        ('asn_stock', u'到货通知书数量'),
-        ('dn_stock', u'发货单数量'),
-        ('pre_load_stock', u'等待卸货数量'),
-        ('pre_sort_stock', u'等待分拣数量'),
-        ('sorted_stock', u'已分拣数量'),
-        ('pick_stock', u'等待拣货数量'),
-        ('picked_stock', u'已拣货数量'),
-        ('back_order_stock', u'欠货数量'),
-        ('create_time', u'创建时间'),
-        ('update_time', u'更新时间')
+        ('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_in', '入库数量'),
+        ('goods_out', '出库数量'),
+        ('goods_notes', '备注'),
+        ('creator', '创建人')
     ])
 
 class FileFlowListRenderCN(CSVStreamingRenderer):

+ 1 - 2
reportcenter/models.py

@@ -29,8 +29,7 @@ class flowModel(models.Model):
         verbose_name_plural = "Flow List"
         ordering = ['id']
         constraints = [
-           
-            models.UniqueConstraint(
+        models.UniqueConstraint(
                 fields=[
                     'document_date', 'document_number', 'document_type',
                     'business_type', 'iout_type', 'department', 'warehouse_code',

+ 1 - 0
reportcenter/urls.py

@@ -3,5 +3,6 @@ from . import views
 
 urlpatterns = [
     path(r'flow/', views.FlowsStatsViewSet.as_view({"get": "list", "post": "create"}), name="management"),
+    path(r'file/', views.FileListDownloadView.as_view({"get": "list"}), name="flowfile"),
 
 ]

+ 55 - 0
reportcenter/views.py

@@ -16,6 +16,61 @@ from .filter import FlowFilter
 from .files import  FileFlowListRenderCN
 
 
+class FileListDownloadView(viewsets.ModelViewSet):
+    renderer_classes = (FileFlowListRenderCN, ) + tuple(api_settings.DEFAULT_RENDERER_CLASSES)
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "document_date" ]
+    filter_class = FlowFilter
+
+    def get_project(self):
+        try:
+            id = self.kwargs.get('pk')
+            return id
+        except:
+            return None
+
+    def get_queryset(self):
+        id = self.get_project()
+        if self.request.user:
+            if id is None:
+                return flowlist.objects.filter()
+            else:
+                return flowlist.objects.filter(id=id)
+        else:
+            return flowlist.objects.none()
+
+    def get_serializer_class(self):
+        if self.action in ['list']:
+            return serializers.flowSerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)
+
+    def get_render(self, data):
+        # lang = self.request.META.get('HTTP_LANGUAGE')
+        # if lang:
+        #     if lang == 'zh-hans':
+        #         return FileListRenderCN().render(data)
+        #     else:
+        #         return FileListRenderEN().render(data)
+        # else:
+        #     return FileListRenderEN().render(data)
+        return FileFlowListRenderCN().render(data)
+
+
+    def list(self, request, *args, **kwargs):
+        from datetime import datetime
+        dt = datetime.now()
+        data = (
+            serializers.flowSerializer(instance).data
+            for instance in self.filter_queryset(self.get_queryset())
+        )
+        renderer = self.get_render(data)
+        response = StreamingHttpResponse(
+            renderer,
+            content_type="text/csv"
+        )
+        response['Content-Disposition'] = "attachment; filename='stocklist_{}.csv'".format(str(dt.strftime('%Y%m%d%H%M%S%f')))
+        return response
 
 class FlowsStatsViewSet(viewsets.ModelViewSet):
 

+ 27 - 4
templates/src/i18n/zh-hans/index.js

@@ -2,6 +2,7 @@
 // so you can safely delete all default props below
 
 import { number, setCanvasCreator } from "echarts";
+import bus from "src/boot/bus";
 
 export default {
   failed: 'Action failed',
@@ -50,6 +51,7 @@ export default {
     cancel: '取消',
     close: '关闭',
     submit: '提交',
+    clear : '清空',
     download: '下载',
     updatetitle: '升级就绪',
     updatedesc: '版本已经升级准备就绪',
@@ -303,8 +305,28 @@ export default {
     specs: '商品规格',
     origin: '商品产地',
     view_goodslist: {
-      goods_code: '商品编码',
-      goods_desc: '商品描述',
+      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: '创建人',
+ 
+  
+  
       goods_name: '商品名称',
       goods_supplier: '供应商',
       goods_weight: '商品重量(单位:克)',
@@ -496,8 +518,9 @@ export default {
 
     },
     view_stocklist: {
-      goods_code: '商品编码',
-      goods_desc: '商品描述',
+     
+      goods_desc: '存货描述',
+      goods_code: '存货编码',
       goods_qty: '总数量',
       onhand_stock: '现有数量',
       can_order_stock: '可被下单数量',

+ 18 - 34
templates/src/layouts/MainLayout.vue

@@ -16,26 +16,7 @@
         </transition>
 
         <q-space />
-        <transition appear enter-active-class="animated zoomIn">
-          <q-btn round dense flat color="white" icon="translate" style="margin: 0 10px 0 10px">
-            <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[15, 15]"
-              content-style="font-size: 12px">{{ $t("index.translate") }}</q-tooltip>
-            <q-menu>
-              <q-list style="min-width: 100px">
-                <q-item clickable v-close-popup v-for="(language, index) in langOptions" :key="index"
-                  @click="langChange(language.value)">
-                  <q-item-section>{{ language.label }}</q-item-section>
-                </q-item>
-              </q-list>
-            </q-menu>
-          </q-btn>
-        </transition>
-        <transition appear enter-active-class="animated zoomIn">
-          <q-btn icon="api" round dense flat @click="apiLink()" style="margin: 0 10px 0 10px">
-            <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[15, 15]"
-              content-style="font-size: 12px">{{ $t('index.api') }}</q-tooltip>
-          </q-btn>
-        </transition>
+
         <transition appear enter-active-class="animated zoomIn">
           <q-btn square dense flat color="white" :label="warehouse_name" icon="maps_home_work"
             style="margin: 0 10px 0 10px">
@@ -122,6 +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('inbound')" v-ripple exact
+         >
+            <q-item-section avatar><q-icon name="stay_current_landscape" /></q-item-section>
+            <q-item-section>托盘管理</q-item-section>
+          </q-item>
           <q-item clickable :to="{ name: 'dn' }" @click="linkChange('outbound')" v-ripple exact
             :active="link === 'outbound' && link !== ''"
             :class="{ 'my-menu-link': link === 'outbound' && link !== '' }">
@@ -312,7 +298,7 @@ export default {
     return {
       device: LocalStorage.getItem('device'),
       device_name: LocalStorage.getItem('device_name'),
-      lang: this.$i18n.locale,
+      lang: 'zh-hans',
       container_height: this.$q.screen.height + '' + 'px',
       warehouse_name: '',
       warehouseOptions: [],
@@ -570,7 +556,7 @@ export default {
         _this.warehouse_name = _this.warehouseOptions[e].warehouse_name
         localStorage.setItem('warehouse_name', _this.warehouseOptions[e].warehouse_name)
         localStorage.setItem('warehouse_code', _this.warehouseOptions[e].warehouse_code)
-    
+
         _this.switch_state = true
       }
       else {
@@ -587,13 +573,13 @@ export default {
       // LocalStorage.remove('auth')
       // SessionStorage.remove('axios_check')
     },
-    langChange(e) {
-      var _this = this
-      _this.lang = e
-      window.setTimeout(() => {
-        location.reload()
-      }, 1)
-    },
+    // langChange(e) {
+    //   var _this = this
+    //   _this.lang = e
+    //   window.setTimeout(() => {
+    //     location.reload()
+    //   }, 1)
+    // },
     isLoggedIn() {
       if (this.$q.localStorage.getItem('openid')) {
         this.login = true
@@ -604,6 +590,8 @@ export default {
   },
   created() {
     var _this = this
+    _this.$i18n.locale = 'zh-hans'
+
     if (LocalStorage.has('openid')) {
       _this.openid = LocalStorage.getItem('openid')
       _this.activeTab = 'admin'
@@ -642,11 +630,7 @@ export default {
   destroyed() {
   },
   watch: {
-    lang(lang) {
-      var _this = this
-      LocalStorage.set('lang', lang)
-      _this.$i18n.locale = lang
-    },
+
     login(val) {
       if (val) {
         if (this.activeTab === 'admin') {

+ 291 - 251
templates/src/pages/dashboard/flows_statements.vue

@@ -3,8 +3,8 @@
 
     <transition appear enter-active-class="animated fadeIn">
       <q-table class="my-sticky-header-column-table shadow-24" :data="table_list" row-key="id" :separator="separator"
-        :loading="loading" :filter="filter" :columns="columns" hide-bottom :pagination.sync="pagination"
-        no-data-label="No data" no-results-label="No data you want" :table-style="{ height: height }" flat bordered>
+        :loading="loading" :columns="columns" hide-bottom :pagination.sync="pagination" no-data-label="No data"
+        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">
@@ -26,8 +26,16 @@
             <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 /></q-popup-proxy>
+                  <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>
@@ -43,163 +51,204 @@
         </template>
         <template v-slot:body="props">
           <q-tr :props="props">
+
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_code" :props="props">
-                <q-input dense outlined square v-model="editFormData.goods_code"
-                  :label="$t('goods.view_goodslist.goods_code')" autofocus
+              <q-td key="document_date" :props="props">
+                <q-input dense outlined square v-model="editFormData.document_date"
+                  :label="$t('goods.view_goodslist.document_date')" autofocus
                   :rules="[val => (val && val.length > 0) || error1]" />
               </q-td>
             </template>
             <template v-else-if="props.row.id !== editid">
-              <q-td key="goods_code" :props="props">{{ props.row.goods_code }}</q-td>
+              <q-td key="document_date" :props="props">{{ props.row.document_date }}</q-td>
             </template>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_desc" :props="props">
-                <q-input dense outlined square v-model="editFormData.goods_desc"
-                  :label="$t('goods.view_goodslist.goods_desc')" :rules="[val => (val && val.length > 0) || error2]" />
+              <q-td key="document_number" :props="props">
+                <q-input dense outlined square v-model="editFormData.document_number"
+                  :label="$t('goods.view_goodslist.document_number')"
+                  :rules="[val => (val && val.length > 0) || error2]" />
               </q-td>
             </template>
             <template v-else-if="props.row.id !== editid">
-              <q-td key="goods_desc" :props="props">{{ props.row.goods_desc }}</q-td>
+              <q-td key="document_number" :props="props">{{ props.row.document_number }}</q-td>
             </template>
+
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_supplier" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <q-td key="document_type" :props="props">
+                <q-input dense outlined square v-model="editFormData.document_type"
+                  :label="$t('goods.view_goodslist.document_type')"
+                  :rules="[val => (val && val.length > 0) || error2]" />
               </q-td>
             </template>
             <template v-else-if="props.row.id !== editid">
-              <q-td key="goods_supplier" :props="props">{{ props.row.goods_supplier }}</q-td>
+              <q-td key="document_type" :props="props">{{ props.row.document_type }}</q-td>
             </template>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_weight" :props="props">
-                <q-input dense outlined square v-model.number="editFormData.goods_weight" type="number"
-                  :label="$t('goods.view_goodslist.goods_weight')" :rules="[val => (val && val > 0) || error4]" />
+              <q-td key="business_type" :props="props">
+                <q-input dense outlined square v-model="editFormData.business_type"
+                  :label="$t('goods.view_goodslist.business_type')"
+                  :rules="[val => (val && val.length > 0) || error4]" />
               </q-td>
             </template>
             <template v-else-if="props.row.id !== editid">
-              <q-td key="goods_weight" :props="props">{{ props.row.goods_weight }}</q-td>
+              <q-td key="business_type" :props="props">{{ props.row.business_type }}</q-td>
             </template>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_w" :props="props">
-                <q-input dense outlined square v-model.number="editFormData.goods_w" type="number"
-                  :label="$t('goods.view_goodslist.goods_w')" :rules="[val => (val && val > 0) || error5]" />
+              <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="goods_w" :props="props">{{ props.row.goods_w }}</q-td>
+              <q-td key="iout_type" :props="props">{{ props.row.iout_type }}</q-td>
             </template>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_d" :props="props">
-                <q-input dense outlined square v-model.number="editFormData.goods_d" type="number"
-                  :label="$t('goods.view_goodslist.goods_d')" :rules="[val => (val && val > 0) || error6]" />
+              <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="goods_d" :props="props">{{ props.row.goods_d }}</q-td>
+              <q-td key="department" :props="props">{{ props.row.department }}</q-td>
             </template>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_h" :props="props">
-                <q-input dense outlined square v-model.number="editFormData.goods_h" type="number"
-                  :label="$t('goods.view_goodslist.goods_h')" :rules="[val => (val && val > 0) || error7]" />
+              <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="goods_h" :props="props">{{ props.row.goods_h }}</q-td>
+              <q-td key="warehouse_code" :props="props">{{ props.row.warehouse_code }}</q-td>
             </template>
-            <q-td key="unit_volume" :props="props">{{ props.row.unit_volume }}</q-td>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_unit" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <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="goods_unit" :props="props">{{ props.row.goods_unit }}</q-td>
+              <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_class" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <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_class" :props="props">{{ props.row.goods_class }}</q-td>
+              <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_brand" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <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_brand" :props="props">{{ props.row.goods_brand }}</q-td>
+              <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_color" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <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_color" :props="props">{{ props.row.goods_color }}</q-td>
+              <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_shape" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <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_shape" :props="props">{{ props.row.goods_shape }}</q-td>
+              <q-td key="goods_batch" :props="props">{{ props.row.goods_batch }}</q-td>
             </template>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_specs" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <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="goods_specs" :props="props">{{ props.row.goods_specs }}</q-td>
+              <q-td key="in_batch" :props="props">{{ props.row.in_batch }}</q-td>
             </template>
+
             <template v-if="props.row.id === editid">
-              <q-td key="goods_origin" :props="props">
-                <q-select dense outlined square v-model="editFormData.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]" />
+              <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="goods_origin" :props="props">{{ props.row.goods_origin }}</q-td>
+              <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_cost" :props="props">
-                <q-input dense outlined square v-model.number="editFormData.goods_cost" type="number"
-                  :label="$t('goods.view_goodslist.goods_cost')" :rules="[val => (val && val > 0) || error15]" />
+              <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_cost" :props="props">{{ props.row.goods_cost }}</q-td>
+              <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_price" :props="props">
-                <q-input dense outlined square v-model.number="editFormData.goods_price" type="number"
-                  :label="$t('goods.view_goodslist.goods_price')" :rules="[val => (val && val > 0) || error16]" />
+              <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_price" :props="props">{{ props.row.goods_price }}</q-td>
+              <q-td key="goods_in" :props="props">{{ props.row.goods_in }}</q-td>
             </template>
-            <q-td key="creater" :props="props">{{ props.row.creater }}</q-td>
-            <q-td key="create_time" :props="props">{{ props.row.create_time }}</q-td>
-            <q-td key="update_time" :props="props">{{ props.row.update_time }}</q-td>
+
+            <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)">
@@ -240,7 +289,8 @@
     <template>
       <div v-show="max !== 0" class="q-pa-lg flex flex-center">
         <div>{{ total }} </div>
-        <q-pagination v-model="current" color="black" :max="max" :max-pages="6" boundary-links @click="getList()" />
+        <q-pagination v-model="current" color="black" :max="max" :max-pages="6" boundary-links
+          @click="getSearchList(current); paginationIpt = current" />
         <div>
           <input v-model="paginationIpt" @blur="changePageEnter" @keyup.enter="changePageEnter"
             style="width: 60px; text-align: center" />
@@ -309,7 +359,7 @@
         </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>
           <q-btn color="primary" @click="newDataSubmit()">{{ $t('submit') }}</q-btn>
         </div>
       </q-card>
@@ -326,7 +376,7 @@
         <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>
           <q-btn color="primary" @click="deleteDataSubmit()">{{ $t('submit') }}</q-btn>
         </div>
       </q-card>
@@ -362,15 +412,16 @@
 
 <script>
 import { getauth, postauth, putauth, deleteauth } from 'boot/axios_request'
-import { date, LocalStorage } from 'quasar'
+import { date, exportFile, LocalStorage } from 'quasar'
+
 
 export default {
   name: 'Pageflowlist',
   data() {
     return {
-
-
-      highlightDates: { from: null, to: null },
+      createDate1: '',
+      createDate2: '',
+      date_range: '',
       proxyDate: '',
       date: '',
       goods_code: '',
@@ -378,7 +429,10 @@ export default {
       openid: '',
       login_name: '',
       authin: '0',
-      pathname: 'goods/',
+      searchUrl: '',
+      pathname: 'reportcenter/flow/',
+      pathfilename: 'reportcenter/file/',
+
       pathname_previous: '',
       pathname_next: '',
       separator: 'cell',
@@ -390,36 +444,28 @@ export default {
         popTitle: this.$t('inbound.asn')
       },
       table_list: [],
-      goods_unit_list: [],
-      goods_class_list: [],
-      goods_brand_list: [],
-      goods_color_list: [],
-      goods_shape_list: [],
-      goods_specs_list: [],
-      goods_origin_list: [],
-      supplier_list: [],
+
       columns: [
-        { name: 'goods_code', required: true, label: this.$t('goods.view_goodslist.goods_code'), align: 'left', field: 'goods_code' },
-        { name: 'goods_desc', label: this.$t('goods.view_goodslist.goods_desc'), field: 'goods_desc', align: 'center' },
-        { name: 'goods_supplier', label: this.$t('goods.view_goodslist.goods_supplier'), field: 'goods_supplier', align: 'center' },
-        { name: 'goods_weight', label: this.$t('goods.view_goodslist.goods_weight'), field: 'goods_weight', align: 'center' },
-        { name: 'goods_w', label: this.$t('goods.view_goodslist.goods_w'), field: 'goods_w', align: 'center' },
-        { name: 'goods_d', label: this.$t('goods.view_goodslist.goods_d'), field: 'goods_d', align: 'center' },
-        { name: 'goods_h', label: this.$t('goods.view_goodslist.goods_h'), field: 'goods_h', align: 'center' },
-        { name: 'unit_volume', label: this.$t('goods.view_goodslist.unit_volume'), field: 'unit_volume', align: 'center' },
-        { name: 'goods_unit', label: this.$t('goods.view_goodslist.goods_unit'), field: 'goods_unit', align: 'center' },
-        { name: 'goods_class', label: this.$t('goods.view_goodslist.goods_class'), field: 'goods_class', align: 'center' },
-        { name: 'goods_brand', label: this.$t('goods.view_goodslist.goods_brand'), field: 'goods_brand', align: 'center' },
-        { name: 'goods_color', label: this.$t('goods.view_goodslist.goods_color'), field: 'goods_color', align: 'center' },
-        { name: 'goods_shape', label: this.$t('goods.view_goodslist.goods_shape'), field: 'goods_shape', align: 'center' },
-        { name: 'goods_specs', label: this.$t('goods.view_goodslist.goods_specs'), field: 'goods_specs', align: 'center' },
-        { name: 'goods_origin', label: this.$t('goods.view_goodslist.goods_origin'), field: 'goods_origin', align: 'center' },
-        { name: 'goods_cost', label: this.$t('goods.view_goodslist.goods_cost'), field: 'goods_cost', align: 'center' },
-        { name: 'goods_price', label: this.$t('goods.view_goodslist.goods_price'), field: 'goods_price', align: 'center' },
-        { name: 'creater', label: this.$t('creater'), field: 'creater', align: 'center' },
-        { name: 'create_time', label: this.$t('createtime'), field: 'create_time', align: 'center' },
-        { name: 'update_time', label: this.$t('updatetime'), field: 'update_time', align: 'center' },
-        { name: 'action', label: this.$t('action'), align: 'right' }
+        { name: 'document_date', required: true, label: '单据日期', align: 'left', field: 'goods_code' },
+        { name: 'document_number', label: '单据编号', field: 'goods_desc', align: 'center' },
+        { name: 'document_type', label: '单据类型', field: 'goods_supplier', align: 'center' },
+        { name: 'business_type', label: '业务类型', field: 'goods_weight', align: 'center' },
+        { name: 'iout_type', label: '出入库类型', field: 'iout_type', align: 'center' },
+        { name: 'department', label: '部门', field: 'department', align: 'center' },
+        { name: 'warehouse_code', label: '仓库编码', field: 'warehouse_code', align: 'center' },
+        { name: 'warehouse_name', label: '仓库名称', field: 'warehouse_name', align: 'center' },
+        { name: 'goods_code', label: '存货编码', field: 'goods_code', align: 'center' },
+        { name: 'goods_desc', label: '存货', field: 'goods_desc', align: 'center' },
+        { name: 'goods_std', label: '规格型号', field: 'goods_std', align: 'center' },
+        { name: 'goods_batch', label: '批号', field: 'goods_batch', align: 'center' },
+        { name: 'in_batch', label: '入库批号', field: 'in_batch', align: 'center' },
+        { name: 'out_batch', label: '出库批号', field: 'out_batch', align: 'center' },
+        { name: 'goods_unit', label: '计量单位', field: 'goods_unit', align: 'center' },
+        { name: 'goods_in', label: '本期入库', field: 'goods_in', align: 'center' },
+        { name: 'goods_out', label: '本期出库', field: 'goods_out', align: 'center' },
+        { name: 'goods_notes', label: '备注', field: 'goods_notes', align: 'center' },
+        { name: 'creator', label: '创建人', field: 'creator', align: 'center' },
+        { name: 'action', label: '操作', align: 'center' }
       ],
       filter: '',
       pagination: {
@@ -428,23 +474,25 @@ export default {
       },
       newForm: false,
       newFormData: {
+        document_date: '',
+        document_number: '',
+        document_type: '',
+        business_type: '',
+        iout_type: '',
+        department: '',
+        warehouse_code: '',
+        warehouse_name: '',
         goods_code: '',
         goods_desc: '',
-        goods_supplier: '',
-        goods_weight: '',
-        goods_w: '',
-        goods_d: '',
-        goods_h: '',
+        goods_std: '',
+        goods_batch: '',
+        in_batch: '',
+        out_batch: '',
         goods_unit: '',
-        goods_class: '',
-        goods_brand: '',
-        goods_color: '',
-        goods_shape: '',
-        goods_specs: '',
-        goods_origin: '',
-        goods_cost: '',
-        goods_price: '',
-        creater: ''
+        goods_in: '',
+        goods_out: '',
+        goods_notes: '',
+        creator: ''
       },
       editid: 0,
       editFormData: {},
@@ -471,58 +519,45 @@ export default {
       current: 1,
       max: 0,
       total: 0,
-      paginationIpt: 1
+      paginationIpt: 1,
+      current: 1,
+
     }
 
   },
   computed: {
-    selectionTip() {
-      if (!this.startDate) return '请点击选择开始日期'
-
-      return `已选择时间段:${this.startDate} 至 ${this.endDate}`
-    },
-
-    startDate() {
-      return this.highlightDates.from
-        ? date.formatDate(this.highlightDates.from, 'YYYY/MM/DD')
-        : null
-    },
-    endDate() {
-      return this.highlightDates.to
-        ? date.formatDate(this.highlightDates.to, 'YYYY/MM/DD')
-        : null
-    },
-    isValidRange() {
-      return !!this.startDate && !!this.endDate
+    interval() {
+      return this.$t('download_center.start') + ' - ' + this.$t('download_center.end')
     }
   },
   methods: {
-
-    getList() {
+    getList(params = {}) {
       var _this = this
-      getauth(_this.pathname + '?page=' + '' + _this.current, {})
+      _this.loading = true
+      // 合并基础参数
+      const baseParams = {
+        page: _this.current,
+        page_size: _this.pagination.rowsPerPage
+      }
+
+      // 创建URLSearchParams处理参数
+      const queryParams = new URLSearchParams({
+        ...baseParams,
+        ...params
+      })
+      console.log(queryParams)
+      // 过滤空值参数
+      Array.from(queryParams.entries()).forEach(([key, value]) => {
+        if (value === '' || value === null || value === undefined) {
+          queryParams.delete(key)
+        }
+      })
+
+      getauth(`${_this.pathname}?${queryParams}`)
         .then(res => {
           _this.table_list = res.results
           _this.total = res.count
-          if (res.count === 0) {
-            _this.max = 0
-          } else {
-
-
-            if (Math.ceil(res.count / _this.pagination.rowsPerPage) === 1) {
-              _this.max = 0
-            } else {
-              _this.max = Math.ceil(res.count / _this.pagination.rowsPerPage)
-            }
-          }
-          _this.goods_unit_list = res.goods_unit_list
-          _this.goods_class_list = res.goods_class_list
-          _this.goods_brand_list = res.goods_brand_list
-          _this.goods_color_list = res.goods_color_list
-          _this.goods_shape_list = res.goods_shape_list
-          _this.goods_specs_list = res.goods_specs_list
-          _this.goods_origin_list = res.goods_origin_list
-          _this.supplier_list = res.supplier_list
+          _this.max = Math.ceil(res.count / _this.pagination.rowsPerPage) || 0
           _this.pathname_previous = res.previous
           _this.pathname_next = res.next
         })
@@ -533,8 +568,11 @@ export default {
             color: 'negative'
           })
         })
+        .finally(() => {
+          _this.loading = false
+        })
     },
-    changePageEnter(e) {
+    changePageEnter() {
       if (Number(this.paginationIpt) < 1) {
         this.current = 1
         this.paginationIpt = 1
@@ -544,61 +582,71 @@ export default {
       } else {
         this.current = Number(this.paginationIpt)
       }
-      this.getList()
+      this.getSearchList(this.current)
     },
-    getSearchList() {
+
+    // 带搜索条件加载
+    getSearchList(page = 1) {
+      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
-      if (LocalStorage.has('auth')) {
-        _this.current = 1
-        _this.paginationIpt = 1
-        getauth(_this.pathname + '?goods_desc__icontains=' + _this.filter + '&page=' + '' + _this.current, {})
-          .then(res => {
-            _this.table_list = res.results
-            _this.total = res.count
-            if (res.count === 0) {
-              _this.max = 0
-            } else {
-
-              if (Math.ceil(res.count / _this.pagination.rowsPerPage) === 1) {
-                _this.max = 0
-              } else {
-                _this.max = Math.ceil(res.count / _this.pagination.rowsPerPage)
-              }
-            }
-            _this.goods_unit_list = res.goods_unit_list
-            _this.goods_class_list = res.goods_class_list
-            _this.goods_brand_list = res.goods_brand_list
-            _this.goods_color_list = res.goods_color_list
-            _this.goods_shape_list = res.goods_shape_list
-            _this.goods_specs_list = res.goods_specs_list
-            _this.goods_origin_list = res.goods_origin_list
-            _this.supplier_list = res.supplier_list
-            _this.pathname_previous = res.previous
-            _this.pathname_next = res.next
-          })
-          .catch(err => {
+      _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)
+        }
+      })
+      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: err.detail,
-              icon: 'close',
-              color: 'negative'
+              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')) {
         getauth(_this.pathname_previous, {})
           .then(res => {
             _this.table_list = res.results
-            _this.goods_unit_list = res.goods_unit_list
-            _this.goods_class_list = res.goods_class_list
-            _this.goods_brand_list = res.goods_brand_list
-            _this.goods_color_list = res.goods_color_list
-            _this.goods_shape_list = res.goods_shape_list
-            _this.goods_specs_list = res.goods_specs_list
-            _this.goods_origin_list = res.goods_origin_list
-            _this.supplier_list = res.supplier_list
             _this.pathname_previous = res.previous
             _this.pathname_next = res.next
           })
@@ -618,14 +666,7 @@ export default {
         getauth(_this.pathname_next, {})
           .then(res => {
             _this.table_list = res.results
-            _this.goods_unit_list = res.goods_unit_list
-            _this.goods_class_list = res.goods_class_list
-            _this.goods_brand_list = res.goods_brand_list
-            _this.goods_color_list = res.goods_color_list
-            _this.goods_shape_list = res.goods_shape_list
-            _this.goods_specs_list = res.goods_specs_list
-            _this.goods_origin_list = res.goods_origin_list
-            _this.supplier_list = res.supplier_list
+
             _this.pathname_previous = res.previous
             _this.pathname_next = res.next
           })
@@ -640,8 +681,9 @@ export default {
     },
     reFresh() {
       var _this = this
-      _this.getList()
+      _this.getSearchList()
     },
+
     newDataSubmit() {
       var _this = this
       var goodscodes = []
@@ -652,7 +694,7 @@ export default {
         _this.newFormData.creater = _this.login_name
         postauth(_this.pathname, _this.newFormData)
           .then(res => {
-            _this.getList()
+            _this.getSearchList()
             _this.newDataCancel()
             if (res.status_code != 500) {
               _this.$q.notify({
@@ -737,7 +779,7 @@ export default {
       putauth(_this.pathname + _this.editid + '/', _this.editFormData)
         .then(res => {
           _this.editDataCancel()
-          _this.getList()
+          _this.getSearchList()
           if (res.status_code != 500) {
             _this.$q.notify({
               message: 'Success Edit Data',
@@ -788,7 +830,7 @@ export default {
       deleteauth(_this.pathname + _this.deleteid + '/')
         .then(res => {
           _this.deleteDataCancel()
-          _this.getList()
+          _this.getSearchList()
           _this.$q.notify({
             message: 'Success Edit Data',
             icon: 'check',
@@ -829,22 +871,7 @@ export default {
         })
       _this.viewForm = true
     },
-    // 日期点击处理
-
-
-    // 清除选择
-    clearSelection() {
-
-      this.highlightDates = []
-    },
-    // 提交处理
-    save() {
-      console.log('提交数据:', {
-        start: this.startDate,
-        end: this.endDate,
 
-      })
-    },
     updateProxy() {
       var _this = this
       _this.proxyDate = _this.date
@@ -888,16 +915,29 @@ export default {
   destroyed() { },
   // 在 watch 或方法中添加调试代码
   watch: {
-    highlightDates: {
-      handler(newVal) {
-        // 正确打印方式
-        console.log('日期数据:', JSON.parse(JSON.stringify(newVal)))
-        console.log('开始日期:', this.startDate) // 
-        console.log('结束日期:', this.endDate)   // 
+    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, '-')
 
-      },
-      deep: true
+        this.getSearchList()
+        this.$refs.qDateProxy.hide()
+      }
+      else {
+        this.createDate2 = ''
+        this.date_range = ''
+        this.getSearchList()
+      }
     }
   }
 }

File diff suppressed because it is too large
+ 451 - 1226
templates/src/pages/inbound/asn.vue


+ 585 - 193
templates/src/pages/inbound/asnfinish.vue

@@ -1,295 +1,687 @@
 <template>
-    <div>
-      <transition appear enter-active-class="animated fadeIn">
-      <q-table
-        class="my-sticky-header-table shadow-24"
-        :data="table_list"
-        row-key="id"
-        :separator="separator"
-        :loading="loading"
-        :filter="filter"
-        :columns="columns"
-        hide-bottom
-        :pagination.sync="pagination"
-        no-data-label="No data"
-        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('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-group>
-           <q-space />
-           <q-input outlined rounded dense debounce="300" color="primary" v-model="filter" :placeholder="$t('search')" @input="getSearchList()" @keyup.enter="getSearchList()">
-             <template v-slot:append>
-               <q-icon name="search" @click="getSearchList()"/>
-             </template>
-           </q-input>
-         </template>
-         <template v-slot:body="props">
-           <q-tr :props="props">
-               <q-td key="asn_code" :props="props">
-                 {{ props.row.asn_code }}
-               </q-td>
-               <q-td key="goods_code" :props="props">
-                 {{ props.row.goods_code }}
-               </q-td>
-               <q-td key="goods_desc" :props="props">
-                 {{ props.row.goods_desc }}
-               </q-td>
-               <q-td key="goods_qty" :props="props">
-                 {{ props.row.goods_qty }}
-               </q-td>
-               <q-td key="goods_actual_qty" :props="props">
-                 {{ props.row.goods_actual_qty }}
-               </q-td>
-             <q-td key="goods_shortage_qty" :props="props">
-               {{ props.row.goods_shortage_qty }}
-             </q-td>
-             <q-td key="goods_more_qty" :props="props">
-               {{ props.row.goods_more_qty }}
-             </q-td>
-             <q-td key="goods_damage_qty" :props="props">
-               {{ props.row.goods_damage_qty }}
-             </q-td>
-             <q-td key="supplier" :props="props">
-               {{ props.row.supplier }}
-             </q-td>
-             <q-td key="creater" :props="props">
-               {{ props.row.creater }}
-             </q-td>
-             <q-td key="create_time" :props="props">
-               {{ props.row.create_time }}
-             </q-td>
-             <q-td key="update_time" :props="props">
-               {{ props.row.update_time }}
-             </q-td>
-           </q-tr>
-         </template>
-      </q-table>
-        </transition>
-      <template>
-        <div v-show="max !== 0" class="q-pa-lg flex flex-center">
-           <div>{{ total }} </div>
-          <q-pagination
-            v-model="current"
-            color="black"
-            :max="max"
-            :max-pages="6"
-            boundary-links
-            @click="getList()"
-          />
-          <div>
-            <input
-              v-model="paginationIpt"
-              @blur="changePageEnter"
-              @keyup.enter="changePageEnter"
-              style="width: 60px; text-align: center"
-            />
+  <div>
+    <transition appear enter-active-class="animated fadeIn">
+      <q-table class="my-sticky-header-column-table shadow-24" :data="table_list" row-key="id" :separator="separator"
+        :loading="loading" :columns="columns" hide-bottom :pagination.sync="pagination" no-data-label="No data"
+        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; newFormData.creater = login_name">
+              <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-group>
+
+          <q-space />
+
+          <div class="flex items-center">
+
+            <q-input outlined rounded dense debounce="300" color="primary" v-model="filter" :placeholder="$t('search')"
+              @input="getSearchList()" @keyup.enter="getSearchList()">
+              <template v-slot:append>
+                <q-icon name="search" @click="getSearchList()" />
+              </template>
+            </q-input>
           </div>
+        </template>
+        <template v-slot:body="props">
+          <q-tr :props="props">
+            <template v-if="props.row.id === editid">
+              <q-td key="code" :props="props">{{ props.row.code }}</q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="code" :props="props">{{ props.row.code }}</q-td>
+            </template>
+
+            <template v-if="props.row.id === editid">
+              <q-td key="asn_code" :props="props">{{ props.row.asn_code }}</q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="asn_code" :props="props">{{ props.row.asn_code }}</q-td>
+            </template>
+
+
+            <template v-if="props.row.id === editid">
+              <q-td key="goods_code" :props="props">
+                <q-input dense outlined square v-model="editFormData.goods_code" :label="'存货编码'"
+                  :rules="[val => (val && val.length > 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="editFormData.goods_desc" :label="'存货名称'"
+                  :rules="[val => (val && val.length > 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_qty" :props="props">
+                <q-input dense outlined square v-model.number="editFormData.goods_qty" :label="'入库数量'" type="number"
+                  :rules="[val => (val && val > 0) || error8]" />
+              </q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="goods_qty" :props="props">{{ props.row.goods_qty }}</q-td>
+            </template>
+
+            <template v-if="props.row.id === editid">
+              <q-td key="goods_weight" :props="props">
+                <q-input dense outlined square v-model.number="editFormData.goods_weight" :label="'入库重量'" type="number"
+                  :rules="[val => (val && val > 0) || error8]" />
+              </q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="goods_weight" :props="props">{{ props.row.goods_weight }}</q-td>
+            </template>
+
+            <template v-if="props.row.id === editid">
+              <q-td key="creater" :props="props">
+                <q-input dense outlined square v-model.number="editFormData.creater" :label="'经办人'"
+                  :rules="[val => (val && val > 0) || error8]" />
+              </q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="creater" :props="props">{{ props.row.creater }}</q-td>
+            </template>
+
+            <template v-if="props.row.id === editid">
+              <q-td key="asn_status" :props="props">
+                <q-td key="asn_status" :props="props">{{ props.row.asn_status }}</q-td>
+              </q-td>
+            </template>
+            <template v-else-if="props.row.id !== editid">
+              <q-td key="asn_status" :props="props">{{ props.row.asn_status }}</q-td>
+            </template>
+
+
+            <template v-if="!editMode">
+              <q-td key="action" :props="props" style="width: 100px">
+                <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="trolley" @click="change_status(props.row)">
+                  <q-tooltip content-class="bg-amber text-black shadow-4" :offset="[10, 10]"
+                    content-style="font-size: 12px">一键分拣</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>
+            </template>
+          </q-tr>
+        </template>
+      </q-table>
+    </transition>
+    <template>
+      <div v-show="max !== 0" class="q-pa-lg flex flex-center">
+        <div>{{ total }} </div>
+        <q-pagination v-model="current" color="black" :max="max" :max-pages="6" boundary-links
+          @click="getSearchList(current); paginationIpt = current" />
+        <div>
+          <input v-model="paginationIpt" @blur="changePageEnter" @keyup.enter="changePageEnter"
+            style="width: 60px; text-align: center" />
         </div>
-        <div v-show="max === 0" class="q-pa-lg flex flex-center">
-          <q-btn flat push color="dark" :label="$t('no_data')"></q-btn>
-        </div>
+      </div>
+      <div v-show="max === 0" class="q-pa-lg flex flex-center">
+        <q-btn flat push color="dark" :label="$t('no_data')"></q-btn>
+      </div>
     </template>
-    </div>
+    <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.code" :label="'到货编码'" autofocus
+            :rules="[val => (val && val.length > 0) || error1]" />
+
+          <q-input dense outlined square v-model="newFormData.goods_code" :label="'存货编码'"
+            :rules="[val => (val && val.length > 0) || error8]" />
+          <q-input dense outlined square v-model="newFormData.goods_desc" :label="'存货名称'"
+            :rules="[val => (val && val.length > 0) || error8]" />
+          <q-input dense outlined square v-model.number="newFormData.goods_qty" :label="'入库数量'" type="number"
+            :rules="[val => (val && val > 0) || error8]" />
+          <q-input dense outlined square v-model.number="newFormData.goods_weight" :label="'入库重量'" type="number"
+            :rules="[val => (val && val > 0) || error8]" />
+
+          <q-input dense outlined square v-model.number="newFormData.creater" :label="'经办人'"
+            :rules="[val => (val && val > 0) || error8]" />
+
+        </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>
+
+  </div>
 </template>
-    <router-view />
+<router-view />
 
 <script>
-import { getauth } from 'boot/axios_request'
+import { getauth, postauth, putauth, deleteauth } from 'boot/axios_request'
+import { date, exportFile, LocalStorage } from 'quasar'
+
 
 export default {
-  name: 'Pageasnfinish',
-  data () {
+  name: 'Pageasnlist',
+  data() {
     return {
+      createDate1: '',
+      createDate2: '',
+      date_range: '',
+      proxyDate: '',
+      date: '',
+      goods_code: '',
+      goods_desc: '',
       openid: '',
       login_name: '',
       authin: '0',
-      pathname: 'asn/detail/?asn_status=5&ordering=-id',
+      searchUrl: '',
+      pathname: 'asn/list/',
+      pathfilename: 'asn/file/',
+
       pathname_previous: '',
       pathname_next: '',
       separator: 'cell',
       loading: false,
       height: '',
+
+      printObj: {
+        id: 'printMe',
+        popTitle: this.$t('inbound.asn')
+      },
       table_list: [],
-      bin_size_list: [],
-      bin_property_list: [],
-      warehouse_list: [],
+
       columns: [
-        { name: 'asn_code', required: true, label: this.$t('inbound.view_asn.asn_code'), align: 'left', field: 'asn_code' },
-        { name: 'goods_code', label: this.$t('goods.view_goodslist.goods_code'), field: 'goods_code', align: 'center' },
-        { name: 'goods_desc', label: this.$t('goods.view_goodslist.goods_desc'), field: 'goods_desc', align: 'center' },
-        { name: 'goods_qty', label: this.$t('inbound.view_asn.goods_qty'), field: 'goods_qty', align: 'center' },
-        { name: 'goods_actual_qty', label: this.$t('inbound.view_asn.goods_actual_qty'), field: 'goods_actual_qty', align: 'center' },
-        { name: 'goods_shortage_qty', label: this.$t('inbound.view_asn.goods_shortage_qty'), field: 'goods_shortage_qty', align: 'center' },
-        { name: 'goods_more_qty', label: this.$t('inbound.view_asn.goods_more_qty'), field: 'goods_more_qty', align: 'center' },
-        { name: 'goods_damage_qty', label: this.$t('inbound.view_asn.goods_damage_qty'), field: 'goods_damage_qty', align: 'center' },
-        { name: 'supplier', label: this.$t('baseinfo.view_supplier.supplier_name'), field: 'supplier', align: 'center' },
-        { name: 'creater', label: this.$t('creater'), field: 'creater', align: 'center' },
-        { name: 'create_time', label: this.$t('createtime'), field: 'create_time', align: 'center' },
-        { name: 'update_time', label: this.$t('updatetime'), field: 'update_time', align: 'center' }
+        { name: 'code', label: '到货单号', field: 'code', align: 'center' },
+        { name: 'asn_code', label: '入库单号', field: 'asn_code', align: 'center' },
+        { name: 'goods_code', label: '存货编码', field: 'goods_code', align: 'center' },
+        { name: 'goods_desc', label: '存货', field: 'goods_desc', align: 'center' },
+        { name: 'goods_qty', label: '数量', field: 'goods_qty', align: 'center' },
+        { name: 'goods_weight', label: '重量', field: 'goods_weight', align: 'center' },
+        { name: 'creater', label: '经办人', field: 'creater', align: 'center' },
+
+        { name: 'asn_status', label: '状态', field: 'asn_status', align: 'center' },
+        { name: 'action', label: '操作', align: 'center' }
       ],
       filter: '',
       pagination: {
         page: 1,
-        rowsPerPage: '30'
+        rowsPerPage: 11
       },
-      current: 1,
+      newForm: false,
+      newFormData: {
+
+      },
+      editid: 0,
+      editFormData: {
+
+      },
+      editMode: false,
+      deleteForm: false,
+      deleteid: 0,
+      bar_code: '',
+      error1: this.$t('goods.view_goodslist.error1'),
+
       max: 0,
       total: 0,
-      paginationIpt: 1
+      paginationIpt: 1,
+      current: 1,
+    }
+
+  },
+  computed: {
+    interval() {
+      return this.$t('download_center.start') + ' - ' + this.$t('download_center.end')
     }
   },
   methods: {
-    getList () {
+    getList(params = {}) {
       var _this = this
-      if (_this.$q.localStorage.has('auth')) {
-        getauth(_this.pathname + '&page=' + '' + _this.current, {
-        }).then(res => {
+      _this.loading = true
+      // 合并基础参数
+      const baseParams = {
+        page: _this.current,
+        page_size: _this.pagination.rowsPerPage
+      }
+
+      // 创建URLSearchParams处理参数
+      const queryParams = new URLSearchParams({
+        ...baseParams,
+        ...params
+      })
+      console.log(queryParams)
+      // 过滤空值参数
+      Array.from(queryParams.entries()).forEach(([key, value]) => {
+        if (value === '' || value === null || value === undefined) {
+          queryParams.delete(key)
+        }
+      })
+
+      getauth(`${_this.pathname}?${queryParams}`)
+        .then(res => {
           _this.table_list = res.results
+
           _this.total = res.count
-          if (res.count === 0) {
-            _this.max = 0
-          } else {
-            if (Math.ceil(res.count / 30) === 1) {
-              _this.max = 0
-            } else {
-              _this.max = Math.ceil(res.count / 30)
-            }
-          }
+          _this.max = Math.ceil(res.count / _this.pagination.rowsPerPage) || 0
           _this.pathname_previous = res.previous
           _this.pathname_next = res.next
-        }).catch(err => {
+        })
+        .catch(err => {
           _this.$q.notify({
             message: err.detail,
             icon: 'close',
             color: 'negative'
           })
         })
-      }
+        .finally(() => {
+          _this.loading = false
+        })
     },
-    changePageEnter(e) {
+    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.getList();
+      this.getSearchList(this.current)
+    },
+
+    // 带搜索条件加载
+    getSearchList(page = 1) {
+      this.current = page
+      this.paginationIpt = page
+      this.getList({
+        goods_desc__icontains: this.filter,
+        document_date__range: this.date_range
+      })
     },
-    getSearchList () {
+    downloadlistData() {
+      this.getfileList()
+
+    },
+    getfileList() {
       var _this = this
-      if (_this.$q.localStorage.has('auth')) {
-        _this.current = 1
-        _this.paginationIpt = 1
-        getauth(_this.pathname + '&asn_code__icontains=' + _this.filter + '&page=' + '' + _this.current, {
-        }).then(res => {
-          _this.table_list = res.results
-          _this.total = res.count
-          if (res.count === 0) {
-            _this.max = 0
-          } else {
-            if (Math.ceil(res.count / 30) === 1) {
-              _this.max = 0
-            } else {
-              _this.max = Math.ceil(res.count / 30)
-            }
+      _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)
+        }
+      })
+      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'
+            })
           }
-          _this.pathname_previous = res.previous
-          _this.pathname_next = res.next
-        }).catch(err => {
+        })
+        .catch(err => {
           _this.$q.notify({
             message: err.detail,
             icon: 'close',
             color: 'negative'
           })
         })
+        .finally(() => {
+          _this.loading = false
+        })
+    },
+
+    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
+          })
+          .catch(err => {
+            _this.$q.notify({
+              message: err.detail,
+              icon: 'close',
+              color: 'negative'
+            })
+          })
       } else {
       }
     },
-    getListPrevious () {
+    getListNext() {
       var _this = this
-      if (_this.$q.localStorage.has('auth')) {
-        getauth(_this.pathname_previous, {
-        }).then(res => {
-          _this.table_list = res.results
-          _this.pathname_previous = res.previous
-          _this.pathname_next = res.next
-        }).catch(err => {
+      if (LocalStorage.has('auth')) {
+        getauth(_this.pathname_next, {})
+          .then(res => {
+            _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'
+            })
+          })
+      }
+    },
+    reFresh() {
+      var _this = this
+      _this.getSearchList()
+    },
+
+    newDataSubmit() {
+      var _this = this
+      _this.newFormData.asn_type = 'INT';
+      _this.newFormData.asn_status = '待分拣'
+
+      postauth(_this.pathname, _this.newFormData)
+        .then(res => {
+          _this.getSearchList()
+          _this.newDataCancel()
+          if (res.status_code != 500) {
+            _this.$q.notify({
+              message: '成功新增数据',
+              icon: 'check',
+              color: 'green'
+            })
+          }
+        })
+        .catch(err => {
           _this.$q.notify({
             message: err.detail,
             icon: 'close',
             color: 'negative'
           })
         })
-      } else {
+    },
+    newDataCancel() {
+      var _this = this
+      _this.newForm = false
+      _this.newFormData = {
+        code: '',
+        goods_code: '',
+        goods_desc: '',
+        goods_qty: '',
+        goods_weight: '',
+        creater: ''
       }
     },
-    getListNext () {
+    editData(e) {
       var _this = this
-      if (_this.$q.localStorage.has('auth')) {
-        getauth(_this.pathname_next, {
-        }).then(res => {
-          _this.table_list = res.results
-          _this.pathname_previous = res.previous
-          _this.pathname_next = res.next
-        }).catch(err => {
+      _this.editMode = true
+      _this.editid = e.id
+      _this.editFormData = {
+        code: e.code,
+        asn_code: e.asn_code,
+        asn_status: e.asn_status,
+        goods_code: e.goods_code,
+        goods_desc: e.goods_desc,
+        goods_qty: e.goods_qty,
+        goods_weight: e.goods_weight,
+        creater: _this.login_name,
+      }
+
+    },
+    change_status(e) {
+      var _this = this
+      
+      var status_FormData = {
+        code: e.code,
+        asn_code: e.asn_code,
+        asn_status: e.asn_status,
+        goods_code: e.goods_code,
+        goods_desc: e.goods_desc,
+        goods_qty: e.goods_qty,
+        goods_weight: e.goods_weight,
+        creater: _this.login_name,
+      }
+      status_FormData.asn_type = 'INT';
+      status_FormData.asn_status = '入库中'
+      putauth(_this.pathname + e.id + '/', status_FormData)
+        .then(res => {
+          _this.editDataCancel()
+          _this.getSearchList()
+          if (res.status_code != 500) {
+            _this.$q.notify({
+              message: '开始入库',
+              icon: 'check',
+              color: 'green'
+            })
+          }
+        })
+        .catch(err => {
           _this.$q.notify({
             message: err.detail,
             icon: 'close',
             color: 'negative'
           })
         })
-      } else {
+    },
+    editDataSubmit() {
+      var _this = this
+      _this.editFormData.asn_type = 'INT'
+
+      putauth(_this.pathname + _this.editid + '/', _this.editFormData)
+        .then(res => {
+          _this.editDataCancel()
+          _this.getSearchList()
+          if (res.status_code != 500) {
+            _this.$q.notify({
+              message: '成功编辑数据',
+              icon: 'check',
+              color: 'green'
+            })
+          }
+        })
+        .catch(err => {
+          _this.$q.notify({
+            message: err.detail,
+            icon: 'close',
+            color: 'negative'
+          })
+        })
+    },
+    editDataCancel() {
+      var _this = this
+      _this.editMode = false
+      _this.editid = 0
+      _this.editFormData = {
+        code: '',
+        asn_code: '',
+        asn_status: '',
+        goods_code: '',
+        goods_desc: '',
+        goods_qty: '',
+        goods_weight: '',
+        creater: ''
       }
     },
-    reFresh () {
+    deleteData(e) {
       var _this = this
-      _this.getList()
+      _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: '成功删除数据',
+            icon: 'check',
+            color: 'green'
+          })
+        })
+        .catch(err => {
+          _this.$q.notify({
+            message: err.detail,
+            icon: 'close',
+            color: 'negative'
+          })
+        })
+    },
+    deleteDataCancel() {
+      var _this = this
+      _this.deleteForm = false
+      _this.deleteid = 0
+    },
+
+    updateProxy() {
+      var _this = this
+      _this.proxyDate = _this.date
     }
+
   },
-  created () {
+  created() {
     var _this = this
-    if (_this.$q.localStorage.has('openid')) {
-      _this.openid = _this.$q.localStorage.getItem('openid')
+    if (LocalStorage.has('openid')) {
+      _this.openid = LocalStorage.getItem('openid')
     } else {
       _this.openid = ''
-      _this.$q.localStorage.set('openid', '')
+      LocalStorage.set('openid', '')
     }
-    if (_this.$q.localStorage.has('login_name')) {
-      _this.login_name = _this.$q.localStorage.getItem('login_name')
+    if (LocalStorage.has('login_name')) {
+      _this.login_name = LocalStorage.getItem('login_name')
     } else {
       _this.login_name = ''
-      _this.$q.localStorage.set('login_name', '')
+      LocalStorage.set('login_name', '')
     }
-    if (_this.$q.localStorage.has('auth')) {
+    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'
     }
   },
-  mounted () {
+  mounted() {
     var _this = this
     if (_this.$q.platform.is.electron) {
       _this.height = String(_this.$q.screen.height - 290) + 'px'
     } else {
       _this.height = _this.$q.screen.height - 290 + '' + 'px'
     }
+    _this.newFormData.creater = _this.login_name
   },
-  updated () {
-  },
-  destroyed () {
+  updated() { },
+  destroyed() { },
+
+  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>
+<style scoped>
+/* 添加在 <style> 中 */
+.q-date__calendar-item--selected {
+  transition: all 0.3s ease;
+  background-color: #1976d2 !important;
+}
+
+.q-date__range {
+  background-color: rgba(25, 118, 210, 0.1);
+}
+</style>

+ 4 - 4
templates/src/pages/inbound/inbound.vue

@@ -9,7 +9,7 @@
         <transition appear enter-active-class="animated zoomIn">
           <q-route-tab name="asn" :label="$t('inbound.asn')" icon="img:statics/inbound/asn.png" :to="{ name: 'asn' }" exact/>
         </transition>
-        <transition appear enter-active-class="animated zoomIn">
+        <!-- <transition appear enter-active-class="animated zoomIn">
           <q-route-tab name="predeliverystock" :label="$t('inbound.predeliverystock')"  icon="img:statics/inbound/polist.png" :to="{ name: 'predeliverystock' }" exact/>
         </transition>
         <transition appear enter-active-class="animated zoomIn">
@@ -17,11 +17,11 @@
         </transition>
         <transition appear enter-active-class="animated zoomIn">
           <q-route-tab name="presortstock" :label="$t('inbound.presortstock')" icon="img:statics/inbound/presortstock.png" :to="{ name: 'presortstock' }" exact/>
-        </transition>
+        </transition> -->
         <transition appear enter-active-class="animated zoomIn">
           <q-route-tab name="sortstock" :label="$t('inbound.sortstock')" icon="img:statics/inbound/sortstock.png" :to="{ name: 'sortstock' }" exact/>
         </transition>
-        <transition appear enter-active-class="animated zoomIn">
+        <!-- <transition appear enter-active-class="animated zoomIn">
           <q-route-tab name="shortage" :label="$t('inbound.shortage')" icon="img:statics/inbound/shortage.png" :to="{ name: 'shortage' }" exact/>
         </transition>
         <transition appear enter-active-class="animated zoomIn">
@@ -29,7 +29,7 @@
         </transition>
         <transition appear enter-active-class="animated zoomIn">
           <q-route-tab name="asnfinish" :label="$t('inbound.asnfinish')" icon="img:statics/inbound/asnfinish.png" :to="{ name: 'asnfinish' }" exact/>
-        </transition>
+        </transition> -->
       </q-tabs>
     </div>
   </div>

File diff suppressed because it is too large
+ 591 - 285
templates/src/pages/inbound/sortstock.vue