objInp.jsp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  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. id="saveAndCommit"
  64. text="${saveAndCommitButtonValue}"
  65. 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) --%>
  66. icon-class="bottom-div-save"
  67. ></ss-bottom-button>
  68. <!-- 保存并提交按钮 start -->
  69. <%-- <input type="button" value="${saveAndCommitButtonValue}" class="bottom-button"
  70. onclick='ss.display.reset("dialog",this,"<ss:serv name='${saveAndCommit}' dest='${saveAndCommitDest}' parm='${saveAndCommitParam}'/>",${saveAndCommitwidth},${saveAndCommitheight},${saveAndCommitminheight},${saveAndCommitmaxheight});'
  71. > --%>
  72. <!-- 保存并提交按钮 end -->
  73. </ss:equal>
  74. <ss:equal val='${empty changeNoFunctions}' val2='false'>
  75. <%--只有一个变动--%>
  76. <!-- 只有一个变动时的 停用按钮 start -->
  77. <ss:equal val='${changeNoSize}' val2='1'>
  78. <ss-bottom-button
  79. text="${changeNoFunctions[0].desc}"
  80. 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});'
  81. icon-class="bottom-div-close"
  82. ></ss-bottom-button>
  83. <%-- <input type="button" value="${changeNoFunctions[0].name}" class="bottom-button"
  84. 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});'
  85. > --%>
  86. </ss:equal>
  87. <!-- 只有一个变动 end -->
  88. <%--有多个变动--%>
  89. <!--有多个变动 start -->
  90. <ss:notEqual val='${changeNoSize}' val2='1'>
  91. <%-- 更多变动按钮数据 Ben(20251211) --%>
  92. <script>
  93. window.ss.dom.btnElemConfig.moreChg={desc:"更多变动",dropOptions:[]};
  94. </script>
  95. <ss:rpt id='item' name='changeNoFunctions'>
  96. <script>
  97. window.ss.dom.btnElemConfig.moreChg.dropOptions.push(
  98. {
  99. desc:'${item.desc}',<%-- 按钮名 --%>
  100. callback: function(){
  101. 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});
  102. }
  103. }
  104. );
  105. </script>
  106. <%-- 改成vue写法 Ben(20251211)
  107. <input style="display:none;" class="changebutton" index="${index}" type="button" value="${item.desc}"
  108. 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});'
  109. >
  110. --%>
  111. </ss:rpt>
  112. <%-- 修改支持更多按钮 by xu 20251211 --%>
  113. <ss-bottom-button
  114. more="moreChg"
  115. ></ss-bottom-button>
  116. <%-- 改成vue写法 Ben(20251211)
  117. <input id="morebutton" type="button" value="更多变动" class="bottom-button"/>
  118. <script>ss.display.attachButton("morebutton","changebutton");</script>
  119. --%>
  120. </ss:notEqual>
  121. <!--有多个变动 end -->
  122. </ss:equal>
  123. <!-- 删除按钮 start -->
  124. <ss:equal val='${empty deleteDest}' val2='false'>
  125. <%--
  126. <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>
  127. --%>
  128. <ss-bottom-button
  129. text="${deleteButtonValue}"
  130. onclick='ss.form.confirm("删除","是否删除?",function (){ss.form.submit({url:"<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>",targetWin:parent});},null)'
  131. <%-- onclick='ss.display.confirm("删除","是否删除?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");--%>
  132. <%-- form.setAttribute("action",--%>
  133. <%-- "<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>");--%>
  134. <%-- ss.display.submitToTopTab(button);form.submit();}})(this))'--%>
  135. icon-class="bottom-div-close"
  136. ></ss-bottom-button>
  137. <%-- <input id="deleteButton" type="button" value="${deleteButtonValue}"
  138. onclick='wd.display.confirm("删除","是否删除?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");
  139. form.setAttribute("action",
  140. "<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>");
  141. wd.display.submitToTopTab(button);form.submit();}})(this))'
  142. class="bottom-button"
  143. > --%>
  144. </ss:equal>
  145. <!-- 删除按钮 end -->
  146. <%-- 再增加 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。Start。Lin --%>
  147. <!-- 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。Start -->
  148. <ss:equal val='${empty delChildChgDest}' val2='false'>
  149. <ss-bottom-button
  150. text="${delChildChgButtonValue}"
  151. onclick='ss.form.confirm("删除","是否删除?",function (){ss.form.submit({url:"<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>",targetWin:parent});},null)'
  152. <%-- onclick='ss.display.confirm("删除变动","是否删除基本情况变动?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");--%>
  153. <%-- form.setAttribute("action",--%>
  154. <%-- "<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>");--%>
  155. <%-- wd.display.submitToTopTab(button);form.submit();}})(this))'--%>
  156. icon-class="bottom-div-close"
  157. ></ss-bottom-button>
  158. <%-- <input id="delChildChgButton" type="button" value="${delChildChgButtonValue}"
  159. onclick='ss.display.confirm("删除变动","是否删除基本情况变动?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");
  160. form.setAttribute("action",
  161. "<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>");
  162. wd.display.submitToTopTab(button);form.submit();}})(this))'
  163. class="bottom-button"
  164. > --%>
  165. </ss:equal>
  166. <!-- 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。end -->
  167. <%-- 再增加 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。End。Lin --%>
  168. <!-- 停用start -->
  169. <ss:equal val='${empty disableSubmitDest}' val2='false'>
  170. <ss-bottom-button
  171. text="${disableSubmitButtonValue}"
  172. onclick='ss.form.submit({url:"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",width:${disableSubmitwidth},height:${disableSubmitheight},minHeight:${disableSubmitminheight},maxHeight:${disableSubmitmaxheight},targetWin:parent});'
  173. <%-- onclick='ss.display.reset("dialog",this,"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",${disableSubmitwidth},${disableSubmitheight},${disableSubmitminheight},${disableSubmitmaxheight});'--%>
  174. icon-class="bottom-div-close"
  175. ></ss-bottom-button>
  176. <!-- <input type="submit" value="${disableSubmitButtonValue}" class="bottom-button"
  177. onclick='ss.display.reset("dialog",this,"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",${disableSubmitwidth},${disableSubmitheight},${disableSubmitminheight},${disableSubmitmaxheight});'
  178. > -->
  179. </ss:equal>
  180. <!-- 停用end -->
  181. <ss-bottom-button
  182. text="关闭"
  183. onclick='ss.display.closeDialog();'
  184. icon-class="bottom-div-close"
  185. ></ss-bottom-button>
  186. <%-- <input type="button" value="关闭" onclick="ss.display.closeDialog();" class="bottom-button"> --%>
  187. <%--
  188. ${param}
  189. --%>
  190. <%-- </div> --%>
  191. </div>
  192. </form>
  193. </body>
  194. </html>
  195. <script type="module">
  196. const data = {};
  197. if (window.SS.dom.formElemConfig) {
  198. Object.entries(window.SS.dom.formElemConfig).forEach(([key, config]) => {
  199. data[key] = config.val;
  200. // 处理 objPicker
  201. if (config.type === window.SS.dom.TYPE.OBJPICKER) {
  202. data[key + "ObjPicker"] = true;
  203. data[key + "Option"] = [];
  204. data[key + "Url"] = config.url;
  205. }
  206. // 处理datepicker
  207. if (config.type === window.SS.dom.TYPE.DATE) {
  208. data[key + "Mode"] = config.mode
  209. console.log(data[key + "Mode"]);
  210. }
  211. // 处理富文本编辑器
  212. if (config.type === window.SS.dom.TYPE.RICHTEXT) {
  213. data[key + "Url"] = config.val;
  214. data[key + "editor"] = config.val;
  215. }
  216. // 处理onoff
  217. if (config.type === window.SS.dom.TYPE.ONOFFBTN) {
  218. data[key] = config.val.split('|');
  219. }
  220. if (config.type === window.SS.dom.TYPE.IMG) {
  221. data[key + "showUrl"] = config.showUrl;
  222. data[key + "uploadUrl"] = config.uploadUrl;
  223. }
  224. });
  225. }
  226. // console.log("data",data);
  227. SS.ready(function () {
  228. if(ss.dom.formVmConfig)//加判断条件,页面有校验配置时,才运行下面的 Ben(20251206)
  229. for (let i = 0; i < ss.dom.formVmConfig.length; i++) {
  230. const item = ss.dom.formVmConfig[i];
  231. // 处理每个元素
  232. let rule = item.rule;
  233. let fieldArr = item.field;
  234. let param = item.param;
  235. let fieldValMap = [];
  236. for (let i = 0; i < fieldArr.length; i++) {//校验程序增加传入表单元素的值fieldValMap Ben(20260107)
  237. const field = fieldArr[i];
  238. fieldValMap[field] = window.SS.dom.formElemConfig[field].val;
  239. }
  240. window.ssVm.add(rule, fieldArr, param ,fieldValMap);//校验程序增加传入表单元素的值fieldValMap Ben(20260107)
  241. }
  242. // 在这里直接初始化,不需要等待 load 事件
  243. window.SS.dom.initializeFormApp({
  244. el: "#app",
  245. data(){
  246. return data;
  247. },
  248. methods: {
  249. onChange(value){
  250. // console.log(value)
  251. },
  252. myChange(value){
  253. // alert(value);
  254. // console('@@@myChange:'+value);
  255. },
  256. save(){
  257. $('form').attr('action','<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>');//name:${save},dest='${saveDest}',parm='${saveParam}'
  258. $('form').submit();
  259. }
  260. },
  261. mounted() {
  262. const self = this;
  263. // 在这里可以使用 Vue 实例
  264. Object.entries(this.$data).forEach(([key, value]) => {
  265. // 处理 CCPSINGLE
  266. if (key.includes('CCPSINGLE')) {
  267. const originalKey = key.replace('CCPSINGLE', '');
  268. const self = this;
  269. // 只有第一个字段需要自动加载
  270. if (this[originalKey + "InitLoad"]) {
  271. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  272. this[originalKey+'Option'] = result;
  273. })
  274. }
  275. // 绑定 change 事件
  276. this[originalKey + 'Change'] = async function(value) {
  277. const objP = self[originalKey + "objP"] || [];
  278. const currentIndex = objP.indexOf(originalKey);
  279. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  280. await doCascade({
  281. children,
  282. value,
  283. vm: self,
  284. loadData: (value) => getCcpsingleValue(children,value),
  285. });
  286. };
  287. }
  288. // 如果是 CCPSINGLE 类型
  289. if (key.includes('CCPMUTIPLE')) {
  290. const originalKey = key.replace('CCPMUTIPLE', '');
  291. const self = this;
  292. // 只有第一个字段需要自动加载
  293. if (this[originalKey + "InitLoad"]) {
  294. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  295. this[originalKey+'Option'] = result;
  296. })
  297. }
  298. // 绑定 change 事件
  299. this[originalKey + 'Change'] = async function(value) {
  300. const objP = self[originalKey + "objP"] || [];
  301. const currentIndex = objP.indexOf(originalKey);
  302. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  303. await doCascade({
  304. children,
  305. value,
  306. vm: self,
  307. loadData: (value) => getCcpsingleValue(children,value),
  308. });
  309. };
  310. }
  311. });
  312. }
  313. })
  314. });
  315. </script>
  316. <%--<script type="text/javascript">--%>
  317. <%-- tokenCleanser("<ss:serv name='ss.clearPageToken'/>", {tokenList:"<%= pageContext.getAttribute(ss.page.PageC.PAGE_tokenList)%>"});--%>
  318. <%--</script>--%>