Pārlūkot izejas kodu

视频监控后台摄像头列表选择区域

任敬轩 3 gadi atpakaļ
vecāks
revīzija
e721e2aecd

+ 87 - 4
Modules/Camera/Http/Controllers/CameraController.php

@@ -23,6 +23,7 @@ use Modules\Mine\Entities\WorkingSurface;
 use Modules\Mine\Entities\WorkingSurfaceCamera;
 use Modules\Mine\Services\MineServices;
 use Modules\Mine\Services\SurfaceServices;
+use DB;
 
 class CameraController extends BaseController
 {
@@ -92,6 +93,11 @@ class CameraController extends BaseController
 //            $camera_list = $camera_list->where('mine_list.degree', 'like', '%' . '|' . $area_id);
 //            $camera_list = $camera_list->where('mine_list.title', 'like', '%' . $request->input('mine_name')  . '%')->where('parent_id','!=', 0);
         }
+        $data['mine_default'] = "";
+        if ($request->has('mine_id') && $request->input('mine_id')) {
+            $camera_list = $camera_list->where('mine_list.id',$request->input('mine_id'));
+            $data['mine_default'] = $request->input('mine_id');
+        }
 
         if ($request->has('camera_name') && $request->input('camera_name')) {
             $camera_list = $camera_list->where('camera_list.camera_name', 'like', '%' . $request->input('camera_name') . '%');
@@ -111,20 +117,21 @@ class CameraController extends BaseController
             'camera_list.is_show',
             'mine_list.title',
             'mine_list.degree'
-        )->paginate(50);
+        )->paginate(10);
 
         foreach ($camera_list as $key => $val) {
             $camera_list[$key]->parent_title = MineList::where('id', explode('|', $val->degree)[0])->value('title');
         }
 
         $tableObj             = new TableAuxiliary('camera/list', $camera_list);
+
         $tableObj->search('input', 'mine_name', '矿区名称');
         $tableObj->search('input', 'area_name', '区域名称');
         $tableObj->search('input', 'camera_name', '摄像头名称');
         $tableObj->search('select', 'camera_type', '摄像头类型', CameraEnum::CAMERA_TYPE_EXCHANGE);
         $tableObj->topActions = ['add', 'import', 'importTemplate'];
-        $tableObj->column('parent_title', '矿区名称');
-        $tableObj->column('title', '区域名称');
+//        $tableObj->column('parent_title', '矿区名称');
+//        $tableObj->column('title', '区域名称');
         $tableObj->column('camera_name', '摄像头名称');
         $tableObj->column('camera_type', '摄像头类型', function ($camera_type) {
             return CameraEnum::CAMERA_TYPE_EXCHANGE[$camera_type];
@@ -135,7 +142,83 @@ class CameraController extends BaseController
             return '<span class="layui-form"><input type="checkbox" name="is_show" data-href="camera/list/edit?type=show&id=' . $item['id'] . '" lay-skin="switch" lay-text="是|否" ' . ($is_show == CameraEnum::IS_SHOW_YES ? 'checked' : '') . '></span>';
         });
         $tableObj->column('sort', '排序');
-        return $this->tableList($tableObj);
+        $data['path']           = $tableObj->path;
+        $data['items']          = $tableObj->items;
+        $data['columns']        = $tableObj->columns;
+        $data['searchs']        = $tableObj->searchColumns;
+        $data['primaryKey']     = $tableObj->primaryKey;
+        $data['displayActions'] = $tableObj->displayActions;
+        if (is_string($data['displayActions']['value'])) {
+            $data['displayActions']['value'] = [$data['displayActions']['value']];
+        }
+        $data['actionBtns']          = $tableObj->actionBtns;
+        $data['actionBtnsAttribute'] = $tableObj->actionBtnsAttribute;
+        $data['topActions']          = $tableObj->topActions;
+        $data['displayActionOthers'] = $tableObj->displayActionOthers;
+        $data['topActionOthers']     = $tableObj->topActionOthers;
+        $data                        += \Illuminate\Support\Facades\Request::except('_token');
+
+        //区域列表
+        $mine_list = DB::table('mine_list')->where('parent_id',0)->where('deleted_at',null)->get();
+        $tree_data = [];
+        foreach($mine_list as $k=>$v){
+            $tree_data[$v->id]['id'] = $v->id;
+            $tree_data[$v->id]['name'] = $v->title;
+            $child_list = DB::table('mine_list')->where('parent_id',$v->id)->get();
+            if(count($child_list)>0){
+                $tree_data[$v->id]['type'] = 'folder';
+                $tree_data[$v->id]['additionalParameters']['children'] = $this->mineTree($child_list,$v->id);
+            }else{
+                $tree_data[$v->id]['type'] = 'item';
+            }
+        }
+        $data['tree_data'] = $tree_data;
+        return $this->view('camera::camera_list', $data);
+    }
+
+    //摄像头管理区域列表ajax
+    public function mineList(){
+        //区域列表
+        $mine_list = DB::table('mine_list')->where('parent_id',0)->where('deleted_at',null)->get();
+        $tree_data = [];
+        foreach($mine_list as $k=>$v){
+            $tree_data[$v->id]['id'] = $v->id;
+            $tree_data[$v->id]['name'] = $v->title;
+            $child_list = DB::table('mine_list')->where('parent_id',$v->id)->get();
+            if(count($child_list)>0){
+                $tree_data[$v->id]['type'] = 'folder';
+                $tree_data[$v->id]['additionalParameters']['children'] = $this->mineTree($child_list,$v->id);
+            }else{
+                $tree_data[$v->id]['type'] = 'item';
+            }
+        }
+        return $tree_data;
+    }
+
+    //摄像头管理区域列表ajax
+    public function cameraUpdate(){
+        $camera_list = DB::table('camera_list')->where('mine_id',$_GET['id'])->get();
+        foreach($camera_list as $k=>$v){
+            $v->camera_type =   CameraEnum::CAMERA_TYPE_EXCHANGE[$v->camera_type];
+        }
+        return $camera_list;
+    }
+
+    public function mineTree($regions, $parent_id)
+    {
+        $arr = [];
+        foreach ($regions as $key => $value) {
+            $arr[$key]['id'] = $value->id;
+            $arr[$key]['name'] = $value->title;
+            $mine_child = DB::table('mine_list')->where('parent_id', $value->id)->get();
+            if (count($mine_child) > 0) {
+                $arr[$key]['type'] = 'folder';
+                $arr[$key]['additionalParameters']['children'] = self::mineTree($mine_child, $value->id);
+            } else {
+                $arr[$key]['type'] = 'item';
+            }
+        }
+        return array_values($arr);
     }
 
     //查看摄像头列表详情

+ 456 - 0
Modules/Camera/Resources/views/camera_list.blade.php

@@ -0,0 +1,456 @@
+<link rel="stylesheet" href="/static/css/font-awesome.min.css">
+<link rel="stylesheet" href="/static/css/css.css">
+<link rel="stylesheet" href="/static/css/ace.min.css">
+<style>
+    body,html{
+        background:white;
+        overflow-y:hidden;
+    }
+    .pagination{
+        margin-left:190px;
+        padding-top:10px;
+    }
+    #mine_list{
+        overflow:hidden;
+        overflow-y:scroll;
+    }
+    #mine_list::-webkit-scrollbar{
+        display:none;
+    }
+    #camera_table{
+        overflow:hidden;
+        overflow-y:scroll;
+    }
+    #camera_table::-webkit-scrollbar{
+        display:none;
+    }
+</style>
+<div @if(request()->ajax()) style="max-height: 600px;overflow-y: auto;" @endif>
+    @if(count($searchs) > 0)
+        <div style="width:200px;max-height:615px;position:absolute;" id="mine_list">
+            <div class="row">
+                <div class="col-sm-6">
+                    <div class="widget-box" style="margin-top:0;">
+                        <div class="widget-header header-color-blue2" style="background:#009688;">
+                            <h4 class="lighter smaller">区域列表</h4>
+                        </div>
+
+                        <div class="widget-body" style="border:0px solid #009688;">
+                            <div class="widget-main padding-8">
+                                <div id="tree1" class="tree tree-selectable">
+                                    <div class="tree-folder" style="display:none;">
+                                        <div class="tree-folder-header">
+                                            <i class="icon-plus"></i>
+                                            <div class="tree-folder-name"></div>
+                                        </div>
+                                        <div class="tree-folder-content"></div>
+                                        <div class="tree-loader" style="display: none;"></div>
+                                    </div>
+                                    <div class="tree-item" style="display:none;">
+                                        <i class="icon-remove"></i>
+                                        <div class="tree-item-name"></div>
+                                    </div>
+
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="layui-row" style="margin-left:210px;">
+            <form class="layui-form" method="get" action="/admin/{{ $path }}" style="margin-bottom: 10px;" id="search_form">
+                @csrf
+                @if(request()->has('id'))
+                    <input type="hidden" name="id" value="{{ request()->input('id') }}">
+                @endif
+                <input type="hidden" name="mine_id" id="mine_id" value="">
+                @foreach($searchs as $var => $search)
+                    @if($search['type'] == 'input')
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text"
+                                   placeholder="{{ $search['label'] }}"
+                                   name="{{ $var }}"
+                                   value="{{ ${$var} ?? '' }}">
+                        </div>
+                    @endif
+                    @if($search['type'] == 'select')
+                        <div class="layui-input-inline">
+                            <select name="{{ $var }}">
+                                <option value="0"
+                                        @if(!isset($search['assist'])) selected @endif>{{ $search['label'] }}
+                                </option>
+                                @if(count($search['assist']) > 0)
+                                    @foreach($search['assist'] as $k => $col)
+                                        <option value="{{ $k }}"
+                                                @if(isset(${$var}) && ${$var} == $k) selected @endif>{{ $col }}
+                                        </option>
+                                    @endforeach
+                                @endif
+                            </select>
+                        </div>
+                    @endif
+                    @if($search['type'] == 'tree_select')
+                        <div class="layui-input-inline">
+                            <select name="{{ $var }}">
+                                <option value="0"
+                                        @if(!isset($search['assist'])) selected @endif>{{ $search['label'] }}
+                                </option>
+                                @if(count($search['assist']) > 0)
+                                    @include('admin::component.multi_select_option', ['selects' => $search['assist'], 'selectPid' => request($var) ?? ''])
+                                @endif
+                            </select>
+                        </div>
+                    @endif
+                    @if($search['type'] == 'date')
+                        <div class="layui-input-inline">
+                            <input class="layui-input date-{{ $var }}" type="text"
+                                   placeholder="{{ $search['label'] ?? '日期' }}"
+                                   name="{{ $var }}" autocomplete="off" readonly
+                                   disableautocomplete value="{{ $search['assist'][0] ?? '' }}"
+                            >
+                        </div>
+                        <script>
+                            $('.date-{{ $var }}').datepicker({
+                                language: 'zh-CN',
+                                format: 'yyyy-mm-dd',
+                                date: '{{ $search['assist'][0] ?? null }}',
+                            });
+                        </script>
+                    @endif
+                    @if($search['type'] == 'date_time')
+                        <div class="layui-input-inline">
+                            <input class="layui-input star-{{ $var }}" type="text"
+                                   placeholder="{{ $search['label'][0] ?? '起始日期' }}"
+                                   name="star_{{ $var }}" autocomplete="off" readonly
+                                   disableautocomplete value="{{ $search['assist'][0] ?? '' }}">
+                        </div> -
+                        <div class="layui-input-inline">
+                            <input class="layui-input end-{{ $var }}" type="text"
+                                   placeholder="{{ $search['label'][1] ?? '结束日期' }}"
+                                   name="end_{{ $var }}" autocomplete="off" readonly
+                                   disableautocomplete value="{{ $search['assist'][1] ?? '' }}">
+                        </div>
+                        <script>
+                            $('.star-{{ $var }}').datepicker({
+                                language: 'zh-CN',
+                                format: 'yyyy-mm-dd',
+                                date: '{{ $search['assist'][0] ?? null }}',
+                                pick: function (rtime) {
+                                    $('.end-{{ $var }}').datepicker('setStartDate', rtime.date);
+                                }
+                            });
+                            $('.end-{{ $var }}').datepicker({
+                                language: 'zh-CN',
+                                format: 'yyyy-mm-dd',
+                                date: '{{ $search['assist'][0] ?? null }}'
+                            });
+                        </script>
+                    @endif
+                @endforeach
+                <button class="layui-btn" type="submit"><i class="layui-icon">&#xe615;</i></button>
+            </form>
+        </div>
+    @endif
+    @if(count($topActions) > 0 || (isset($topActionOthers) && count($topActionOthers)) > 0)
+        <div class="weadmin-block layui-clear" style="margin-left:210px;">
+            @if(in_array('goback', $topActions))
+                @if(isset($topActions['href']))
+                    <a class="layui-btn layui-btn-primary layui-layer-close" style="position:relative;"
+                       href="{{ $topActions['href'] }}">返回
+                    </a>
+                @else
+                    <button class="layui-btn layui-btn-primary layui-layer-close" style="position:relative;" type="button"
+                            onclick="javascript:history.go(-1);">返回
+                    </button>
+                @endif
+            @endif
+            @if(checkBtn('/admin/'.$path.'/add', $permissionsList))
+                @if(in_array('add', $topActions))
+                    @if(isset($topActions['add_params']))
+                        <a href="/admin/{{ $path }}/add?{{ $topActions['add_params']}} " class="layui-btn">添加</a>
+                    @else
+                        <a href="/admin/{{ $path }}/add" class="layui-btn">添加</a>
+                    @endif
+                @endif
+            @endif
+
+            @if(checkBtn('/admin/'.$path.'/export', $permissionsList))
+                @if(in_array('export', $topActions))
+                    <a href="/admin/{{ $path }}/export?{{ http_build_query(request()->except('_token')) }}"
+                       class="layui-btn">Excel导出当前页</a>
+                    <a href="/admin/{{ $path }}/export?type=all&{{ http_build_query(request()->except('_token')) }}"
+                       class="layui-btn">Excel导出全部</a>
+                @endif
+            @endif
+
+            @if(checkBtn('/admin/'.$path.'/importTemplate', $permissionsList))
+                @if(in_array('importTemplate', $topActions))
+                    <a href="/admin/{{ $path }}/importTemplate" class="layui-btn">下载导入模板</a>
+                @endif
+            @endif
+
+            @if(checkBtn('/admin/'.$path.'/import', $permissionsList))
+                @if(in_array('import', $topActions))
+                    <button type="button" class="layui-btn" id="import">
+                        <i class="layui-icon">&#xe67c;</i>Excel导入
+                    </button>
+                @endif
+            @endif
+            <div style="float: right;">
+                @if(isset($topActionOthers) && count($topActionOthers) > 0)
+                    @foreach($topActionOthers as $topActionOther)
+                        @if(checkBtn('/admin/'.$topActionOther['path'], $permissionsList))
+                            @if(isset($topActionOther['isShow']))
+                                @if(isset($topActionOther['isJump']))
+                                    <button class="layui-btn {{ $topActionOther['class'] }}"
+                                            onclick="jumpBtn(this)"
+                                            data-jumptype="{{ $topActionOther['isJump'] }}"
+                                            data-href="{{ $topActionOther['path'] }}">{{ $topActionOther['name'] }}
+                                    </button>
+                                @else
+                                    <a href="/admin/{{ $topActionOther['path'] }}"
+                                       class="layui-btn {{ $topActionOther['class'] }}">{{ $topActionOther['name'] }}</a>
+                                @endif
+
+                            @endif
+                        @endif
+                    @endforeach
+                @endif
+            </div>
+        </div>
+    @endif
+        <div style="margin-left:210px;max-height:454px;" id="camera_table">
+            <table class="layui-table" style="">
+                <thead>
+                <tr>
+                    @foreach($columns as $column)
+                        <th style="width:11%;">{{ $column['name'] }}</th>
+                    @endforeach
+                    @if((isset($displayActionOthers) && count($displayActionOthers) > 0) || count($actionBtns) > 0)
+                        <th style="width:15%;">操作</th>
+                    @endif
+                </tr>
+                </thead>
+                <tbody>
+                @if(count($items) > 0)
+                    @foreach($items as $item)
+                        <tr>
+                            @foreach($columns as $varName => $column)
+                                <td>{!! isset($column['value']) ? $column['value']($item->$varName, $item) : $item->$varName !!}</td>
+                            @endforeach
+                            @if((isset($displayActionOthers) && count($displayActionOthers) > 0) || count($actionBtns) > 0)
+                                <td>
+                                    @if(isset($displayActionOthers) && count($displayActionOthers) > 0)
+                                        @foreach($displayActionOthers as $displayActionOther)
+                                            @if(checkBtn('/admin/'.$displayActionOther['path'], $permissionsList))
+                                                @if(isset($displayActionOther['isShow']) ? $displayActionOther['isShow']($item) : 1)
+                                                    @if(isset($displayActionOther['isJump']))
+                                                        <button
+                                                                class="layui-btn layui-btn-xs {{ $displayActionOther['class'] }} @if($displayActionOther['isJump'] == 'uploadimg') uploadimg @endif"
+                                                                onclick="jumpBtn(this)"
+                                                                data-title="{{ $displayActionOther['title'] ?? '' }}"
+                                                                data-jumptype="{{ $displayActionOther['isJump'] }}"
+                                                                data-href="{{ substr($displayActionOther['path'],-1) == '&' ? $displayActionOther['path']:$displayActionOther['path'].'?' }}{{ $primaryKey }}={{ $item->$primaryKey }}">{{ $displayActionOther['name'] }}
+                                                        </button>
+                                                    @else
+                                                        <a href="/admin/{{ substr($displayActionOther['path'],-1) == '&' ? $displayActionOther['path']:$displayActionOther['path'].'?' }}{{ $primaryKey }}={{ $item->$primaryKey }}"
+                                                           class="layui-btn layui-btn-xs {{ $displayActionOther['class'] }}"
+                                                           @if(isset($displayActionOther['fullWin'])) target="_blank" @endif>{{ $displayActionOther['name'] }}</a>
+                                                    @endif
+                                                @endif
+                                            @endif
+                                        @endforeach
+                                    @endif
+                                    @if(!is_array($item) || !in_array($item[$displayActions['name']], $displayActions['value']))
+                                        @if(checkBtn('/admin/'.$path.'/view', $permissionsList))
+                                            @if(in_array('view', $actionBtns))
+                                                <a href="/admin/{{ $path }}/view?{{ $primaryKey }}={{ $item->$primaryKey }}"
+                                                   class="layui-btn layui-btn-normal layui-btn-xs" {{ $actionBtnsAttribute['view'] ?? '' }} >查看</a>
+                                            @endif
+                                        @endif
+                                        @if(checkBtn('/admin/'.$path.'/edit', $permissionsList))
+                                            @if(in_array('edit', $actionBtns))
+                                                <a href="/admin/{{ $path }}/edit?{{ $primaryKey }}={{ $item->$primaryKey }}"
+                                                   class="layui-btn layui-btn-xs" {{ $actionBtnsAttribute['edit'] ?? '' }}>编辑</a>
+                                            @endif
+                                        @endif
+                                        @if(checkBtn('/admin/'.$path.'/del', $permissionsList))
+                                            @if(in_array('del', $actionBtns))
+                                                <button class="layui-btn layui-btn-xs layui-btn-danger delItem"
+                                                        data-itemid="{{ $item->$primaryKey }}" {{ $actionBtnsAttribute['del'] ?? '' }}>
+                                                    删除
+                                                </button>
+                                            @endif
+                                        @endif
+                                    @endif
+                                </td>
+                            @endif
+                        </tr>
+                    @endforeach
+                @else
+                    <tr>
+                        <td colspan="{{ count($columns) + 1 }}">暂无数据</td>
+                    </tr>
+                @endif
+                </tbody>
+            </table>
+        </div>
+
+</div>
+@if(method_exists($items, 'links'))
+    {{ $items->appends(request()->except('_token'))->links() }}
+@endif
+
+<script>
+    $(function () {
+        $('.delItem').on('click', function () {
+            var self = $(this);
+            layer.confirm('你确定删除?', function () {
+                layer.closeAll();
+                $.post('/admin/{{ $path }}/del', {"{{ $primaryKey }}": self.data('itemid')}, function (res) {
+                    if (res.code === 0) {
+                        layer.msg('成功!', {anim: 0}, function () {
+                            location.reload();
+                        });
+                    } else {
+                        layer.msg(res.message);
+                    }
+                });
+            });
+        })
+    });
+
+    function jumpBtn(el) {
+        var self = $(el);
+        var path = self.data('href');
+        var type = self.data('jumptype');
+        var jvalue = self.data('value') || '';
+        var title = self.data('title') || '';
+        var text = self.text();
+        if (type === 'confirm') {
+            layer.confirm('确定' + text + '?', function (index) {
+                layer.close(index);
+                $.get('/admin/' + path, function (res) {
+                    if (res.code === 0) {
+                        layer.msg('成功!', {anim: 0}, function () {
+                            location.reload();
+                        });
+                    } else {
+                        layer.msg('失败:' + res.message);
+                    }
+                });
+            });
+        } else if (type === 'uploadimg') {
+
+        } else if (type === 'prompt') {
+            layer.prompt({
+                value: jvalue,
+                title: title,
+            }, function (value, index, elem) {
+                layer.close(index);
+                $.get('/admin/' + path, {newValue: value}, function (res) {
+                    if (res.code === 0) {
+                        layer.msg('成功!', {anim: 0, time: 1000}, function () {
+                            self.text(value).data('value', value);
+                            location.reload();
+                        });
+                    } else {
+                        layer.msg('失败:' + res.message);
+                    }
+                });
+            });
+        } else {
+            $.get('/admin/' + path, function (res) {
+                layer.open({
+                    type: 1,
+                    area: '700px',
+                    offset: '150px',
+                    title: false,
+                    content: res
+                });
+            });
+        }
+    }
+
+    layui.use(['upload', 'form'], function () {
+        var upload = layui.upload, form = layui.form;
+
+        form.on('switch', function (data) {
+            var self = $(data.elem);
+            var path = self.data('href');
+            $.get('/admin/' + path, function (res) {
+                console.log(res);
+                if (res.code === 0) {
+                } else {
+                    layer.msg('失败:' + res.message);
+                }
+            });
+        });
+        //执行实例
+        var uploadInst = upload.render({
+            elem: '#import' //绑定元素
+            , field: 'excel'
+            , exts: 'xls|xlsx|csv'
+            , url: '/admin/{{ $path }}/import' //上传接口
+            , done: function (res) {
+                if (res.code === 0) {
+                    layer.msg('导入成功,加载请稍等待!', {anim: 0}, function () {
+                        location.reload();
+                    });
+                } else {
+                    layer.msg('导入失败,即将跳转到错误信息页。', {anim: 0}, function () {
+                        location.href = '/admin/errorPage';
+                    });
+                }
+            }
+            , error: function (res) {
+                layer.msg(res.message);
+            }
+        });
+
+        //执行实例
+        $('.uploadimg').each(function (index, elem) {
+            upload.render({
+                elem: elem //绑定元素
+                , field: 'img'
+                , url: '/admin/' + $(elem).data('href') //上传接口
+                , done: function (res) {
+                    if (res.code === 0) {
+                        layer.msg('上传成功', {anim: 0}, function () {
+                            location.reload();
+                        });
+                    } else {
+                        layer.msg(res.message);
+                    }
+                }
+                , error: function (res) {
+                    layer.msg(res.message);
+                }
+            });
+        });
+
+    });
+</script>
+<script src="/static/js/jquery.min.js"></script>
+<script src="/static/js/bootstrap.min.js"></script>
+<script src="/static/js/fuelux.tree-sampledata.js"></script>
+<script src="/static/js/fuelux.tree.min.js"></script>
+<script src="/static/js/ace-elements.min.js"></script>
+<script src="/static/js/ace.min.js"></script>
+<script type="text/javascript">
+    var tree_data = <?php echo json_encode($tree_data);?>;
+    var treeDataSource = new DataSourceTree({data: tree_data});
+    jQuery(function($){
+        $('#tree1').ace_tree({
+            dataSource: treeDataSource ,
+            multiSelect:true,
+            loadingHTML:'<div class="tree-loading"><i class="icon-refresh icon-spin blue"></i></div>',
+            'open-icon' : 'icon-minus',
+            'close-icon' : 'icon-plus',
+            'selectable' : true,
+            // 'selected-icon' : 'icon-ok',
+            // 'unselected-icon' : 'icon-remove'
+        });
+    });
+</script>

+ 2 - 0
Modules/Camera/Routes/web.php

@@ -24,6 +24,8 @@ Route::prefix('admin')->group(function() {
     Route::any('/camera/list/import', 'CameraController@cameraListImport');
     Route::get('/camera/list/importTemplate', 'CameraController@cameraListTemplate');
     Route::post('/camera/upload/cover_picture', 'CameraController@cameraUploadCpicture');
+    Route::get('/camera/mine/list', 'CameraController@mineList');//摄像头管理区域列表ajax
+    Route::get('/camera/update', 'CameraController@cameraUpdate');//摄像头管理区域列表ajax
 
     //摄像头链接生成字段管理
 //    Route::get('/camera/field_list', 'CameraController@fieldList');

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 15517 - 0
public/static/css/ace.min.css


+ 144 - 0
public/static/css/css.css

@@ -0,0 +1,144 @@
+/* cyrillic-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
+  unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
+  unicode-range: U+0370-03FF;
+}
+/* hebrew */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
+  unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
+}
+/* vietnamese */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
+  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
+  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
+  unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
+  unicode-range: U+0370-03FF;
+}
+/* hebrew */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
+  unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
+}
+/* vietnamese */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
+  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  font-stretch: 100%;
+  src: url(../font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 403 - 0
public/static/css/font-awesome.min.css


BIN
public/static/font/fontawesome-webfont.woff


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2


BIN
public/static/font/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 744 - 0
public/static/js/ace-elements.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
public/static/js/ace.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 6 - 0
public/static/js/bootstrap.min.js


+ 28 - 0
public/static/js/fuelux.tree-sampledata.js

@@ -0,0 +1,28 @@
+var DataSourceTree = function(options) {
+	this._data 	= options.data;
+	this._delay = options.delay;
+}
+
+DataSourceTree.prototype.data = function(options, callback) {
+	var self = this;
+	var $data = null;
+
+	if(!("name" in options) && !("type" in options)){
+		$data = this._data;//the root tree
+		callback({ data: $data });
+		return;
+	}
+	else if("type" in options && options.type == "folder") {
+		if("additionalParameters" in options && "children" in options.additionalParameters)
+			$data = options.additionalParameters.children;
+		else $data = {}//no data
+	}
+	
+	if($data != null)//this setTimeout is only for mimicking some random delay
+		setTimeout(function(){callback({ data: $data });} , parseInt(Math.random() * 500) + 200);
+
+	//we have used static data here
+	//but you can retrieve your data dynamically from a server using ajax call
+	//checkout examples/treeview.html and examples/treeview.js for more info
+};
+

+ 157 - 0
public/static/js/fuelux.tree.min.js

@@ -0,0 +1,157 @@
+(function(a, c) {
+    var b = function(e, d) {
+        this.$element = a(e);
+        this.options = a.extend({},
+        a.fn.tree.defaults, d);
+        this.$element.on("click", ".tree-item", a.proxy(function(f) {
+            this.selectItem(f.currentTarget)
+        },
+        this));
+        this.$element.on("click", ".tree-folder-header", a.proxy(function(f) {
+            this.selectFolder(f.currentTarget)
+        },
+        this));
+        this.render()
+    };
+    b.prototype = {
+        constructor: b,
+        render: function() {
+            this.populate(this.$element)
+        },
+        populate: function(f) {
+            var e = this;
+            var d = f.parent().find(".tree-loader:eq(0)");
+            d.show();
+            this.options.dataSource.data(f.data(),
+            function(g) {
+                d.hide();
+                a.each(g.data,
+                function(h, j) {
+                    var i;
+                    if (j.type === "folder") {
+                        i = e.$element.find(".tree-folder:eq(0)").clone().show();
+                        i.find(".tree-folder-name").html(j.name);
+                        i.find(".tree-loader").html(e.options.loadingHTML);
+                        var k = i.find(".tree-folder-header");
+                        k.data(j);
+                        if ("icon-class" in j) {
+                            k.find('[class*="icon-"]').addClass(j["icon-class"])
+                        }
+                    } else {
+                        if (j.type === "item") {
+                            i = e.$element.find(".tree-item:eq(0)").clone().show();
+                            i.find(".tree-item-name").html(j.name);
+                            i.data(j);
+                            // console.log();
+                            if ("additionalParameters" in j && "item-selected" in j.additionalParameters && j.additionalParameters["item-selected"] == true) {
+                               
+                                i.addClass("tree-selected");
+                                i.find("i").removeClass(e.options["unselected-icon"]).addClass(e.options["selected-icon"])
+                            }
+                        }
+                    }
+                    if (f.hasClass("tree-folder-header")) {
+                        f.parent().find(".tree-folder-content:eq(0)").append(i)
+                    } else {
+                        f.append(i)
+                    }
+                });
+                e.$element.trigger("loaded")
+            })
+        },
+        selectItem: function(e) {
+            if (this.options.selectable == false) {
+                return
+            }
+            var d = a(e);
+            var g = this.$element.find(".tree-selected");
+            var f = [];
+            if (this.options.multiSelect) {
+                a.each(g,
+                function(i, j) {
+                    var h = a(j);
+                    if (h[0] !== d[0]) {
+                    	
+                        f.push(a(j).data())
+                    }
+                })
+            } else {
+                if (g[0] !== d[0]) {
+                    g.removeClass("tree-selected").find("i").removeClass(this.options["selected-icon"]).addClass(this.options["unselected-icon"]);
+                    f.push(d.data())
+                }
+            }
+
+            if (d.hasClass("tree-selected")) {
+                d.removeClass("tree-selected");
+                d.find("i").removeClass(this.options["selected-icon"]).addClass(this.options["unselected-icon"])
+            } else {
+                document.getElementById("mine_id").value = d.data().id;
+                var search_form = document.getElementById('search_form');
+                search_form.submit();
+            	d.siblings().removeClass("tree-selected");
+                d.addClass("tree-selected");
+                d.find("i").removeClass(this.options["unselected-icon"]).addClass(this.options["selected-icon"]);
+                if (this.options.multiSelect) {
+                    f.push(d.data())
+                }
+            }
+            if (f.length) {
+                this.$element.trigger("selected", {
+                    info: f
+                })
+            }
+        },
+        selectFolder: function(e) {
+            var d = a(e);
+            var f = d.parent();
+            if (d.find("." + this.options["close-icon"]).length) {
+                if (f.find(".tree-folder-content").children().length) {
+                    f.find(".tree-folder-content:eq(0)").show()
+                } else {
+                    this.populate(d)
+                }
+                f.find("." + this.options["close-icon"] + ":eq(0)").removeClass(this.options["close-icon"]).addClass(this.options["open-icon"]);
+                this.$element.trigger("opened", d.data())
+            } else {
+                if (this.options.cacheItems) {
+                    f.find(".tree-folder-content:eq(0)").hide()
+                } else {
+                    f.find(".tree-folder-content:eq(0)").empty()
+                }
+                f.find("." + this.options["open-icon"] + ":eq(0)").removeClass(this.options["open-icon"]).addClass(this.options["close-icon"]);
+                this.$element.trigger("closed", d.data())
+            }
+        },
+        selectedItems: function() {
+            var e = this.$element.find(".tree-selected");
+            var d = [];
+            a.each(e,
+            function(f, g) {
+                d.push(a(g).data())
+            });
+            return d
+        }
+    };
+    a.fn.tree = function(e, g) {
+        var f;
+        var d = this.each(function() {
+            var j = a(this);
+            var i = j.data("tree");
+            var h = typeof e === "object" && e;
+            if (!i) {
+                j.data("tree", (i = new b(this, h)))
+            }
+            if (typeof e === "string") {
+                f = i[e](g)
+            }
+        });
+        return (f === c) ? d: f
+    };
+    a.fn.tree.defaults = {
+        multiSelect: false,
+        loadingHTML: "<div>Loading...</div>",
+        cacheItems: true
+    };
+    a.fn.tree.Constructor = b
+})(window.jQuery);

+ 3 - 0
public/static/js/jquery.min.js

@@ -0,0 +1,3 @@
+/*-防止各大cdn公共库加载地址失效问题,此地址我们会时时监控,及调整以保障正常访问,如果您不喜欢请改为自己的地址-www.jq22.com为您服务*/
+/*当前为字节跳动cdn公共库提供的jQuery-1.11.1*/
+document.write("<script src='https://s0.pstatp.com/cdn/expire-1-M/jquery/1.11.1/jquery.min.js'><\/script>");