Нет описания

itemedit.js 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. ;
  2. spa_define(function() {
  3. return $.use(["util", "form", "dict", "spa", "code", "form"], function(util, form, dict, spa, code, form) {
  4. var ahref = { an: "href", av: "javascript:;" };
  5. return {
  6. modal: function(data) {
  7. var root = spa.findInModal(".sys_dict_itemedit");
  8. root.find(".modal-ctrl .icon-times").on("click", function() {
  9. spa.closeModal();
  10. });
  11. var treeCnt = root.find(".main .nav"),
  12. dictData = data.data,
  13. hand = code.parseCode(root.find(".info")),
  14. editForm = {};
  15. var findByCode = function(c, items) {
  16. var ret;
  17. for(var i = 0; i < items.length; ++i) {
  18. var item = items[i];
  19. if(item.code === c) return item;
  20. if(item.children && item.children.length) {
  21. ret = findByCode(c, item.children);
  22. if(ret) return ret;
  23. }
  24. }
  25. };
  26. var paint = function(ul, items, pc) {
  27. items.forEach(function(item) {
  28. var li = { tn: "li" },
  29. attrs = li.attrs = [{ an: "class", av: "leaf-item" }];
  30. chs = li.chs = [];
  31. ul.chs.push(li);
  32. attrs.push({ an: "code", av: item.code });
  33. attrs.push({ an: "pcode", av: pc || "" });
  34. var icon = {
  35. tn: "i",
  36. attrs: [{ an: "class", av: "icon icon-star" }]
  37. };
  38. chs.push(icon);
  39. chs.push({ tn: "a", attrs: [ahref], chs: [item.code + ":" + item.caption] });
  40. if(item.children && item.children.length) {
  41. icon.attrs[0].av = "icon icon-dict-toggle";
  42. li.attrs[0].av = "branch-item";
  43. var cul = { tn: "ul", chs: [] };
  44. chs.push(cul);
  45. paint(cul, item.children,item.code);
  46. }
  47. });
  48. };
  49. var refreshTree = function() {
  50. var ul = { tn: "ul", chs: [] };
  51. paint(ul, dictData);
  52. treeCnt.empty();
  53. util.appendChild(treeCnt[0], ul);
  54. hand.empty();
  55. editForm.oc = null;
  56. editForm.pc = null;
  57. editForm.form = null;
  58. };
  59. var findParentArray = function(pc) {
  60. if(pc) {
  61. var items = findByCode(pc, dictData);
  62. return items ? (items.children ? items.children : null) : null;
  63. }
  64. return dictData;
  65. };
  66. var movePrev = function() {
  67. if(editForm.oc) {
  68. var items = findParentArray(editForm.pc);
  69. if(items) {
  70. var i = 0;
  71. for(; i < items.length; ++i) {
  72. if(items[i].code === editForm.oc) {
  73. break;
  74. }
  75. }
  76. if(i > 0 && i < items.length) {
  77. var item1 = items[i],
  78. item0 = items[i - 1];
  79. items.splice(i - 1, 2, item1, item0);
  80. refreshTree();
  81. }
  82. }
  83. }
  84. };
  85. var moveNext = function() {
  86. if(editForm.oc) {
  87. var items = findParentArray(editForm.pc);
  88. if(items) {
  89. var i = 0;
  90. for(; i < items.length; ++i) {
  91. if(items[i].code === editForm.oc) {
  92. break;
  93. }
  94. }
  95. if(i < (items.length - 1)) {
  96. var item1 = items[i],
  97. item0 = items[i + 1];
  98. items.splice(i, 2, item0, item1);
  99. refreshTree();
  100. }
  101. }
  102. }
  103. };
  104. var deleteItem = function(pc, oc) {
  105. if(editForm.oc) {
  106. var items = findParentArray(editForm.pc);
  107. if(items) {
  108. var i = 0;
  109. for(; i < items.length; ++i) {
  110. if(items[i].code === editForm.oc) {
  111. break;
  112. }
  113. }
  114. if(i < items.length) {
  115. items.splice(i, 1);
  116. refreshTree();
  117. }
  118. }
  119. }
  120. };
  121. var fillEdit = function(pc, di) {
  122. hand.val();
  123. editForm.form = form.build(root.find(".info"));
  124. editForm.pc = pc;
  125. editForm.oc = di.code;
  126. editForm.form.val(di);
  127. };
  128. root.on("click", ".nav li", function(evt) {
  129. var $this = $(this);
  130. if($this.hasClass("branch-item")) {
  131. $this.toggleClass("open");
  132. }
  133. var di = findByCode($this.attr("code"), dictData);
  134. if(di) {
  135. fillEdit($this.attr("pcode"), di);
  136. }
  137. evt.stopPropagation();
  138. });
  139. root.on("click", ".opt-newroot", function() {
  140. fillEdit("", {});
  141. });
  142. root.on("click", ".opt-new", function() {
  143. fillEdit(editForm.oc, {});
  144. });
  145. root.on("click", ".opt-prev", function() {
  146. movePrev();
  147. });
  148. root.on("click", ".opt-next", function() {
  149. moveNext();
  150. });
  151. root.on("click", ".opt-del", function() {
  152. deleteItem();
  153. });
  154. root.on("click", ".opt-ok", function() {
  155. if(editForm.form.validate()) {
  156. var item = editForm.form.val();
  157. if(editForm.oc) {
  158. var di = findByCode(item.code, dictData);
  159. if(item.code !== editForm.oc) {
  160. if(di) {
  161. util.alert("存在重复的CODE");
  162. return;
  163. }
  164. di = findByCode(editForm.oc, dictData);
  165. }
  166. if(di) {
  167. di.caption = item.caption;
  168. di.shortCode = item.shortCode;
  169. di.enabled = item.enabled;
  170. di.system = item.system;
  171. di.descp = item.descp;
  172. di.code = item.code;
  173. refreshTree();
  174. }
  175. } else {
  176. var items = dictData;
  177. if(findByCode(item.code, dictData)) {
  178. util.alert("存在重复的CODE");
  179. return;
  180. }
  181. if(editForm.pc) {
  182. items = findByCode(editForm.pc,dictData);
  183. if(items) {
  184. if(items.children) {
  185. items = items.children;
  186. } else {
  187. items = items.children = [];
  188. }
  189. } else {
  190. items = dictData;
  191. }
  192. }
  193. var di = { code: item.code, caption: item.caption, shortCode: item.shortCode, enabled: item.enabled, system: item.system, descp: item.descp };
  194. items.push(di);
  195. refreshTree();
  196. }
  197. }
  198. });
  199. root.find(".opt-save").on("click", function() {
  200. util.put("../ajax/sys/dict/item/" + data.code, dictData, function() {
  201. spa.closeModal();
  202. if(data.hand) {
  203. data.hand();
  204. }
  205. }, {});
  206. });
  207. refreshTree();
  208. }
  209. };
  210. });
  211. });