persMenuDefEdit.ss.jsp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. #savemb {
  6. display: none;
  7. }
  8. #delmb {
  9. display: none;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <form name="ddpOptionForm" action="<serv.ss dest='menuDefOptList'/>" method="post"> <!-- "cdOptionForm"。Lin -->
  15. <input type="hidden" name="cdOptionHtml" value="" id="cdOptionHtml" />
  16. <!-- <input type='submit' id="cx" value="查询" class="content-invertButton" /> -->
  17. </form>
  18. <form name="shortcutForm" action='' method="post">
  19. <input name="bjid" type="hidden" value="${bjid}" />
  20. <div class="search-div">
  21. <div style="padding: 15px 25px 12px 25px;">
  22. <input type='button' value="增加菜单组" onclick="addGroup();" class="content-button" />
  23. <!-- 业务分类 <select id="yy" name="yy" onchange="">
  24. <option value="-1">请选择</option>
  25. </select> -->
  26. &nbsp;
  27. <%--<select id="cdmbselected" class="sel" onchange="selectMB(this.options[this.options.selectedIndex].value);" style="float: right;">
  28. <option value="0">空白模板</option>
  29. <wd:option name="grcdmb" />
  30. </select>--%>
  31. <input type='button' id="savemb" value="保存当前模板" class="content-button" />
  32. <input type='button' id="delmb" value="删除该模板" class="content-button" />
  33. <input type='button' id="addmb" value="另存为新模板" class="content-button" />
  34. <input name="grcdmbid" id="grcdmbid" type="hidden" class="sel" onchange="selectMB(this.value)"/>
  35. <input name="grcdmbName" type="text" style="width: 140px;" />
  36. <objp.ss name="grcdmb" cb="grcdmb" inp="true" /> <%-- 原 cb="grcdmb_all",去掉 根模板 了。Lin --%>
  37. </div>
  38. </div>
  39. <div id="container" class="dragList-div">
  40. <div class="box">
  41. <p class="label">已选<span id="ddpDropAll" class="icon-allRight"></span></p> <!-- "cdDropAll"。Lin -->
  42. <div class="list-body" style="position: relative;overflow-x: hidden;width: 100%;height: 380px;">
  43. <div id="ddpSelected" ssSelClazz="list-checkedIcon" class="scrollbar" style="height:100%"> <!-- "cdSelected"。Lin -->
  44. </div>
  45. </div>
  46. </div>
  47. <div class="box">
  48. <p class="label">备选<span id="ddpPickAll" class="icon-allLeft"></span></p> <!-- "cdPickAll"。Lin -->
  49. <div class="list-body" style="position: relative;overflow-x: hidden;width: 100%;height: 380px;">
  50. <div id="ddpOption" ssSelClazz="list-checkedIcon" class="scrollbar" style="height:100%"> <!-- "cdOption"。Lin -->
  51. </div>
  52. </div>
  53. </div>
  54. <input type="hidden" value="" name="ddpSelectedId" /> <%-- name="cdSelectedId"。再改为统一的名字 -- 同一页面,不会有多个拖放选择。Lin --%>
  55. </div>
  56. </form>
  57. <!-- <div class='bottom-div'>
  58. <input type="button" name="button" onclick="wd.display.closeDialog();" value="取消" class="bottom-button" />
  59. </div> -->
  60. </body>
  61. <%-- 去掉,母体也没找到。Lin
  62. <script type="text/javascript" src="ajaxFunc.js"></script>
  63. --%>
  64. <script type="text/javascript">
  65. wd.edit.objectPicker.getInstance("grcdmb").onchange = function () {
  66. console.log($("#grcdmbid").val());
  67. selectMB($("#grcdmbid").val());
  68. }
  69. //从请求中获得
  70. var oridata = '${mbdata}';
  71. var mbdata = (oridata == '' ? '' : JSON.parse(oridata));
  72. var bjid = "${bjid}";
  73. var menuRootGroupId = "${menuRootGroupId}";
  74. var parent1 = window.parent;
  75. //从上个页面(菜单页面),获取到需要的数据
  76. /**
  77. * menuTree节点内数据的含义
  78. * [0]--lmid(两种情况,1.数字,2.英文缩写)
  79. * [1]--name,名字代号
  80. * [2]--上级id
  81. * [3]--跳转页
  82. */
  83. var personaldata = "${personalTree}";
  84. var personalTree = (personaldata == '' ? '' : eval(personaldata));
  85. //这是所有的菜单选项(人员、校务那些),是个二维数组
  86. //for(var i = 0; i < 10 && parent.personalTree == undefined; i++)
  87. // parent = parent.parent
  88. //if(parent.personalTree != undefined)
  89. // personalTree = parent.personalTree;
  90. /**
  91. * 自定义菜单
  92. * 1--shortcutMenuInfo(各个自定义id(不清楚来源),menuRoot)
  93. * 2--groupId(上级id);member(子栏目成员);name(名字代号)
  94. * 3,member--groupId(上级id);memberId(自身id为#序号#lmid);name(名字代号);url(跳转页)
  95. *
  96. * example:shortcutMenuInfo[440112878].members["#0#44014346"].name
  97. */
  98. var shortcutStartInfo;//这是快捷组的数据,也就是最顶上那一排,这是个三层键值对?
  99. for (var i = 0; i < 10 && parent1.shortcutStartInfo == undefined; i++)
  100. parent2 = parent1.parent
  101. if (parent2.shortcutStartInfo != undefined)
  102. shortcutStartInfo = parent2.shortcutStartInfo;
  103. //自定义栏目的子栏目的根id
  104. var shortcutGroup = [];
  105. var personalRootSize = 0;//见名知意
  106. var selectedMenuMenber = [];
  107. function isNumber(o) {
  108. var reg = /^[0-9]*$/;
  109. if (!reg.test(o)) {
  110. return false;
  111. }
  112. return true;
  113. }
  114. function isLeft(shortcutStartInfo) {
  115. for (var item in shortcutStartInfo) {
  116. if (isNumber(item)) {
  117. for (var item2 in shortcutStartInfo[item].members) {
  118. if (shortcutStartInfo[item].members[item2].memberId) {
  119. var arr = shortcutStartInfo[item].members[item2].memberId.split('#');
  120. selectedMenuMenber.push(arr[arr.length - 1]);
  121. }
  122. }
  123. } else {
  124. for (var item2 in shortcutStartInfo[item].members) {
  125. if (!isNumber(shortcutStartInfo[item].members[item2].memberId)) {
  126. selectedMenuMenber.push(shortcutStartInfo[item].members[item2].memberId);
  127. }
  128. }
  129. }
  130. }
  131. }
  132. function load() {
  133. //初始化右边应用的下拉框select
  134. // $.each(menuTree,function(i){//遍历整个菜单二维数组,拿出里面的每个数组
  135. // var menu1 = menuTree[i];
  136. // //每个一维数组的四个数据依次是:id,名字,上级菜单id,url
  137. // if (menu1[2] == "env" && menu1[3] == "null") {//当上级id为env时,那么这就是个根菜单(人员、校务这些),把它放到下拉框中
  138. // $('#yy').append("<option value='" + menu1[0]+"'>"+menu1[1]+"</option>");
  139. // }
  140. // });
  141. //初始化左边的选项和下拉框
  142. //初始化要将子栏目下的栏目页放进去
  143. var menuRoot;
  144. //给右边下拉框绑定事件,用来在右边显示选中的子项
  145. // $('#yy').change(function(){
  146. // console.log(menuTree);
  147. // //alert($(this).val());
  148. // selectByParentId($(this).val());
  149. // });
  150. for (var groupId in shortcutStartInfo) { //在addOption前先得出组菜单id数组,做样式区分时用到
  151. if ("menuRoot" != groupId) {
  152. shortcutGroup.push(groupId); //纪录快捷组id,在后台使用
  153. }
  154. }
  155. };
  156. load();
  157. $(function () { selectByParentId(); })
  158. /**
  159. * 根据父id查询出对应的子对象
  160. * @param {[type]} id [description]
  161. * @return {[type]} [description]
  162. */
  163. function selectByParentId() {
  164. //用来加载出右边拖拽框的所有选项
  165. var cdOptionHtml = "";
  166. $.each(personalTree, function (i) { //遍历整个菜单二维数组,拿出里面的每个数组
  167. var menu = personalTree[i];
  168. if (selectedMenuMenber.indexOf(menu[0]) == -1&&menu[0].indexOf("plugin_")==-1) {
  169. // if (menu[2] != ""&&menu[2] != "env") {//当上级id 等于传进来的id(也就是右边下拉框此时选中的值)时,那么加把此项放到右边的拖拽框
  170. var parentDiv = "<div class='list-background list' style='min-height: 41px;line-height: 41px;width: calc(100% - 4px);box-sizing: border-box;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;' ssObjId='" + menu[0] + "' memberid='" + menu[0] + "' name='" + menu[1] + "' groupId='" + menu[2] + "' url='" + menu[3] + "'><span>" + menu[1] + "</ span ></div>";
  171. var parentId = menu[0];
  172. $.each(personalTree, function (j) {//由于存在两级,所以再次遍历,把第二级放进自己的父级中
  173. var menu2 = personalTree[j];
  174. if (menu2[2] == menu[0]&&menu2[0].indexOf("plugin_")==-1) { //上级id等于第一级的id时
  175. parentDiv += '<div class="list-background list" style="min-height: 41px;line-height: 41px;width: calc(100% - 4px);box-sizing: border-box;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;" ssObjId="' + menu2[0] + '" ssPobjId="' + parentId + '" memberid="' + menu2[0] + '"name="' + menu2[1] + '" groupId="' + menu2[2] + '" url="' + menu[3] + '" ><span>' + menu2[1] + '</ span ></div>';
  176. }
  177. });
  178. cdOptionHtml += parentDiv;
  179. // }
  180. }
  181. });
  182. cdOptionHtml = cdOptionHtml.replace(/&/g, '%26');
  183. // $("#cdOption").html(cdOptionHtml);//把整个div放进拖拽框
  184. $("#cdOptionHtml").val(cdOptionHtml);//把整个div放进拖拽框
  185. $('form[name="ddpOptionForm"]')[0].submit(); // "cdOptionForm"。Lin
  186. };
  187. /**
  188. * 创建一个新的快捷组,也就是顶上一排那种有第二层的东西
  189. */
  190. function addGroup() {
  191. //全都是快捷组这东西惹的祸 因为它既是shortcutMenuInfo中menuRoot的成员,也是shortcutMenuInfo的成员
  192. //var groupSel = document.getElementById('cdwz');
  193. var groupDivs = $('#ddpSelected').children(); // '#cdSelected'。Lin
  194. //下面这段都是用来判断为空或者重复
  195. var newname = prompt("新菜单名称", "未定义");
  196. if ('' == newname || null == newname) {
  197. alert('名称不能为空!!\n');
  198. return false;
  199. }
  200. var hasGroupName = false;
  201. /*for(var i=0;i<groupSel.options.length;i++){
  202. if(newname==groupSel.options[i].text){
  203. hasGroupName = true;
  204. break;
  205. }
  206. }*/
  207. $.each(groupDivs, function (i) {
  208. var name = $(groupDivs[i]).attr('name');
  209. if (newname == name) {
  210. hasGroupName = true;
  211. return true;
  212. }
  213. });
  214. if (hasGroupName) {
  215. alert('菜单名称' + newname + '已存在');
  216. return false;
  217. }
  218. //用当前系统的毫秒值作为groupId
  219. var groupId = new Date().getTime() + '';
  220. //console.info("测试组id: "+groupId);
  221. //shortcutMenuInfo中新建一个键值对,键为groupId
  222. shortcutStartInfo[groupId] = {
  223. 'groupId': groupId,
  224. 'name': newname,//输入的名字
  225. 'members': {} //成员为空
  226. }
  227. shortcutGroup.push(groupId);
  228. DM.addItem(groupId, '<div class="list-background list" style="min-height: 41px;line-height: 41px;width: calc(100% - 4px);box-sizing: border-box;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;" ssObjId="' + groupId + '" memberid="' + groupId + '" name="' + newname + '" groupId="menuRoot" url="null" ><span >' + newname + '</span></div>', null, true);
  229. }
  230. /**
  231. * 保存准备方法,将新增的数据封装好
  232. * @return {[type]} [description]
  233. */
  234. function beforeSubmit() {
  235. //有shortcutGroup就行了
  236. //直接用左div的元素来做个shortcutmenuinfo!!!
  237. var dragList = $('#ddpSelected'); // '#cdSelected'。Lin
  238. //下级div
  239. var groupDivs = dragList.children();
  240. console.log(groupDivs.size());
  241. var personalRootMembers = {};
  242. /**
  243. * 初始化菜单根部menuRoot
  244. */
  245. var menuRoot = {};
  246. //copy
  247. $.extend(menuRoot, shortcutStartInfo['menuRoot']);
  248. personalRootMembers['menuRoot'] = menuRoot;
  249. menuRoot['members'] = {};
  250. $.each(groupDivs, function (i) {
  251. //或条件
  252. //改为li
  253. if (shortcutGroup.indexOf($(groupDivs[i]).attr('memberid')) != -1 || $(groupDivs[i]).find('div div[ssObjId]').size() != 0) {
  254. var personalRootMember = {};
  255. var members = {};
  256. personalRootMember['groupId'] = $(groupDivs[i]).attr('memberid');
  257. personalRootMember['name'] = $(groupDivs[i]).attr('name');
  258. if ($(groupDivs[i]).find('div div[ssObjId]').size() != 0) {
  259. //下级div的再下级
  260. var childDivs = $(groupDivs[i]).find('div div[ssObjId]');
  261. $.each(childDivs, function (j) {
  262. var member = {};
  263. member['groupId'] = $(childDivs[j]).attr('groupid');
  264. member['memberId'] = $(childDivs[j]).attr('memberid');
  265. member['name'] = $(childDivs[j]).attr('name');
  266. member['url'] = $(childDivs[j]).attr('url');
  267. members['#' + j + '#' + $(childDivs[j]).attr('memberid')] = member;
  268. });
  269. }
  270. personalRootMember['members'] = members;
  271. personalRootMembers[$(groupDivs[i]).attr('memberid')] = personalRootMember;
  272. }
  273. /**
  274. * menuRoot 添加member
  275. * 如果$(groupDivs[i])有子节点,默认groupId 为 menuRoot url为null 且插入 shortcutGroup 的一条id
  276. */
  277. var member = {};
  278. member['memberId'] = $(groupDivs[i]).attr('memberId');
  279. member['name'] = $(groupDivs[i]).attr('name');
  280. if ($(groupDivs[i]).find('div div[ssObjId]').size() != 0) {
  281. member['groupId'] = "menuRoot";
  282. member['url'] = "null";
  283. shortcutGroup.push($(groupDivs[i]).attr('memberId'));
  284. } else {
  285. member['groupId'] = $(groupDivs[i]).attr('groupId');
  286. member['url'] = $(groupDivs[i]).attr('url');
  287. }
  288. menuRoot['members']['#' + i + '#' + $(groupDivs[i]).attr('memberId')] = member;
  289. });
  290. shortcutStartInfo = {};
  291. shortcutStartInfo = personalRootMembers;
  292. }
  293. /**
  294. * 选择模板触发方法
  295. * @param {[type]} value [description]
  296. * @return {[type]} [description]
  297. */
  298. function selectMB(value) {
  299. //拿到 mbdata
  300. if (value == "0") {
  301. value = "null";
  302. }
  303. shortcutStartInfo = (mbdata[value] == undefined) ? {} : mbdata[value];
  304. //清空左边菜单组元素
  305. $("#ddpSelected").empty(); // "#cdSelected"。Lin
  306. if (value != '0') {
  307. //生成左边菜单组
  308. selectedMenuMenber.splice(0, selectedMenuMenber.length);
  309. isLeft(shortcutStartInfo);
  310. initShortCutMenu(shortcutStartInfo);
  311. $('#delmb').css('display', 'inline');
  312. $('#savemb').css('display', 'inline');
  313. } else {
  314. $('#delmb').css('display', 'none');
  315. $('#savemb').css('display', 'none');
  316. }
  317. }
  318. /**
  319. * 设值到表单中
  320. * @param {[type]} _form [description]
  321. * @param {[type]} name [description]
  322. * @param {[type]} value [description]
  323. * @return {[type]} [description]
  324. */
  325. function generateHiddenForm(_form, name, value) {
  326. var hiddenInput = document.createElement('input');
  327. hiddenInput.type = 'hidden';
  328. hiddenInput.name = name;
  329. hiddenInput.value = value;
  330. _form.appendChild(hiddenInput);
  331. }
  332. /**
  333. * 生成菜单显示数据
  334. * @param {[type]} shortcutMenuInfo [description]
  335. * @return {[type]} [description]
  336. */
  337. function initShortCutMenu(shortcutStartInfo) {
  338. var menuRoot;
  339. if (typeof (shortcutStartInfo.menuRoot) == 'undefined')
  340. menuRoot = [];
  341. else
  342. menuRoot = shortcutStartInfo.menuRoot.members;
  343. DM.getDrager().selectedList.empty();
  344. $.each(menuRoot, function (i) {
  345. //menuRootSize++;
  346. var personalRootMember = menuRoot[i];
  347. //
  348. var isItem = false;
  349. if (personalRootMember.url != "null") {
  350. isItem = true;
  351. } else {
  352. if (shortcutStartInfo[personalRootMember.memberId] != undefined) {
  353. var j = 0;
  354. $.each(shortcutStartInfo[personalRootMember.memberId].members, function (i) {
  355. j++;
  356. });
  357. if (j > 0) {
  358. isItem = true;
  359. }
  360. }
  361. }
  362. if (isItem) {
  363. var ele = $('<div class="list-background list" style="min-height: 41px;line-height: 41px;width: calc(100% - 4px);box-sizing: border-box;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;" ssObjId="' + personalRootMember.memberId + '" memberid="' + personalRootMember.memberId
  364. + '" name="' + personalRootMember.name + '" groupId="' + personalRootMember.groupId
  365. + '" url="' + personalRootMember.url + '" class="item dragList"><span>' + personalRootMember.name + '</ span ></div>');
  366. DM.getDrager().selectedList.append(ele[0]);
  367. var parentId = personalRootMember.memberId;
  368. //放入子栏目,子栏目不为dragList
  369. if (shortcutStartInfo[personalRootMember.memberId] != null) {
  370. $.each(shortcutStartInfo[personalRootMember.memberId].members, function (j) {
  371. var member = shortcutStartInfo[personalRootMember.memberId].members[j];
  372. var cele = $('<div class="list-background list" style="min-height: 41px;line-height: 41px;width: calc(100% - 4px);box-sizing: border-box;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;" ssObjId="' + j.split("#")[2] + '" ssPobjId="' + parentId
  373. + '" memberid="' + j.split("#")[2] + '" name="' + member.name + '" groupId="' + member.groupId
  374. + '" url="' + member.url + '" ><span>' + member.name + '</ span ></div>');
  375. DM.getDrager().selectedList.append(cele[0]);
  376. });
  377. }
  378. }
  379. });
  380. DM.getDrager().selectedList.reload();
  381. selectByParentId();
  382. }
  383. /**
  384. * 删除菜单组模板
  385. * @param {[type]} ){ } [description]
  386. * @return {[type]} [description]
  387. */
  388. $('#delmb').click(function () {
  389. var mbid = $('#grcdmbid').val();
  390. var json = JSON.parse('{"mbid":"' + mbid + '"}');
  391. var url = "<serv.ss name='initMenuDef' dest='menuDefSaveOk' parm='{del:"ssVal{mbid}",mblx:5}'/>";
  392. url = wd.display.replaceDynamicParam(url, json);
  393. $('form[name="shortcutForm"]').attr('action', url);
  394. $('form[name="shortcutForm"]').submit();
  395. });
  396. /**
  397. * 保存菜单组模板
  398. * @param {[type]} ){ } [description]
  399. * @return {[type]} [description]
  400. */
  401. $('#savemb').click(function () {
  402. //封装
  403. beforeSubmit();
  404. var _form = document.forms['shortcutForm'];
  405. var cdmbid = $('#cdmbselected').val();
  406. var shortcutInfoStr = JSON.stringify(shortcutStartInfo);
  407. var shortcutGroupStr = JSON.stringify(shortcutGroup);
  408. generateHiddenForm(_form, 'grcdmbid', cdmbid);
  409. generateHiddenForm(_form, 'shortcutGroup', shortcutGroupStr);
  410. generateHiddenForm(_form, 'shortcutMenuInfo', shortcutInfoStr);
  411. generateHiddenForm(_form, 'cdz', '5');
  412. $('form[name="shortcutForm"]').attr('action', "<serv.ss name='saveMenuDef' dest='menuDefSaveOk' parm='{mblx:5}'/>");
  413. $('form[name="shortcutForm"]').submit();
  414. });
  415. /**
  416. * 新增菜单组模板
  417. * @param {[type]} ){ } [description]
  418. * @return {[type]} [description]
  419. */
  420. var addcallback = (function (t) {
  421. var THIS = t;
  422. return function (data) {
  423. if (data.newMc != null && data.newMc != "") {
  424. //封装
  425. beforeSubmit();
  426. var _form = document.forms['shortcutForm'];
  427. //添加newMc 表单元素
  428. generateHiddenForm(_form, "newMc", data.newMc);
  429. generateHiddenForm(_form, "ms", data.ms);
  430. generateHiddenForm(_form, "grcdmbh", data.grcdmbh);
  431. var cdmbid = $('#cdmbselected').val();
  432. var shortcutInfoStr = JSON.stringify(shortcutStartInfo);
  433. var shortcutGroupStr = JSON.stringify(shortcutGroup);
  434. generateHiddenForm(_form, 'grcdmbid', cdmbid);
  435. generateHiddenForm(_form, 'shortcutGroup', shortcutGroupStr);
  436. generateHiddenForm(_form, 'shortcutMenuInfo', shortcutInfoStr);
  437. generateHiddenForm(_form, 'cdz', '2'); // 为什么是 2(start),而不是 5(pers)???Lin
  438. $('form[name="shortcutForm"]').attr('action', "<serv.ss name='saveMenuDef' dest='menuDefSaveOk' parm='{mblx:5}'/>");
  439. $('form[name="shortcutForm"]').submit();
  440. }
  441. }
  442. })(this);
  443. $('#addmb').click(function () {
  444. wd.display.confirm({ title: "另存为新模板", url: "<serv.ss dest='menuDefAdd'/>", width: 300, height: 240, callback:function(){} });
  445. });
  446. </script>
  447. <drag.ss name="ddp" grp="true" func="editGroup,editOrder"/> <%-- name="cd"。再改为统一的名字 -- 同一页面,不会有多个拖放选择。Lin --%>
  448. </html>