objInp.jsp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. <%@ page language="java" pageEncoding="UTF-8" isELIgnored="false" %>
  2. <%@ taglib uri="/ssTag" prefix="ss"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta http-equiv="pragma" content="no-cache">
  7. <meta http-equiv="cache-control" content="no-cache">
  8. <meta http-equiv="expires" content="0">
  9. <script type="text/javascript" src="/ss/jquery/jquery.js"></script>
  10. <script src="/js/load.js"></script> <%-- ="/newUI/ss/js/base.js"。Lin(新UI) --%>
  11. <script type="text/javascript" src="/js/display.js"></script>
  12. <script type="text/javascript" src="/js/form.js"></script>
  13. <%-- <script type="text/javascript" src="/ss/js/display.js"></script>--%>
  14. <%-- <script type="text/javascript" src="/ss/jquery/jquery.js"></script>--%>
  15. <%-- <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.js"></script>--%>
  16. <%-- <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.iframehelper.min.js"></script> --%>
  17. <%-- <script type="module" src="/newUI/ss/js/validation-manager.js"></script>
  18. <script type="module" src="/newUI/ss/js/validator-rules.js"></script> --%>
  19. <script>
  20. window.ss.dom.formElemConfig = window.ss.dom.formElemConfig || {};<%-- 放当前页面表单元素配置的变量--%>
  21. window.ss.dom.btnElemConfig = window.ss.dom.btnElemConfig|| {};<%-- 放当前页面按钮元素配置的变量 Ben(20251211) --%>
  22. </script>
  23. <style>
  24. .table-container>tr>th{
  25. width:130px !important;
  26. }
  27. /* 把content-box的高度限制 从公共css 抽到具体有需要的页面 by xu 20251215 */
  28. .form-container .content-box {
  29. height: calc(100% - 80px) !important;
  30. }
  31. </style>
  32. </head>
  33. <body class="env-input-body">
  34. <form method="post" id="app" class="form-container">
  35. <%-- 改为 <data@ss name="inp"/>。Lin
  36. <tab@ss name="include_input"/> --%>
  37. <ss:data name='inp'/>
  38. <div class="content-box fit-height-content">
  39. <jsp:include page="${include_input}" flush="true"/>
  40. <%-- <jsp:include page="/page/2ry_inp.jsp" flush="true"/>--%>
  41. </div>
  42. <div class='bottom-div'>
  43. <ss:equal val='${empty saveDest}' val2='false'>
  44. <%-- 保存按钮 --%>
  45. <ss-bottom-button
  46. text="${saveButtonValue}"
  47. <%-- type="submit"--%>
  48. onclick='ss.form.submit({url:"<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",width:${savewidth},height:${saveheight},minHeight:${saveminheight},maxHeight:${savemaxheight}});'
  49. <%-- onclick='wd.display.changeFormAction("<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",this,${savewidth},${saveheight},${saveminheight},${savemaxheight});'--%>
  50. icon-class="bottom-div-save"
  51. ></ss-bottom-button>
  52. </ss:equal>
  53. <%-- <div class="bottom-down-div border-top"> --%>
  54. <%-- <ss:equal val='${empty saveDest}' val2='false'>--%>
  55. <!-- 保存按钮 start -->
  56. <%-- <input v-show="false" type="submit" value="${saveButtonValue}" class="bottom-button"
  57. onclick='ss.display.changeFormAction("<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",this,${savewidth},${saveheight},${saveminheight},${savemaxheight});'
  58. > --%>
  59. <!-- 保存按钮 end -->
  60. <%-- </ss:equal>--%>
  61. <ss:equal val='${empty saveAndCommitDest}' val2='false'>
  62. <ss-bottom-button
  63. style="display:none"
  64. id="saveAndCommit"
  65. text="${saveAndCommitButtonValue}"
  66. onclick='ss.form.submit({url:"<ss:serv name='${saveAndCommit}' dest='${saveAndCommitDest}' parm='${saveAndCommitParam}'/>",width:${saveAndCommitwidth},height:${saveAndCommitheight},minHeight:${saveAndCommitminheight},maxHeight:${saveAndCommitmaxheight},targetWin:null});'<%-- 最后一个参数原来为targetWin:parent导致刷新了顶层窗口,改为null Ben(20251215) --%>
  67. icon-class="bottom-div-save"
  68. ></ss-bottom-button>
  69. <!-- 保存并提交按钮 start -->
  70. <%-- <input type="button" value="${saveAndCommitButtonValue}" class="bottom-button"
  71. onclick='ss.display.reset("dialog",this,"<ss:serv name='${saveAndCommit}' dest='${saveAndCommitDest}' parm='${saveAndCommitParam}'/>",${saveAndCommitwidth},${saveAndCommitheight},${saveAndCommitminheight},${saveAndCommitmaxheight});'
  72. > --%>
  73. <!-- 保存并提交按钮 end -->
  74. </ss:equal>
  75. <ss:equal val='${empty changeNoFunctions}' val2='false'>
  76. <%--只有一个变动--%>
  77. <!-- 只有一个变动时的 停用按钮 start -->
  78. <ss:equal val='${changeNoSize}' val2='1'>
  79. <ss-bottom-button
  80. text="${changeNoFunctions[0].desc}"
  81. onclick='ss.form.submit({url:"<ss:serv name='${changeNoFunctions[0].servName}' dest='${changeNoFunctions[0].dest}' parm='{ssObjId:"${ssObjId}",ssObjName:"${ssObjName}","${ssObjIdName}":"${ssObjId}",dataType:"${empty dataType?1:dataType}",requestParentViewObject:"${requestParentViewObject}"}'/>",width:${changeNoFunctions[0].width},height:${changeNoFunctions[0].height},minHeight:${changeNoFunctions[0].minHeight},maxHeight:${changeNoFunctions[0].maxHeight},targetWin:parent});'
  82. icon-class="bottom-div-close"
  83. ></ss-bottom-button>
  84. <%-- <input type="button" value="${changeNoFunctions[0].name}" class="bottom-button"
  85. onclick='ss.display.reset("dialog",this,"<ss:serv name='${changeNoFunctions[0].servName}' dest='${changeNoFunctions[0].dest}' parm='{ssObjId:"${ssObjId}",ssObjName:"${ssObjName}","${ssObjIdName}":"${ssObjId}",dataType:"${empty dataType?1:dataType}",requestParentViewObject:"${requestParentViewObject}"}'/>",${changeNoFunctions[0].width},${changeNoFunctions[0].height},${changeNoFunctions[0].minHeight},${changeNoFunctions[0].maxHeight});'
  86. > --%>
  87. </ss:equal>
  88. <!-- 只有一个变动 end -->
  89. <%--有多个变动--%>
  90. <!--有多个变动 start -->
  91. <ss:notEqual val='${changeNoSize}' val2='1'>
  92. <%-- 更多变动按钮数据 Ben(20251211) --%>
  93. <script>
  94. window.ss.dom.btnElemConfig.moreChg={desc:"更多变动",dropOptions:[]};
  95. </script>
  96. <ss:rpt id='item' name='changeNoFunctions'>
  97. <script>
  98. window.ss.dom.btnElemConfig.moreChg.dropOptions.push(
  99. {
  100. desc:'${item.desc}',<%-- 按钮名 --%>
  101. callback: function(){
  102. ss.form.submit({url:"<ss:serv name='${item.servName}' dest='${item.dest}' parm='{ssObjId:"${ssObjId}",ssObjName:"${ssObjName}","${ssObjIdName}":"${ssObjId}",dataType:"${empty dataType?1:dataType}",requestParentViewObject:"${requestParentViewObject}"}'/>",width:${item.width},height:${item.height},minHeight:${item.minHeight},maxHeight:${item.maxHeight},targetWin:parent});
  103. }
  104. }
  105. );
  106. </script>
  107. <%-- 改成vue写法 Ben(20251211)
  108. <input style="display:none;" class="changebutton" index="${index}" type="button" value="${item.desc}"
  109. onclick='ss.form.submit({url:"<ss:serv name='${item.servName}' dest='${item.dest}' parm='{ssObjId:"${ssObjId}",ssObjName:"${ssObjName}","${ssObjIdName}":"${ssObjId}",dataType:"${empty dataType?1:dataType}",requestParentViewObject:"${requestParentViewObject}"}'/>",width:${item.width},height:${item.height},minHeight:${item.minHeight},maxHeight:${item.maxHeight},targetWin:parent});'
  110. >
  111. --%>
  112. </ss:rpt>
  113. <%-- 修改支持更多按钮 by xu 20251211 --%>
  114. <ss-bottom-button
  115. more="moreChg"
  116. ></ss-bottom-button>
  117. <%-- 改成vue写法 Ben(20251211)
  118. <input id="morebutton" type="button" value="更多变动" class="bottom-button"/>
  119. <script>ss.display.attachButton("morebutton","changebutton");</script>
  120. --%>
  121. </ss:notEqual>
  122. <!--有多个变动 end -->
  123. </ss:equal>
  124. <!-- 删除按钮 start -->
  125. <ss:equal val='${empty deleteDest}' val2='false'>
  126. <%--
  127. <input type="submit" value="删除" onclick="wd.display.changeFormAction(&quot;<wd:token service='${delete}' dest='${deleteDest}' param='${deleteParam}' test='' />&quot;,this);" class="bottom-button" ></wd:equal>
  128. --%>
  129. <ss-bottom-button
  130. text="${deleteButtonValue}"
  131. onclick='ss.form.confirm("删除","是否删除?",function (){ss.form.submit({url:"<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>",targetWin:parent});},null)'
  132. <%-- onclick='ss.display.confirm("删除","是否删除?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");--%>
  133. <%-- form.setAttribute("action",--%>
  134. <%-- "<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>");--%>
  135. <%-- ss.display.submitToTopTab(button);form.submit();}})(this))'--%>
  136. icon-class="bottom-div-close"
  137. ></ss-bottom-button>
  138. <%-- <input id="deleteButton" type="button" value="${deleteButtonValue}"
  139. onclick='wd.display.confirm("删除","是否删除?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");
  140. form.setAttribute("action",
  141. "<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>");
  142. wd.display.submitToTopTab(button);form.submit();}})(this))'
  143. class="bottom-button"
  144. > --%>
  145. </ss:equal>
  146. <!-- 删除按钮 end -->
  147. <%-- 再增加 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。Start。Lin --%>
  148. <!-- 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。Start -->
  149. <ss:equal val='${empty delChildChgDest}' val2='false'>
  150. <ss-bottom-button
  151. text="${delChildChgButtonValue}"
  152. onclick='ss.form.confirm("删除","是否删除?",function (){ss.form.submit({url:"<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>",targetWin:parent});},null)'
  153. <%-- onclick='ss.display.confirm("删除变动","是否删除基本情况变动?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");--%>
  154. <%-- form.setAttribute("action",--%>
  155. <%-- "<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>");--%>
  156. <%-- wd.display.submitToTopTab(button);form.submit();}})(this))'--%>
  157. icon-class="bottom-div-close"
  158. ></ss-bottom-button>
  159. <%-- <input id="delChildChgButton" type="button" value="${delChildChgButtonValue}"
  160. onclick='ss.display.confirm("删除变动","是否删除基本情况变动?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");
  161. form.setAttribute("action",
  162. "<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>");
  163. wd.display.submitToTopTab(button);form.submit();}})(this))'
  164. class="bottom-button"
  165. > --%>
  166. </ss:equal>
  167. <!-- 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。end -->
  168. <%-- 再增加 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。End。Lin --%>
  169. <!-- 停用start -->
  170. <ss:equal val='${empty disableSubmitDest}' val2='false'>
  171. <ss-bottom-button
  172. text="${disableSubmitButtonValue}"
  173. onclick='ss.form.submit({url:"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",width:${disableSubmitwidth},height:${disableSubmitheight},minHeight:${disableSubmitminheight},maxHeight:${disableSubmitmaxheight},targetWin:parent});'
  174. <%-- onclick='ss.display.reset("dialog",this,"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",${disableSubmitwidth},${disableSubmitheight},${disableSubmitminheight},${disableSubmitmaxheight});'--%>
  175. icon-class="bottom-div-close"
  176. ></ss-bottom-button>
  177. <!-- <input type="submit" value="${disableSubmitButtonValue}" class="bottom-button"
  178. onclick='ss.display.reset("dialog",this,"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",${disableSubmitwidth},${disableSubmitheight},${disableSubmitminheight},${disableSubmitmaxheight});'
  179. > -->
  180. </ss:equal>
  181. <!-- 停用end -->
  182. <ss-bottom-button
  183. text="关闭"
  184. onclick='ss.display.closeDialog();'
  185. icon-class="bottom-div-close"
  186. ></ss-bottom-button>
  187. <%-- <input type="button" value="关闭" onclick="ss.display.closeDialog();" class="bottom-button"> --%>
  188. <%--
  189. ${param}
  190. --%>
  191. <%-- </div> --%>
  192. </div>
  193. </form>
  194. </body>
  195. </html>
  196. <script type="module">
  197. const data = {};
  198. if (window.SS.dom.formElemConfig) {
  199. Object.entries(window.SS.dom.formElemConfig).forEach(([key, config]) => {
  200. data[key] = config.val;
  201. // 处理 objPicker
  202. if (config.type === window.SS.dom.TYPE.OBJPICKER) {
  203. data[key + "ObjPicker"] = true;
  204. data[key + "Option"] = [];
  205. data[key + "Url"] = config.url;
  206. }
  207. // 处理datepicker
  208. if (config.type === window.SS.dom.TYPE.DATE) {
  209. data[key + "Mode"] = config.mode
  210. console.log(data[key + "Mode"]);
  211. }
  212. // 处理富文本编辑器
  213. if (config.type === window.SS.dom.TYPE.RICHTEXT) {
  214. data[key + "Url"] = config.val;
  215. data[key + "editor"] = config.val;
  216. }
  217. // 处理onoff
  218. if (config.type === window.SS.dom.TYPE.ONOFFBTN) {
  219. data[key] = config.val.split('|');
  220. }
  221. if (config.type === window.SS.dom.TYPE.IMG) {
  222. data[key + "showUrl"] = config.showUrl;
  223. data[key + "uploadUrl"] = config.uploadUrl;
  224. }
  225. });
  226. }
  227. // console.log("data",data);
  228. SS.ready(function () {
  229. if(ss.dom.formVmConfig)//加判断条件,页面有校验配置时,才运行下面的 Ben(20251206)
  230. for (let i = 0; i < ss.dom.formVmConfig.length; i++) {
  231. const item = ss.dom.formVmConfig[i];
  232. // 处理每个元素
  233. let rule = item.rule;
  234. let fieldArr = item.field;
  235. let param = item.param;
  236. let fieldValMap = [];
  237. for (let i = 0; i < fieldArr.length; i++) {//校验程序增加传入表单元素的值fieldValMap Ben(20260107)
  238. const field = fieldArr[i];
  239. fieldValMap[field] = window.SS.dom.formElemConfig[field].val;
  240. }
  241. window.ssVm.add(rule, fieldArr, param ,fieldValMap);//校验程序增加传入表单元素的值fieldValMap Ben(20260107)
  242. }
  243. // 在这里直接初始化,不需要等待 load 事件
  244. window.SS.dom.initializeFormApp({
  245. el: "#app",
  246. data(){
  247. return data;
  248. },
  249. methods: {
  250. onChange(value){
  251. // console.log(value)
  252. },
  253. myChange(value){
  254. // alert(value);
  255. // console('@@@myChange:'+value);
  256. },
  257. save(){
  258. $('form').attr('action','<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>');//name:${save},dest='${saveDest}',parm='${saveParam}'
  259. $('form').submit();
  260. }
  261. },
  262. mounted() {
  263. const self = this;
  264. // 在这里可以使用 Vue 实例
  265. Object.entries(this.$data).forEach(([key, value]) => {
  266. // 处理 CCPSINGLE
  267. if (key.includes('CCPSINGLE')) {
  268. const originalKey = key.replace('CCPSINGLE', '');
  269. const self = this;
  270. // 只有第一个字段需要自动加载
  271. if (this[originalKey + "InitLoad"]) {
  272. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  273. this[originalKey+'Option'] = result;
  274. })
  275. }
  276. // 绑定 change 事件
  277. this[originalKey + 'Change'] = async function(value) {
  278. const objP = self[originalKey + "objP"] || [];
  279. const currentIndex = objP.indexOf(originalKey);
  280. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  281. await doCascade({
  282. children,
  283. value,
  284. vm: self,
  285. loadData: (value) => getCcpsingleValue(children,value),
  286. });
  287. };
  288. }
  289. // 如果是 CCPSINGLE 类型
  290. if (key.includes('CCPMUTIPLE')) {
  291. const originalKey = key.replace('CCPMUTIPLE', '');
  292. const self = this;
  293. // 只有第一个字段需要自动加载
  294. if (this[originalKey + "InitLoad"]) {
  295. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  296. this[originalKey+'Option'] = result;
  297. })
  298. }
  299. // 绑定 change 事件
  300. this[originalKey + 'Change'] = async function(value) {
  301. const objP = self[originalKey + "objP"] || [];
  302. const currentIndex = objP.indexOf(originalKey);
  303. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  304. await doCascade({
  305. children,
  306. value,
  307. vm: self,
  308. loadData: (value) => getCcpsingleValue(children,value),
  309. });
  310. };
  311. }
  312. });
  313. }
  314. })
  315. });
  316. </script>
  317. <%--<script type="text/javascript">--%>
  318. <%-- tokenCleanser("<ss:serv name='ss.clearPageToken'/>", {tokenList:"<%= pageContext.getAttribute(ss.page.PageC.PAGE_tokenList)%>"});--%>
  319. <%--</script>--%>