"use strict";
layui.extend({
    common    :   'js/common',
    xmSelect    :   'layui/dist/xm-select',
}).use(['jquery','layer','common','upload','form','xmSelect'],function () {
    //  弹窗插件
    var layer = layui.layer;
    //  Jquery插件
    var $ = layui.jquery;
    //  引入下拉列表组件
    var xmSelect = layui.xmSelect;
    //  引入公共模块
    var common = layui.common;

    //  页面数据
    var pageData = {
        //  可操作的机构列表
        'orgList'   :   undefined,
        //  文件上传弹出层下标
        'uploading' :   undefined,
        //  当前用户机构Id
        'myOrgId'   :   parseInt($('#user_org_id').val())
    };

    //  页面节点
    var $node = {
        //  头像字段
        'portraitInput'     :   $('input[name="userPortraitUri"]'),
        //  头像预览
        'portraitPreviewImg':   $('#file_preview'),
        //  机构下拉框
        'orgSelect'         :   $('select[name="orgId"]'),
        //  确认密码字段
        'confirmPwdInput'   :   $('input[name="confirmLoginPwd"]'),
        //  角色列表
        'roleList'          :   $('#role_list'),
        //  取消按钮
        'resetBtn'      :   $('button[type="reset"]')
    };

    //  初始化事件
    (function(){

        //  拖拽上传
        layui.upload.render({
            elem: '#file_upload'
            //  上传接口
            ,url: '/common/file/upload'
            ,exts: 'jpg|png|jpeg'
            //  自动上传
            ,auto: true
            //  文件提交上传前的回调
            ,before :   function(obj){
                //  图片预览
                obj.preview(function(index, file, result){
                    $node.portraitPreviewImg.attr('src', result);
                });
                //  上传提示
                pageData.uploading = layer.msg('文件上传中', {
                    icon: 16,
                    shade: 0.4,
                    time:false
                });
            }
            ,done: function(result){
                //  关闭上传提示
                layer.close(pageData.uploading);
                if (result.code === '200'){
                    //  上传成功
                    $node.portraitInput.val(result.data.fullPath);
                }else {
                    this.error();
                }
            }
            ,error  :   function(){
                layer.msg('头像上传失败');
                $node.portraitPreviewImg.removeAttr('src');
                $node.portraitInput.val('');
            }
        });

        //  提交表单
        layui.form.on("submit(entity_insert_filter)",function(data){
            common.timer($('button[lay-filter="entity_insert_filter"]'));
            //  拼接选中的角色Id
            var roleIds = '';
            if ($('input[name="roleIds"]').length == 0){
                layer.msg("请先创建角色！");
                return;
            }
            $('input[name="roleIds"]:checked').each(function () {
                roleIds += $(this).val() + ',';
            });
            data.field.roleIds = roleIds;
            $.ajax({
                url     :   '/permissions/account/add',
                data    :   data.field,
                type    :   'POST',
                success :   function(){
                    $node.resetBtn.click();
                    parent.location.reload();
                },
            });
        });

        let orgType = '1';
        //归属机构下拉列表
        var orgSelect = xmSelect.render({
            el: '#org_name',
            radio: true,
            toolbar: {
                show: true,
                list: [{
                    name: '内部',
                    method : function(data){
                        orgType = 1;
                        orgSelect.update({data : orgList(orgType)})
                    }
                },{
                    name: '小区',
                    method : function(data){
                        orgType = 6;
                        orgSelect.update({data : orgList(orgType)})
                    }
                },{
                    name: '社区',
                    method : function(data){
                        orgType = 4;
                        orgSelect.update({data : orgList(orgType)})
                    }
                }]
            },
            prop: {
                name: 'name',
                value: 'id',
            },
            clickClose: true,
            filterable: true,
            remoteSearch: true,
            remoteMethod: function (val, cb, show) {
                $.ajax({
                    type: 'GET',
                    url: '/permissions/org/getListByLikeName',
                    data: {
                        name : val,
                        flag : 1,
                        orgType: orgType,
                        isSelect : true,
                    },
                    success: function (result) {
                        cb(result.list);
                    },
                    error: function () {
                        cb([]);
                    }
                });
            },
            //监听选择
            on: function (data) {
                let change = data.change;
                if (change.length > 0) {
                    $('input[name="orgId"]').val(change[0].id)
                }
                if (!data.isAdd) {
                    $('input[name="orgId"]').val('');
                }
            },
            //监听隐藏
            hide : function(){
                orgType = ''
            },
            //显示方式
            model: {
                label: {
                    type: 'text',
                    text: {
                        //左边拼接的字符
                        left: '',
                        //右边拼接的字符
                        right: '',
                        //中间的分隔符
                        separator: ', ',
                    },
                }
            },
        });
        function orgList(type){
            let list = [];
            layui.common.sendSyncRequest("/permissions/org/getListByLikeName", 'get', {flag : 1, orgType : type, isSelect : true}, function (result) {
                list = result.list;
            });
            return list;
        }

        //  表单校验
        layui.form.verify({
            //  用户名校验
            specialCharacters : function (value) {
                if(!/^[a-zA-Z0-9_\u4e00-\u9fa5\s·]+$/.test(value)){
                    return '名称不能有特殊字符';
                }
                if(/(^\_)|(\__)|(\_+$)/.test(value)){
                    return '名称首尾不能出现下划线\'_\'';
                }
                if(/^\d+\d+\d$/.test(value)){
                    return '名称不能全为数字';
                }
            },
            userName : function(value){
                if (value.length > 10){
                    return  '最多只能输入10个字符!'
                }
            },
            //  登陆名
            loginName   :   function(value){
                if (value.length < 3 || value.length > 8){
                    return  '登录名长度限制为3-8个字符!'
                }
            },
            //  密码校验
            password   : [
                /^[\S]{6,12}$/
                ,'密码必须6到12位,且不能出现空格'
            ],
            //  确认密码
            passwordRe  :   function(value){
                var oldPassword = $('#old_password').val();
                if (oldPassword !== value){
                    return '与前面输入的密码不一致';
                }
            },
            checkboxRequired: function (value) {
                if (!$("input[name='roleIds']").is(":checked")) {
                    return "请选择用户角色";
                }
            }
        });

        //  取消按钮
        $node.resetBtn.on('click',function(){
            //  关闭当前页面弹窗
            var index = parent.layer.getFrameIndex(window.name);
            parent.layer.close(index);
        });

    })();

    // //  加载可操作的机构列表
    // $.ajax({
    //     url     :   '/permissions/org/getList',
    //     success :   function(result) {
    //         pageData.orgList = result.list;
    //         pageData.orgList.forEach(function(item){
    //             $node.orgSelect.append('<option value="' + item.id + '">' + item.name + '</option>');
    //         });
    //         //  重新渲染select标签
    //         layui.form.render('select');
    //     }
    // });

    //  获取当前用户机构下的角色列表
    $.ajax({
        url     :   '/permissions/account/getMyOrgRoleList',
        success :   function(result){
            result.list.forEach(function(item){
                $node.roleList.append('<input type="checkbox" name="roleIds" lay-skin="primary" lay-verify="checkboxRequired" value="' + item.id + '" title="' + item.name + '" />');
            });
            layui.form.render('checkbox');
        }
    });

});