Ver Fonte

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	apps/customer/models.py
#	apps/customer/urls.py
#	apps/customer/views.py
hujingpei há 4 anos atrás
pai
commit
d8e0ba4211

+ 2 - 3
apps/account/consts.py

@@ -7,6 +7,7 @@ CONTENT_TYPE_SORTING = (
     'account-user',  # 用户管理
     'account-managestoreuser',  # 权限管理
     'option-option',  # 自定义项
+    'customer-reportcustomer', # 报备客户
 
 )
 
@@ -22,9 +23,7 @@ MENU_TO_MODEL = (
     ),
     (
         u'潜客作业', (
-            'device-device',
-            'type_model-devicetype',
-            'device-godownentry',
+             'customer-reportcustomer',
         )
     ),
     (

+ 2 - 3
apps/account/views.py

@@ -83,7 +83,7 @@ class EmployeeViewSet(CustomModelViewSet):
                               u'删除账号[%s],id=%d' % (instance.username, instance.id))
         super(EmployeeViewSet, self).perform_destroy(instance)
 
-    @permission_required('account.check_user')
+    # @permission_required('account.check_user')
     @action(methods=['post'], detail=True)
     def join(self, request, pk):
         try:
@@ -184,10 +184,9 @@ class PermissionsListView(APIView):
 class PermissionDictView(APIView):
     permission_classes = [isLogin, ]
 
-    @permission_required('account.manager_store')
+    @permission_required('account.add_user')
     def get(self, request):
         rows = Group.objects.filter()
-        print()
         if not request.user.is_superuser:
             groups = request.user.groups.all()
             rows =rows.filter(id__in=[g.id for g in groups])

+ 1 - 1
apps/agent/views.py

@@ -86,7 +86,7 @@ class StoreViewSet(CustomModelViewSet):
             instance.status = status
             instance.check_time = timezone.now()
             instance.save()
-            BizLog.objects.addnew(None, request.user, BizLog.INSERT,
+            BizLog.objects.addnew(request.user, BizLog.INSERT,
                                   u'审核门店[%s]状态为[%s],id=%d' % (instance.name, status, instance.id))
         except CustomError as e:
             return response_error(e.get_error_msg())

+ 12 - 27
apps/customer/models.py

@@ -1,11 +1,9 @@
 # coding=utf-8
 from django.db import models
 from django.conf import settings
-from django.utils import timezone
-
 from utils.exceptions import CustomError
 from apps.option.models import Option
-
+from apps.agent.models import Store
 
 class ReportCustomer(models.Model):
     NOT_CHECKED = 0
@@ -13,28 +11,29 @@ class ReportCustomer(models.Model):
     REPEAT_REPORT = 2
     STATUS_CHOICES = (
         (NOT_CHECKED, '待审核'),
-        (CHECKED, '已审核'),
+        (CHECKED, '已分配'),
         (REPEAT_REPORT, '重复报备')
     )
 
-    name = models.CharField(max_length=100, verbose_name=u"姓名")
-    tel = models.CharField(max_length=50, verbose_name=u'电话')
+    name = models.CharField(max_length=20, verbose_name=u"姓名")
+    tel = models.CharField(max_length=15, verbose_name=u'电话')
     gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u'性别',
                                               default=settings.MALE)
-    village = models.CharField(max_length=100, verbose_name=u'小区')
-    address = models.CharField(max_length=100, verbose_name=u'地址')
-    source = models.ForeignKey(Option, verbose_name=u'来源', related_name='customer_source', on_delete=models.PROTECT)
-    project = models.ManyToManyField(Option, verbose_name=u'项目', related_name='customer_category', editable=False,
+    village = models.CharField(max_length=200, verbose_name=u'小区')
+    address = models.CharField(max_length=200, verbose_name=u'地址')
+    source = models.ForeignKey(Option, verbose_name=u'来源', related_name='report_customer_source', on_delete=models.PROTECT)
+    project = models.ManyToManyField(Option, verbose_name=u'项目', related_name='report_customer_category', editable=False,
                                      null=True,blank=True)
     notes = models.CharField(max_length=500, verbose_name=u"备注", null=True)
     report_status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'报备状态', default=NOT_CHECKED)
-    check_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'审核人', related_name='customer_check_user',
+    check_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'审核人', related_name='report_customer_check_user',
                                    on_delete=models.PROTECT, null=True)
     check_time = models.DateTimeField(verbose_name=u'审核时间', null=True)
-    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'添加人', related_name='customer_create_user',
+    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'添加人', related_name='report_customer_create_user',
                                     editable=False, on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u'添加时间', auto_now_add=True, editable=False)
-
+    store = models.ForeignKey(Store, verbose_name=u'门店', related_name='report_customer_store',
+                                    editable=False, on_delete=models.PROTECT)
 
     class Meta:
         db_table = 'report_customer'
@@ -44,24 +43,10 @@ class ReportCustomer(models.Model):
         permissions = [
             ('view_report_customer', u'查看'),
             ('add_report_customer', u'添加'),
-            ('update_report_customer', u'更新'),
             ('delete_report_customer', u'删除'),
             ('check_report_customer', u'审核'),
         ]
 
-    # def check_customer(self, user):
-    #     # 审核
-    #     if self.report_status == ReportCustomer.REPEAT_REPORT:
-    #
-    #
-    #     if self.report_status == ReportCustomer.NOT_CHECKED:
-    #         self.check_user = user
-    #         self.report_status = ReportCustomer.CHECKED
-    #         self.check_time = timezone.now()
-    #         self.save()
-    #     # if self.report_status == Customer.CHECKED:
-    #     #     # 撞单
-
 
 class NewCustomer(models.Model):
     report_customer = models.ForeignKey(ReportCustomer, verbose_name=u'报备客户信息', related_name='customer_source',

+ 7 - 3
apps/customer/serializers.py

@@ -9,9 +9,9 @@ from .models import ReportCustomer,NewCustomer
 class ReportCustomerSerializer(serializers.ModelSerializer):
     gender_text = serializers.CharField(source='get_gender_display', read_only=True)
     report_status_text = serializers.CharField(source='get_report_status_display', read_only=True)
-    check_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
     source_text = serializers.CharField(source='source.name', read_only=True)
-    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+    create_user_text = serializers.CharField(source='create_user.name', read_only=True)
+    check_user_text = serializers.CharField(source='check_user.name', read_only=True)
     project_text = serializers.SerializerMethodField()
 
     def get_project_text(self, obj):
@@ -24,12 +24,16 @@ class ReportCustomerSerializer(serializers.ModelSerializer):
 
     def create(self, validated_data):
         validated_data['create_user'] = self.context['request'].user
+        store = self.context['request'].user.store
+        if not store:
+            raise CustomError('当前账号未绑定门店,禁止报备客户!')
+
         instance = super(ReportCustomerSerializer, self).create(validated_data)
         projects = self.initial_data['project']
         if projects:
             projects = json.loads(projects)
         else:
-            raise CustomError(u'请选择项目')
+            raise CustomError(u'请选择项目')
 
         for project in projects:
             instance.project.add(project)

+ 2 - 2
apps/customer/urls.py

@@ -2,11 +2,11 @@
 from django.conf.urls import url, include
 from rest_framework.routers import SimpleRouter
 
-from .views import ReportCustomerViewSet,ReportCustomerDictView,NewCustomerViewSet
-
+from .views import *
 
 urlpatterns = [
     url(r'^dict/$', ReportCustomerDictView.as_view()),
+    url(r'^get_user/$', UserDictView.as_view()),
 
 ]
 

+ 37 - 27
apps/customer/views.py

@@ -3,7 +3,7 @@ from rest_framework.views import APIView
 from django.db.models import Q
 from django.utils import timezone
 from rest_framework.decorators import action
-
+from utils.permission import isLogin, permission_required
 from utils.custom_modelviewset import CustomModelViewSet
 from utils import response_ok, response_error
 from utils.exceptions import CustomError
@@ -13,18 +13,23 @@ from apps.option.serializers import OptionComboboxSerializer
 from .models import ReportCustomer,NewCustomer
 from .serializers import ReportCustomerSerializer,NewCustomerSerializer
 from .filters import ReportCustomerFilter,NewCustomerFilter
-
+from django.contrib.auth import get_user_model
+User = get_user_model()
 
 class ReportCustomerViewSet(CustomModelViewSet):
-    permission_classes = []
+    permission_classes = [isLogin]
     queryset = ReportCustomer.objects.filter()
     serializer_class = ReportCustomerSerializer
 
+    @permission_required('customer.view_report_customer')
     def filter_queryset(self, queryset):
-        queryset = queryset.filter()
+        queryset = queryset.filter(
+            Q(store_id__in=self.request.user.get_manager_range()) |
+            Q(create_user=self.request.user))
         f = ReportCustomerFilter(self.request.GET, queryset=queryset)
         return f.qs
 
+    @permission_required('customer.add_report_customer')
     def perform_create(self, serializer):
         super(ReportCustomerViewSet, self).perform_create(serializer)
         instance = serializer.instance
@@ -32,6 +37,7 @@ class ReportCustomerViewSet(CustomModelViewSet):
         BizLog.objects.addnew(self.request.user, BizLog.INSERT,
                               u'添加客户报备[%s],id=%d' % (instance.name, instance.id), validated_data)
 
+    @permission_required('customer.add_report_customer')
     def perform_update(self, serializer):
         super(ReportCustomerViewSet, self).perform_update(serializer)
         instance = serializer.instance
@@ -39,47 +45,40 @@ class ReportCustomerViewSet(CustomModelViewSet):
         BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
                               u'修改客户报备[%s],id=%d' % (instance.name, instance.id), validated_data)
 
+    @permission_required('customer.delete_report_customer')
     def perform_destroy(self, instance):
         BizLog.objects.addnew(self.request.user, BizLog.DELETE,
                               u'删除客户报备[%s],id=%d' % (instance.name, instance.id))
         super(ReportCustomerViewSet, self).perform_destroy(instance)
 
-
-    @action(methods=['post'], detail=False)
-    def check(self, request, pk):
+    # @permission_required('customer.check_report_customer')
+    @action(methods=['post'], detail=True)
+    def dispatch_customer(self, request, pk):
         # 审核
-        report_status = request.POST.get('report_status')
+        # TODO 创建潜客跟踪表
+        user = request.POST.get('user')
         try:
             instance = ReportCustomer.objects.filter(id=pk).first()
             if not instance:
-                raise CustomError('当前客户报备信息有误!')
-            if report_status == ReportCustomer.REPEAT_REPORT:
-                raise CustomError('当前客户报备状态为重复报备!')
-            if instance.report_status == ReportCustomer.CHECKED and report_status == ReportCustomer.CHECKED:
-                # 撞单
-                instance.check_user = self.request.user
-                instance.report_status = ReportCustomer.REPEAT_REPORT
-                instance.check_time = timezone.now()
-                instance.save()
-            if instance.report_status == ReportCustomer.NOT_CHECKED and report_status == ReportCustomer.CHECKED:
-                instance.check_user = self.request.user
-                instance.report_status = ReportCustomer.CHECKED
-                instance.check_time = timezone.now()
-                instance.save()
-            BizLog.objects.addnew(None, request.user, BizLog.INSERT,
-                                  u'审核客户报备[%s]状态为[%s],id=%d' % (instance.name, report_status, instance.id))
+                raise CustomError('当前客户报备信息有误,请刷新重试!')
+            instance.check_user = self.request.user
+            instance.report_status = ReportCustomer.CHECKED
+            instance.check_time = timezone.now()
+            instance.save()
+            BizLog.objects.addnew(request.user, BizLog.INSERT,
+                                  u'分配客户报备[%s],id=%d' % (instance.name,  instance.id))
         except CustomError as e:
             return response_error(e.get_error_msg())
         except Exception as e:
             return response_error(str(e))
-        return response_ok('审核完成!')
+        return response_ok()
 
 
 class ReportCustomerDictView(APIView):
-    permission_classes = []
+    permission_classes = [isLogin]
 
     def get(self, request):
-        scouce = Option.objects.filter(type=Option.CUSTOMER_SOURCE , enable=True)
+        scouce = Option.objects.filter(type=Option.CUSTOMER_SOURCE, enable=True)
         project = Option.objects.filter(type=Option.CATEGORY, enable=True)
         serializer_scouce = OptionComboboxSerializer(scouce, many=True)
         serializer_project = OptionComboboxSerializer(project, many=True)
@@ -88,6 +87,17 @@ class ReportCustomerDictView(APIView):
             'project': serializer_project.data,
         })
 
+class UserDictView(APIView):
+    permission_classes = [isLogin]
+
+    def get(self, request):
+        store = request.user.store
+        if not store:
+            return response_error('当前账号未绑定门店,禁止分配客户!')
+        users = User.objects.filter(store=store).values('id', 'name')
+        users = [{'value': user['id'], 'lable': user['name']} for user in users]
+        return response_ok(users)
+
 
 class NewCustomerViewSet(CustomModelViewSet):
     permission_classes = []

+ 0 - 1
uis/views/account/login.html

@@ -61,7 +61,6 @@
         ,data: {token: layui.data(setter.tableName)[setter.request.tokenName].substr(4)}
         ,type: 'post'
         ,done: function(res){
-            console.log(11111111111,res)
 
           //请求成功后,写入 access_token
           layui.data(setter.tableName, {

+ 137 - 0
uis/views/customer/add_report.html

@@ -0,0 +1,137 @@
+<!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>
+        .input {
+            border-radius: 2px;
+            height: 38px;
+            border-width: 1px;
+            border-color: lightgray;
+            border-style: solid;
+            background-color: white;
+            padding-left: 3px;
+        }
+    </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">
+                                <textarea type="text" name="follow_status" lay-verify="required" class="layui-textarea" placeholder="请填写回访情况"/></textarea>
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label">申请支援:</label>
+                            <div class="layui-input-block">
+                                <textarea type="text" name="apply_help" class="layui-textarea" placeholder="如需支援请填写申请内容"/></textarea>
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label">是否进店:</label>
+                            <div class="layui-input-block">
+                                <input type="radio" name="isEnter" value="1" title="是">
+                                <input type="radio" name="isEnter" value="2" title="否">
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label">修改级别:</label>
+                            <div class="layui-input-block">
+                                <select name="visit_status" id="id_rank">
+                                    <option value="">请选择回访后的客户级别</option>
+                                    <option value="1">有意</option>
+                                    <option value="2">有需</option>
+                                    <option value="3">将成</option>
+                                </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="next_visit" class="layui-input" id="test1" placeholder="修改下次回访日期">
+                            </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.link('../../../layuiadmin/style/autocomplete.css');
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+        , autocomplete: 'autocomplete'
+    }).extend({
+        index: 'lib/index',
+        formSelects: 'formSelects-v4'
+    }).use(['index', 'form', 'autocomplete', 'formSelects', 'laydate'], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , laydate = layui.laydate
+            , formSelects = layui.formSelects
+            , form = layui.form;
+        laydate.render({
+            elem: '#test1'
+        });
+
+        admin.req({
+            url: '/customer/dict/',
+            done: function (res) {
+                // var data_source = res.data.source;
+                // var source_node = $('#id_source');
+                // for (var i in data_source) {
+                //     var pid = data_source[i].id;
+                //     var name = data_source[i].name;
+                //     source_node.append("<option value='" + pid + "'>" + name + "</option>");
+                // }
+                form.val("component-form-element", {});
+            }
+        });
+
+        //form.render(null, 'component-form-element');
+
+        form.on('submit(component-form-element)', function (data) {
+            var url = '/customer/report_customer/';
+            var type = 'post';
+            var submitData = data.field;
+            admin.req({
+                url: url
+                , data: submitData
+                , type: type
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res);
+                }
+            });
+
+            return false;
+        });
+
+        parent.layui.submitChild = function () {
+            $("#id_save").click();
+        };
+    });
+</script>
+</body>
+</html>

+ 107 - 0
uis/views/customer/detail.html

@@ -0,0 +1,107 @@
+<!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>
+        .input {
+            border-radius: 2px;
+            height: 38px;
+            border-width: 1px;
+            border-color: lightgray;
+            border-style: solid;
+            background-color: white;
+            padding-left: 3px;
+        }
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-card">
+            <div class="layui-card-body" pad15>
+                <div id="tableDom"></div>
+                <h3 style="margin: 40px 0 10px 0">潜客跟踪报告</h3>
+                <table class="layui-hide" id="customer_datagrid" lay-filter="customer-operate"></table>
+            </div>
+        </div>
+    </div>
+</div>
+<script id="demo" type="text/html">
+    <table class="layui-table">
+          <tbody>
+            <tr>
+              <td style="background: #f8f8f8; width: 70px">姓名:</td>
+              <td>{{ d.name }}</td>
+              <td style="background: #f8f8f8; width: 70px">性别:</td>
+              <td>{{ d.gender_text }}</td>
+            </tr>
+            <tr>
+              <td style="background: #f8f8f8; width: 70px">电话:</td>
+              <td>{{ d.tel }}</td>
+              <td style="background: #f8f8f8; width: 70px">地址:</td>
+              <td>{{ d.address }}</td>
+            </tr>
+            <tr>
+              <td style="background: #f8f8f8; width: 70px">小区:</td>
+              <td>{{ d.village }}</td>
+              <td style="background: #f8f8f8; width: 70px">来源:</td>
+              <td>{{ d.source_text }}</td>
+            </tr>
+            <tr>
+              <td style="background: #f8f8f8; width: 70px">备注:</td>
+              <td colspan="3">{{ d.notes }}</td>
+            </tr>
+          </tbody>
+        </table>
+</script>
+<script src="../../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.link('../../../layuiadmin/style/autocomplete.css');
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+        , autocomplete: 'autocomplete'
+    }).extend({
+        index: 'lib/index',
+        formSelects: 'formSelects-v4'
+    }).use(['index', 'table', 'form', 'autocomplete', 'formSelects', 'laytpl' ], function () {
+        var $ = layui.$
+            , table = layui.table
+            , admin = layui.admin
+            , laytpl = layui.laytpl
+            , formSelects = layui.formSelects
+            , form = layui.form;
+
+        editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+        var data = editdata;
+        var getTpl = demo.innerHTML
+        ,tableDom = document.getElementById('tableDom');
+        laytpl(getTpl).render(data, function(html){
+          tableDom.innerHTML = html;
+        });
+        table.render({
+            elem: '#customer_datagrid'
+            , url: '/api/dataTable.json'
+            , cols: [[
+                {field: 'follow_user', title: '跟踪人', width: 100}
+                , {field: 'follow_time', title: "跟踪时间", width: 110}
+                , {field: 'connect_status', title: '沟通情况', width: 100}
+                , {field: 'rank', title: '客户级别', width: 100}
+                , {field: 'application', title: '申请事项', width: 200}
+                , {field: 'check_status', title: '审核状态', width: 100}
+            ]]
+            , page: true
+        });
+
+    });
+</script>
+</body>
+</html>

+ 145 - 90
uis/views/customer/index.html

@@ -2,7 +2,7 @@
 <html>
 <head>
     <meta charset="utf-8">
-    <title>客户报备</title>
+    <title>潜客跟踪</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport"
@@ -46,6 +46,21 @@
             background-color: #f2f2f2;
             color: #000;
         }
+
+        .tableContent{
+            width: 100%;
+            display: flex;
+            justify-content: space-between;
+            flex-direction: row;
+        }
+        .demo-class .layui-layer-btn0{
+            background-color: #009688 !important;
+            color: #fff;
+        }
+        .demo-class .layui-layer-btn1{
+            background-color: red;
+            color: #fff;
+        }
     </style>
 
 </head>
@@ -59,28 +74,30 @@
                     <div class="LAY-btns" style="margin-bottom: 10px;">
                         <div style="float: left">
                             <button class="layui-btn" id="customer_add"><i
-                                    class="layui-icon layui-icon-add-circle"></i>添加
+                                    class="layui-icon layui-icon-add-circle"></i>跟踪报告
                             </button>
-                            <!--<button class="layui-nav">
+                            <button class="layui-btn" id="customer_order"><i
+                                    class="layui-icon layui-icon-add-circle"></i>预约量房
+                            </button>
+                            <button class="layui-nav">
                                 <div class="layui-nav-item">
-                                    <a href="javascript:;" style="color:#fff;">导入</a>
+                                    <a href="javascript:;" style="color:#fff;">导</a>
                                     <dl class="layui-nav-child">
-                                        <dd><a href="#" id="btn_import">执行导入</a></dd>
-                                        <dd><a href="#" id="btn_download">下载模板</a></dd>
+                                        <dd><a href="#" id="btn_list">列表</a></dd>
+                                        <dd><a href="#" id="btn_detail">明细</a></dd>
                                     </dl>
                                 </div>
-                            </button>-->
+                            </button>
                         </div>
-                        <form class="layui-form" lay-filter="query-form-element1">
+                        <form class="layui-form" lay-filter="query-form-element">
                             <div class="seach_items">
-                                <button class="layui-btn" lay-submit lay-filter="query-form-element1"><i
+                                <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">
-                                <select name="source" id="id_source" style="width: 40px;">
-                                    <option value="">请选择来源</option>
-                                </select>
+                                <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"
@@ -89,16 +106,20 @@
                         </form>
                         <div style="clear: both;"></div>
                     </div>
-                    <table class="layui-hide" id="customer_datagrid" lay-filter="customer-operate"></table>
 
-                    <script type="text/html" id="customer-operate-bar">
-                        <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-xs" lay-event="customer_edit"
-                            >修改</a>
+                    <div class="tableContent">
+                        <div style="width: 405px">
+                            <table class="layui-hide" id="customer_log" lay-filter="customer-operate-log"></table>
+                        </div>
+                        <div style="width: calc(100% - 450px)">
+                            <table class="layui-hide" id="customer_datagrid" lay-filter="customer-operate"></table>
                         </div>
+                    </div>
+
+                    <script type="text/html" id="customer-operate-bar">
                         <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="customer_del"
-                            >删除</a>
+                            <a class="layui-btn layui-btn-xs" lay-event="customer_search"
+                            >查看</a>
                         </div>
                     </script>
                 </div>
@@ -112,29 +133,45 @@
         base: '../../../layuiadmin/' //静态资源所在路径
     }).extend({
         index: 'lib/index' //主入口模块
-    }).use(['index', 'table', 'form', 'upload'], function () {
+    }).use(['index', 'table', 'form',], function () {
         var $ = layui.$;
         var table = layui.table
             , form = layui.form
-            , upload = layui.upload
             , admin = layui.admin;
 
+        table.render({
+            elem: '#customer_log'
+            , url: '/api/customer.json'
+            , cols: [[
+                {field: 'stage', title: '阶段', width: 100}
+                , {field: 'total_count', title: "总人数", width: 100, sort: true}
+                , {field: 'today_count', title: '今日', width: 100, sort: true}
+                , {field: 'exceed_count', title: '逾期', width: 100, sort: true}
+            ]]
+        });
+
         table.render({
             elem: '#customer_datagrid'
-            , url: '/customer/report_customer/'
+            , url: '/api/dataTable.json'
             , cols: [[
-                {field: 'name', title: '姓名', width: 200}
+                {field: 'name', title: '姓名', width: 110}
                 , {field: 'gender_text', title: "性别", width: 70}
-                , {field: 'tel', title: '电话', width: 150}
-                , {field: 'village', title: '小区', width: 200}
+                , {field: 'tel', title: '电话', width: 120}
+                , {field: 'village', title: '小区', width: 150}
                 , {field: 'address', title: '地址', width: 200}
                 , {field: 'source_text', title: '来源', width: 100}
-                , {field: 'project_text', title: '项目', width: 200}
                 , {field: 'notes', title: '备注', width: 200}
-                , {field: 'report_status_text', title: '报备状态', width: 200}
-                , {field: 'check_user', title: '审核人', width: 100}
-                , {field: 'check_time', title: '审核时间', width: 150}
-                , {width: 150, align: 'center', fixed: 'right', toolbar: '#customer-operate-bar'}
+                , {field: 'follow_user', title: '跟踪人', width: 100}
+                , {field: 'last_follow', title: '最后跟踪', width: 150}
+                , {field: 'follow_status', title: '跟踪情况', width: 200}
+                , {field: 'follow_count', title: '跟踪次数', width: 100}
+                , {field: 'enter_count', title: '进店次数', width: 100}
+                , {field: 'last_enter', title: '最后进店时间', width: 150}
+                , {field: 'rank', title: '级别', width: 100}
+                , {field: 'status', title: '状态', width: 100}
+                , {field: 'create_time', title: '建档时间', width: 150}
+                , {field: 'create_user', title: '建档人', width: 150}
+                , {width: 80, align: 'center', fixed: 'right', toolbar: '#customer-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
@@ -157,72 +194,67 @@
         $('#btn_download').on('click', function () {
             layui.view.download("/static/xls/设备信息导入模板.xlsx");
         });
-        upload.render({
-            elem: '#btn_import'
-            , url: '/tenant/customer/import/'
-            , accept: 'file'
-            , acceptMime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
-            , exts: 'xlsx'
-            , field: 'excel_file'
-            , done: function (res) {
-                if (res.code == 0) {
-                    table.reload('customer_datagrid', {});
-                } else {
-                    layer.msg(res.msg);
+        //导出列表
+        var _params1 = {};
+        $('#btn_list').on('click', function () {
+            $.get({
+                url: '/order/?export=true',
+                dataType: 'json',
+                data: _params1,
+                success: function (res) {
+                    if (res.code === 1) {
+                        layer.msg(res.msg);
+                        return;
+                    }
+                    table.exportFile('datagrid', res,)
                 }
-            }
-            , error: function () {
-                layer.msg('导入失败');
-            }
+            })
+        });
+        //导出明细
+        var _params2 = {};
+        $('#btn_detail').on('click', function () {
+            $.get({
+                url: '/order/?export=true',
+                dataType: 'json',
+                data: _params2,
+                success: function (res) {
+                    if (res.code === 1) {
+                        layer.msg(res.msg);
+                        return;
+                    }
+                    table.exportFile('datagrid', res,)
+                }
+            })
         });
         //监听工具条
         table.on('tool(customer-operate)', function (obj) {
             var data = obj.data;
-            if (obj.event === 'customer_del') {
-                layer.confirm('确定要删除吗?', function (index) {
+            if (obj.event === 'customer_search') {
+               table.editdata = data;
+               layer.open({
+                skin: 'demo-class',
+                type: 2,
+                title: '查看客户详情',
+                area: ['45%', '90%'],
+                btn: ['跟踪报告', '更新进度', '取消'],
+                yes: function (index, dom) {
+                    //跟踪报告
                     layer.close(index);
-                    admin.req({
-                        url: '/customer/report_customer/' + data.id + '/'
-                        , type: 'delete'
-                        , done: function (res) {
-                            if(res.code === 0){
-                                layer.msg('删除成功!', {icon: 1})
-                             }
-                            table.reload('customer_datagrid', {});
-                        }
-                    });
-                });
-            } else if (obj.event === 'customer_edit') {
-                if(data.report_status !== 0){
-                    layer.msg("只有待审核才允许修改");
-                    return
-                }
-                table.editdata = data;
-                layer.open({
-                    type: 2,
-                    title: '修改',
-                    shadeClose: false,
-                    area: ['45%', '80%'],
-                    btn: ['保存', '取消'],
-                    yes: function (index, dom) {
-                        layui.onSubmitChild = function (res) {
-                            if(res.code === 0){
-                                layer.msg('修改成功!', {icon: 1})
-                             }
-                            layer.close(index);
-                            table.reload('customer_datagrid', {});
-                        };
-                        layui.submitChild();
-                    },
-                    btn2: function (index, layero) {
-                        layer.close(index);//关闭当前按钮
-                    },
-                    content: 'edit.html?id=' + data.id
-                });
+                },
+                btn2: function (index, layero) {
+                    //更新进度
+                    layer.close(index);//关闭当前按钮
+                },
+                btn3: function (index, layero) {
+                    //取消
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'detail.html'
+            });
             }
         });
 
-        form.on('submit(query-form-element1)', function (data) {
+        form.on('submit(query-form-element)', function (data) {
             table.reload('customer_datagrid', {
                 where: data.field
                 , page: {curr: 1}
@@ -234,8 +266,31 @@
         $('#customer_add').on('click', function () {
             layer.open({
                 type: 2,
-                title: '添加',
-                area: ['45%', '80%'],
+                title: '添加跟踪报告',
+                area: ['45%', '70%'],
+                btn: ['保存', '取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (res) {
+                        if(res.code === 0){
+                            layer.msg('添加成功!', {icon: 1})
+                         }
+                        layer.close(index);
+                        table.reload('customer_datagrid', {});
+                    };
+                    layui.submitChild();
+                },
+                btn2: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'add_report.html'
+            });
+        });
+
+        $('#customer_order').on('click', function () {
+            layer.open({
+                type: 2,
+                title: '预约量房',
+                area: ['45%', '65%'],
                 btn: ['保存', '取消'],
                 yes: function (index, dom) {
                     layui.onSubmitChild = function (res) {
@@ -250,7 +305,7 @@
                 btn2: function (index, layero) {
                     layer.close(index);//关闭当前按钮
                 },
-                content: 'edit.html'
+                content: 'order.html'
             });
         });
     });

+ 153 - 0
uis/views/customer/order.html

@@ -0,0 +1,153 @@
+<!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>
+        .input {
+            border-radius: 2px;
+            height: 38px;
+            border-width: 1px;
+            border-color: lightgray;
+            border-style: solid;
+            background-color: white;
+            padding-left: 3px;
+        }
+    </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">
+                                <input type="text" name="name" class="layui-input" placeholder="请输入客户姓名"
+                                       autocomplete="off" lay-verify="required"/>
+                            </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" class="layui-input" placeholder="请输入客户电话"
+                                       autocomplete="off" lay-verify="required"/>
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label"><font color='red' size="4">*</font>客户地址:</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="address" class="layui-input" placeholder="请输入客户地址"
+                                       autocomplete="off" lay-verify="required"/>
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label"><font color='red' size="4">*</font>预约时间:</label>
+                            <div class="layui-input-block">
+                                 <input type="text" name="order_time" class="layui-input" id="test1" placeholder="修改预约时间">
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label"><font color='red' size="4">*</font>项目:</label>
+                            <div class="layui-input-block">
+                                 <select lay-verify="required" name="project" xm-select="selectProject" xm-select-skin="primary">
+                                     <option value="">请选择客户订单项目</option>
+                                 </select>
+                            </div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label">备注:</label>
+                            <div class="layui-input-block">
+                                <textarea type="text" name="notes" class="layui-textarea" placeholder="请输入备注"/></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.link('../../../layuiadmin/style/autocomplete.css');
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+        , autocomplete: 'autocomplete'
+    }).extend({
+        index: 'lib/index',
+        formSelects: 'formSelects-v4'
+    }).use(['index', 'form', 'autocomplete', 'formSelects', 'laydate'], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , laydate = layui.laydate
+            , formSelects = layui.formSelects
+            , form = layui.form;
+        laydate.render({
+            elem: '#test1'
+            ,type: 'datetime'
+        });
+
+        formSelects.data('selectProject', 'local', {
+            arr: [
+                {value: 1, name: "壁纸"},
+                {value: 2, name: "壁布"}
+            ]
+        });
+        form.val("component-form-element", {});
+
+        admin.req({
+            url: '/customer/dict/',
+            done: function (res) {
+                // var data_source = res.data.source;
+                // var source_node = $('#id_source');
+                // for (var i in data_source) {
+                //     var pid = data_source[i].id;
+                //     var name = data_source[i].name;
+                //     source_node.append("<option value='" + pid + "'>" + name + "</option>");
+                // }
+                form.val("component-form-element", {});
+            }
+        });
+
+        //form.render(null, 'component-form-element');
+
+        form.on('submit(component-form-element)', function (data) {
+            var url = '/customer/report_customer/';
+            var type = 'post';
+            var submitData = data.field;
+            var project = formSelects.value('selectProject', 'val');
+            submitData.project = JSON.stringify(project);
+            admin.req({
+                url: url
+                , data: submitData
+                , type: type
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res);
+                }
+            });
+
+            return false;
+        });
+
+        parent.layui.submitChild = function () {
+            $("#id_save").click();
+        };
+    });
+</script>
+</body>
+</html>

+ 4 - 5
uis/views/employee/edit.html

@@ -60,14 +60,13 @@
                             </div>
 
                             <div class="layui-col-lg6">
-                                <label class="layui-form-label">性别:</label>
+                                <label class="layui-form-label"><font color='red' size="4">*</font>性别:</label>
                                 <div class="layui-input-block">
-                                    <select name="gender" lay-verify="required">
-                                        <option value="2">男</option>
-                                        <option value="1">女</option>
-                                    </select>
+                                    <input type="radio" name="gender" value="2" title="男" checked>
+                                    <input type="radio" name="gender" value="1" title="女">
                                 </div>
                             </div>
+
                             <div class="layui-col-lg6">
                                 <label class="layui-form-label">在职状态:</label>
                                 <div class="layui-input-block">

+ 1 - 3
uis/views/employee/index.html

@@ -169,8 +169,7 @@
                 layer.confirm('确定要入职该员工吗?', function (index) {
                     layer.close(index);
                     layui.admin.req({
-                        notice: true
-                        , url: '/account/employee/' + data.id + '/join/'
+                        url: '/account/employee/' + data.id + '/join/'
                         , type: 'post'
                         , done: function (res) {
                             table.reload('datagrid', {});
@@ -208,7 +207,6 @@
                         layer.close(index);
                         table.reload('datagrid', {});
                     };
-                    layui.submitChild();
                 },
                 btn2: function (index, layero) {
                     layer.close(index);//关闭当前按钮

+ 133 - 130
uis/views/index.html

@@ -1,59 +1,61 @@
 <!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">
+    <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">
 </head>
 <body class="layui-layout-body">
 
-  <div id="LAY_app">
+<div id="LAY_app">
     <div class="layui-layout layui-layout-admin">
-      <div class="layui-header">
-        <!-- 头部区域 -->
-        <ul class="layui-nav layui-layout-left">
-          <li class="layui-nav-item layadmin-flexible" lay-unselect>
-            <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩">
-              <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i>
-            </a>
-          </li>
-          <li class="layui-nav-item" lay-unselect>
-            <a href="javascript:;" layadmin-event="refresh" title="刷新">
-              <i class="layui-icon layui-icon-refresh-3"></i>
-            </a>
-          </li>
-        </ul>
-        <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">
-          <li class="layui-nav-item layui-hide-xs" lay-unselect>
-            <a href="javascript:;" layadmin-event="theme">
-              <i class="layui-icon layui-icon-theme"></i>
-            </a>
-          </li>
-          <li class="layui-nav-item" lay-unselect>
-            <a href="javascript:;">
-              <cite id="id_username"></cite>
-            </a>
-            <dl class="layui-nav-child">
-              <dd><a lay-href="account/user_password.html">修改密码</a></dd>
-              <hr>
-              <dd layadmin-event="logout" style="text-align: center;"><a>退出</a></dd>
-            </dl>
-          </li>
-
-          <li class="layui-nav-item layui-hide-xs" lay-unselect>
-            <a href="javascript:;" layadmin-event="about"><i class="layui-icon layui-icon-more-vertical"></i></a>
-          </li>
-          <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect>
-            <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a>
-          </li>
-        </ul>
-      </div>
-
-      <!-- 侧边菜单 -->
+        <div class="layui-header">
+            <!-- 头部区域 -->
+            <ul class="layui-nav layui-layout-left">
+                <li class="layui-nav-item layadmin-flexible" lay-unselect>
+                    <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩">
+                        <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i>
+                    </a>
+                </li>
+                <li class="layui-nav-item" lay-unselect>
+                    <a href="javascript:;" layadmin-event="refresh" title="刷新">
+                        <i class="layui-icon layui-icon-refresh-3"></i>
+                    </a>
+                </li>
+            </ul>
+            <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">
+                <li class="layui-nav-item layui-hide-xs" lay-unselect>
+                    <a href="javascript:;" layadmin-event="theme">
+                        <i class="layui-icon layui-icon-theme"></i>
+                    </a>
+                </li>
+                <li class="layui-nav-item" lay-unselect>
+                    <a href="javascript:;">
+                        <cite id="id_username"></cite>
+                    </a>
+                    <dl class="layui-nav-child">
+                        <dd><a lay-href="account/user_password.html">修改密码</a></dd>
+                        <hr>
+                        <dd layadmin-event="logout" style="text-align: center;"><a>退出</a></dd>
+                    </dl>
+                </li>
+
+                <li class="layui-nav-item layui-hide-xs" lay-unselect>
+                    <a href="javascript:;" layadmin-event="about"><i
+                            class="layui-icon layui-icon-more-vertical"></i></a>
+                </li>
+                <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect>
+                    <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a>
+                </li>
+            </ul>
+        </div>
+
+        <!-- 侧边菜单 -->
         <div class="layui-side layui-side-menu">
             <div class="layui-side-scroll">
                 <div class="layui-logo">
@@ -91,106 +93,107 @@
                             <cite>潜客作业</cite>
                         </a>
                         <dl class="layui-nav-child">
-                            <dd data-name="nav" data-permission="option.browse_option">
-                                <a lay-href="customer/index.html">客户报备</a>
+                            <dd data-name="nav" data-permission="customer.view_report_customer">
+                                <a lay-href="new_customer/index.html">客户报备</a>
                             </dd>
-                        </dl>
-                        <dl class="layui-nav-child">
-                            <dd data-name="nav" data-permission="option.browse_option">
+                            <dd data-name="nav" data-permission="customer.check_report_customer">
                                 <a lay-href="report_check/index.html">报备审核</a>
                             </dd>
+                            <dd data-name="nav" data-permission="customer.view_report_customer">
+                                <a lay-href="customer/index.html">潜客跟踪</a>
+                            </dd>
                         </dl>
                     </li>
                 </ul>
             </div>
         </div>
 
-      <!-- 页面标签 -->
-      <div class="layadmin-pagetabs" id="LAY_app_tabs">
-        <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div>
-        <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div>
-        <div class="layui-icon layadmin-tabs-control layui-icon-down">
-          <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav">
-            <li class="layui-nav-item" lay-unselect>
-              <a href="javascript:;"></a>
-              <dl class="layui-nav-child layui-anim-fadein">
-                <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd>
-                <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd>
-                <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd>
-              </dl>
-            </li>
-          </ul>
-        </div>
-        <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs">
-          <ul class="layui-tab-title" id="LAY_app_tabsheader">
-            <li lay-id="home/console.html" class="layui-this"><i class="layui-icon layui-icon-home"></i></li>
-          </ul>
+        <!-- 页面标签 -->
+        <div class="layadmin-pagetabs" id="LAY_app_tabs">
+            <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div>
+            <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div>
+            <div class="layui-icon layadmin-tabs-control layui-icon-down">
+                <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav">
+                    <li class="layui-nav-item" lay-unselect>
+                        <a href="javascript:;"></a>
+                        <dl class="layui-nav-child layui-anim-fadein">
+                            <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd>
+                            <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd>
+                            <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd>
+                        </dl>
+                    </li>
+                </ul>
+            </div>
+            <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs">
+                <ul class="layui-tab-title" id="LAY_app_tabsheader">
+                    <li lay-id="home/console.html" class="layui-this"><i class="layui-icon layui-icon-home"></i></li>
+                </ul>
+            </div>
         </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 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>
 
-      <!-- 辅助元素,一般用于移动设备下遮罩 -->
-      <div class="layadmin-body-shade" layadmin-event="shade"></div>
+        <!-- 辅助元素,一般用于移动设备下遮罩 -->
+        <div class="layadmin-body-shade" layadmin-event="shade"></div>
     </div>
-  </div>
-
-  <script src="../layuiadmin/layui/layui.js"></script>
-  <script>
-  layui.config({
-    base: '../layuiadmin/' //静态资源所在路径
-  }).extend({
-    index: 'lib/index' //主入口模块
-  }).use('index', function () {
-      var $ = layui.$;
-      var name = layui.data(layui.setter.tableName)['name'];
-      $('#id_username').html(name);
-
-      if (!name) {
+</div>
+
+<script src="../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.config({
+        base: '../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use('index', function () {
+        var $ = layui.$;
+        var name = layui.data(layui.setter.tableName)['name'];
+        $('#id_username').html(name);
+
+        if (!name) {
             location.href = '/views/account/login.html'; //没有用户,跳转到登录
         }
 
 
-      var permissions = layui.data(layui.setter.tableName)['permissions'];
-      $('#LAY-system-side-muen .layui-nav-child dd').each(function () {
-          var perm = $(this).data("permission");
-          var is_has = judgePermissions(permissions, perm);
-          if (!is_has) {
-              $(this).remove();
-          }
-      });
-
-      $('#LAY-system-side-muen .layui-nav-item dl').each(function () {
-          if($(this).children('dd').length === 0)
-              $(this).parent().remove();
-      });
-
-      function judgePermissions(permissions, perm) {
-          if (!perm) {
-              return true;
-          }
-
-          var perms = perm.split('|');
-          var is_has = false;
-
-          for (var i in perms) {
-              if (permissions.indexOf(perms[i]) !== -1) {
-                  is_has = true;
-                  break;
-              }
-          }
-
-          return is_has;
-      }
-
-  });
-  </script>
+        var permissions = layui.data(layui.setter.tableName)['permissions'];
+        $('#LAY-system-side-muen .layui-nav-child dd').each(function () {
+            var perm = $(this).data("permission");
+            var is_has = judgePermissions(permissions, perm);
+            if (!is_has) {
+                $(this).remove();
+            }
+        });
+
+        $('#LAY-system-side-muen .layui-nav-item dl').each(function () {
+            if ($(this).children('dd').length === 0)
+                $(this).parent().remove();
+        });
+
+        function judgePermissions(permissions, perm) {
+            if (!perm) {
+                return true;
+            }
+
+            var perms = perm.split('|');
+            var is_has = false;
+
+            for (var i in perms) {
+                if (permissions.indexOf(perms[i]) !== -1) {
+                    is_has = true;
+                    break;
+                }
+            }
+
+            return is_has;
+        }
+
+    });
+</script>
 </body>
 </html>
 

+ 2 - 1
uis/views/customer/edit.html → uis/views/new_customer/edit.html

@@ -41,7 +41,7 @@
                         <div>
                             <label class="layui-form-label"><font color='red' size="4">*</font>性别:</label>
                             <div class="layui-input-block">
-                                <input type="radio" name="gender" value="2" title="男" checked>
+                                <input type="radio" name="gender" value="2" title="男">
                                 <input type="radio" name="gender" value="1" title="女">
                             </div>
                         </div>
@@ -131,6 +131,7 @@
                     var name = data_source[i].name;
                     source_node.append("<option value='" + pid + "'>" + name + "</option>");
                 }
+
                 var data_project = res.data.project;
                 let tempData = [];
                 if(data_project && data_project.length > 0){

+ 235 - 0
uis/views/new_customer/index.html

@@ -0,0 +1,235 @@
+<!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=customer-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 style="float: left">
+                            <button class="layui-btn" id="customer_add" data-permission="customer.add_report_customer"><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">
+                                <select name="source" id="id_source" style="width: 40px;">
+                                    <option value="">请选择来源</option>
+                                </select>
+                            </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="customer_datagrid" lay-filter="customer-operate"></table>
+
+                    <script type="text/html" id="customer-operate-bar">
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="customer_edit"
+                               data-permission="customer.add_report_customer"
+                            >修改</a>
+                        </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="customer_del"
+                               data-permission="customer.delete_report_customer"
+                            >删除</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: '#customer_datagrid'
+            , url: '/customer/report_customer/'
+            , cols: [[
+                {field: 'name', title: '姓名', width: 120}
+                , {field: 'gender_text', title: "性别", width: 70}
+                , {field: 'tel', title: '电话', width: 120}
+                , {field: 'village', title: '小区', width: 150}
+                , {field: 'address', title: '地址', width: 200}
+                , {field: 'source_text', title: '来源', width: 100}
+                , {field: 'project_text', title: '项目', width: 200}
+                , {field: 'notes', title: '备注', width: 200}
+                , {field: 'report_status_text', title: '报备状态', width: 100}
+                , {field: 'check_user_text', title: '审核人', width: 100}
+                , {field: 'check_time', title: '审核时间', width: 160}
+                , {width: 130, align: 'center', fixed: 'right', toolbar: '#customer-operate-bar'}
+            ]]
+            , page: true
+            , height: 'full-108'
+        });
+
+        admin.req({
+            url: '/customer/dict/',
+            done: function (res) {
+                var data = res.data.source;
+                var source_node = $('#id_source');
+                for (var i in data) {
+                    var pid = data[i].id;
+                    var name = data[i].name;
+                    source_node.append("<option value='" + pid + "'>" + name + "</option>");
+                }
+                form.render('select');
+            }
+        });
+
+        //监听工具条
+        table.on('tool(customer-operate)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'customer_del') {
+                if(data.report_status !== 0){
+                    layer.msg("只有待审核才允许删除");
+                    return
+                }
+                layer.confirm('确定要删除吗?', function (index) {
+                    layer.close(index);
+                    admin.req({
+                        url: '/customer/report_customer/' + data.id + '/'
+                        , type: 'delete'
+                        , done: function (res) {
+                            if(res.code === 0){
+                                layer.msg('删除成功!', {icon: 1})
+                             }
+                            table.reload('customer_datagrid', {});
+                        }
+                    });
+                });
+            } else if (obj.event === 'customer_edit') {
+                if(data.report_status !== 0){
+                    layer.msg("只有待审核才允许修改");
+                    return
+                }
+                table.editdata = data;
+                layer.open({
+                    type: 2,
+                    title: '修改',
+                    shadeClose: false,
+                    area: ['45%', '80%'],
+                    btn: ['保存', '取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (res) {
+                            if(res.code === 0){
+                                layer.msg('修改成功!', {icon: 1})
+                             }
+                            layer.close(index);
+                            table.reload('customer_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('customer_datagrid', {
+                where: data.field
+                , page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
+
+        $('#customer_add').on('click', function () {
+            layer.open({
+                type: 2,
+                title: '添加',
+                area: ['45%', '80%'],
+                btn: ['保存', '取消'],
+                yes: function (index, dom) {
+                    layui.onSubmitChild = function (res) {
+                        if(res.code === 0){
+                            layer.msg('添加成功!', {icon: 1})
+                         }
+                        layer.close(index);
+                        table.reload('customer_datagrid', {});
+                    };
+                    layui.submitChild();
+                },
+                btn2: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'edit.html'
+            });
+        });
+    });
+
+</script>
+</body>
+</html>

+ 1 - 1
uis/views/option/edit.html

@@ -148,7 +148,7 @@
                 , data: data.field
                 , type: type
                 , done: function (res) {
-                    parent.layui.onSubmitChild(res.data);
+                    parent.layui.onSubmitChild();
                 }
             });
 

+ 1 - 1
uis/views/option/index.html

@@ -174,7 +174,7 @@
                 area: ['50%', '70%'],
                 btn: ['保存', '取消'],
                 yes: function (index, dom) {
-                    layui.onSubmitChild = function (data) {
+                    layui.onSubmitChild = function () {
                         layer.close(index);
                         table.reload('datagrid', {});
                     };

+ 24 - 66
uis/views/report_check/divide.html

@@ -9,7 +9,6 @@
           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>
         .input {
             border-radius: 2px;
@@ -34,11 +33,8 @@
                         <div>
                             <label class="layui-form-label"><font color='red' size="4">*</font>选择人员:</label>
                             <div class="layui-input-block">
-                                <select lay-verify="required" name="source" id="id_source">
+                                <select lay-verify="required" name="user" id="id_user">
                                     <option value="">请选择人员</option>
-                                    <option value="1">小红</option>
-                                    <option value="2">小芳</option>
-                                    <option value="3">小绿</option>
                                 </select>
                             </div>
                         </div>
@@ -56,75 +52,37 @@
     layui.link('../../../layuiadmin/style/autocomplete.css');
     layui.config({
         base: '../../../layuiadmin/' //静态资源所在路径
-        , autocomplete: 'autocomplete'
     }).extend({
         index: 'lib/index',
-        formSelects: 'formSelects-v4'
-    }).use(['index', 'form', 'autocomplete', 'formSelects'], function () {
+    }).use(['index', 'form',], function () {
         var $ = layui.$
             , admin = layui.admin
-            , formSelects = layui.formSelects
             , form = layui.form
-        var id = layui.view.getParameterByName('id');
-        console.log(id, "oppppp");
-
-        // admin.req({
-        //     url: '/customer/dict/',
-        //     done: function (res) {
-        //         var data_source = res.data.source;
-        //         var source_node = $('#id_source');
-        //         for (var i in data_source) {
-        //             var pid = data_source[i].id;
-        //             var name = data_source[i].name;
-        //             source_node.append("<option value='" + pid + "'>" + name + "</option>");
-        //         }
-        //         var data_project = res.data.project;
-        //         let tempData = [];
-        //         if(data_project && data_project.length > 0){
-        //             tempData =  data_project.map(item=>{
-        //                 if(id && editdata['project']){
-        //                    if(typeof editdata['project'] === 'number'){
-        //                        editdata['project'] = [editdata['project']]
-        //                    }
-        //                    editdata['project'].forEach(item1=>{
-        //                        if(item.id === item1){
-        //                            item.selected = 'selected'
-        //                        }else{
-        //                            item.selected = ''
-        //                        }
-        //                    })
-        //                 }
-        //                 return {value: item.id, name: item.name, selected: item.selected }
-        //             });
-        //         }
-        //         formSelects.data('selectProject', 'local', {
-        //             arr: tempData
-        //         });
-        //         form.val("component-form-element", editdata);
-        //     }
-        // });
 
-        //form.render(null, 'component-form-element');
+        admin.req({
+            url: '/customer/get_user/',
+            done: function (res) {
+                var data_user = res.data;
+                var user_node = $('#id_user');
+                for (var i in data_user) {
+                    var pid = data_user[i].value;
+                    var name = data_user[i].lable;
+                    user_node.append("<option value='" + pid + "'>" + name + "</option>");
+                }
+                form.render()
+            }
+        });
 
+        var id = layui.view.getParameterByName('id');
         form.on('submit(component-form-element)', function (data) {
-            // if (id) {
-            //     var url = '/customer/report_customer/' + id + '/';
-            //     var type = 'put';
-            // } else {
-            //     url = '/customer/report_customer/';
-            //     type = 'post'
-            // }
-            var submitData = data.field;
-            // admin.req({
-            //     url: url
-            //     , data: data.field
-            //     , type: type
-            //     , done: function (res) {
-            parent.layui.onSubmitChild();
-            //     }
-            // });
-
-
+            admin.req({
+                url: '/customer/report_customer/' + id + '/dispatch_customer/'
+                , data: data.field
+                , type: 'post'
+                , done: function (res) {
+                     parent.layui.onSubmitChild();
+                }
+            });
             return false;
         });
 

+ 65 - 37
uis/views/report_check/index.html

@@ -57,11 +57,7 @@
             <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="report_check_divide"><i
-                                    class="layui-icon layui-icon-auz"></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
@@ -69,9 +65,13 @@
                                 </button>
                             </div>
                             <div class="seach_items">
-                                <input type="text" name="name" autocomplete="off" class="layui-input"
+                                <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 style="clear: both;"></div>
                     </div>
@@ -79,8 +79,16 @@
 
                     <script type="text/html" id="report_check-operate-bar">
                         <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-default layui-btn-xs" lay-event="report_check_search"
-                            >查看跟踪记录</a>
+                            <a class="layui-btn layui-btn-default layui-btn-xs" lay-event="dispatch"
+                            >分配</a>
+                        </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="sign_repeat"
+                            >标记撞单</a>
+                        </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-default layui-btn-xs" lay-event="repeat_report"
+                            >撞单跟踪记录</a>
                         </div>
                     </script>
                 </div>
@@ -94,30 +102,28 @@
         base: '../../../layuiadmin/' //静态资源所在路径
     }).extend({
         index: 'lib/index' //主入口模块
-    }).use(['index', 'table', 'form', 'upload'], function () {
+    }).use(['index', 'table', 'form',], function () {
         var $ = layui.$;
         var table = layui.table
             , form = layui.form
-            , upload = layui.upload
             , admin = layui.admin;
 
         table.render({
             elem: '#report_check_datagrid'
-            , url: '/api/report_check.json'
+            , url: '/customer/report_customer/?report_status=0'
             , cols: [[
-                {type:'checkbox'}
-                , {field: 'name', title: '姓名', width: 200}
+                {field: 'name', title: '姓名', width: 120}
                 , {field: 'gender_text', title: "性别", width: 70}
-                , {field: 'tel', title: '电话', width: 150}
+                , {field: 'tel', title: '电话', width: 120}
                 , {field: 'project_text', title: '项目', width: 200}
-                , {field: 'report_time', title: '报备时间', width: 150}
-                , {field: 'report_user', title: '报备人', width: 100}
+                , {field: 'create_time', title: '报备时间', width: 150}
+                , {field: 'create_user_text', title: '报备人', width: 100}
                 , {field: 'hitBill_customer', title: '撞单客户', width: 100}
                 , {field: 'hitBill_project_text', title: '撞单项目', width: 100}
                 , {field: 'stalk_user', title: '撞单跟踪人', width: 100}
                 , {field: 'stalk_process', title: '撞单进度', width: 100}
                 , {field: 'last_stalk', title: '最后跟踪', width: 200}
-                , {width: 120, align: 'center', fixed: 'right', toolbar: '#report_check-operate-bar'}
+                , {width: 240, align: 'center', fixed: 'right', toolbar: '#report_check-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
@@ -137,14 +143,33 @@
         //     }
         // });
 
-        $('#btn_download').on('click', function () {
-            layui.view.download("/static/xls/设备信息导入模板.xlsx");
-        });
         //监听工具条
         table.on('tool(report_check-operate)', function (obj) {
             var data = obj.data;
             //查看跟踪记录
-            if (obj.event === 'report_check_search') {
+            if (obj.event === 'dispatch') {
+                layer.open({
+                    type: 2,
+                    title: '分配客户',
+                    area: ['30%', '40%'],
+                    btn: ['分配', '取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (data) {
+                            layer.close(index);
+                            table.reload('report_check_datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'divide.html?id=' + data.id
+                });
+            }
+            else if (obj.event === 'sign_repeat') {
+
+            }
+            else if (obj.event === 'repeat_report') {
 
             }
         });
@@ -161,11 +186,14 @@
 
         $('#report_check_divide').on('click', function () {
             var checkStatus = table.checkStatus('report_check_datagrid');
-            if(checkStatus.data.length === 0){
+            if (checkStatus.data.length === 0) {
                 layer.msg('请至少选择一条记录');
                 return
             };
-            let divide_id = checkStatus.data.map(item=>{ return item.id }).join(",");
+            let divide_id = checkStatus.data.map(item => {
+                return item.id
+            }).join(",");
+
             layer.open({
                 type: 2,
                 title: '分配客户',
@@ -175,22 +203,22 @@
                     layui.onSubmitChild = function (data) {
                         let customer = '华北';
                         layer.close(index);
-                        if(!data){
+                        if (!data) {
                             layer.open({
-                            type: 1,
-                            title: '操作',
-                            area: ['300px', '220px'],
-                            btn: ['标记为撞单客户', '重新分配'],
-                            yes: function (index, dom) {
-                                layui.onSubmitChild = function (data) {
+                                type: 1,
+                                title: '操作',
+                                area: ['300px', '220px'],
+                                btn: ['标记为撞单客户', '重新分配'],
+                                yes: function (index, dom) {
+                                    layui.onSubmitChild = function (data) {
+                                        layer.close(index);
+                                    };
+                                },
+                                btn2: function (index, layero) {
                                     layer.close(index);
-                                };
-                            },
-                            btn2: function (index, layero) {
-                                layer.close(index);
-                            },
-                            content: '<p style="text-align: center; padding: 15px 0">和' + customer + '客户撞单,请选择后续操作。<p>'
-                        });
+                                },
+                                content: '<p style="text-align: center; padding: 15px 0">和' + customer + '客户撞单,请选择后续操作。<p>'
+                            });
                         }
                         table.reload('report_check_datagrid', {});
                     };