objChg.jsp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <%@ page language="java" pageEncoding="UTF-8" isELIgnored="false" %>
  2. <%@ taglib uri="/ssTag" prefix="ss"%>
  3. <%pageContext.setAttribute("wdpageinformation","{'hastab':'1'}");%>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta http-equiv="pragma" content="no-cache">
  8. <meta http-equiv="cache-control" content="no-cache">
  9. <meta http-equiv="expires" content="0">
  10. <script>window.loginStatus="${empty sessionScope['ssUser']?'0':'1'}"</script>
  11. <ss:skin file='main.css'/>
  12. <script type="text/javascript" src="/ss/jquery/jquery.js"></script>
  13. <script type="text/javascript" src="/ss/artdialog/artDialogUtil.js"></script>
  14. <script type="text/javascript" src="/ss/js/base.js"></script>
  15. <script> if(!window.wd) var wd={}; if(!wd.display) wd.display={}; wd.display.wdDialogId="objChg"; if(!wd.app) wd.app={}; wd.app.name='pms';</script>
  16. <script type="text/javascript" src="/ss/js/masklayer.js"></script>
  17. <script type="text/javascript" src="/ss/js/wdDialogInit.js"></script>
  18. <script type="text/javascript" src="/ss/js/common.js"></script>
  19. <script type="text/javascript" src="/ss/js/display.js"></script>
  20. <script type="text/javascript" src="/ss/js/edit.js"></script>
  21. <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.js"></script>
  22. <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.iframehelper.min.js"></script>
  23. <script src="/js/load.js"></script> <%-- ="/newUI/ss/js/base.js"。Lin(新UI) --%>
  24. <style type="text/css">
  25. .lightTab-selected,.lightTab{height: 34px;}
  26. </style>
  27. </head>
  28. <body>
  29. <%
  30. pageContext.setAttribute("dataType","change");
  31. %>
  32. <%-- 改为 <data@ss name="obj"/>。Lin
  33. <tab@ss name=""/> --%>
  34. <%-- <data@ss name="obj"/> 再去掉,好像不需要。Lin --%>
  35. <ss:tab name='chgBaseInfo,child'/>
  36. <%-- 改为 <jsp@ss file="/ss/tabState.jsp"/>。Lin
  37. <tab@ss name="tagState"/> --%>
  38. <%@include file="/ss/clip/tabState.jsp"%>
  39. <script>
  40. function addWdFitHeight(selecter,param){
  41. console.log(selecter);
  42. console.log(param);
  43. var aa="";
  44. if(param.minHeight){
  45. aa+="min:"+param.minHeight+",";
  46. }
  47. if(param.maxHeight){
  48. aa+="max:"+param.maxHeight+",";
  49. }
  50. if(param&&aa){
  51. aa=aa.substr(0,aa.length-1)
  52. document.querySelector(selecter).setAttribute("ssFith",aa); // ("wdFitHeight",。Lin
  53. }
  54. }
  55. </script>
  56. <%--<div class="tab-div">
  57. <ul ssNormClazz="tab-normal1111" ssHovClazz="tab-hover11111" ssSelClazz="tab-selected11111">
  58. <ss:rpt name='${tabList}' id='item'>
  59. <li name="${item.name}"--%> <%-- wdTabSite="${item.wdTabSite}"。先去掉,用到再弄。好像是 个人选项卡 的东西。Lin --%>
  60. <%--_sizeinfo="width:${item.width},height:${item.height},minHeight:${item.minHeight}, maxHeight:${item.maxHeight}"--%>
  61. <%-- 增加 删除二级对象的基本情况变动 功能,使用页面参数混写来传递 bdlbm 和 sqid。Lin
  62. wdTabClick="<varServ@ss name='${item.service}' dest='${item.dest}' parm='${item.param}'/>"> --%>
  63. <%-- 再改,不在页面混写。Lin
  64. ssTabClick="<ss:serv name='${item.service}' dest='${item.dest}' parm='{${item.paramStr},bdlbm:"${bdlbm}",sqid:"${sqid}"}'/>"> --%>
  65. <%--ssTabClick="<ss:serv name='${item.service}' dest='${item.dest}' parm='${item.param}'/>">
  66. ${item.desc}
  67. </li>
  68. </ss:rpt>
  69. </ul>
  70. </div>
  71. <div>
  72. <iframe frameborder="none" name="ssTabIframe" width="100%" ></iframe>
  73. </div>--%>
  74. <div id="app">
  75. <div class="project-edit-container">
  76. <ss-sub-tab
  77. :menu-list="tabConfig"
  78. active-menu="相对方"
  79. @menu-change="handleMenuChange"
  80. :footer-buttons="footerButtons"
  81. :left-display="leftDisplay"
  82. />
  83. </div>
  84. </div>
  85. <script>
  86. var tabHeight=<ss:txt val='${tabHeight}'/>;
  87. //addWdFitHeight("[name=ssTabIframe]",tabHeight); ("[name=wdTabFrame]",。Lin
  88. $(document).ready(function(){
  89. /* 改,规范 wdTabFrame 命名。Lin
  90. $("iframe[name=wdTabFrame]").height($("iframe[name=wdTabFrame]").height() -5)
  91. */ $("iframe[name=ssTabIframe]").height($("iframe[name=ssTabIframe]").height() -5)
  92. })
  93. </script>
  94. <script type="text/javascript">var wdRecordValue='${wdRecordValue}';</script>
  95. <script type="text/javascript" src="/ss/js/wdRecord.js"></script>
  96. <script type="text/javascript">(function(){wdRecord("objChg");})();</script>
  97. <script type="text/javascript" src="/ss/js/wdFitHeight.js"></script>
  98. <script type="text/javascript">initWdFitHeight(30)</script>
  99. <script type="text/javascript">initWdFitHeightFunction=function(){initWdFitHeight(30);};</script>
  100. <script type='text/javascript'>wd.display.wdTabNo='${ssNextTabNo}';</script><script type="text/javascript" src="/ss/js/wdDrag.js"></script>
  101. <script type="text/javascript" src="/ss/js/configurableTab.js"></script>
  102. <script type="text/javascript">
  103. wd.configurableTab.init(1,"objChg");</script>
  104. <ss:equal val="${empty resizeComponent}" val2="false">
  105. <script>{var iframe=wd.display.getFrameOfWindow();
  106. if(iframe&&iframe.contentWindow==window)
  107. wd.display.resizeComponent(${resizeComponent.width}, ${resizeComponent.height}, ${empty resizeComponent.minHeight?'null':resizeComponent.minHeight}, ${empty resizeComponent.maxHeight?'null':resizeComponent.maxHeight});}</script>
  108. </ss:equal>
  109. <ss:help/>
  110. </body>
  111. <script type="text/javascript">
  112. try{wd.display.showMsgPopup('${msg}');
  113. }catch(err){console.error(err);}
  114. </script>
  115. <ss:equal val="${empty wdclosewindowparam}" val2="false">
  116. <script type="text/javascript">
  117. try{wd.display.setCloseWindowParam('${wdclosewindowparam}');
  118. }catch(err){console.error(err);}
  119. </script>
  120. </ss:equal>
  121. </html>
  122. <script type="text/javascript">
  123. <%-- 增加初始化选项卡json start Ben --%>
  124. window.SS.dom.tabConfig = window.SS.dom.tabConfig || [];
  125. console.log(window.SS.dom.tabConfig);
  126. <ss:rpt name='${tabList}' id='item'>
  127. {
  128. let item = {
  129. <%--url: "<ss:serv name='${item.service}' dest='${item.dest}' parm='{${item.paramStr},bdlbm:"${bdlbm}",sqid:"${sqid}"}'/>",--%>title:"${item.desc}",
  130. url:"<ss:serv name='${item.service}' dest='${item.dest}' parm='${item.param}'/>",
  131. name:"${item.name}",
  132. <%-- 下面的属性是为了计算选项卡高度fitHeight准备的 --%>
  133. width:"${item.width}",
  134. height:"${item.height}",
  135. minHeight:"${item.minHeight}",
  136. maxHeight:"${item.maxHeight}",
  137. iconName:"${item.iconName}",
  138. pobj:"${item.pobj}",
  139. cobj:"${item.cobj}"
  140. };
  141. window.SS.dom.tabConfig.push(item);
  142. }
  143. </ss:rpt>
  144. console.log('tabConfig:'+JSON.stringify(window.SS.dom.tabConfig));
  145. <%-- 增加初始化选项卡json end Ben --%>
  146. tokenCleanser("<ss:serv name='ss.clearPageToken'/>", {tokenList:"<%= pageContext.getAttribute(ss.page.PageC.PAGE_tokenList)%>"});
  147. </script>
  148. <script type="module">
  149. console.log("objChg.jsp");
  150. <%
  151. // System.out.println("@@@@dataType:"+pageContext.getAttribute("dataType"));
  152. String dataType = pageContext.getAttribute("dataType").toString();
  153. if(dataType.equals("change")){
  154. if(request.getAttribute("saveAndCommit")==null)
  155. request.setAttribute("saveAndCommit","dw_bd_tj");
  156. if(request.getAttribute("saveAndCommitDest")==null)
  157. request.setAttribute("saveAndCommitDest","chgSure");
  158. }else {
  159. if(request.getAttribute("saveAndCommit")==null)
  160. request.setAttribute("saveAndCommit","dw_lr_tj");
  161. if(request.getAttribute("saveAndCommitDest")==null)
  162. request.setAttribute("saveAndCommitDest","addSure");
  163. }
  164. if(request.getAttribute("saveAndCommitParam")==null){
  165. String objName = request.getParameter("ssObjName");
  166. String objId = request.getParameter("ssObjId");
  167. request.setAttribute("saveAndCommitParam","\"thisViewObject\":\""+objName+"\",\"dwid\":\""+objId+"\"");
  168. // request.setAttribute("saveAndCommitParam","\"thisViewObject\":\"dw\",\"dwid\":\"1011181\"");
  169. }
  170. if(request.getAttribute("saveAndCommitwidth")==null)
  171. request.setAttribute("saveAndCommitwidth","881");
  172. if(request.getAttribute("saveAndCommitheight")==null)
  173. request.setAttribute("saveAndCommitheight","361");
  174. if(request.getAttribute("saveAndCommitminheight")==null)
  175. request.setAttribute("saveAndCommitminheight","515");
  176. if(request.getAttribute("saveAndCommitmaxheight")==null)
  177. request.setAttribute("saveAndCommitmaxheight","515");
  178. %>
  179. //在本窗口提交表单
  180. function doThisWindowSaveAndCommit(){
  181. let url = null;
  182. //下面这行运行时报错,暂时注释掉
  183. <%--url = "<ss:serv name='${saveAndCommit}' dest='${saveAndCommitDest}' parm='${saveAndCommitParam}' />";--%>
  184. <%--let saveAndCommit = '${saveAndCommit}';--%>
  185. <%--let saveAndCommitDest = '${saveAndCommitDest}';--%>
  186. <%--let saveAndCommitParam = '${saveAndCommitParam}';--%>
  187. <%--let dataType = '${dataType}';--%>
  188. // let url = '';
  189. let width = ${saveAndCommitwidth};
  190. let height = ${saveAndCommitheight};
  191. let minHeight = ${saveAndCommitminheight};
  192. let maxHeight = ${saveAndCommitmaxheight};
  193. const f = document.getElementById("commitForm");
  194. f.action = url;
  195. wd.display.resizeComponent(width, height, minHeight, maxHeight);
  196. f.submit();<%-- 提交表单 --%>
  197. }
  198. const data = {
  199. tabConfig: window.SS.dom.tabConfig.map(tab => ({
  200. ...tab,
  201. cgxList: false,
  202. })),
  203. leftDisplay: true,
  204. footerButtons: [
  205. {
  206. text: "保存并提交",
  207. //功能: SsSubTab 底部按钮改为 icon-base 图标+文字(收起仅显示图标)by xu 20251224
  208. iconName: "icon-save",
  209. onclick: function(){
  210. // 左侧区域隐藏
  211. const app = window.SS.dom.currentApp;
  212. // 等待iframe加载完成后执行
  213. const $iframe = $('#sub-tab-iframe');
  214. if ($iframe.length) {
  215. const $saveAndCommitBtn = $iframe.contents().find('#saveAndCommit');
  216. if ($saveAndCommitBtn.length) {
  217. $saveAndCommitBtn.click();
  218. if (app) {
  219. app.$data.leftDisplay = false;
  220. }
  221. $(".sub-tab-iframe").css('display', 'none');
  222. $("#sub-tab-iframe").css('display', '');
  223. } else {
  224. //在本窗口提交表单
  225. doThisWindowSaveAndCommit();
  226. // console.error('未找到保存并提交按钮');
  227. // alert('未找到保存并提交按钮');
  228. }
  229. } else {
  230. //在本窗口提交表单
  231. doThisWindowSaveAndCommit();
  232. // console.error('未找到iframe元素');
  233. }
  234. },
  235. }
  236. ]
  237. }
  238. SS.ready(function () {
  239. const app = window.SS.dom.initializeFormApp({
  240. el: "#app",
  241. data(){
  242. return data;
  243. },
  244. methods:{
  245. handleMenuChange(menu){
  246. console.log('handleMenuChange', menu);
  247. },
  248. async showTagState(url) {
  249. // 从每个tab的url中提取token
  250. const tokenList = this.tabConfig.map(tab => {
  251. const match = /ssToken=([^&]+)/.exec(tab.url);
  252. return match ? match[1] : null;
  253. });
  254. try {
  255. const response = await $.post(url, {
  256. tokenList: JSON.stringify(tokenList)
  257. });
  258. const result = eval("(" + response + ")");
  259. // 更新每个tab的状态
  260. this.tabConfig = this.tabConfig.map((tab, index) => {
  261. console.log('result[index]:', result[index]);
  262. if (!result[index]) return tab;
  263. return {
  264. ...tab,
  265. cgxList: result[index].cgxList === true,
  266. };
  267. });
  268. console.log('更新标签状态成功:', this.tabConfig);
  269. } catch (error) {
  270. console.error('获取标签状态失败:', error);
  271. }
  272. }
  273. },
  274. mounted() {
  275. this.showTagState("<ss:serv name='ss.wrTabState' parm='{ssObjName:"${ssObjName}",ssObjId:"${ssObjId}","${ssObjIdName}":"${ssObjId}",wdConfirmationCaptchaService:"0",dataType:"${dataType}"}'/>");
  276. }
  277. })
  278. window.SS.dom.currentApp = app;
  279. //功能: 启用 SsSubTab 弹窗顶部菜单模式切换按钮(旧UI dhtmlx 按钮)by xu 20251224
  280. (function tryEnableSsSubTabMenuModeButton() {
  281. try {
  282. if (wd && wd.display && wd.display.enableSsSubTabMenuModeButton && wd.display.enableSsSubTabMenuModeButton()) {
  283. return;
  284. }
  285. } catch (e) {
  286. console.log(e);
  287. }
  288. setTimeout(tryEnableSsSubTabMenuModeButton, 200);
  289. })();
  290. })
  291. </script>