define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

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

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'id',
                columns: [
                    [{
                            checkbox: true
                        },
                        {
                            field: 'id',
                            title: __('Id')
                        },
                        {
                            field: 'name',
                            title: __('Name')
                        },
                        {
                            field: 'pid',
                            title: __('Pid')
                        },
                        {
                            field: 'level',
                            title: __('Level')
                        },
                        {
                            field: 'operate',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            formatter: Table.api.formatter.operate
                        }
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        add: function () {
            Controller.api.bindevent();
        },
        edit: function () {
            Controller.api.bindevent();
        },
        select: function () {
            function urlParmas(par) {
                let value = ""
                window.location.search.replace("?", '').split("&").forEach(i => {
                    if (i.split('=')[0] == par) {
                        value = JSON.parse(decodeURI(i.split('=')[1]))
                    }
                })
                return value
            }
            var areaSelect = new Vue({
                el: "#areaSelect",
                data() {
                    return {
                        pcaData: Config.areaData,
                        data: Config.areaData,
                        selectedId: [],
                        selectedProvince: urlParmas('parmas').province_ids ? urlParmas('parmas').province_ids.split(',') : [],
                        selectedCity: urlParmas('parmas').city_ids ? urlParmas('parmas').city_ids.split(',') : [],
                        selectedArea: urlParmas('parmas').area_ids ? urlParmas('parmas').area_ids.split(',') : [],
                        selectedName: urlParmas('parmas').name ? urlParmas('parmas').name.split(',') : [],
                        defaultProps: {
                            children: 'children',
                            label: 'label'
                        },
                        filterText: '',
                        checked: false,
                    };
                },
                mounted() {
                    this.selectedId = this.selectedId.concat([], this.selectedProvince, this.selectedCity, this.selectedArea)
                },
                methods: {
                    selceted(data) {
                        let realy = this.getSimpleCheckedNodes(this.$refs.tree.store);
                        let arrId = [],
                            arrName = [],
                            arr1 = [],
                            arr2 = [],
                            arr3 = []
                        realy.forEach(i => {
                            if (i.level == 1) {
                                arr1.push(i.id)
                            }
                            if (i.level == 2) {
                                arr2.push(i.id)
                            }
                            if (i.level == 3) {
                                arr3.push(i.id)
                            }
                            arrId.push(i.id);
                            arrName.push(i.label)
                        })
                        this.selectedId = arrId;
                        this.selectedProvince = arr1;
                        this.selectedCity = arr2;
                        this.selectedArea = arr3;
                        this.selectedName = arrName;

                    },
                    getSimpleCheckedNodes(store) {
                        const checkedNodes = [];
                        const traverse = function (node) {
                            const childNodes = node.root ? node.root.childNodes : node.childNodes;

                            childNodes.forEach(child => {
                                if (child.checked) {
                                    checkedNodes.push(child.data);
                                }
                                if (child.indeterminate) {
                                    traverse(child);
                                }
                            });
                        };
                        traverse(store)
                        return checkedNodes;
                    },
                    filterNode(value, data) {
                        if (!value) return true;
                        return data.label.indexOf(value) !== -1;
                    },
                    define() {
                        let data = {
                            province: this.selectedProvince,
                            city: this.selectedCity,
                            area: this.selectedArea,
                            name: this.selectedName
                        }
                        Fast.api.close({
                            data: data
                        })
                    },

                },
                watch: {
                    filterText(val) {
                        this.$refs.tree.filter(val);
                    },
                    checked(val) {
                        if (val) {
                            this.selectedId = [];
                            this.selectedName = [];
                            this.selectedProvince = [];
                            this.selectedCity = [];
                            this.selectedArea = [];
                            this.pcaData.forEach(i => {
                                this.selectedId.push(i.id);
                                this.selectedName.push(i.label);
                                this.selectedProvince.push(i.id)
                            });
                            this.$refs.tree.setCheckedNodes(this.selectedId)
                        } else {
                            this.selectedId = [];
                            this.selectedName = [];
                            this.selectedProvince = [];
                            this.selectedCity = [];
                            this.selectedArea = [];
                            this.$refs.tree.setCheckedNodes(this.selectedId)
                        }
                    },

                },
            })
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            }
        }
    };
    return Controller;
});