wushaodong vor 3 Jahren
Ursprung
Commit
a6bf1c61bf

+ 1 - 0
apps/notices/__init__.py

@@ -0,0 +1 @@
+# coding=utf-8

+ 9 - 0
apps/notices/filters.py

@@ -0,0 +1,9 @@
+# coding=utf-8
+import django_filters
+from .models import Notices
+
+
+class NoticesFilter(django_filters.FilterSet):
+    class Meta:
+        model = Notices
+        fields = '__all__'

+ 0 - 0
apps/notices/migrations/__init__.py


+ 20 - 0
apps/notices/models.py

@@ -0,0 +1,20 @@
+# coding=utf-8
+
+
+from django.db import models
+from django.conf import settings
+
+class Notices(models.Model):
+    content = models.CharField(max_length=200, verbose_name=u"内容")
+    title = models.CharField(max_length=50, verbose_name=u'标题')
+    create_time = models.DateTimeField(verbose_name='发布时间', auto_now_add=True)
+    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"创建者", on_delete=models.PROTECT,
+                                    editable=False)
+
+    class Meta:
+        db_table = "notices"
+        verbose_name = u"通知"
+        ordering = ['-id']
+        default_permissions = ()
+        permissions = [
+        ]

+ 16 - 0
apps/notices/serializers.py

@@ -0,0 +1,16 @@
+# coding=utf-8
+
+from rest_framework import serializers
+from .models import Notices
+
+
+class NoticesSerializer(serializers.ModelSerializer):
+    create_user_name = serializers.CharField(source='create_user.employee.name', read_only=True)
+    class Meta:
+        model = Notices
+        fields = '__all__'
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        instance = super(NoticesSerializer, self).create(validated_data)
+        return instance

+ 13 - 0
apps/notices/urls.py

@@ -0,0 +1,13 @@
+# coding=utf-8
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+    url(r'list/$', NoticesListView.as_view()),
+]
+
+router = SimpleRouter()
+router.register(r'', NoticesViewSet)
+urlpatterns += router.urls

+ 28 - 0
apps/notices/views.py

@@ -0,0 +1,28 @@
+# coding=utf-8
+from django.db import transaction
+
+from utils import response_ok
+from utils.custom_modelviewset import CustomModelViewSet
+from utils.exceptions import CustomError
+from utils.permission import isLogin, permission_required
+from rest_framework.generics import ListAPIView
+from .serializers import NoticesSerializer
+from .models import Notices
+from .filters import NoticesFilter
+
+class NoticesListView(ListAPIView):
+    queryset = Notices.objects.filter()
+    serializer_class = NoticesSerializer
+
+    def filter_queryset(self, queryset,):
+        f = NoticesFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+class NoticesViewSet(CustomModelViewSet):
+    serializer_class = NoticesSerializer
+    queryset = Notices.objects.filter()
+    permission_classes = [isLogin, ]
+
+    def filter_queryset(self, queryset):
+        f = NoticesFilter(self.request.GET, queryset=queryset)
+        return f.qs

+ 2 - 2
apps/order/urls.py

@@ -7,8 +7,8 @@ from .views import *
 urlpatterns = [
     url(r'^deleteProductImage/$', DeleteProductImageView.as_view()),
     url(r'productDict/$', ProductView.as_view()),
-    url(r'productList/$', ProductListViewSet.as_view()),
-    url(r'list/$', OrderListViewSet.as_view()),
+    url(r'productList/$', ProductListView.as_view()),
+    url(r'list/$', OrderListView.as_view()),
 ]
 
 router = SimpleRouter()

+ 2 - 2
apps/order/views.py

@@ -118,7 +118,7 @@ class ProductViewSet(CustomModelViewSet):
             data.append(commodity_image_item)
         return response_ok(data)
 
-class ProductListViewSet(ListAPIView):
+class ProductListView(ListAPIView):
     queryset = Product.objects.filter()
     serializer_class = ProductListSerializer
 
@@ -126,7 +126,7 @@ class ProductListViewSet(ListAPIView):
         f = ProductFilter(self.request.GET, queryset=queryset)
         return f.qs
 
-class OrderListViewSet(ListAPIView):
+class OrderListView(ListAPIView):
     permission_classes = [isLogin, ]
     queryset = Order.objects.filter()
     serializer_class = OrderListSerializer

+ 1 - 1
nostone_loan/settings.py

@@ -48,7 +48,7 @@ INSTALLED_APPS = [
     'apps.api',
     'apps.order',
     'apps.upload',
-
+    'apps.notices',
 ]
 
 MIDDLEWARE = [

+ 1 - 0
nostone_loan/urls.py

@@ -26,6 +26,7 @@ urlpatterns = [
     url(r'^account/', include('apps.account.urls')),
     url(r'^api/', include('apps.api.urls')),
     url(r'^order/', include('apps.order.urls')),
+    url(r'^notices/', include('apps.notices.urls')),
 
 ]
 

+ 3 - 0
uis/views/index.html

@@ -85,6 +85,9 @@
                             <dd data-name="nav">
                                 <a lay-href="order/index.html">订单管理</a>
                             </dd>
+                            <dd data-name="nav">
+                                <a lay-href="notices/index.html">公告管理</a>
+                            </dd>
                         </dl>
                     </li>
 

+ 96 - 0
uis/views/notices/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"/>
+
+</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">
+                                <input type="text" name="title" placeholder="请输入标题" lay-verify="required"
+                                       autocomplete="off" class="layui-input">
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label"><font color='red' size="4">*</font>内容:</label>
+                            <div class="layui-input-block">
+                                <textarea placeholder="请输入内容" name="content" class="layui-textarea"></textarea>
+                            </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',], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , 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.render(null, 'component-form-element');
+
+        form.on('submit(component-form-element)', function (data) {
+
+            if (id) {
+                var url = '/notices/' + id + '/';
+                var type = 'put';
+            } else {
+                url = '/notices/';
+                type = 'post'
+            }
+
+            admin.req({
+                url: url
+                , data: data.field
+                , type: type
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res.data);
+                }
+            });
+
+            return false;
+        });
+
+        parent.layui.submitChild = function () {
+            $("#id_save").click();
+        };
+    });
+</script>
+</body>
+</html>

+ 191 - 0
uis/views/notices/index.html

@@ -0,0 +1,191 @@
+<!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>
+    <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: 40px;
+        }
+
+        .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>
+
+<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 class="layui-col-xs2">
+                            <button class="layui-btn" id="notices_add" ><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="title" autocomplete="off" class="layui-input"
+                                       placeholder="标题"/>
+                            </div>
+                        </form>
+                        <div style="clear: both;"></div>
+                    </div>
+                    <table class="layui-hide" id="notices_datagrid" lay-filter="notices-operate"></table>
+
+                    <script type="text/html" id="notices-operate-bar">
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="notices_edit"
+                               >修改</a>
+                        </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="notices_del"
+                               >删除</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', 'upload'], function () {
+        var $ = layui.$;
+        var table = layui.table
+            , form = layui.form
+            , upload = layui.upload
+            , admin = layui.admin;
+
+        table.render({
+            elem: '#notices_datagrid'
+            , url: '/notices/'
+            , cols: [[
+                {field: 'title', title: '标题', width: 200}
+                , {field: 'content', title: '内容', MinWidth: 150}
+                , {field: 'create_time', title: '发布时间', width: 180}
+                , {field: 'create_user_name', title: '发布人', width: 100}
+                , {width: 130, align: 'center', fixed: 'right', toolbar: '#notices-operate-bar'}
+            ]]
+            , page: true
+            , height: 'full-108'
+        });
+
+        //监听工具条
+        table.on('tool(notices-operate)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'notices_del') {
+                layer.confirm('确定要删除吗?', function (index) {
+                    layer.close(index);
+                    admin.req({
+                        url: '/notices/' + data.id + '/'
+                        , type: 'delete'
+                        , done: function (res) {
+                            table.reload('notices_datagrid', {});
+                        }
+                    });
+                });
+            } else if (obj.event === 'notices_edit') {
+                table.editdata = data;
+                layer.open({
+                    type: 2,
+                    title: '修改',
+                    shadeClose: false,
+                    area: ['50%', '50%'],
+                    btn: ['保存', '取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (data) {
+                            layer.close(index);
+                            table.reload('notices_datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'edit.html?id=' + data.id
+                });
+            }
+        });
+
+        form.on('submit(query-form-element1)', function (data) {
+            table.reload('notices_datagrid', {
+                where: data.field
+                , page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
+
+        $('#notices_add').on('click', function () {
+            layer.open({
+                type: 2,
+                title: '添加',
+                area: ['50%', '50%'],
+                btn: ['保存', '取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (data) {
+                        layer.close(index);
+                        table.reload('notices_datagrid', {});
+                    };
+                    layui.submitChild();
+                },
+                btn2: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'edit.html'
+            });
+        });
+    });
+
+</script>
+</body>
+</html>