Namespace.register("U.CD.RT");
//注册右边个人项目栏js。把右边的树的js全部搬到这个地方。

///
U.CD.RT.Init = function () {
}

//-------------------------------------------------------------右边树目录的创建----------------------------------------------------------------
//当获取用户数据后装载用户的右边树节点。第一个参数是后台返回数据，第二个参数为当前选择的项目，如果没有这个参数，则默认显示第一个项目
U.CD.RT.LUDataAsyn = function (r) {

    U.CD.LO.OpenZY();
    //打开资源管理器
    var _ld = r.context[0];
    (_ld) && (_ld.parentNode.removeChild(_ld));
    var i, _pnum = 0;
    if (r.value == "" || r.value == "null") {
        //添加改用户的基本信息，后台会判断是否为合法用户,用在后台传递认证的方式已经解决。
        //U.ACD.Request(U.CD.AjaxUrl, ([type, userid, node.ID, node.Deep, Guid.newGuid(), input.value]), U.CD.RT.CP_OKAsyn, ([""]));
        U.UI.Confirm("没取到该用户数据，确认重新获取！", [U.CD.U.LUData, ([US.userinfo])], "");
        return;
    }
    //这个要注释。这是基本数据结构，他的合理性牵涉到前台所有代码的规范性。
    //var _u = eval("(" + r.value + ")"); //由于r.value带了双引号，必须按照这种方式进行转换。比较奇特。
    var _u = r.value;
    //由于r.value带了双引号，必须按照这种方式进行转换。比较奇特。
    U.CD.U.CUser = U.CD.U.AUsers[_u.UserID] = _u;
    //集合加数组功能。//添加进用户集合中。同时赋予当前操作用户。
    var L = _u.TNode[0].TNode;
    //这要注释。TNode代表用户项目目录的标识。第一个TNode代表了根目录。第二个TNode代表了根目录的所有孩子节点。

    //右边树目录区域，上面为资源管理器，下边为树目录。
    var _mdiv = $("#UCD_RTree")[0];
    _mdiv.innerHTML = "";
    //清空以前用户数据。
    //设置资源管理器样式
    var _zygl = $$("div", {
        "className": "UCD_RT_Root"
    }, _mdiv);
    //资源管理器
    //    var _gl = $$("div", { "className": "UCD_RT_Root_TJ" }, _zygl);
    //    for (i = 0; i < L.length; i++) { if (!L[i].IsDelete) _pnum++; } //统计项目个数
    $$("div", {
        "className": "UCD_RT_Root_TJ_NR",
        "innerHTML": "资源管理器"
    }, _zygl);
    $$("div", {
        "className": "UCD_TT_T_X",
        "onclick": [[U.CD.LO.CloseZY]],
        "style": {
            "margin": "3px"
        },
    }, _zygl);
    //    var _zy = $$("div", { "className": "UCD_RT_Root_ZY" }, _zygl);
    //    $$("div", { "className": "UCD_RT_Root_Z", "innerHTML": "资源管理器" }, _zy);
    //如果用户已经登录，才能有创建项目按钮
    //    if (U.CD.U.IsUSelf())
    //        $$("div", { "className": "UCD_RT_Root_C", "innerHTML": "创建项目", "onclick": [[U.CD.RT.CProject, ([_u.UserID, _u.TNode[0]])]] }, _zy); //创建项目按钮
    //如果是查看其它人的资料，需要屏蔽树的操作菜单，屏蔽掉保存按钮，屏蔽掉用户登录。关闭示例项目
    if (!U.CD.U.IsUSelf())
        U.CD.Url.ForbUser();

    ///清理掉以前项目的所有数据。

    //如果传递了项目id，则选中该项目,否则，选取第一个项目。    ///装载现有项目的数据。实现选中当前项目和当前文件的功能。
    //因为有些节点被删除了，IsDelete=true。不能作为第一个节点。按道理数据库就不应该筛选出来，以后再搞！！！！
    var _cp = r.context[1], _sel, _cso;
    //定义当前选中的节点,
    //此处需要清空数组，那么清空数组功能需要放在UC去实现。参考1473上面贴出的文章。
    if (_cp) {
        for (i = 0; i < L.length; i++) {
            if (L[i].ID == _cp) {
                _sel = L[i];
                L = [];
                L.push(_sel);
                break;
            }
        }
    } else {
        for (i = 0; i < L.length; i++) {
            if (!L[i].IsDelete) {
                _sel = L[i];
                break;
            }
        }
    }

    //创建树的总面板。
    var TreeDiv = $$("div", {
        "id": "UCD_RT_Tree"
    }, _mdiv)
    for (i = 0; i < L.length; i++) {
        U.CD.RT.F_L_Node(L[i], _u.UserID, TreeDiv);
    }
    //遍历每个节点。    //生成右边树结构。

    //指定当前项目和文件
    if (!_sel)
        return;
    //如果找不到项目，则返回
    _cso = TreeDiv.getElementsByTagName("div")["UCD_Tree" + _sel.ID];
    //找到树节点。
    if (_sel)
        U.CD.RT.SM(_cso, _u.UserID, _sel);
    //如果有子项目，展开第一个项目。

    //选中第一个文件节点。也要循环判断是否删除了。晕，以后一定后台解决此问题。
    var _ffile = null;
    for (i = 0; i < _sel.TNode.length; i++) {
        if (!_sel.TNode[i].IsDelete && _sel.TNode[i].Type == "file") {
            _ffile = _sel.TNode[i];
            break;
        }
    }
    if (_ffile) {
        _ffile.Content = unescape(_ffile.Content);
        U.CD.R.LoadFC(_ffile);
    }

    if (_ffile && _ffile.Name)
        document.title = _ffile.Name;
    //设置网页标题

}

//不知道什么原因，有可能mongodb，mysql不稳定，有时候取不到数据，此函数刷新页面，重新获取数据
//U.CD.RT.LUDReload = function () { U.CD.Init(); }

//右边子元素
U.CD.RT.CLV = function (L, UDOD, UUID) {
    var _UDFD = document.createDocumentFragment();
    for (var i = 0; i < L.length; i++) {
        U.CD.RT.F_L_Node(L[i], UUID, _UDFD);
        //遍历每个节点。
    }
    UDOD.appendChild(_UDFD);
}

//每个节点的信息。，参数1为单个节点node，参数2为用户id,参数3为所有节点的文档碎片。
U.CD.RT.F_L_Node = function (node, UUID, _UDFD) {
    var _UDIC, _UDTD, UDSD, _UDA;
    if (node.IsDelete)
        return;
    //不列出已经删除的节点。
    if (node.Deep == "2") {
        _UDIC = "UCD_RT_ProIcon";
    }//项目图标。
    else {
        _UDIC = "UCD_RT_FolderIcon";
    }
    //文件夹图标。
    if (node.Type == "file") {
        if (U.UP.IsImg(node.Name))
            _UDIC = "UCD_RT_USTreeAlbumIcon";
        else
            _UDIC = "UCD_RT_FileIcon";
    }
    //文件图标
    _UDTD = $$("div", {
        "className": "UCD_RT_USTreecontainA",
        "onclick": [[U.M.StopBubble], [U.CD.RT.DBC, ([node.ID])]]
    }, _UDFD);
    _UDSD = $$("div", {
        "className": "UCD_RT_USTTitle",
        "id": "UCD_Tree" + node.ID,
        "onclick": [U.CD.RT.SM, (["retElement", UUID, node])]
    }, _UDTD);
    $$("div", {
        "className": "UCD_RT_DiskGE UCD_RT_I_D_E UCD_RT_USTreesign"
    }, _UDSD);
    _UDA = $$("a", {
        "className": "UCD_RT_USTreeusestudiodisktreeA",
        "title": node.Name
    }, _UDSD);
    //if (U.CD.U.IsUSelf())
        U.CD.RT.F_OP(_UDSD, UUID, node);
    //如果用户已经登录、增加一个增删查改功能
    $$("i", {
        "className": "UCD_RT_Icon " + _UDIC
    }, _UDA);
    $$("span", {
        "innerHTML": node.Name
    }, _UDA);

}

//文件夹和文件操作面板
U.CD.RT.F_OP = function (_UDTD, userid, node) {
    var _ZSCG = $$("div", {
        "className": "UCD_RT_ZSCG"
    }, _UDTD);
    var _c;
    if (node.Type == "folder") {
        _c = $$("div", {
            "className": "UCD_RT_ZSCG_T",
            "title": "发布项目！",
            "innerHTML": "✿",
            "onclick": [[U.M.StopBubble], [U.CD.RT.Panel, (["retElement", userid, node])]]
        }, _ZSCG);
        //统一设置面板
    } else
        _c = $$("div", {
            "className": "UCD_RT_ZSCG_T",
            style: {
                "margin-left": "-10px"
            },
            "title": "发布项目！",
            "innerHTML": "✿",
            "onclick": [[U.M.StopBubble], [U.CD.RT.Panel, (["retElement", userid, node])]]
        }, _ZSCG);
    //统一设置面板

}

//伸展树形目录。
U.CD.RT.SM = function (SO, UUID, node) {
    if (node.Type == "folder") {
        U.CD.U.CUser.CurrentSO = SO.parentNode;
        U.CD.U.CUser.CurrentNode = node;
    }
    //记录当前单击文件夹节点
    var _pre = U.CD.U.CUser.PreClickNode;
    if (_pre)
        _pre.style.backgroundcolor = "white";
    //清除上次单击节点的样式。
    if (node.Type == "file") {
        node.Content = unescape(node.Content);
        U.CD.R.LoadFC(node);
        return;
    }
    //如果单击的是文件，打开文件。
    var _UDOB = $("div", SO)[0];
    //获取点击目录里的a标签 修改里的样式和获取id
    var _L = $("div", SO.parentNode).length - 3;
    //获取张开的孩子,增加一个功能就要修改这里，，要有统一处理方案。
    var _CT = "UCD_RT_DiskGE UCD_RT_I_D_E UCD_RT_USTreesign";
    //伸张的样式
    if (_L > 1) {
        SO.parentNode.removeChild(SO.parentNode.lastChild);
    }//未伸展
    else {
        //伸展
        //var _VA = U.CD.U.CUser.TNode.Select({ "ID": UDID })[0].TNode; //选取需要展示的数据。   U.Entity还需要继续改写。。。
        var _VA = node.TNode;
        //获取节点的子节点，选取需要展示的数据。   U.Entity还需要继续改写。。。
        if (_VA != null) {
            U.CD.RT.LV(_VA, SO.parentNode, UUID);
            _CT = "UCD_RT_DiskGE UCD_RT_I_D_S UCD_RT_USTreesign";
        }
        //展开所有的子目录
    }
    _UDOB.className = _CT;
    //伸缩的杨思
    U.CD.RT.VM(SO, UUID, node);
    //改变单击的样式
}
//这里是说明右边的树形栏视图
U.CD.RT.LV = function (L, UDD, UUID) {
    var _UDOD = $$("div", {
        "style": {
            "marginLeft": "10px"
        }
    }, UDD);
    U.CD.RT.CLV(L, _UDOD, UUID);
}
//单击菜单时的效果 伸缩时候的点击元素效果
U.CD.RT.VM = function (SO, userid, node) {
    //if (US.Disk.diskfileTree[1][5]) { $(US.Disk.diskfileTree[1][5]); US.Disk.diskfileTree[1][5].style.border = "0"; US.Disk.diskfileTree[1][5].style.backgroundColor = ""; } //删除上次点击左边菜单变化的a标签
    SO.style.backgroundColor = "rgb(234, 234, 234)";
    //颜色变化
    U.CD.U.CUser.PreClickNode = SO;
    //把变化的对象放入 下次点击清理
    //记录当前选中节点,以便新建文件时使用，其他地方也可以使用。此处需要找孩子节点才方便，否则，需要修改程序。
    //if (node.Deep == 2) { U.CD.U.CUser.CurrentSO = SO.parentNode; U.CD.U.CUser.CurrentNode = node; }//为啥要深度等于2？

}
U.CD.RT.DBC = function () { }

//-----------------------------------------------------------新建一个项目，或者文件夹。---------------------------------------------------

//新建控制面板。

U.CD.RT.Panel = function (SO, userid, node) {
    var _UDUP = $("#UCD_RT_FUP")[0]
      , _UDUT = $("#UCD_RT_FUPCT")[0];
    //获取命令窗口
    var _NR = $("#UCD_RT_FUPCC")[0];
    _NR.innerHTML = "";
    //获取内容窗口
    _UDUT.innerHTML = "当前目录：<span>" + node.Name + "</span>。";
    //如果是文件夹或者项目则创建相应菜单，否则是文件，创建相应菜单。
    if (node.Type == "folder") {
        //暂时做到这样，以后再加图标，美化界面
        $$("div", {
            "className": "UCD_RT_Com",
            "innerHTML": "新建子文件夹",
            "onclick": [[U.M.StopBubble], [U.CD.RT.CP_CF, ([SO, userid, node])]]
        }, _NR);
        //新建文件夹
        $$("div", {
            "className": "UCD_RT_Com",
            "innerHTML": "修改文件夹",
            "onclick": [[U.M.StopBubble], [U.CD.RT.CP_M, ([SO, userid, node])]]
        }, _NR);
        //修改
        $$("div", {
            "className": "UCD_RT_Com",
            "innerHTML": "删除文件夹",
            "onclick": [[U.M.StopBubble], [U.CD.RT.CP_DF, ([SO, userid, node])]]
        }, _NR);
        //删除
        $$("div", {
            "className": "UCD_RT_Com",
            "innerHTML": "新建文件",
            "onclick": [[U.M.StopBubble], [U.CD.RT.CP_NF, ([SO, userid, node])]]
        }, _NR);
        //新建文件
        var _up = $$("div", {
            "className": "UCD_RT_Com UCD_RT_TreeIcon",
            "innerHTML": "上传照片"
        }, _NR);
        //上传图片
        $$("input", {
            "id": "UCD_RT_Com_Up",
            "name": "UCD_RT_Com_Up",
            "type": "file",
            "multiple": "true",
            "accept": "image/gif,image/jpeg,image/png",
            "onchange": [[U.CD.O.TreeUPFile, (["retElement"])]]
        }, _up);

        if (node.Deep == 2)
            $$("div", {
                "className": "UCD_RT_Com",
                "innerHTML": "发布项目和作业",
                "onclick": [[U.M.StopBubble], [U.CD.SL.Publish, ([SO, userid, node])]]
            }, _NR);
        //上传图片
    } else {
        $$("div", {
            "className": "UCD_RT_Com",
            "innerHTML": "修改文件名",
            "onclick": [[U.M.StopBubble], [U.CD.RT.CP_M, ([SO, userid, node])]]
        }, _NR);
        //修改文件名
        $$("div", {
            "className": "UCD_RT_Com",
            "innerHTML": "删除文件",
            "onclick": [[U.M.StopBubble], [U.CD.RT.CP_DF, ([SO, userid, node])]]
        }, _NR);
        //删除文件
    }
    if (_UDUP.style.display == "none") {
        U.D.PopupWindow(_UDUP);
    }
    //onclick直接响应
}

//创建一个项目，从根节点创建,SO代表根节点。userid用户id，node是节点信息
U.CD.RT.CProject = function (userid, node) {
    //使用统一的创建对话框，减少代码量，传递不同的回调处理函数。js太智能。
    U.CD.RT.NDialog("创建新项目", U.CD.RT.CP_OK, ([$("#UCD_RT_Tree")[0], userid, node, "Add_Folder"]));
}
//新建一个文件夹，从子节点创建
U.CD.RT.CP_CF = function (SO, userid, node) {
    U.CD.RT.NDialog("新建文件夹", U.CD.RT.CP_OK, ([SO, userid, node, "Add_Folder"]));
}
//新建一个文件。
U.CD.RT.CP_NF = function (SO, userid, node) {
    U.CD.RT.NDialog("新建文件,请自己添加扩展名！", U.CD.RT.CP_OK, ([SO, userid, node, "Add_File"]));
}

U.CD.RT.Display = function () {
    $("#UCD_RT_FUP")[0].style.display = "none";
}

//新建项目或者文件夹或者修改公用弹出对话框函数。//参数1为Title，参数2为异步回调函数,参数3为异步函数参数数组。
U.CD.RT.NDialog = function (T, C, P) {
    var _UFFD = $$("div", {
        "className": "UCD_TR_CP"
    });
    //调用主项目对话框，并构建一个显示用的Div。
    $$("div", {
        "className": "UCD_TR_CP_T",
        "innerHTML": "您操作的当前目录为：<span style='color:red;'>" + P[2].Name + "</span>"
    }, _UFFD);
    //项目名称输入input
    $$("div", {
        "className": "UCD_TR_CP_MS",
        "innerHTML": "请输入名称："
    }, _UFFD);
    //项目名称输入input
    var _p = $$("input", {
        "className": "UCD_RT_CP_Input"
    }, _UFFD);
    P.push(_p);
    //追加input为参数数组。居然后面函数参数的能自动拆分此数组？
    //创建项目一定是在根元素下面。
    var _CUM = new U.UI.Dialog(T, {
        "width": "350px"
    }, null, U.M.apply(_UFFD, [[C, P]]), _UFFD);
    //js太智能了，可以自由拼凑参数！
    U.D.PopupWindow(_CUM.Create());
}

//创建项目、文件夹、文件的函数,
//参数为SO 为触发事件的页面元素，用户id ,node为父亲节点,input为新节点的input,不能直接传值,type为类型,文件或者目录，
U.CD.RT.CP_OK = function (SO, userid, node, type, input, content) {
    //节点基本信息,名字和id，id由前台生成。
    var _fname = input.value, _fid = Guid.newGuid(), _nnode;
    if (!U.CD.RT.VName(userid, _fname, type)) {
        alert("名字不符合规范或者存在同名文件！");
        return;
    }
    //前台添加一个节点，数组中也要添加节点。
    if (type == "Add_File")
        _nnode = {
            "Name": _fname,
            "CreateDate": new Date(),
            "Type": "file",
            "Content": "",
            "ID": _fid,
            "Deep": parseInt(node.Deep) + 1,
            "IsPublic": true
        };
    else
        _nnode = {
            "Name": _fname,
            "CreateDate": new Date(),
            "Type": "folder",
            "ID": _fid,
            "Deep": parseInt(node.Deep) + 1,
            "TNode": [],
            "IsPublic": true
        };
    var L = [];
    L.push(_nnode);
    //追加一个节点，传递几个参数就追加几个。这种方式不科学，以后再改。因为硬盘是这样写的。

    //如果不是根目录,或者className不是SO本身，需要找到添加子文件夹的父亲元素。
    if (node.Deep > 1 && SO.className != "UCD_RT_USTreecontainA")
        SO = SO.parentNode.parentNode.parentNode;

    node.TNode.push(_nnode);
    //同时向前台json中追加数据，没有json树真麻烦啊。。做json树操作是一定的。
    if (node.Deep == "1")
        U.CD.RT.CLV(L, $("#UCD_RT_Tree")[0], userid);
        //根节点添加孩子节点，不会有margin右移操作
        //向前台追加树结点。//如果连续追加多个，会多出很多margin:10px父亲节点，会出问题。
    else if (SO.childNodes.length == 2) {
        U.CD.RT.CLV(L, SO.lastChild, userid);
        ;
    } else {
        U.CD.RT.LV(L, SO, userid);
    }

    //记录当前选中节点,以便新建文件时使用，其他地方也可以使用。此处需要找孩子节点才方便，否则，需要修改程序。
    if (_nnode.Deep == 2) {
        U.CD.U.CUser.CurrentSO = SO.lastChild;
        U.CD.U.CUser.CurrentNode = _nnode;
    }

    //后台添加一个节点。传递了用户id，根元素id，根元素深度，新节点guid，新节点名字。
    U.ACD.Request(U.CD.AjaxUrl, ([type, userid, node.ID, node.Deep, _nnode.ID, _nnode.Name]), U.CD.RT.CP_OKAsyn, ([""]));
}
//添加项目异步。是否添加成功或者失败,异步回调函数
U.CD.RT.CP_OKAsyn = function (r) {
    if (r.value == "false" || r.value == "") {
        alert("添加失败，点此反馈信息");
        return;
    }
    //var _node = eval("(" + r.value + ")"); //如果是文件添加成功，则刷新代码页面。
    var _node = r.value;
    //如果是文件添加成功，则刷新代码页面。
    //如果是文件夹，则把焦点至于当前文件夹

    //更新树节点。否则树和节点不同步。
    if (_node.Type == "file") {
        U.CD.R.LoadFC(_node);
        //刷新代码和视图，选项卡，换行窗口。
    }
    alert("添加成功");
}

//--------------------------------------------------------------------删除功能确认----------------------------------------------------
U.CD.RT.CP_DF = function (SO, userid, node) {
    //L = L.Select({ "ID": id })[0]; //查找到指定节点。//从数据库删除，通过id如何查找其父亲节点？这是一个问题，U.E.Entity应该能够解决此问题。
    U.UI.Confirm("你确定删除 <span style='color:blue;'>" + node.Name + "</span>分组吗？", [U.CD.RT.CP_D, ([SO, userid, node])], "");
    var len = document.getElementsByClassName('UD_SYF_S UD_SYKO').length;
    var len_t = document.getElementsByClassName('UD_SYF_ST').length;
    var len_th = document.getElementsByClassName('UD_SYF_SS UD_SYI').length;
    var len_f = document.getElementsByClassName('U_UI_OBY').length;
    /*for(var izus = 0;izus<len;izus++){
        document.getElementsByClassName('UD_SYF_S UD_SYKO')[izus].style.cssText="box-shadow: 0 0 0px 0px #fff;display:block;width: auto;height: auto;min-width: 300px;display: block;left: 578.5px;top: 400px;z-index: 9999;border-radius:0;-webkit-border-radius:0;"
    }*/
    for (var izuss = 0; izuss < len_t; izuss++) {
        document.getElementsByClassName('UD_SYF_ST')[izuss].style.cssText = "background: url(../images/navigation.png);box-shadow: rgb(136, 136, 136) 0px 1px 2px;height:18px";
    }
    for (var j = 0; j < len_th; j++) {
        document.getElementsByClassName('UD_SYF_SS UD_SYI')[j].style.cssText = "width: 18px;height: 17px;margin-right: 6px;margin-top: 3px;";
    }
    for (var z = 0; z < len_f; z++) {
        document.getElementsByClassName('U_UI_OBY')[z].onmouseover = function () {
            this.style.background = "#3b3b3b";
        }
        document.getElementsByClassName('U_UI_OBY')[z].onmouseout = function () {
            this.style.background = "#bbb";
        }
    }
}
//删除功能
U.CD.RT.CP_D = function (SO, userid, node) {
    //首先前台删除该节点//找到节点位置
    SO = SO.parentNode.parentNode.parentNode;
    SO.parentNode.removeChild(SO);
    U.ACD.Request(U.CD.AjaxUrl, (["Delete_Folder", userid, "0", node.ID]), U.CD.RT.CP_DAsyn, (["", node]));
    U.CD.RT.Display();
}
//删除功能异步函数。
U.CD.RT.CP_DAsyn = function (r) {
    var node = r.context[1];
    if (r.value) {
        //清理Tab和代码栏目
        var _UFUL = $("#UCD_CT_Top_Tab")[0].getElementsByTagName("ul")[0];
        //获取Tab栏
        var UFLI = _UFUL.getElementsByTagName("li")["Tab" + node.ID];
        //如果找到了节点，关闭节点，否则，直接提示删除。
        if (UFLI) {
            U.CD.CloseEdit(_UFUL, UFLI, node);
            alert("删除节点" + node.Name + "成功！");
        } else
            alert("删除成功");
    } else
        alert("删除失败");
}

//----------------------------------------------------------------------修改功能----------------------------------------------------
U.CD.RT.CP_M = function (SO, userid, node) {
    U.CD.RT.NDialog("修改操作！！！", U.CD.RT.CP_MOK, ([SO, userid, node]));
}
//修改操作
U.CD.RT.CP_MOK = function (SO, userid, node, input) {
    var _fname = input.value;
    //只能传递input,否则是空值。
    if (!U.CD.RT.VName(userid, _fname)) {
        alert("名字不符合规范或者存在同名文件！");
        return;
    }
    SO.parentNode.parentNode.getElementsByTagName("span")[0].innerHTML = _fname;
    //修改名称。
    U.ACD.Request(U.CD.AjaxUrl, (["Update_Folder", userid, "0", node.ID, _fname]), U.CD.RT.CP_MOKAsyn, ([""]));
    U.CD.RT.Display();
}
U.CD.RT.CP_MOKAsyn = function (r) {
    r.value ? alert("修改成功") : alert("修改失败");
}

//---------------------------------公用函数--------------------------------------------
//检查名字是否符合规范，在当前文件夹中是否存在同名文件
U.CD.RT.VName = function (userid, _fname, type) {
    var _ut = U.CD.U.AUsers[userid];
    //找到用户在用户集合中的树信息。
    //if (type == "Add_File") { if (!U.MS.FileName.test(_fname)) return false; } //如果是文件，则匹配文件名。文件名还是允许输入中文，不然新手很不习惯。//else { 
    if (!U.MS.ZWFileName.test(_fname))
        return false;
    //借用了登陆注册的正则表达式，检验名字是否符合规范。
    //U.E.Entity需要继续改写,此处要改写，没判断删除的文件夹
    if (_$(_ut.TNode).FindOne({
        "Name": _fname,
        "IsDelete": false
    }))
        return false;
    return true;
}
