123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- ;
- spa_define(function() {
- return $.use(["util", "form", "dict", "spa", "code", "form"], function(util, form, dict, spa, code, form) {
- var ahref = { an: "href", av: "javascript:;" };
- return {
- modal: function(data) {
- var root = spa.findInModal(".sys_user_menu"),
- g_max_menu_code = 1;
- root.find(".modal-ctrl .icon-times").on("click", function() {
- spa.closeModal();
- });
- var treeCnt = root.find(".main .nav"),
- menuData = data.children,
- reses = data.reses;
- hand = code.parseCode(root.find(".info")),
- editForm = {};
- var findByCode = function(c, items) {
- var ret;
- for(var i = 0; i < items.length; ++i) {
- var item = items[i];
- if(item.code === c) return item;
- if(item.children && item.children.length) {
- ret = findByCode(c, item.children);
- if(ret) return ret;
- }
- }
- };
- var paint = function(ul, items, pc) {
- items.forEach(function(item) {
- if(item.code > g_max_menu_code) {
- g_max_menu_code = item.code;
- }
- var li = { tn: "li" },
- attrs = li.attrs = [{ an: "class", av: "leaf-item" }];
- chs = li.chs = [];
- ul.chs.push(li);
- attrs.push({ an: "code", av: item.code });
- attrs.push({ an: "pcode", av: pc || "" });
- var icon = {
- tn: "i",
- attrs: [{ an: "class", av: "icon icon-" + item.icon }]
- };
- chs.push(icon);
- chs.push({ tn: "a", attrs: [ahref], chs: [item.caption] });
- if(item.children && item.children.length) {
- li.attrs[0].av = "branch-item";
- var cul = { tn: "ul", chs: [] };
- chs.push(cul);
- paint(cul, item.children, item.code);
- }
- });
- };
- var refreshTree = function() {
- var ul = { tn: "ul", chs: [] };
- paint(ul, menuData);
- treeCnt.empty();
- util.appendChild(treeCnt[0], ul);
- hand.empty();
- editForm.oc = null;
- editForm.pc = null;
- editForm.form = null;
- };
- var findParentArray = function(pc) {
- if(pc) {
- var items = findByCode(pc, menuData);
- return items ? (items.children ? items.children : null) : null;
- }
- return menuData;
- };
- var movePrev = function() {
- if(editForm.oc) {
- var items = findParentArray(editForm.pc);
- if(items) {
- var i = 0;
- for(; i < items.length; ++i) {
- if(items[i].code === editForm.oc) {
- break;
- }
- }
- if(i > 0 && i < items.length) {
- var item1 = items[i],
- item0 = items[i - 1];
- items.splice(i - 1, 2, item1, item0);
- refreshTree();
- }
- }
- }
- };
- var moveNext = function() {
- if(editForm.oc) {
- var items = findParentArray(editForm.pc);
- if(items) {
- var i = 0;
- for(; i < items.length; ++i) {
- if(items[i].code === editForm.oc) {
- break;
- }
- }
- if(i < (items.length - 1)) {
- var item1 = items[i],
- item0 = items[i + 1];
- items.splice(i, 2, item0, item1);
- refreshTree();
- }
- }
- }
- };
- var deleteItem = function(pc, oc) {
- if(editForm.oc) {
- var items = findParentArray(editForm.pc);
- if(items) {
- var i = 0;
- for(; i < items.length; ++i) {
- if(items[i].code === editForm.oc) {
- break;
- }
- }
- if(i < items.length) {
- items.splice(i, 1);
- refreshTree();
- }
- }
- }
- };
- var fillEdit = function(pc, di) {
- if(pc && typeof pc === "string") {
- pc = parseInt(pc);
- }
- hand.val();
- editForm.form = form.build(root.find(".info"), { res: { ready: true, items: reses } });
- editForm.pc = pc;
- editForm.oc = di.code;
- editForm.form.val(di);
- };
- root.on("click", ".nav li", function(evt) {
- var $this = $(this);
- if($this.hasClass("branch-item")) {
- $this.toggleClass("open");
- }
- var di = findByCode(parseInt($this.attr("code")), menuData);
- if(di) {
- fillEdit($this.attr("pcode"), di);
- }
- evt.stopPropagation();
- });
- root.on("click", ".opt-newroot", function() {
- fillEdit("", {});
- });
- root.on("click", ".opt-new", function() {
- fillEdit(editForm.oc, {});
- });
- root.on("click", ".opt-prev", function() {
- movePrev();
- });
- root.on("click", ".opt-next", function() {
- moveNext();
- });
- root.on("click", ".opt-del", function() {
- deleteItem();
- });
- root.on("click", ".opt-ok", function() {
- if(editForm.form.validate()) {
- var item = editForm.form.val();
- if(editForm.oc) {
- di = findByCode(editForm.oc, menuData);
- if(di) {
- di.caption = item.caption;
- di.modal = false;
- if(item.res) {
- di.res = item.res;
- di.icon = item.icon || "book";
- } else {
- di.res = null;
- di.icon = item.icon || "branch";
- }
- refreshTree();
- }
- } else {
- var items = menuData;
- if(editForm.pc) {
- items = findByCode(editForm.pc, menuData);
- if(items) {
- if(items.children) {
- items = items.children;
- } else {
- items = items.children = [];
- }
- } else {
- items = menuData;
- }
- }
- ++g_max_menu_code;
- var di = { code: g_max_menu_code, caption: item.caption, modal: false };
- if(item.res) {
- di.res = item.res;
- di.icon = item.icon || "book";
- } else {
- di.res = null;
- di.icon = item.icon || "branch";
- }
- items.push(di);
- refreshTree();
- }
- }
- });
- var cloneMenu = function(src, dest) {
- src.forEach(function(item) {
- var di = {};
- di.icon = item.icon;
- if(item.res) {
- di.res = item.res;
- }
- di.modal = false;
- di.caption = item.caption;
- dest.push(di);
- if(item.children && item.children.length) {
- var chs = di.children = [];
- cloneMenu(item.children, chs);
- }
- });
- }
- root.find(".opt-save").on("click", function() {
- var pd = [];
- cloneMenu(menuData,pd);
- util.put("../ajax/user/config/menu", pd, function() {
- spa.closeModal();
- if(data.hand) {
- data.hand();
- }
- }, {});
- });
- refreshTree();
- }
- };
- });
- });
|