Răsfoiți Sursa

Merge remote-tracking branch 'origin/master'

jiaweiqi 3 ani în urmă
părinte
comite
da7b1b854f

+ 2 - 2
.gitignore

@@ -17,8 +17,8 @@ build/*
 wsd
 run.bat
 .idea
-scj/local_settings.*
-scj/touch_settings.*
+local_settings.*
+touch_settings.*
 
 
 apps/dashboard/forms.py

+ 14 - 2
apps/finance/filters.py

@@ -1,7 +1,7 @@
 #coding=utf-8
 import django_filters
-from models import FinanceCategory, FinancePurpose
-
+from models import FinanceCategory, FinancePurpose, dbFinanceIncome
+from apps.base import clean_datetime_range
 
 class FinanceCategoryFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(name='name', lookup_expr='icontains')
@@ -18,3 +18,15 @@ class FinancePurposeFilter(django_filters.FilterSet):
     class Meta:
         model = FinancePurpose
         fields = "__all__"
+
+class FinanceIncomeFilter(django_filters.FilterSet):
+    referer_no = django_filters.CharFilter(name='referer_no', lookup_expr='icontains')
+    account_name = django_filters.CharFilter(name='account__name', lookup_expr='icontains')
+
+    class Meta:
+        model = dbFinanceIncome
+        fields = "__all__"
+
+    def __init__(self, data=None, *args, **kwargs):
+        data = clean_datetime_range(data, 'create_time')
+        super(FinanceIncomeFilter, self).__init__(data, *args, **kwargs)

+ 8 - 6
apps/finance/models.py

@@ -111,16 +111,16 @@ class dbFinanceIncome(models.Model):
     )
 
     no = models.CharField(max_length=50, verbose_name=u"收银单号", editable=False)
-    referer_no = models.CharField(max_length=50, verbose_name=u"引用单据编号")
+    referer_no = models.CharField(max_length=50, verbose_name=u"引用单据编号", null=True)
     department = models.ForeignKey(Department, related_name='finance_income_ref_department', verbose_name=u'部门',null=True,on_delete=models.PROTECT)
     create_user = models.ForeignKey(User, related_name='finance_income_ref_create_user', verbose_name=u"创建人", on_delete=models.PROTECT, editable=False)
     create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
-    type = models.IntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
+    type = models.IntegerField(choices=TYPE_CHOICES, verbose_name=u"类型", null=True, default=USER_DEFINED)
     amount = models.BigIntegerField(verbose_name=u"金额")
     account = models.ForeignKey(Option, related_name='finance_income_ref_account',verbose_name=u"账户", on_delete=models.PROTECT)
     purpose = models.ForeignKey(FinancePurpose, verbose_name=u"用途", on_delete=models.PROTECT, null=True)
     check_user = models.ForeignKey(User, related_name='finance_income_ref_check_user', verbose_name=u"审核人",
-                                    on_delete=models.PROTECT)
+                                    on_delete=models.PROTECT, null=True)
     check_time = models.DateTimeField(verbose_name=u"审核时间", null=True)
     check_status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, verbose_name=u"审核状态", default=settings.DEFAULT)
     notes = models.CharField(max_length=200, verbose_name=u"备注", blank=True, null=True)
@@ -137,7 +137,9 @@ class dbFinanceIncome(models.Model):
             else:
                 suffix = (rows[0].no[2:])
                 self.no = prefix+str(int(suffix) + 1)
-
+        # 自定义收支,引用单号=收银单号
+        if not self.referer_no:
+            self.referer_no = self.no
         super(dbFinanceIncome, self).save(*args, **kwargs)
 
     @staticmethod
@@ -159,7 +161,7 @@ class dbFinanceIncome(models.Model):
             'no',
         )
         permissions = (
+            ("view_finance_income", u"查看"),
             ("add_finance_income", u"添加"),
-            ("edit_finance_income", u"修改"),
             ("check_finance_income", u"审核"),
-        )
+        )

+ 6 - 3
apps/finance/serializers.py

@@ -10,8 +10,7 @@ from apps.exceptions import CustomError
 from apps.foundation.models import BizLog
 from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome
 from apps.serializer_errors import dump_serializer_errors
-from libs.booleancharfield import CountShowCharField
-
+from libs.booleancharfield import AmountShowCharField
 
 class FinanceCategorySerializer(serializers.ModelSerializer):
     enabled_text = serializers.SerializerMethodField()
@@ -122,7 +121,10 @@ class FinanceIncomeSerializer(serializers.ModelSerializer):
     account_text = serializers.CharField(source='account.name', read_only=True)
     purpose_text = serializers.CharField(source='purpose.name', read_only=True)
     check_user_text = serializers.CharField(source='check_user.name', read_only=True)
-
+    category = serializers.IntegerField(source='purpose.category.id', read_only=True)
+    amount = AmountShowCharField()
+    create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
+    check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
 
     class Meta:
         model = dbFinanceIncome
@@ -140,6 +142,7 @@ class FinanceIncomeSerializer(serializers.ModelSerializer):
 
     def create(self, validated_data):
         validated_data['create_user'] = self.user
+        validated_data['department'] = self.user.department
         instance = dbFinanceIncome.objects.create(**validated_data)
         BizLog.objects.addnew(
             self.user,

+ 7 - 1
apps/finance/urls.py

@@ -12,4 +12,10 @@ urlpatterns = (
     url(r'^finance_purpose/data/$', finance_purpose_list),
     url(r'^finance_purpose/save/$', finance_purpose_save),
     url(r'^finance_purpose/delete/$', finance_purpose_delete),
-)
+
+    url(r'^finance_income/data/$', finance_income_list),
+    url(r'^finance_income/save/$', finance_income_save),
+    url(r'^finance_income/check/$', finance_income_check),
+
+    url(r'^finance_income/bank_data/$', finance_bank_data),
+)

+ 109 - 5
apps/finance/views.py

@@ -3,15 +3,17 @@
 import traceback
 import json
 
+from django.db.models import Q, Sum
 from django.db.models import ProtectedError
 from django.views.decorators.csrf import csrf_exempt
 from django.db import transaction, IntegrityError
-
-from apps.finance.filters import FinanceCategoryFilter, FinancePurposeFilter
+from django.conf import settings
+from apps.base import Formater
+from apps.finance.filters import FinanceCategoryFilter, FinancePurposeFilter, FinanceIncomeFilter
 from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome
-from apps.finance.serializers import FinanceCategorySerializer, FinancePurposeSerializer
+from apps.finance.serializers import FinanceCategorySerializer, FinancePurposeSerializer, FinanceIncomeSerializer
 from apps.account.decorators import token_required, permission_required
-from apps.foundation.models import BizLog
+from apps.foundation.models import BizLog, Option
 
 from libs.http import JSONResponse, JSONError, DataGridJSONResponse
 from libs import utils
@@ -31,7 +33,8 @@ def finance_category_list(request):
 @token_required
 def finance_category_dict(request):
     result = {
-        'category': FinanceCategorySerializer(FinanceCategory.objects.filter(enabled=True), many=True).data
+        'category': FinanceCategorySerializer(FinanceCategory.objects.filter(enabled=True), many=True).data,
+        'purpose': FinancePurposeSerializer(FinancePurpose.objects.filter(enabled=True), many=True).data,
     }
     return JSONResponse(result)
 
@@ -124,3 +127,104 @@ def finance_purpose_delete(request):
         return JSONError(u'删除失败!')
 
     return JSONResponse({})
+
+@csrf_exempt
+@permission_required('finance.view_finance_income')
+def finance_income_list(request):
+    department_ids = request.user.getSubDepartmentIds()
+    user_ids = request.user.getSubEmployeeIds()
+    # f = FinanceIncomeFilter(request.GET, queryset=dbFinanceIncome.objects.filter())
+    rows = dbFinanceIncome.objects.filter(Q(create_user_id__in=user_ids) | Q(department_id__in=department_ids) | Q(create_user=request.user))
+    f = FinanceIncomeFilter(request.GET, queryset=rows)
+    total_row = f.qs.aggregate(sum_amount=Sum('amount'))
+    more = {
+        'sum_amount': Formater.formatAmountShow(total_row['sum_amount']),
+    }
+
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = FinanceIncomeSerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total, more)
+
+
+@csrf_exempt
+@permission_required('finance.add_finance_income')
+def finance_income_save(request):
+    id = request.GET.get('id')
+    data = json.loads(request.body)
+
+    try:
+        with transaction.atomic():
+
+            serializer = FinanceIncomeSerializer.factory(request.user, data, id)
+            if serializer.instance and serializer.instance.check_status == settings.PASS:
+                raise CustomError(u'该收支单已审核,禁止修改!')
+            serializer.validSave()
+            BizLog.objects.addnew(request.user, BizLog.DELETE, u"编辑收支单[%s],id=%d" % (serializer.instance.no, serializer.instance.id), data)
+    except CustomError, e:
+        return JSONError(e.get_error_msg())
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+    return JSONResponse({})
+
+@csrf_exempt
+@permission_required('finance.check_finance_income')
+def finance_income_check(request):
+    id = request.GET.get('id')
+    check_status = request.GET.get('check_status')
+    try:
+        with transaction.atomic():
+            instance = dbFinanceIncome.getById(id)
+            instance.check_status = check_status
+            instance.save()
+            BizLog.objects.addnew(request.user, BizLog.DELETE, u"审核收支单[%s],id=%d" % (instance.no, instance.id), check_status)
+    except CustomError, e:
+        return JSONError(e.get_error_msg())
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+    return JSONResponse({})
+
+@csrf_exempt
+@permission_required('finance.view_finance_income')
+def finance_bank_data(request):
+    create_time = request.GET.get('create_time')
+    end_time = request.GET.get('end_time')
+    data = []
+    more = {
+        'qichu_yue': 0,
+        'benqi_shouru': 0,
+        'benqi_fachu': 0,
+        'qimo_yue': 0,
+    }
+    rows = dbFinanceIncome.objects.filter(check_status=settings.PASS)
+    accounts = Option.objects.filter(type=Option.PAYMENT_ACCOUNT, enabled=True)
+    for account in accounts:
+        qichu_yue = rows.filter(create_time__lt=create_time, account=account).aggregate(amount=Sum('amount'))['amount']
+        benqi_shouru = rows.filter(Q(create_time__gte=create_time,create_time__lte=end_time,account=account,),
+                                   Q(type=dbFinanceIncome.SALE_ENTRY_PAY,) | Q(purpose__type=FinancePurpose.PAY,)
+                                   ).aggregate(amount=Sum('amount'))['amount']
+
+        benqi_fachu = rows.filter(create_time__gte=create_time,create_time__lte=end_time,account=account,
+                                   ).exclude(Q(type=dbFinanceIncome.SALE_ENTRY_PAY) | Q( purpose__type=FinancePurpose.PAY,)).aggregate(amount=Sum('amount'))['amount']
+        qimo_yue = rows.filter(create_time__lte=end_time, account=account).aggregate(amount=Sum('amount'))['amount']
+
+        more['qichu_yue'] += qichu_yue or 0
+        more['benqi_shouru'] += benqi_shouru or 0
+        more['benqi_fachu'] += benqi_fachu or 0
+        more['qimo_yue'] += qimo_yue or 0
+        item = {
+            'name':account.name,
+            'qichu_yue':Formater.formatAmountShow(qichu_yue),
+            'benqi_shouru':Formater.formatAmountShow(benqi_shouru),
+            'benqi_fachu':Formater.formatAmountShow(benqi_fachu),
+            'qimo_yue':Formater.formatAmountShow(qimo_yue),
+        }
+        data.append(item)
+    more = {
+        'qichu_yue': Formater.formatAmountShow(more['qichu_yue']),
+        'benqi_shouru': Formater.formatAmountShow(more['benqi_shouru']),
+        'benqi_fachu': Formater.formatAmountShow(more['benqi_fachu']),
+        'qimo_yue': Formater.formatAmountShow(more['qimo_yue']),
+    }
+    return DataGridJSONResponse(data, len(data), more)

+ 2 - 0
apps/foundation/models.py

@@ -17,6 +17,7 @@ class Option(models.Model):
     GOODS_MODE = 3
     QUALITY_REQUEST = 4
     PAYMENT_ACCOUNT = 5
+    SALE_MESSAGE = 6
 
     TYPE_CHOICES = (
         (PAYMENT_MODE, u'付款方式'),
@@ -25,6 +26,7 @@ class Option(models.Model):
         (GOODS_MODE, u'成品类别'),
         (QUALITY_REQUEST, u'质量要求'),
         (PAYMENT_ACCOUNT, u'银行账户'),
+        (SALE_MESSAGE, u'发货信息'),
     )
 
     type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类别")

+ 11 - 0
apps/order/models.py

@@ -122,6 +122,17 @@ class SaleOrderDetail(models.Model):
             ("print_goods_godownentry_query", u"打印"),
         )
 
+class SaleOrderMessage(models.Model):
+    main = models.ForeignKey(SaleOrder, verbose_name=u'销售单', on_delete=models.PROTECT)
+    item = models.ForeignKey(Option, verbose_name=u"自定义项", on_delete=models.PROTECT)
+    content = models.CharField(max_length=200, verbose_name=u"内容", blank=True, null=True)
+
+    class Meta:
+        db_table = "sale_order_message"
+        verbose_name = u"发货信息"
+        ordering = ('-id',)
+        default_permissions = ()
+
 class GoodsDeliver(models.Model):
     no = models.CharField(max_length=20, verbose_name=u"出库单号", editable=False)
     create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)

+ 2 - 0
apps/order/urls.py

@@ -15,6 +15,8 @@ urlpatterns = (
     url(r'^sale_order/pay/$', sale_order_pay),
     url(r'^sale_order/fare_save/$', sale_order_fare_save),
     url(r'^sale_order/clear/$', sale_order_clear),
+    url(r'^sale_order/msg_save/$', sale_order_msg_save),
+    url(r'^sale_order/msg/$', sale_order_msg),
     url(r'^sale_order/export_detail/$', sale_order_export_detail),
 
     url(r'^sale_order/select/$', sale_order_select),

+ 49 - 1
apps/order/views.py

@@ -6,7 +6,7 @@ from django.views.decorators.csrf import csrf_exempt
 from django.db import transaction
 from apps.account.decorators import token_required, permission_required, valid_permission, isHasPermissions
 from apps.account.models import User
-from apps.order.models import SaleOrder, SaleOrderDetail, GoodsDeliver, GoodsDeliverDetail, GoodsDeliverReturn,GoodsDeliverReturnDetail
+from apps.order.models import SaleOrder, SaleOrderDetail, GoodsDeliver, GoodsDeliverDetail, GoodsDeliverReturn,GoodsDeliverReturnDetail, SaleOrderMessage
 from django.db.models import Q, F, Sum
 from django.utils import timezone
 
@@ -188,6 +188,7 @@ def sale_order_delete(request):
                 raise CustomError(u'该订单已审核, 不允许删除')
             BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除销售订单[%s],id=%d" % (order.no, order.id))
             SaleOrderDetail.objects.filter(main=order).delete()
+            SaleOrderMessage.objects.filter(main=order).delete()
             order.delete()
     except CustomError, e:
         return JSONError(e.get_error_msg())
@@ -426,6 +427,53 @@ def sale_order_clear(request):
         return JSONError(u'结清失败')
     return JSONResponse({})
 
+
+@csrf_exempt
+@permission_required('order.view_sale_order')
+def sale_order_msg_save(request):
+    id = request.GET.get('id')
+    data = json.loads(request.body)
+
+    try:
+        with transaction.atomic():
+            order = SaleOrder.getById(id)
+            SaleOrderMessage.objects.filter(main=order).delete()
+            options = Option.objects.filter(type=Option.SALE_MESSAGE, enabled=True)
+            for option in options:
+                content = data[str(int(option.id))]
+                if content:
+                    SaleOrderMessage.objects.create(main=order, item_id=option.id, content=content)
+
+    except CustomError, e:
+        return JSONError(e.get_error_msg())
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'完善失败')
+    return JSONResponse({})
+
+
+@csrf_exempt
+@permission_required('order.view_sale_order')
+def sale_order_msg(request):
+    id = request.GET.get('id')
+
+    rows = Option.objects.filter(type=Option.SALE_MESSAGE, enabled=True)
+    data = []
+    for row in rows:
+        item = {
+            'id': row.id,
+            'name': row.name,
+            'content': ''
+        }
+
+        msg_row = SaleOrderMessage.objects.filter(main_id=id, item_id=row.id).first()
+        if msg_row:
+            item['content'] = msg_row.content
+
+        data.append(item)
+
+    return JSONResponse(data)
+
 @csrf_exempt
 @permission_required('order.export_sale_order')
 def sale_order_export_detail(request):

+ 11 - 1
apps/purchase/serializers.py

@@ -9,7 +9,7 @@ from apps.exceptions import CustomError
 from apps.foundation.models import BizLog
 from apps.serializer_errors import dump_serializer_errors
 from models import PurchasePlan, PurchaseUser, PurchasePlanDetail, PurchasePrice, PurchaseOrder, PurchaseOrderDetail, \
-    GodownEntry, PurchaseInvoiceImage, \
+    PurchaseInvoiceImage, \
     PurchasePayment, PurchasePaymentDetail, GodownEntry, GodownEntryDetail, GodownEntryReturn, GodownEntryReturnDetail, \
     PurchasePay
 from libs.booleancharfield import BooleanCharField, PriceShowCharField, AmountShowCharField, CountShowCharField, \
@@ -430,6 +430,15 @@ class GodownEntrySerializer(serializers.ModelSerializer):
     create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
     warehouse_text = serializers.CharField(source='warehouse.name', read_only=True)
     purchase_order_no = serializers.CharField(source='purchase_order.no', read_only=True)
+    is_clear_text = serializers.SerializerMethodField()
+
+    def get_is_clear_text(self, obj):
+        payment = PurchasePayment.objects.filter(order=obj.purchase_order).first()
+        if payment and payment.is_clear:
+            return '是'
+        else:
+            return '否'
+
     class Meta:
         model = GodownEntry
         fields = '__all__'
@@ -639,6 +648,7 @@ class PurchasePaymentSerializer(serializers.ModelSerializer):
     supplier_bank = serializers.CharField(source='order.supplier.opening_bank', read_only=True)
     order_no = serializers.CharField(source='order.no', read_only=True)
     payment = BooleanCharField(source='is_pay', read_only=True)
+    is_clear_text = BooleanCharField(source='is_clear', read_only=True)
     amount = AmountShowCharFieldWithTwoDecimalPlaces()
     actual_amount = AmountShowCharFieldWithTwoDecimalPlaces()
     apply_amount = AmountShowCharFieldWithTwoDecimalPlaces()

+ 1 - 0
apps/purchase/urls.py

@@ -44,6 +44,7 @@ urlpatterns = (
     url(r'^purchase_payment/pay/$', purchase_payment_pay),
     url(r'^purchase_payment/pay/detail/$', purchase_payment_pay_detail),
     url(r'^purchase_payment/export_detail/$', purchase_payment_export_detail),
+    url(r'^purchase_payment/clear/$', purchase_payment_clear),
 
     url(r'^purchase_invoice/data/$', purchase_invoice_list),
     url(r'^purchase_invoice/export/$', purchase_invoice_export),

+ 77 - 3
apps/purchase/views.py

@@ -29,6 +29,7 @@ from apps.material.models import DeliverDetail, DeliverReturnDetail
 from apps.supplier.models import Supplier
 from apps.config.models import Config
 
+from apps.finance.serializers import FinanceIncomeSerializer, dbFinanceIncome
 from apps.purchase.filters import PurchasePlanFilter, PurchaseOrderFilter, PurchasePriceFilter, GodownEntryFilter, \
     PurchasePaymentFilter, PurchaseOrderDetailFilter, GodownEntryReturnFilter, GodownEntryReturnDetailFilter, PurchasePriceExportFilter
 from apps.purchase.models import PurchasePlan, PurchasePlanDetail, PurchaseOrder, PurchaseOrderDetail, PurchasePrice, \
@@ -968,7 +969,7 @@ def purchase_order_export_detail(request):
 @csrf_exempt
 @permission_required('purchase.check_purchase_order')
 def purchase_order_payment(request):
-    #todo 简易模式,入库单付款,自动生成付款单,并自动审核。同时创建收支单(创建收支单,放到付款单审核流程中)
+    # 简易模式,耗材、原料入库单付款,自动生成付款单,并自动审核。同时创建收支单
     id = request.GET.get('id') # 入库单id
     handing_amount = request.POST.get('handing_amount')
     handing_account = request.POST.get('handing_account')
@@ -987,7 +988,19 @@ def purchase_order_payment(request):
             godownEntry = GodownEntry.getById(id)
             if godownEntry.status != settings.PASS:
                 raise CustomError('当前入库单未审核,禁止付款!')
-            if order_amount:
+            if godownEntry.product_type == GodownEntry.MATERIAL:
+                type1 = dbFinanceIncome.MATERIAL_ENTRY_PAY
+                type2 = dbFinanceIncome.MATERIAL_ENTRY_UNLOAD
+                type3 = dbFinanceIncome.MATERIAL_ENTRY_FARE
+            else:
+                type1 = dbFinanceIncome.CONSUMABLE_ENTRY_PAY
+                type2 = dbFinanceIncome.CONSUMABLE_ENTRY_UNLOAD
+                type3 = dbFinanceIncome.CONSUMABLE_ENTRY_FARE
+
+            if int(order_amount):
+                # 简易流程下,如果使用了入库管理里面的付款按钮,自动生成付款单,创建付款明细
+                if not order_account:
+                    raise CustomError('请选择订单费用付款账户!')
                 # 订单费用
                 purchase_order = godownEntry.purchase_order
                 payment = PurchasePayment.objects.filter(order=purchase_order).first()
@@ -1025,8 +1038,55 @@ def purchase_order_payment(request):
                 }
                 pb = PurchasePaySerializer.factory(request.user, data)
                 pb.validSave()
-            # todo 自动创建收支单
 
+                income_data = {
+                    'referer_no': purchase_order.no,
+                    'type': type1,
+                    'amount': -abs(float(Formater.formatAmountShow(order_amount))),
+                    'account': order_account,
+                    'check_status': settings.PASS,
+                    'check_user': request.user.id,
+                    'department': request.user.department_id,
+                    'check_time': timezone.now(),
+                    'notes': ''
+                }
+                income = FinanceIncomeSerializer.factory(request.user, income_data)
+                income.validSave()
+
+            if int(transport_amount):
+                if not transport_account:
+                    raise CustomError('请选择运输费用付款账户!')
+                income_data = {
+                    'referer_no': purchase_order.no,
+                    'type': type3,
+                    'amount': -abs(float(transport_amount)),
+                    'account': transport_account,
+                    'check_status': settings.PASS,
+                    'check_user': request.user.id,
+                    'department': request.user.department_id,
+                    'check_time': timezone.now(),
+                    'notes': ''
+                }
+                income = FinanceIncomeSerializer.factory(request.user, income_data)
+                income.validSave()
+
+            if int(handing_amount):
+                if not handing_account:
+                    raise CustomError('请选择运输费用付款账户!')
+                income_data = {
+                    'referer_no': purchase_order.no,
+                    'type': type2,
+                    'amount': -abs(float(handing_amount)),
+                    'account': transport_account,
+                    'check_status': settings.PASS,
+                    'check_user': request.user.id,
+                    'department': request.user.department_id,
+                    'check_time': timezone.now(),
+                    'notes': ''
+                }
+                income = FinanceIncomeSerializer.factory(request.user, income_data)
+                income.validSave()
+            BizLog.objects.addnew(request.user, BizLog.INSERT, u"入库单[{}]付款".format(godownEntry.no), request.POST)
     except CustomError, e:
         return JSONError(e.get_error_msg())
     except Exception, e:
@@ -1225,6 +1285,20 @@ def purchase_payment_export_detail(request):
     BizLog.objects.addnew(request.user, BizLog.EXPORT, u"导出付款管理明细")
     return JSONResponse({'filename': filename})
 
+@csrf_exempt
+@token_required
+def purchase_payment_clear(request):
+    id = request.GET.get('id') # 合同id
+    try:
+        with transaction.atomic():
+            order = PurchaseOrder.getById(id)
+            PurchasePayment.objects.filter(order=order).update(is_clear=True)
+            BizLog.objects.addnew(request.user, BizLog.INSERT, u"结清合同{}".format(order.no))
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'保存失败')
+    return JSONResponse({})
+
 
 @csrf_exempt
 @permission_required('purchase.pay_purchase_payment')

+ 1 - 1
scj/app_settings.py

@@ -8,7 +8,7 @@ DATABASES = {
         'NAME': 'scj',
         'USER': 'carwin',  # Not used with sqlite3.
         'PASSWORD': 'carwin!@#',  # Not used with sqlite3.
-        'HOST': '127.0.0.1',
+        'HOST': '39.106.109.89',
     },
 }
 # DATABASES = {

+ 1 - 1
scj/local_settings.py

@@ -1,2 +1,2 @@
-LICENSE_KEY = 'dev-luyuhang'
+LICENSE_KEY = 'dev-wushaodong'
 # LICENSE_KEY = 'jsyc'

+ 2 - 2
uis/views/finance/index.html

@@ -22,7 +22,7 @@
           <div class="layui-col-md5">
             <div class="LAY-btns" style="margin-bottom: 10px;">
                 <div class="layui-col-xs2">
-                    <button class="layui-btn" id="finance_category_add" data-permission="finance.add_finance_category"><i class="layui-icon layui-icon-add-circle"></i>添加</button>
+                    <button class="layui-btn" id="finance_category_add" data-permission="finance.add_finance_category"><i class="layui-icon layui-icon-add-circle"></i>添加类别</button>
                 </div>
                     <form class="layui-form" lay-filter="query-form-element1">
                         <div class="seach_items">
@@ -47,7 +47,7 @@
           <div class="layui-col-md7">
             <div class="LAY-btns" style="margin-bottom: 10px;">
               <div class="layui-col-xs2">
-                    <button class="layui-btn" id="finance_purpose_add" data-permission="finance.add_finance_category"><i class="layui-icon layui-icon-add-circle"></i>添加</button>
+                    <button class="layui-btn" id="finance_purpose_add" data-permission="finance.add_finance_category"><i class="layui-icon layui-icon-add-circle"></i>添加用途</button>
                 </div>
 
                     <form class="layui-form" lay-filter="query-form-element2">

+ 1 - 1
uis/views/goods/goods.html

@@ -236,4 +236,4 @@
         });
     </script>
 </body>
-</html>
+</html>

+ 12 - 6
uis/views/index.html

@@ -10,7 +10,7 @@
   <link rel="stylesheet" href="../layuiadmin/style/admin.css" media="all">
 </head>
 <body class="layui-layout-body">
-  
+
   <div id="LAY_app">
     <div class="layui-layout layui-layout-admin">
       <div class="layui-header">
@@ -52,7 +52,7 @@
           </li>
         </ul>
       </div>
-      
+
       <!-- 侧边菜单 -->
       <div class="layui-side layui-side-menu">
         <div class="layui-side-scroll">
@@ -244,12 +244,18 @@
             <li data-name="component" class="layui-nav-item">
               <a href="javascript:;" lay-tips="统计报表" lay-direction="2">
                 <i class="layui-icon layui-icon-read"></i>
-                <cite>统计报表</cite>
+                <cite>财务统计</cite>
               </a>
               <dl class="layui-nav-child">
                 <dd data-name="nav" data-permission="product.view_department_ledger">
                   <a lay-href="statistics/department_ledger.html">部门总账</a>
                 </dd>
+                <dd data-name="nav" data-permission="finance.view_finance_income">
+                  <a lay-href="statistics/finance_index.html">收支管理</a>
+                </dd>
+                <dd data-name="nav" data-permission="finance.view_finance_income">
+                  <a lay-href="statistics/bank_index.html">银行总账</a>
+                </dd>
               </dl>
             </li>
             <li data-name="set" class="layui-nav-item">
@@ -328,15 +334,15 @@
           </ul>
         </div>
       </div>
-      
-      
+
+
       <!-- 主体内容 -->
       <div class="layui-body" id="LAY_app_body">
         <div class="layadmin-tabsbody-item layui-show">
           <iframe src="dashboard/home.html" frameborder="0" class="layadmin-iframe"></iframe>
         </div>
       </div>
-      
+
       <!-- 辅助元素,一般用于移动设备下遮罩 -->
       <div class="layadmin-body-shade" layadmin-event="shade"></div>
     </div>

+ 35 - 1
uis/views/order/sale_order.html

@@ -106,7 +106,7 @@
                     <div class="layui-input-block">
                         <input type="text" autocomplete="off" name="customer_name" class="layui-input">
                     </div>
-                </div>
+                </div> 
                 <div class="layui-col-xs12 layui-col-sm12">
                     <label class="layui-form-label">客户电话:</label>
                     <div class="layui-input-block">
@@ -495,6 +495,40 @@
         });
     });
 
+
+    $('#btn_receive').on('click', function(){
+        var data = utils.getSelectedRow('datagrid');
+         if(data == false){
+             return;
+         }
+
+         if (data.status == 0) {
+             layer.msg('该订单未审核');
+             return;
+         }
+
+         table.editdata = data;
+
+         layer.open({
+          type: 2,
+          title: '完善发货信息['+ data.no +']',
+          shadeClose: false,
+          area: ['40%', '80%'],
+          btn: ['保存', '取消'],
+          yes: function(index, dom){
+              layui.onSubmitChild = function (data) {
+                  layer.close(index);
+                  table.reload('datagrid',{});
+              };
+              layui.submitChild();
+          },
+          btn2: function(index, layero){
+            layer.close(index);//关闭当前按钮
+          },
+          content: 'sale_order_message.html?order_id='+data.id
+        });
+    });
+
     $('#btn_clear').on('click', function(){
         var data = utils.getSelectedRow('datagrid');
          if(data == false){

+ 100 - 0
uis/views/order/sale_order_message.html

@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>配件出库</title>
+  <meta name="renderer" content="webkit">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+  <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+  <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+      <style type="text/css">
+        .table-overlay .layui-table-view,
+        .table-overlay .layui-table-header,
+        .table-overlay .layui-table-box,
+        .table-overlay .layui-table-body{overflow: visible;}
+        .table-overlay .layui-table-cell{height: auto; overflow: visible;}
+        .layui-form-select dl{max-height: 150px;}
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+
+                    <form class="layui-form" action="" lay-filter="component-form-element">
+                        <div class="layui-row layui-col-space10" >
+                            <div class="layui-col-xs12 layui-col-sm4 layui-col-md4" id="id_div">
+                            </div>
+                        </div>
+                        <button class="layui-btn" id="purchase-order-submit" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+                    </form>
+
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+  <script src="../../layuiadmin/layui/layui.js"></script>
+  <script>
+
+  layui.link('../../../layuiadmin/style/autocomplete.css');
+  layui.config({
+    base: '../../../layuiadmin/' //静态资源所在路径
+  }).extend({
+    index: 'lib/index',
+    autocomplete: 'autocomplete'
+  }).use(['index', 'utils','form', 'element'], function(){
+    var $ = layui.$
+    ,admin = layui.admin
+    ,element = layui.element
+    ,form = layui.form;
+
+    var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata));
+    var html = '';
+
+     admin.req({
+        url: '/order/sale_order/msg/?id=' + editdata.id,
+        done: function(res){
+            for (var i in res.data) {
+                 html += '<label class="layui-form-label" style="margin-top:5px;">'+ res.data[i].name +':</label>\n' +
+                '         <div class="layui-input-block" style="margin-top:5px;">\n' +
+                '         <input type="text" id="'+ res.data[i].id + ' " name="'+ res.data[i].id + '" value= " '+res.data[i].content+' "  autocomplete="off" class="layui-input">\n' +
+                '         </div>'
+            }
+            $('#id_div').html(html);
+            form.render();
+
+        }
+    });
+
+
+    form.render(null, 'component-form-element');
+    element.render('breadcrumb', 'breadcrumb');
+
+    form.on('submit(component-form-element)', function(data){
+        admin.req({
+            url: '/order/sale_order/msg_save/?id='+editdata.id
+            ,data: JSON.stringify(data.field)
+            ,type: 'post'
+            , done: function (res) {
+                parent.layui.onSubmitChild();
+            }
+        });
+
+        return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#purchase-order-submit").click();
+    };
+
+  });
+
+  </script>
+</body>
+</html>

+ 159 - 63
uis/views/purchase/consumable_godownentry.html

@@ -10,12 +10,36 @@
     <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
     <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
     <style type="text/css">
-    .LAY-btns .layui-nav {padding-left:0;padding-right:10px;top:-4px;margin: 0 10px;border: 0;background-color: #009688;}
-    .LAY-btns .layui-nav .layui-nav-item{line-height: 30px;}
-    .LAY-btns .layui-nav .layui-nav-child{top:34px;}
-    .LAY-btns .layui-nav .layui-nav-bar{display: none;}
-    .LAY-btns .layui-nav .layui-nav-child dd.layui-this a{color:#333;background-color:#fff;}
-    .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {background-color: #f2f2f2;color: #000;}
+        .LAY-btns .layui-nav {
+            padding-left: 0;
+            padding-right: 10px;
+            top: -4px;
+            margin: 0 10px;
+            border: 0;
+            background-color: #009688;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-item {
+            line-height: 30px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child {
+            top: 34px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-bar {
+            display: none;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
+            color: #333;
+            background-color: #fff;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
+            background-color: #f2f2f2;
+            color: #000;
+        }
     </style>
 </head>
 <body>
@@ -25,7 +49,10 @@
             <div class="layui-row">
 
                 <div class="LAY-btns" style="margin-bottom: 10px;">
-                    <button class="layui-btn layui-btn-sm" id="btn_add" data-permission="purchase.add_consumable_godown_entry"><i class="layui-icon layui-icon-add-1"></i>添加</button>
+                    <button class="layui-btn layui-btn-sm" id="btn_add"
+                            data-permission="purchase.add_consumable_godown_entry"><i
+                            class="layui-icon layui-icon-add-1"></i>添加
+                    </button>
                     <button class="layui-nav" data-permission="purchase.export_consumable_godown_entry">
                         <div class="layui-nav-item">
                             <a href="javascript:;" style="color:#fff;">导出</a>
@@ -44,21 +71,35 @@
                             </dl>
                         </div>
                     </button>
-                    <button class="layui-btn layui-btn-sm" data-permission="purchase.print_consumable_godown_entry" id="btn_print"><i class="layui-icon layui-icon-form"></i>打印</button>
-                    <button class="layui-btn layui-btn-sm" id="btn_query"><i class="layui-icon layui-icon-search"></i>查询</button>
+                    <button class="layui-btn layui-btn-sm" data-permission="purchase.print_consumable_godown_entry"
+                            id="btn_print">
+                        <i class="layui-icon layui-icon-form"></i>打印
+                    </button>
+                    <button class="layui-btn layui-btn-sm layui-hide" id="btn_pay"><i
+                            class="layui-icon layui-icon-form"></i>付款
+                    </button>
+                    <button class="layui-btn layui-btn-sm" id="btn_clear"><i
+                            class="layui-icon layui-icon-form"></i>结清
+                    </button>
+                    <button class="layui-btn layui-btn-sm" id="btn_query"><i class="layui-icon layui-icon-search"></i>查询
+                    </button>
                 </div>
                 <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
                 <script type="text/html" id="datagrid-operate-bar">
                     <div class="layui-btn-group">
-                    <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
-                    {{# if(d.status == 0){ }}
-                    <a class="layui-btn layui-btn-xs" data-permission="purchase.add_consumable_godown_entry" lay-event="edit">修改</a>
-                    <a class="layui-btn layui-btn-danger layui-btn-xs" data-permission="purchase.delete_consumable_godown_entry" lay-event="del">删除</a>
-                    <a class="layui-btn layui-btn-xs" data-permission="purchase.check_consumable_godown_entry" lay-event="check">审核</a>
-                    {{# } }}
-                    {{# if(d.status == 1){ }}
-                    <a class="layui-btn layui-btn-xs" lay-event="senior_edit" data-permission="purchase.edit_consumable_godown_entry">高级修改</a>
-                    {{# } }}
+                        <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
+                        {{# if(d.status == 0){ }}
+                        <a class="layui-btn layui-btn-xs" data-permission="purchase.add_consumable_godown_entry"
+                           lay-event="edit">修改</a>
+                        <a class="layui-btn layui-btn-danger layui-btn-xs"
+                           data-permission="purchase.delete_consumable_godown_entry" lay-event="del">删除</a>
+                        <a class="layui-btn layui-btn-xs" data-permission="purchase.check_consumable_godown_entry"
+                           lay-event="check">审核</a>
+                        {{# } }}
+                        {{# if(d.status == 1){ }}
+                        <a class="layui-btn layui-btn-xs" lay-event="senior_edit"
+                           data-permission="purchase.edit_consumable_godown_entry">高级修改</a>
+                        {{# } }}
                     </div>
                 </script>
             </div>
@@ -72,13 +113,15 @@
                 <div class="layui-col-xs12 layui-col-sm12">
                     <label class="layui-form-label">创建时间:</label>
                     <div class="layui-input-block">
-                        <input type="text" class="layui-input" name="create_time" id="create_time" placeholder=" - " autocomplete="off">
+                        <input type="text" class="layui-input" name="create_time" id="create_time" placeholder=" - "
+                               autocomplete="off">
                     </div>
                 </div>
                 <div class="layui-col-xs12 layui-col-sm12">
                     <label class="layui-form-label">审核时间:</label>
                     <div class="layui-input-block">
-                        <input type="text" class="layui-input" name="check_time" id="check_time" placeholder=" - " autocomplete="off">
+                        <input type="text" class="layui-input" name="check_time" id="check_time" placeholder=" - "
+                               autocomplete="off">
                     </div>
                 </div>
                 <div class="layui-col-xs12 layui-col-sm12">
@@ -99,7 +142,7 @@
                         <input type="text" name="supplier_text" class="layui-input" autocomplete="off">
                     </div>
                 </div>
-                 <div class="layui-col-xs12 layui-col-sm12">
+                <div class="layui-col-xs12 layui-col-sm12">
                     <label class="layui-form-label">创建人:</label>
                     <div class="layui-input-block">
                         <input type="text" name="create_user_text" class="layui-input" autocomplete="off">
@@ -112,7 +155,7 @@
                     </div>
                 </div>
             </div>
-            <div style="display: none" >
+            <div style="display: none">
                 <button id="query-submit" lay-submit lay-filter="query-form-element">查询</button>
             </div>
         </form>
@@ -135,16 +178,17 @@
             , laydate = layui.laydate;
         var is_has = utils.isHasPermissions('material.view_consumable_cost');
         var cols = [];
-        cols.push({type: 'checkbox', width: 50});
+        cols.push({type: 'radio', width: 50});
         cols.push({field: 'no', title: '入库单号', width: 140});
         cols.push({field: 'supplier_text', title: '供应商', width: 145});
-        cols.push({field: 'total_count', align:'right', title: '合计数量', width: 100});
-        if (is_has){
-          cols.push({field: 'total_amount', align:'right', title: '合计金额', width: 100});
-          cols.push({field: 'total_invoice_amount', align:'right', title: '合计发票金额', width: 120});
+        cols.push({field: 'total_count', align: 'right', title: '合计数量', width: 100});
+        if (is_has) {
+            cols.push({field: 'total_amount', align: 'right', title: '合计金额', width: 100});
+            cols.push({field: 'total_invoice_amount', align: 'right', title: '合计发票金额', width: 120});
         }
-        cols.push({field: 'warehouse_text', align:'right', title: '仓别', width: 100});
-        cols.push({field: 'purchase_order_no', align:'right', title: '合同号', width: 150});
+        cols.push({field: 'warehouse_text', align: 'right', title: '仓别', width: 100});
+        cols.push({field: 'purchase_order_no', align: 'right', title: '合同号', width: 150});
+        cols.push({field: 'is_clear_text', title: '是否结清', width: 90});
         cols.push({field: 'create_time', title: '创建时间', width: 150});
         cols.push({field: 'create_user_text', title: '创建人', width: 150});
         cols.push({field: 'status_text', title: '审核状态', width: 100});
@@ -159,7 +203,7 @@
             , page: true
             , height: 'full-104'
             , totalRow: true
-            ,parseData:function(res) {
+            , parseData: function (res) {
                 var cols = this.cols[0];
                 for (var i in cols) {
                     if (cols[i].field == 'total_count') {
@@ -170,20 +214,28 @@
                     }
                 }
                 return {
-                  "code": res.code, //解析接口状态
-                  "count": res.count, //解析数据长度
-                  "data": res.data //解析数据列表
+                    "code": res.code, //解析接口状态
+                    "count": res.count, //解析数据长度
+                    "data": res.data //解析数据列表
                 };
             }
             , done: function () {
                 layui.index.removeNoPermButtons()
             }
         });
+        layui.admin.req({
+            url: '/config/get_value/?property=godownentry_process'
+            , done: function (res) {
+                if (res.data == '1') {
+                    layui.$('#btn_pay').removeClass('layui-hide')
+                }
+            }
+        });
         //监听工具条
         table.on('tool(datagrid-operate)', function (obj) {
             var data = obj.data;
             if (obj.event === 'del') {
-                if (data.status === "1"){
+                if (data.status === "1") {
                     layer.msg('入库单已审核,无法删除!');
                     return;
                 }
@@ -198,7 +250,7 @@
                 });
             } else if (obj.event === 'edit') {
                 table.editdata = data;
-                if (data.status === "1"){
+                if (data.status === "1") {
                     layer.msg('入库单已审核,无法修改!');
                     return;
                 }
@@ -210,19 +262,19 @@
                     btn: ['保存', '取消'],
                     yes: function (index, dom) {
                         layui.onSubmitChild = function (data) {
-                        layer.close(index);
-                        table.reload('datagrid', {});
-                    };
-                    layui.submitChild();
+                            layer.close(index);
+                            table.reload('datagrid', {});
+                        };
+                        layui.submitChild();
                     },
                     btn2: function (index, layero) {
                         layer.close(index);//关闭当前按钮
                     },
                     content: 'consumable_godownentry_edit.html?id=' + data.id
                 });
-            }else if (obj.event === 'senior_edit') {
+            } else if (obj.event === 'senior_edit') {
                 table.editdata = data;
-                if (data.status === "0"){
+                if (data.status === "0") {
                     layer.msg('入库单未审核,无法高级修改!');
                     return;
                 }
@@ -234,37 +286,37 @@
                     btn: ['保存', '取消'],
                     yes: function (index, dom) {
                         layui.onSubmitChild = function (data) {
-                        layer.close(index);
-                        table.reload('datagrid', {});
-                    };
-                    layui.submitChild();
+                            layer.close(index);
+                            table.reload('datagrid', {});
+                        };
+                        layui.submitChild();
                     },
                     btn2: function (index, layero) {
                         layer.close(index);//关闭当前按钮
                     },
                     content: 'consumable_godownentry_senior_edit.html?id=' + data.id
                 });
-            }else if(obj.event === 'check'){
-                layer.confirm('确定要审核吗?', function(index){
+            } else if (obj.event === 'check') {
+                layer.confirm('确定要审核吗?', function (index) {
 
                     layer.close(index);
                     layui.admin.req({
-                        url: '/purchase/godownentry/check/?id='+data.id
-                        ,done: function(res){
-                            table.reload('datagrid',{});
+                        url: '/purchase/godownentry/check/?id=' + data.id
+                        , done: function (res) {
+                            table.reload('datagrid', {});
                         }
                     });
                 });
-              }else if(obj.event === 'detail'){
-                  table.editdata = data;
+            } else if (obj.event === 'detail') {
+                table.editdata = data;
                 layer.open({
-                  type: 2,
-                  title: '查看['+ data.no + ']',
-                  shadeClose: true,
-                  area: ['70%', '80%'],
-                  content: 'consumable_godownentry_detail.html?id='+data.id
+                    type: 2,
+                    title: '查看[' + data.no + ']',
+                    shadeClose: true,
+                    area: ['70%', '80%'],
+                    content: 'consumable_godownentry_detail.html?id=' + data.id
                 });
-              }
+            }
         });
         laydate.render({
             elem: '#create_time'
@@ -292,7 +344,7 @@
                 return;
             }
             layui.admin.req({
-                url: '/purchase/godownentry/export_detail/?id='+data.id,
+                url: '/purchase/godownentry/export_detail/?id=' + data.id,
                 data: _params,
                 done: function (res) {
                     layui.view.download(res.data.filename);
@@ -318,6 +370,50 @@
                 content: 'consumable_godownentry_edit.html'
             });
         });
+        $('#btn_pay').on('click', function () {
+            var data = utils.getSelectedRow('datagrid');
+            if (data == false) {
+                layer.msg('请选择一条数据!', {icon: 5});
+                return false;
+            }
+            if (data.status != '1') {
+                layer.msg('请先审核入库单,在付款!', {icon: 5});
+                return false;
+            }
+            layer.open({
+                type: 2,
+                title: '入库付款',
+                area: ['40%', '60%'],
+                btn: ['保存', '取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (data) {
+                        layer.close(index);
+                        table.reload('datagrid', {});
+                    };
+                    layui.submitChild();
+                },
+                btn2: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'material_pay.html?id=' + data.id
+            });
+        });
+        $('#btn_clear').on('click', function () {
+            var data = utils.getSelectedRow('datagrid');
+            if (!data.purchase_order) {
+                layer.msg('该入库单没有合同,不能结清!', {icon: 5});
+                return false;
+            }
+            layer.confirm('确定要结清吗?', function (index) {
+                layer.close(index);
+                layui.admin.req({
+                    url: '/purchase/purchase_payment/clear/?id=' + data.purchase_order
+                    , done: function (res) {
+                        table.reload('datagrid', {});
+                    }
+                });
+            });
+        });
         $('#btn_query').on('click', function () {
             layer.open({
                 type: 1,
@@ -336,7 +432,7 @@
             _params = data.field;
             table.reload('datagrid', {
                 where: data.field,
-                page:{curr:1}
+                page: {curr: 1}
             });
             layer.closeAll();
             return false
@@ -354,8 +450,8 @@
                 area: ['90%', '90%'],
                 btn: ['打印', '取消'],
                 yes: function (index, dom) {
-                    layui.onSubmitChild = function(data){
-                      layer.close(index);
+                    layui.onSubmitChild = function (data) {
+                        layer.close(index);
                     };
                     layui.submitChild();
                 },
@@ -393,4 +489,4 @@
     })
 </script>
 </body>
-</html>
+</html>

+ 20 - 0
uis/views/purchase/material_godownentry.html

@@ -77,6 +77,9 @@
                     <button class="layui-btn layui-btn-sm layui-hide" id="btn_pay"><i
                             class="layui-icon layui-icon-form"></i>付款
                     </button>
+                    <button class="layui-btn layui-btn-sm" id="btn_clear"><i
+                            class="layui-icon layui-icon-form"></i>结清
+                    </button>
                     <button class="layui-btn layui-btn-sm" id="btn_query"><i class="layui-icon layui-icon-search"></i>查询
                     </button>
                 </div>
@@ -195,6 +198,7 @@
         }
         cols.push({field: 'warehouse_text', align: 'right', title: '仓别', width: 100});
         cols.push({field: 'purchase_order_no', align: 'right', title: '合同号', width: 150});
+        cols.push({field: 'is_clear_text', title: '是否结清', width: 90});
         cols.push({field: 'create_time', title: '创建时间', width: 150});
         cols.push({field: 'create_user_text', title: '创建人', width: 100});
         cols.push({field: 'status_text', title: '审核状态', width: 100});
@@ -406,6 +410,22 @@
                 content: 'material_pay.html?id=' + data.id
             });
         });
+        $('#btn_clear').on('click', function () {
+            var data = utils.getSelectedRow('datagrid');
+            if (!data.purchase_order) {
+                layer.msg('该入库单没有合同,不能结清!', {icon: 5});
+                return false;
+            }
+            layer.confirm('确定要结清吗?', function (index) {
+                layer.close(index);
+                layui.admin.req({
+                    url: '/purchase/purchase_payment/clear/?id=' + data.purchase_order
+                    , done: function (res) {
+                        table.reload('datagrid', {});
+                    }
+                });
+            });
+        });
         $('#btn_query').on('click', function () {
             layer.open({
                 type: 1,

+ 5 - 0
uis/views/purchase/material_pay.html

@@ -141,6 +141,11 @@
                 layer.msg('请选择运输费用付款账户!', {icon: 5});
                 return false;
             }
+            console.log(!order_amount && !handing_amount && !transport_amount)
+            if(!order_amount && !handing_amount && !transport_amount){
+                layer.msg('请填写费用!', {icon: 5});
+                return false;
+            }
             admin.req({
                 url: '/purchase/purchase_order/payment/?id=' + id
                 , data: data.field

+ 2 - 1
uis/views/purchase/purchase_payment.html

@@ -141,6 +141,7 @@
                 ,{field:'amount', align:'right', title:'合同总金额', width:100}
                 ,{field:'apply_amount', align:'right', title:'申请金额', width:100}
                 ,{field:'actual_amount', align:'right', title:'实付金额', width:120}
+                ,{field:'is_clear_text', title:'是否结清', width:90}
                 ,{field:'create_time', title:'创建时间', width:150}
                 ,{field:'create_user_text', title:'创建人', width:100}
                 ,{field:'status_text', title:'审核状态', width: 100}
@@ -397,4 +398,4 @@
         })
     </script>
 </body>
-</html>
+</html>

+ 240 - 0
uis/views/statistics/bank_index.html

@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>银行总账</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+    <style type="text/css">
+        .LAY-btns .layui-nav {
+            padding-left: 0;
+            padding-right: 10px;
+            top: -4px;
+            margin: 0 10px;
+            border: 0;
+            background-color: #009688;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-item {
+            line-height: 30px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child {
+            top: 34px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-bar {
+            display: none;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
+            color: #333;
+            background-color: #fff;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
+            background-color: #f2f2f2;
+            color: #000;
+        }
+
+        .seach_items {
+            float: right;
+            margin-left: 10px;
+        }
+
+    </style>
+</head>
+<body>
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+                    <div class="LAY-btns" style="margin-bottom: 10px;">
+                        <form class="layui-form seach_items" lay-filter="query-form-element">
+                            <div class="seach_items">
+                                <button class="layui-btn" lay-submit lay-filter="query-form-element"><i
+                                        class="layui-icon layui-icon-search"></i>查询
+                                </button>
+                            </div>
+
+                            <div class="seach_items">
+                                <input type="text" class="layui-input" autocomplete="off" name="end_time"
+                                       id="end_time" placeholder="终止时间">
+                            </div>
+
+                            <div class="seach_items" style="margin-top: 5px;">
+                                终止时间:
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" class="layui-input" autocomplete="off" name="create_time"
+                                       id="create_time" placeholder="开始时间">
+                            </div>
+                            <div class="seach_items" style="margin-top: 5px;">
+                                开始时间:
+                            </div>
+                        </form>
+                        <div style="clear: both;"></div>
+                    </div>
+                    <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="../../layuiadmin/layui/layui.js?t=1"></script>
+<script>
+    var _params = '';
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index', //主入口模块
+        utils: 'utils'
+    }).use(['index', 'table', 'laydate', 'form', 'utils'], function () {
+        var $ = layui.$;
+        var table = layui.table
+            , form = layui.form
+            , laydate = layui.laydate;
+        var date = new Date();
+        var create_time = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + '01'
+        var end_time = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
+        laydate.render({
+            elem: '#create_time'
+            , value: create_time
+
+        });
+        laydate.render({
+            elem: '#end_time'
+            , value: end_time
+
+        });
+        table.render({
+            elem: '#datagrid'
+            , url: '/finance/finance_income/bank_data/'
+            , cols: [[
+                {field: 'name', title: '银行账户', width: 150}
+                , {field: 'qichu_yue', title: '期初余额', width: 150}
+                , {field: 'benqi_shouru', title: '本期收入', width: 150}
+                , {field: 'benqi_fachu', title: '本期发出', width: 150}
+                , {field: 'qimo_yue', title: '期末余额', width: 150}
+            ]]
+            , totalRow: true
+            , height: 'full-104'
+            , where: {create_time: create_time, end_time: end_time}
+            , parseData: function (res) {
+                var cols = this.cols[0];
+                for (var i in cols) {
+                    if (cols[i].field == 'qichu_yue') {
+                        cols[i].totalRowText = res.more.qichu_yue;
+                    }
+                    else if (cols[i].field == 'benqi_shouru') {
+                        cols[i].totalRowText = res.more.benqi_shouru;
+                    }
+                    else if (cols[i].field == 'benqi_fachu') {
+                        cols[i].totalRowText = res.more.benqi_fachu;
+                    }
+                    else if (cols[i].field == 'qimo_yue') {
+                        cols[i].totalRowText = res.more.qimo_yue;
+                    }
+                }
+                return {
+                    "code": res.code, //解析接口状态
+                    "count": res.count, //解析数据长度
+                    "data": res.data //解析数据列表
+                };
+            }
+            , done: function () {
+                layui.index.removeNoPermButtons();
+            }
+        });
+
+        //监听工具条
+        table.on('tool(datagrid-operate)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'edit') {
+                table.editdata = data;
+                if (data.check_status === 1) {
+                    layer.msg('入库单已审核,无法修改!');
+                    return;
+                }
+                layer.open({
+                    type: 2,
+                    title: '修改',
+                    shadeClose: false,
+                    area: ['50%', '60%'],
+                    btn: ['保存', '取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (data) {
+                            layer.close(index);
+                            table.reload('datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'finance_edit.html?id=' + data.id
+                });
+            } else if (obj.event === 'check') {
+                layer.confirm('确定要审核吗?', function (index) {
+
+                    layer.close(index);
+                    layui.admin.req({
+                        url: '/finance/finance_income/check/?check_status=1&id=' + data.id
+                        , done: function (res) {
+                            table.reload('datagrid', {});
+                        }
+                    });
+                });
+            } else if (obj.event === 'checkout') {
+                layer.confirm('确定要撤销审核吗?', function (index) {
+                    layer.close(index);
+                    layui.admin.req({
+                        url: '/finance/finance_income/check/?check_status=0&id=' + data.id
+                        , done: function (res) {
+                            table.reload('datagrid', {});
+                        }
+                    });
+                });
+            }
+        });
+
+        $('#btn_add').on('click', function () {
+            layer.open({
+                type: 2,
+                title: '添加',
+                area: ['40%', '65%'],
+                btn: ['保存', '取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (data) {
+                        layer.close(index);
+                        table.reload('datagrid', {});
+                    };
+                    layui.submitChild();
+                },
+                btn2: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'finance_edit.html'
+            });
+        });
+
+        form.on('submit(query-form-element)', function (data) {
+            //layer.msg(JSON.stringify(data.field));
+            _params = data.field;
+            table.reload('datagrid', {
+                where: data.field,
+                page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
+    })
+</script>
+</body>
+</html>

+ 172 - 0
uis/views/statistics/finance_edit.html

@@ -0,0 +1,172 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>仓别</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+    <style type="text/css">
+        .layui-form-select dl {
+            max-height: 150px;
+        }
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+
+                    <form class="layui-form" action="" lay-filter="component-form-element">
+                        <div class="layui-row layui-col-space10 layui-form-item">
+
+                            <div class="layui-col-lg6">
+                                <label class="layui-form-label">收支类别:</label>
+                                <div class="layui-input-block">
+                                    <select id="id_category" name="category" lay-filter="categoryChange">
+                                        <option value="">请选择</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-col-lg6">
+                                <label class="layui-form-label"><font color='red' size="4">*</font>收支用途:</label>
+                                <div class="layui-input-block">
+                                    <select id="id_purpose" name="purpose" lay-verify="required">
+                                        <option value="">请选择</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-col-lg6">
+                                <label class="layui-form-label"><font color='red' size="4">*</font>收支账户:</label>
+                                <div class="layui-input-block">
+                                    <select id="id_account" name="account" lay-verify="required">
+                                        <option value="">请选择</option>
+                                    </select>
+                                </div>
+                            </div>
+
+                            <div class="layui-col-lg6">
+                                <label class="layui-form-label"><font color='red' size="4">*</font>收支金额:</label>
+                                <div class="layui-input-block">
+                                    <input type="text" name="amount" placeholder="" autocomplete="off"
+                                           lay-verify="number|required"
+                                           class="layui-input">
+                                </div>
+                            </div>
+
+                            <div>
+                                <label class="layui-form-label">备注:</label>
+                                <div class="layui-input-block">
+                                    <input type="text" name="notes" placeholder="请输入备注"
+                                           autocomplete="off" class="layui-input">
+                                </div>
+                            </div>
+                            <button id="submit_btn" style="display: none;" class="layui-btn" lay-submit
+                                    lay-filter="component-form-element"></button>
+
+                        </div>
+                    </form>
+
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+<script src="../../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use(['index', 'form'], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , form = layui.form;
+
+        var id = layui.view.getParameterByName('id');
+        admin.req({
+            url: '/foundation/search_options/?type=5',
+            done: function (res) {
+                var data = res.data;
+                var order_account = $('#id_account');
+                for (var i in data) {
+                    var pid = data[i].id;
+                    var value = data[i].name;
+                    order_account.append("<option value='" + pid + "'>" + value + "</option>");
+                }
+                form.render();
+                loadData()
+            }
+        });
+        var purpose_data = [], purpose_id;
+        admin.req({
+            url: '/finance/finance_category/dict/',
+            done: function (res) {
+                var category_data = res.data.category;
+                purpose_data = res.data.purpose;
+                var category = $('#id_category');
+                for (var i in category_data) {
+                    var pid = category_data[i].id;
+                    var value = category_data[i].name;
+                    category.append("<option value='" + pid + "'>" + value + "</option>");
+                }
+                form.render();
+                loadData()
+            }
+        });
+        var loadData = function () {
+            if (id) {
+                var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+                form.val("component-form-element", editdata);
+                purpose_id = editdata.purpose
+                categoryChange(editdata.category)
+            }
+        };
+        var categoryChange = function (value) {
+            var purpose_option = '';
+            for (var i = 0; i < purpose_data.length; i++) {
+                if (purpose_data[i].category == parseInt(value)) {
+                    if (purpose_data[i].id == purpose_id)
+                        purpose_option += "<option value=" + purpose_data[i].id + " selected>" + purpose_data[i].name + "</option>";
+                    else
+                        purpose_option += "<option value=" + purpose_data[i].id + ">" + purpose_data[i].name + "</option>";
+                }
+            }
+            $("#id_purpose").append(purpose_option);
+            form.render();
+        };
+        form.on('select(categoryChange)', function (data) {
+            $("#id_purpose").html('');
+            if (!data.value) return;
+            categoryChange(data.value)
+        });
+
+        form.on('submit(component-form-element)', function (data) {
+            data.field.type = 1;
+
+            admin.req({
+                url: '/finance/finance_income/save/?id=' + id
+                , data: JSON.stringify(data.field)
+                , type: 'post'
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res.data);
+                }
+            });
+            return false;
+        });
+        parent.layui.submitChild = function () {
+            $("#submit_btn").click();
+        };
+
+    });
+</script>
+</body>
+</html>

+ 263 - 0
uis/views/statistics/finance_index.html

@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>收支管理</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+    <style type="text/css">
+        .LAY-btns .layui-nav {
+            padding-left: 0;
+            padding-right: 10px;
+            top: -4px;
+            margin: 0 10px;
+            border: 0;
+            background-color: #009688;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-item {
+            line-height: 30px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child {
+            top: 34px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-bar {
+            display: none;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
+            color: #333;
+            background-color: #fff;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
+            background-color: #f2f2f2;
+            color: #000;
+        }
+
+        .seach_items {
+            float: right;
+            margin-left: 10px;
+        }
+    </style>
+</head>
+<body>
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+                    <div class="LAY-btns" style="margin-bottom: 10px;">
+                        <div style="float: left">
+                            <button class="layui-btn" id="btn_add" data-permission="finance.add_finance_income"><i
+                                    class="layui-icon layui-icon-add-circle"></i>添加
+                            </button>
+                        </div>
+                        <form class="layui-form" lay-filter="query-form-element">
+                            <div class="seach_items">
+                                <button class="layui-btn" lay-submit lay-filter="query-form-element"><i
+                                        class="layui-icon layui-icon-search"></i>查询
+                                </button>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="referer_no" autocomplete="off" class="layui-input"
+                                       placeholder="引用单号"/>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="account_name" autocomplete="off" class="layui-input"
+                                       placeholder="账户名称"/>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" class="layui-input" autocomplete="off" name="create_time"
+                                       id="create_time" placeholder="添加时间">
+                            </div>
+                        </form>
+                        <div style="clear: both;"></div>
+                    </div>
+                    <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
+                    <script type="text/html" id="datagrid-operate-bar">
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="edit"
+                               data-permission="finance.add_finance_income">修改</a>
+                        </div>
+                        <div class="layui-btn-group">
+                            {{# if(d.check_status == 0){ }}
+                            <a class="layui-btn layui-btn-xs" data-permission="finance.check_finance_income" id="check"
+                               lay-event="check">审核</a>
+                            {{# } }}
+                            {{# if(d.check_status == 1){ }}
+                            <a class="layui-btn layui-btn-xs layui-btn-danger "
+                               data-permission="finance.check_finance_income" id="checkout" lay-event="check">撤销审核</a>
+                            {{# } }}
+                        </div>
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="../../layuiadmin/layui/layui.js?t=1"></script>
+<script>
+    var _params = '';
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index', //主入口模块
+        utils: 'utils'
+    }).use(['index', 'table', 'laydate', 'form', 'utils'], function () {
+        var $ = layui.$;
+        var table = layui.table
+            , form = layui.form
+            , laydate = layui.laydate;
+
+        table.render({
+            elem: '#datagrid'
+            , url: '/finance/finance_income/data/'
+            , cols: [[
+                {field: 'no', title: '收支单号', width: 150}
+                , {field: 'referer_no', title: '引用单号', width: 150}
+                , {field: 'type_text', title: '收支类型', width: 120}
+                , {field: 'account_text', title: '收支账户', width: 120}
+                , {field: 'amount', align: 'right', title: '收支金额', width: 100}
+                , {field: 'purpose_text', align: 'right', title: '收支用途', width: 100}
+
+                , {field: 'create_time', title: '创建时间', width: 150}
+                , {field: 'create_user_text', title: '创建人', width: 100}
+                , {field: 'check_status_text', title: '审核状态', width: 100}
+                , {field: 'check_time', title: '审核时间', width: 150}
+                , {field: 'check_user_text', title: '审核人', width: 100}
+                , {field: 'notes', title: '备注', minWidth: 120}
+                , {width: 150, align: 'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+            ]]
+            , page: true
+            , totalRow: true
+            , height: 'full-104'
+            , parseData: function (res) {
+                var cols = this.cols[0];
+                for (var i in cols) {
+                    if (cols[i].field == 'amount') {
+                        cols[i].totalRowText = res.more.sum_amount;
+                    }
+
+                }
+                return {
+                    "code": res.code, //解析接口状态
+                    "count": res.count, //解析数据长度
+                    "data": res.data //解析数据列表
+                };
+            }
+            , done: function () {
+                layui.index.removeNoPermButtons();
+            }
+        });
+
+        //监听工具条
+        table.on('tool(datagrid-operate)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'edit') {
+                table.editdata = data;
+                if (data.check_status === 1) {
+                    layer.msg('收支单已审核,无法修改!');
+                    return;
+                }
+                layer.open({
+                    type: 2,
+                    title: '修改',
+                    shadeClose: false,
+                    area: ['50%', '60%'],
+                    btn: ['保存', '取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (data) {
+                            layer.close(index);
+                            table.reload('datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'finance_edit.html?id=' + data.id
+                });
+            } else if (obj.event === 'check') {
+                layer.confirm('确定要审核吗?', function (index) {
+
+                    layer.close(index);
+                    layui.admin.req({
+                        url: '/finance/finance_income/check/?check_status=1&id=' + data.id
+                        , done: function (res) {
+                            table.reload('datagrid', {});
+                        }
+                    });
+                });
+            } else if (obj.event === 'checkout') {
+                layer.confirm('确定要撤销审核吗?', function (index) {
+                    layer.close(index);
+                    layui.admin.req({
+                        url: '/finance/finance_income/check/?check_status=0&id=' + data.id
+                        , done: function (res) {
+                            table.reload('datagrid', {});
+                        }
+                    });
+                });
+            }
+        });
+        laydate.render({
+            elem: '#create_time'
+            , range: true
+
+        });
+        laydate.render({
+            elem: '#check_time'
+            , range: true
+
+        });
+        $('#btn_export').on('click', function () {
+            layui.admin.req({
+                url: '/purchase/godownentry/export/?type=0',
+                data: _params,
+                done: function (res) {
+                    layui.view.download(res.data.filename);
+                }
+            });
+        });
+        $('#btn_add').on('click', function () {
+            layer.open({
+                type: 2,
+                title: '添加',
+                area: ['40%', '65%'],
+                btn: ['保存', '取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (data) {
+                        layer.close(index);
+                        table.reload('datagrid', {});
+                    };
+                    layui.submitChild();
+                },
+                btn2: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'finance_edit.html'
+            });
+        });
+
+        form.on('submit(query-form-element)', function (data) {
+            //layer.msg(JSON.stringify(data.field));
+            _params = data.field;
+            table.reload('datagrid', {
+                where: data.field,
+                page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
+    })
+</script>
+</body>
+</html>