Selaa lähdekoodia

收支类别设置

jiaweiqi 3 vuotta sitten
vanhempi
sitoutus
e897fddf60

+ 20 - 0
apps/finance/filters.py

@@ -0,0 +1,20 @@
+#coding=utf-8
+import django_filters
+from models import FinanceCategory, FinancePurpose
+
+
+class FinanceCategoryFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(name='name', lookup_expr='icontains')
+
+    class Meta:
+        model = FinanceCategory
+        fields = "__all__"
+
+
+class FinancePurposeFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(name='name', lookup_expr='icontains')
+    category_name = django_filters.CharFilter(name='category__name', lookup_expr='icontains')
+
+    class Meta:
+        model = FinancePurpose
+        fields = "__all__"

+ 27 - 10
apps/finance/models.py

@@ -12,8 +12,7 @@ from django.conf import settings
 class FinanceCategory(models.Model):
     name = models.CharField(max_length=100, verbose_name=u"名称")
     enabled = models.BooleanField(verbose_name=u"在用", default=True)
-    create_user = models.ForeignKey(User, related_name='finance_category_ref_create_user', verbose_name=u"创建人",
-                                    on_delete=models.PROTECT)
+    create_user = models.ForeignKey(User, related_name='finance_category_ref_create_user', verbose_name=u"创建人", editable=False ,on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
 
     class Meta:
@@ -22,11 +21,23 @@ class FinanceCategory(models.Model):
         verbose_name = u"财务收支类别"
         default_permissions = ()
         permissions = (
+            ("view_finance_category", u"查看"),
             ("add_finance_category", u"添加"),
-            ("edit_finance_category", u"修改"),
             ("delete_finance_category", u"删除"),
         )
 
+    @staticmethod
+    def getById(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError(u'无效的财务收支类别ID')
+        instance = FinanceCategory.objects.filter(pk=id).first()
+        if not instance:
+            raise CustomError(u'未找到相应的财务收支类别')
+        return instance
+
+
 class FinancePurpose(models.Model):
     PAY = 1
     INCOME = 2
@@ -40,8 +51,7 @@ class FinancePurpose(models.Model):
     type = models.IntegerField(choices=TYPE_CHOICES, verbose_name=u"收支类型")
     category = models.ForeignKey(FinanceCategory, verbose_name=u"类别", on_delete=models.PROTECT)
     enabled = models.BooleanField(verbose_name=u"在用", default=True)
-    create_user = models.ForeignKey(User, related_name='finance_product_ref_create_user', verbose_name=u"创建人",
-                                    on_delete=models.PROTECT)
+    create_user = models.ForeignKey(User, related_name='finance_product_ref_create_user', verbose_name=u"创建人", editable=False, on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
 
     class Meta:
@@ -49,11 +59,18 @@ class FinancePurpose(models.Model):
         ordering = ['-id']
         verbose_name = u"财务收支用途"
         default_permissions = ()
-        permissions = (
-            ("add_finance_category", u"添加"),
-            ("edit_finance_category", u"修改"),
-            ("delete_finance_category", u"删除"),
-        )
+        permissions = ()
+
+    @staticmethod
+    def getById(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError(u'无效的财务收支用途ID')
+        instance = FinancePurpose.objects.filter(pk=id).first()
+        if not instance:
+            raise CustomError(u'未找到相应的财务收支用途')
+        return instance
 
 
 class dbFinanceIncome(models.Model):

+ 106 - 0
apps/finance/serializers.py

@@ -3,7 +3,113 @@
 from rest_framework import serializers
 from django.db.models import Q
 
+from apps import base
+from apps.account.models import User
+from apps.base import Formater
 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
 
 
+class FinanceCategorySerializer(serializers.ModelSerializer):
+    enabled_text = serializers.SerializerMethodField()
+
+    class Meta:
+        model = FinanceCategory
+        fields = '__all__'
+
+    def get_enabled_text(self, obj):
+        if obj.enabled:
+            return u'是'
+        return u'否'
+
+    @staticmethod
+    def factory(user, data, id=None):
+        if id:
+            instance = FinanceCategory.getById(id)
+        else:
+            instance = None
+        serializer = FinanceCategorySerializer(instance, data=data)
+        serializer.user = user
+        return serializer
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.user
+        instance = FinanceCategory.objects.create(**validated_data)
+        BizLog.objects.addnew(
+            self.user,
+            BizLog.INSERT,
+            u"添加财务收支类别[%s],id=%d" % (instance.name, instance.id),
+            validated_data
+        )
+        return instance
+
+    def update(self, instance, validated_data):
+        instance = super(FinanceCategorySerializer, self).update(instance, validated_data)
+        BizLog.objects.addnew(
+            self.user,
+            BizLog.UPDATE,
+            u"修改财务收支类别[%s],id=%d" % (instance.name, instance.id),
+            validated_data
+        )
+        return instance
+
+    def validSave(self):
+        if self.is_valid():
+            return self.save()
+        else:
+            raise CustomError(dump_serializer_errors(self))
+
+
+class FinancePurposeSerializer(serializers.ModelSerializer):
+    category_text = serializers.CharField(source='category.name', read_only=True)
+    type_text = serializers.CharField(source='get_type_display', read_only=True)
+    enabled_text = serializers.SerializerMethodField()
+
+    def get_enabled_text(self, obj):
+        if obj.enabled:
+            return u'是'
+        return u'否'
+
+    class Meta:
+        model = FinancePurpose
+        fields = '__all__'
+
+    @staticmethod
+    def factory(user, data, id=None):
+        if id:
+            instance = FinancePurpose.getById(id)
+        else:
+            instance = None
+        serializer = FinancePurposeSerializer(instance, data=data)
+        serializer.user = user
+        return serializer
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.user
+        instance = FinancePurpose.objects.create(**validated_data)
+        BizLog.objects.addnew(
+            self.user,
+            BizLog.INSERT,
+            u"添加财务收支用途[%s],id=%d" % (instance.name, instance.id),
+            validated_data
+        )
+        return instance
+
+    def update(self, instance, validated_data):
+        instance = super(FinancePurposeSerializer, self).update(instance, validated_data)
+        BizLog.objects.addnew(
+            self.user,
+            BizLog.UPDATE,
+            u"修改财务收支用途[%s],id=%d" % (instance.name, instance.id),
+            validated_data
+        )
+        return instance
+
+    def validSave(self):
+        if self.is_valid():
+            return self.save()
+        else:
+            raise CustomError(dump_serializer_errors(self))

+ 15 - 0
apps/finance/urls.py

@@ -0,0 +1,15 @@
+# coding=utf-8
+from django.conf.urls import url
+
+from views import *
+
+urlpatterns = (
+    url(r'^finance_category/data/$', finance_category_list),
+    url(r'^finance_category/save/$', finance_category_save),
+    url(r'^finance_category/delete/$', finance_category_delete),
+    url(r'^finance_category/dict/$', finance_category_dict),
+
+    url(r'^finance_purpose/data/$', finance_purpose_list),
+    url(r'^finance_purpose/save/$', finance_purpose_save),
+    url(r'^finance_purpose/delete/$', finance_purpose_delete),
+)

+ 126 - 0
apps/finance/views.py

@@ -0,0 +1,126 @@
+# coding=utf-8
+
+import traceback
+import json
+
+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 apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome
+from apps.finance.serializers import FinanceCategorySerializer, FinancePurposeSerializer
+from apps.account.decorators import token_required, permission_required
+from apps.foundation.models import BizLog
+
+from libs.http import JSONResponse, JSONError, DataGridJSONResponse
+from libs import utils
+from apps.exceptions import CustomError
+
+
+@csrf_exempt
+@permission_required('finance.view_finance_category')
+def finance_category_list(request):
+    f = FinanceCategoryFilter(request.GET, queryset=FinanceCategory.objects.filter())
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = FinanceCategorySerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total)\
+
+
+@csrf_exempt
+@token_required
+def finance_category_dict(request):
+    result = {
+        'category': FinanceCategorySerializer(FinanceCategory.objects.filter(enabled=True), many=True).data
+    }
+    return JSONResponse(result)
+
+
+@csrf_exempt
+@permission_required('finance.add_finance_category')
+def finance_category_save(request):
+    id = request.GET.get('id')
+    data = json.loads(request.body)
+
+    try:
+        with transaction.atomic():
+            serializer = FinanceCategorySerializer.factory(request.user, data, id)
+            serializer.validSave()
+    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.delete_finance_category')
+def finance_category_delete(request):
+    id = request.GET.get('id')
+
+    try:
+        with transaction.atomic():
+            instance = FinanceCategory.getById(id)
+            BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除财务收支类别[%s],id=%d" % (instance.name, instance.id))
+            instance.delete()
+    except CustomError, e:
+        return JSONError(e.get_error_msg())
+    except ProtectedError:
+        return JSONError(u'该财务收支类别已被使用,禁止删除!')
+    except IntegrityError:
+        return JSONError(u'该财务收支类别已被使用,禁止删除!')
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'删除失败!')
+
+    return JSONResponse({})
+
+
+@csrf_exempt
+@permission_required('finance.view_finance_category')
+def finance_purpose_list(request):
+    f = FinancePurposeFilter(request.GET, queryset=FinancePurpose.objects.filter())
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = FinancePurposeSerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total)
+
+
+@csrf_exempt
+@permission_required('finance.add_finance_category')
+def finance_purpose_save(request):
+    id = request.GET.get('id')
+    data = json.loads(request.body)
+    try:
+        with transaction.atomic():
+            serializer = FinancePurposeSerializer.factory(request.user, data, id)
+            serializer.validSave()
+    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.delete_finance_category')
+def finance_purpose_delete(request):
+    id = request.GET.get('id')
+
+    try:
+        with transaction.atomic():
+            instance = FinancePurpose.getById(id)
+            BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除财务收支用途[%s],id=%d" % (instance.name, instance.id))
+            instance.delete()
+    except CustomError, e:
+        return JSONError(e.get_error_msg())
+    except ProtectedError:
+        return JSONError(u'该财务收支用途已被使用,禁止删除!')
+    except IntegrityError:
+        return JSONError(u'该财务收支用途已被使用,禁止删除!')
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'删除失败!')
+
+    return JSONResponse({})

+ 3 - 2
apps/foundation/consts.py

@@ -61,7 +61,8 @@ CONTENT_TYPE_SORTING = (
     'foundation-bizlog',  # 权限管理
     'config-config',  # 基础设置
 
-    'product-productbase'
+    'product-productbase',
+    'finance-financecategory',
 
 )
 
@@ -83,7 +84,7 @@ MENU_TO_MODEL = (
                ,'warehouse-warehousebackmap',)),
     (u'基础数据', ('material-material', 'material-consumable', 'goods-goods','warehouse-warehouse'
                , 'warehouse-warehouseadmin','warehouse-warehousestock','account-department'
-               ,'foundation-option','supplier-supplier', 'customer-customer', 'account-user','foundation-bizlog','config-config',)),
+               ,'foundation-option','supplier-supplier', 'customer-customer', 'account-user','foundation-bizlog','config-config', 'finance-financecategory', )),
     (u'其他',('product-productbase',))
 
 )

+ 1 - 0
scj/settings.py

@@ -63,6 +63,7 @@ INSTALLED_APPS = [
     'apps.touch',
     'apps.office',
     'apps.config',
+    'apps.finance',
 ]
 
 MIDDLEWARE_CLASSES = [

+ 1 - 0
scj/urls.py

@@ -37,6 +37,7 @@ urlpatterns = [
     url(r'^touch/', include('apps.touch.urls')),
     url(r'^office/', include('apps.office.urls')),
     url(r'^config/', include('apps.config.urls')),
+    url(r'^finance/', include('apps.finance.urls')),
 ]
 
 urlpatterns += static(settings.TMP_URL, document_root=settings.TMP_ROOT)

+ 96 - 0
uis/views/finance/finance_category_edit.html

@@ -0,0 +1,96 @@
+<!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">
+  <link rel="stylesheet" type="text/css" href="../../layuiadmin/style/formSelects-v4.css"/>
+     <style>
+    </style>
+</head>
+<body>
+
+  <div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+      <div class="layui-col-md6">
+        <div class="layui-card">
+
+          <div class="layui-card-body">
+            <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"><font color='red' size="4">*</font>名称:</label>
+                  <div class="layui-input-block">
+                    <input type="text" name="name" lay-verify="required" placeholder="请输入名称" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+                <div class="layui-col-lg6">
+                  <label class="layui-form-label">是否在用:</label>
+                  <div class="layui-input-block">
+                    <input type="checkbox" name="enabled" lay-skin="switch" lay-text="是|否" checked="" value="1">
+                  </div>
+                </div>
+                <button id="id_save" class="layui-btn" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+              </div>
+            </form>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+
+
+  <script src="../../layuiadmin/layui/layui.js"></script>
+  <script>
+  layui.config({
+    base: '../../../layuiadmin/' //静态资源所在路径
+  }).extend({
+    index: 'lib/index',
+    formSelects: 'formSelects-v4'
+  }).use(['index', 'form', 'utils'], function(){
+    var $ = layui.$
+    ,admin = layui.admin
+    ,upload = layui.upload
+    ,form = layui.form;
+    var id = layui.view.getParameterByName('id');
+
+    if(id){
+        var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+        form.val("component-form-element", editdata);
+    }
+    form.on('submit(component-form-element)', function(data){
+
+      //layer.msg(JSON.stringify(data.field));
+        if (id){
+            var url =  '/finance/finance_category/save/?id=' + id;
+        }else{
+            url =  '/finance/finance_category/save/';
+        }
+        if(!('enabled' in data.field)){
+            data.field.enabled = false;
+        }
+
+         admin.req({
+            url: url
+            ,data: JSON.stringify(data.field)
+            ,type: 'post'
+            ,done: function(res){
+                parent.layui.onSubmitChild(res.data);
+            }
+      });
+
+      return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#id_save").click();
+    };
+  });
+  </script>
+</body>
+</html>

+ 128 - 0
uis/views/finance/finance_purpose_edit.html

@@ -0,0 +1,128 @@
+<!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">
+  <link rel="stylesheet" type="text/css" href="../../layuiadmin/style/formSelects-v4.css"/>
+     <style>
+    </style>
+</head>
+<body>
+
+  <div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-card">
+
+          <div class="layui-card-body" pad15>
+            <form class="layui-form" action="" lay-filter="component-form-element">
+              <div class="layui-row layui-col-space10 layui-form-item">
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>收支类型:</label>
+                  <div class="layui-input-block">
+                    <select id="id_type" name="type" lay-verify="required">
+                        <option value="1">收入</option>
+                        <option value="2">支出</option>
+                    </select>
+                  </div>
+              </div>
+                  <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>类别:</label>
+                  <div class="layui-input-block">
+                    <select id="id_category" name="category" lay-verify="required">
+                    </select>
+                  </div>
+              </div>
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>名称:</label>
+                  <div class="layui-input-block">
+                    <input type="text" name="name" lay-verify="required" placeholder="请输入名称" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+                <div>
+                  <label class="layui-form-label">在用:</label>
+                  <div class="layui-input-block">
+                    <input type="checkbox" name="enabled" lay-skin="switch" lay-text="是|否" checked="" value="1">
+                  </div>
+                </div>
+                <button id="id_save" class="layui-btn" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+              </div>
+            </form>
+          </div>
+        </div>
+      </div>
+    </div>
+
+
+  <script src="../../layuiadmin/layui/layui.js"></script>
+  <script>
+  layui.config({
+    base: '../../../layuiadmin/' //静态资源所在路径
+  }).extend({
+    index: 'lib/index',
+    formSelects: 'formSelects-v4'
+  }).use(['index', 'form', 'utils', 'upload'], function(){
+    var $ = layui.$
+    ,admin = layui.admin
+    ,upload = layui.upload
+    ,form = layui.form;
+    var id = layui.view.getParameterByName('id');
+
+     admin.req({
+        url: '/finance/finance_category/dict/',
+        done: function (res) {
+            var category = res.data.category;
+            var category_node = $('#id_category');
+            for (var i in category) {
+                var pid = category[i].id;
+                var value = category[i].name;
+                category_node.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);
+        }
+    };
+     form.render(null, 'component-form-element');
+
+    if (id){
+          var url = '/finance/finance_purpose/save/?id='+id;
+      }else{
+          url =  '/finance/finance_purpose/save/';
+      }
+
+    form.on('submit(component-form-element)', function(data){
+      //layer.msg(JSON.stringify(data.field));
+
+        if(!('enabled' in data.field)){
+            data.field.enabled = false;
+        }
+
+        admin.req({
+            url: url
+            ,data: JSON.stringify(data.field)
+            ,type: 'post'
+            ,done: function(res){
+                parent.layui.onSubmitChild(res.data);
+            }
+          });
+
+      return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#id_save").click();
+    };
+  });
+  </script>
+</body>
+</html>

+ 259 - 0
uis/views/finance/index.html

@@ -0,0 +1,259 @@
+<!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">
+        .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-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>
+                </div>
+                    <form class="layui-form" lay-filter="query-form-element1">
+                        <div class="seach_items">
+                            <button class="layui-btn" lay-submit lay-filter="query-form-element1"><i class="layui-icon layui-icon-search"></i>查询</button>
+                        </div>
+                        <div class="seach_items">
+                            <input type="text"  name="name" autocomplete="off" class="layui-input" placeholder="名称"/>
+                        </div>
+                    </form>
+                <div style="clear: both;"></div>
+            </div>
+            <table class="layui-hide" id="finance_category_datagrid" lay-filter="finance_category-operate"></table>
+
+            <script type="text/html" id="finance_category-operate-bar">
+                <div class="layui-btn-group">
+              <a class="layui-btn layui-btn-xs" lay-event="finance_category_edit" data-permission="finance.add_finance_category">修改</a>
+              <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="finance_category_del" data-permission="finance.delete_finance_category">删除</a>
+                </div>
+            </script>
+          </div>
+
+          <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>
+                </div>
+
+                    <form class="layui-form" lay-filter="query-form-element2">
+                        <div class="seach_items">
+                            <button class="layui-btn" lay-submit lay-filter="query-form-element2"><i class="layui-icon layui-icon-search"></i>查询</button>
+                        </div>
+                        <div class="seach_items">
+                            <input type="text"  name="name" autocomplete="off" class="layui-input" placeholder="名称"/>
+                        </div>
+                        <div class="seach_items">
+                            <input type="text"  name="category_name" autocomplete="off" class="layui-input" placeholder="类别名称"/>
+                        </div>
+                    </form>
+                <div style="clear: both;"></div>
+                </div>
+
+            <table class="layui-hide" id="finance_purpose_datagrid" lay-filter="series-operate"></table>
+
+            <script type="text/html" id="series-operate-bar">
+                <div class="layui-btn-group">
+              <a class="layui-btn layui-btn-xs" lay-event="finance_purpose_edit" data-permission="finance.add_finance_category">修改</a>
+              <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="finance_purpose_del" data-permission="finance.delete_finance_category">删除</a>
+                </div>
+            </script>
+          </div>
+        </div>
+        </div>
+    </div>
+  </div>
+  <script src="../../layuiadmin/layui/layui.js?t=1"></script>
+  <script>
+  layui.config({
+    base: '../../../layuiadmin/' //静态资源所在路径
+  }).extend({
+    index: 'lib/index' //主入口模块
+  }).use(['index', 'table', 'form'], function(){
+    var $ = layui.$;
+    var table = layui.table
+        ,form = layui.form
+        ,admin = layui.admin;
+      //品牌
+    table.render({
+      elem: '#finance_category_datagrid'
+      ,url: '/finance/finance_category/data/'
+      ,cols: [[
+        {field:'name', title:'名称', width:200}
+        ,{field:'enabled_text', title:'在用', minWidth: 80}
+        ,{width:110, align:'center', fixed: 'right', toolbar: '#finance_category-operate-bar'}
+      ]]
+      ,page: true
+      ,height: 'full-108'
+      , done: function () {
+        layui.index.removeNoPermButtons()
+      }
+    });
+    //车系
+    table.render({
+      elem: '#finance_purpose_datagrid'
+      ,url: '/finance/finance_purpose/data/'
+      ,cols: [[
+        {field:'category_text', title:'类别', width:200}
+        ,{field:'name', title:'名称', width:200}
+        ,{field:'type_text', title:'类型', width:80}
+        ,{field:'enabled_text', title:'在用', width: 100}
+        ,{width:110, align:'center', fixed: 'right', toolbar: '#series-operate-bar'}
+      ]]
+      ,page: true
+      ,height: 'full-108'
+      , done: function () {
+        layui.index.removeNoPermButtons()
+      }
+    });
+
+    //监听品牌工具条
+    table.on('tool(finance_category-operate)', function(obj) {
+        var data = obj.data;
+        if (obj.event === 'finance_category_del') {
+            layer.confirm('确定要删除吗?', function (index) {
+                layer.close(index);
+                layui.admin.req({
+                    url: '/finance/finance_category/delete/?id=' + data.id
+                    ,type: 'get'
+                    , done: function (res) {
+                        table.reload('finance_category_datagrid', {});
+                    }
+                });
+            });
+        } else if (obj.event === 'finance_category_edit') {
+            table.editdata = data;
+            layer.open({
+                type: 2,
+                title: '修改',
+                shadeClose: false,
+                area: ['450px', '350px'],
+                btn:['保存','取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (data) {
+                        layer.close(index);
+                        table.reload('finance_category_datagrid', {});
+                        table.reload('finance_purpose_datagrid', {});
+                      };
+                      layui.submitChild();
+                  },
+                  btn2: function(index, layero){
+                    layer.close(index);//关闭当前按钮
+                  },
+                content: 'finance_category_edit.html?id=' + data.id
+            });
+        }
+    });
+    //监听车系工具条
+    table.on('tool(series-operate)', function(obj){
+      var data = obj.data;
+        if(obj.event === 'finance_purpose_del'){
+        layer.confirm('确定要删除吗?', function(index){
+          layui.admin.req({
+            url: '/finance/finance_purpose/delete/?id='+data.id
+            ,type: 'get'
+            ,done: function(res){
+              table.reload('finance_purpose_datagrid',{});
+              layer.close(index);
+            }
+          });
+        });
+      } else if(obj.event === 'finance_purpose_edit'){
+        table.editdata = data;
+        layer.open({
+          type: 2,
+          title: '修改',
+         area: ['500px', '500px'],
+          btn:['保存','取消'],
+          yes: function (index, dom) {
+            layui.onSubmitChild = function (data) {
+                layer.close(index);
+                table.reload('finance_category_datagrid', {});
+                table.reload('finance_purpose_datagrid', {});
+              };
+              layui.submitChild();
+          },
+          btn2: function(index, layero){
+            layer.close(index);//关闭当前按钮
+          },
+          content: 'finance_purpose_edit.html?id='+data.id
+        });
+      }
+    });
+    form.on('submit(query-form-element1)', function(data){
+      table.reload('finance_category_datagrid', {
+          where: data.field
+          ,page:{curr:1}
+      });
+      layer.closeAll();
+      return false
+    });
+    form.on('submit(query-form-element2)', function(data){
+      table.reload('finance_purpose_datagrid', {
+          where: data.field
+          ,page:{curr:1}
+      });
+      layer.closeAll();
+      return false
+    });
+    $('#finance_category_add').on('click', function(){
+        layer.open({
+          type: 2,
+          title: '添加',
+          area: ['450px', '280px'],
+          btn:['保存','取消'],
+          yes: function (index, dom) {
+            layui.onSubmitChild = function (data) {
+                layer.close(index);
+                table.reload('finance_category_datagrid', {});
+                table.reload('finance_purpose_datagrid', {});
+              };
+              layui.submitChild();
+          },
+          btn2: function(index, layero){
+            layer.close(index);//关闭当前按钮
+          },
+          content: 'finance_category_edit.html'
+        });
+    });
+    $('#finance_purpose_add').on('click', function(){
+        layer.open({
+          type: 2,
+          title: '添加',
+          area: ['500px', '500px'],
+          btn:['保存','取消'],
+          yes: function (index, dom) {
+            layui.onSubmitChild = function (data) {
+                layer.close(index);
+                table.reload('finance_category_datagrid', {});
+                table.reload('finance_purpose_datagrid', {});
+              };
+              layui.submitChild();
+          },
+          btn2: function(index, layero){
+            layer.close(index);//关闭当前按钮
+          },
+          content: 'finance_purpose_edit.html'
+        });
+    });
+});
+
+
+
+  </script>
+</body>
+</html>

+ 3 - 0
uis/views/index.html

@@ -281,6 +281,9 @@
                 </dd>
                 <dd data-name="nav" data-permission="foundation.view_option">
                   <a lay-href="foundation/option.html">自定义项管理</a>
+                </dd>
+                  <dd data-name="nav" data-permission="finance.view_finance_category">
+                  <a lay-href="finance/index.html">收支类别设置</a>
                 </dd>
                 <dd data-name="nav" data-permission="supplier.view_supplier">
                   <a lay-href="supplier/supplier.html">供应商管理</a>