Explorar el Código

装集客项目更新

lijiangwei hace 4 años
padre
commit
080414cc73

+ 3 - 0
uis/views/index.html

@@ -116,6 +116,9 @@
                           <dd data-name="nav" data-permission="customer.view_report_customer">
                               <a lay-href="order/index.html">订单管理</a>
                           </dd>
+                          <dd data-name="nav" data-permission="customer.view_report_customer">
+                              <a lay-href="order/dispatch_process_index.html">进度分配</a>
+                          </dd>
                       </dl>
                   </li>
                 </ul>

+ 134 - 0
uis/views/order/dispatch_process_detail.html

@@ -0,0 +1,134 @@
+<!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: 20px 0 10px 0">进度明细</h3>
+                <table class="layui-hide" id="process_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: 90px">单号:</td>
+              <td>{{ d.no || "" }}</td>
+              <td style="background: #f8f8f8; width: 90px">客户名称:</td>
+              <td>{{ d.name || "" }}</td>
+            </tr>
+            <tr>
+              <td style="background: #f8f8f8; width: 90px">客户电话:</td>
+              <td>{{ d.tel || "" }}</td>
+              <td style="background: #f8f8f8; width: 90px">地址:</td>
+              <td>{{ d.address || "" }}</td>
+            </tr>
+            <tr>
+              <td style="background: #f8f8f8; width: 90px">小区:</td>
+              <td>{{ d.village || "" }}</td>
+              <td style="background: #f8f8f8; width: 90px">项目:</td>
+              <td>{{ d.project_text || "" }}</td>
+            </tr>
+            <tr>
+              <td style="background: #f8f8f8; width: 90px">当前跟踪人:</td>
+              <td>{{ d.current_follow_user || "" }}</td>
+              <td style="background: #f8f8f8; width: 90px">申请进度:</td>
+              <td>{{ d.apply_process || "" }}</td>
+            </tr>
+          </tbody>
+        </table>
+</script>
+<script type="text/html" id="customer-operate-bar">
+    <div class="layui-btn-group">
+        <a class="layui-btn layui-btn-xs" lay-event="order_detail"
+        >查看资料</a>
+    </div>
+</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;
+        });
+        var id = layui.view.getParameterByName('customer');
+        table.render({
+            elem: '#process_datagrid'
+            , url: '/api/process.json'
+            , cols: [[
+                {field: 'time', title: '时间', width: 150}
+                , {field: 'process', title: "进度", width: 120}
+                , {field: 'notes', title: '备注', width: 200}
+                , {field: 'option_user', title: '操作人', width: 120}
+                , {width: 100, align: 'center', fixed: 'right', toolbar: '#customer-operate-bar'}
+            ]]
+            , page: true
+        });
+
+         //监听工具条
+        table.on('tool(customer-operate)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'order_detail') {
+                // 显示资料图片
+                layer.open({
+                    type: 2,
+                    title: '资料图片',
+                    area: ['100%', '70%'],
+                    btn: ['取消'],
+                    btn1: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'imgsInfo.html'
+                });
+            }
+        });
+    });
+</script>
+</body>
+</html>

+ 238 - 0
uis/views/order/dispatch_process_edit.html

@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>进度分配</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+    <style>
+        .input {
+            border-radius: 2px;
+            height: 38px;
+            border-width: 1px;
+            border-color: lightgray;
+            border-style: solid;
+            background-color: white;
+            padding-left: 3px;
+        }
+
+        .processText {
+            margin-top: 6px;
+        }
+
+        .layui-upload-drag {
+            padding: 10px;
+            margin-right: 15px;
+        }
+
+        .imgsContent {
+            display: flex;
+            justify-content: flex-start;
+            flex-direction: row;
+            flex-wrap: wrap;
+        }
+
+        .image {
+            width: 150px;
+            height: auto;
+        }
+
+        .imgItem {
+            margin: 0 10px;
+        }
+
+        .option {
+            display: flex;
+            justify-content: space-between;
+            flex-direction: row;
+        }
+
+        .optionItem {
+            padding: 0 13px;
+            margin: 10px;
+            border: 1px solid rgba(0, 0, 0, 0.1);
+            background: #009688;
+            color: #ffffff;
+        }
+
+    </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">当前进度:</label>
+                            <div class="layui-input-block processText" id="current_process"></div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label">下一进度:</label>
+                            <div class="layui-input-block processText" id="next_process"></div>
+                        </div>
+                        <div>
+                            <label class="layui-form-label">服务人员:</label>
+                            <div class="layui-input-block">
+                                <select id="id_service" name="service" lay-search="">
+                                    <option value="">请选择服务人员</option>
+                                </select>
+                            </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>
+    //即将上传的文件数组
+    var filesList = [];
+    //渲染的图片列表
+    var imgsList = [];
+
+    //渲染待上传的图片列表
+    var renderImgsList = function (list) {
+        var html = "";
+        list.forEach((item, index) => {
+            html += "<div class='imgItem'>\n";
+            html += "<img src='" + item + "' class='image'>\n";
+            html += '<div class="option">\n';
+            html += '<div onclick="showImg(' + index + ')" class="optionItem">查看</div>\n';
+            html += '<div onclick="deleteImg(' + index + ')" class="optionItem">删除</div>\n';
+            html += '</div>\n';
+            html += '</div>\n';
+        })
+        layui.$('#imgsList').html(html);
+    }
+
+    var showImg = function (index) {
+        var newPage = window.open();
+        newPage.document.write("<img src=" + imgsList[index] + " />")
+    };
+
+    var deleteImg = function (index) {
+        filesList.splice(index, 1);
+        imgsList.splice(index, 1);
+        renderImgsList(imgsList);
+    };
+
+    layui.link('../../../layuiadmin/style/autocomplete.css');
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+        , autocomplete: 'autocomplete'
+    }).extend({
+        index: 'lib/index',
+    }).use(['index', 'form', 'autocomplete', 'upload'], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , upload = layui.upload
+            , form = layui.form;
+
+        var customer_id = layui.view.getParameterByName('customer_id');
+        //form.render(null, 'component-form-element');
+        var next_process_id = '';
+        admin.req({
+            url: '/order/get_process/?customer_id=' + customer_id
+            , type: 'get'
+            , done: function (res) {
+                if (res.data.error) {
+                    layer.open({
+                        type: 1
+                        , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
+                        , id: 'layerDemo' + customer_id //防止重复弹出
+                        , content: '<div style="padding: 20px 100px;">' + res.data.error_message + '</div>'
+                        , btn: '关闭'
+                        , btnAlign: 'c' //按钮居中
+                        , shade: 0 //不显示遮罩
+                        , yes: function () {
+                            parent.layer.closeAll();
+                        }
+                    });
+                }
+                //当前进度
+                $('#current_process').append(res.data.now_process_text)
+                //下一进度
+                $('#next_process').append(res.data.next_process_text);
+                next_process_id = res.data.next_process_id
+            }
+        });
+
+
+        //拖拽上传
+        upload.render({
+            elem: '#upload_img'
+            , accept: 'file'
+            , exts: 'jpg|png|jpeg|bmp'
+            , acceptMime: '.jpg,.png,.jpeg,.bmp'
+            , data: {}
+            , multiple: true
+            , number: 6
+            , auto: false
+            , choose: function (obj) {
+                if (imgsList.length >= 6) {
+                    layer.msg("图片最多只允许上传6张", {icon: 2});
+                    return
+                }
+                //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
+                obj.preview(function (index, file, result) {
+                    filesList.push(file);
+                    imgsList.push(result);
+                    // 有图片列表的话渲染图片
+                    if (imgsList.length > 0) {
+                        renderImgsList(imgsList)
+                    }
+                });
+            }
+        });
+
+
+        form.on('submit(component-form-element)', function (data) {
+            if (filesList.length === 0) {
+                layer.msg("请先选择图片!", {icon: 2});
+                return false
+            }
+            if (!next_process_id) {
+                layer.msg("下个进度阶段有误,请刷新重试!", {icon: 2});
+                return false
+            }
+            var formData = new FormData();
+            formData.append("stage_progress", next_process_id);
+            formData.append("notes", data.field.notes);
+            filesList.forEach((item, index) => {
+                formData.append(`file${index}`, item)
+            });
+            var url = '/customer/new_customer/' + customer_id + '/add_order/';
+            admin.req({
+                url: url
+                , data: formData
+                , contentType: false
+                , processData: false
+                , type: 'post'
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res);
+                }
+            });
+
+            return false;
+        });
+
+        parent.layui.submitChild = function () {
+            $("#id_save").click();
+        };
+    });
+</script>
+</body>
+</html>

+ 189 - 0
uis/views/order/dispatch_process_index.html

@@ -0,0 +1,189 @@
+<!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=order-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;
+        }
+
+        .tableContent{
+            width: 100%;
+            display: flex;
+            justify-content: space-between;
+            flex-direction: row;
+        }
+    </style>
+
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+                    <div class="LAY-btns" style="margin-bottom: 10px;">
+                        <form class="layui-form" 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="no" autocomplete="off" class="layui-input"
+                                       placeholder="单号"/>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="name" autocomplete="off" class="layui-input"
+                                       placeholder="客户名称"/>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="tel" autocomplete="off" class="layui-input"
+                                       placeholder="客户电话"/>
+                            </div>
+                        </form>
+                        <div style="clear: both;"></div>
+                    </div>
+
+                    <table class="layui-hide" id="dispatch_process_datagrid" lay-filter="order-operate"></table>
+
+
+                    <script type="text/html" id="order-operate-bar">
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="order_search"
+                            >查看</a>
+                        </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="order_update"
+                            >分配</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: '#dispatch_process_datagrid'
+            , url: '/order/'
+            , title: '订单管理'
+            , cols: [[
+                {field: 'no', title: '单号', width: 180}
+                , {field: 'name', title: '客户名称', width: 110}
+                , {field: 'tel', title: '客户电话', width: 120}
+                , {field: 'address', title: '地址', width: 200}
+                , {field: 'village', title: '小区', width: 200}
+                , {field: 'project_text', title: '项目', width: 120}
+                , {field: 'current_follow_user', title: '当前跟踪人', width: 100}
+                , {field: 'apply_process', title: "申请进度", width: 150}
+                , {width: 150, align: 'center', fixed: 'right', toolbar: '#order-operate-bar'}
+            ]]
+            , page: true
+            , height: 'full-108'
+        });
+        //导出列表
+        form.on('submit(query-form-element)', function (data) {
+            table.reload('order_datagrid', {
+                where: data.field
+                , page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
+        //监听工具条
+        table.on('tool(order-operate)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'order_search') {
+               table.editdata = data;
+               layer.open({
+                type: 2,
+                title: '查看详情',
+                area: ['45%', '80%'],
+                btn: ['取消'],
+                btn1: function (index, layero) {
+                    layer.close(index);//关闭当前按钮
+                },
+                content: 'dispatch_process_detail.html'
+            });
+            }else if(obj.event === "order_update"){
+                // 更新进度
+                layer.open({
+                    type: 2,
+                    title: '分配',
+                    area: ['25%', '40%'],
+                    btn: ['保存','取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (res) {
+                            if (res.code === 0) {
+                                layer.msg('分配成功!', {icon: 1})
+                            }
+                            layer.close(index);
+                            table.reload('order_datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'dispatch_process_edit.html?customer_id=' + data.id
+                });
+            }
+        });
+    });
+
+</script>
+</body>
+</html>

+ 15 - 36
uis/views/order/index.html

@@ -65,14 +65,8 @@
                 <div class="layui-col-md12">
                     <div class="LAY-btns" style="margin-bottom: 10px;">
                         <div style="float: left">
-                            <button class="layui-nav">
-                                <div class="layui-nav-item">
-                                    <a href="javascript:;" style="color:#fff;">导出</a>
-                                    <dl class="layui-nav-child">
-                                        <dd><a href="#" id="btn_list">列表</a></dd>
-                                        <dd><a href="#" id="btn_detail">明细</a></dd>
-                                    </dl>
-                                </div>
+                            <button class="layui-btn" id="btn_list"><i
+                                    class="layui-icon layui-icon-download-circle"></i>导出
                             </button>
                         </div>
                         <form class="layui-form" lay-filter="query-form-element">
@@ -130,6 +124,7 @@
         table.render({
             elem: '#order_datagrid'
             , url: '/order/'
+            , title: '订单管理'
             , cols: [[
                 {field: 'no', title: '单号', width: 180}
                 , {field: 'name', title: '客户名称', width: 110}
@@ -147,34 +142,27 @@
             , height: 'full-108'
         });
         //导出列表
-        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,)
-                }
-            })
+        var _params = {};
+        form.on('submit(query-form-element)', function (data) {
+            _params = data.field;
+            table.reload('order_datagrid', {
+                where: data.field
+                , page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
         });
-        //导出明细
-        var _params2 = {};
-        $('#btn_detail').on('click', function () {
+        $('#btn_list').on('click', function () {
             $.get({
                 url: '/order/?export=true',
                 dataType: 'json',
-                data: _params2,
+                data: _params,
                 success: function (res) {
                     if (res.code === 1) {
                         layer.msg(res.msg);
                         return;
                     }
-                    table.exportFile('datagrid', res,)
+                    table.exportFile('order_datagrid', res,)
                 }
             })
         });
@@ -217,15 +205,6 @@
                 });
             }
         });
-
-        form.on('submit(query-form-element)', function (data) {
-            table.reload('order_datagrid', {
-                where: data.field
-                , page: {curr: 1}
-            });
-            layer.closeAll();
-            return false
-        });
     });
 
 </script>

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

@@ -53,7 +53,7 @@
       ,type:'get'
       ,cols: [[
         {field:'name', title:'名称', width:130}
-        ,{field:'employees', title:'人员'}
+        ,{field:'employees', title:''}
         ,{width:130, align:'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
       ,page: true