lyh 1 rok pred
rodič
commit
9f763fc836

+ 22 - 0
apps/customer/filters.py

@@ -0,0 +1,22 @@
+# coding=utf-8
+
+import django_filters
+
+from apps.customer.models import Customer, CustomerVehicle
+
+
+class CustomerFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
+    tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
+
+    class Meta:
+        model = Customer
+        fields = '__all__'
+
+
+class CustomerVehicleFilter(django_filters.FilterSet):
+    customer = django_filters.CharFilter(field_name='customer')
+
+    class Meta:
+        model = CustomerVehicle
+        fields = '__all__'

+ 13 - 2
apps/customer/models.py

@@ -7,8 +7,6 @@ from django.utils import timezone
 from django.conf import settings
 
 from apps.images.models import Images
-from apps.account.models import User
-
 from utils.wx.wechat import WeChat
 from utils.wx.WXBizDataCrypt import WXBizDataCrypt
 from utils.exceptions import CustomError
@@ -19,6 +17,7 @@ class Customer(models.Model):
     name = models.CharField(max_length=100, verbose_name=u"姓名")
     tel = models.CharField(max_length=50, verbose_name=u'电话')
     gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u'性别', null=True)
+    create_time = models.DateTimeField(verbose_name=u"添加时间", default=timezone.now, editable=False)
     face = models.ForeignKey(Images, verbose_name=u'头像', on_delete=models.PROTECT, null=True)
 
     class Meta:
@@ -95,3 +94,15 @@ class CustomerWechat(models.Model):
         customer_wechat.customer = customer
         customer_wechat.save()
         return customer
+
+class CustomerVehicle(models.Model):
+    customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT)
+    number = models.CharField(max_length=20)
+    model = models.CharField(max_length=200)
+    mileage = models.FloatField(verbose_name=u"车辆里程")
+    img = models.ForeignKey(Images, verbose_name=u'行驶证', on_delete=models.PROTECT, null=True)
+
+    class Meta:
+        db_table = 'customer_vehicle'
+        verbose_name = u'客户车辆'
+        default_permissions = ()

+ 36 - 0
apps/customer/serializers.py

@@ -0,0 +1,36 @@
+# coding=utf-8
+
+from django.conf import settings
+from rest_framework import serializers
+from apps.customer.models import Customer, CustomerVehicle
+from utils.exceptions import CustomError
+
+
+class CustomerSerializer(serializers.ModelSerializer):
+    gender_text = serializers.CharField(source='get_gender_display', read_only=True)
+    img_url = serializers.SerializerMethodField()
+    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+
+    def get_img_url(self, obj):
+        if obj.face:
+            return '%s%s' % (settings.MEDIA_URL, obj.face.picture)
+        return ''
+
+    class Meta:
+        model = Customer
+        fields = '__all__'
+
+
+class CustomerVehicleSerializer(serializers.ModelSerializer):
+    img_url = serializers.SerializerMethodField()
+
+    def get_img_url(self, obj):
+        if obj.img:
+            return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
+        return ''
+
+    class Meta:
+        model = CustomerVehicle
+        fields = '__all__'
+
+

+ 15 - 0
apps/customer/urls.py

@@ -0,0 +1,15 @@
+# coding=utf-8
+
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+
+]
+
+router = SimpleRouter()
+router.register(r'vehicle', CustomerVehicleViewSet)
+router.register(r'', CustomerViewSet)
+urlpatterns += router.urls

+ 67 - 0
apps/customer/views.py

@@ -0,0 +1,67 @@
+# coding=utf-8
+import requests
+import json
+from django.db import transaction
+from rest_framework.decorators import action
+from django.utils import timezone
+from utils import response_ok
+
+from utils.permission import permission_required
+from utils.custom_modelviewset import CustomModelViewSet
+from utils.exceptions import CustomError
+from apps.foundation.models import BizLog, Config
+from apps.account import tenant_log
+from apps.images.models import Images
+from apps.customer.models import Customer, CustomerVehicle
+from apps.vehicle.models import Brand
+from apps.customer.filters import CustomerFilter, CustomerVehicleFilter
+from .serializers import CustomerSerializer, CustomerVehicleSerializer
+from hashlib import md5
+
+
+class CustomerViewSet(CustomModelViewSet):
+    queryset = Customer.objects.filter()
+    serializer_class = CustomerSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter()
+        f = CustomerFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    def perform_create(self, serializer):
+        super(CustomerViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        tenant_log(self.request.user, BizLog.INSERT, u'添加客户[%s],id=%d' % (instance.name, instance.id),validated_data)
+
+    @action(methods=['post'], detail=True)
+    def update_customer(self, request, pk):
+        file = request.FILES.get('image', None)
+        user = request.user
+        instance = self.get_object()
+
+        with transaction.atomic():
+            serializer = self.get_serializer(instance, data=request.data)
+            serializer.is_valid(raise_exception=True)
+            self.perform_update(serializer)
+
+            tenant_log(user, BizLog.UPDATE, u'修改客户[%s],id=%d' % (instance.name, instance.id), request.data)
+            if file:
+                old_img = instance.face
+                img = Images.objects.employee_addnew(user, Images.CUSTOMER_FACE, file)
+                instance.face = img
+                instance.save()
+                if old_img:
+                    old_img.del_images()
+
+        return response_ok()
+
+
+class CustomerVehicleViewSet(CustomModelViewSet):
+    queryset = CustomerVehicle.objects.filter()
+    serializer_class = CustomerVehicleSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter()
+        f = CustomerVehicleFilter(self.request.GET, queryset=queryset)
+        return f.qs

+ 4 - 0
apps/images/models.py

@@ -62,6 +62,7 @@ class ImagesManager(models.Manager):
             Images.VEHICLE_MODEL_THUMBNAIL: vehicle_cover,
             Images.CUSTOMER_FACE: customer_face_file,
             Images.SHOP_FILE: shop_file,
+            Images.VEHICLE_LICENSE: vehicle_license,
         }
 
         return path_map[type] + str(user_id) + '/'
@@ -85,6 +86,7 @@ vehicle_cover = "vehicle/"
 activity_cover = "activity/"
 customer_face_file = 'customer/face/'
 shop_file = 'store/'
+vehicle_license = 'customer/vehicle/'
 
 class Images(models.Model):
     USEDVEHICLE_FILE = 1
@@ -96,6 +98,7 @@ class Images(models.Model):
     VEHICLE_MODEL_THUMBNAIL = 7
     CUSTOMER_FACE = 8
     SHOP_FILE = 9
+    VEHICLE_LICENSE = 9
     TYPE_CHOICES = (
         (USEDVEHICLE_FILE, u'二手车图片'),
         (USEDVEHICLE_THUMBNAIL, u'二手车缩略图'),
@@ -106,6 +109,7 @@ class Images(models.Model):
         (VEHICLE_MODEL_THUMBNAIL, u'车型展示图'),
         (CUSTOMER_FACE, u'客户头像'),
         (SHOP_FILE, u'门店图片'),
+        (VEHICLE_LICENSE, u'行驶证'),
     )
 
     user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)

+ 1 - 1
apps/store/views.py

@@ -72,7 +72,7 @@ class ShopViewSet(CustomModelViewSet):
 
             if file:
                 old_img = instance.img
-                img = Images.objects.employee_addnew(user.employee, Images.SHOP_FILE, file)
+                img = Images.objects.employee_addnew(user, Images.SHOP_FILE, file)
                 instance.img = img
                 instance.save()
                 if old_img:

+ 1 - 0
shop/urls.py

@@ -30,6 +30,7 @@ urlpatterns = [
     url(r'^product/', include('apps.product.urls')),
     url(r'^activity/', include('apps.activity.urls')),
     url(r'^store/', include('apps.store.urls')),
+    url(r'^customer/', include('apps.customer.urls')),
     # url(r'^api/', include('apps.api.urls')),
 ]
 

+ 85 - 0
uis/views/customer/customer_vehicle.html

@@ -0,0 +1,85 @@
+<!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 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:left;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">
+            <table class="layui-hide" id="datagrid_customer_vehicle" lay-filter="datagrid-operate"></table>
+            <script type="text/html" id="customer_vehicle-operate-bar">
+                <div class="layui-btn-group">
+                    <a class="layui-btn layui-btn-xs" lay-event="license" >行驶证</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' //主入口模块
+     ,formSelects: 'formSelects-v4'
+  }).use(['index', 'table', 'form', 'formSelects', 'upload', 'laydate'], function(){
+    var $ = layui.$
+    ,table = layui.table;
+    var id = layui.view.getParameterByName('id');
+
+    table.render({
+      elem: '#datagrid_customer_vehicle'
+      ,url: '/customer/vehicle/?customer=' + id
+      ,id: 'datagrid_customer_vehicle'
+      ,cols: [[
+        {field:'number', title:'车牌号',width: 150}
+       ,{field:'model', title:'车型',width: 150}
+       ,{field:'mileage', title:'里程',width: 150}
+       ,{width:80, align:'center', fixed: 'right', toolbar: '#customer_vehicle-operate-bar'}
+      ]]
+      ,page:true
+      ,height: 'full-108'
+    });
+
+    table.on('tool(datagrid-operate)', function(obj){
+      var data = obj.data;
+       if(obj.event === 'license'){
+            layer.open({
+              type: 2,
+              title: data.number + '的行驶证',
+              shadeClose: false,
+              area: ['60%', '80%'],
+              content: 'license.html?img='+data.img_url
+            });
+        }
+    });
+
+  });
+  </script>
+</body>
+</html>
+

+ 158 - 0
uis/views/customer/edit.html

@@ -0,0 +1,158 @@
+<!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>
+        img{
+            width: 40%;
+            height: 30%;
+        }
+    </style>
+</head>
+<body>
+
+  <div class="layui-fluid">
+        <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>
+                  <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"><font color='red' size="4">*</font>电话:</label>
+                  <div class="layui-input-block">
+                    <input type="text" name="tel" placeholder="请输入电话" lay-verify="required|tel" 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">
+                        <select id="id_gender" name="gender" lay-verify="required">
+                            <option value="2">先生</option>
+                            <option value="1">女士</option>
+                        </select>
+                      </div>
+                  </div>
+                <div>
+                  <label class="layui-form-label">头像:</label>
+                  <div class="layui-input-block">
+                      <button type="button" class="layui-btn-sm" id="test1">上传图片</button><br><br>
+                      <img class="layui-upload-img" id="demo1">
+                  </div>
+                </div>
+                <button id="id_save" class="layui-btn" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+                  <button class="layui-btn" type="button" id="upload_image" style="display: none"></button>
+              </div>
+            </form>
+          </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');
+
+    if(id){
+        var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+        form.val("component-form-element", editdata);
+        if(editdata.img_url){
+            $('#demo1').attr('src', editdata.img_url);
+        }
+    }
+
+    form.render(null, 'component-form-element');
+    form.val("component-form-element", {
+                'password':'1111'
+    });
+
+    var form_data = {field:{}};
+
+    if (id){
+          var url = '/customer/'+id + '/update_customer/';
+      }else{
+          url =  '/customer/';
+      }
+
+     upload.render({
+         elem: '#test1',
+         url: url,
+         auto: false,
+         field: 'image',
+         bindAction: '#upload_image',
+         choose: function(obj) {
+             obj.preview(
+                 function(index, file, result) {
+                     $('#demo1').attr('src', result);
+                 }
+             );
+         },
+          data:{
+             name: function(){return form_data.field.name;},
+             gender: function(){return form_data.field.gender;},
+             tel: function(){return form_data.field.tel;},
+             },
+        done: function (res) {
+            if (res.code != 0) {
+                layer.msg(res.msg);
+            }else {
+                parent.layui.onSubmitChild(res.data);
+            }
+        },
+        error: function () {
+            layer.msg('保存失败');
+        }
+    });
+
+    form.on('submit(component-form-element)', function(data){
+      //layer.msg(JSON.stringify(data.field));
+        if(!('is_active' in data.field)){
+            data.field.is_active = 0;
+        }
+
+        if (data.field.image){
+            form_data = data;
+            $('#upload_image').click();
+        }else{
+            admin.req({
+                url: url
+                ,data: data.field
+                ,type: 'post'
+                ,done: function(res){
+                    parent.layui.onSubmitChild(res.data);
+                }
+              });
+        }
+
+      return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#id_save").click();
+    };
+  });
+  </script>
+</body>
+</html>

+ 142 - 0
uis/views/customer/index.html

@@ -0,0 +1,142 @@
+<!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 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 class="layui-col-xs12">
+                    <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="tel" autocomplete="off" class="layui-input" placeholder="客户电话"/>
+                        </div>
+                        <div class="seach_items">
+                            <input type="text"  name="name" autocomplete="off" class="layui-input" placeholder="客户姓名"/>
+                        </div>
+
+                    </form>
+                </div>
+                <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" >修改</a>
+                    <a class="layui-btn layui-btn-xs" lay-event="vehicle" >车辆信息</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' //主入口模块
+     ,formSelects: 'formSelects-v4'
+  }).use(['index', 'table', 'form', 'formSelects', 'upload', 'laydate'], function(){
+    var $ = layui.$
+            ,table = layui.table
+            ,laydate = layui.laydate
+            ,form = layui.form;
+    table.render({
+      elem: '#datagrid'
+      ,url: '/customer/'
+      ,title: '客户信息'
+      ,id: 'datagrid'
+      ,cols: [[
+        {field:'name', title:'名称',width: 100}
+       ,{field:'tel', title:'电话',width: 150}
+       ,{field:'gender_text', title:'性别',width: 80}
+       ,{field:'create_time', title:'注册时间',width: 150}
+        ,{width:150, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+      ]]
+      , done: function () {
+        layui.index.removeNoPermButtons()
+      }
+      ,page: true
+      ,height: 'full-108'
+    });
+    laydate.render({
+        elem: '#range_time'
+        ,range:true
+    });
+    form.on('submit(query-form-element)', function(data){
+      //layer.msg(JSON.stringify(data.field));
+      table.reload('datagrid', {
+          where: data.field
+          ,page:{curr:1}
+      });
+      _params = data.field;
+      layer.closeAll();
+      return false;
+    });
+    //监听工具条
+    table.on('tool(datagrid-operate)', function(obj){
+      var data = obj.data;
+        if(obj.event === 'edit'){
+        table.editdata = data;
+        layer.open({
+          type: 2,
+          title: '修改',
+          shadeClose: false,
+          area: ['500px', '500px'],
+          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: 'edit.html?id='+data.id
+        });
+      }else if(obj.event === 'vehicle'){
+            layer.open({
+              type: 2,
+              title: data.name + '的车辆信息',
+              shadeClose: false,
+              area: ['60%', '80%'],
+              content: 'customer_vehicle.html?id='+data.id
+            });
+        }
+    });
+  });
+  </script>
+</body>
+</html>
+

+ 53 - 0
uis/views/customer/license.html

@@ -0,0 +1,53 @@
+<!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>
+        img{
+            width: 40%;
+            height: 30%;
+        }
+    </style>
+</head>
+<body>
+
+  <div class="layui-fluid">
+        <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">
+                  <img class="layui-upload-img" id="demo1">
+              </div>
+            </form>
+          </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.$
+    ,form = layui.form;
+    var img_url = layui.view.getParameterByName('img');
+
+   if(img_url){
+        $('#demo1').attr('src', img_url);
+    }
+    form.render(null, 'component-form-element');
+  });
+  </script>
+</body>
+</html>

+ 3 - 42
uis/views/index.html

@@ -64,52 +64,13 @@
 
           <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-muen" lay-filter="layadmin-system-side-menu">
             <li data-name="set" class="layui-nav-item">
-              <a href="javascript:;" lay-tips="公告管理" lay-direction="2">
-                <i class="layui-icon layui-icon-notice"></i>
-                <cite>公告管理</cite>
-              </a>
-              <dl class="layui-nav-child">
-                <dd data-name="button">
-                  <a lay-href="notice/notice.html">公告管理</a>
-                </dd>
-              </dl>
-            </li>
-            <li data-name="set" class="layui-nav-item">
-              <a href="javascript:;" lay-tips="销售管理" lay-direction="2">
-                <i class="layui-icon layui-icon-form"></i>
-                <cite>销售管理</cite>
-              </a>
-              <dl class="layui-nav-child">
-                <dd data-name="button">
-                  <a lay-href="plan/sale.html">销售计划管理</a>
-                </dd>
-                <dd data-name="button">
-                  <a lay-href="order/sale_order.html">销售订单管理</a>
-                </dd>
-                <dd data-name="button" >
-                  <a lay-href="goods/goods_stock_query.html">成品库存查询</a>
-                </dd>
-              </dl>
-            </li>
-            <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>
-              </a>
-              <dl class="layui-nav-child">
-                <dd data-name="nav" >
-                  <a lay-href="plan/production.html">生产计划管理</a>
-                </dd>
-              </dl>
-            </li>
-            <li data-name="set" class="layui-nav-item">
-              <a href="javascript:;" lay-tips="采购管理" lay-direction="2">
+              <a href="javascript:;" lay-tips="业务管理" lay-direction="2">
                 <i class="layui-icon layui-icon-cart-simple"></i>
-                <cite>采购管理</cite>
+                <cite>业务管理</cite>
               </a>
               <dl class="layui-nav-child">
                 <dd data-name="button">
-                  <a lay-href="purchase/purchase.html">计划管理</a>
+                  <a lay-href="customer/index.html">客户管理</a>
                 </dd>
                 <dd data-name="button">
                   <a lay-href="purchase/purchase_price.html">询价管理</a>