// 加载vue
require.config({
    paths: {
        "vue": "../js/vue",
    }
});
define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'vue'], function ($, undefined, Backend, Table, Form, Vue) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'inspection/plan/index' + location.search,
                    add_url: 'inspection/plan/add',
                    edit_url: 'inspection/plan/edit',
                    del_url: 'inspection/plan/del',
                    multi_url: 'inspection/plan/multi',
                    import_url: 'inspection/plan/import',
                    table: 'inspection_plan',
                }
            });

            var table = $("#table");
            $(".btn-add").data("area", ["100%", "100%"]);
            //当内容渲染完成给编辑按钮添加`data-area`属性
            table.on('post-body.bs.table', function (e, settings, json, xhr) {
                $(".btn-editone").data("area", ["100%", "100%"]);
            });
            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'id',
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id')},
                        {field: 'staff.staff_name', title: __('巡检员'), operate: 'LIKE'},
                        {field: 'plan_name', title: __('巡检计划名称'), operate: 'LIKE'},
                        {field: 'route_id', title: __('巡检路线'),visible:false, operate: '=',searchList: $.getJSON("inspection/route/dynamicselect")},
                        {field: 'route_name', title: __('巡检路线'), operate: false},
                        {field: 'circle_type', title: __('计划类型'), operate: false,formatter: Controller.api.formatter.circle_type},
                        {field: 'circle_value', title: __('执行条件'), operate: false,
                            width: '150',
                            formatter : function(value, row, index, field){
                                if(value){
                                    return "<span style='display: block;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;cursor:pointer;' title='" + value+ "'>" + value+ "</span>";
                                }else{
                                    return '';
                                }
                            },
                            cellStyle : function(value, row, index, field){
                                return {
                                    css: {
                                        "white-space": "nowrap",
                                        "text-overflow": "ellipsis",
                                        "overflow": "hidden",
                                        "max-width":"150px"
                                    }
                                };
                            },
                        },
                        {field: 'num', title: __('周期内执行次数'), operate: false},
                        // {field: 'time', title: __('每次间隔时长(分钟)'), operate: false},
                        {field: 'begintime', title: __('Begintime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
                        {field: 'endtime', title: __('Endtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
                        // {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},

                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate,
                            buttons: [
                                {
                                    name: 'addtabs',
                                    text: '任务管理',
                                    title: '巡检任务管理',
                                    extend:'data-area=["100%","100%"]',
                                    classname: 'btn btn-xs btn-warning btn-dialog',
                                    icon: 'fa fa-folder-o',
                                    url: 'inspection/project/index?plan_id={id}',
                                }
                            ],
                        }
                    ]
                ]
            });

            $(".btn-generate").click(function(){
                $.ajax({
                    type:'POST',
                    url:'inspection/project/generate',
                    success:function (response) {
                        if(response.code){
                            Toastr.success("任务生成成功");
                            // table.bootstrapTable('refresh');
                        }else{
                            Toastr.error(response.msg);
                            // table.bootstrapTable('refresh');
                        }
                        Layer.closeAll()
                    }
                })
            })

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        sel_staff: function () {
            require(['jstree'], function () {
                // 初始化表格参数配置
                Table.api.init({
                    extend: {
                        index_url: 'inspection/staff/index?is_regulatory_mng=1',
                        dragsort_url: '',
                        table: 'inspection_staff',
                    }
                });

                var table = $("#table");

                // 初始化表格
                table.bootstrapTable({
                    url: $.fn.bootstrapTable.defaults.extend.index_url,
                    queryParams:function(params){
                        var filter, op;
                        filter = JSON.parse(params.filter);
                        op = JSON.parse(params.op);
                        filter.is_screen_mng = 0;
                        op.is_screen_mng = '=';
                        filter.is_regulatory_mng = 0;
                        op.is_regulatory_mng = '=';
                        params.filter = JSON.stringify(filter);
                        params.op = JSON.stringify(op);
                        return params;
                    },
                    pk: 'id',
                    sortName: 'weigh asc,id desc',
                    columns: [
                        [
                            {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate,
                                buttons: [{
                                    name: 'content',
                                    title: __('选择'),
                                    text:'选择',
                                    classname: 'btn btn-xs btn-danger btn-click',
                                    click : function (data, ret) {
                                        Fast.api.close(ret);
                                    },
                                }],formatter: Table.api.formatter.operate},
                            {field: 'id', title: __('Id'),operate:false},
                            {field: 'staff_code', title: __('工号'),operate:'like'},
                            {field: 'staff_name', title: __('员工姓名'),operate:'like'},
                            {field: 'mobile', title: __('电话'),operate:false},
                            {field: 'duty', title: __('职务'),operate:false},
                            {field: 'createtime', title: __('添加时间'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},

                        ]
                    ]
                });


                $('#channeltree').on("changed.jstree", function (e, data) {
                    if(data.node){
                        node_id = data.node.id;
                        table.bootstrapTable('refresh', {url: $.fn.bootstrapTable.defaults.extend.index_url+"?depart_id="+node_id,pageNumber:1});
                    }

                    return false;
                });

                $('#channeltree').jstree({
                    "checkbox": {"keep_selected_style": false,},
                    "types": {
                        "total": {"icon": "fa fa-folder-o",},
                        "folder": {"icon": "fa fa-folder",},
                        "disabled": {"check_node": false,"uncheck_node": false}
                    },
                    'plugins': ["types"],
                    "core": {
                        "themes": {
                            "stripes": false,
                            "dots": false,//是否显示树连接线
                            "icons": true,//是否显示节点的图标
                        },
                        'check_callback': true,
                        'data':{
                            'url' : 'inspection/depart/tree',
                            'data' : function (node) {
                                return { 'id' : node.id};
                            }
                        }
                    }
                });

                // 为表格绑定事件
                Table.api.bindevent(table);
            })
        },
        add: function () {
            var vmAdd = new Vue({
                el: '#item-vue',
                data: {
                    exetimesStr:'',//当前执行检查点字符串集合用英文逗号隔开
                    exetimesArr:[],//当前执行时间点数组
                },
                created() {
                    let timeDot = $('#timeDotSelect').val();
                    this.exetimesArr.push(timeDot);
                    this.exetimesStr = timeDot;
                    // 更新周期性执行次数
                    $('#c-num').val(this.exetimesArr.length);
                },
                methods: {
                    //添加检查项
                    addItem:function () {
                        let timeDot = $('#timeDotSelect').val();
                        if (!timeDot){
                            layer.msg('请选择时间点');
                            return;
                        }
                        // 检查是否重名
                        for (let i=0; i<this.exetimesArr.length; i++){
                            if (this.exetimesArr[i] === timeDot){
                                layer.msg('时间点:' + timeDot + ' 已存在')
                                return;
                            }
                        }
                        this.exetimesArr.push(timeDot);
                        // 更新exetimesStr
                        this.exetimesStr = this.exetimesArr.join(',');
                        // 更新周期性执行次数
                        $('#c-num').val(this.exetimesArr.length);
                    },
                    //删除检查项
                    delItem:function (timeDot) {
                        let index = this.exetimesArr.findIndex(item => item === timeDot);
                        if (index > -1) {
                            this.exetimesArr.splice(index, 1); // 删除找到的时间点
                        }
                        // 更新exetimesStr
                        this.exetimesStr = this.exetimesArr.join(',');
                        // 更新周期性执行次数
                        $('#c-num').val(this.exetimesArr.length);
                    }
                }
            })

            $(".btn-staff").click(function () {
                var url = 'inspection/plan/sel_staff';
                var that = this;
                Fast.api.open(url, "选择巡检人员", {area:["80%", "80%"],
                    callback:function(data){
                        $("#staff_id").val(data.id);
                        $("#staff_name").val(data.staff_name);
                    }
                });
            })

            $(document).on("change", "#c-circle_type", function(){

                switch ($(this).val()) {
                    case "1": //日计划
                        $(".week,.month").hide();
                        break;
                    case "2": //周计划
                        $(".month").hide();
                        $(".week").show();

                        break;
                    case "3": //月计划
                        $(".week").hide();
                        $(".month").show();
                        break;
                }
            });

            Controller.api.bindevent();
        },
        edit: function () {
            var vmEdit = new Vue({
                el: '#item-vue',
                data: {
                    exetimesStr:Config.exetimes,//当前执行检查点字符串集合用英文逗号隔开
                    exetimesArr:[],//当前执行时间点数组
                },
                created() {
                    this.exetimesArr = this.exetimesStr.split(',');
                    // 更新周期性执行次数
                    $('#c-num').val(this.exetimesArr.length);
                },
                methods: {
                    //添加检查项
                    addItem:function () {
                        let timeDot = $('#timeDotSelect').val();
                        if (!timeDot){
                            layer.msg('请选择时间点');
                            return;
                        }
                        // 检查是否重名
                        for (let i=0; i<this.exetimesArr.length; i++){
                            if (this.exetimesArr[i] === timeDot){
                                layer.msg('时间点:' + timeDot + ' 已存在')
                                return;
                            }
                        }
                        this.exetimesArr.push(timeDot);
                        // 更新exetimesStr
                        this.exetimesStr = this.exetimesArr.join(',');
                        // 更新周期性执行次数
                        $('#c-num').val(this.exetimesArr.length);
                    },
                    //删除检查项
                    delItem:function (timeDot) {
                        let index = this.exetimesArr.findIndex(item => item === timeDot);
                        if (index > -1) {
                            this.exetimesArr.splice(index, 1); // 删除找到的时间点
                        }
                        // 更新exetimesStr
                        this.exetimesStr = this.exetimesArr.join(',');
                        // 更新周期性执行次数
                        $('#c-num').val(this.exetimesArr.length);
                    }
                }
            })

            $(".btn-staff").click(function () {
                var url = 'inspection/plan/sel_staff';
                var that = this;
                Fast.api.open(url, "选择巡检人员", {area:["80%", "80%"],
                    callback:function(data){
                        $("#staff_id").val(data.id);
                        $("#staff_name").val(data.staff_name);
                    }
                });
            })

            $(document).on("change", "#c-circle_type", function(){

                switch ($(this).val()) {
                    case "1": //日计划
                        $(".week,.month").hide();
                        break;
                    case "2": //周计划
                        $(".month").hide();
                        $(".week").show();

                        break;
                    case "3": //月计划
                        $(".week").hide();
                        $(".month").show();
                        break;
                }
            });
            Controller.api.bindevent();
        },
        api: {
            formatter:{
                circle_type: function (value, row, index) {
                    switch (value) {
                        case 1:
                            return "日计划";
                        case 2:
                            return "周计划";
                        case 3:
                            return "月计划";
                    }
                },
            },
            bindevent: function () {
                $('#route-manager').on('click',function () {
                    Fast.api.open("inspection/route/index", '巡检路线管理', {
                        area:["90%", "90%"],
                        // 回调只有在新页面调用Fast.api.close(data);才能生效
                        // callback:function(value){
                        //     setTimeout(function () {
                        //         treeBox.jstree(true).refresh(); // 刷新树
                        //     },500)
                        // }
                    });
                });
                Form.api.bindevent($("form[role=form]"));
            }
        }
    };
    return Controller;
});